Skip to content

feat: Add a shared list scrollbar across lists and dialogs - #780

Merged
MarcaDian merged 19 commits into
MorpheApp:devfrom
rushiranpise:scrollbar
Jul 29, 2026
Merged

feat: Add a shared list scrollbar across lists and dialogs#780
MarcaDian merged 19 commits into
MorpheApp:devfrom
rushiranpise:scrollbar

Conversation

@rushiranpise

@rushiranpise rushiranpise commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Adds a reusable scrollbar overlay with a draggable thumb, shown on the home app list, the sources sheet and every dialog with scrollable content. When a list is sorted by name it doubles as an alphabet fast scroll, showing the leading letter
while dragging. MorpheDialog now draws the scrollbar and the scroll-to-top button itself for its scrollable variant, and exposes its horizontal inset so dialogs that own a LazyColumn can anchor theirs to the true dialog edge.

@rushiranpise rushiranpise changed the title feat: add home app list scrollbar feat: add home app & patch list scrollbar Jul 25, 2026
@Chiku-09

Copy link
Copy Markdown

I don't think this feature adds much value in its current form.

Personally, I've never felt the need for a scrollbar on the home screen. The page already contains a lot of UI elements ,buttons, app grouping, and other controls so adding another element makes it feel a bit more cluttered.

From a UX perspective, it also doesnt solves a significant problem or noticeably improves navigation.

That said, this is just my personal opinion, and others may find it useful.

@rushiranpise

Copy link
Copy Markdown
Contributor Author

I don't think this feature adds much value in its current form.

Personally, I've never felt the need for a scrollbar on the home screen. The page already contains a lot of UI elements ,buttons, app grouping, and other controls so adding another element makes it feel a bit more cluttered.

From a UX perspective, it also doesnt solves a significant problem or noticeably improves navigation.

That said, this is just my personal opinion, and others may find it useful.

I get your point, but I see it a bit differently.

A scrollbar is a pretty basic UI component that's present in almost every app with a scrollable list. It isn't really against good UI/UX, especially since it only appears while scrolling and hides itself when it's not being used, so it doesn't permanently add visual clutter.

For users with long app lists, it also provides a quick indication of their position in the list and makes navigation easier. It's a small quality-of-life feature rather than something intended to solve a major UX problem.

Of course, that's just my perspective, and it's fine if you don't find it useful.

@rushiranpise

Copy link
Copy Markdown
Contributor Author
Screenshot_20260727-213515

@MarcaDian

Copy link
Copy Markdown
Contributor

I understand that this change is justified if there are many applications. This current version has a bug in the patch sources where the list indicator stops halfway, and all the indicators move jerkily, as if jumping to the next value.

@rushiranpise

Copy link
Copy Markdown
Contributor Author

I understand that this change is justified if there are many applications. This current version has a bug in the patch sources where the list indicator stops halfway, and all the indicators move jerkily, as if jumping to the next value.

Thanks! I just noticed both of those bugs were introduced after my last commit.

I tried making the scroll stop at the first occurrence of each alphabet letter instead of scrolling continuously. That made it feel a bit more predictable, but it still needs some refinement.

@MarcaDian

Copy link
Copy Markdown
Contributor

Hold off on making changes for now; I'm still working on it.

@MarcaDian MarcaDian changed the title feat: add home app & patch list scrollbar feat: Add a shared list scrollbar across lists and dialogs Jul 28, 2026
@MarcaDian

Copy link
Copy Markdown
Contributor

Please test this changes.

@MarcaDian
MarcaDian marked this pull request as ready for review July 28, 2026 18:08
rushiranpise and others added 12 commits July 28, 2026 21:09
Add a themed scrollbar overlay to the home app list that follows the existing LazyListState instead of duplicating list rendering.

Show an alphabet fast-scroll callout only for A-Z and Z-A app sorting, and only while the user drags the scrollbar. Other sort modes, reorder mode, and Sources view use a regular themed scrollbar thumb.

Keep the scroller theme-aware and RTL-aware while respecting the multi-select/reorder action bar bottom inset.
Reuse the home list scrollbar for patch sources by sharing the indexed scroll target builder.

Show the alphabet fast-scroll callout for source A-Z and Z-A sorting only, while other source sort modes use the regular themed scrollbar.
Move the scrollbar thumb to the outer edge of its touch lane so it no longer overlaps app cards, with RTL mirroring. Replace the alphabet connector with an invisible gap, align the letter callout to the visible thumb, and map alphabet dragging to the first visible item for each letter.
@rushiranpise

rushiranpise commented Jul 28, 2026

Copy link
Copy Markdown
Contributor Author

Please test this changes.

Looks better now. It still seems a bit jerky in A–Z/Z–A mode, but I think that pause is required to position the list correctly.

However, I can't see the scrollbar in Settings.

@MarcaDian

Copy link
Copy Markdown
Contributor

Is a scrollbar needed there?

Also, I’m not sure if the A–Z delay behavior is correct, since I don’t usually use the scrollbar.

@rushiranpise

Copy link
Copy Markdown
Contributor Author

Is a scrollbar needed there?

Also, I’m not sure if the A–Z delay behavior is correct, since I don’t usually use the scrollbar.

Yes, I think so. Users shouldn’t have any issues with this. Most apps, for example the Contacts app, also stop scrolling at the first occurrence of each alphabet in the list.

The scrollbar in the changelog looks good, so I think it would also be a good addition to other Settings sections if you agree.

