Wear Catppuccin Mocha, and move Usage to where the provider is
Two changes to the app, plus the one they turned up. **The theme.** Catppuccin Mocha, copied from dev-updater rather than shared: wg-app-link is the *link* -- the tunnel, the pinned CA, enrollment -- and a palette is not that. The two apps looking alike is a preference rather than a contract, and the moment one wants a different accent a shared version becomes a thing to fight. dev-updater's ActionTone and its ANSI table did not come across; nothing here draws a log or a destructive button yet, and copying a vocabulary with no speakers is how a file starts lying about what the app does. **Usage is no longer a global button.** It belongs to the provider, and the session view is the only place a provider is currently named, so that is where the control sits -- beside the line that names it, rather than collected with the app-wide controls where its scope had to be guessed. It carries the session back with it, so Back returns to that session rather than dumping the reader on the list. Its real home is that provider's own settings, which do not exist yet. **And the bit that only running it could find.** I first subtitled the usage screen with the session's provider, which on an echo session put "echo" directly above a card reading "claude" -- Claude's account-wide numbers labelled as echo's, a claim about echo that nothing measured. The subtitle is gone; each card names the service that answered, which is the true scope, and the reason is written where the subtitle was so it does not get re-added. Looked at on the emulator rather than read: the palette, the session header, the usage screen, and Back landing on the session it came from. ktfmt, compile and Lint clean.
This commit is contained in:
1 parent
4370c467ca
commit
31135e3f22
6 files changed
+135
-7
No files matched your search
@@ -130,7 +130,12 @@ private fun updateTool(
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun SessionScreen(settings: ServerSettings, summary: SessionSummary, onBack: () -> Unit) {
|
||||
fun SessionScreen(
|
||||
settings: ServerSettings,
|
||||
summary: SessionSummary,
|
||||
onBack: () -> Unit,
|
||||
onUsage: () -> Unit,
|
||||
) {
|
||||
val scope = rememberCoroutineScope()
|
||||
var items by remember { mutableStateOf(listOf<TranscriptItem>()) }
|
||||
var status by remember { mutableStateOf(summary.status) }
|
||||
@@ -252,6 +257,15 @@ fun SessionScreen(settings: ServerSettings, summary: SessionSummary, onBack: ()
|
||||
)
|
||||
}
|
||||
StatusText(status)
|
||||
// Beside the provider it reports on, which is the line directly to its left.
|
||||
//
|
||||
// Its real home is this provider's settings, which do not exist yet; until they do,
|
||||
// the session is the only place the provider is already named, so it is the only
|
||||
// place the button can sit without inventing a scope for itself. What it shows is
|
||||
// the paid service's own numbers, so a session on a provider with no such service
|
||||
// gets an honest "unavailable" rather than a hidden button -- a control that comes
|
||||
// and goes makes its absence the signal, and absence cannot say why.
|
||||
TextButton(onClick = onUsage) { Text("Usage") }
|
||||
}
|
||||
|
||||
(streamError ?: actionError)?.let { message ->
|
||||
|
||||
Reference in new issue
Block a user