Page MenuHomePhabricator

Proposal for Commons Android app
Closed, DeclinedPublic

Assigned To
Authored By
Pheonix10
Apr 8 2021, 4:54 PM
Referenced Files
F34317222: explore.png
Apr 10 2021, 5:09 AM
F34317111: blur image.png
Apr 10 2021, 4:34 AM
F34317109: crop.png
Apr 10 2021, 4:34 AM
F34315915: blur image.png
Apr 9 2021, 7:56 PM
F34315895: crop.png
Apr 9 2021, 7:56 PM
F34294460: diaupdate.png
Apr 8 2021, 4:54 PM
F34294278: diaedit.png
Apr 8 2021, 4:54 PM

Description

Proposal for Commons Android app

Project Repository: https://github.com/commons-app/apps-android-commons

GSoC Idea Link: https://github.com/commons-app/commons-app-documentation/blob/master/android/Students.md#task-ideas

About Me

I am a first-year Information Technology undergraduate student at Haldia Institute of Technology.
I am passionate about android development and I have been doing it for almost more than 1 year. I am an enthusiast about open source and love to learn and share. Since I get to know about open source I have been contributing to various open-source projects regularly. Thanks to GSOC and Wikimedia that I found this project and I found it very interesting. I think this project will be a great platform for me to learn a lot and I will give my 100% to contribute to this project.

Profile:

Name: Ayan Sarkar

Email: ayansarkar1810@gmail.com

Linkedin Profile: ayan-sarkar-44728a1a7

Github Profile: Ayan-10

Blogs on GeeksforGeeks: Articles

Location during GSoC: West Bengal, India (UTC +5:30)

Education: B.TECH In Information Technology at Haldia Institute of Technology

Typical working hours (include your timezone) during GSoC: Between IST 5 pm to IST 2 am

Relevant Skills:

Familiarity with Kotlin, Java, and C language

Android Development

Github and Git

Android UI design

Retrofit, OkHttp, Expresso, AAC

Unit testing for Android using JUnit 4 Framework

Understanding of using REST APIs

Activies

  • MEMBER OF GOOGLE DEVELOPER CLUB ( KOLKATA )

Possible Mentor(s)

Mentor: @Nicolas_Raoul (Nicolas Raoul)

Mentor: @Madhurgupta10 (Madhur Gupta)

Past Experience

Work Experience

  • WINNER OF HACKTOBERFEST 2020
    • Got merged 4 Pull requests. Contributed to various projects mentioned in other contributions ( Merged )
  • GEEKSFORGEEKS INTERN ( TECHNICAL CONTENT WRITER )
    • Responsible for writing technical blogs on various technical topics.

Personal Projects

  • Conduit App: Medium Website Clone - Make a clone of the renowned blog app Medium. To build this project used a backed API called realworld.io. In the app, you can login/sign up and write a blog, and read others' blogs.
    • Used Retrofit and Gson for API calls
    • Used Junit for tests
    • Used LiveData and ViewModel
    • Used Navigation Architecture
  • Sun Shine: Weather App - This app helps you see the weather forecast of your favorite cities.
    • API calls using volley library.
    • Notification
    • Used content provider.
  • Emojify App - This app can detect your face then classify it. According to your mood, the app can cover an emoji on your face.
    • used mobile vision library for face recognization
  • L.O.L: Meme Generator App - make a meme share app using API and volley and glide library.

Contributions For Commons App

Bug fixs:

Here you can see all PRs that I made.

PR NumberAbout Bug FixIssue NumberStatus
4315In Achievements for each of the help popups, it would be great to have a link that a wiki page that explains things much more deeply. So I added a link to each info button that shows an alert dialogue and there I add a READ ME button from where the user can open the following custom webpage.3433Merged
4333Fixed this issue with androidx.appcompat.widget.SearchView and rxBinding3 to show the searchview in lower API devices.4327Merged
4341Toggling the info on the fields in the achievement tab is difficult because the icons are so small. So I make the whole label clickable. Now users can anywhere in the label to see the dialog. I don't remove the icon because It will help the user to understand that the label is clickable..4318Merged
4323The help icon was getting invisible for small screen devices. After fixing, now the icon is visible for every device cause it's adjusting its lines instead of overlapping.3434Merged

