diff --git a/app/src/main/java/to/bitkit/data/SettingsStore.kt b/app/src/main/java/to/bitkit/data/SettingsStore.kt index 784f935eb..a3cfcef84 100644 --- a/app/src/main/java/to/bitkit/data/SettingsStore.kt +++ b/app/src/main/java/to/bitkit/data/SettingsStore.kt @@ -94,9 +94,7 @@ data class SettingsData( val quickPayAmount: Int = 5, val lightningSetupStep: Int = 0, val isPinEnabled: Boolean = false, - val isPinOnLaunchEnabled: Boolean = false, val isBiometricEnabled: Boolean = false, - val isPinOnIdleEnabled: Boolean = false, val isPinForPaymentsEnabled: Boolean = false, val isDevModeEnabled: Boolean = Env.isDebug, val showWidgets: Boolean = true, @@ -123,8 +121,6 @@ data class SettingsData( fun SettingsData.resetPin() = this.copy( isPinEnabled = false, - isPinOnLaunchEnabled = true, - isPinOnIdleEnabled = false, isPinForPaymentsEnabled = false, isBiometricEnabled = false, ) diff --git a/app/src/main/java/to/bitkit/services/MigrationService.kt b/app/src/main/java/to/bitkit/services/MigrationService.kt index ca804b284..c2cd67ff8 100644 --- a/app/src/main/java/to/bitkit/services/MigrationService.kt +++ b/app/src/main/java/to/bitkit/services/MigrationService.kt @@ -740,8 +740,6 @@ class MigrationService @Inject constructor( else -> CoinSelectionPreference.SmallestFirst }, isPinEnabled = settings.pin ?: current.isPinEnabled, - isPinOnLaunchEnabled = settings.pinOnLaunch ?: current.isPinOnLaunchEnabled, - isPinOnIdleEnabled = settings.pinOnIdle ?: current.isPinOnIdleEnabled, isPinForPaymentsEnabled = settings.pinForPayments ?: current.isPinForPaymentsEnabled, isBiometricEnabled = settings.biometrics ?: current.isBiometricEnabled, quickPayIntroSeen = settings.quickpayIntroSeen ?: current.quickPayIntroSeen, @@ -1632,8 +1630,6 @@ data class RNSettings( val enableSendAmountWarning: Boolean? = null, val enableSwipeToHideBalance: Boolean? = null, val pin: Boolean? = null, - val pinOnLaunch: Boolean? = null, - val pinOnIdle: Boolean? = null, val pinForPayments: Boolean? = null, val biometrics: Boolean? = null, val rbf: Boolean? = null, diff --git a/app/src/main/java/to/bitkit/ui/MainActivity.kt b/app/src/main/java/to/bitkit/ui/MainActivity.kt index 4977eedd8..77723f287 100644 --- a/app/src/main/java/to/bitkit/ui/MainActivity.kt +++ b/app/src/main/java/to/bitkit/ui/MainActivity.kt @@ -34,7 +34,6 @@ import to.bitkit.androidServices.LightningNodeService import to.bitkit.androidServices.LightningNodeService.Companion.CHANNEL_ID_NODE import to.bitkit.models.NewTransactionSheetDetails import to.bitkit.ui.components.AuthCheckView -import to.bitkit.ui.components.InactivityTracker import to.bitkit.ui.components.IsOnlineTracker import to.bitkit.ui.components.ToastOverlay import to.bitkit.ui.onboarding.CreateWalletWithPassphraseScreen @@ -128,19 +127,17 @@ class MainActivity : FragmentActivity() { val isAuthenticated by appViewModel.isAuthenticated.collectAsStateWithLifecycle() IsOnlineTracker(appViewModel) - InactivityTracker(appViewModel, settingsViewModel) { - ContentView( - appViewModel = appViewModel, - walletViewModel = walletViewModel, - blocktankViewModel = blocktankViewModel, - currencyViewModel = currencyViewModel, - activityListViewModel = activityListViewModel, - transferViewModel = transferViewModel, - settingsViewModel = settingsViewModel, - backupsViewModel = backupsViewModel, - modifier = Modifier.hazeSource(hazeState, zIndex = 0f) - ) - } + ContentView( + appViewModel = appViewModel, + walletViewModel = walletViewModel, + blocktankViewModel = blocktankViewModel, + currencyViewModel = currencyViewModel, + activityListViewModel = activityListViewModel, + transferViewModel = transferViewModel, + settingsViewModel = settingsViewModel, + backupsViewModel = backupsViewModel, + modifier = Modifier.hazeSource(hazeState, zIndex = 0f) + ) AnimatedVisibility( visible = !isAuthenticated, diff --git a/app/src/main/java/to/bitkit/ui/components/AuthCheckScreen.kt b/app/src/main/java/to/bitkit/ui/components/AuthCheckScreen.kt index 699c15242..2e0916aaf 100644 --- a/app/src/main/java/to/bitkit/ui/components/AuthCheckScreen.kt +++ b/app/src/main/java/to/bitkit/ui/components/AuthCheckScreen.kt @@ -17,9 +17,7 @@ fun AuthCheckScreen( val app = appViewModel ?: return val settings = settingsViewModel ?: return - val isPinOnLaunchEnabled by settings.isPinOnLaunchEnabled.collectAsStateWithLifecycle() val isBiometricEnabled by settings.isBiometricEnabled.collectAsStateWithLifecycle() - val isPinOnIdleEnabled by settings.isPinOnIdleEnabled.collectAsStateWithLifecycle() val isPinForPaymentsEnabled by settings.isPinForPaymentsEnabled.collectAsStateWithLifecycle() AuthCheckView( @@ -35,16 +33,6 @@ fun AuthCheckScreen( navController.popBackStack() } - AuthCheckAction.TOGGLE_PIN_ON_LAUNCH -> { - settings.setIsPinOnLaunchEnabled(!isPinOnLaunchEnabled) - navController.popBackStack() - } - - AuthCheckAction.TOGGLE_PIN_ON_IDLE -> { - settings.setIsPinOnIdleEnabled(!isPinOnIdleEnabled) - navController.popBackStack() - } - AuthCheckAction.TOGGLE_PIN_FOR_PAYMENTS -> { settings.setIsPinForPaymentsEnabled(!isPinForPaymentsEnabled) navController.popBackStack() @@ -68,9 +56,7 @@ fun AuthCheckScreen( } object AuthCheckAction { - const val TOGGLE_PIN_ON_LAUNCH = "TOGGLE_PIN_ON_LAUNCH" const val TOGGLE_BIOMETRICS = "TOGGLE_BIOMETRICS" - const val TOGGLE_PIN_ON_IDLE = "TOGGLE_PIN_ON_IDLE" const val TOGGLE_PIN_FOR_PAYMENTS = "TOGGLE_PIN_FOR_PAYMENTS" const val DISABLE_PIN = "DISABLE_PIN" const val NAV_TO_RESET = "NAV_TO_RESET" diff --git a/app/src/main/java/to/bitkit/ui/components/InactivityTracker.kt b/app/src/main/java/to/bitkit/ui/components/InactivityTracker.kt deleted file mode 100644 index ac7388832..000000000 --- a/app/src/main/java/to/bitkit/ui/components/InactivityTracker.kt +++ /dev/null @@ -1,53 +0,0 @@ -package to.bitkit.ui.components - -import androidx.compose.foundation.layout.Box -import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.getValue -import androidx.compose.ui.Modifier -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.LifecycleEventObserver -import androidx.lifecycle.compose.LocalLifecycleOwner -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import to.bitkit.utils.Logger -import to.bitkit.viewmodels.AppViewModel -import to.bitkit.viewmodels.SettingsViewModel - -@Composable -fun InactivityTracker( - app: AppViewModel, - settings: SettingsViewModel, - modifier: Modifier = Modifier, - content: @Composable () -> Unit, -) { - val lifecycleOwner = LocalLifecycleOwner.current - - val isPinEnabled by settings.isPinEnabled.collectAsStateWithLifecycle() - val isPinOnIdleEnabled by settings.isPinOnIdleEnabled.collectAsStateWithLifecycle() - val isAuthenticated by app.isAuthenticated.collectAsStateWithLifecycle() - - DisposableEffect(lifecycleOwner) { - val observer = LifecycleEventObserver { _, event -> - when (event) { - Lifecycle.Event.ON_RESUME -> { - if (isPinEnabled && isPinOnIdleEnabled && isAuthenticated) { - Logger.debug("App resumed, resetting isAuthenticated.") - app.setIsAuthenticated(false) - } - } - - else -> Unit - } - } - lifecycleOwner.lifecycle.addObserver(observer) - onDispose { - lifecycleOwner.lifecycle.removeObserver(observer) - } - } - - Box( - modifier = modifier - ) { - content() - } -} diff --git a/app/src/main/java/to/bitkit/ui/settings/SecuritySettingsScreen.kt b/app/src/main/java/to/bitkit/ui/settings/SecuritySettingsScreen.kt index 5ca72a89f..c71fd5ece 100644 --- a/app/src/main/java/to/bitkit/ui/settings/SecuritySettingsScreen.kt +++ b/app/src/main/java/to/bitkit/ui/settings/SecuritySettingsScreen.kt @@ -40,9 +40,7 @@ fun SecuritySettingsScreen( val app = appViewModel ?: return val isPinEnabled by settings.isPinEnabled.collectAsStateWithLifecycle() - val isPinOnLaunchEnabled by settings.isPinOnLaunchEnabled.collectAsStateWithLifecycle() val isBiometricEnabled by settings.isBiometricEnabled.collectAsStateWithLifecycle() - val isPinOnIdleEnabled by settings.isPinOnIdleEnabled.collectAsStateWithLifecycle() val isPinForPaymentsEnabled by settings.isPinForPaymentsEnabled.collectAsStateWithLifecycle() val enableSwipeToHideBalance by settings.enableSwipeToHideBalance.collectAsStateWithLifecycle() val hideBalanceOnOpen by settings.hideBalanceOnOpen.collectAsStateWithLifecycle() @@ -51,9 +49,7 @@ fun SecuritySettingsScreen( Content( isPinEnabled = isPinEnabled, - isPinOnLaunchEnabled = isPinOnLaunchEnabled, isBiometricEnabled = isBiometricEnabled, - isPinOnIdleEnabled = isPinOnIdleEnabled, isPinForPaymentsEnabled = isPinForPaymentsEnabled, enableSwipeToHideBalance = enableSwipeToHideBalance, hideBalanceOnOpen = hideBalanceOnOpen, @@ -70,16 +66,6 @@ fun SecuritySettingsScreen( onChangePinClick = { navController.navigateToChangePin() }, - onPinOnLaunchClick = { - navController.navigateToAuthCheck( - onSuccessActionId = AuthCheckAction.TOGGLE_PIN_ON_LAUNCH, - ) - }, - onPinOnIdleClick = { - navController.navigateToAuthCheck( - onSuccessActionId = AuthCheckAction.TOGGLE_PIN_ON_IDLE, - ) - }, onPinForPaymentsClick = { navController.navigateToAuthCheck( onSuccessActionId = AuthCheckAction.TOGGLE_PIN_FOR_PAYMENTS, @@ -110,9 +96,7 @@ fun SecuritySettingsScreen( @Composable private fun Content( isPinEnabled: Boolean, - isPinOnLaunchEnabled: Boolean, isBiometricEnabled: Boolean, - isPinOnIdleEnabled: Boolean, isPinForPaymentsEnabled: Boolean, enableSwipeToHideBalance: Boolean, hideBalanceOnOpen: Boolean, @@ -121,8 +105,6 @@ private fun Content( isBiometrySupported: Boolean, onPinClick: () -> Unit = {}, onChangePinClick: () -> Unit = {}, - onPinOnLaunchClick: () -> Unit = {}, - onPinOnIdleClick: () -> Unit = {}, onPinForPaymentsClick: () -> Unit = {}, onUseBiometricsClick: () -> Unit = {}, onSwipeToHideBalanceClick: () -> Unit = {}, @@ -189,18 +171,6 @@ private fun Content( onClick = onChangePinClick, modifier = Modifier.testTag("PINChange"), ) - SettingsSwitchRow( - title = stringResource(R.string.settings__security__pin_launch), - isChecked = isPinOnLaunchEnabled, - onClick = onPinOnLaunchClick, - modifier = Modifier.testTag("EnablePinOnLaunch"), - ) - SettingsSwitchRow( - title = stringResource(R.string.settings__security__pin_idle), - isChecked = isPinOnIdleEnabled, - onClick = onPinOnIdleClick, - modifier = Modifier.testTag("EnablePinOnIdle"), - ) SettingsSwitchRow( title = stringResource(R.string.settings__security__pin_payments), isChecked = isPinForPaymentsEnabled, @@ -239,9 +209,7 @@ private fun Preview() { AppThemeSurface { Content( isPinEnabled = true, - isPinOnLaunchEnabled = true, isBiometricEnabled = false, - isPinOnIdleEnabled = false, isPinForPaymentsEnabled = false, enableSwipeToHideBalance = true, hideBalanceOnOpen = false, diff --git a/app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt b/app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt index b00cd2c18..31186901d 100644 --- a/app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt +++ b/app/src/main/java/to/bitkit/viewmodels/AppViewModel.kt @@ -1833,7 +1833,7 @@ class AppViewModel @Inject constructor( // region security private suspend fun resetIsAuthenticatedStateInternal() { val settings = settingsStore.data.first() - val needsAuth = settings.isPinEnabled && settings.isPinOnLaunchEnabled + val needsAuth = settings.isPinEnabled _isAuthenticated.value = !needsAuth } @@ -1873,7 +1873,6 @@ class AppViewModel @Inject constructor( fun addPin(pin: String) { viewModelScope.launch { - settingsStore.update { it.copy(isPinOnLaunchEnabled = true) } settingsStore.addDismissedSuggestion(Suggestion.SECURE) } editPin(pin) diff --git a/app/src/main/java/to/bitkit/viewmodels/SettingsViewModel.kt b/app/src/main/java/to/bitkit/viewmodels/SettingsViewModel.kt index 7b929ff14..925e4516d 100644 --- a/app/src/main/java/to/bitkit/viewmodels/SettingsViewModel.kt +++ b/app/src/main/java/to/bitkit/viewmodels/SettingsViewModel.kt @@ -108,15 +108,6 @@ class SettingsViewModel @Inject constructor( } } - val isPinOnIdleEnabled = settingsStore.data.map { it.isPinOnIdleEnabled } - .asStateFlow(initialValue = false) - - fun setIsPinOnIdleEnabled(value: Boolean) { - viewModelScope.launch { - settingsStore.update { it.copy(isPinOnIdleEnabled = value) } - } - } - val isPinForPaymentsEnabled = settingsStore.data.map { it.isPinForPaymentsEnabled } .asStateFlow(initialValue = false) @@ -147,15 +138,6 @@ class SettingsViewModel @Inject constructor( val isPinEnabled = settingsStore.data.map { it.isPinEnabled } .asStateFlow(SharingStarted.Eagerly, false) - val isPinOnLaunchEnabled = settingsStore.data.map { it.isPinOnLaunchEnabled } - .asStateFlow(SharingStarted.Eagerly, false) - - fun setIsPinOnLaunchEnabled(value: Boolean) { - viewModelScope.launch { - settingsStore.update { it.copy(isPinOnLaunchEnabled = value) } - } - } - val isBiometricEnabled = settingsStore.data.map { it.isBiometricEnabled } .asStateFlow(SharingStarted.Eagerly, false)