= Profile Information =
Name: Nahid Fatma
Email: nfatmarkl@gmail.com
College: College of Engineering and Technology, Bhubaneswar
Github UserName: nfatma
Twitter: @NAHID04087158
Other Communication Medium: Gitter, Google Hangouts
Location: Bhubaneswar, Odisha, India(UTC + 5:30)
Typical Working hours : 10pm to 6am UTC + 5:30
= Synopsis :=
**About the app:**
The Wikimedia Commons Android app allows users to upload pictures from their Android phone or tablet to Wikimedia Commons. Wikimedia commons accepts only freely licenced media files (that are not subject to copyright). Commons is an independent project that seeks to document the world with photos, videos, and recordings.
**About the project:**
The goal of this project is to add a leaderboard based on user's edits using Commons. The feature will include only edits made with the mobile app, and users who have shown interest in this activity will be listed on it .
**Why is this feature needed? **
To drive the interest of the users towards this app and to motivate them for uploading quality and quantity pictures and to reduce the temptation to "cheat" (for instance by uploading 1000 pictures of the same spoon) as they will be watched by their peers.
**What to implement?**
- Update UI of achievements activity to display level (current activity) in first tab and Leaderboard in second tab (based on uploads).
- Display user's Avatar and rank on Leaderboard screen fetched from API.
- Use the APIs to fetch leaderboard (user list) based on uploads via mobile app (all time) and display it in Leaderboard screen.
- Add pagination in the leaderboard screen to load more users on scrolling down.
- Add duration filters in leaderboard screen and show results based on selected filter (weekly, monthly, yearly, all time). Change the UI to show and select filter.
- Change the UI to show 3 different results (based on uploads, nearby, used). - add 2 more tabs
- Tapping the name of a user in the leaderboard should open the gallery of that user's pictures, probably as a browser URL for now.
- Write unit tests , documentation, fix bugs and Release (at least in alpha) - (2 weeks)
- Add option for users to change Avatar, Store user's Avatar in cache for a month.
**How it can be implemented?**
I. Updating the UI of AchievementsAcivity
- The Achievements screen will contain two tabs one for the achievements and other for the leaderboard. Each tab will open up a new fragment.
II. Fetching information from the API:
- Fetch and display the user's avatar and rank (which will be calculated server side) on the leaderboard screen.
- Fetch and display the list of users (who have opened the achievements activity at least once) with their avatar and rank based on uploads from mobile app only using Recycler View.
- The name of the user will be highlighted within the list.
III. Storing the fetched result:
- Cache all users score for one hour.
- For users who upload frequently (more than once within an hour) and keep looking at the Leaderboard, their scores will be cached at intervals of less than one hour.
III. Adjusting the length of the Leaderboard screen:
- The length of leaderboard screen will be dynamic to adjust the user's rank.
- Pagination to be added to load more users on the event of scroll down.
IV. Add duration filter
- To show results based on selected filter (weekly, monthly, yearly, all time), add a floating filter button at the top right corner of the screen. On touch event of the button a pop-up menu will be shown to select the duration.
- Every time the user opens the Leaderboard, the result will be displayed according to the last selected duration using Shared Preferences.
V. Change the UI of Leaderboard screen:
- Leaderboard screen will contain three tabs namely- uploads, nearby and used. Each will open up a Fragment and display the rankings based on the selected category.
- List of different users can be obtain in different categories by using query manipulation while fetching the information from the API.
VI. Gallery of the Users in the Leaderboard:
- On the Tap event on a user's name will open its gallery in the browser using browser intent.
VII. Debugging the implemented feature:
- Write Unit test on the implementation.
- Request beta testers to test the implemented features and get feedback
- Solve issues and do proper documentation.
VIII. Add option for users to change avatar:
- The users will be able to change their avatar that will be stored in cache for a month.
- This option could be a privilege to unlock (only users who are above level 5 for instance).
=Mentors: =
@Ujjwalagrawal17
@maskaravivek
=Timeline:=
| Period | Task | Deliverables
|---------|-------|---------------
|20th May – 26th May (1 week)|Community Bonding Period: Communicate and bond with students and mentors, open new issues for the project, get familiar with the API, app’s architecture and AchievementsAcivity. Make Achievements screen include two tabs one for the achievements and other for the Leaderboard.| Community bonding report and blogs about the experience and app architecture. UI of the Leaderboard screen.
|27th May – 9th June (2 weeks)| Fetch and display the user's avatar and rank on the leaderboard screen. Fetch and display the list of users with their avatar and rank based on uploads from mobile app only in a Recycler View with the user’s name highlighted.| Leaderboard showing user’s avatar and rank. Leaderboard showing the list of users with their avatars and rank with user’s name highlighted.
|10th June – 16th June (1 week) | Caching all users score for one hour. For users who upload frequently (more than once within an hour) and keep looking at the Leaderboard, caching their scores at intervals of less than one hour.| Caching of user’s rank and avatar.
|17th June – 30th June (2 weeks)| Making the length of the Leaderboard screen dynamic. Adding pagination to load more users on scroll down. Code clean up.| Users list features with dynamic scrolling.
| |MID EVALUATION
|1ST July – 7th July (1 week)| Add duration filter to show results based on selected filter (weekly, monthly, yearly, all time) done by adding a floating filter button at the top right corner of the screen. On touch event of the button a pop-up menu will be shown to select the duration. The selected duration will be stored via shared Preferences and results will be shown accordingly next time when the user opens Leaderboard screen.| Filter option added with a duration select button. Results to be displayed according to the selected duration. Selected duration to be saved via shared Preferences.
|8th July – 21st July (2 weeks)| Change the UI of Leaderboard screen Leaderboard screen to include three tabs namely- uploads, nearby and used. Each will open up in a Fragment and display the rankings based on the selected category. This will be done via query manipulation while fetching the information from the API.| Changed UI with new tabs of categories uploads, nearby and used. Results displayed according to the selected category.
|22nd July – 28th July (1 week)| By tapping on a user's name one can open its gallery in the browser this will be implemented using browser intent. Code clean up.| User’s gallery opens in browser by tapping on the user’s name.
|29th July – 11th Aug (2 weeks)| Debugging the implemented feature by writing Unit test of the implementation. Requesting beta testers to test the implemented features and to get and reflect on feedbacks received. Fix the bugs and do a proper documentation.| Documentation of the modules. Unit test for categories and bug fixing.
|12th Aug – 20th Aug (1 week)| Adding an option for users to change avatar. The users will be able to change their avatar that will be stored in cache for a month. Making this option available a privilege to unlock (only users who are above level 5 for instance). Code clean up.| Certain users who unlocked the privilege can change their avatars.
| |FINAL EVALUATION
=Other Deliverables:=
- Weekly reports and blog.
=Participation:=
- I will work on a separate branch on git and will upload code to the forked repository daily and be creating pull request whenever a feature has been implemented.
- I will remain online on IRC, Hangout during my working hours (10pm to 6 am UTC + 5:30)
- During my non-working hours I can be contacted via email or hangouts.
- During the testing and debugging period, I will request the beta testers to test the app and get feedback from the community.
- I will write Weekly Blogs at [[ https://nfatma.home.blog/ | Wordpress ]]
- I will share my blogs on Twitter.
- I am willing to shift and extend my working hours if required.
- I will submit a Project Presentation.
=About me:=
**Education and Interest**
I am pursuing B-tech in Computer Science at College of Engineering and Technology, Bhubaneswar. I spent the first and second year of my college exploring the different fields and branches of computer science along with participating in Competitive coding and Hackathons. I started Android Development with a keen interest in my third year and currently continuing. Apart from this I love to write poems.
**How did you hear about this program?**
From one of my seniors, Miss Manaswini Das who is an alumina of Outreacy 2018.
**Will you have other commitments during the duration of this program: **
I am willing to devote my whole attention and time to this project as I don't have any prior commitments, also as this program is during my summer semester gap, so I won't be having any time conflict between the program and my college.
**Describe which Google Summer of Code communities and projects you are applying for, and provide mentor contact information: **
No, I am not applying for GSOC. I am applying for Outreachy only under this project.
**What does making this project happen mean to you?**
Wikimedia is a global movement whose mission is to bring free educational content to the world, what can be more influencing than this to person who wants to develop something that can help the society. Being a part of this project will definitely help me in gaining new skills and knowledge from the excellent community members and I want to contribute the same amount to the Wikimedia community. The concept of "documenting the world with images and recordings" thrills me, I can think of the time when people will know every corner of the world via this project. It would definitely be great if I could apply my skills in such an amazing project and organization.
**Past Experience and relevant projects done**
**1. Android App Developoment**
i. [[ https://github.com/nfatma/NovApp | NovApp ]]
This application was an introduction for me to the Android world that I build during my learning period of Android app development in the month of November. This app contains all the basic elements of an android app such as different types of layout, views, buttons, shared Preferences, Intent, events, Api calling, SQLite database, firebase etc. I use this project to keep the record of all the new things that I learn about Android app development.
```
While building this app I learned how make UI, Call APIs, work with SQLite database, different types of views and Intents.
```
ii.[[ https://github.com/nfatma/Dispatch | Dispatch ]]
It is an android application that displays daily news. One can read news related to the selected country and searched keywords.
```
During its development I learnt the use of Retrofit and Picasso libraries along with the use and benefits of Recycler View and URI.
```
//iii. HitechMall//
Aim of this android based application is to increase footfall in a mall. This can be done by keeping the current users engage and encourage them to invite their friends to install the application too. The registered users of this app will be able to view all the different shops, restaurants, movie halls and their respective location in the mall, discounts, offers and services. This app is currently evolving and is under testing.
```
Through this project I learned the importance of UI and UX, integration of API and Realm database.
```
*This project is under the supervision of a private startup company.
**2. Web App Development**
i. [[ https://github.com/iamsid2/WorkExo | WorkExo ]]
This was the project I got selected for Smart India Hackathon 2019, it's a web based software which is highly customizable for micro and small scale industries to manage their workers allotment, work or time line allotment, management of deadlines, monitoring the work flow, keep track of performance and analyze to predict the future trends in a company.
```
Through this project I learned about different algorithms including pipeline concepts, chart.js and Data Analysis.
```
= Contribution to Wikimedia commons App =
While contributing to the app, I learned how important it is to understand the project’s code and architecture for its successful completion. It was a great experience and I am looking forward for more such contributions.
//Pull requests://
Add "use previous title/desc" option to new upload screen (2.9) issue no : #2035
Github link: [[ https://github.com/commons-app/apps-android-commons/pull/2713 | pull request ]]