新增设备列表 Compose 页面 #8

Merged
KremeCN merged 4 commits from feature/device-control-compose-ui into main 2026-08-25 11:39:12 +08:00
Member

WIP: Add device list Compose screen

Summary

This MR adds only the reusable Kotlin Jetpack Compose device list screen for my assigned scope.

The screen displays the three ABox device categories:

  • Smart socket
  • Temperature/humidity sensor
  • Infrared controller

This MR intentionally does not modify the app entry point, login flow, app shell routing, or any device detail/control screen. Those parts are handled by other feature branches.

Changes

  • Add DeviceListScreen.
  • Expose click callbacks for each device category:
    • onSocketClick
    • onTemperatureHumidityClick
    • onInfraredClick
  • Update the device-list change log document.
  • Remove the earlier out-of-scope temporary device control screens from this branch.

Scope

Included:

  • Device list Compose UI component
  • Device category entry UI
  • Callback API for future route integration

Not included:

  • App entry point changes
  • Login flow changes
  • Device control navigation graph
  • Smart socket control screen
  • Temperature/humidity status screen
  • Infrared controller screen
  • Direct ABSDK calls
  • Java Activity classes
  • XML layout files

Integration Notes

The screen is designed to be hosted by the app shell or routing owner later:

DeviceListScreen(
    onSocketClick = { /* route to socket module */ },
    onTemperatureHumidityClick = { /* route to temperature/humidity module */ },
    onInfraredClick = { /* route to infrared controller module */ },
)

The current branch keeps these callbacks external so other feature owners can connect their modules without this MR taking ownership of routing.

Verification

  • Built and ran android.app locally from Android Studio.
  • :android:app:assembleDebug completed successfully after trimming this branch to the device-list component scope.

Notes

settings.gradle.kts is intentionally not part of this MR. Local Gradle/JDK/toolchain setup is handled on the developer machine and should not modify the team-provided project configuration.


WIP: 新增设备列表 Compose 页面

概要

本 MR 只新增我当前分工负责的 Kotlin Jetpack Compose 设备列表页面组件。

设备列表展示三类 ABox 设备入口:

  • 智能插座
  • 温湿度传感器
  • 红外控制器

本 MR 故意不修改 App 入口、登录流程、应用壳路由,也不实现任何设备详情/控制页面。这些部分由其他功能分支负责。

修改内容

  • 新增 DeviceListScreen。
  • 为三类设备入口暴露点击回调:
    • onSocketClick
    • onTemperatureHumidityClick
    • onInfraredClick
  • 更新设备列表变更说明文档。
  • 从本分支中移除早期临时加入、但不属于当前分工范围的设备控制页面。

本 MR 包含

  • 设备列表 Compose UI 组件
  • 设备类别入口 UI
  • 后续路由接入所需的 callback API

本 MR 不包含

  • App 入口修改
  • 登录流程修改
  • 设备控制 navigation graph
  • 智能插座控制页面
  • 温湿度状态页面
  • 红外控制器页面
  • Compose UI 中直接调用 ABSDK
  • Java Activity
  • XML layout

对接说明

该页面后续可以由 App shell 或路由负责人挂载:

DeviceListScreen(
    onSocketClick = { /* 后续跳转到智能插座模块 */ },
    onTemperatureHumidityClick = { /* 后续跳转到温湿度模块 */ },
    onInfraredClick = { /* 后续跳转到红外控制器模块 */ },
)

当前分支只提供页面和回调 API,不负责具体跳转目标,以便其他模块负责人对接自己的功能页面。

验证

  • 已在本地通过 Android Studio 成功 build/run android.app。
  • 修剪为设备列表组件范围后,:android:app:assembleDebug 构建成功。

备注

settings.gradle.kts 不属于本 MR 范围。本地 Gradle/JDK/toolchain 配置在开发者本机处理,不修改团队提供的项目配置文件。

