Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
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 @@ -4,6 +4,8 @@ The Android development app uses native form sheets for Bot and group profiles,

## Sub-features

- `app-dialogs` opens Chats → Host picker → the designated QA Host's More menu → Unpair. Both menu and confirmation use the rounded app surface with Settings tokens, not the native Android Alert. Cancel, Android Back and tapping outside each close only the prompt and leave the drawer and saved pairing unchanged. Repeat light/dark × font1/1.3/2; all consequence text and actions remain reachable, scrolling when needed. From Chats +, verify the same menu style and the existing creation target; from a prepared QA group, open member removal and disband confirmations without submitting a destructive action on shared data. A separate disposable pairing/group is required to prove destructive success. Async refusal/retry and double-submit isolation have focused logical tests; record whether they were exercised natively. The same adapter preserves existing iOS system presentation; iOS runtime and TalkBack require their own qualification.

- `form-keyboard` requires a real soft keyboard for every editable route: pairing, Inbox custom answers, Activity answer cards, model preset names and search, Host appearance, routine creation/editing, group rename, expanded chat answers/drafts, browser/computer text entry and Chats search. Open a low field and require its native bounds and the following action to stay above the IME. The shared Android script accepts `--mode form-keyboard --title <field accessibility label> --action <following action accessibility label>` after opening the designated form. It preserves existing drafts and autofocus modals, refuses floating/hidden keyboards and fails overlap beyond one physical pixel of frame rounding. Repeat focus changes, multiline/caret growth, failed-save draft retention, keyboard dismissal/reopening and font1/1.3/2 in light/dark. Preserve canonical QA state and explicitly queue iOS qualification.

- `model-settings` opens Settings → Models and presets for the selected Host's global default and shared preset library, and profile → Model for one Bot's Orchestrator/Assignment overrides. Search the chooser by provider/name, check a no-results query and clear it, save an available model and confirm the canonical Host route. Check Assignment default/allowed choices and reasoning effort, create/edit/apply a designated QA preset, and restore the Bot's original model plan. Read failures retain cached content with retry; failed saves retain the input. Repeat light/dark and system font1/1.3/2. Global writes and preset edits must not rewrite independent Bot plans; changing the Orchestrator must retain Assignment choices/efforts/notes. Restore all QA model settings after the journey.
Expand Down
13 changes: 13 additions & 0 deletions .github/pr-screenshots/2106-android-dialogs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Android application dialogs — native comparisons

Six matching theme/font cases for Unpair and Host menu, plus dark/light default-font Create and Disband comparisons: 16 pairs / 32 native screenshots.

Before ran `c7dc11fddfde5432c597671cce17422fe4283b93`; its dialog implementation matches merged main `ccfcbd17175df2eb019cf5e71b2e038ddd41d14f`. After ran `704fa745bd190d57b491b9b6e56589ffdfbc908b`; app behavior is unchanged at `50d810da197c748fabcb92bf38b6e25a3d5fd0d0` (formatting/test-file isolation only). See `provenance.json` for environment and limits.

Each image is a fixed matching dialog-focused crop of the real Android frame: x0/y650/width1220/height1500. All dialog panels and actions remain inside the crop. It omits the system status bar and developer chrome; no pixels inside the dialog were edited. Full frames and XML remain private. A development-client Expo Router duplicate-linking warning appeared outside this crop during ADB font-scale changes in both baseline and new runs; the normal cold reopen was separately verified. These images do not establish that warning was fixed.

`native-matrix.json` records all six native Unpair cases: panel bounds, minimum48dp actions, equal-width normal/intermediate actions, stacked large-text actions, and cancel/Back/backdrop dismissal with the Host drawer and pairing retained. Create cancellation also passed in both themes. `native-extra.json` records group confirmation cancellation, real search-keyboard dismissal on opening a menu, and cold-open retention of the original Host and QA group. No shared Host was unpaired, group disbanded, member removed, message sent or pending request answered.

Logical tests cover explicit confirmation, single execution while pending, refusal/retry and stale-request isolation. Native destructive submission and native failure injection were not exercised on shared data. iOS native, TalkBack gestures and120FPS remain unqualified. The UI adapter retains iOS system alerts/action sheets and does not replace OS-owned permission prompts.

`original-speed.mp4` is a real native menu → confirmation → Cancel recording, cropped to the same dialog region and scaled to616px wide, without audio or frame interpolation. It retains227 source frames at their original timing (21.64s). `half-speed.mp4` retains those same227 frames with doubled presentation timestamps (43.13s). The recorder's35s wall-clock limit includes idle time that the variable-frame-rate stream does not encode after its final changed frame. These clips establish interaction presentation, not an FPS benchmark.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading