* [#209] Update Compose dependency to latest version 1.2.0-beta03
- Update dependency
- Align our integration tests with the new Compose requirements
- Add integration folder to tests, if missing
- Split integration tests, which require activity to separate classes
- Remove unnecessary custom activity for each integration app part and create one custom common activity
- Implement Downloadable fonts from Compose 1.2
- Update Third party licenses documentation
* [#430] App crashes on Intel x86_64 emulators
- Bump the SDK version to the latest snapshot version.
- Set app's max Android SDK version to 31 for wtf emulators.
- Remove overridden wtf emulators config from sdk-ext-lib module.
- Also reduced liklihood of timeouts on Firebase test lab for robo tests
- Fix emulatorwtf run configuration
- Fix screenshots on older API levels
- Fix minumum range for emulator.wtf
* [#312] [#309] Scaffold Scan QR Screen
- Screen scaffolding.
- Model classes.
- Screen states handling.
- Needed dependencies added.
- Camera permission handling. Redirect to Settings.
- Added SettingsUtilTest class.
- Added view classes tests.
- Renamed tag class in update package.
- Fix the scan frame size while changing the screen orientation.
- Use local variable for cameraProvider.
- Use UUID for source of randomness.
- Eliminate blocking call for camera.
- Fix preview name.
- Remove Google Guava dependency.
- Suppress Lint warning.
- Improved calculation of the camera frame size. Moved it into Constraint layout.
- Added custom image analyser class.
- Implemented logic for the QR scan screen while QR code is found.
- Manual tests added.
- New module with integration tests for QR Scan screen. Added 3 integration and 4 view tests.
- Simplify QR Scan screen view basic tests.
- Switched from pure compose permission handling to Accompanist way of handling CAMERA permission.
- Added validation of Zcash wallet address from QR scanning result.
- Fix the integration tests for the CI WTF emulator runs.
- Add comment on RTL test result.
- Improve waitForDeviceIdle() method. Use it on the other test too.
- Change the integration test module main manifest package name.
- Debounce scans.
- Improve thread safety of scan collection.
- Added instructions on how to set up an emulator in manual tests.
- Replace compose collectAsState() with coroutine launch().
- Add sample() to get rid of several callback events at the same time.
- Stop updating the scanState when it's already in Scanning state.
- Fix condition on navigation.
- Remove validateJob check.
- Speed up the integration test
- Wrap ImageAnalysis.qrCodeFlow to remember.
- Auto-close the camera image when we're done with it in all cases.
- Update minimal SDK version to 24 for WTF emulators.
- Update Architecture documentation.
- Removed extra blank space in ui-design module definition.
- Add ui-integration-test-lib.
- Update Mermaid diagram with newly added module.
- Move UI modules into one wrap in the diagram.
- Move sdk-ext-lib and sdk-ext-ui under the same modules section.
- Update camera dependencies.
Co-authored-by: Carter Jernigan <git@carterjernigan.com>
* [#312] [#309] Scaffold Scan QR Screen
- Screen scaffolding.
- Model classes.
- Screen states handling.
- Needed dependencies added.
- Camera permission handling. Redirect to Settings.
- Added SettingsUtilTest class.
- Added view classes tests.
- Renamed tag class in update package.
- Fix the scan frame size while changing the screen orientation.
- Suppress Lint warning
Co-authored-by: Carter Jernigan <git@carterjernigan.com>
- Basic screen UI scaffolding.
- Set up communication with Google Play in-app update API.
- Mocking communication with Google Play API.
- Added unit, UI and integration tests for the in-app update screen model, util, view and viewmodel classes.
- Added mock implementation of helper AppUpdateChecker class.
- Introduced ViewModel integration test.
- Filed issue for future manual testing of implemented in-app update mechanisms after the wallet app is released on Google Play.
- Implement FakeAppUpdateManager in AppUpdateCheckerMock instead of the ugly AppUpdateInfo instantiation - this affected the tests too.
Co-authored-by: Carter Jernigan <git@carterjernigan.com>
This provides a basic screen for users to type a support inquiery, which then opens a pre-filled message in the user’s email app.
There are a few followup issues:
- Detect seed phrases in the email #377
- Report crashes in the generated email #378
- Fuzz timestamps #388
- Set the correct support email address #379
- Improve handling on devices without an email app #386
A future iteration should generate the HTML reports from these XML files
This rolls back Flank to 21.09.0 but does maintain the ability to version Flank separately.
This allows the app to consume the snapshot version of the SDK, which contains a number of API changes.
A followup issue of #279 was filed so that the app can be reverted to the release version of the SDK once the SDK API stabilizes again.
Preliminary and limited version of background sync, with the following limitations
- Sync is always enabled
- Default sync period is 24 hours and is not updated once the wallet is created
This change refactors the synchronizer to a global singleton that both WorkManager and the UI can interact with.
Besides bumping the version, we can now integrate this plugin the same way we do the others. The version is now declared in the settings.gradle.kts.
The change is a bit noisy, due to needing to move our repository restrictions around.
Note that the SDK master branch contains breaking API changes, which the Secant app hasn't yet been updated to support, so enabling an included build will have compile failures.
Implements a details screen showing various wallet addresses
Some known issues requiring followup in future pull requests:
- #159 Colors for light theme have not been defined yet
- #160 Color blocks have 2x borders along the top/bottom of the middle item
- #161 Some address types display placeholder values
This provides a very basic scaffold of the home screen and navigation to other child screens. Additional work needs to be done in both the SDK and this app to build all of the functionality. Specific known gaps
- Displaying synchronization status to the user, pending full designs on the progress and animation behaviors
- Improved APIs for listing and filtering transactions. This is the issue in the SDK https://github.com/zcash/zcash-android-wallet-sdk/issues/242
- Implement the UI for displaying transaction history
- Display fiat currency values
- Hook up buttons to navigate to other screens (scan #137, profile #145, send #134, request #135)
Updating the Compose compiler must happen in lockstep with the Kotlin version, because they are tightly coupled
Kotlin 1.6 also fixes some annoying issues with Java 17, which will make first-time setup less error prone for new contributors
This enables deployment to Google Play internal testing.
Note these changes cannot be fully tested until the signing and API keys are in place. Non-deployed builds are continuing to work as expected (e.g. `./gradlew assemble`)
This sets up the infrastructure needed to continue implementing the onboarding UI for create and import of wallets. By fleshing out the global state management in the app now, we can better manage asynchronous IO to avoid blocking the UI.
This adds:
- Load and persistence a wallet in encrypted preferences
- The stored data is written as a single JSON object, as opposed to multiple entries, to ensure atomic writes
- The data is versioned, so that we can change the JSON format readily in the future
- Detection of application state, e.g. onboarding versus loading the user's wallet
- Touch points to initialize the SDK
Note that if we want to run tests from each module on older Android versions, we would need to enable desugaring for each module that is using newer JDK features. For now, this prevents the app itself from crashing on devices with older versions of Android
Provides infrastructure to help us track exactly what build of the app is running. This provides the ability to implement a number of features in the future
- Displaying build version in an About screen
- Automatically versioning with Git commit count as an incrementing version number
- Injection of secrets, API keys, or other behaviors into the build so that the app can leverage them at runtime. The secrets can be securely stored as environment variables (e.g. on CI), so they don't need to be committed to the repository.
This adds infrastructure to read/write preferences, with both a multiplatform wrapper and an Android-specific implementation.
This implementation is primarily designed to cover the initial needs of implementing the wallet SDK integration for issue #28 for securely storing keys (with encryption) for the user's wallet.