# WIP: Add device list Compose screen ## Summary This MR adds only the reusable Kotlin Jetpack Compose device list screen for my assigned scope. The screen displays the three ABox device categories: - Smart socket - Temperature/humidity sensor - Infrared controller This MR intentionally does not modify the app entry point, login flow, app shell routing, or any device detail/control screen. Those parts are handled by other feature branches. ## Changes - Add `DeviceListScreen`. - Expose click callbacks for each device category: - `onSocketClick` - `onTemperatureHumidityClick` - `onInfraredClick` - Update the device-list change log document. - Remove the earlier out-of-scope temporary device control screens from this branch. ## Scope Included: - Device list Compose UI component - Device category entry UI - Callback API for future route integration Not included: - App entry point changes - Login flow changes - Device control navigation graph - Smart socket control screen - Temperature/humidity status screen - Infrared controller screen - Direct ABSDK calls - Java Activity classes - XML layout files ## Integration Notes The screen is designed to be hosted by the app shell or routing owner later: ```kotlin DeviceListScreen( onSocketClick = { /* route to socket module */ }, onTemperatureHumidityClick = { /* route to temperature/humidity module */ }, onInfraredClick = { /* route to infrared controller module */ }, ) ``` The current branch keeps these callbacks external so other feature owners can connect their modules without this MR taking ownership of routing. ## Verification - Built and ran `android.app` locally from Android Studio. - `:android:app:assembleDebug` completed successfully after trimming this branch to the device-list component scope. ## Notes `settings.gradle.kts` is intentionally not part of this MR. Local Gradle/JDK/toolchain setup is handled on the developer machine and should not modify the team-provided project configuration. --- # WIP: 新增设备列表 Compose 页面 ## 概要 本 MR 只新增我当前分工负责的 Kotlin Jetpack Compose 设备列表页面组件。 设备列表展示三类 ABox 设备入口: - 智能插座 - 温湿度传感器 - 红外控制器 本 MR 故意不修改 App 入口、登录流程、应用壳路由,也不实现任何设备详情/控制页面。这些部分由其他功能分支负责。 ## 修改内容 - 新增 `DeviceListScreen`。 - 为三类设备入口暴露点击回调: - `onSocketClick` - `onTemperatureHumidityClick` - `onInfraredClick` - 更新设备列表变更说明文档。 - 从本分支中移除早期临时加入、但不属于当前分工范围的设备控制页面。 ## 本 MR 包含 - 设备列表 Compose UI 组件 - 设备类别入口 UI - 后续路由接入所需的 callback API ## 本 MR 不包含 - App 入口修改 - 登录流程修改 - 设备控制 navigation graph - 智能插座控制页面 - 温湿度状态页面 - 红外控制器页面 - Compose UI 中直接调用 ABSDK - Java Activity - XML layout ## 对接说明 该页面后续可以由 App shell 或路由负责人挂载: ```kotlin DeviceListScreen( onSocketClick = { /* 后续跳转到智能插座模块 */ }, onTemperatureHumidityClick = { /* 后续跳转到温湿度模块 */ }, onInfraredClick = { /* 后续跳转到红外控制器模块 */ }, ) ``` 当前分支只提供页面和回调 API,不负责具体跳转目标,以便其他模块负责人对接自己的功能页面。 ## 验证 - 已在本地通过 Android Studio 成功 build/run `android.app`。 - 修剪为设备列表组件范围后,`:android:app:assembleDebug` 构建成功。 ## 备注 `settings.gradle.kts` 不属于本 MR 范围。本地 Gradle/JDK/toolchain 配置在开发者本机处理,不修改团队提供的项目配置文件。
alZerNest requested review from pr-agent-bot 2026-08-24 21:48:47 +08:00
pr-agent-bot bot reviewed 2026-08-24 21:49:04 +08:00
pr-agent-bot bot left a comment

Inline comment

