Skip to content

UX polish across the app - #70

Merged
hameno merged 11 commits into
masterfrom
feature/ux_polish
Oct 10, 2026
Merged

hameno merged 11 commits into
masterfrom
feature/ux_polish

Conversation

@hameno

@hameno hameno commented Oct 10, 2026

Copy link
Copy Markdown
Member

Stacked on #69. This targets feature/ux_redesign; once #69 merges, GitHub retargets it to master.

Follow-up from a whole-app UX pass. One commit per change:

  • Package name patterns are added in a sheet with a live "N apps match" preview and invalid-pattern message (replaces the old dialog and autocomplete field)
  • "Ask which screen to open" is a Compose bottom sheet with readable screen names, main screen first, unopenable screens hidden, and no picker for single-screen apps; removes the last View UI, view binding and the textured background
  • Widget taps report problems: uninstalled apps show a message and refresh the widget; system apps don't offer Uninstall
  • A new profile left untouched is discarded when leaving its editor; default profile names are translated
  • The widget adapts to its size: an icon strip when one cell tall, name-only rows when narrow
  • The profile editor says which widgets use the profile
  • About: Play Store falls back to the web page and neither link can crash; version and Back labels are translated
  • Profiles tab shows load errors instead of an endless spinner
  • Empty Widgets tab explains how to add a widget on launchers that can't pin from the app
  • The analytics switch says what is shared

Tests: 119 unit tests pass, lint has no errors.

🤖 Generated with Claude Code

@hameno
hameno added this pull request to stack #71 October 10, 2026 16:59
Base automatically changed from feature/ux_redesign to master October 10, 2026 17:00
@hameno
hameno force-pushed the feature/ux_polish branch from 926236c to 4ffc9bd Compare October 10, 2026 17:00
hameno and others added 11 commits October 10, 2026 19:00
The old dialog showed the signature icon, had no explanation and gave no
feedback on what a pattern would match. The "Add filter" sheet now opens a
pattern sheet with a live "N apps match" count, the first matching apps and a
message for invalid patterns; Add is only enabled for a valid pattern.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
"Ask which screen to open" showed a legacy View dialog listing raw class names,
including screens that can't be opened from outside the app. It is now a
Compose bottom sheet with the app's icon and name, each screen's label and
short class name, and the launcher's screen first and marked. Screens that
aren't exported, are disabled or need a permission are left out, and an app
with a single screen opens directly. Failures to open show a message instead
of crashing.

This removes the last View-based UI, so view binding, the chooser layouts and
the textured list background go too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tapping an app that had been uninstalled since the widget last refreshed, or
Uninstall on a system app, silently did nothing. The widget now shows a
message for both and refreshes itself when an app is gone. System apps that
can't be uninstalled no longer show the Uninstall action; updated system apps
keep it, since their updates can be removed.

The tap handling moves out of ClickHandlingActivity into WidgetTapHandler so
it can be tested.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tapping "Create new profile" saved "Profile 3" right away, and it stayed even
when the user backed out. Leaving the editor of a just-created profile without
adding a filter or typing a name now removes it again. The default name comes
from a string resource, so it is translated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The widget had one layout, so at one cell tall only the header showed and
narrow widgets squeezed package names and two action buttons into each row.
It now renders at its exact size: when short it shows the title and a strip
of app icons (or "Choose apps"), and when narrow each row shows just the icon
and name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Edits to a profile change every widget that uses it, but the editor didn't
say which those were. The name field now reads "Used by Clients, Work apps"
or "Not used by any widget".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Play Store button crashed on devices without the Play Store. It now falls
back to the store's web page, and either link shows a message when nothing
can open it. The version line and the Back button's label come from string
resources, so they are translated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Profiles tab treated an error like loading and spun forever, and the view
model never reported errors anyway. A failure while loading now shows
"Couldn't load profiles" with the reason.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With no widgets and a launcher that doesn't support adding widgets from inside
an app, the Widgets tab only said "No widgets created". It now explains where
to find the widget on the home screen. The "Add widget" button's icon no
longer repeats the label for screen readers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The switch was titled "Opt-in to analytics" with no explanation. It now reads
"Share usage analytics" and says what is shared.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hameno
hameno force-pushed the feature/ux_polish branch from 4ffc9bd to 292fcc9 Compare October 10, 2026 17:00
@hameno
hameno merged commit aab0033 into master Oct 10, 2026
1 check passed
@hameno
hameno deleted the feature/ux_polish branch October 10, 2026 17:01
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.

1 participant