Skip to content

fix: harden native chat, drafts and settings - #4

Draft
649472774 wants to merge 14 commits into
mainfrom
649472774-native-ui-refinement
Draft

fix: harden native chat, drafts and settings#4
649472774 wants to merge 14 commits into
mainfrom
649472774-native-ui-refinement

Conversation

@649472774

@649472774 649472774 commented Sep 6, 2026

Copy link
Copy Markdown
Owner

Native UI refinement

Preserves CopilotGo's Chinese-first Material 3 identity and existing subscription model. This is functional hardening, not a replacement mockup.

  • Full-width composer with a single attachment/voice menu, pinned send/stop controls, accessible previews, explicit model/catalog states and manual scroll intent with return-to-latest.
  • Durable bounded drafts containing attachment references, stable idempotent submission IDs, accepted-only clearing, safe core-owned session mutations and file-only Markdown sharing.
  • Selectable native Markdown with working safe links, code copy/wrap, common tables, bounded background parsing and bounded asynchronous math. Original content remains available through message export.
  • Responsive/light-dark native screens, semantic colors, large-font controls, retained proxy forms, unsaved-change decisions, explicit offline/error states and logout navigation only after durable credential clearing.

Integration boundaries

UI implementation checkpoint: cccef2546df7b6e2fac84fb2a06a9e5cae42f572.
Test-only native settings/window follow-up: 0fb10c4.

The branch also carries prerequisite copies of the core, Remote and release work. Integration should cherry-pick these UI checkpoints after its existing prerequisite commits, not replay duplicate prerequisite history. No version bump, main merge, release or shared-device operation was performed in this workstream. Remote/MainActivity, updater and core implementations remain owned by their workstreams.

Acceptance

  • 127 UI-package JVM tests passed: 71 native UI, 43 Remote and 13 updater cases.
  • Debug and instrumentation APKs assembled; strict Android lint completed with zero errors.
  • 24 native device cases are compiled and handed to the reserved integration lane: NativeUiAcceptanceTest (13), MarkdownRenderingTest (5), NativeSettingsAcceptanceTest (6). Device execution remains pending.
  • Controlled fixtures cover 200% text, CJK/emoji, 48dp targets, drafts/rejection/duplicates, manual scrolling, keyboard, destructive decisions, offline UI, cancellation/refresh races, full login/settings/proxy/account screens, failed logout recovery and current-window session-list adaptation.
  • Settings fixtures use actual UI/VMs with in-memory credential/preferences/vault interfaces and a network-blocking provider. No real conversations, credentials or keystore entries are used in fixture screenshots.

Rendering has explicit preview/resource limits rather than silent truncation: 65,536 source characters, 160 blocks and a shared 512 table-cell budget. Markdown export contains conversation text and attachment names; it does not bundle original attachment files.

Tong Xie and others added 9 commits September 7, 2026 00:29
Align AGP built-in Kotlin and Compose plugins, use supported AndroidX versions, add WebKit and Compose test dependencies, restore lint failures, and exclude credential stores from cloud and device backups. Preserve the existing app version and debug package identity.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Keep non-streaming body reads off the caller thread, close responses across callback cancellation races, and cancel the underlying socket through response consumption. Add readiness-gated proxy clients without invalidating live dispatchers and controlled HTTP lifetime regressions.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add generation-safe auth and verified no-backup credential migration; typed cached model discovery without retired fallbacks; SSE error/completion framing; atomic session snapshots, backups, tombstones, summary cache and bounded inactive state. Add content-addressed attachment references, bounded coherent prompt history with retained vision, durable send receipts and awaited UI action APIs. Preserve v0.1.33 JSON and existing public adapters for coordinated UI integration.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Separate Remote browser state, navigation, network routing, transfers and page enhancements from Compose. Keep edge-to-edge permanent, apply native target IME insets, preserve detached documents and recover explicitly from renderer or memory loss. Gate WebView proxy transitions, await browser data clearing, and reject untrusted committed documents. Add focused callback-order, origin, proxy and hermetic device regression coverage. Device acceptance remains with the integration owner; no version or release changes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Preserve queued stream deltas before errors, join concurrent logout operations, scope catalog and submissions to account generations, reject changed idempotency payloads, and keep orphaned replies out of unrelated prompt turns. Harden proxy and attachment boundaries and no-follow atomic writes. Add complete regression discovery coverage, portable real-DataStore JVM fixtures, and isolated default-Android-backend plus Keystore instrumentation cases; production key alias and DI defaults are unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Use the published OkioStorage and PreferencesSerializer APIs for token/proxy JVM migration fixtures. createWithPath also selects FileStorage under DataStore 1.1.7 and retains the Windows temp-file replacement bug. Keep all persistence assertions and native default-backend instrumentation unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Use full-response cancellation and initialized proxy-aware transport, bounded trusted release downloads, SHA-256 verification and atomic private cache files. Check actual APK package, version, Android requirements and current signer identity before handing control to the system installer. Serialize update operations, retain truthful retry/permission states, and wire shared proxy readiness and model catalog DI. Add controlled JVM and Android fixture coverage without touching a live account or device.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Preserve Chinese-first Material 3 while making the composer, model selection, message actions, settings and files usable across narrow windows and large fonts. Persist bounded draft references before idempotent submission, keep rejected input, and route deletions through the core lifecycle.

Add selectable bounded asynchronous Markdown/math, safe file-only exports, explicit loading/offline/error states, retained proxy drafts, and durable logout navigation. Include focused JVM cases and controlled native acceptance fixtures. Version and release ownership remain with integration.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Exercise real login, proxy, account and settings screens at 200 percent font scale using in-memory core fixtures and a network-blocking provider. Cover failed save/logout recovery, unsaved Back decisions, single-target switch semantics and actual-window session-list adaptation without real credentials or shared data.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Tong Xie and others added 5 commits September 7, 2026 11:49
Replace concurrent first-layout scrollToItem callers with one conflated remeasure-request owner while retaining manual reading and explicit latest intent. Size attachment removal at48dp, prioritize dialog errors, and give proxy decisions a single wrapping action layout.

Strengthen controlled instrumentation with owned full-device screenshots, actual IME visibility/screen bounds/native font scale and Back assertions. Prove long-press Copy through the real platform menu and clipboard, scope dialog assertions, and await actual discard completion without weakening thresholds.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Capture the unique Markdown text node instead of an ambiguous root collection that includes selection-handle popups. Keep real native Copy, clipboard and full-device evidence assertions unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Configure the actual ActivityScenario host synchronously and reaffirm RESIZE after content installation before IME focus. Require retained portrait chrome and bounded send-to-keyboard gap, not only an upper-bound check.

Capture physical frames before Compose capture and save before/after window, root-view, inset, rotation, font and activity identity metadata. Keep IME visibility, bounds, Back, clipboard and bitmap ownership assertions intact; no production inset changes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Place the existing title, warning and all decision actions inside one bounded scrollable Material dialog, so large-font landscape windows cannot clip Discard outside the window. Preserve copy, validation and48dp actions; the fixture scrolls to and captures the real actions before requiring exactly one completed exit.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add a separate native regression that performs five real table-to-oversized replacements, checks visible final content and preview notices, recreates the Activity with the same controlled source, and finally destroys it normally. Preserve every existing test and all production/runtime dependencies; use observable completion rather than arbitrary sleeps.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
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