Skip to content

fix: preserve legacy navigation and insets when targeting Android 16 - #5

Open
MphoCodes wants to merge 1 commit into
codex/p1-toolchain-cifrom
codex/p1-target36-compatibility
Open

MphoCodes wants to merge 1 commit into
codex/p1-toolchain-cifrom
codex/p1-target36-compatibility

Conversation

@MphoCodes

@MphoCodes MphoCodes commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Target SDK 36 now uses explicit system-bar, cutout, keyboard and dispatcher Back compatibility for the existing XML screens. All thirteen activities use a temporary LegacyActivity/inset boundary; MainActivity closes its drawer first through OnBackPressedDispatcher and restores its callback after delegation. Visible Back controls use the dispatcher. Compile SDK 37, minimum 27, app identity and current account/data behavior remain intact.

A real API 27 regression test found that explicit resize/inset handling obscured the focused Login password, while the verified predecessor panned it above the keyboard. A minimal fillViewport ScrollView around the unchanged Login form fixes this; Registration's focused confirmation passes unchanged. No auth, timer or data redesign, Compose product UI, opt-outs, lint suppression, production writes or merge.

Base: codex/p1-toolchain-ci at 570b8dd0875f75a3985c4d0eb05470cfa0a116d5, rechecked against open/unmerged PR #4 immediately before submission. Head: 2626b7c0cb974b2aa271fcdd2652302ed6cf7428. This PR contains Task 2 only.

Validation completed locally (macOS arm64, JBR 21.0.10):

  • All five checks passed on the final source: checkDebugAarMetadata assembleDebug assembleDebugAndroidTest lintDebug testDebugUnitTest (87 tasks,17s). SARIF:204 warnings,0 errors; unit XML:1 passed. Existing legacy and GIF native-alignment warnings remain visible.
  • Clean API 27 Google APIs ARM64 r3/Android8.1:10 applicable instrumentation tests passed. Typed synthetic fixtures require30+; real bars/reset/reinstall, keyboard bounds, focused fields, drawer/actual system Back, form and visible-Back navigation run on27.
  • API 27 actual IME evidence:640px window minus205px IME gives435px usable child bottom; hide restores original bounds. Focused-password regression was RED on Task2, GREEN on the predecessor, then GREEN after the minimal layout fix (bottom386px versus keyboardtop391px).
  • Clean API 36 Google APIs ARM64 r7/Android16 build BE2A.250530.026.F3:14/14 instrumentation tests passed (XML0 failures/errors/skips), including typed cutout/IME, child inset forwarding, keyboard bounds and actual system Back.
  • API36 screenshot/XML walkthroughs passed at1080x1920/420dpi in gesture mode2 (actual edge swipe) and three-button mode0 (actual system Back button tap): launcher, registration/Login link, keyboard show/hide, drawer open/close and About visible Back. No credentials or saves.
  • Initial independent read-only review found one Important focused-field coverage issue, resolved by the predecessor comparison and RED/GREEN regression above. A final fresh review of exact committed head2626b7c0cb974b2aa271fcdd2652302ed6cf7428 and actual CI report artifacts found no confirmed Critical/Important/Minor code blockers; required API37 execution remained its pending acceptance gate. That condition is now met by the recorded results below on the unchanged head. Reports: review-result.md and review-submitted-head.md.

Submitted-head GitHub CI passed: workflow39237635970, hostjob118010485307 (all five checks), API27job118010485522 (10 tests), API36job118010485607 (14 tests), all completed/success. Device report artifacts: legacy-api27 and legacy-api36. Full job logs retained as ci-host.log, ci-api27.log and ci-api36.log.

Additional API36 verification passed on submitted head:14/14 tests in three-button mode and expanded-window walkthrough at2560x1600/240dpi (1067x667dp); display/density override, not a freeform/split-screen claim. Screenshots/XML in api36-expanded/.

API37 required gate completed on the unchanged submitted head: official Google APIs ARM64 r6/Android17 build CE2A.260420.019 (15611780), wiped Pixel2 AVD1080x1920/420dpi. All14 instrumentation tests passed34s; XML0 failures/errors/skips, including realIME and actual system Back. RealIME1920−872=1048px usable child bottom, then63px navigation padding/original bounds after hiding. Screenshot/XML walkthroughs passed gesturemode2(actual edge swipe), three-buttonmode0(actual system Back button tap), and expanded display/window2560x1600/240dpi(1067x667dp). Each covers launcher, registration/Login link, keyboard show/hide, drawer open/close and About visible Back. Representative images visually reviewed; no credentials or saves. Display/density overrides reset and task emulator stopped. Reports: api37-tests/, api37-gesture/, api37-threebutton/, api37-expanded/.

All assigned Task2 acceptance gates are complete. Final consolidated evidence: /Users/mphondlela/.codex/cache/p1-target36-compatibility/verification.md; full execution/rulings: progress.md.

Plan rulings:

  • Both old fitsSystemWindows consumers were in activity_main.xml; navigation-header design padding is preserved.
  • API27 platform dispatch drops synthetic typed IME/cutout overrides. Typed fixture assertions run on30+, with actual keyboard/bounds/Back coverage retained on27; modern tests assert full fixtures and forwarding.
  • The boundary explicitly enables adjustResize for pre30 IME delivery, records initial padding once, uses the maximum bottom inset and clears only handled types. Login's extra scroll container is the smallest additional plan-file change needed to preserve proven predecessor behavior.
  • Correct publisher commit pins from Task1 remain unchanged; API27 Linux uses published default/x86_64, API36 google_apis/x86_64. CI retains device reports even on failure.
  • The initial draft overlapped slow local API37 provisioning with CI. All required runtime/CI gates now pass on the same exact head; no merge or automatic integration is performed.

Evidence is retained outside source under /Users/mphondlela/.codex/cache/p1-target36-compatibility/: progress.md, review-result.md, host-candidate.log, green-focused-fields-api27/, baseline-focused-password-api27.log, api36-final/, api36-gesture/ and api36-threebutton/. Workflow reports upload as legacy-api27/legacy-api36 artifacts. Setup and repeatable commands are in docs/development/android-setup.md.

Coverage limit retained from exact-head review: authenticated Timesheet description-field visibility under the new IME policy remains unverified. Its activity exits without authentication; no credentials were entered and no predecessor comparison establishes a regression. All thirteen activities use the shared boundary, but these checks do not claim authenticated keyboard walkthroughs of every activity. The coordinator will carry focused Timesheet/profile checks into the separately reviewed isolated harness; no auth infrastructure or product scope is added to P1 for this unverified branch.

Broader legacy layout/UX and account/data/timer correctness remain later-stage work; these bounded checks do not claim those features fixed.

@MphoCodes
MphoCodes marked this pull request as ready for review October 19, 2026 10:49
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.

1 participant