Modernize changelog UI - #7279
Conversation
There was a problem hiding this comment.
Pull request overview
This PR replaces the legacy changelog popup/UI (and its third-party library) with a new Compose-based changelog experience that supports richer content (platform tags, actions) and can be shown automatically after updates or opened from Settings.
Changes:
- Replaced the old
info.hannes.changelog-backed flow with a newchangelog/feature (repository + ViewModels + Compose UI) and an auto-show navigation effect. - Moved the current release’s authored changelog content into
:commonstring resources (strings_changelog.xml) and a structuredcurrentChangelogmodel. - Updated navigation/tests/screenshots to cover the new changelog UI and removed the old XML changelog and library dependency.
Reviewed changes
Copilot reviewed 38 out of 44 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| gradle/libs.versions.toml | Removes the legacy ChangeLog library version and catalog entry. |
| common/src/main/res/values/strings.xml | Adds new user-facing strings for the new changelog UI (title, labels, tags). |
| common/src/main/res/values/strings_changelog.xml | Adds dedicated string resources for the current release’s changelog entries (HTML-styled). |
| common/src/main/kotlin/io/homeassistant/companion/android/common/compose/composable/HADivider.kt | Adds a vertical divider wrapper for HA Compose UI usage. |
| build-logic/convention/src/main/kotlin/AndroidApplicationDependenciesConventionPlugin.kt | Drops the legacy ChangeLog dependency from app dependency conventions. |
| automotive/gradle.lockfile | Removes the legacy ChangeLog artifact from dependency locks. |
| app/gradle.lockfile | Removes the legacy ChangeLog artifact from dependency locks. |
| app/src/test/kotlin/io/homeassistant/companion/android/util/ChangeLogTest.kt | Removes tests for the deleted legacy ChangeLog wrapper. |
| app/src/test/kotlin/io/homeassistant/companion/android/launch/LaunchActivityTest.kt | Updates LaunchActivity tests to no longer expect the legacy changelog popup call. |
| app/src/test/kotlin/io/homeassistant/companion/android/changelog/ui/ChangelogScreenTest.kt | Adds Compose UI interaction tests for the new changelog screen content. |
| app/src/test/kotlin/io/homeassistant/companion/android/changelog/navigation/ChangelogNavigationTest.kt | Adds navigation tests for auto-show behavior and back navigation. |
| app/src/test/kotlin/io/homeassistant/companion/android/changelog/ChangelogViewModelTest.kt | Adds unit tests for version parsing, URL building, and platform selection. |
| app/src/test/kotlin/io/homeassistant/companion/android/changelog/ChangelogTest.kt | Adds unit tests for section ordering and empty-category omission. |
| app/src/test/kotlin/io/homeassistant/companion/android/changelog/ChangelogShowViewModelTest.kt | Adds unit tests for the “show once” decision logic. |
| app/src/test/kotlin/io/homeassistant/companion/android/changelog/ChangelogRepositoryTest.kt | Adds unit tests for last-seen version tracking logic. |
| app/src/screenshotTest/kotlin/io/homeassistant/companion/android/changelog/ChangelogScreenshotTest.kt | Adds screenshot coverage for the changelog rendered with real current-release content. |
| app/src/main/res/xml/changelog_master.xml | Deletes the legacy XML changelog file used by the old UI/tooling. |
| app/src/main/kotlin/io/homeassistant/companion/android/widgets/todo/TodoWidgetConfigureActivity.kt | Allows opening widget config without a preselected entity (nullable entityId). |
| app/src/main/kotlin/io/homeassistant/companion/android/widgets/mediaplayer/MediaPlayerControlsWidgetConfigureActivity.kt | Allows opening widget config without a preselected entity (nullable entityId). |
| app/src/main/kotlin/io/homeassistant/companion/android/widgets/entity/EntityWidgetConfigureActivity.kt | Allows opening widget config without a preselected entity (nullable entityId). |
| app/src/main/kotlin/io/homeassistant/companion/android/widgets/camera/CameraWidgetConfigureActivity.kt | Allows opening widget config without a preselected entity (nullable entityId). |
| app/src/main/kotlin/io/homeassistant/companion/android/util/compose/HANavHost.kt | Registers the new changelog destination in the app navigation graph. |
| app/src/main/kotlin/io/homeassistant/companion/android/util/ChangeLog.kt | Deletes the legacy ChangeLog wrapper and dark-theme variant. |
| app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt | Removes legacy “show changelog” presenter API and wiring. |
| app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenter.kt | Removes the legacy presenter contract method for showing changelog. |
| app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt | Routes “changelog” settings click to the new ChangelogFragment. |
| app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsActivity.kt | Makes the QSTile deeplink’s tileId optional (supports “open tiles settings” without preselect). |
| app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt | Adds Compose auto-show effect and removes legacy popup invocation. |
| app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/WidgetType.kt | Allows building widget config intents without an entityId (nullable). |
| app/src/main/kotlin/io/homeassistant/companion/android/changelog/ui/ChangelogScreen.kt | Implements the new Compose changelog UI (header, sections, tags, actions). |
| app/src/main/kotlin/io/homeassistant/companion/android/changelog/navigation/ChangelogNavigation.kt | Adds type-safe route + nav destination + auto-show effect. |
| app/src/main/kotlin/io/homeassistant/companion/android/changelog/ChangelogViewModel.kt | Adds ViewModel for changelog state, URL generation, and “mark seen” behavior. |
| app/src/main/kotlin/io/homeassistant/companion/android/changelog/ChangelogShowViewModel.kt | Adds ViewModel for the “should show changelog” consumed decision. |
| app/src/main/kotlin/io/homeassistant/companion/android/changelog/ChangelogRepository.kt | Adds repository for persisting/reading the last-seen changelog version code. |
| app/src/main/kotlin/io/homeassistant/companion/android/changelog/ChangelogModule.kt | Adds DI for a dedicated LocalStorage instance backed by the legacy prefs file name. |
| app/src/main/kotlin/io/homeassistant/companion/android/changelog/ChangelogFragment.kt | Hosts changelog content inside Settings (Fragment + ComposeView). |
| app/src/main/kotlin/io/homeassistant/companion/android/changelog/ChangelogContent.kt | Defines the structured current-release changelog content and actions. |
| app/src/main/kotlin/io/homeassistant/companion/android/changelog/Changelog.kt | Adds the changelog domain model (platforms, categories, entries, actions, sections). |
Comments suppressed due to low confidence (1)
app/src/test/kotlin/io/homeassistant/companion/android/changelog/navigation/ChangelogNavigationTest.kt:122
- Avoid
runBlockinghere; userunTestso the suspend preference write doesn’t block the test thread.
Yes I don't see why we should reuse the old shared preferences. Doesn't really have anything special, just storing version numbers to compare. There is already a changelog related preference in our settings storage. |
|
Once reviewed and agreed I'm going to update the device docs too. |
Summary
This PR removes the old changelog UI into a more customizable one (actions, more content, ...).
Checklist
Select exactly one option that describes AI usage in this contribution:
Screenshots
Any other notes
It reuse the shared preference of the old library. @jpelgrom we could maybe use our settings storage instead ?