Skip to content

Reduce main list flicker#125

Merged
anod merged 4 commits into
masterfrom
reduce-main-list-flicker
May 29, 2026
Merged

Reduce main list flicker#125
anod merged 4 commits into
masterfrom
reduce-main-list-flicker

Conversation

@anod

@anod anod commented May 29, 2026

Copy link
Copy Markdown
Owner

Summary

  • stabilize watchlist LazyColumn item keys so refreshes do not recreate unchanged rows
  • avoid using DB app change counters in the main watchlist refresh key
  • include release 1.7.0 prep already present on this branch

Tests

  • .\gradlew.bat :app:testDebugUnitTest --tests "com.anod.appwatcher.watchlist.SectionItemTest"

Copilot AI added 2 commits May 28, 2026 00:32
Use stable identity-based lazy item keys and stop forcing list refreshes for every app database change while sync is running.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Bump version code and regenerate release baseline profiles for the open testing bundle.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings May 29, 2026 10:18
Copilot AI added 2 commits May 29, 2026 13:19
Clarify submodule setup, local build inputs for worktrees, and Windows Gradle usage. Ignore the wt directory used for task worktrees.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…icker

# Conflicts:
#	.github/copilot-instructions.md

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Stabilizes watchlist LazyColumn item keys to reduce flicker on refresh by making SectionItem.sectionKey deterministic (independent of content hash) and dropping the volatile listContext/dbAppsChange ingredients from item keys and the screen RefreshKey. DB-change-driven refreshes still occur via invalidatePagingSources() in the view model, so list freshness is preserved while unchanged rows are no longer recreated. Also bumps versionCode to 17006 as part of 1.7.0 release prep.

Changes:

  • Make SectionItem.sectionKey stable per-identity (header type, package name, row id) and drop listContext plumbing from WatchListPage/WatchList and callers.
  • Remove dbAppsChange from WatchListScreen.RefreshKey so DB ticks no longer trigger full items.refresh().
  • Add SectionItemTest covering uniqueness/stability of section keys and bump versionCode to 17006.

Reviewed changes

Copilot reviewed 9 out of 12 changed files in this pull request and generated no comments.

Show a summary per file
File Description
app/src/main/java/com/anod/appwatcher/watchlist/Section.kt Replace hash-based section keys with stable per-type/per-app keys.
app/src/main/java/com/anod/appwatcher/watchlist/WatchListPage.kt Drop listContext parameter and use sectionKey directly as Lazy item key.
app/src/main/java/com/anod/appwatcher/watchlist/WatchListScreen.kt Remove listContext and dbAppsChange from RefreshKey.
app/src/main/java/com/anod/appwatcher/watchlist/MainScreen.kt Stop passing listContext = "main".
app/src/main/java/com/anod/appwatcher/tags/TagWatchListScreen.kt Stop passing listContext = "tag-...".
app/src/main/java/com/anod/appwatcher/installed/InstalledListScreen.kt Stop passing listContext = "installed".
app/src/test/java/com/anod/appwatcher/watchlist/SectionItemTest.kt New unit tests for section key uniqueness/stability.
app/build.gradle.kts Bump versionCode to 17006.

@anod
anod merged commit 586e75a into master May 29, 2026
3 checks passed
@anod
anod deleted the reduce-main-list-flicker branch May 29, 2026 10:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants