Skip to content

fix(mobile): align iOS and Android with HarmonyOS interaction behavior - #3286

Closed
wgqqqqq wants to merge 1 commit into
GCWing:mainfrom
wgqqqqq:codex/mobile-parity-pr3284
Closed

wgqqqqq wants to merge 1 commit into
GCWing:mainfrom
wgqqqqq:codex/mobile-parity-pr3284

Conversation

@wgqqqqq

@wgqqqqq wgqqqqq commented Oct 8, 2026

Copy link
Copy Markdown
Collaborator

Summary

Follow up on #3284 by bringing its model-role, subagent, and composer behavior to the native iOS and Android apps. Shared model selection and message ownership stay in Kotlin; focus, keyboard, safe-area handling, and localized labels stay in the native surfaces.

Behavior Change
Model roles Add distinct primary and fast selector rows and badges on configured concrete models. Resolve only enabled defaults; fast falls back to primary with a localized explanation. Preserve semantic selectors when sending to the host.
Subagent ownership Recognize Task owners even when marked isSubagent; keep orphan children in their own branch without repeating their content. Verify live updates preserve expanded cards.
Collapsed draft Show a single-line ellipsis preview over the same editor so expanding preserves focus and the full draft. Keep the iOS editor interactive while its text is visually hidden.
Voice control Show the supplemental microphone only when expanded, and retain its disabled position while busy.
Bottom surface Extend the Android conversation background into the navigation area while its composer clears the navigation bar. Extend the iOS fade behind the home indicator using native safe-area behavior.

Add native English/Chinese role labels and focused shared/native regression coverage. Existing file preview and runtime-file behavior was regression-tested; Harmony-specific file diagnostics are not ported by this change.

Type and Areas

Type: bug fix / UI/UX / test.

Areas: native Android, native iOS, mobile shared core-domain and core-feature.

Motivation / Impact

Before this change, the native model picker exposes only concrete model IDs, marked Task owners can lose child steps, and a collapsed draft competes for space with a supplemental microphone. Both native apps now expose the same role choices and subagent ownership behavior as HarmonyOS, with compact draft previews and native bottom-inset handling.

Verification

Passed on the change before rebasing onto latest upstream/main. The intervening mobile changes affect only HarmonyOS i18n files; the native/shared files tested here are unchanged by the rebase.

  • Shared JVM: 56 focused tests passed (1 core-domain, 55 core-feature):
    cd src/apps/mobile/shared
    ./gradlew :core-domain:jvmTest --tests '*ModelSelectionPolicyTest' \
      :core-feature:jvmTest --tests '*ConversationModelPresentationTest' \
      --tests '*MessageBlockPresentationTest' --tests '*FileReference*' \
      --tests '*FilePreviewFormatTest' --tests '*RuntimeFilesStoreTest' --tests '*selectingModel*'
  • Android :app:assembleDebug passed. Dedicated emulator instrumentation passed on phone and wide configurations (3 tests each):
    cd src/apps/mobile/android
    ./gradlew :app:connectedDebugAndroidTest \
      '-Pandroid.testInstrumentationRunnerArguments.class=com.openbitfun.mobile.app.ComposerModelSelectorTest,com.openbitfun.mobile.app.ChatMessageBubbleTest#anOpenSubagentReceivesNewStepsWithoutClosing'
  • iOS Debug XCFramework generation and simulator app build passed. iPhone/iPad each passed the following four StreamingPresentationUITests: semantic model-role selection, collapsed draft preservation and expanded-only microphone, subagent details/live completion, and full-shell keyboard/streaming visibility. Tests run with xcodebuild test -project OpenBitFun.xcodeproj -scheme OpenBitFun -parallel-testing-enabled NO and -only-testing:OpenBitFunUITests/StreamingPresentationUITests/<test> for:
    • testComposerRoleRowsSelectSemanticModel
    • testCollapsedDraftKeepsTextAndShowsVoiceOnlyWhenExpanded
    • testSubagentDetailsMatchHarmonyPreviewAndThinking
    • testFullShellRemainsVisibleThroughKeyboardAndStreaming
  • iOS Testing/run-pure-swift-tests.sh, pnpm run mobile:ui:check, pnpm run theme:color-audit:all, and git diff --check passed.
  • Updated apps installed on dedicated QA simulators; model menus and compact draft layouts inspected.

Existing failures reproduced on the untouched main baseline:

  • ConversationViewTest.insetsKeepTheEndsOfTheTranscriptClearOfTheFloatingOverlays, line 505: the short transcript does not move upward when bottom padding grows.
  • Broader shared regression: RemoteSessionStoreTest.imageSendFailureDoesNotConsumeAttachmentsAndAckKeepsNewTyping.
  • mobile:architecture: existing cross-surface read in ClientBuildContractTest and existing exported default parameters in AccountUiState, RemoteSidebarPresentation, and ConversationModels. No baselines or assertions were loosened.

Reviewer Notes

Native validation uses remote-session fixtures and simulated transport; it is not a live remote-host end-to-end run. Remote Workspace, Peer Device Mode, and Detached Dispatch were not exercised.

RemoteCommand and persisted record shapes are unchanged. Existing concrete model IDs and the four-argument native ModelOption constructor remain supported. Android's existing default remains Simplified Chinese; explicitly chosen language settings remain intact.

Checklist

  • This PR is focused and does not include secrets, temporary prompts, generated scratch files, or unrelated artifacts.
  • Relevant verification is recorded above, or skipped checks are explained.
  • User-facing strings, docs, and locales are updated where applicable.

@wgqqqqq wgqqqqq closed this Oct 8, 2026
@wgqqqqq
wgqqqqq deleted the codex/mobile-parity-pr3284 branch October 8, 2026 02:14
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