PeachApplication.kt

1.7 KB · raw

1package com.peachpasswords23import android.app.Application4import androidx.lifecycle.DefaultLifecycleObserver5import androidx.lifecycle.LifecycleOwner6import androidx.lifecycle.ProcessLifecycleOwner7import com.peachpasswords.sync.ForegroundSyncCoordinator8import com.peachpasswords.vault.VaultLockTimer9import com.peachpasswords.vault.VaultRepository10import dagger.hilt.android.HiltAndroidApp11import javax.inject.Inject1213@HiltAndroidApp14class PeachApplication : Application() {15    @Inject lateinit var vault: VaultRepository16    @Inject lateinit var lockTimer: VaultLockTimer17    @Inject lateinit var foregroundSync: ForegroundSyncCoordinator1819    override fun onCreate() {20        super.onCreate()21        // Lock the vault the moment the whole app goes to background (CF-1).22        // ProcessLifecycleOwner is process-wide and debounced, so a rotation or a23        // brief Activity restart does not trip it — only a genuine backgrounding.24        ProcessLifecycleOwner.get().lifecycle.addObserver(object : DefaultLifecycleObserver {25            override fun onStart(owner: LifecycleOwner) {26                foregroundSync.triggerForegroundSync()27            }2829            override fun onStop(owner: LifecycleOwner) {30                // A SAF file picker/save dialog or share sheet also stops the31                // process's activities while it's in the foreground — that's32                // an expected, momentary handoff as part of an in-app export/33                // import flow, not a real backgrounding, so it's exempted via34                // VaultRepository.expectTransientBackground().35                if (vault.consumeTransientBackgroundSuppression()) return36                vault.lock()37                lockTimer.cancel()38            }39        })40    }41}