Package-level declarations

Functions

Link copied to clipboard
fun ActionButton(label: String, onClick: () -> Unit)

Outlined, tappable action chip used for AI-proposed actions.

Link copied to clipboard
fun AiGuideScreen(onClose: () -> Unit)

The in-settings, fully offline "how the ai works" tutorial (#2): what runs on-device, bringing your own model, and troubleshooting.

Link copied to clipboard
internal fun Caption(text: String)
Link copied to clipboard

The best available "make me the default home" intent: the system role dialog on Android 10+, the default-home settings page otherwise.

Link copied to clipboard
fun focusLabel(focusUntil: Long): String

"focus is on until 3:40 pm" / "focus is on until you turn it off".

Link copied to clipboard
internal fun GroupLabel(text: String)
Link copied to clipboard
internal fun groupShape(index: Int, count: Int): Shape
Link copied to clipboard
internal fun GroupSurface(shape: Shape, content: @Composable () -> Unit)
Link copied to clipboard

True when Foyer is the device's current default home app.

Link copied to clipboard
Link copied to clipboard
internal fun NavRow(shape: Shape, title: String, subtitle: String? = null, chevron: Boolean = true, titleColor: Color = androidx.compose.ui.graphics.Color.Unspecified, onClick: () -> Unit)
Link copied to clipboard
fun OnboardingScreen(onDone: () -> Unit)

First-run overlay: a short privacy-first pitch and the default-launcher prompt. Fully skippable; shown exactly once (see LauncherStore.onboarded). Permissions (mic / contacts / usage access) are not requested here — each is asked at the point of first use by the feature that needs it.

Link copied to clipboard
internal fun PageScaffold(title: String, onBack: () -> Unit, subtitle: String? = null, backIsClose: Boolean = false, content: @Composable () -> Unit)
Link copied to clipboard
internal fun RowSurface(shape: Shape, onClick: () -> Unit?, content: @Composable RowScope.() -> Unit)
Link copied to clipboard
internal fun <T> Segmented(options: List<T>, selected: T, label: (T) -> String, onSelect: (T) -> Unit)
Link copied to clipboard
internal fun SettingsGroup(vararg rows: @Composable (shape: Shape) -> Unit)

M3 Expressive grouped list: rows in one visual card, 2dp seams between them.

Link copied to clipboard
fun SettingsScreen(store: LauncherStore, onClose: () -> Unit, startAtAssistant: Boolean = false)
Link copied to clipboard
internal fun Swatch(color: Color, selected: Boolean, description: String, onClick: () -> Unit)
Link copied to clipboard
fun UsageSummaryScreen(apps: List<AppEntry>, store: LauncherStore, onClose: () -> Unit)

Wellbeing summary (#12): everything computed on-device from UsageStats the launcher already reads — today's total and per-app breakdown, unlocks, and a 14-day trend rendered as quiet text-first bars. Nothing leaves the phone.

Link copied to clipboard
fun VoiceScreen(store: LauncherStore, onClose: () -> Unit, onOpenAiSettings: () -> Unit)

Conversational entry point. Android on-device speech-to-text captures the request; the on-device model (via Assistant) decides the action; the launcher only executes the model's choice. Fully on-device.