feat(ui): complete ABox app experience redesign #10

Merged
KremeCN merged 40 commits from feat/ui-ux-redesign into main 2026-08-27 23:25:08 +08:00
Owner

Summary

  • rebuild the authenticated shell, device dashboard, device detail pages, scenes, activity timeline, account sheet, and settings experience
  • redesign infrared remote management and controls, including custom remotes, learn-state handling, slot isolation, and safe default content
  • add persisted theme controls with internal accent, color-style, and color-standard resolution while keeping dynamic color authoritative
  • add ABox profile defaults for the three exact gateway device names, editable starter scenes, and custom infrared remotes
  • persist real activity events for device commands, infrared actions, and scene execution
  • stabilize navigation and back behavior, including duplicate top-back protection and removal of the unfinished predictive-back option
  • update launcher icons and bilingual application name

Verification

  • :android:app:assembleDebug
  • installed the debug APK on emulator-5554
  • manually exercised device detail navigation, settings/theme navigation, infrared management, activity records, and repeated back actions
## Summary - rebuild the authenticated shell, device dashboard, device detail pages, scenes, activity timeline, account sheet, and settings experience - redesign infrared remote management and controls, including custom remotes, learn-state handling, slot isolation, and safe default content - add persisted theme controls with internal accent, color-style, and color-standard resolution while keeping dynamic color authoritative - add ABox profile defaults for the three exact gateway device names, editable starter scenes, and custom infrared remotes - persist real activity events for device commands, infrared actions, and scene execution - stabilize navigation and back behavior, including duplicate top-back protection and removal of the unfinished predictive-back option - update launcher icons and bilingual application name ## Verification - `:android:app:assembleDebug` - installed the debug APK on `emulator-5554` - manually exercised device detail navigation, settings/theme navigation, infrared management, activity records, and repeated back actions
KremeCN added 40 commits 2026-08-27 23:22:50 +08:00
KremeCN merged commit 86b7e5849b into main 2026-08-27 23:25:08 +08:00
KremeCN deleted branch feat/ui-ux-redesign 2026-08-27 23:25:08 +08:00
pr-agent-bot bot reviewed 2026-08-27 23:27:38 +08:00
pr-agent-bot bot left a comment

Inline comment

