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>
45 lines
1.6 KiB
Kotlin
45 lines
1.6 KiB
Kotlin
package com.example.aiapp
|
|
|
|
import android.content.Intent
|
|
import android.net.Uri
|
|
import androidx.core.content.IntentCompat
|
|
|
|
/**
|
|
* What another app handed this one through the share sheet, waiting to be attached to a session.
|
|
*
|
|
* Held as the URIs rather than uploaded on arrival, because an upload belongs to a session and the
|
|
* share arrives before anyone has said which. [serial] makes two shares of the same thing two
|
|
* requests, for the reason [SessionOpenRequest] carries one.
|
|
*/
|
|
data class ShareRequest(val uris: List<Uri>, val text: String?, val serial: Int)
|
|
|
|
/** The share in [intent], or null when it is some other intent. */
|
|
fun sharedContent(intent: Intent, serial: Int): ShareRequest? {
|
|
val uris =
|
|
when (intent.action) {
|
|
Intent.ACTION_SEND ->
|
|
listOfNotNull(
|
|
IntentCompat.getParcelableExtra(intent, Intent.EXTRA_STREAM, Uri::class.java)
|
|
)
|
|
Intent.ACTION_SEND_MULTIPLE ->
|
|
IntentCompat.getParcelableArrayListExtra(
|
|
intent,
|
|
Intent.EXTRA_STREAM,
|
|
Uri::class.java,
|
|
)
|
|
.orEmpty()
|
|
else -> return null
|
|
}
|
|
val text = intent.getStringExtra(Intent.EXTRA_TEXT)?.takeIf { it.isNotBlank() }
|
|
if (uris.isEmpty() && text == null) return null
|
|
return ShareRequest(uris, text, serial)
|
|
}
|
|
|
|
/** What is waiting, for the banner that says so. */
|
|
fun ShareRequest.summary(): String =
|
|
when {
|
|
uris.size == 1 -> "1 file to attach"
|
|
uris.isNotEmpty() -> "${uris.size} files to attach"
|
|
else -> "Text to attach"
|
|
}
|