package com.peachpasswords.sync import android.content.Context import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject import javax.inject.Singleton import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow @Singleton class BackgroundSyncPreference @Inject constructor( @ApplicationContext context: Context, ) { private val prefs = context.getSharedPreferences(PREFS_FILE, Context.MODE_PRIVATE) private val _enabled = MutableStateFlow(readEnabled(prefs.contains(KEY_ENABLED)) { prefs.getBoolean(KEY_ENABLED, true) }) val enabled: StateFlow = _enabled.asStateFlow() fun setEnabled(enabled: Boolean) { prefs.edit().putBoolean(KEY_ENABLED, enabled).apply() _enabled.value = enabled } fun reset() { prefs.edit().clear().apply() _enabled.value = true } companion object { private const val PREFS_FILE = "peach_background_sync" private const val KEY_ENABLED = "enabled" internal fun isEnabled(context: Context): Boolean { val prefs = context.getSharedPreferences(PREFS_FILE, Context.MODE_PRIVATE) return readEnabled(prefs.contains(KEY_ENABLED)) { prefs.getBoolean(KEY_ENABLED, true) } } } } // Existing paired installs default on so upgrading fixes the unreachable-phone state. internal fun readEnabled(hasStoredChoice: Boolean, storedValue: () -> Boolean): Boolean = if (hasStoredChoice) storedValue() else true