The same pass the server had, on the Kotlin side: comments restating what the code says are gone, and the ones recording a measurement, a constraint or an incident are kept but cut to a few lines each. 6540 comment lines to 5674, and 920 lines off the app. Two doc comments had drifted onto the item above the one they describe -- `contextAfter`'s onto `sessionWorking` in Events.kt, and `UsageMonitor`'s equivalent on the server was fixed in the previous commit. Each is back on its own item, which is the only non-comment line this diff moves. The comments are reflowed to the column limit at their own indentation: several were written wide, and ktfmt re-wrapped them into lines holding a single orphan word. `/tmp` script, not kept -- ktfmt is idempotent over the result, which is the check. Left alone deliberately: this codebase's remaining comment density is high because the comments carry things the code cannot say -- what a null means, what a number was measured against, which bug a guard exists for. Of the 238 one-line doc comments in the app, five were pure restatement of the name and were removed; the rest each say something the signature does not. ktfmtFormat, compileDebugKotlin, lintDebug and testDebugUnitTest pass; cargo test (127), clippy --all-targets and fmt still clean. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
50 lines
2.0 KiB
Kotlin
50 lines
2.0 KiB
Kotlin
package com.example.aiapp
|
|
|
|
import androidx.compose.foundation.layout.Arrangement
|
|
import androidx.compose.foundation.layout.Row
|
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
import androidx.compose.foundation.layout.padding
|
|
import androidx.compose.material3.HorizontalDivider
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.graphics.Color
|
|
import androidx.compose.ui.unit.dp
|
|
|
|
/**
|
|
* A line across the transcript saying what left the session's context.
|
|
*
|
|
* Centred between two rules, because it is a divider rather than something anybody said. Two things
|
|
* produce one -- a compaction and a clear -- and they are drawn the same way on purpose: to a
|
|
* reader scrolling back, both mean "the session no longer has what is above this", and which of the
|
|
* two it was is said by the words and the colour.
|
|
*
|
|
* The rules take [color] too, so the whole divider reads as one mark of one kind.
|
|
*/
|
|
@Composable
|
|
fun TranscriptDivider(text: String, color: Color, modifier: Modifier = Modifier) {
|
|
Row(
|
|
verticalAlignment = Alignment.CenterVertically,
|
|
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
|
modifier = modifier.fillMaxWidth().padding(vertical = 8.dp),
|
|
) {
|
|
HorizontalDivider(Modifier.weight(1f), color = color)
|
|
Text(text, style = MaterialTheme.typography.bodySmall, color = color)
|
|
HorizontalDivider(Modifier.weight(1f), color = color)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The mark a clear leaves.
|
|
*
|
|
* Red, and no counts: a clear takes the conversation out of what the session is given, and unlike a
|
|
* compaction it summarises nothing and measures nothing. Everything above stays on screen and stays
|
|
* scrollable -- the reader can see that, which is why this does not say it.
|
|
*/
|
|
@Composable
|
|
fun ClearedRow(modifier: Modifier = Modifier) {
|
|
TranscriptDivider("Context cleared", clearedColor, modifier)
|
|
}
|