feat: split Security Filters into a hub with per-category screens

Replaces the cramped single-screen layout (header settings + four tabs)
with a hub that uses the same grouped-card pattern as AllSettingsScreen,
plus a dedicated screen per blocked-content category. The tile control
mix is also modernized:

- "Show sensitive content" is now a 3-way SegmentedButton instead of a
  free-floating spinner sitting awkwardly next to switches.
- Numeric prefs (report threshold, max hashtags) use a stepper (- / + )
  instead of free OutlinedTextFields with no commit affordance.
- The report-threshold tile renders inline under its toggle and dims
  when the toggle is off, instead of appearing/disappearing and shifting
  layout.
- Each tile is a row with leading icon, title, description, trailing
  control - so the spinner/switch/stepper visual rhythm stays consistent.

The hub's "Blocked content" section shows a count badge per category and
routes to its own screen (Routes.BlockedUsers, SpammingUsers, HiddenWords,
MutedThreads). The hidden-words screen now docks the "Add word" field as
a bottom bar so it doesn't compete with the list for vertical space, and
selection mode is scoped per-screen instead of shared across tabs.
This commit is contained in:
Claude
2026-05-13 20:48:53 +00:00
parent 8dd4ed4c6d
commit 2816ceb479
10 changed files with 1274 additions and 847 deletions
@@ -178,6 +178,7 @@ object MaterialSymbols {
val RadioButtonUnchecked = MaterialSymbol("\uE836")
val Recommend = MaterialSymbol("\uE9D2")
val Refresh = MaterialSymbol("\uE5D5")
val Remove = MaterialSymbol("\uE15B")
val RemoveCircleOutline = MaterialSymbol("\uF08F")
val RemoveDone = MaterialSymbol("\uE9D3")
val Replay = MaterialSymbol("\uE042")