Skip to content

Conversation

@jvsena42
Copy link
Member

@jvsena42 jvsena42 commented Dec 23, 2025

Closes #448
Closes #497

Description

This PR extract the timed sheets logic to a manager class, removes the trigger on balance change (like iOS) and build a robust Unit test flow

Preview

basic_flow.mp4
iOS.mp4
critical_update.webm

QA Notes

  • Compare with iOS basic flow
  • Mock critical update screen
    • Should block back navigation
  • Mock sheet repetition
  • Sheet dismiss
    • Swipe down
    • Back button
    • Internal button
  • Check if new Unit test passes

@jvsena42 jvsena42 self-assigned this Dec 23, 2025
@jvsena42
Copy link
Member Author

@piotr-iohk cc

@jvsena42 jvsena42 changed the base branch from master to feat/nav3 December 24, 2025 13:05
jvsena42 and others added 3 commits December 24, 2025 10:14
… into fix/uniffy-timed-sheet-behavior

# Conflicts:
#	app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt
# Conflicts:
#	app/src/main/java/to/bitkit/ui/ContentView.kt
#	app/src/main/java/to/bitkit/ui/nav/Navigator.kt
Copy link

@github-advanced-security github-advanced-security bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

detekt found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.

@jvsena42
Copy link
Member Author

Waiting for #554

# Conflicts:
#	app/src/main/java/to/bitkit/ui/ContentView.kt
#	app/src/main/java/to/bitkit/ui/MainActivity.kt
#	app/src/main/java/to/bitkit/ui/components/AuthCheckScreen.kt
#	app/src/main/java/to/bitkit/ui/components/DrawerMenu.kt
#	app/src/main/java/to/bitkit/ui/components/SheetHost.kt
#	app/src/main/java/to/bitkit/ui/nav/DeepLinks.kt
#	app/src/main/java/to/bitkit/ui/nav/Navigator.kt
#	app/src/main/java/to/bitkit/ui/nav/Routes.kt
#	app/src/main/java/to/bitkit/ui/nav/SheetSceneStrategy.kt
#	app/src/main/java/to/bitkit/ui/nav/entries/HomeEntries.kt
#	app/src/main/java/to/bitkit/ui/nav/entries/OnboardingEntries.kt
#	app/src/main/java/to/bitkit/ui/nav/entries/SettingsEntries.kt
#	app/src/main/java/to/bitkit/ui/nav/entries/SheetEntries.kt
#	app/src/main/java/to/bitkit/ui/nav/entries/TransferEntries.kt
#	app/src/main/java/to/bitkit/ui/nav/entries/WidgetEntries.kt
#	app/src/main/java/to/bitkit/ui/screens/settings/DevSettingsScreen.kt
#	app/src/main/java/to/bitkit/ui/screens/wallets/HomeScreen.kt
#	app/src/main/java/to/bitkit/ui/screens/wallets/activity/ActivityDetailScreen.kt
#	app/src/main/java/to/bitkit/ui/screens/wallets/send/AddTagScreen.kt
#	app/src/main/java/to/bitkit/ui/screens/wallets/send/SendAddressScreen.kt
#	app/src/main/java/to/bitkit/ui/screens/wallets/send/SendRecipientScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/AdvancedSettingsScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/BackupSettingsScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/LogsScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/SecuritySettingsScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/SettingsScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/appStatus/AppStatusScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/backups/ResetAndRestoreScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/backups/ShowMnemonicScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/general/GeneralSettingsScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/lightning/ChannelDetailScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/lightning/CloseConnectionScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/lightning/LightningConnectionsScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/pin/ChangePinConfirmScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/pin/ChangePinNewScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/pin/ChangePinResultScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/pin/ChangePinScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/support/SupportScreen.kt
#	app/src/main/java/to/bitkit/ui/settings/transactionSpeed/TransactionSpeedSettingsScreen.kt
#	app/src/main/java/to/bitkit/ui/sheets/GiftViewModel.kt
#	app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt
@jvsena42
Copy link
Member Author

Draft to fix issues after pull

@jvsena42 jvsena42 marked this pull request as draft December 29, 2025 12:40
@jvsena42 jvsena42 marked this pull request as ready for review December 29, 2025 13:20
@jvsena42
Copy link
Member Author

jvsena42 commented Dec 29, 2025

videos updated.
Still found this screen transition bug

internal_navigation_bug.webm

@jvsena42
Copy link
Member Author

@ovitrif we could merge this branch to fix the timed sheet bugs in the base branch

@ovitrif ovitrif merged commit cbc152e into feat/nav3 Dec 29, 2025
6 of 13 checks passed
@ovitrif ovitrif deleted the fix/uniffy-timed-sheet-behavior branch December 29, 2025 16:07
@piotr-iohk
Copy link
Collaborator

@jvsena42 it is merged, but I'll ask here. HighBalance timesheet is shown "automatically" after backup and you don't have to trigger like backup one. On iOS you need to trigger every time.

iOS Android
Screen.Recording.2025-12-30.at.09.29.34.mov
Screen.Recording.2025-12-30.at.09.26.09.mov