Code Reviews:

PR NumberAbout ReviewIssue Number
4306Added before and after merge differences, found some minor code style mistake and java modifier issues4299

Issues:

Here you can see all issues that I created.

Issue NumberAbout IssueStatus
4320If GPS is not turned on and user click YES in the Turn on location dialog. It should turn on GPS directly instead of going to Settings like Google Maps.Open
4312There should be a back button on the top of ProfileActivity like in Settings and Review Activity and also the title bar is a little blank it can contain many featureOpen
4327On Nearby Fragment Place type SearchView is visible properly in higher API devices like API 27 but Place type SearchView is not visible properly in lower API devices like API 23.Closed
4335If the location is not available and user clicks to Exists and Needs Photo chip, it does not respond. In that state, if user clicks those chip it should show a Toast saying " Location not available ".Open
4343Elements of ReviewActivity is not visible to user in landscape. We should make a landscape layout for it.Open

Implementation

Describe what you will implement
I will implement some features from GSoC 2021 idea list of this project.

  • An activity for crop/blur pictures for privacy purposes Privacy is one of the most important parts of an app. In this current state, user can upload pictures but if they want to hide some places of a picture it can't be done. Users may want to crop out a passer-by, blur a car's number plate or faces, or may anything related to privacy. In the current state of the app, If the user wants to hide something they have to take a picture and edit with any other editing app or software. So I will implement a new activity from where user can edit images if they want. Mainly user can crop out something or blur some portion of the image. The edit button can be implemented in UploadActivity from where a new activity will open where user can edit and after editing they can upload the new image. The new image URI will be replaced with the old image URI in and also the app will be posting the new image on the server. Rotate feature is not the task list. But I think sometimes user may need to rotate the image. So If I get some extra time in GSoC I will implement a rotate feature also otherwise I will implement rotate feature after GSoC ends.
  • Edit uploaded pictures:Edit title/description, add depictions, add coordinates At the current state, after uploading contributions user can not edit them. The edit feature is only available for categories. But It should be available for
    • Title
    • Description
    • Depicts
    • Coordinates

      Because user may want to edit any wrong information or any missing information, which is too much important for this app. So that the app becomes less error-prone and more informative and user-friendly. So an edit button can be implemented for each above-mentioned item in MediaDetailFragment. If user can click the edit button, then edit and upload the current information in place of old information. By clicking the upload button the current formation will be posted in the server in place of the old one by Wikimedia API.
  • Issue Number: 4312 At the current state of the app in ProfileActivity title bar is blank and it's giving a very awkward look in the app as compared to other screens. There are many things we can do with the black space. Even the activity doesn't have any back button. So I will set a back button in this activity. As I discussed with the mentor we think the title bar should display username. I can put the username in the title bar and also we can make the app more user-friendly. So I will add a share button that will allow the users to share their achievements with the world and engage more people.
  • Issue Number: 4320 At the current state of the app in Nearby Fragment when user clicks to recenter button if at that time device GPS is off. The app shows a dialog and the dialog leads the user to settings menu to turn on the mobile GPS. But I think we can improve that feature. Like Google Maps when device GPS is not turned on. Maps show an alert from where we can directly turn on GPS directly without going to the settings activity. It will be more efficient.

How can it be implemented?

  • An activity for crop/blur pictures for privacy purposes In the current state of the app, MainActivity calls handleActivityResult and FilePicker.handleActivityResult pick images from camera/gallery and put the image URIs in a class called UploadableFile. After that, the List<UploadableFile> was sent to UploadActivity from where the rest of the work happens for each UploadableFiles more specifically URIs. I will implement an edit button on UploadActivity from where a new Activity will open where each URI of UploadableFile can be cropped or blurred and modify the List<UploadableFile> with new URIs by replacing old ones and also display edited images in UploadActivity. Then UploadActivity will run as it is.
    • Crop: For crop I will be using Ucrop library. It's a well-maintained library for cropping images. I will take the image URI from UploadableFile and crop it. I will also design the UI of this Activity according to App Theme. OR I can implement the whole crop feature also.
    • Blur: I thought about the idea to do it which I think is more efficient is that I will store some blur or pixel blur images in the asset folder. The blurry assets will be of different sizes like oval, circle, square, rectangle. Users can pick those assets from a drop bottom-up menu and resize the picked asset and put the asset on that part of an image that is hidable according to user and make a new image URI with the added asset. We will do everything converting into a bitmap. Thus A new image URI we will get with blurred image.
    • Rotate: I will use BufferedImage class in java to rotate an image.

