package com.peachpasswords.sync import android.content.Context import dagger.hilt.android.qualifiers.ApplicationContext import javax.inject.Inject import javax.inject.Singleton /** * Clears every piece of state that can make a destroyed vault still look * paired. The Pro license deliberately lives outside this boundary. */ @Singleton class SyncFreshStartResetter @Inject constructor( @ApplicationContext private val context: Context, private val devices: PairedDeviceStore, private val pendingDevices: PendingVouchedDeviceStore, private val alerts: SyncAlertStore, private val outcomes: SyncOutcomeStore, private val relaySettings: RelaySettingsStore, private val backgroundSync: BackgroundSyncPreference, private val lockedSyncSpool: LockedSyncSpoolStore, ) { fun reset() { resetSyncStateForFreshStart( stopService = { PeachSyncService.stop(context) }, clearDevices = devices::clear, clearPendingDevices = pendingDevices::clear, clearAlerts = alerts::clear, clearOutcomes = outcomes::reset, clearRelaySettings = relaySettings::reset, clearBackgroundPreference = backgroundSync::reset, clearLocalIdentity = { clearDeviceIdentity(context) }, clearLockedSyncSpool = lockedSyncSpool::clear, ) } } internal fun resetSyncStateForFreshStart( stopService: () -> Unit, clearDevices: () -> Unit, clearPendingDevices: () -> Unit, clearAlerts: () -> Unit, clearOutcomes: () -> Unit, clearRelaySettings: () -> Unit, clearBackgroundPreference: () -> Unit, clearLocalIdentity: () -> Unit, clearLockedSyncSpool: () -> Unit = {}, ) { stopService() clearDevices() clearPendingDevices() clearAlerts() clearOutcomes() clearRelaySettings() clearBackgroundPreference() clearLocalIdentity() clearLockedSyncSpool() }