@jvsena42
Copy link
Member Author

@jvsena42 it is merged, but I'll ask here. HighBalance timesheet is shown "automatically" after backup and you don't have to trigger like backup one. On iOS you need to trigger every time.

iOS Android
Screen.Recording.2025-12-30.at.09.29.34.mov

Screen.Recording.2025-12-30.at.09.26.09.mov

https://github.com/synonymdev/bitkit-ios/blob/cb9d2234407c74037b5bbe650140de7af0778d2f/Bitkit/Managers/TimedSheets/TimedSheetManager.swift#L143

According iOS code, it should display the next sheet in the queue if the app is still on Home Screen. I'll open a issue to check this

@piotr-iohk
Copy link
Collaborator

According iOS code, it should display the next sheet in the queue if the app is still on Home Screen. I'll open a issue to check this

Seems not to be the case (at least from what I observe).

@piotr-iohk
Copy link
Collaborator

One more thing around the timesheet differences. It is after getting spending balance: on iOS we get two sheets (Bg payments + Frictionless payments ) and on Android only Frictionless payments.

iOS Android
two sheets: Bg payments, Frictionless payments one sheet: Frictionless payments
Screen.Recording.2025-12-30.at.11.58.09.mov
Screen.Recording.2025-12-30.at.11.00.39.mov

@jvsena42
Copy link
Member Author

One more thing around the timesheet differences. It is after getting spending balance: on iOS we get two sheets (Bg payments + Frictionless payments ) and on Android only Frictionless payments.

iOS Android
two sheets: Bg payments, Frictionless payments one sheet: Frictionless payments
Screen.Recording.2025-12-30.at.11.58.09.mov

Screen.Recording.2025-12-30.at.11.00.39.mov

What android version are you using? the Sheet is displayed only if the notification is not allowed and for android <=10 it is allows by default

@piotr-iohk
Copy link
Collaborator

What android version are you using? the Sheet is displayed only if the notification is not allowed and for android <=10 it is allows by default

Android version = 13.

@jvsena42
Copy link
Member Author

What android version are you using? the Sheet is displayed only if the notification is not allowed and for android <=10 it is allows by default

Android version = 13.

Actually it is starting from Android 13 (API level 33)
I see that the foreground notification is displayed and it depends on the notification permission
I suppose the notification was allowed from the android system dialog at startup before the video started 🤔

@jvsena42
Copy link
Member Author

What android version are you using? the Sheet is displayed only if the notification is not allowed and for android <=10 it is allows by default

Android version = 13.

Actually it is starting from Android 13 (API level 33) I see that the foreground notification is displayed and it depends on the notification permission I suppose the notification was allowed from the android system dialog at startup before the video started 🤔

If the OS notification is denied, the flow should be the same as iOS.

@piotr-iohk
Copy link
Collaborator

What android version are you using? the Sheet is displayed only if the notification is not allowed and for android <=10 it is allows by default

Android version = 13.

Actually it is starting from Android 13 (API level 33) I see that the foreground notification is displayed and it depends on the notification permission I suppose the notification was allowed from the android system dialog at startup before the video started 🤔

If the OS notification is denied, the flow should be the same as iOS.

Do you mean this notification?

Screenshot 2025-12-30 at 14 47 31

It is always accepted on e2e tests currently.

If the OS notification is denied, the flow should be the same as iOS.

Do you mean we should deny it now? 🤔

@jvsena42
Copy link
Member Author

What android version are you using? the Sheet is displayed only if the notification is not allowed and for android <=10 it is allows by default

Android version = 13.

Actually it is starting from Android 13 (API level 33) I see that the foreground notification is displayed and it depends on the notification permission I suppose the notification was allowed from the android system dialog at startup before the video started 🤔

If the OS notification is denied, the flow should be the same as iOS.

Do you mean this notification?

Screenshot 2025-12-30 at 14 47 31 It is always accepted on e2e tests currently.

If the OS notification is denied, the flow should be the same as iOS.

Do you mean we should deny it now? 🤔

exactly

@piotr-iohk
Copy link
Collaborator

Do you mean we should deny it now? 🤔
exactly

Ok, got it. So in order for bg payments sheet to appear we need to do "Don't allow" on this system alert. (Verified it is happening indeed)
I think I will keep it as is (Allow), because I see the alert re-appering during the test... which is a bit suboptimal and will surely cause flakiness to the tests.

So, we'll just ignore bg payments for andorid.

@jvsena42
Copy link
Member Author

Do you mean we should deny it now? 🤔
exactly

Ok, got it. So in order for bg payments sheet to appear we need to do "Don't allow" on this system alert. (Verified it is happening indeed) I think I will keep it as is (Allow), because I see the alert re-appering during the test... which is a bit suboptimal and will surely cause flakiness to the tests.

So, we'll just ignore bg payments for andorid.

Good point, currently the system is fully deciding when stop displaying this dialog, but I could add a delay too.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Unify timesheets behavior on Android to match iOS HighBalance timedsheet not displayed when expected.

4 participants