Adding a Flowchart to describe the tentative workflow.

diaedit.png (572×566 px, 31 KB)

  • Edit uploaded pictures:Edit title/description, add depictions, add coordinates I will edit or add title/description, coordinates and depictions and display them in layout and also send them to the server using existing APIs. The way of adding title/description or coordinates and adding depictions are different which is described below.
    • Add depictions: First I will add an edit button beside depictions in MediaDetail layout. Then I will populate an update screen where I put a searchView and RecyclerView from where user can pick suitable depictions by searching and filtering and update them on screen and server. The searching and filtering process will be done in MediaDetailFragment. In onResume I will call an existing function displayMediaDetails. From where with mediaDataExtractor will do
.subscribeOn(Schedulers.io())  
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::onDepictsRefreshed, Timber::e)

In onDepictsRefreshed I will call setupDepicts from here I will filter and set selected depicts and then after clicking the Update button. From MediaDetailFragment I will update categories with help of DepictsEditSeearchRecyclerViewAdapter and DepictsEditHelper I will update new depicts. I attached tentative workflow below.

  • Add title/description, coordinates: Add edit button in MediaDetail layout for each editable item. From where the items can be edited. Title/description, coordinates are all strings so user just edits the string s their preference. I will take those edited string and replace with old strings. And also post the new media API call with existing APIs to the server with replaced string. One thing I have to do that Title can't be blank for any media object. So if user puts a null or empty string I will handle that situation.

    Add depicts flowchart:
    diaupdate.png (768×538 px, 40 KB)
  • Issue Number: 4312 So I will set a back button in this ProfileActivity. As I discussed with the mentor we think the titlebar should display username. From MoreBottamSheetFragment I will send an intent with username and set the username in a text field of the titlebar. I will add a share button that will allow the users to share their achievements with the world and engage more people.
  • Issue Number: 4320 I will use LocationRequest class. I will create and build the location request. also, create a task of locationSettingsResponse. Add an onCompleteListener and get a result. If GPS not on I will show a dialog to turn on location. Thus we user can able to turn on GPS directly.

Mockups

Tentative mockup for crop:

crop.png (1×1 px, 1 MB)

Tentative mockup for blur:

blur image.png (1×1 px, 1 MB)

Tentative feagment_media_detail.xml:

explore.png (1×1 px, 251 KB)

Timeline

