To work with the project you need android-studio >= 3.3, you can get it here.
For building and running the app, your either need to download a virtual Android device image (this can be done from within the Android Studio) or connect a physical device (with developer options enabled and USB debugging turned on) via USB cable.
- Write short and informative commit messages. Mention the issue you're working on (begins with
#), e. g.implement something(#0). How to Write a Git Commit Message. - Follow a successful Git branching model.
- Kotlin coding conventions + Java google style guides and oracle.
- Also look around each time you do something new to see, how such a thing was formatted and implemented before.
- Set up Android Studio proper Kotlin code style
editor -> code style -> kotlin -> set from -> predefined -> Kotlin style guide. - Apply autoformatting to edited files each time before commit.
There is a handy DSL that allows writing content in a typesafe way.
- All app content should be placed into
com.github.braillesystems.learnbraille.respackage. - Use
DslTest.ktfile as DSL tutorial.
Information correctness should be checked in compile-time or during app initialization runtime as much as possible. If some additional info is needed, do not hardcode it. Just request the new DSL feature via GitHub Issues.
Adding rules, prevent lambda of capturing context that will be invalid next time the fragment entered, so use Fragment.getString outside of lambdas.
- Create lessons by
lessonsdelegate. - Create a course in
CourseBuilderand add lessons to it.
Always use com.github.braillesystems.learnbraille.res.content value to get materials, they are indexed here in a proper way.
- Add a new deck tag to
DeckTags. - Map tag to deck's predicate in
DecksBuilder. - Map deck's tag to user-visible string in
deckTagToName.
- Create materials by one of delegates:
markersorsymbols. - Add created materials to the
contens(materialsdelegate). - Add to
inputSymbolPrintRulesandshowSymbolPrintRules, or toinputMarkerPrintRulesandshowMarkerPrintRules.
Symbols that are not from a particular alphabet and do not exist on the classical American keyboard should be treated as special and be added via enum class.
New materials can be marked as known by default in knownMaterials (known delegate).
Database scheme is described here.