Skip to content

K2GO-385 refactor(ui): Maps M3, download-control ladder, and dialogs on paper - #555

Merged
luisguzman-adfa merged 11 commits into
mainfrom
refactor/K2GO-385-maps-m3
Sep 6, 2026
Merged

luisguzman-adfa merged 11 commits into
mainfrom
refactor/K2GO-385-maps-m3

Conversation

@luisguzman-adfa

Copy link
Copy Markdown
Collaborator

Finishes the Material 3 standardization for the Maps area, the two download-control
surfaces, and the remaining raw dialogs. All work sits on Theme_K2Go with the M3
action hierarchy (filled primary, text secondary, muted tertiary).

Maps

  • fragment_k2go_maps_landing: trait pills recoloured by valence (Offline = leaf,
    Online = amber, After download / Light / Heavy = neutral).
  • MapsChooseFragment: layer options become selectable option cards (leading radio
    • tonal fill on select, size second line, no check). Compact pills kept.

Download controls (one ladder for FQR + library boot)

  • FqrController + activity_library: Pause / Resume / Retry / Stop = filled teal
    primary; Cancel = text in clay. Boot card bar is a visible 6dp track. Boot uses
    fixed boot tokens (the theme teal night-twins pale on the fixed paper).
  • FqrController bar reads state by colour: teal / amber-dimmed (stopped) / leaf (done).

Dialogs

  • Every FQR dialog (region delete, consent, calculating, errors) and the
    "Installation interrupted" recovery dialog now use the shared BrandDialog. The
    interrupted dialog gets a clay error icon, filled Recover, text Close, and a
    muted Report that does not dismiss.
  • BrandDialog gains a few additive options (leading icon, dismiss-on-neutral,
    on-cancel) with defaults that leave existing dialogs unchanged, and its card now
    uses the K2Go paper surface.

Note: removes the ADFA-5119 boot-Pause-outlined emphasis in favour of one filled
ladder shared by both download cards (documented in the code).

Verification: built (assembleDebug) and installed on a Samsung (arm64); each slice
checked on device. Two-pass review per slice plus a full-branch pass -- 0 correctness
findings, 2 low cleanups applied.

Recolor the five outlined trait pills on the Maps landing so the stroke
and text carry meaning, not one flat accent:

- After download, Light, Heavy -> neutral hairline outline (metadata).
- Online -> amber outline (needs connectivity, a caveat).
- Offline -> leaf outline (works without a network, positive).

The basic-maps Included badge stays leaf. No strings change.
…clay)

The FQR download overlay had Stop/Retry and Cancel as two identical
outlined teal buttons, so the keep-the-download action and the discard
action looked the same. Apply the download-controls role ladder
(design k2go-download-card-style-sizes-v1):

- Stop/Retry -> filled teal primary (keep the download).
- Cancel -> text button in clay (it discards the transfer).

Add a reusable Widget.K2Go.Button.Text.Destructive style plus its
ThemeOverlay; the role colour lives only in the style, not in Java.
No strings change.
…ctive

The Full-Quality Region delete confirm ("Delete <name>?") used a raw
MaterialAlertDialog with two equal text buttons, so a destructive delete
looked the same as any plain dialog. Route it through the shared
BrandDialog like the other erase/from-scratch confirms: a clay outlined
destructive "Delete" over a text Cancel. Pass the Theme_K2Go context
(the host PortalActivity is not K2Go-themed). No strings change.
The FQR subsystem still built its dialogs with raw MaterialAlertDialog,
so they did not match the shared BrandDialog cards used elsewhere.
Move them all onto BrandDialog:

- Estimate error, download failed and delete failed -> one shared
  errorDialog(titleRes, message) helper (OK button).
- Calculating (spinner) and Consent (Download / Not now) -> BrandDialog
  with content view; the map-reset on cancel (ADFA-5043) is preserved.

Add BrandDialog.setOnCancel(OnClick) so a caller reacts to back or
tap-outside without reaching into the underlying dialog; the consent and
calculating screens use it. No MaterialAlertDialog remains in the file.
No strings change.
… text-clay