Inline comment
@@ -314,5 +314,5 @@
) {
val activeBackStackEntry by navController.currentBackStackEntryAsState()
val activeRoute = activeBackStackEntry?.actualRoute()
var backNavigationInFlight by remember { mutableStateOf(false) }
LaunchedEffect(activeRoute) {

返回锁死

backNavigationInFlight 只在 activeRoute 字符串变化时重置。快速双击同一场景或设备使相同路由连续入栈后,第一次返回仍会落在相同路由,LaunchedEffect 不会重新执行,导致该页面后续的顶部返回操作全部失效。应根据返回栈条目身份重置,或在弹栈完成后可靠地清除锁定状态。

**返回锁死** `backNavigationInFlight` 只在 `activeRoute` 字符串变化时重置。快速双击同一场景或设备使相同路由连续入栈后,第一次返回仍会落在相同路由,`LaunchedEffect` 不会重新执行,导致该页面后续的顶部返回操作全部失效。应根据返回栈条目身份重置,或在弹栈完成后可靠地清除锁定状态。 <!-- pr-agent-dedup: 10f9ce968c05 --> <!-- pr-agent-key-issue-location: 845458598d41 -->
pr-agent-bot bot reviewed 2026-08-27 23:27:38 +08:00
pr-agent-bot bot left a comment

Inline comment

Inline comment
@@ -134,4 +111,0 @@
onAddAutomatic = { navController.navigate(SceneRoutes.EDITOR_AUTOMATIC) },
onEditScene = { sceneId -> navController.navigate(SceneRoutes.editorFor(sceneId)) },
onExecuteScene = { sceneId -> navController.navigate(SceneRoutes.executionFor(sceneId)) },
)

设置不可达

账户弹窗是当前可见代码中唯一会打开设置界面的入口,但它始终调用 showTheme(returnToHome = false)。用户会直接进入主题详情,返回时又关闭整个设置层,因此设置首页中的渲染器、触感等选项无法访问。常规设置入口应先调用 showHome(),或允许主题详情返回设置首页。

**设置不可达** 账户弹窗是当前可见代码中唯一会打开设置界面的入口,但它始终调用 `showTheme(returnToHome = false)`。用户会直接进入主题详情,返回时又关闭整个设置层,因此设置首页中的渲染器、触感等选项无法访问。常规设置入口应先调用 `showHome()`,或允许主题详情返回设置首页。 <!-- pr-agent-dedup: 42945eab325e --> <!-- pr-agent-key-issue-location: a13e03273d5c -->
pr-agent-bot bot reviewed 2026-08-27 23:27:39 +08:00
pr-agent-bot bot left a comment

Inline comment

Inline comment
@@ -80,4 +84,2 @@
username = state.username,
profile = state.profile,
actionInProgress = actionState.inProgress,
errorMessage = actionState.errorMessage,

错误丢失

认证态不再接收或展示 actionState.errorMessage 和 inProgress,而账户操作会先关闭弹窗再发起切换提供方、结束会话或忘记凭据。若网络或存储操作失败且会话仍保持认证态,错误只被传给登录页,当前界面不会提供任何失败反馈或重试提示。

**错误丢失** 认证态不再接收或展示 `actionState.errorMessage` 和 `inProgress`,而账户操作会先关闭弹窗再发起切换提供方、结束会话或忘记凭据。若网络或存储操作失败且会话仍保持认证态,错误只被传给登录页,当前界面不会提供任何失败反馈或重试提示。 <!-- pr-agent-dedup: e481b1f2be2d --> <!-- pr-agent-key-issue-location: 9a722f0c727c -->
pr-agent-bot bot reviewed 2026-08-27 23:27:39 +08:00
pr-agent-bot bot left a comment

PR Reviewer Guide 🔍

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 5 🔵🔵🔵🔵🔵
🧪 PR contains tests
🔒 No security concerns identified

⚠️ Review coverage: The following files were not included in this review because of the token budget:

  • android/app/src/main/kotlin/com/flagship/abox/manager/ui/devicecenter/DeviceCenterViewModel.kt
  • android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/navigation/AuthenticatedNavigationRoutingTest.kt
  • android/app/src/main/kotlin/com/flagship/abox/manager/ui/defaults/ABoxDefaultContentInitializer.kt
  • android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/preferences/SettingsScreenTest.kt
  • android/app/src/main/kotlin/com/flagship/abox/manager/ui/scene/SceneEditorViewModel.kt
  • android/app/src/main/kotlin/com/flagship/abox/manager/ui/scene/RecordingSceneExecutor.kt
  • android/app/build.gradle.kts
  • android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/shell/MainAppShellTest.kt
  • android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/shell/AccountProviderDialogTest.kt
  • android/app/src/main/kotlin/com/flagship/abox/manager/ui/devicecenter/DeviceCenterModels.kt
  • android/app/src/main/kotlin/com/flagship/abox/manager/di/DeviceGatewayModule.kt
  • android/app/src/main/kotlin/com/flagship/abox/manager/ui/common/DomainErrorMapper.kt
  • android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/scene/SceneChoiceFlowTest.kt
  • android/app/src/main/kotlin/com/flagship/abox/manager/di/SceneIntegrationModule.kt
  • android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/temperaturehumidity/TemperatureHumidityDetailScreenTest.kt
  • android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/socket/SocketDetailScreenTest.kt
  • android/app/src/main/kotlin/com/flagship/abox/manager/ui/devicecenter/DeviceCenterRoute.kt
  • android/app/src/main/kotlin/com/flagship/abox/manager/ui/navigation/Routes.kt
  • absdk-bridge/src/main/kotlin/com/flagship/abox/manager/absdk/bridge/AbsdkBridge.kt
  • android/app/src/main/kotlin/com/flagship/abox/manager/di/ProviderRoutingGateways.kt
  • android/app/src/main/kotlin/com/flagship/abox/manager/di/UiPreferencesModule.kt
  • android/app/src/main/AndroidManifest.xml
## PR Reviewer Guide 🔍 Here are some key observations to aid the review process: <table> <tr><td>⏱️&nbsp;<strong>Estimated effort to review</strong>: 5 🔵🔵🔵🔵🔵</td></tr> <tr><td>🧪&nbsp;<strong>PR contains tests</strong></td></tr> <tr><td>🔒&nbsp;<strong>No security concerns identified</strong></td></tr> </table> <hr> ⚠️ **Review coverage:** The following files were not included in this review because of the token budget: - `android/app/src/main/kotlin/com/flagship/abox/manager/ui/devicecenter/DeviceCenterViewModel.kt` - `android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/navigation/AuthenticatedNavigationRoutingTest.kt` - `android/app/src/main/kotlin/com/flagship/abox/manager/ui/defaults/ABoxDefaultContentInitializer.kt` - `android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/preferences/SettingsScreenTest.kt` - `android/app/src/main/kotlin/com/flagship/abox/manager/ui/scene/SceneEditorViewModel.kt` - `android/app/src/main/kotlin/com/flagship/abox/manager/ui/scene/RecordingSceneExecutor.kt` - `android/app/build.gradle.kts` - `android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/shell/MainAppShellTest.kt` - `android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/shell/AccountProviderDialogTest.kt` - `android/app/src/main/kotlin/com/flagship/abox/manager/ui/devicecenter/DeviceCenterModels.kt` - `android/app/src/main/kotlin/com/flagship/abox/manager/di/DeviceGatewayModule.kt` - `android/app/src/main/kotlin/com/flagship/abox/manager/ui/common/DomainErrorMapper.kt` - `android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/scene/SceneChoiceFlowTest.kt` - `android/app/src/main/kotlin/com/flagship/abox/manager/di/SceneIntegrationModule.kt` - `android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/temperaturehumidity/TemperatureHumidityDetailScreenTest.kt` - `android/app/src/androidTest/kotlin/com/flagship/abox/manager/ui/socket/SocketDetailScreenTest.kt` - `android/app/src/main/kotlin/com/flagship/abox/manager/ui/devicecenter/DeviceCenterRoute.kt` - `android/app/src/main/kotlin/com/flagship/abox/manager/ui/navigation/Routes.kt` - `absdk-bridge/src/main/kotlin/com/flagship/abox/manager/absdk/bridge/AbsdkBridge.kt` - `android/app/src/main/kotlin/com/flagship/abox/manager/di/ProviderRoutingGateways.kt` - `android/app/src/main/kotlin/com/flagship/abox/manager/di/UiPreferencesModule.kt` - `android/app/src/main/AndroidManifest.xml`
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Flagship/abox-mgr#10