mirror of
https://github.com/twinksoftware/Gearslip.git
synced 2026-11-10 16:02:25 +01:00
home: What's new and which cars work under the status card; the usage notes switch stays in Settings
This commit is contained in:
1 parent
4f1e6dcbfa
commit
b848c5d910
3 files changed
+36
-47
No files matched your search
@@ -62,9 +62,12 @@ fun GearslipApp(onDisconnect: () -> Unit, onRequestCallScreening: () -> Unit) {
|
|||||||
var introReturn by rememberSaveable { mutableStateOf(afterIntro) }
|
var introReturn by rememberSaveable { mutableStateOf(afterIntro) }
|
||||||
// Home's "it worked" card opens Settings at usage notes rather than at the top.
|
// Home's "it worked" card opens Settings at usage notes rather than at the top.
|
||||||
var settingsAtUsageNotes by rememberSaveable { mutableStateOf(false) }
|
var settingsAtUsageNotes by rememberSaveable { mutableStateOf(false) }
|
||||||
|
// What's new and Connection help open from Home and from Settings; back returns to whichever.
|
||||||
|
var backTo by rememberSaveable { mutableStateOf(Screen.SETTINGS) }
|
||||||
BackHandler(enabled = screen != Screen.HOME && screen != Screen.INTRO) {
|
BackHandler(enabled = screen != Screen.HOME && screen != Screen.INTRO) {
|
||||||
screen = when (screen) {
|
screen = when (screen) {
|
||||||
Screen.RECOMMENDED_APPS, Screen.LOGS, Screen.CAR_PREVIEW, Screen.HELP -> Screen.SETTINGS
|
Screen.RECOMMENDED_APPS, Screen.LOGS, Screen.CAR_PREVIEW -> Screen.SETTINGS
|
||||||
|
Screen.HELP, Screen.WHATS_NEW -> backTo
|
||||||
else -> Screen.HOME
|
else -> Screen.HOME
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -105,16 +108,18 @@ fun GearslipApp(onDisconnect: () -> Unit, onRequestCallScreening: () -> Unit) {
|
|||||||
Screen.INTRO -> IntroScreen(onDone = { screen = introReturn })
|
Screen.INTRO -> IntroScreen(onDone = { screen = introReturn })
|
||||||
Screen.HOME -> HomeScreen(
|
Screen.HOME -> HomeScreen(
|
||||||
onOpenSettings = { settingsAtUsageNotes = false; screen = Screen.SETTINGS },
|
onOpenSettings = { settingsAtUsageNotes = false; screen = Screen.SETTINGS },
|
||||||
|
onOpenWhatsNew = { backTo = Screen.HOME; screen = Screen.WHATS_NEW },
|
||||||
|
onOpenHelp = { backTo = Screen.HOME; screen = Screen.HELP },
|
||||||
onOpenUsageNotes = { settingsAtUsageNotes = true; screen = Screen.SETTINGS },
|
onOpenUsageNotes = { settingsAtUsageNotes = true; screen = Screen.SETTINGS },
|
||||||
onDisconnect = onDisconnect,
|
onDisconnect = onDisconnect,
|
||||||
)
|
)
|
||||||
Screen.WHATS_NEW -> WhatsNewScreen(onBack = { screen = Screen.SETTINGS })
|
Screen.WHATS_NEW -> WhatsNewScreen(onBack = { screen = backTo })
|
||||||
Screen.LOGS -> LogsScreen(onBack = { screen = Screen.SETTINGS })
|
Screen.LOGS -> LogsScreen(onBack = { screen = Screen.SETTINGS })
|
||||||
Screen.SETTINGS -> SettingsScreen(
|
Screen.SETTINGS -> SettingsScreen(
|
||||||
onBack = { screen = Screen.HOME },
|
onBack = { screen = Screen.HOME },
|
||||||
onOpenRecommendedApps = { settingsAtUsageNotes = false; screen = Screen.RECOMMENDED_APPS },
|
onOpenRecommendedApps = { settingsAtUsageNotes = false; screen = Screen.RECOMMENDED_APPS },
|
||||||
onOpenWhatsNew = { settingsAtUsageNotes = false; screen = Screen.WHATS_NEW },
|
onOpenWhatsNew = { settingsAtUsageNotes = false; backTo = Screen.SETTINGS; screen = Screen.WHATS_NEW },
|
||||||
onOpenHelp = { settingsAtUsageNotes = false; screen = Screen.HELP },
|
onOpenHelp = { settingsAtUsageNotes = false; backTo = Screen.SETTINGS; screen = Screen.HELP },
|
||||||
onOpenCarPreview = { settingsAtUsageNotes = false; screen = Screen.CAR_PREVIEW },
|
onOpenCarPreview = { settingsAtUsageNotes = false; screen = Screen.CAR_PREVIEW },
|
||||||
onOpenLogs = { settingsAtUsageNotes = false; screen = Screen.LOGS },
|
onOpenLogs = { settingsAtUsageNotes = false; screen = Screen.LOGS },
|
||||||
onReplayTutorial = { screen = Screen.SETUP_GUIDE },
|
onReplayTutorial = { screen = Screen.SETUP_GUIDE },
|
||||||
@@ -124,7 +129,7 @@ fun GearslipApp(onDisconnect: () -> Unit, onRequestCallScreening: () -> Unit) {
|
|||||||
Screen.RECOMMENDED_APPS -> RecommendedAppsScreen(onBack = { screen = Screen.SETTINGS })
|
Screen.RECOMMENDED_APPS -> RecommendedAppsScreen(onBack = { screen = Screen.SETTINGS })
|
||||||
Screen.CAR_PREVIEW -> CarPreviewScreen(onBack = { screen = Screen.SETTINGS })
|
Screen.CAR_PREVIEW -> CarPreviewScreen(onBack = { screen = Screen.SETTINGS })
|
||||||
Screen.HELP -> HelpScreen(
|
Screen.HELP -> HelpScreen(
|
||||||
onBack = { screen = Screen.SETTINGS },
|
onBack = { screen = backTo },
|
||||||
onRequestCallScreening = onRequestCallScreening,
|
onRequestCallScreening = onRequestCallScreening,
|
||||||
)
|
)
|
||||||
Screen.CERT_SETUP -> CertSetupScreen(
|
Screen.CERT_SETUP -> CertSetupScreen(
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import androidx.compose.material.icons.filled.Send
|
|||||||
import androidx.compose.material.icons.filled.List
|
import androidx.compose.material.icons.filled.List
|
||||||
import androidx.compose.material.icons.filled.PlayArrow
|
import androidx.compose.material.icons.filled.PlayArrow
|
||||||
import androidx.compose.material.icons.filled.Settings
|
import androidx.compose.material.icons.filled.Settings
|
||||||
|
import androidx.compose.material.icons.filled.Star
|
||||||
import androidx.compose.material3.Button
|
import androidx.compose.material3.Button
|
||||||
import androidx.compose.material3.CircularProgressIndicator
|
import androidx.compose.material3.CircularProgressIndicator
|
||||||
import androidx.compose.material3.HorizontalDivider
|
import androidx.compose.material3.HorizontalDivider
|
||||||
@@ -48,6 +49,8 @@ import app.seb3thehacker.gearslip.stats.WorkedPrompt
|
|||||||
@Composable
|
@Composable
|
||||||
fun HomeScreen(
|
fun HomeScreen(
|
||||||
onOpenSettings: () -> Unit,
|
onOpenSettings: () -> Unit,
|
||||||
|
onOpenWhatsNew: () -> Unit,
|
||||||
|
onOpenHelp: () -> Unit,
|
||||||
onOpenUsageNotes: () -> Unit,
|
onOpenUsageNotes: () -> Unit,
|
||||||
onDisconnect: () -> Unit,
|
onDisconnect: () -> Unit,
|
||||||
) {
|
) {
|
||||||
@@ -98,7 +101,22 @@ fun HomeScreen(
|
|||||||
Spacer(Modifier.height(16.dp))
|
Spacer(Modifier.height(16.dp))
|
||||||
StatusCard(status)
|
StatusCard(status)
|
||||||
Spacer(Modifier.height(16.dp))
|
Spacer(Modifier.height(16.dp))
|
||||||
UsageNotesHomeCard(onOpen = onOpenUsageNotes)
|
SettingsCard {
|
||||||
|
SettingsRow(
|
||||||
|
"What's new in ${Intro.release}",
|
||||||
|
Modifier.clickable(onClick = onOpenWhatsNew),
|
||||||
|
icon = Icons.Filled.Star,
|
||||||
|
trailing = { Arrow() },
|
||||||
|
)
|
||||||
|
SettingsDivider()
|
||||||
|
SettingsRow(
|
||||||
|
"Which cars work",
|
||||||
|
Modifier.clickable(onClick = onOpenHelp),
|
||||||
|
subtitle = "Most do. See which ones, and what to set up first",
|
||||||
|
icon = Icons.Filled.Info,
|
||||||
|
trailing = { Arrow() },
|
||||||
|
)
|
||||||
|
}
|
||||||
// The first drive that worked asks once to share it, right under the result.
|
// The first drive that worked asks once to share it, right under the result.
|
||||||
val car = workedCar
|
val car = workedCar
|
||||||
if (car != null && !live) {
|
if (car != null && !live) {
|
||||||
@@ -124,6 +142,13 @@ fun HomeScreen(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun Arrow() = Icon(
|
||||||
|
Icons.AutoMirrored.Filled.KeyboardArrowRight,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||||
|
)
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun StatusCard(status: SessionStatus.Snapshot) {
|
private fun StatusCard(status: SessionStatus.Snapshot) {
|
||||||
val scheme = MaterialTheme.colorScheme
|
val scheme = MaterialTheme.colorScheme
|
||||||
|
|||||||
@@ -256,44 +256,3 @@ internal fun WorkedCard(car: String, onSeeWhatsSent: () -> Unit, modifier: Modif
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Usage notes on Home, one row with one action either way. While they're off, the row is the
|
|
||||||
* switch, so opting in is a single tap. Once they're on, it shrinks to a quiet line that opens
|
|
||||||
* Settings at its usage notes section, so a driver already sharing isn't pitched again.
|
|
||||||
*/
|
|
||||||
@Composable
|
|
||||||
internal fun UsageNotesHomeCard(onOpen: () -> Unit, modifier: Modifier = Modifier) {
|
|
||||||
val context = LocalContext.current
|
|
||||||
var on by remember { mutableStateOf(UsageStats.enabled(context)) }
|
|
||||||
|
|
||||||
SettingsCard(modifier) {
|
|
||||||
if (on) {
|
|
||||||
SettingsRow(
|
|
||||||
"Sharing usage notes",
|
|
||||||
Modifier.clickable(onClick = onOpen),
|
|
||||||
subtitle = buildNote(),
|
|
||||||
icon = Icons.Filled.Check,
|
|
||||||
trailing = {
|
|
||||||
Icon(
|
|
||||||
Icons.AutoMirrored.Filled.KeyboardArrowRight,
|
|
||||||
contentDescription = null,
|
|
||||||
tint = MaterialTheme.colorScheme.onSurfaceVariant,
|
|
||||||
)
|
|
||||||
},
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
SettingsRow(
|
|
||||||
USAGE_STATS_TITLE,
|
|
||||||
Modifier.toggleable(false, role = Role.Switch) {
|
|
||||||
UsageStats.set(context, true, UsageStats.choices(context))
|
|
||||||
on = true
|
|
||||||
},
|
|
||||||
subtitle = buildNote() ?: ("A short note after each drive tells the next driver " +
|
|
||||||
"whether their car works. No name, account, or location"),
|
|
||||||
icon = Icons.Filled.Send,
|
|
||||||
trailing = { Switch(checked = false, onCheckedChange = null) },
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in new issue
Block a user