The rootfs/library download card (activity_library boot surface) had a
big outlined Pause pill beside a bare-text Cancel, mismatched with the
FQR download card. Bring it onto the same download-controls ladder
(design k2go-library-download-sizes-v1):

- Toggle (Pause / Resume / Retry) -> FILLED primary in every state, via a
  new Widget.K2Go.Button.OnBootPaper style. It uses the FIXED k2go_boot_accent
  teal, not the theme teal (which flips pale at night on this fixed paper,
  ADFA-4814).
- Cancel -> text button in clay (Widget.K2Go.Button.Text.OnBootPaper.Destructive).
- Progress bar -> a visible 6dp track instead of the framework hairline.

This supersedes the ADFA-5119 rule that kept Pause outlined: the design
makes the primary filled in every state, matching the FQR card. The colour
now lives only in the style, so the per-state tint code in LibraryActivity
is removed (the label is the only thing that changes). No strings change.
The FQR download bar stayed teal even when the job stopped, so a halted
transfer looked live. Colour it by state (design k2go-download-card-style-
sizes-v1: 'stopped bar is dimmed + amber so a halted job never looks live'):

- Downloading -> teal, full opacity.
- Stopped -> amber and dimmed.
- Done -> leaf, full opacity.

One setBarState(colour, live) helper drives it from the poll transitions;
overlayStopped stays the single source of state. No strings change.
…(01)

The Maps layer pills marked a single-select choice with a solid teal fill
and white text -- reading like a filled action button, and with no radio.
Make each a selectable option card (design k2go-component-roles-decisions
Q1/Q2): a leading radio plus a label/size column; selected = tonal teal
fill + filled radio, unselected = outline + empty radio. No check (check
is for multi-select). Kept the compact wrapping pills (option A) so the
four groups of up to five levels still fit one short screen.

New k2go_teal_tonal token (light + night twin) and k2go_pill_tonal
drawable. The radio is tinted with the day/night teal/muted tokens
because ic_radio_on/off carry fixed hex that is unreadable on the night
surface. No strings change.
…log (C2)

The 'Installation interrupted' recovery dialog was a raw AlertDialog: a
white surface, no state colour, and three equal teal actions in a split
layout with no primary emphasis. Move it onto the shared BrandDialog
(design k2go-install-interrupted-dialog):

- A clay error icon carries the state; the title stays ink.
- Recover -> filled teal primary; Close -> text secondary; Report the
  problem -> a quiet muted tertiary that does not compete.

Extend BrandDialog generically (all additive; existing dialogs unchanged):
setIcon(drawable, tint) for an optional leading state icon, and
setDismissOnNeutral(false) so Report can send feedback plus a screenshot
of this dialog without closing it. The neutral slot is now the muted
tertiary and sits last. New ic_error_outline_24 drawable and a
Widget.K2Go.Button.Text.Muted style. Non-cancelable, as before. No
strings change.
Every BrandDialog card used the legacy dash_module_bg (#DEE1E6 light /
#242424 night), a cool gray that does not belong to the K2Go palette.
Point the card at the k2go_paper token (#FBF8F3 light / #0F1A19 night) so
all app dialogs sit on the Theme_K2Go paper surface (design intent). The
card is separated from the page by its elevation shadow and the modal
scrim. Title/message keep their day/night text tokens, which stay legible
on paper in both modes. No code change; affects all BrandDialogs.
…p dead drawable

Two low findings from the pre-merge full-branch review:
- FqrController: an FQR consent comment used em-dashes; switch to ASCII '--'
  per the repo convention.
- Delete k2go_chip_bg.xml: it was the old solid-teal selected-pill fill,
  orphaned once the Maps option card moved to k2go_pill_tonal.
@luisguzman-adfa
luisguzman-adfa merged commit 8bd356f into main Sep 6, 2026
3 checks passed
@luisguzman-adfa
luisguzman-adfa deleted the refactor/K2GO-385-maps-m3 branch September 6, 2026 04:28
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