* [#1011] Rework buttons design system
* [#1011] Dark mode in Onboarding screen
* [#1011] Welcome animation dark mode
* [#1011] SecurityWarning screen dark mode
+ Proper coloring of the labeled checkbox across the app
* [#1011] NewWalletRecovery dark mode
+ Chip and ChipGrid coloring
+ Navigation button and Dialog coloring
+ NewWalletRecovery screen button copy update
* [#1011] RestoreView dark mode
+ Chip components coloring
* [#1011] RestoreView.Birthday dark mode
+ Fix Primary/Secondary colors
* [#1011] Settings screen dark mode
- Fix TopAppBar colors in dark mode
* [#1011] Support screen dark mode
* Fix static code analysis warnings
* [#1011] About screen dark mode
* [#1011] ChooseServer screen dark mode
+ LabeledRadioButton coloring
- Closes#1410
* [#1011] AppAlertDialog dark mode
* [#1011] Not Enough Free Space screen dark mode
- Screen redesigned to align with latest design specifications
- Added Go To System Settings and Go To App Settings buttons to the screen
- Closes#1337
- Few unused resources removed
* [#1011] App Update screen dark mode
* [#1011] Balances screen dark mode
+ dividers’ color review
* [#1011] Receive screen dark mode
* [#1011] Send.Form screen dark mode
* [#1011] Send.Confirmation screen dark mode
* [#1011] Send.MultipleTrxError screen dark mode
* [#1011] Scan screen dark mode
* [#1011] TransactionHistory screen dark mode
* Changelog update
* Address review comments
- Closes#1085
- Closes#1091
- These are prerequisites for the Dark mode adoption within #1011
- A few unused UI components have been removed to simplify the dark mode adoption
- BlankSurface and GridSurface have been added and used instead of the previous GradientSurface
- A new BlankBgScaffold, GridBgScaffold, BlankBgColumn, and GridBgColumn UI components have been prepared to provide an easy grid or blank screen background adoption across the whole app
- Several colors from resources have been eliminated, as the design doc simplified its color palette
- The grid pattern has been added to the screens according to the design doc and iOS platform
- Changelog updated
* [#1417] Add authentication
- Closes#1417
- Closes#326
- Partially addresses [Electric-Coin-Company/zashi#7] too
- Creates reusable AuthenticationVM component with all necessary logic that reports authentication status to its callers
- Addresses authentication requirements for the Send funds, Delete wallet, Export private data, and Recovery phrase. The App access authentication use case is prepared and can be turned on anytime.
- The new logic also counts with possible future user customization via the app UI of the default on/off states for all implemented authentication use cases
- Send.Confirmation logic simplification
- This also adds the welcome screen (splash) animation to all the app entry points (the app recreation caused by system included)
* Allow unauthenticated access
- In case no authentication method is available on the device
* Build supported authenticators for the device
- Based on the device Android SDK version
* Disable broken screenshot testing
- This is a temporary change until #1448 is addressed
* Changelog update
* Add temporary placeholder screenshot test
To suppress no test error
- Closes#1164
- This incorporates the new wallet restoring label into the custom TopAppBar UI component, so it’s accessible from all screens
- This also fixes the adjust brightness feature that previously stayed turned on when the user left to a surrounding tab screen (Send or Balances)
- Changelog update
Move DisableScreenTimeout into the parent HomeView
Persist restoring state
Fix infinite loading trx history UI state
Add New wallet syncing state
This also adds the wallet restoring state into the transaction history state calculation
[#942] New Wallet Recovery Phrase Screen
[#1006] Enhance VersionInfo with other fields
[#947] About screen UI + logic + tests
[#1040] Extract logo and title on top of screens
- Place it into a separate UI component
- Used across several screens
- Closes#1040
Remove long version of the Backup screen
- We previously had a configuration field that controlled which version of the screen should be displayed to a user
- Removed
- Partly solves #1003
Backup screen view redesign
Tests + docummentation
Update links to the Zashi Github repository
As the GitHub repository was recently moved from Zcash under the ECC company
[#1014] Unify screen name with Figma design
[#1045] Adopt Zcash SDK v2.0.3
Closes#1045
Fix screenshot test
The new wallet recovery screen is now much taller; scrolling to the acting button is needed.
Fix Restore screen test
Lint tools warnings
* [#941] Loading screen UI
Co-authored-by: Honza Rychnovský <rychnovsky.honza@gmail.com>
* Fix unallowed doubled scroll
* Remove duplicate icon
* [#997] Splash alignment with welcome animation
* [#999] Compile SDK version 34
* [#1000] Colour system bars
* [#941] Load + Opening screens
- Contains UI of both these screens
- Their logic
- And the Load screen animation
- Designed util ScreenHeight composable
- Redesigned SecondaryButton to match the design and fixed its positioning on different screens
---------
Co-authored-by: Venkat-corebts <143575548+Venkat-corebts@users.noreply.github.com>
* [#946] Warning screen UI
[#946] Code review changes
moved security warning to separate folder
changed main heading text style
changed static version text to dynamic
Co-authored-by: Honza Rychnovský <rychnovsky.honza@gmail.com>
* [#993] New Primary Button Click Animation
* [#946] Warning Screen [UI][Logic][Tests]
- Security Warning screen incorporated into the app onboarding logic
- NeedsWarning wallet state persisted and is required if the user re-runs next time, and the Security Warning screen still needs to be presented
- Privacy Policy opened by part of the screen text clicking in an external web browser app
- Unit tests
- UI tests
- Screenshot tests
---------
Co-authored-by: Venkat-corebts <143575548+Venkat-corebts@users.noreply.github.com>
Because we’re making UI text changes, I’ve forked our views into “long” and “short” versions that preserve the previous experience while allowing the shorter experience to be different.
One limitation of the current approach is that the screenshot tests are limited to the current configuration, so there is some risk of ‘bit rot’ with the screenshot tests for the longer onboarding. For this PR, I manually switched the feature flags and re-ran the screenshot tests to make sure they still worked.
---------
Co-authored-by: Honza <rychnovsky.honza@gmail.com>
Adds an option to enable/disable background sync, as well as an option to keep the screen on during sync
---------
Co-authored-by: Honza <rychnovsky.honza@gmail.com>
* Temporary enable FTL test
* Enable emulator.wft tests for ui-integration-test module on CI
* Test Fladle configuration for ui-integration-test module
* Fix Fladle for ui-integration-test module
* Rename ui-integration-test module flade configuration
* Disable again FTL action from PRs
* Clear support for FTL from ui-integration-test module
* Refactor the emulator.wtf support across our modules.
* [#598] Refactoring ScreenshotTest to a separate test module
- Created a new com.android.test module
- Moved our ScreenShotTest to the separate module
- Enabled the new module for emulator.wtf service
- Cleaned up the app module from ScreenShotTest
- Updated Architecture and Setup documentation
* Exclude pure test modules from Detekt check
* Improved run configurations
- Changed common emulator.wtf run configuration name to align with the rest of our configurations
- Added configuration for the new screenshot tests module
- Updated documentation
* Linked code TODO
* Disabled self-instrumenting
- As it appeared to be the way how to leverage the app module Gradle settings in this new module
- App name is taken from app module settings
- Screenshot tests works with pseudolocales again
* [#167] Increase brightness when displaying QR Code
* Use collectWith(lifecycleScope)
* Fix copy-paste errors
* manual test
Co-authored-by: Carter Jernigan <git@carterjernigan.com>
* [#551] Prevent screenshots when seed phrase is displayed on the screen
* Minor review changes
Make ScreenSecurity object simpler by eliminating additional ways of mutating its state.
* Add debug and test checks
* secured screens with seed phrase
* codereview fixes
* added test for Seed screen
* added Screen security test for backup views
* test for ScreenSecurity class
* added manual testing for Screen security
* ktlint format
* Clean up ScreenSecurityTest
* Remove debug check
I decided this would be annoying, especially for manual testing
* ktlint
* removed test logging
* removed test logging
Co-authored-by: Carter Jernigan <git@carterjernigan.com>
This moves navigation to its own file, simplifies the MainActivity, and moves Android integration composables to their own files.
Navigation still does not have tests, so a separate change will need to be implemented to add testing to navigation.
* [#310] [Scaffold] Progress Status Circular Bar
- Added Z to Home ZECs balance
- Added USD balance text to Home
- Prepared Text extension functions for both
- Provided Zatoshi to USD conversion methods + filed related SDK conversion issue
* Update Home screen UI with progress bars
- Implemented scaffolding UI of progress bars
- Added related texts to strings
* Update Home screen UI with progress bars
- Connected some of the implemented UI elements to SDK values
- Added app update information to Home screen
- Update WalletSnapshot with progress field
* Update Home screen UI with progress bars
- Capturing and handling errors from SDK Synchronizer.
- Added related error strings.
- Simplified Home screen UI.
* Zboto font added. Load it in runtime. Import to Typography.
* Updated ZEC sign icon.
* Draw ZEC balance with Zboto font
* Simplify Home screen balances assigning
* Switch to PercentDecimal progress representatiton
* Support different locales while working with fiat currency
* Fix bug in checking of fiat currency value
* Generalize strings to provide possibility of other fiat currencies
* Add fiat currency conversion states mechanism
* Add TODO comment with reference to follow up SynchronizerError issue
* Add WalletDisplayValues to simplify HomeView composable
* Add CurrencyConversion class for connection to Price API (and convert Zatoshi to fiat currency)
* Add basic HomeView tests
* Add basic HomeViewIntegration test
* Review changes
- Used Duration API for times
- Allow injecting clock into currency conversion
- Moved FiatCurrencyConversionRateState to sdk-ext-ui because I suspect that we’ll consider this to be a UI object. I based this on the fact that current/stale cutoff values are arbitrary and probably should be the domain of the UI rather than the SDK.
- Added some tests, although additional coverage is needed
- Added fixtures for model objects
* Minor code refactoring
- Move UpdateInfoFixture class to fixture dir
- Remove unnecessary annotation
- Add common application context method to test suite
- Fix Test class import
- Move several WalletSnapshotFixture parameters to const fields
* Add WalletDisplayValuesTest to cover the model class.
* Fix import after changes merged
* Use the new MonetarySeparatorsFixture in related tests
* Add a few basic Zatoshi -> USD conversion tests
* Turn on core lib desugaring for sdk-ext-ui-lib module
* Make WalletDisplayValues a data class
I think there may be some instances where this can help with recomposition
* Add preference key for fiat currency
This allows us to configure reading the value with observers correctly, even if we don’t allow the user to change it right now.
* Delegate symbol and formatting to JVM
* Add tests for Locale
Co-authored-by: Carter Jernigan <git@carterjernigan.com>
* [#416] Robo test blank screens
- Solve also debouncing issue on screens navigation
- Implemented with navigateJustOnce ext function on NavHostController, which compares actual and final destinations
- Add popBackStackJustOnce as an extension function to our navigation too
* [#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
* [#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>
- Added automatic exception logging, registered in the Application object
- The design sends the exception to a second process, as the main process could be in a bad state when crashing. If we ever encounter problems with this design, it is easily toggleable to turn off with a boolean resource
- Reading the process name is a bit complex on older Android versions, so we leverage a ContentProvider (which runs prior to Application.onCreate()) to get the process name
- Added a simple logging mechanism for multiprocess and multithread log messages
- Refactored spackle-lib into spackle-lib (multiplatform) and spackle-android-lib
Co-authored-by: Honza <rychnovsky.honza@gmail.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 scaffold for the About screen. There are several followup issues:
- #392 update the in-app legal text
- #398 Add open source attributions
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
- Check solution with Parcelable to the Index model class.
- Align implementation with lint checks.
- Implement custom Saver object.
- Add test cases for the new custom Saver.
- Add fixture for the new test cases.
- Remove testChoices form BackupVM and add rememberSaveable to BackupView.
- Enhance TestChoices.Saver save/store mechanisms.
- Add integration test class with 3 tests.
- Add new callback choices and onChoicesChanged to BackupWallet composable and BackupTestSetup class to be able to test save/restore mechanism of Backup-Test stage.
- Refactor WrapBackup.
- This is a new pattern that helps us share more logic between the using the test activity and the main activity, which makes the state retention tests more valid
- Co-authored-by: Carter Jernigan <git@carterjernigan.com>
- Created dedicated test activity for integration tests.
- Created Onboarding integration test class with two state restoration tests.
- Moved OnboardingTestSetup to its own class.
- Filed related issues.
- Includes Zip321UriBuildFixture for the toUri() method from the Rust layer.
- Includes Zip321UriParseFixture for the fromUri() method from the Rust layer.
- Added ZecRequestTest class for testing ZecRequest methods.
- Align Zip321UriBuildFixture and Zip321UriParseFixture parameters.
- Added comments to the new() methods of Zip321BuildFixture and Zip321ParseFixture.