TimeframeStart DateEnd DateTask
Community Bonding PeriodMay 17, 2021June 7, 2021Getting involved with organization and mentors, Getting a depth knowledge of RxJava and Wikimedia APIs, Brushing up on testing skills. Getting more Familiarized with the project structure, Read Documentation, and Code of Conduct once again. I will learn everything that will help me to contribute here in this period.
Week 1June 7, 2021June 14, 2020Create UI of EditActivity .
(SubTask)7-June-202110-June-2021Disscuss and Complete the EditActivity UI
(SubTask)10-June-202112-June-2021Add two tabs in EditActivity for crop and blur.
(SubTask)13-June-202113-June-2021Link the EditActivity with UploadActivity via a button.
(SubTask)14-June-202114-June-2021Test the implementation till now.
Week 2June 15, 2021June 21, 2021Implement Crop Feature.
(SubTask)15-June-202119-June-2021Implementation of crop feature
(SubTask)20-June-202121-June-2021Test crop feature and bug fix.
Week 3June 22, 2021June 28, 2021Implement Blur Feature.
(SubTask)22-June-202126-June-2021Implementation of blur feature
(SubTask)27-June-202128-June-2021Test blur effect and bug fix.
Week 4June 29, 2021July 5, 2021Adding created newly edited image in API call, Finishing of Edit feature.
(SubTask)29-June-20212-July-2021Creating new images, replace them into uploadedfiles, display them and post API call, Finish implementation of the whole Edit
(SubTask)3-July-20214-July-2021Write Test for this feature
(SubTask)4-July-20215-July-2021Test the overall edit feature and bug fix
Week 5July 6, 2021July 11, 2020Fixing Issue Number: 4312 and 4320 .
(SubTask)6-July-20217-July-2021Direct GPS on implementation
(SubTask)7-July-20219-July-2021Add back button, fetch username, and add share feature
(SubTask)10-July-202111-July-2021Test implementation and bug fix
Week 6July 12, 2021July 19, 2021UI of Updates
(SubTask)12-July-202116-July-2021First Evaluation
(SubTask)12-July-202016-July-2020Discuss and Complete UI of all edit screens
(SubTask)17-July-202019-July-2020Test of the implementation and bug fix
Week 7July 20, 2021July 26, 2021Implement Update Depicts.
(SubTask)20-July-202124-July-2020Implement classes and Adapters for depicts and make the API call with existing post functions
(SubTask)24-July-202126-July-2021Linking the UI with update depicts and display changes
Week 8July 27, 2021August 2, 2021Tests Depicts and other updates
(SubTask)27-July-202129-July-2021Write Tests for Depicts Update
(SubTask)30-July-202131-July-2021Tests for Depicts and bug fix
(SubTask)1-August-20212-August-2021Started work on other updates UI
Week 9August 3, 2021August 9, 2021Finish All Update Feature
(SubTask)3-August-20216-August-2021Take the new string from user for title/description, coordinates and replace old data with new one and update by doing the API calls with existing post functions
(SubTask)7-August-20218-August-2020Write tests using JUnit
(SubTask)8-August-20219-August-2021Tests for this implementation and bug fix
Week 10 FinalAugust 10, 2021August 16, 2021Finish all over tasks and bug fixes
(SubTask)10-August-202113-August-2021Overall Tests
(SubTask)14-August-202116-August-2021Remaining Bug fix and suggestions
(SubTask)16-August-202023-August-2020Final Evaluation

Availability

  • Are you eligible for Google Summer of Code?

    Yes, I am eligible for Google Summer of Code.
  • Do you plan to submit any other proposal apart from this one?

    No, I am only submitting this proposal.
  • Do you have any other plans during the period of GSoC?

    No, I don’t have any other plans during the period of GSoC. I was selected for Girlscript Summer of Code 2021 but It will be over before GSOC starts. I haven't any examinations during the GSoC period and also I am not applying for any other program. Google Summer of Code is the topmost priority for me.
  • How many hours per week can you dedicate to this?

    I will dedicate as much as need. Minimum 20-30 hours each week I will definitely give but I am willing to dedicate more if needed.
  • Have you been accepted to GSoC before?

    No, I have never been accepted to GSOC before.

Participation

  • What is the current state of the App/Project?

    User around the world can upload images and information about images in the app and there is a leaderboard section where people can see their contribution compare to others. But now in this app, there is a little privacy issue before uploading images people can't edit that image which is a privacy concern for users which is very crucial and also there is no way to correct or update wrong or misguiding information about any image.
  • What is your goal for this GSoC Task and how will it benefit Wikimedia projects?

    The goals are to make an edit screen for user where user can edit their images before uploading and also edit any uploaded wrong information for an image and also make some enhancement in the app. User can get a more satisfying experience from the app after this contribution and the biggest benefit of being able to edit pictures before upload is it will improved image searchability.

Involvement

  • Why you want to contribute to this project?

    After I found the organization I absolutely loved the way this community works. Community members are so helpful and generous to everyone. I am going to learn and gain experience so much from this project and can come up with new ideas. Other than that I found this project very interesting. So I want to mention that I already go through the codebase and project structure in where I want to contribute related to what I want to contribute in this project as you can see in the implementation section in the proposal.
  • What does open-source mean to you?

    Open Source is a platform for learning. People say "learning while doing" is the best way to learn and Open Source is the way to do so. It helps to challenge yourself and helps to get that potential out of you. It gives a lot of exposure to a student. It also helps to build a great community and helps to promote diversity. It's a way to learn and give it back to the community by contributing and helping others.
  • What does GSoC mean to you?

    For me, GSoC is a platform to learn and gain experience and also give something to the community, and also GSoC is not just about selection. It's more than that. It's about staying with the organization even after GSoC ends and give my 100% to complete tasks that I committed to do and also I can get to learn new things so much here.

Event Timeline

Restricted Application added a subscriber: Zabe. · View Herald TranscriptApr 8 2021, 4:57 PM

Thanks for this very well-written proposal, especially the implementation part is great!
The tasks are rather ambitious, but your technical implementation details and your timeline are convincing.

Minor notes:

  • "The upload feature is only available for categories" : I guess you meant "The edit feature"?
  • In "how will it benefit Wikimedia projects", I would say that the biggest benefit of being able to edit pictures after upload is improved image searchability.

@Nicolas_Raoul Thank you so much for the feedback, I have made the changes as your feedback. Please let me know if anything else needs to be improved.

I have a question also. Should I submit this phabricator proposal link to the GSoC portal in the final submission or I have to make another PDF to submit my proposal in the GSoC portal?

@Pheonix10 Thanks!

@srishakatux Sorry would you have an answer to this question?

Should I submit this phabricator proposal link to the GSoC portal in the final submission or I have to make another PDF to submit my proposal in the GSoC portal?

Hi,

First feedback from my side:

  • Add typical working hours along with your timezone
  • Please add the end date of the Girlscript Summer of Code 2021
  • Add a link to view all your issues, also for other repo PRs (if any)
  • Do mention the Unit Testing Libraries or frameworks you will be using/you are familiar with.
  • You can add UI mockups if you have prepared any (not needed otherwise)

@srishakatux Sorry would you have an answer to this question?

Is that covered by bullet points 11 and 12 on https://www.mediawiki.org/wiki/Google_Summer_of_Code/Participants ? If it isn't, could you clarify / elaborate please?

@Madhurgupta10 Thank you for the feedback, I have made the changes as your feedback. I am making UI mocks I will put them as soon as possible and In the Relevant Skills, I write that Testing for android using Expresso. Do I need to mention it again in the Timeline section?

@Aklapper Thanks for sharing the link. I got my answer.

@Pheonix10 Espresso is used to write Instrumentation Tests, not Unit Tests! Read this article for more details Thanks! https://www.vogella.com/tutorials/AndroidTesting/article.html

@Madhurgupta10 Thank you so much for sharing. I will definitely brush up on my testing skills.

Hey @Pheonix10

Thanks for showing your interest to participate in Google Summer of Code with Wikimedia Foundation! Please make sure to upload a copy of your proposal on Google's program site as well in whatever format it's expected of you, include in it this public proposal of Phabricator before the deadline i.e April 13th. Good luck :)

Hey @Gopavasanth , Sure, I will do that. Thank you so much for your concern and goodwill.

Pheonix10 updated the task description. (Show Details)

GSoC application deadline has passed. If you have submitted a proposal on the GSoC program website, please visit https://phabricator.wikimedia.org/project/view/5104/ and then drag your own proposal from the "Backlog" to the "Proposals Submitted" column on the Phabricator workboard. You can continue making changes to this ticket on Phabricator and have discussions with mentors and community members about the project. But, remember that the decision will not be based on the work you did after but during and before the application period. Note: If you have not contacted your mentor(s) before the deadline and have not contributed a code patch before the application deadline, you are unfortunately not eligible. Thank you!

@Pheonix10 ​We are sorry to say that we could not allocate a slot for you this time. Please do not consider the rejection to be an assessment of your proposal. We received over 100 quality applications, and we could only accept 10 students. We were not able to give all applicants a slot that would have deserved one, and these were some very tough decisions to make. Please know that you are still a valued member of our community and we by no means want to exclude you. Many students who we did not accept in 2020 have become Wikimedia maintainers, contractors and even GSoC students and mentors this year!

Your ideas and contributions to our projects are still welcome! As a next step, you could consider finishing up any pending pull requests or inform us that someone has to take them over. Here is the recommended place for you to get started as a newcomer: https://www.mediawiki.org/wiki/New_Developers.

If you would still be eligible for GSoC next year, we look forward to your participation