package com.example.aiapp import android.content.Context import androidx.core.content.edit private const val DRAFTS = "session-drafts" /** * A message typed into a session and not sent yet. * * On this device rather than on the backend, which is where this app otherwise keeps state so that * every device sees it. A draft is the case that rule is not about: it is the contents of a text * box on the phone somebody is holding, written on every keystroke, and half a sentence surfacing * on another device would be a surprise rather than a convenience. What has been *sent* is the * server's, and that is the part which has to outlive this phone. * * Kept per session id, because the thing being typed belongs to the conversation it is aimed at: * one shared box would hand a message meant for one session to whichever was opened next. */ fun loadDraft(context: Context, sessionId: String): String = context.getSharedPreferences(DRAFTS, Context.MODE_PRIVATE).getString(sessionId, "").orEmpty() /** * Records [text] as the draft for [sessionId], or forgets it when there is nothing left to keep. * * The path out is emptying the box, which is what sending does -- so a sent message removes its own * entry and nothing accumulates for a session in ordinary use. A session *deleted* while it held a * draft does leave its key behind: pruning those means a pass over the live session list, which * this file would otherwise have no reason to know about, and the residue is a few bytes per * session ever abandoned mid-sentence. That is a trade rather than an oversight. */ fun saveDraft(context: Context, sessionId: String, text: String) { context.getSharedPreferences(DRAFTS, Context.MODE_PRIVATE).edit { if (text.isEmpty()) remove(sessionId) else putString(sessionId, text) } }