GSOC proposal 2021 - ankidroid/Anki-Android GitHub Wiki
AnkiDroid is a free Android flashcards app which makes remembering things easy.
It is spaced repetition software for Android. Because it's a lot more efficient than traditional study methods, you can either greatly decrease your time spent studying, or greatly increase the amount you learn.
Anyone who needs to remember things in their daily life can benefit from Anki. Since it is content-agnostic and supports images, audio, videos and scientific markup (via Mathjax or LaTeX), the possibilities are endless.
For example:
- Learning a language
- Studying for medical and law exams
- Memorizing people's names and faces
- Brushing up on geography
- Mastering long poems
- Even practicing guitar chords!
We are proud to have 4.8 stars on the play store, and 2 million active installs (as of January 2021). It has an active community of developers, with 34 contributors to code in 2020, two new maintainers, and even new language translations. Many of the contributors did their first android programming with AnkiDroid and we are always happy to help someone learn how to contribute, independent of Google Summer of Code.
You may reach us on the discord #dev-ankidroid, Ankidroid’s forum, on the Anki's subreddit though for now it is best to just add contact details to our list of interested participants
It will help your application if you have already contributed to AnkiDroid. Please note these guidelines for people new to contributing:
- Please feel free to post new issues, but only core contributors may label an issue as a "bug"
- Please only work on issues that are labeled as a "bug", so we know that only issues we agree are important receive focus
- You should strongly consider choosing bugs in existing features for the first few PRs prior to considering any enhancements
- We will expect some level of automated testing to cover any work done on the Projects we list below. You should consider running the existing automated test suite and examining the coverage report, then adding new unit tests that cover parts of the code not already covered as a great way to make a first PR
- Reviewing other developer's code is a fundamental skill for any developer. You should consider performing a PR review (where you reproduce the error locally, then verify that the PR fixes the bug, and you review the code itself to make sure it is understandable for the future) as an excellent way to contribute to a project
Please understand that the interest in contributing to AnkiDroid for the Google Summer of Code is very high. We have around 150 people interested so far, and likely only have the ability to accept one or two official participants total, as an organization.
This list of projects is not exhaustive. Discussion with the intern may lead to new projects. In particular, if the intern uses the app and wants some new feature that does not exist yet, we may consider helping them create those features. Not all projects have the same difficulty level. We will choose a project to work on first, and if the intern does the project quickly we’ll be happy to work on a second simple project.
AnkiDroid really lack tests. According to https://app.codecov.io/gh/ankidroid/Anki-Android/ only 37% of the code is currently covered by tests. That means that 63% of the code is never even run during runs. We want to increase this considerably, we want to have tests that ensure that each feature work, and that warn us if anything breaks.
An increase in code coverage. Less regression in the future
JAVA. Robolectric and/or test on device. Potentially JS
From easy to very hard. As examples:
- Finding a background function not covered in /libanki with codecov and adding test for it should usually be easy. Just calling method and checking the result.
- Testing that some button properly implement a feature might require to understand more of the test tool used, and require bigger test. It will likely involve running activities.
- Figuring out a proper way to test the javascript in card might require a whole new way to create tests.
This is vital to the project continuation
Google Play will enforce that apps target API 30 (Android 11) later on this year. After this date, we will not be able to release upgrades to AnkiDroid on the Google Play Store until we upgrade the app.
We currently run using the requestLegacyExternalStorage flag. Once we target API 30, this flag will no longer work on Android 11 devices.
For us to support this flag, I believe that we need to migrate to Scoped Storage: https://developer.android.com/about/versions/11/privacy/storage. The outcome of this will change how AnkiDroid's storage works, likely moving the publicly accessible AnkiDroid
folder, which may mean changes to:
- Collection database
- Sync outputs (collection & media)
- Camera/Microphone Outputs
- "Save Whiteboard"
- AnkiDroid API usage
- User help documentation (we advise them that uninstall/reinstall is safe currently, but it will not be in the future as it will remove their scoped storage database)
Mentors are less likely to know these new Storage APIs so this will involve collaboration and an aspect of experimentation and independent research.
Likely Hard
(ticketed - but we can do much better here by moving it all in-app)
A deck is a set of questions and answers that you want to learn. For example, a list of all countries in the world or the 1,000 most used words in French. Currently, you need to download a deck first and then import it. So, in this feature, the idea is to allow users to download decks with deck download url, deck id, deck name etc. in order to browse, download, update and import that deck directly into AnkiDroid which improves user experiences.
Another potential feature to consider is to share decks directly from AnkiDroid and add it to the repositories of all shared decks. Currently, this can only be done from the website.
Option to import deck from url, deck id or deck name
Experiences with JAVA
Medium
(PR) Questions and answers are displayed in WebView using HTML/CSS/Javascript. Buttons are already present to allow the user to do basic formatting such as italic, bold, adding images etc. That was found to be acceptable when the app was created ten years ago, when we expected most users to create questions using the computer. Nowadays, people have smartphones and don’t necessarily have the app on their computer, thus, allowing more advanced tools becomes more important. This project already started but is not yet fully functional. The intern would work on moving this project to production.
Note editor in AnkiDroid with additional buttons to format decks
Experiences with JAVA, Android XML, HTML
Medium
Requested outside GSoC in https://github.com/ankidroid/Anki-Android/issues/6772
Currently, this feature exists only on the (free) computer version of the app.
The goal of this project is to add an option to import such a list of questions/answers in AnkiDroid. Option in AnkiDroid to import CSV or TSV files and add notes to database using those files
Experiences with JAVA, Android XML, CSV, TSV
Medium
Currently, most of the documentations are created for users who want to learn with our app. However, there is a lack of centralized documentation toward developers and deck creators. Questions can have the full power of HTML/JavaScript, and use a template system that is highly parameterizable. More documentation of the advanced features, and of the concept behind the app, would be extremely appreciated.
A centralized page with documentation for new AnkiDroid contributors and deck creators.
Experiences with HTML and Markdown
Easy
Onboarding helps new users to introduce the app. The new users may need to understand the user interface of the app. The user may even don’t know about space repetition software. So, the idea is to tell about the advantages of using the app in learning and memorising things and how AnkiDroid will help in memorising things easier.
-
We want people to be able to understand only what they need to know and be able to quickly use the app effectively.
-
Our main issues is that people don't know what spaced repetition is, and why they can't study when they want
-
We do not want to force the user to log in when they open the app (but it may be an optional flow).
-
Some of our users will come from Anki Desktop, it would be good if we can set these up to logon and sync.
-
It would be ideal if we could show users where to get more help
-
We do not want to add new fields to forms unless there is a known benefit
-
We want to be able to solve the common "how do I add reversed cards" question - showing how templating works (but under an advanced section of some sort)
-
(David) A user suggested
AppIntro
. I personally wouldn't see this dependency to be problematic as it seems maintained
Onboarding screen at first start of app to introduce about the app to new user
Experiences with JAVA, Android UI using XML
Easy
We list other ideas, we would be happy to discuss them with a potential intern if they find them more interesting, but expect that the above-listed projects should already give an idea of what kind of projects the intern may participate in.
We have various users on the Play Store suggesting that that application could improve both its UX and its UI
The app will receive less negative criticism about its user interface
Experiences with JAVA, Android UI using XML
Variable: Easy-Hard, depending on how large the scope of the change will be
Google has introduced a new library for Preferences, we should move our Preferences and Deck Options screen to use this
Experiences with JAVA
Medium
Google has developed a UI/Application Exerciser Monkeyy which performs automated actions to test for bugs in an application. It would improve our testing process if this is included in GitHub actions.
Care must be taken to ensure that this does not cause actions affecting external services (for example: spamming AnkiWeb/our translations services with requests).
AnkiDroid has much more stronger testing suite, and there is less chance of a crash bug being seen by the public
Experiences with JAVA
GitHub Actions
Easy
- Donation drive from corporations rather than focusing on individuals (to discuss)
(ticketed - needs GUI + GUI design)
- Milestone notifications (encourage users to share/like/donate at given intervals. Need to discuss with others on the project as it's not in Anki Desktop and don't want it to be spammy)
- Press Pack/Support for Academics using Anki(Droid) for research
Experiences with JAVA
Medium