We were trying to target Android/iOS/Desktop with the same codebase using Kotlin Multiplatform, but that proved to be more complicated than anticipated. We are simplifying the scope of the project a bit by focusing on Android.
Co-authored-by: Severiano Jaramillo <severiano.jaramillo@gmail.com>
Reviewed-on: #1
- The getKeyAndLanguageFromWords() method receives a list of words and validates that they correspond to an actual Dero seed, and obtains the corresponding Key and language.
- Added tests to verify that the getKeyAndLanguageFromWords() method works as expected in different scenarios.
- The verifyChecksum() method uses the calculateChecksumIndex() method internally to obtain the checksum index, which is then used to confirm that the checksum word is correct.
- Added tests for all verifyChecksum() scenarios.
- Created MnemonicsDataProvider to more easily provide the data used in MnemonicsTest.
- The calculateChecksumIndex() method uses the newly added method to calculate the CRC-32 to obtain the index of the word to be used for the seed checksum.
- Added a few unit tests to validate the correct functionality of the calculateChecksumIndex() method.
- Created a new shared module 'crypto' that will contain crytography specific functionality.
- Added a class to validate data using the CRC-32 algorithm. We had to create a class to do this from scratch because there is no readily made library available for Kotlin Multiplatform yet.
- Configured unit tests in the crypto module to confirm that the CRC-32 functionality is correctly implemented.
- Introduced a Mnemonics class that contains logic to convert mnemonics to a valid Dero key and viceversa. This functionality is not complete yet.
- Introduced Mnemonics support for two languages for now, English and Spanish. Adding support for more languages is a matter of adding a new Mnemonics[Language] instance. We can do that later when necessary.
- We are not targetting desktop for the time being, but unfortunately the IDE previews (which are very useful when developing UI) are only available for the Desktop target for now. It is worth keeping the desktop target just for that. We won't be spending much time focusing on desktop though.
- Updated Compose multiplatform plugin and Kotlin versions.
- Added coroutines swing dependency to be ablet o run the desktop app.
- Updated NodeStatus component to show the current block count if connected to the Dero node, or a 'Not connected' text otherwise.
- Updated ImportAccountScreenModel to extend from StateScreenModel with a State data class that contains the blockCount for now. This State is observed by ImportAccountScreen which automatically adjusts to the latest State and shows the proper UI.
- Implemented basic two way communication with the Dero node. The Bridge is listening for Dero node updates and requests the Block Height when receiving a Height update from the node.
- Renamed Bridge to StargateBridge and added basic documentation.
- Created model for DeroNode instances. We use only one node for now, but will add more down the line.
- Created a new stargate module that will contain the code to connect with the Dero nodes. This stargate module will use the ktor library, which is a multiplatform networking library that works on both Android and iOS.
- Added a bassic connectivity with a Dero node. It just connects with the node, listens for messages, and prints them out to the standard output.
- Introduced the ScreenModel library and created a basic ImportAccountScreenModel. ScreenModel classes serve to host all the logic for their corresponding screens.
- Added the Internet permssion to the Android app, to be able to connect with the internet.
- Removed the Desktop target. After discussing with Ken, we decided that investing on a Desktop app does not make sense. We will focus on Android and iOS only.
- Configure app edge to edge for better status bar appearance.
- Set minSdk to 26.
- Set launcher icon using Kee icon.
- Minor UI improvements to Import Account screen.