Remove friendly name usage from wear - #7247
Conversation
b97bb91 to
1969174
Compare
93b4a4e to
7b758c4
Compare
7b758c4 to
830518c
Compare
1969174 to
48f0d57
Compare
830518c to
4ae19ef
Compare
48f0d57 to
c889a37
Compare
4ae19ef to
907d1a5
Compare
There was a problem hiding this comment.
Pull request overview
This pull request migrates the Wear OS module away from relying on the entity state attribute friendly_name by switching UI/components, tiles, and complications to use the display-resolution pipeline (EntitiesForDisplayManager / EntityDisplay*) so names/icons/states come from consistent display logic.
Changes:
- Replaced Wear UI usage of raw
Entity/attributes withEntityDisplayacross lists, details, favorites, and entity pickers. - Updated Wear tiles/complications to render
EntityDisplay.nameand added climate control resolution viaClimateControls. - Renamed cached favorite column from
friendly_name→namewith a Room auto-migration and schema bump.
Reviewed changes
Copilot reviewed 29 out of 29 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| wear/src/screenshotTest/kotlin/io/homeassistant/companion/android/EntityListViewPreviewsTest.kt | Updates screenshot preview data to use EntityDisplayWithoutContext. |
| wear/src/main/kotlin/io/homeassistant/companion/android/views/ChooseEntityView.kt | Switches entity picker from Entity attributes to EntityDisplay fields. |
| wear/src/main/kotlin/io/homeassistant/companion/android/util/WearToggleChip.kt | Uses EntityDisplay (domain/position/color) for toggle chip gradient/background logic. |
| wear/src/main/kotlin/io/homeassistant/companion/android/util/CommonFunctions.kt | Renames parameter from friendlyName to name for feedback/toast message formatting. |
| wear/src/main/kotlin/io/homeassistant/companion/android/tiles/ThermostatTile.kt | Resolves thermostat tile entity via display pipeline and uses climateControls + name. |
| wear/src/main/kotlin/io/homeassistant/companion/android/tiles/ShortcutsTile.kt | Replaces friendlyName rendering with EntityDisplay.name. |
| wear/src/main/kotlin/io/homeassistant/companion/android/home/views/SetThermostatTileView.kt | Uses EntityDisplay for selected entity icon/name in thermostat tile config UI. |
| wear/src/main/kotlin/io/homeassistant/companion/android/home/views/SetShortcutsTileView.kt | Updates shortcut config UI to use SimplifiedEntity.name. |
| wear/src/main/kotlin/io/homeassistant/companion/android/home/views/SetFavoriteView.kt | Converts favorites selection UI from raw attributes to EntityDisplay. |
| wear/src/main/kotlin/io/homeassistant/companion/android/home/views/SetCameraTileView.kt | Uses EntityDisplay for selected camera tile entity icon/name. |
| wear/src/main/kotlin/io/homeassistant/companion/android/home/views/MainView.kt | Updates main list/navigation to use display-item maps and cached name. |
| wear/src/main/kotlin/io/homeassistant/companion/android/home/views/HomeView.kt | Wires navigation/screens to new display-backed view state collections. |
| wear/src/main/kotlin/io/homeassistant/companion/android/home/views/EntityUi.kt | Renders entity rows from EntityDisplay (name/icon/state) instead of attributes. |
| wear/src/main/kotlin/io/homeassistant/companion/android/home/views/EntityListView.kt | Converts list view to EntityDisplay and updates previews accordingly. |
| wear/src/main/kotlin/io/homeassistant/companion/android/home/views/DetailsPanelView.kt | Migrates detail panel sliders/controls to EntityDisplay control models. |
| wear/src/main/kotlin/io/homeassistant/companion/android/home/MainViewModel.kt | Replaces raw entity/registry handling with EntitiesForDisplayManager.observeInContext. |
| wear/src/main/kotlin/io/homeassistant/companion/android/home/HomeActivity.kt | Simplifies lifecycle collection to a single observeEntities() job. |
| wear/src/main/kotlin/io/homeassistant/companion/android/data/SimplifiedEntity.kt | Renames friendlyName to name and updates serialization string accordingly. |
| wear/src/main/kotlin/io/homeassistant/companion/android/complications/views/ComplicationConfigMainView.kt | Uses entity?.name for the configured entity display. |
| wear/src/main/kotlin/io/homeassistant/companion/android/complications/EntityStateDataSourceService.kt | Resolves complication entity via display pipeline and uses name + resolved state text. |
| wear/src/main/kotlin/io/homeassistant/companion/android/complications/ComplicationConfigViewModel.kt | Populates entity lists and stored shortcut data from display-resolved entities. |
| common/src/main/kotlin/io/homeassistant/companion/android/database/wear/ThermostatTile.kt | Updates doc comment to “entity name” terminology. |
| common/src/main/kotlin/io/homeassistant/companion/android/database/wear/FavoriteCaches.kt | Renames cached favorite field/column to name with clearer KDoc. |
| common/src/main/kotlin/io/homeassistant/companion/android/database/migration/DatabaseMigration.kt | Adds auto-migration spec to rename favorite_cache.friendly_name → name. |
| common/src/main/kotlin/io/homeassistant/companion/android/database/AppDatabase.kt | Bumps Room DB version to 53 and registers the 52→53 auto-migration spec. |
| common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt | Adds ClimateControls and Entity.getClimateControls() helper. |
| common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/display/EntityDisplayState.kt | Clarifies awaitLoadedOrNull() KDoc about skipping Loading and returning null on Error. |
| common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/display/EntityDisplay.kt | Adds climateControls to EntityDisplay* and resolves it in EntityDisplayWithoutContext. |
| common/schemas/io.homeassistant.companion.android.database.AppDatabase/53.json | Adds updated Room schema snapshot for DB version 53. |
Comments suppressed due to low confidence (1)
wear/src/main/kotlin/io/homeassistant/companion/android/complications/EntityStateDataSourceService.kt:50
- Using
EntitiesForDisplayManager.snapshot(..., listOf(entityId))triggers a fullgetStates()fetch under the hood (viaIntegrationRepository.getEntities()), which is heavy for complication updates. A single-entity optimized path would reduce network/battery use.
val displayEntity = entitiesForDisplayManager.snapshot(ServerManager.SERVER_ID_ACTIVE, listOf(entityId))
.awaitLoadedOrNull()
?.entity(entityId)
| val entity = tileConfig.entityId?.let { | ||
| serverManager.integrationRepository().getEntity(it) | ||
| entitiesForDisplayManager.snapshot(ServerManager.SERVER_ID_ACTIVE, listOf(it)) | ||
| .awaitLoadedOrNull() | ||
| ?.entity(it) | ||
| } |
There was a problem hiding this comment.
I don't think such API exists today, the list_for_display returns everything and has no parameters.
c889a37 to
7fe52ce
Compare
907d1a5 to
bf100cc
Compare
7fe52ce to
626535d
Compare
e5090ba to
f744629
Compare
f744629 to
c19ad87
Compare
jpelgrom
left a comment
There was a problem hiding this comment.
Most code changes make sense, but I want to test with a dummy entities set for tiles tomorrow so no final review yet.
| /** | ||
| * Internal thread-safe holder for registry data used for entity classification. | ||
| * Wrapped in a [MutableStateFlow] to guarantee visibility and consistency across dispatchers. | ||
| */ |
Summary
This PR replace the usage of friendly name within the wear module by using the
EntitiesDisplayManager.Based on #7246
Checklist
Select exactly one option that describes AI usage in this contribution: