19 February, 2022

Wisecards Android App

Last year in 2021 I re-continued to learn Chinese. I still use my Android Flashcard App, which is about 14 years in development now. While using it, the urge for some improvement. Much time is spent keeping up-to-date with changes in Android Development when coming back to a pet-project. The latest update was in 2018 and a year later I 'finished' migrating the code from Java to Kotlin and changed all database code from directly using Cursor to Room. The migration went well but using Room for all database access was not a great idea because some parts of the App become too slow for my taste. Some Room usage had to be rolled back, that was the time when I made a break. It still had no new feature, nothing to publish.

Now it's in a state where I can add new experimental features:

Wisecards Android App - Daily usage
Daily usage stats.
Wisecards Android App - Review Reminder
Review reminder.

Work in Progress

Here is a temporary and incomplete list of open tasks.

Android UI
  • Prepare public release of version 2.0
    • Testing, go through the app, there must be bugs somewhere.
      • Load deck from internal memory doesn't immediately appear in the list.
      • Delete deck doesn't disappear from the list.
      • StudyStack.com cards are imported with deactivated status.
      • In learn-activity does not show cards in single-sided view but changing from all-side view and back works.
      • In learn-activity overflow-menu, the delete-action crashes the app.
      • Deck-log is not created immediately, show a last stats-point anyway.
      • In deck-edit-activity an invalid value can be entered that is ignored on save, show a message instead.
      • In deck-edit-activity an empty title and side-title can be entered, stop allowing empty values.
      • In deck-edit-activity in overflow-menu a delete-action is shown which does nothing. Do implement the delete.
      • In card-edit-activity empty values are allowed, flag these cards as incomplete?
      • In card-edit-activity cards of decks that have additional sides bring it to crash on save.
      • In card-edit-activity overflow-menu, the delete-action crashes the app.
      • In card-edit-activity an invalid order can be entered which is ignored on save, show a message instead.
      • In search-result, mark and deactivate cards is not permanent.
      • In search-result, the ... button has no actions to show, can we hide it?
      • Save-deck-activity uses own folder-list, change to use the system file selector.
      • Import uses own folder-list, change to use the system file selector.
      • Export uses own folder-list, change to use the system file selector.
    • Change wording from expired to ready
    • Show title for daily activity graph
    • Show title for daily expired-cards graph
    • Show a summary of the current day
      • How much time spent today
      • How many card answered today
      • How many distinct card answered today.
    • Change sub-title to show ready-count, cards-count and total-cards-count in deck
    • Cleanup project
      • Remove unused files.
      • Remove unsued references
      • Make the APK smaller
    • Remove dependencies to apache.http/logging
    • Prepare Google Play listing.
  • Set FAB-button colors back to the previous version.
  • Improve UI all-cards-list
    • Distribute space around mark-checkbox evenly
    • When no description in group, move cards-count to vertically centered.
    • Move cards count from the bottom-view to the tabs. (This maybe not simply done.)
    • Show status of each card as circles instead of left/right end.
  • Change dialog elements to use more Material design elements such as TextInputLayout.
  • Add synchronization to a server.
    • Add client for accessing Wisecards Web-API.
  • Add configuration for 15min, 30min 45min, 1h, 2h
  • Reorganize the home-screen.
    • Add bottom-app-bar
  • In card-list-activity after the delete-action, show a message that the card was deleted.
  • In card-edit-activity after the delete-action, show a message that the card was deleted.
  • In learn-activity after the delete-action, show a message that the card was deleted.
  • Improve import-cards-activity
    • Use exposed-dropdown-menu instead spinner
    • Show a preview at the bottom
    • Replace ProgressDialog with ProgressBar
    • Show a summary of imported cards, found, imported, duplicates
    • Make it more fool-prove
    • Add system group 'imported'
  • Improve export-cards-activity
    • Add groups lines
    • Add comment lines
    • Show a preview at the bottom
    • Replace ProgressDialog with ProgressBar
Wisecards Web-API
  • Endpoint to update client.
  • Differentiate between admin-client and public-client and admin-user and public-user!
  • Test OAuth2 password flow.
  • Add OAuth2 redirect-url flow.
  • Extend OpenIddict Application with own fields
  • Endpoint for decks
    • Add deck
      • Validate values
    • Update deck
    • Delete deck
    • Undelete deck
  • Endpoint for cards
    • Add card
    • Update card
    • Delete card
    • Undelete card
  • Endpoint for groups
    • Add group
    • Update group
    • Delete group
    • Undelete group
  • Endpoint for learnings
    • Add learning
    • Update learning
    • Delete learning
    • Undelete learning
  • Has entities CardLog, DeckLog, FileEntry, Group and Learning
  • Add endpoints and entities to make a backup of Android client data possible
  • Customize IdentityUser and add references to db-models
  • Handle model/entity/data-versions


Android UI
Wisecards Web-API
  • Endpoint to get access-token.
    • OAuth2 with password flow
  • Endpoint to add new client.


Android UI
  • Change date to other than the current day in activities and ready view.
  • In ready chart, add projection of ready-count from now to end of day or up to max-count.
  • Make activities-chart touch-sensitive to show cards in a single activity.
  • Add calendar and show number/cards that become ready in that date.
  • Add GitHub-Contributions-like calendar to show past activity density in single days.
Wisecards Web-API
  • Endpoint to add/update client.
    • Validate available/allowed `client_id`