You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
As a Pyrycode mobile user opening Settings, I want a structured sectioned screen matching the locked Figma design, so I can see the canonical settings categories (Connection, Appearance, Defaults, Notifications, Memory, Storage, About) with the correct row types instead of a placeholder.
Context
Phase 1's #16 wired a Settings route, but the destination is a literal SettingsPlaceholder composable with the text "Settings placeholder" + Back button. Figma node 17:2 shows the canonical full-screen sectioned settings layout.
This ticket builds the visual skeleton — sections + section headers + row stubs with the correct trailing affordances. Wiring each row's destination, persisting toggle state, and showing real values are Phase 3+ tickets; this ticket lands the visual structure only, with placeholder literals matching Figma.
Acceptance Criteria
New composable SettingsScreen at app/src/main/java/de/pyryco/mobile/ui/settings/SettingsScreen.kt replaces the SettingsPlaceholder stub; MainActivity.ktRoutes.Settings composable invokes the new screen and the old SettingsPlaceholder private composable is removed.
Screen renders M3 TopAppBar with title "Settings" and a back navigation icon that calls the existing onBack (already wired via the NavHost).
Body is a vertically scrollable list with the following sections in this order, each preceded by an M3 section header (label-style, indented to match Figma):
Connection — rows: Server (subtitle placeholder "juhana-mac-2026", trailing chevron); Pair another server (single-line, trailing chevron).
Appearance — rows: Theme (subtitle "System", trailing chevron); Use Material You dynamic color (single-line, trailing M3 Switch).
Defaults for new conversations — rows: Default model (subtitle "Opus 4.7", chevron); Default effort (subtitle "high", chevron); Default YOLO (subtitle "off", trailing Switch); Default workspace (subtitle "scratch", chevron).
Notifications — rows: Push notifications when claude responds (single-line, trailing Switch); Notification sound (subtitle "Default", chevron).
Memory — rows: Installed memory plugins (subtitle "0 plugins", trailing outlined Add button with leading plus icon); Manage per-channel memory (single-line, chevron).
About — rows: Version 0.1.0 (subtitle "build a8f3c2d", no trailing affordance); Open source · github.com/pyrycode/pyrycode-mobile (trailing external-link icon, two-line wrap allowed); Privacy policy (single-line, trailing external-link icon); License: MIT (single-line, no trailing affordance).
Switch rows hold local-only state (remember { mutableStateOf(...) } with defaults matching Figma: Material You = on, Default YOLO = off, Push notifications = on); no persistence, no ViewModel, no hoisted callbacks — pure visual stub.
All other row taps and the Add button are no-op (or a Log.d TODO marker); sub-screens land in Phase 3 tickets.
Zero hardcoded colors / typography / spacing literals — colors come from MaterialTheme.colorScheme, type from MaterialTheme.typography, spacing from M3 defaults (ListItem, dp values matching the 8dp grid are acceptable for section-header padding).
@Preview for light and dark; both render without crashing and visually match Figma 17:2 structurally (correct sections, correct row count per section, correct trailing affordance per row).
Technical Notes
Existing stub at MainActivity.kt:175-189 (SettingsPlaceholder composable) — remove after wiring the new screen. Update MainActivity.kt:175 (the composable(Routes.Settings) block) to call SettingsScreen(onBack = { navController.popBackStack() }).
Prefer M3 ListItem for row primitives; use headlineContent / supportingContent / trailingContent slots. The section header is a Text with MaterialTheme.typography.labelLarge (or whichever M3 token best matches Figma's 14sp/medium label — pick by inspection of the rendered Figma).
Don't introduce a SettingsViewModel or repository yet — there is no state to manage beyond the three local switches.
Subtitle literals ("juhana-mac-2026", "Opus 4.7", "11 archived", build hash, etc.) are intentional placeholders; do not wire them to BuildConfig, DataStore, or any data source. They are scaffolding that later phases replace.
Size Estimate
S — one new file (~140 LOC including 2 previews) + ~3 LOC change in MainActivity.kt. Two files touched, ~5 ACs of structural work plus one row-enumeration AC; well inside the S envelope.
User Story
As a Pyrycode mobile user opening Settings, I want a structured sectioned screen matching the locked Figma design, so I can see the canonical settings categories (Connection, Appearance, Defaults, Notifications, Memory, Storage, About) with the correct row types instead of a placeholder.
Context
Phase 1's #16 wired a Settings route, but the destination is a literal
SettingsPlaceholdercomposable with the text "Settings placeholder" + Back button. Figma node17:2shows the canonical full-screen sectioned settings layout.This ticket builds the visual skeleton — sections + section headers + row stubs with the correct trailing affordances. Wiring each row's destination, persisting toggle state, and showing real values are Phase 3+ tickets; this ticket lands the visual structure only, with placeholder literals matching Figma.
Acceptance Criteria
SettingsScreenatapp/src/main/java/de/pyryco/mobile/ui/settings/SettingsScreen.ktreplaces theSettingsPlaceholderstub;MainActivity.ktRoutes.Settingscomposable invokes the new screen and the oldSettingsPlaceholderprivate composable is removed.TopAppBarwith title "Settings" and a back navigation icon that calls the existingonBack(already wired via the NavHost).Server(subtitle placeholder "juhana-mac-2026", trailing chevron);Pair another server(single-line, trailing chevron).Theme(subtitle "System", trailing chevron);Use Material You dynamic color(single-line, trailing M3Switch).Default model(subtitle "Opus 4.7", chevron);Default effort(subtitle "high", chevron);Default YOLO(subtitle "off", trailingSwitch);Default workspace(subtitle "scratch", chevron).Push notifications when claude responds(single-line, trailingSwitch);Notification sound(subtitle "Default", chevron).Installed memory plugins(subtitle "0 plugins", trailing outlinedAddbutton with leading plus icon);Manage per-channel memory(single-line, chevron).Archived conversations(subtitle "11 archived", chevron);Clear cache(single-line, chevron).Version 0.1.0(subtitle "build a8f3c2d", no trailing affordance);Open source · github.com/pyrycode/pyrycode-mobile(trailing external-link icon, two-line wrap allowed);Privacy policy(single-line, trailing external-link icon);License: MIT(single-line, no trailing affordance).remember { mutableStateOf(...) }with defaults matching Figma: Material You = on, Default YOLO = off, Push notifications = on); no persistence, no ViewModel, no hoisted callbacks — pure visual stub.Addbutton are no-op (or aLog.dTODO marker); sub-screens land in Phase 3 tickets.MaterialTheme.colorScheme, type fromMaterialTheme.typography, spacing from M3 defaults (ListItem,dpvalues matching the 8dp grid are acceptable for section-header padding).@Previewfor light and dark; both render without crashing and visually match Figma 17:2 structurally (correct sections, correct row count per section, correct trailing affordance per row).Technical Notes
MainActivity.kt:175-189(SettingsPlaceholdercomposable) — remove after wiring the new screen. UpdateMainActivity.kt:175(thecomposable(Routes.Settings)block) to callSettingsScreen(onBack = { navController.popBackStack() }).ListItemfor row primitives; useheadlineContent/supportingContent/trailingContentslots. The section header is aTextwithMaterialTheme.typography.labelLarge(or whichever M3 token best matches Figma's 14sp/medium label — pick by inspection of the rendered Figma).SettingsViewModelor repository yet — there is no state to manage beyond the three local switches.Size Estimate
S — one new file (~140 LOC including 2 previews) + ~3 LOC change in
MainActivity.kt. Two files touched, ~5 ACs of structural work plus one row-enumeration AC; well inside the S envelope.Figma
https://www.figma.com/design/g2HIq2UyPhslEoHRokQmHG?node-id=17-2