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

## 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

## Notes

- no automated test suite was run during the visual iteration cycle
- `docs/superpowers/**` and local reference repositories are excluded from this PR

Reviewed-on: #10
Co-authored-by: KremeCN <3265494849@qq.com>
This commit was merged in pull request #10.
This commit is contained in:
2026-08-27 23:25:07 +08:00
committed by KremeCN
parent 1570a95f30
commit 86b7e5849b
194 changed files with 11198 additions and 1444 deletions
@@ -36,12 +36,12 @@
<string name="infrared_remote_recording">Recording</string>
<string name="infrared_hub_my_remotes">My Remotes</string>
<string name="infrared_remote_learning_mode">Learn Mode</string>
<string name="infrared_remote_learning_banner">🔴 Learn mode active: tap any button to record</string>
<string name="infrared_remote_scene_ac">❄️ Air Conditioner</string>
<string name="infrared_remote_scene_tv">📺 Television</string>
<string name="infrared_remote_learning_banner">Learn mode active: tap any button to record</string>
<string name="infrared_remote_scene_ac">Air Conditioner</string>
<string name="infrared_remote_scene_tv">Television</string>
<string name="infrared_remote_settings">Settings</string>
<string name="infrared_msg_learning_mode_enabled">🔴 Learn mode active: tap any button to record</string>
<string name="infrared_msg_learning_mode_enabled">Learn mode active: tap any button to record</string>
<string name="infrared_msg_recording_key">Recording [%1$s] (Slot %2$s), press remote button…</string>
<string name="infrared_msg_learned_success">[%1$s] recorded successfully</string>
<string name="infrared_msg_key_not_learned">Button [%1$s] is not learned. Enable learn mode to record.</string>
@@ -52,8 +52,8 @@
<string name="infrared_label_temp_control">Temp Control</string>
<string name="infrared_label_vol">VOL</string>
<string name="infrared_label_ch">CH</string>
<string name="infrared_label_cool_mode">❄️ Cool Mode</string>
<string name="infrared_label_ac_status">💨 Auto Fan | ↔ Swing</string>
<string name="infrared_label_cool_mode">Cool Mode</string>
<string name="infrared_label_ac_status">Auto Fan | Swing</string>
<string name="infrared_key_ac_power">AC Power</string>
<string name="infrared_key_ac_temp_up">AC Temp +</string>
@@ -100,8 +100,8 @@
<string name="infrared_hub_remotes_title">Virtual Remotes</string>
<string name="infrared_hub_no_remotes">No virtual remotes added yet. Tap + to add one.</string>
<string name="infrared_hub_add_remote">Add Remote</string>
<string name="infrared_hub_mode_static">🚀 Static Mode (%1$s slots)</string>
<string name="infrared_hub_mode_dynamic">📦 Dynamic Mode (Scratch Slot %1$s)</string>
<string name="infrared_hub_mode_static">Static Mode (%1$s slots)</string>
<string name="infrared_hub_mode_dynamic">Dynamic Mode (Scratch Slot %1$s)</string>
<string name="infrared_hub_create_dialog_title">Add Virtual Remote</string>
<string name="infrared_hub_device_type_label">Device Type</string>
<string name="infrared_hub_brand_label">Brand / Preset Library</string>
@@ -110,8 +110,83 @@
<string name="infrared_hub_trans_mode_dynamic_desc">Saves slots (0 extra slots), writes code on-the-fly (~80ms)</string>
<string name="infrared_hub_quota_insufficient">Slot quota exceeded. Please choose Dynamic mode.</string>
<string name="infrared_hub_raw_keys_button">Hardware Slot / Raw Key Management</string>
<string name="infrared_hub_device_type_tv">📺 Television (TV)</string>
<string name="infrared_hub_device_type_ac">❄️ Air Conditioner (AC)</string>
<string name="infrared_hub_device_type_tv">Television (TV)</string>
<string name="infrared_hub_device_type_ac">Air Conditioner (AC)</string>
<string name="infrared_hub_device_type_fan">🌀 Fan / Air Purifier</string>
<string name="infrared_hub_device_type_custom">🎛️ Custom Panel</string>
<string name="infrared_hub_device_type_custom">Custom Panel</string>
<string name="infrared_set_temperature">Set temperature</string>
<string name="infrared_running_mode">Operating mode</string>
<string name="infrared_fan_speed">Fan speed</string>
<string name="infrared_cooling">Cool</string>
<string name="infrared_heating">Heat</string>
<string name="infrared_auto">Auto</string>
<string name="infrared_drying">Dry</string>
<string name="infrared_fan">Fan</string>
<string name="infrared_low">Low</string>
<string name="infrared_medium">Medium</string>
<string name="infrared_high">High</string>
<string name="infrared_vertical_swing">Vertical swing</string>
<string name="infrared_horizontal_swing">Horizontal swing</string>
<string name="infrared_eco">Eco</string>
<string name="infrared_transmission_notice">State changes generate a complete infrared frame and send it. Transmission does not confirm the appliance state.</string>
<string name="infrared_up">Up</string>
<string name="infrared_down">Down</string>
<string name="infrared_left">Left</string>
<string name="infrared_right">Right</string>
<string name="infrared_volume">Volume</string>
<string name="infrared_channel">Channel</string>
<string name="infrared_raise_volume">Raise volume</string>
<string name="infrared_lower_volume">Lower volume</string>
<string name="infrared_raise_channel">Raise channel</string>
<string name="infrared_lower_channel">Lower channel</string>
<string name="infrared_media_panel">Media control panel</string>
<string name="infrared_remote_keys">%1$s buttons</string>
<string name="infrared_no_buttons_manage">No buttons. Add one in management.</string>
<string name="infrared_add_button">Add button</string>
<string name="infrared_add_button_title">Add custom button</string>
<string name="infrared_add_button_description">Name the button now. Its hardware slot will be assigned when you record the infrared signal.</string>
<string name="infrared_button_name">Button name</string>
<string name="infrared_button_available">Available</string>
<string name="infrared_button_learning">Learning</string>
<string name="infrared_button_sending">Sending</string>
<string name="infrared_button_ready">Ready to send</string>
<string name="infrared_button_failed">Learning failed</string>
<string name="infrared_button_unlearned">Not learned</string>
<string name="infrared_delete_button">Delete button</string>
<string name="infrared_center_subtitle">Infrared controller · Remote center</string>
<string name="infrared_settings_subtitle">Infrared device settings</string>
<string name="infrared_manage_description">Remotes, slots, and gateway device name</string>
<string name="infrared_open_management">Open management</string>
<string name="infrared_no_remotes_hint">Use the management action to add a remote</string>
<string name="infrared_manage_action">Manage infrared devices and remotes</string>
<string name="infrared_custom">Custom</string>
<string name="infrared_static_slots">Static slots</string>
<string name="infrared_dynamic_codes">Dynamic codes</string>
<string name="infrared_layout_tv">TV navigation panel</string>
<string name="infrared_layout_ac">Air conditioner panel</string>
<string name="infrared_layout_media">Media control panel</string>
<string name="infrared_layout_grid">Custom button panel</string>
<string name="infrared_learn_mode">Learn mode</string>
<string name="infrared_recording">Recording</string>
<string name="infrared_hardware_summary">Infrared controller · %1$d virtual remotes</string>
<string name="infrared_slot_summary">Static slots: %1$d · Dynamic buffer: slot 100 · Free: %2$d</string>
<string name="infrared_remote_name">Remote name</string>
<string name="infrared_layout_tv_desc">TV navigation layout with direction, volume, and channel controls</string>
<string name="infrared_layout_media_desc">Media player layout with playback controls</string>
<string name="infrared_layout_grid_desc">Custom grid layout with editable buttons</string>
<string name="infrared_mode_static_title">Static slot mode</string>
<string name="infrared_mode_dynamic_title">Dynamic code mode</string>
<string name="infrared_hardware_slots_title">Hardware slots</string>
<string name="infrared_remote_count">%1$d remotes</string>
<string name="infrared_add_remote">Add remote</string>
<string name="infrared_move_remote">Reorder remote</string>
<string name="infrared_move_up">Move up</string>
<string name="infrared_move_down">Move down</string>
<string name="infrared_edit_remote">Edit remote</string>
<string name="infrared_gateway_name_title">Gateway device name</string>
<string name="infrared_gateway_name_desc">Used to match the infrared controller in the gateway. It must exactly match the gateway name.</string>
<string name="infrared_save_name">Save device name</string>
<string name="infrared_layout">Panel layout</string>
<string name="infrared_transmission_mode">Transmission mode</string>
<string name="infrared_delete_remote">Delete remote</string>
</resources>