@MarcaDian

Copy link
Copy Markdown
Contributor

This PR is more complex than it seemed at first glance. There are a lot of nuances and changes.

@rushiranpise

Copy link
Copy Markdown
Contributor Author

This PR is more complex than it seemed at first glance. There are a lot of nuances and changes.

I tested the latest Cl, and everything looks perfect now. Sorry for the trouble, and thanks for all your work on this. I think it's ready to merge.

@MarcaDian

Copy link
Copy Markdown
Contributor

If any fixes are needed, we can add them in separate PRs. Thanks for the idea and the implementation; I’ve wanted to add scrollbars for a long time.

@MarcaDian
MarcaDian merged commit 0d48d36 into MorpheApp:dev Jul 29, 2026
1 check passed
github-actions Bot pushed a commit that referenced this pull request Jul 29, 2026
# [1.25.0-dev.5](v1.25.0-dev.4...v1.25.0-dev.5) (2026-07-29)

### Features

* Add a shared list scrollbar across lists and dialogs ([#780](#780)) ([0d48d36](0d48d36))
github-actions Bot pushed a commit that referenced this pull request Aug 6, 2026
# [1.25.0](v1.24.3...v1.25.0) (2026-08-06)

### Bug Fixes

* Announce a manager update only once its APK is downloadable ([9939cd1](9939cd1))
* Close open dialogs when a patch source arrives from outside the app ([550926b](550926b))
* Correct app status, signature and saved APK checks ([#791](#791)) ([c47ac44](c47ac44))
* Decode copied patch options instead of storing them JSON encoded ([ec8f9f2](ec8f9f2))
* Deduplicate update checks and install patch bundles atomically ([bf3e4e1](bf3e4e1))
* Derive source page and avatar URLs from the source endpoint ([e1c7fdf](e1c7fdf))
* Fetch metadata for newly imported bundles that are disabled ([98af3c6](98af3c6))
* Handle preference IO errors and skip cancellation in uiSafe ([c5b8e26](c5b8e26))
* Ignore updates of uninstalled apps in category icon tint ([7f1a5f2](7f1a5f2))
* Keep patch selection of bundles disabled at patch time ([c0d6b8c](c0d6b8c))
* Mirror navigation chevrons and isolate version strings in RTL layouts ([ca60cd0](ca60cd0)), closes [/github.com//issues/709#issuecomment-5132332365](https://github.com//github.com/MorpheApp/morphe-manager/issues/709/issues/issuecomment-5132332365)
* Mirror the list scrollbar to the correct side in RTL layouts ([e8fd43b](e8fd43b))
* Offer to remove the app copy a package rename left behind ([adfe445](adfe445))
* Open home app list at the top on launch ([829d151](829d151))
* Preserve mount installs for saved APK flows ([#779](#779)) ([37cabf6](37cabf6))
* Put the queue counter inside the patcher layout ([4a4ed2f](4a4ed2f))
* Reduce startup cost and split the home apps section ([d8ee88f](d8ee88f))
* Remove app card color mini preview ([b394eb8](b394eb8))
* Reopen the file picker after it was closed without picking ([063093d](063093d))
* Restore the patch outcome after process death ([2095298](2095298))
* Round stepped slider values instead of truncating them ([b4f0c56](b4f0c56))
* Save the process runtime memory limit when the slider is tapped ([#815](#815)) ([d9c9079](d9c9079))
* Smooth category reorder animation in Custom sort mode ([607890f](607890f))
* Stop badges from hiding the app name on batch queue cards ([b924535](b924535))
* Stop the install queue failing the item it just started ([e333e6b](e333e6b))
* Tell an unsupported version apart from an app with no patches ([cd5701b](cd5701b))
* Treat a mounted install as patched when picking a patch source ([1d84c9e](1d84c9e))
* Unify badges and version tags ([7c1f46f](7c1f46f))
* Use the typed option API for folder options in Simple mode ([a9e21d8](a9e21d8))

### Features

* Add a shared list scrollbar across lists and dialogs ([#780](#780)) ([0d48d36](0d48d36))
* Add APK download helper integration ([#797](#797)) ([7f7348c](7f7348c))
* Add APK export and hide install once an app is installed ([6bbfc07](6bbfc07))
* Add home app card color settings ([#777](#777)) ([18ba4ba](18ba4ba))
* Add long-press tooltip to icon-only bottom action bar buttons ([2a5158a](2a5158a))
* Add patch availability ([#747](#747)) ([e5c61d1](e5c61d1))
* Allow gradient stops to follow the app bundle color ([664e5f2](664e5f2))
* Copy patch selection between bundles ([#769](#769)) ([011b934](011b934))
* Crossfade dialog content when it swaps between states ([48848f2](48848f2))
* Fall back to APK and installer signals when signatures are unreadable ([22b3104](22b3104))
* Flag an experimental APK version on the queue card ([a6446d8](a6446d8))
* Merge the queue's APK buttons into one version-aware chooser ([79aff36](79aff36))
* Offer to find the right APK from the batch queue ([375da51](375da51))
* Patch several apps in one queue, and keep them patched automatically ([#795](#795)) ([a3c0427](a3c0427))
* Show reclaimable size on storage cache clear buttons ([40e093c](40e093c))
* Tint category folder icon when group has pending updates ([849c119](849c119))
* Update the file of a local patch source in place ([f4fc760](f4fc760))
* Warn when a patch source needs a newer version of the manager ([e4d649b](e4d649b))
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