Transform picture (crop/rotate/etc) within the app
Profile :-
Name: Rishav Gupta
Email: rishavgupta933@gmail.com
Education: B-tech (CSE) 2nd year student , Gurunanak Institute of Technology
Linked-in: Rishav Gupta
GitHub : Rishavgupta12345
Other communication modes: Hangouts, discord, Zulip, Slack.
Location during GSoC: kolkata/West Bengal, India
Synopsis:
App
Wikimedia Commons is an Android app by the Wikimedia Foundation that allows users to browse and upload pictures to the Wikimedia Commons repository from phones/tablets. Users can select images from the gallery or directly from the camera for an upload.
Project:
The project is about implementing a feature that allows the user to transform pictures (crop/rotate/etc) within the app.
Issue link: https://github.com/commons-app/apps-android-commons/issues/1192
Implementation:
To be implemented :-
- Feature that allows the user to transform pictures (crop/rotate/etc) within the app :- While uploading any image in Wikimedia the user will be given an edit option where the user can edit the picture according to the need.
- Procedure :- 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.
Mock UI :-
Screen 1 :
While uploading the photo a new EDIT button will be added, clicking on which all the required edit features will be visible to the user
Screen 2 :
Example of all the features which will be displayed to the user for editing the photo
a) Crop feature :
For crop I will be using LLJTran MediaUtil API library. It's a well-maintained lossless 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.
b) Rotate feature :
I will use LLJTran LLJTran MediaUtil API to rotate an image 90 degrees.
c) Blur feature :
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.
Further implementation :-
I will discuss with the mentors about the other features like contrast, EXIF, etc which they want to be implemented in the app. And implement them in the app according to their need.
Mentors :
@Nicolas_Raoul
@Madhurgupta10
@AdityaSrivastav2009
Timeline :
Timeframe | Period | Task |
Community Bonding Period | May 20, 2022-June 12, 2022 | Get to know mentors and community, Reading the documentation, Familiarize with app structure, Reading about Commons API. |
Deliverable | Community bonding report, Blog | |
Week 1 | June 13, 2022-June 19, 2022 | Create UI of EditActivity . |
(SubTask) | Discuss and Complete the EditActivity UI | |
(SubTask) | Add three tabs in EditActivity for crop,blur and rotate. | |
(SubTask) | Link the EditActivity with UploadActivity via a button. | |
(SubTask) | Test the implementation till now. | |
Week 2 | June 20, 2022-June 29, 2022 | Unavailable due to exams |
Week 3 | June 30, 2022-July 6, 2022 | Unavailable due to exams |
Week 4 | July 7, 2022-July 13, 2022 | Implement Crop Feature. |
(SubTask) | Implementation of LLJTran MediaUtil API | |
(SubTask) | Implementation of Crop Feature. | |
Week 5 | July 14, 2022-July 20, 2022 | Test crop feature and bug fix. |
(SubTask) | Test of the implementation | |
(SubTask) | Bug fix. | |
(SubTask) | Blog post | |
Week 6 First Evaluation. | July 21, 2022-July 27, 2022 | UI of Updates |
(SubTask) | First Evaluation | |
(SubTask) | Discuss and Complete UI of all edit screens | |
(SubTask) | Test of the implementation and bug fix | |
Week 7 | July 28, 2022-Aug 3, 2022 | Implement Blur Feature. |
(SubTask) | Implementation of blur feature | |
(SubTask) | Test blur effect and bug fix. | |
Week 8 | Aug 4, 2022-Aug11, 2022 | Implement Rotate feature |
(SubTask) | Implementation of LLJTran MediaUtil API | |
(SubTask) | Implementation of Rotate feature | |
Week 9 | Aug 12, 2022-Aug 19, 2022 | Test rotate feature and bug fix. |
(SubTask) | Test of the implementation | |
(SubTask) | Bug fix | |
Week 10 | Aug 20, 2022-Aug 27, 2022 | Implement Update Depicts (Bonus - if time allows) |
(SubTask) | Implement classes and Adapters for depicts and make the API call with existing post functions | |
(SubTask) | Linking the UI with update depicts and display changes | |
(SubTask) | Started work on other updates UI | |
Week 11 | Aug 28, 2022-Sept 4, 2022 | Finish All Update Feature |
(SubTask) | Take 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) | Write tests using JUnit | |
(SubTask) | Tests for this implementation and bug fix | |
(SubTask) | Writing proper documentation | |
Week 12 Final Evaluation. | Sept 5, 2022-Sept 12, 2022 | Finish all over tasks and bug fixes |
(SubTask) | Overall Tests | |
(SubTask) | Remaining Bug fix and suggestions | |
(SubTask) | Finishing up documentation | |
(SubTask) | Overall Blog post | |
(SubTask) | Final Evaluation | |
Note :-
This year GSOC allows the student to extend the 12-week program to a 22-week program if allowed by the mentor of the organization. So, I would like to further implement the contrast, EXIF hiding features if possible.
About Me :
I'm Rishav Gupta, a sophomore studying Computer Science and Engineering at Gurunanak Institute of Technology in India (expected 2024). I am an active member of my college's BitByte Coding club. My interest in Android development grew as I progressed through college. In addition, I worked on a variety of self-made and open source projects. This aided me in gaining a thorough understanding of the subject.
I enjoy singing and listening to music. Photography and photoshop experiments are two of my favorite pastimes. In my spare time, I enjoy reading self-help books and solving Rubix cubes.
Availability :
- Are you eligible for Google Summer of Code ? I’ve read the eligibility criteria and I am eligible to apply 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 ? Yes, I will have my 4th-semester exams in June, so I might miss 10-12 days.
- How many hours can you dedicate to this ? I’ll be able to give 40+ hours per week. If required I can put in more time to finish up the goals for the week.
- Have you been selected to GSoC before? No, this is my first time participating in GSoC.
What Excites me about this project:
Photography is one of my greatest passions, and photoshop is one of my favorite pastimes. That is the primary reason I contribute to WIKIMEDIA and chose it as my GSoC project. Wikimedia is all about media and photographs, which is exactly what I am interested in. As a result, the project to include photo transformation and editing within the app is the perfect match for my interests and abilities.
Why should I be selected for the project :
- Skill :- Android development is a hobby of mine. I've spent a lot of time working on Android projects and am well familiar with its architecture. I am well-versed in the Java/Kotlin programming language and am conversant with the latest Android technology. In Android, I am familiar with the API and caching. I've built an app using a professional MVVM architecture and am familiar with the Jetpack libraries. I know Datastructures and Algorithms (DSA) and Databases and Management Systems (DBMS) because they are part of my degree curriculum. In addition, I am a Photoshop expert. As a result, I believe I possess the ideal set of skills for this project.
- Knowledge:- Since January 2022, I've been working on the Commons Android project. To make the project repository clearer, I fixed a lot of issues, reported a few, assisted maintainers with reviews, and cleaned up 50+ old issues.
Past Experience :
I’ve worked on many Android applications and is learning Android dev for a year now. I’ve contributed and collaborated on several open-source projects. I am familiar with git, GitHub, and version control.
- PROJECTS :
- Minesweeper - developed a minesweeper Android game.
- Music player - An app to play the songs on your phone
- WINNER OF HACKTOBERFEST 2021 :
- Got merged 4 Pull requests. Contributed to various projects.
- WINNER OF IIT KHARAGPUR WINTER OF CODE 2021 :
- Worked on different projects under IIT Kharagpur and merged 4 pull requests.
Relevant Skills
- Familiar with Android architecture components
- UI design in Android.
- Android SDK.
- Jetpack library.
- GitHub and git Version control.
- Unit Tests in Android.
- Can work on both JAVA/KOTLIN
Contributions to Wikimedia Commons
PULL REQUESTS
- Total = 11
- Merged = 9
- Open = 2
PR LINK | TITLE | STATUS | MY LEARNING |
#4873 | Copyright warning for beta flavor | merged | adding popup feature was something I learnt new while solving this issue |
#4882 | Add link to user guide in About | merged | learned about adding hyperlink into the app |
#4863 | The empty screen while no images found in custom picture selector | merged | this issue made me struggle a lot but was simple and taught me never to give up |
#4884 | The empty screen while no images found in custom picture selector [bug] | merged | test failed from above pull request , entirely a new experience, I learned the importance of UnitTesting |
#4860 | could be success could be failure | merged | small mistake in a string can make a entire app Un-functional |
#4890 | [Bug]: UnknownFormatConversionException: Conversion = 'এ' | merged | again a small string mistake made the app unfunctional, solved easily |
#4789 | Fix warnings for ImageFileLoader.kt | merged | fixing warnings using the Android studio suggestion itself |
#4899 | Prod/beta flavor messages may be nonsense for users | merged | added quality information for users |
#4915 | Improve review feature documentation | merged | got some insights about showing popup dialog |
#4920 | Replace toasts with snackbars where appropriate | open | got to know about the working of snackbars |
#4766 | Make the app more accessible - content description | open | use of adding content discription |
ISSUES CREATED
ISSUE LINK | TITLE | STATUS |
#4887 | Clear the old issues in this repository | open |
#4894 | [Bug]: language Bengali has many string problems | open |
OTHER TASK
This is an entirely distinct type of contribution that one can make to an organization. While looking for issues to work on, I discovered that WIKIMEDIA's current repository is clogged with obsolete and irrelevant issues. When I first started working, there were 550+ issues. As a result, I decided to alert our organization's mentors about them so that they could review and close those issues. And I was able to resolve approximately 45+ issues.
- Links :-
#4498 , #4709 , #4459 , #4443 , #4594 , #3066 , #3917 , #3607 , #2919 , #2836 , #4398 , #4866 , #4598 , #4307 , #4388 , #4269 , #4234 , #4131 , #3956 , #3987 , #3394 , #2950 , #2920 , #2910 , #3247 , #3208 , # 2785 , #4676 , # 3871 , #4670 , #3777 , #3246 , #2002 , #2747 , #2891 , #3123 , #3204 , #3431 , #3663 , #3866 , #3907 , #3951 , #3968 , #4209