Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -683,7 +683,7 @@ fun SubscriptionSheet(appViewModel: AppViewModel, initialRoute: SubscriptionRout
.gradientBackground(startColor = Colors.Gray6, endColor = Colors.Black)
) {
if (subscription == null) {
Column(Modifier.fillMaxSize().padding(horizontal = 16.dp)) {
Column(Modifier.fillMaxSize().navigationBarsPadding().padding(horizontal = 16.dp)) {
SheetTopBar(titleText = stringResource(R.string.subscriptions__subscription))
FillHeight()
BodyM(stringResource(R.string.subscriptions__unavailable), color = Colors.White64)
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/to/bitkit/ui/sheets/ForgotPinSheet.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package to.bitkit.ui.sheets
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.material3.ExperimentalMaterial3Api
Expand Down Expand Up @@ -56,6 +57,7 @@ private fun Content(
.fillMaxWidth()
.sheetHeight(isModal = true)
.gradientBackground()
.navigationBarsPadding()
.padding(horizontal = 16.dp)
) {
SheetTopBar(
Expand Down
1 change: 1 addition & 0 deletions changelog.d/next/1572.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The Forgot PIN and unavailable subscription sheets now keep their buttons above the navigation bar.
1 change: 1 addition & 0 deletions journeys/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ Known differences in the corpus, as of the iOS port (synonymdev/bitkit-ios#691):
| `transfers/closed-channel-transfer-settles.xml` | not ported — the closed-channel and order-closure settle rules are an iOS follow-up |
| `onchain-receive/*` | port pending in synonymdev/bitkit-ios#588, which wires `onchainTransactionConfirmed` into the same received-sheet flow but carries no `journeys/` files. Two adaptations when it lands: iOS suppresses replayed historical receives with a `pendingRestoreActivitySeen` flag cleared by the first post-restore on-chain sync, not the one-hour block-timestamp guard used here, so a stale-confirmation step has to drive a restore instead of a clock; and iOS has no foreground-service path, so `confirmed-only-background-notification.xml` has no counterpart |
| `backup/show-mnemonic-long-words.xml` | not ported — the long-word fit is an Android-only change (synonymdev/bitkit-android#633); whether iOS wraps long words at larger text sizes is unchecked |
| `security/forgot-pin-nav-bar-inset.xml` | not ported — Android-only fix (synonymdev/bitkit-android#1572): the Android sheet host adds no navigation-bar inset, so each sheet screen pads itself. iOS sheets keep their content inside the bottom safe area |
| `deeplinks/pubky-contact.xml` | ported — same contact routing and unlock behavior |
| `pubky-auth/signin-cold-start.xml` | `pubky-auth/open-signin-link.xml`, adapted — iOS opens the same sign-in link on a terminated app through `bitkit://pubky-auth/signin`. Android only: the raw `pubkyauth` scheme, the "Loading Your Pubky Profile" toast while the session restores, and Authorize through to `PubkyAuthOK` |
| `pubky-auth/signin-with-second-link.xml` | not ported — iOS still drops a pending sign-in link when a second link opens on the PIN screen (synonymdev/bitkit-ios#985); port it with that fix |
Expand Down
46 changes: 46 additions & 0 deletions journeys/security/forgot-pin-nav-bar-inset.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<journey name="forgot pin sheet clears navigation bar">
<description>
The "Forgot PIN?" sheet keeps its "Reset (Requires Recovery Phrase)" button above the
navigation bar. The sheet host applies no bottom inset, so the sheet content has to; without it
the button sits under the gesture handle on devices with gesture navigation.

Precondition: onboarded dev wallet with gesture navigation enabled on the device and the PIN
disabled (Settings ▸ Security ▸ PIN Code shows "Disabled"), no biometrics enrolled on the
device. Start on the wallet home screen. The journey enables a PIN you choose and disables it
again at the end, so remember it. Enter a wrong PIN exactly once: exhausting attempts leads to
the forgot-PIN wallet reset, and never tap the Reset button.

The navigation-bar top edge is the screen height (`adb shell wm size`) minus the bottom
`navigationBars` inset that `adb shell dumpsys window windows` reports. `android layout` gives
the Reset button no bounds and no tag, so read its bounds from `adb shell uiautomator dump`. With
no biometrics enrolled, the biometrics Skip button exposes only its text. Android only; see the
cross-platform table in `journeys/README.md`.
</description>
<actions>
<action>Tap the menu button (tag "HeaderMenu") and tap Settings (tag "DrawerSettings")</action>
<action>Tap the Security tab (tag "Tab-security")</action>
<action>Tap PIN Code (tag "PINCode")</action>
<action>Tap Enable PIN (tag "EnablePin")</action>
<action>Enter a 4-digit PIN with the number pad (tags "N0"–"N9")</action>
<action>Re-enter the same 4-digit PIN to confirm it</action>
<action>On the biometrics screen, tap Skip</action>
<action>Tap OK (tag "OK")</action>
<action>Press back until the wallet home screen is visible (testTag "Send")</action>
<action>Run adb shell input keyevent KEYCODE_HOME and wait 3 seconds</action>
<action>Run adb shell am start -n to.bitkit.dev/to.bitkit.ui.MainActivity</action>
<action>Verify the PIN pad is visible with the text "Please enter your PIN code" and keys (tag "N1")</action>
<action>Enter one wrong 4-digit PIN</action>
<action>Verify the attempts text (tag "AttemptsRemaining") reads "... attempts remaining. Forgot your PIN?"</action>
<action>Tap the attempts text (tag "AttemptsRemaining")</action>
<action>Verify the "Forgot PIN?" sheet is visible (tag "ForgotPIN")</action>
<action>Verify from `adb shell uiautomator dump` that the bottom bound of the "Reset (Requires Recovery Phrase)" button is above the navigation-bar top edge</action>
<action>Take a screenshot and verify the gesture handle does not overlap the Reset button</action>
<action>Press back and verify the PIN pad is visible again with keys (tag "N1")</action>
<action>Enter the PIN chosen above and verify the wallet home screen is visible (testTag "Send")</action>
Comment thread
jvsena42 marked this conversation as resolved.
<action>Tap the menu button (tag "HeaderMenu") and tap Settings (tag "DrawerSettings")</action>
<action>Tap the Security tab (tag "Tab-security")</action>
<action>Tap PIN Code (tag "PINCode")</action>
<action>Tap Disable PIN (tag "DisablePin") and enter the PIN chosen above on the "Disable PIN" screen</action>
<action>Verify the PIN Code row (tag "PINCode") shows "Disabled"</action>
</actions>
</journey>
Loading