Inline comment
@@ -20,5 +20,5 @@
onTemperatureHumidityClick: () -> Unit,
onInfraredClick: () -> Unit,
modifier: Modifier = Modifier,
) {
Column(

内容裁剪

根布局使用固定内边距和垂直居中,但未提供滚动能力。在横屏、小尺寸设备或启用较大系统字体时,内容总高度会超过可用空间,导致顶部或底部的设备入口被裁剪且无法访问。建议使用可滚动布局或 LazyColumn。

**内容裁剪** 根布局使用固定内边距和垂直居中,但未提供滚动能力。在横屏、小尺寸设备或启用较大系统字体时,内容总高度会超过可用空间,导致顶部或底部的设备入口被裁剪且无法访问。建议使用可滚动布局或 `LazyColumn`。 <!-- pr-agent-dedup: 227de0dec028 --> <!-- pr-agent-key-issue-location: 237da31e74ce -->
Author
Member

已处理:为 DeviceListScreen 根布局添加了 verticalScroll(rememberScrollState()),避免横屏、小屏或大字体场景下内容被裁剪且无法访问。已本地验证 :android:app:assembleDebug 通过。
Addressed by adding verticalScroll(rememberScrollState()) to the root layout of DeviceListScreen, so the list remains accessible on landscape, small screens, and large font settings. Verified with :android:app:assembleDebug.

已处理:为 DeviceListScreen 根布局添加了 verticalScroll(rememberScrollState()),避免横屏、小屏或大字体场景下内容被裁剪且无法访问。已本地验证 :android:app:assembleDebug 通过。 Addressed by adding verticalScroll(rememberScrollState()) to the root layout of DeviceListScreen, so the list remains accessible on landscape, small screens, and large font settings. Verified with :android:app:assembleDebug.
alZerNest marked this conversation as resolved
pr-agent-bot bot reviewed 2026-08-24 21:49:04 +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: 1 🔵⚪⚪⚪⚪
🧪 No relevant tests
🔒 No security concerns identified
## PR Reviewer Guide 🔍 Here are some key observations to aid the review process: <table> <tr><td>⏱️&nbsp;<strong>Estimated effort to review</strong>: 1 🔵⚪⚪⚪⚪</td></tr> <tr><td>🧪&nbsp;<strong>No relevant tests</strong></td></tr> <tr><td>🔒&nbsp;<strong>No security concerns identified</strong></td></tr> </table>
pr-agent-bot bot reviewed 2026-08-25 09:29:11 +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: 2 🔵🔵⚪⚪⚪
🧪 PR contains tests
🔒 No security concerns identified
⚡ No major issues detected
## PR Reviewer Guide 🔍 Here are some key observations to aid the review process: <table> <tr><td>⏱️&nbsp;<strong>Estimated effort to review</strong>: 2 🔵🔵⚪⚪⚪</td></tr> <tr><td>🧪&nbsp;<strong>PR contains tests</strong></td></tr> <tr><td>🔒&nbsp;<strong>No security concerns identified</strong></td></tr> <tr><td>⚡&nbsp;<strong>No major issues detected</strong></td></tr> </table>
alZerNest requested review from KremeCN 2026-08-25 10:31:57 +08:00
alZerNest marked the pull request as ready for review 2026-08-25 11:13:18 +08:00
KremeCN added 4 commits 2026-08-25 11:35:34 +08:00
Changes:

- Add Kotlin Compose device list and device control placeholder screens.

- Register the new device-control navigation graph from the existing app shell.

- Preserve the current foundation and placeholder flow.

Documentation:

- Added English and Chinese change log under docs/device-control-compose-ui-change-log.md for team review.
- Wire DeviceListScreen as default composable in MainAppShell devicesSlot

- Extract and localize device list strings in en and zh-rCN

- Add DeviceListScreenTest verifying rendering and click callbacks
KremeCN force-pushed feature/device-control-compose-ui from a7697313c6 to ae488ef8c3 2026-08-25 11:35:34 +08:00 Compare
pr-agent-bot bot reviewed 2026-08-25 11:36:19 +08:00
pr-agent-bot bot left a comment

Inline comment

Inline comment
@@ -52,3 +53,3 @@
errorMessage: String? = null,
devicesSlot: @Composable () -> Unit = { DefaultDevicesSlot() },
devicesSlot: @Composable () -> Unit = { DeviceListScreen() },
scenesSlot: @Composable () -> Unit = { DefaultScenesSlot() },

无效入口

MainAppShell 默认直接创建 DeviceListScreen(),但没有传入任何点击回调,因此三个设备按钮都会使用空实现。任何未显式覆盖 devicesSlot 的调用方都会展示可点击但无响应的入口;应在路由完成前保留占位内容,或由壳层传入实际回调。

**无效入口** `MainAppShell` 默认直接创建 `DeviceListScreen()`,但没有传入任何点击回调,因此三个设备按钮都会使用空实现。任何未显式覆盖 `devicesSlot` 的调用方都会展示可点击但无响应的入口;应在路由完成前保留占位内容,或由壳层传入实际回调。 <!-- pr-agent-dedup: 5c1093080900 --> <!-- pr-agent-key-issue-location: 256791003a90 -->
pr-agent-bot bot reviewed 2026-08-25 11:36:20 +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: 2 🔵🔵⚪⚪⚪
🧪 PR contains tests
🔒 No security concerns identified
## PR Reviewer Guide 🔍 Here are some key observations to aid the review process: <table> <tr><td>⏱️&nbsp;<strong>Estimated effort to review</strong>: 2 🔵🔵⚪⚪⚪</td></tr> <tr><td>🧪&nbsp;<strong>PR contains tests</strong></td></tr> <tr><td>🔒&nbsp;<strong>No security concerns identified</strong></td></tr> </table>
KremeCN merged commit 249721be33 into main 2026-08-25 11:39:12 +08:00
KremeCN deleted branch feature/device-control-compose-ui 2026-08-25 11:39:13 +08:00
Sign in to join this conversation.
No Reviewers
No labels
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Flagship/abox-mgr#8