archive-97f2350/app/src/main/java/uk/orllewin/sianel/data/Prefs.kt 1.4 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
package uk.orllewin.sianel.data

import android.content.Context
import android.content.SharedPreferences
import androidx.core.content.edit

object Prefs {
    private const val FILE = "sianel_prefs"
    private const val KEY_PASSWORD = "password_enc"   // AES-GCM blob (see Crypto)
    private const val KEY_BASE_URL = "base_url"
    const val DEFAULT_BASE_URL = ""//https://orllewin.uk/video

    @Volatile
    private var cached: SharedPreferences? = null

    private fun prefs(context: Context): SharedPreferences =
        cached ?: synchronized(this) {
            cached ?: context.applicationContext
                .getSharedPreferences(FILE, Context.MODE_PRIVATE)
                .also { cached = it }
        }

    fun getPassword(context: Context): String =
        prefs(context).getString(KEY_PASSWORD, null)
            ?.let { Crypto.decrypt(it) }
            .orEmpty()

    fun setPassword(context: Context, password: String) =
        prefs(context).edit { putString(KEY_PASSWORD, Crypto.encrypt(password)) }

    fun clearPassword(context: Context) = prefs(context).edit { remove(KEY_PASSWORD) }
    fun clearBaseUrl(context: Context) = prefs(context).edit { remove(KEY_BASE_URL) }

    fun getBaseUrl(context: Context): String =
        prefs(context).getString(KEY_BASE_URL, null)?.takeIf { it.isNotBlank() } ?: DEFAULT_BASE_URL

    fun setBaseUrl(context: Context, baseUrl: String) =
        prefs(context).edit { putString(KEY_BASE_URL, baseUrl) }
}