AnkiDroid is a companion Android application for Anki, a flashcards application that helps people learn and memorize a diverse variety of topics.
Instant Add Note Editor & Multimedia UI/UX consisted of
- Streamlining the process of adding cloze notes to AnkiDroid
- Improving the app's UI & UX for adding multimdedia [Images/Drawing/Camera/Audio Recordings/Inserting files]
- Decoupling the app's multimedia handling
The user had to copy and paste the text in the app and then create a cloze note or share the copied text to AnkiDroid, which would open the NoteEditor Screen:
Users can select and share selected text to AnkiDroid. The Instant Note
feature helps them create cloze notes without actually opening the app:
Community Bonding is the initial time that Google gives to be involved in the community and activities that happen within an organization. Since the community was small and I already had been contributing and knew the community, it went very well. I enjoyed it and started my coding during this period so that I could compensate for the time that I wouldn't be active due to my university exams.
During the first phase of the GSoC project, the development of the Instant Note Editor was a key focus. The journey started with establishing foundational elements like design resources and intent filters, followed by creating a preliminary layout for the editor dialog. Over the subsequent weeks, the project saw rapid progress, with significant enhancements to both the user interface and functionality.
Key milestones included implementing ActionMode.Callback
for better context menu handling, refining error validation, and migrating business logic to ViewModel for improved state management. A crucial improvement in the user interface was the transition from using EditText with Chip
drawables to ChipGroup
. Initially, the use of Chip
drawables within EditText presented challenges, such as difficulties in interacting with the chips independently and tracking them effectively. This limitation prompted a shift to ChipGroup, which allowed for independent interaction with words and the addition of badges on chips, leading to a more robust and flexible user experience.
The phase culminated in the finalization of the Instant Note Editor, which was then prepared for a controlled release cycle to ensure a polished and user-friendly public rollout.
The second phase of the project centered around the development of the Multimedia UI/UX, aiming to enrich the note-taking experience by integrating multimedia elements. The setup of the Multimedia activity marked the beginning of this phase, laying the groundwork for subsequent features. Over the weeks, the multimedia editor evolved to include options for camera and gallery integration, enabling users to seamlessly add images to their notes. The development was methodical, with features being tested and refined in a developer-only environment to ensure stability. As the project neared completion, additional multimedia options like audio recording and drawing were incorporated, further enhancing the user experience. The project was wrapped up with the Multimedia UI/UX being marked ready for public use, ensuring a robust and dynamic addition to the note editor.
- Instant Note Editor to allow adding cloze card
- Extract ActionMode.Callback from NoteEditor
- Extension method to get cloze field name
- Ese field check from backend and display error accordingly
- Init: Instant Note Editor Activity
- Enhancements: Instant Note Editor Improvements
- New Multimedia UI
- Enhancement: add long press listener on cloze button
- Refactor: cloze builder pattern for words
- Refactor: use prefill value in integer dialog
- Enable instant editor for public use
- Enhacement: add Audio and Video multimedia options
- Fix: cloze number incorrect on undo
- Refactor: Multimedia options converted to sealed class Closed after discussion
- Multimedia UI/UX: Add Drawing & Recording options and set multimedia public
- Refactor: vibration methods to use Duration
- Refactor: move audio package to multimedia package
Having successfully fulfilled all the commitments outlined in my GSoC proposal, my focus now shifts towards further enhancing the quality and robustness of the codebase. One critical area that I plan to address is the creation of comprehensive test suites, including both Unit Tests and Android Tests. These tests are essential for ensuring the reliability and stability of the application, and I intend to develop them as part of my ongoing contributions to the project.
My journey with AnkiDroid does not end with the conclusion of GSoC. I am committed to continuing my involvement with the project, and leveraging the experience and knowledge I have gained to make meaningful contributions. By staying actively engaged with the AnkiDroid community, I aim to help maintain and improve the app, ensuring it continues to be a valuable tool for users worldwide.