diff --git a/app/src/main/java/com/geekymusketeers/uncrack/data/datastore/DataStoreUtil.kt b/app/src/main/java/com/geekymusketeers/uncrack/data/datastore/DataStoreUtil.kt index e1af95d2..99e72b6b 100644 --- a/app/src/main/java/com/geekymusketeers/uncrack/data/datastore/DataStoreUtil.kt +++ b/app/src/main/java/com/geekymusketeers/uncrack/data/datastore/DataStoreUtil.kt @@ -14,5 +14,6 @@ class DataStoreUtil @Inject constructor(context: Context) { companion object { private val Context.dataStore: DataStore by preferencesDataStore("settings") val IS_DARK_MODE_KEY = booleanPreferencesKey("dark_mode") + val IS_SS_BLOCK_KEY = booleanPreferencesKey("ss_block") } } \ No newline at end of file diff --git a/app/src/main/java/com/geekymusketeers/uncrack/navigation/Navigation.kt b/app/src/main/java/com/geekymusketeers/uncrack/navigation/Navigation.kt index 0883d9e2..ca700883 100644 --- a/app/src/main/java/com/geekymusketeers/uncrack/navigation/Navigation.kt +++ b/app/src/main/java/com/geekymusketeers/uncrack/navigation/Navigation.kt @@ -32,6 +32,7 @@ import com.geekymusketeers.uncrack.presentation.masterKey.UpdateMasterKey import com.geekymusketeers.uncrack.presentation.password.PasswordScreen import com.geekymusketeers.uncrack.presentation.profile.ProfileScreen import com.geekymusketeers.uncrack.presentation.shield.ShieldScreen +import com.geekymusketeers.uncrack.sharedViewModel.ThemeViewModel import com.geekymusketeers.uncrack.ui.theme.BackgroundLight import com.geekymusketeers.uncrack.ui.theme.DMSansFontFamily import com.geekymusketeers.uncrack.ui.theme.FadeIn @@ -49,7 +50,8 @@ import kotlinx.collections.immutable.persistentListOf fun Navigation( modifier: Modifier = Modifier, masterKeyViewModel: KeyViewModel = hiltViewModel(), - passwordGeneratorViewModel: PasswordGeneratorViewModel = hiltViewModel() + passwordGeneratorViewModel: PasswordGeneratorViewModel = hiltViewModel(), + themeViewModel: ThemeViewModel = hiltViewModel() ) { val navController = rememberNavController() @@ -101,7 +103,10 @@ fun Navigation( } composable(route = "account_screen") { - AccountScreen(navController) + AccountScreen( + navController, + themeViewModel + ) } composable(route = "update_master_key_screen") { diff --git a/app/src/main/java/com/geekymusketeers/uncrack/presentation/account/AccountScreen.kt b/app/src/main/java/com/geekymusketeers/uncrack/presentation/account/AccountScreen.kt index ff77e214..71a9226c 100644 --- a/app/src/main/java/com/geekymusketeers/uncrack/presentation/account/AccountScreen.kt +++ b/app/src/main/java/com/geekymusketeers/uncrack/presentation/account/AccountScreen.kt @@ -39,6 +39,7 @@ import com.geekymusketeers.uncrack.R import com.geekymusketeers.uncrack.components.AccountOption import com.geekymusketeers.uncrack.components.ProfileContainer import com.geekymusketeers.uncrack.components.ThemeDialog +import com.geekymusketeers.uncrack.sharedViewModel.ThemeViewModel import com.geekymusketeers.uncrack.ui.theme.OnPrimaryContainerLight import com.geekymusketeers.uncrack.ui.theme.OnSurfaceVariantLight import com.geekymusketeers.uncrack.ui.theme.SurfaceTintLight @@ -50,7 +51,11 @@ import com.geekymusketeers.uncrack.util.Util import java.io.ByteArrayOutputStream @Composable -fun AccountScreen(navController: NavHostController, modifier: Modifier = Modifier) { +fun AccountScreen( + navController: NavHostController, + themeViewModel: ThemeViewModel, + modifier: Modifier = Modifier +) { val context = LocalContext.current var openThemeDialog by remember { mutableStateOf(false) } @@ -177,7 +182,9 @@ fun AccountScreen(navController: NavHostController, modifier: Modifier = Modifie AccountItems.CHANGE_MASTER_KEY -> { navController.navigate("update_master_key_screen") } - AccountItems.BLOCK_SS -> {} + AccountItems.BLOCK_SS -> { + themeViewModel.blockScreenShort() + } else -> {} } } diff --git a/app/src/main/java/com/geekymusketeers/uncrack/sharedViewModel/ThemeViewModel.kt b/app/src/main/java/com/geekymusketeers/uncrack/sharedViewModel/ThemeViewModel.kt index b6f2001a..54d5ea10 100644 --- a/app/src/main/java/com/geekymusketeers/uncrack/sharedViewModel/ThemeViewModel.kt +++ b/app/src/main/java/com/geekymusketeers/uncrack/sharedViewModel/ThemeViewModel.kt @@ -5,6 +5,9 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.geekymusketeers.uncrack.data.datastore.DataStoreUtil import com.geekymusketeers.uncrack.data.datastore.DataStoreUtil.Companion.IS_DARK_MODE_KEY +import com.geekymusketeers.uncrack.data.datastore.DataStoreUtil.Companion.IS_SS_BLOCK_KEY +import com.geekymusketeers.uncrack.util.runIO +import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -12,13 +15,14 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import javax.inject.Inject -data class ThemeState(val isDarkMode: Boolean) +data class ThemeState(val isDarkMode: Boolean, val isSsBlocked: Boolean) +@HiltViewModel class ThemeViewModel @Inject constructor( dataStoreUtil: DataStoreUtil ): ViewModel() { - private val _themeState = MutableStateFlow(ThemeState(false)) + private val _themeState = MutableStateFlow(ThemeState(isDarkMode = false, isSsBlocked = false)) val themeState: StateFlow = _themeState private val dataStore = dataStoreUtil.dataStore @@ -26,7 +30,10 @@ class ThemeViewModel @Inject constructor( init { viewModelScope.launch(Dispatchers.IO) { dataStore.data.map { preferences -> - ThemeState(preferences[IS_DARK_MODE_KEY] ?: false) + ThemeState( + isDarkMode = preferences[IS_DARK_MODE_KEY] ?: false, + isSsBlocked = preferences[IS_SS_BLOCK_KEY] ?: false + ) }.collect { _themeState.value = it } @@ -40,4 +47,10 @@ class ThemeViewModel @Inject constructor( } } } + + fun blockScreenShort() = runIO { + dataStore.edit { preferences -> + preferences[IS_SS_BLOCK_KEY] = !(preferences[IS_SS_BLOCK_KEY] ?: false) + } + } } \ No newline at end of file