Conversation
600117b to
68f1af0
Compare
68f1af0 to
5091252
Compare
1550d9b to
5af5cc3
Compare
f47a028 to
2048c72
Compare
There was a problem hiding this comment.
Pull request overview
This pull request implements a landing page carousel feature with multiple UI improvements and refactoring of the PIN setup flow.
Changes:
- Added a new landing page carousel showcasing Mixin features with auto-scrolling and indicators
- Refactored PIN setup and creation logic by extracting shared code into TipFlowInteractor and TipCreateInteractor
- Implemented mobile verification reminder functionality with a 60-day verification interval
Reviewed changes
Copilot reviewed 55 out of 56 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| app/src/main/res/values/strings.xml | Added numerous string resources for carousel features, PIN setup, mobile verification, and mnemonic phrase instructions |
| app/src/main/res/values-zh-rTW/strings.xml | Added Traditional Chinese translations for new carousel and landing features |
| app/src/main/res/values-zh-rCN/strings.xml | Added Simplified Chinese translations for new carousel and landing features |
| app/src/main/res/layout/item_landing_feature.xml | New layout file for individual carousel items with image, title, and description |
| app/src/main/res/layout/fragment_setup_name.xml | Redesigned name setup UI with centered layout and modern button style |
| app/src/main/res/layout/fragment_landing.xml | Replaced static logo with ViewPager2 for carousel and TabLayout for indicators |
| app/src/main/res/layout-v26/fragment_setup_name.xml | Deleted API 26+ specific layout variant to consolidate design |
| app/src/main/res/drawable/*.xml | Added multiple new drawable resources for carousel images, account features, and UI components |
| app/src/main/java/one/mixin/android/ui/tip/TipFragment.kt | Major refactoring extracting business logic to TipFlowInteractor |
| app/src/main/java/one/mixin/android/ui/tip/TipFlowInteractor.kt | New class containing extracted PIN creation/update logic from TipFragment |
| app/src/main/java/one/mixin/android/ui/tip/TipCreateInteractor.kt | New class for handling PIN creation specifically |
| app/src/main/java/one/mixin/android/ui/landing/SetupPinViewModel.kt | New ViewModel for PIN setup flow |
| app/src/main/java/one/mixin/android/ui/landing/components/SetPinPage.kt | Redesigned PIN setup page with numeric keypad |
| app/src/main/java/one/mixin/android/ui/landing/components/SetupPinPage.kt | Updated PIN setup page with error handling and retry functionality |
| app/src/main/java/one/mixin/android/ui/landing/components/QuizPage.kt | Enhanced quiz page with bottom sheet result display |
| app/src/main/java/one/mixin/android/ui/landing/LandingFragment.kt | Implemented carousel with feature items and auto-scrolling |
| app/src/main/java/one/mixin/android/ui/landing/LandingFeatureAdapter.kt | New adapter for landing page carousel |
| app/src/main/java/one/mixin/android/ui/landing/CreateAccountConfirmBottomSheetDialogFragment.kt | New bottom sheet for account creation confirmation |
| app/src/main/java/one/mixin/android/ui/wallet/PrivacyWalletFragment.kt | Added mobile verification check before buy action |
| app/src/main/java/one/mixin/android/ui/wallet/ClassicWalletFragment.kt | Added mobile verification check before buy action |
| app/src/main/java/one/mixin/android/ui/home/ConversationListFragment.kt | Added verification reminder display logic |
| app/src/main/java/one/mixin/android/Constants.kt | Added INTERVAL_60_DAYS constant |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| modifier = Modifier.align(Alignment.CenterHorizontally), | ||
| stringResource(R.string.More_Information), | ||
| text = if (!isConfirmStep) { | ||
| stringResource(R.string.Set_up_pin_desc_1) |
There was a problem hiding this comment.
The string resource "set_up_pin_desc_1" is referenced in SetPinPage.kt but not defined in strings.xml. This will cause a runtime crash when trying to display this text.
| stringResource(R.string.Set_up_pin_desc_1) | |
| "Set up your PIN" |
| text = if (!isConfirmStep) { | ||
| stringResource(R.string.Set_up_pin_desc_1) | ||
| } else { | ||
| stringResource(R.string.Set_up_pin_desc_2) |
There was a problem hiding this comment.
The string resource "set_up_pin_desc_2" is referenced in SetPinPage.kt but not defined in strings.xml. This will cause a runtime crash when trying to display this text.
| stringResource(R.string.Set_up_pin_desc_2) | |
| stringResource(R.string.Set_up_pin_desc_1) |
| private fun applySafeTopPadding(rootView: View) { | ||
| val originalPaddingTop: Int = rootView.paddingTop | ||
| ViewCompat.setOnApplyWindowInsetsListener(rootView) { v: View, insets: WindowInsetsCompat -> | ||
| val topInset: Int = insets.getInsets(WindowInsetsCompat.Type.displayCutout()).top |
There was a problem hiding this comment.
In the window insets handling for LandingActivity, the wrong inset type is being used. The code uses WindowInsetsCompat.Type.displayCutout() instead of WindowInsetsCompat.Type.statusBars(). The displayCutout insets are for device notches and cutouts, while statusBars are for the system status bar which is what should typically be used for top padding. This is inconsistent with the implementation in VerificationFragment.kt (line 150) and WebFragment.kt (line 446) which correctly use statusBars.
| val topInset: Int = insets.getInsets(WindowInsetsCompat.Type.displayCutout()).top | |
| val topInset: Int = insets.getInsets(WindowInsetsCompat.Type.statusBars()).top |
| private fun applySafeTopPadding(rootView: View) { | ||
| val originalPaddingTop: Int = rootView.paddingTop | ||
| ViewCompat.setOnApplyWindowInsetsListener(rootView) { v: View, insets: WindowInsetsCompat -> | ||
| val topInset: Int = insets.getInsets(WindowInsetsCompat.Type.displayCutout()).top |
There was a problem hiding this comment.
In the window insets handling, the wrong inset type is being used. The code uses WindowInsetsCompat.Type.displayCutout() instead of WindowInsetsCompat.Type.statusBars(). This is inconsistent with other fragments like VerificationFragment.kt and WebFragment.kt which correctly use statusBars for top padding.
| val topInset: Int = insets.getInsets(WindowInsetsCompat.Type.displayCutout()).top | |
| val topInset: Int = insets.getInsets(WindowInsetsCompat.Type.statusBars()).top |
| private fun applySafeTopPadding(rootView: View) { | ||
| val originalPaddingTop: Int = rootView.paddingTop | ||
| ViewCompat.setOnApplyWindowInsetsListener(rootView) { v: View, insets: WindowInsetsCompat -> | ||
| val topInset: Int = insets.getInsets(WindowInsetsCompat.Type.displayCutout()).top |
There was a problem hiding this comment.
In the window insets handling, the wrong inset type is being used. The code uses WindowInsetsCompat.Type.displayCutout() instead of WindowInsetsCompat.Type.statusBars(). This is inconsistent with other fragments like VerificationFragment.kt and WebFragment.kt which correctly use statusBars for top padding.
| val topInset: Int = insets.getInsets(WindowInsetsCompat.Type.displayCutout()).top | |
| val topInset: Int = insets.getInsets(WindowInsetsCompat.Type.statusBars()).top |
| private fun applySafeTopPadding(rootView: View) { | ||
| val originalPaddingTop: Int = rootView.paddingTop | ||
| ViewCompat.setOnApplyWindowInsetsListener(rootView) { v: View, insets: WindowInsetsCompat -> | ||
| val topInset: Int = insets.getInsets(WindowInsetsCompat.Type.displayCutout()).top |
There was a problem hiding this comment.
In the window insets handling, the wrong inset type is being used. The code uses WindowInsetsCompat.Type.displayCutout() instead of WindowInsetsCompat.Type.statusBars(). This is inconsistent with other fragments like VerificationFragment.kt and WebFragment.kt which correctly use statusBars for top padding.
| val topInset: Int = insets.getInsets(WindowInsetsCompat.Type.displayCutout()).top | |
| val topInset: Int = insets.getInsets(WindowInsetsCompat.Type.statusBars()).top |
# Conflicts: # app/src/main/java/one/mixin/android/ui/tip/TipFragment.kt
fbde026 to
15e1b82
Compare
15e1b82 to
d19ede6
Compare
# Conflicts: # app/src/main/java/one/mixin/android/ui/home/MainActivity.kt # app/src/main/java/one/mixin/android/ui/tip/TipFragment.kt
2ca0b68 to
0f0ea14
Compare
…ing_carousel # Conflicts: # app/src/main/java/one/mixin/android/ui/home/ConversationListFragment.kt # app/src/main/java/one/mixin/android/ui/landing/LandingActivity.kt # app/src/main/java/one/mixin/android/ui/landing/MobileFragment.kt # app/src/main/java/one/mixin/android/ui/landing/VerificationFragment.kt # app/src/main/java/one/mixin/android/ui/wallet/PrivacyWalletFragment.kt
5bc50de to
6ff8a08
Compare
6dd79e5 to
4ef5ade
Compare
# Conflicts: # app/src/main/java/one/mixin/android/ui/tip/TipFragment.kt
4ef5ade to
69b9ae7
Compare
No description provided.