Skip to content

Revamp Settings menu structure (and fix misplaced/confusing "Apply Silent Mode") #112

Description

@almothafar

Problem

The Settings menu has grown organically and some options are in the wrong place. Most clearly: "Apply Silent Mode" sits under General (pref_general.xml:62-76) even though it's a notification-behaviour setting. It's time to rethink the whole Settings structure.

Current structure

Three top-level headers (pref_headers.xml / pref_headers_root.xml):

  • General — Language, Temperature unit, Warning/Critical thresholds, and (oddly) Apply Silent Mode.
  • Notifications — Vibrate, Sticky, Full-battery + sound, Warning + sound, Temperature + threshold, Critical sound, Notify-every-tick.
  • Time Settings — quiet-hours toggle + start/end.

(Since filing, the Notifications screen also gained the charge-notification style picker (#127), the five-item Battery Drain group (#109), and "Critical alerts ignore quiet hours" (#111) — which sits on a different screen than the quiet-hours window it overrides. The grab-bag problem got worse.)

Issues to address

  1. "Apply Silent Mode" is misplaced — it belongs with notification behaviour, near Vibrate / quiet hours, not in General.
  2. Its meaning is confusing / inverted — the label and on/off wording should make it obvious what "on" does. (Wording/placement only — if the silent-mode logic is broken that's a separate bug issue.)
  3. General is a grab-bag — Language + Temperature unit are "Display/App"; thresholds are "Alerts". Consider clearer groupings.
  4. Consider whether quiet hours + silent behaviour + vibrate should live together under one "When to alert / Sound & vibration" section.
  5. Ordering chaos, e.g. Temperature sits between the Warning and Critical groups.

Design settled 2026-07-12 (session discussion) — build from this without re-planning.

Settled design

Organizing principle: the old menu mixed two axes. The new structure gives each axis its own screen — what to be alerted about vs. how/when alerts are delivered — and keeps every event's settings (toggle + threshold + sound) together as one group, in battery-lifecycle order. Every root menu item gets a descriptive summary.

New structure

Settings (root) — 3 headers + a version footer (#113):

1. General — app-wide settings + the status notification

  • Language
  • Temperature unit
  • Status notification category: Show charge/drain rate (moved from the Battery Drain group — it configures the ongoing notification's content, not an alert)

2. Alertswhat to be notified about; one category per event, battery-lifecycle order:

  • Battery levels — warning/critical range slider (moved from General; it configures the two alerts directly below it)
  • Warning alert — toggle + sound
  • Critical alert — sound + notify-every-tick
  • Full battery — toggle + sound
  • High temperature — toggle + threshold
  • Fast drain — toggle + drain limit + sustained/reminder timing
  • Charging — announcement style (toast / notification / off)

Warning and Critical are adjacent again; Temperature no longer sits between them.

3. Notification behaviourhow alerts sound/look and when they're allowed:

  • Sound & vibration: Mute alerts in silent mode (relocated + reworded, below) · Vibrate
  • Quiet hours: enable · start · end · "Critical alerts ignore quiet hours" (moved from the Critical section — it modifies the quiet-hours window, so it sits right under it)
  • Appearance: Sticky notification

Wording (no behaviour change)

  • "Apply Silent Mode" → "Mute alerts in silent mode" — same key, default, and logic; the label now says what ON does (ON = alerts stay silent in silent/DnD; OFF = alert sounds play anyway — today's effective default). Summaries rewritten (the old ones also had grammar issues).
  • Root header titles/summaries rewritten as plain descriptions of what's inside.

Rules for future settings (why this shape)

Implementation notes

  • All preference keys stay unchanged — SharedPreferences don't care which XML declares them, so this is a pure XML + strings shuffle. No data migration, no behaviour change.
  • Delete dead pref_headers.xml / pref_headers_legacy.xml (only pref_headers_root.xml is referenced, from SettingsActivity).
  • New/changed user-facing strings need values-ar translations.
  • The version footer is specced in Show the app version in the app (About row at end of Settings) #113; ships together with this restructure.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions