Skip to content

Conversation

@praveenperera
Copy link
Contributor

@praveenperera praveenperera commented Jan 14, 2026

Summary

  • Makes the entire address section tapable to focus the address field
  • Previously only tapping directly on the address text would focus the field
  • Now tapping the header, subtitle, or any empty space in the section focuses the field

Fixes #460

Test plan

  • Open send flow
  • Tap on "Enter address" header → address field focuses
  • Tap on "Where do you want to send to?" subtitle → address field focuses
  • Tap on empty space around address → address field focuses

Summary by CodeRabbit

  • Bug Fixes
    • Enhanced address entry usability: Users can now tap anywhere in the address entry area to focus the address field, providing a more seamless interaction experience across all platforms.

✏️ Tip: You can customize this high-level summary in your review settings.

@praveenperera praveenperera force-pushed the pr/tapable-address-section branch from 594493c to 7611d96 Compare January 14, 2026 17:19
@praveenperera praveenperera changed the base branch from dev to master January 14, 2026 17:22
@praveenperera praveenperera force-pushed the pr/tapable-address-section branch from 7611d96 to 9858663 Compare January 16, 2026 14:41
@bitcoinppl bitcoinppl deleted a comment from greptile-apps bot Jan 16, 2026
@bitcoinppl bitcoinppl deleted a comment from coderabbitai bot Jan 16, 2026
@coderabbitai
Copy link

coderabbitai bot commented Jan 16, 2026

📝 Walkthrough

Walkthrough

Adds clickable/tappable functionality to the address input view on both Android and iOS platforms. The entire address section is now interactive, allowing users to tap anywhere within the area to focus the address field instead of requiring interaction with specific internal elements.

Changes

Cohort / File(s) Summary
Address View Tapability
android/app/src/main/java/org/bitcoinppl/cove/flows/SendFlow/EnterAddressView.kt, ios/Cove/Flows/SendFlow/SetAmountScreen/EnterAddressView.swift
Added clickable modifier (Android) and tap gesture handler (iOS) to make the entire address view area tappable, routing user taps to focus the address field for improved usability

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Poem

🐰 Hop and tap, the address field awaits!
No more searching for the perfect gate,
The whole view listens to your touch,
Focus flows freely—we love it so much!
Easier entries across every screen. 🎯

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: making the entire address section tapable in the send flow, which directly aligns with the changeset modifications.
Linked Issues check ✅ Passed The pull request fulfills the requirement from issue #460 by making the entire address section tapable (both Android and iOS implementations) to improve usability.
Out of Scope Changes check ✅ Passed All changes are directly scoped to the stated objective: adding tap interactions to the address section in both Android and iOS send flow views.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

🧹 Recent nitpick comments
android/app/src/main/java/org/bitcoinppl/cove/flows/SendFlow/EnterAddressView.kt (1)

61-66: Consider disabling ripple indication for cleaner UX.

The clickable modifier shows a ripple effect by default. For this tap-to-focus behavior, a ripple across the entire section might feel heavy. Consider using clickable with indication = null for a subtler interaction.

✨ Suggested change
     Column(
         modifier =
             Modifier
                 .fillMaxWidth()
-                .clickable { focusRequester.requestFocus() },
+                .clickable(
+                    indication = null,
+                    interactionSource = remember { MutableInteractionSource() }
+                ) { focusRequester.requestFocus() },
     ) {

You'll need to add these imports:

import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.runtime.remember

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 18fcb1a and 2ce207d.

📒 Files selected for processing (2)
  • android/app/src/main/java/org/bitcoinppl/cove/flows/SendFlow/EnterAddressView.kt
  • ios/Cove/Flows/SendFlow/SetAmountScreen/EnterAddressView.swift
🧰 Additional context used
📓 Path-based instructions (2)
android/app/src/main/java/org/bitcoinppl/cove/**/*.kt

⚙️ CodeRabbit configuration file

android/app/src/main/java/org/bitcoinppl/cove/**/*.kt: ⚠️ CRITICAL FFI/Threading Policy - READ FIRST:

  • NEVER suggest moving Rust FFI calls to background threads (withContext(Dispatchers.IO))

  • Rust FFI calls are SYNCHRONOUS and FAST - they complete in microseconds

  • The Rust core uses Tokio runtime internally and handles all async operations

  • Database operations (redb) are optimized and do NOT block the UI thread

  • ONLY suggest Dispatchers.IO with profiling evidence showing >16ms UI blocking

  • If you see a Rust FFI call on the main thread, DO NOT FLAG IT - this is correct

  • Ignore generated bindings code in android/app/src/main/java/org/bitcoinppl/cove_core/**

  • Verify correct functionality and logic consistency.

  • Check for idiomatic Kotlin usage and performance best practices.

FFI Resource Management:

  • Always verify that UniFFI objects implementing AutoCloseable call .close() before being nulled
  • Example: Mnemonic must call .close() to trigger zeroization of sensitive data
  • Use DisposableEffect for cleanup in Compose, never just null references

Compose Best Practices:

  • LaunchedEffect should be keyed to actual dependencies, not Unit
  • Set loading states at the beginning of LaunchedEffect blocks

Files:

  • android/app/src/main/java/org/bitcoinppl/cove/flows/SendFlow/EnterAddressView.kt
ios/Cove/**/*.swift

⚙️ CodeRabbit configuration file

ios/Cove/**/*.swift: - Review SwiftUI view code for proper layout, best practices

  • Identify spelling mistakes in comments, string literals, and documentation
  • Ignore generated bindings code in ios/CoveCore/Sources/CoveCore/generated/**

Files:

  • ios/Cove/Flows/SendFlow/SetAmountScreen/EnterAddressView.swift
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: compile-android
  • GitHub Check: ktlint
  • GitHub Check: compile-ios
  • GitHub Check: test (ubuntu-latest)
  • GitHub Check: test (macos-latest)
🔇 Additional comments (2)
ios/Cove/Flows/SendFlow/SetAmountScreen/EnterAddressView.swift (1)

54-57: LGTM! Correct SwiftUI pattern for expanding tap area.

Using .contentShape(Rectangle()) with .onTapGesture is the idiomatic way to make the entire VStack tappable, including transparent areas and spacers. Child interactive elements (QR button, text editor) will properly receive their gestures first due to SwiftUI's gesture priority system.

android/app/src/main/java/org/bitcoinppl/cove/flows/SendFlow/EnterAddressView.kt (1)

67-159: Rest of the implementation looks good.

The focus state management, bidirectional sync with LaunchedEffect, and conditional UI rendering (clear button, placeholder, spaced-out address) are all correctly implemented. The nested clickable on line 145 is now redundant with the outer Column's clickable, but keeping it doesn't cause issues.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@praveenperera
Copy link
Contributor Author

@greptile-apps pr review

@greptile-apps
Copy link

greptile-apps bot commented Jan 16, 2026

Greptile Summary

Enhanced the address entry UX by making the entire address section tapable to focus the address field, improving usability across both iOS and Android platforms.

  • Android: Added .clickable modifier to outer Column that triggers focusRequester.requestFocus() when tapped
  • iOS: Added .contentShape(Rectangle()) and .onTapGesture to VStack that sets presenter.focusField = .address
  • Both implementations correctly handle nested interactive elements (QR button, clear button) through proper event propagation
  • Changes are minimal, focused, and directly address the issue without over-engineering

Confidence Score: 5/5

  • This PR is safe to merge with minimal risk
  • The changes are simple, well-scoped UX improvements that use standard framework APIs correctly. Both platforms handle nested clickable elements properly by default (child elements consume events before parent handlers). The implementation is consistent across platforms and directly addresses the issue without introducing side effects.
  • No files require special attention

Important Files Changed

Filename Overview
android/app/src/main/java/org/bitcoinppl/cove/flows/SendFlow/EnterAddressView.kt Added clickable modifier to outer Column to make entire address section tapable - correctly implemented with proper event propagation
ios/Cove/Flows/SendFlow/SetAmountScreen/EnterAddressView.swift Added contentShape and onTapGesture to VStack to make entire address section tapable - properly handles tap area with Rectangle contentShape

Sequence Diagram

sequenceDiagram
    participant User
    participant AddressSection
    participant FocusSystem
    participant AddressField

    Note over User,AddressField: User taps anywhere in address section

    User->>AddressSection: Tap on header/subtitle/empty space
    AddressSection->>FocusSystem: Request focus (Android: focusRequester.requestFocus()<br/>iOS: presenter.focusField = .address)
    FocusSystem->>AddressField: Focus address input field
    AddressField->>User: Keyboard appears, ready for input

    Note over User,AddressField: User taps on interactive elements

    User->>AddressSection: Tap QR button
    Note over AddressSection: Event consumed by button,<br/>does not propagate to parent
    AddressSection->>AddressSection: Open QR scanner

    User->>AddressSection: Tap Clear button (Android, when focused)
    Note over AddressSection: Event consumed by button,<br/>does not propagate to parent
    AddressSection->>AddressField: Clear address text
Loading

@praveenperera praveenperera merged commit de834db into master Jan 16, 2026
10 checks passed
@praveenperera praveenperera deleted the pr/tapable-address-section branch January 16, 2026 15:08
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.

Make the entire address section tapable

2 participants