Skip to content

Menu customization: add a 'Select & Insert' reorder mode #2290

Description

@enaboapps

Summary

The menu customization screen has two reorder modes today: Drag (drag-handle + reorderable lazy list) and Arrows (per-row up/down IconButtons). Drag is unusable with a switch. Arrows works but moves one position per tap — moving an item from position 1 to position 12 takes 11 taps (and 11 switch-scan passes).

Add a third mode, Select, that lets a user pick an item once and pick its destination once. Two taps to move any item to any position, regardless of distance. Switch users get a dramatically better experience; everyone else gets a faster alternative for long jumps.

Approach

UI shell over the existing MenuCustomizationScreenModel.moveItem(from, to) primitive — no database, repository, or data-flow changes.

  • New ReorderMode.SELECT + third segmented-button entry in the existing ReorderModeToggle
  • New SelectReorderableList composable using the shared MenuItemRow:
    • The left-slot button is "Move" when nothing is selected, "Cancel" on the selected row, and "Insert above" on every other row
    • A pinned "Insert at end" row appears while a selection is active
    • Visibility eye / delete buttons are hidden during placement so each row is a single-purpose tap target
  • View-model adds selectedItemId state + 4 helpers (selectForMove, insertSelectedBefore, insertSelectedAtEnd, cancelSelection); all delegate to the existing moveItem
  • 6 new strings; no telemetry; no data-layer changes

Acceptance criteria

  • Third Select mode appears in the reorder-mode toggle
  • Picking an item highlights it, swaps row chrome to insertion targets, and shows an "Insert at end" row
  • Choosing an insertion point moves the item via the existing moveItem(from, to) and clears the selection
  • Cancel button and mode-switch both clear the selection
  • Drag and Arrows modes are unchanged; visibility toggle still works in all three modes
  • ./gradlew compileDebugKotlin testDebugUnitTest passes
  • Manual switch-scan smoke test: each row is a single scan stop with the Move/Cancel/Insert-above button as its primary action

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions