Skip to content

Commit

Permalink
Impl. Theme State & In-app ss blocking
Browse files Browse the repository at this point in the history
  • Loading branch information
aritra-tech committed May 16, 2024
1 parent c83616e commit 94f5ae6
Show file tree
Hide file tree
Showing 10 changed files with 138 additions and 121 deletions.
15 changes: 14 additions & 1 deletion app/src/main/java/com/geekymusketeers/uncrack/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,32 @@ import androidx.activity.ComponentActivity
import androidx.activity.SystemBarStyle
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.annotation.RequiresApi
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import com.geekymusketeers.uncrack.navigation.Navigation
import com.geekymusketeers.uncrack.presentation.settings.SettingsViewModel
import com.geekymusketeers.uncrack.ui.theme.UnCrackTheme
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class MainActivity : ComponentActivity() {

private val settingsViewModel: SettingsViewModel by viewModels()

@RequiresApi(Build.VERSION_CODES.O)
override fun onCreate(savedInstanceState: Bundle?) {

settingsViewModel.isScreenshotEnabled.observe(this) { isEnabled ->
if (isEnabled) {
window.clearFlags(android.view.WindowManager.LayoutParams.FLAG_SECURE)
} else {
window.setFlags(android.view.WindowManager.LayoutParams.FLAG_SECURE,
android.view.WindowManager.LayoutParams.FLAG_SECURE)
}
}

enableEdgeToEdge(
statusBarStyle = SystemBarStyle.light(
Color.Transparent.toArgb(), Color.Transparent.toArgb()
Expand All @@ -31,7 +44,7 @@ class MainActivity : ComponentActivity() {
super.onCreate(savedInstanceState)
setContent {
UnCrackTheme {
Navigation()
Navigation(this)
}
}
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.geekymusketeers.uncrack.components

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Icon
import androidx.compose.material3.Switch
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.dp
import com.geekymusketeers.uncrack.R
import com.geekymusketeers.uncrack.ui.theme.OnSurfaceLight
import com.geekymusketeers.uncrack.ui.theme.medium18

@Composable
fun UCSwitchCard(
itemName: String,
isChecked: Boolean,
modifier: Modifier = Modifier,
textColor: Color = OnSurfaceLight,
onChecked: (Boolean) -> Unit
) {
Row(
modifier = modifier
.fillMaxWidth()
.padding(16.dp),
horizontalArrangement = Arrangement.spacedBy(12.dp, Alignment.Start),
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = itemName,
style = medium18.copy(textColor)
)

Spacer(modifier = Modifier.weight(1f))

Switch(
modifier = Modifier.semantics {
contentDescription = "Theme switcher"
},
checked = isChecked,
onCheckedChange = onChecked
)
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.geekymusketeers.uncrack.navigation

import android.annotation.SuppressLint
import android.app.Activity
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.compose.material3.Icon
Expand All @@ -27,14 +28,14 @@ import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import com.geekymusketeers.uncrack.R
import com.geekymusketeers.uncrack.presentation.account.SettingsScreen
import com.geekymusketeers.uncrack.presentation.settings.SettingsScreen
import com.geekymusketeers.uncrack.presentation.tools.PasswordGenerator
import com.geekymusketeers.uncrack.presentation.tools.viewModel.PasswordGeneratorViewModel
import com.geekymusketeers.uncrack.presentation.browse.category.CategoryScreen
import com.geekymusketeers.uncrack.presentation.browse.BrowseScreen
import com.geekymusketeers.uncrack.sharedViewModel.UserViewModel
import com.geekymusketeers.uncrack.presentation.masterKey.UpdateMasterKey
import com.geekymusketeers.uncrack.presentation.account.profile.ProfileScreen
import com.geekymusketeers.uncrack.presentation.profile.ProfileScreen
import com.geekymusketeers.uncrack.presentation.tools.PasswordHealthScreen
import com.geekymusketeers.uncrack.presentation.tools.ToolsScreen
import com.geekymusketeers.uncrack.presentation.tools.viewModel.ShieldViewModel
Expand All @@ -54,6 +55,7 @@ import com.geekymusketeers.uncrack.ui.theme.OnSurfaceVariantLight
import com.geekymusketeers.uncrack.ui.theme.PrimaryDark
import com.geekymusketeers.uncrack.util.BackPressHandler
import com.geekymusketeers.uncrack.presentation.masterKey.KeyViewModel
import com.geekymusketeers.uncrack.presentation.settings.SettingsViewModel
import com.geekymusketeers.uncrack.presentation.vault.viewmodel.VaultViewModel
import com.geekymusketeers.uncrack.presentation.vault.viewmodel.ViewPasswordViewModel
import kotlinx.collections.immutable.ImmutableList
Expand All @@ -63,6 +65,7 @@ import kotlinx.collections.immutable.persistentListOf
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@Composable
fun Navigation(
activity: Activity,
modifier: Modifier = Modifier,
masterKeyViewModel: KeyViewModel = hiltViewModel(),
passwordGeneratorViewModel: PasswordGeneratorViewModel = hiltViewModel(),
Expand All @@ -71,7 +74,8 @@ fun Navigation(
vaultViewModel: VaultViewModel = hiltViewModel(),
addEditViewModel: AddEditViewModel = hiltViewModel(),
shieldViewModel: ShieldViewModel = hiltViewModel(),
viewPasswordViewModel: ViewPasswordViewModel = hiltViewModel()
viewPasswordViewModel: ViewPasswordViewModel = hiltViewModel(),
settingsViewModel: SettingsViewModel = hiltViewModel()
) {

val navController = rememberNavController()
Expand Down Expand Up @@ -197,9 +201,10 @@ fun Navigation(

composable(route = Screen.SettingsScreen.name) {
SettingsScreen(
activity,
navController,
themeViewModel,
userViewModel
settingsViewModel
)
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.geekymusketeers.uncrack.presentation.account.profile
package com.geekymusketeers.uncrack.presentation.profile

import android.content.Intent
import android.net.Uri
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.geekymusketeers.uncrack.presentation.account
package com.geekymusketeers.uncrack.presentation.settings

import android.app.Activity
import android.content.Intent
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
Expand All @@ -18,13 +20,14 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
Expand All @@ -33,30 +36,40 @@ import com.geekymusketeers.uncrack.R
import com.geekymusketeers.uncrack.components.SettingsItemGroup
import com.geekymusketeers.uncrack.components.ThemeDialog
import com.geekymusketeers.uncrack.components.UCSettingsCard
import com.geekymusketeers.uncrack.components.UCSwitchCard
import com.geekymusketeers.uncrack.components.UCTopAppBar
import com.geekymusketeers.uncrack.data.db.AccountDatabase
import com.geekymusketeers.uncrack.domain.model.Account
import com.geekymusketeers.uncrack.navigation.Screen
import com.geekymusketeers.uncrack.presentation.auth.login.LoginScreens
import com.geekymusketeers.uncrack.sharedViewModel.ThemeViewModel
import com.geekymusketeers.uncrack.sharedViewModel.UserViewModel
import com.geekymusketeers.uncrack.ui.theme.OnPrimaryContainerLight
import com.geekymusketeers.uncrack.ui.theme.OnSurfaceVariantLight
import com.geekymusketeers.uncrack.ui.theme.SurfaceVariantLight
import com.geekymusketeers.uncrack.ui.theme.bold18
import com.geekymusketeers.uncrack.ui.theme.bold20
import com.geekymusketeers.uncrack.ui.theme.medium14
import com.geekymusketeers.uncrack.ui.theme.normal16

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SettingsScreen(
activity: Activity,
navController: NavHostController,
themeViewModel: ThemeViewModel,
userViewModel: UserViewModel,
settingsViewModel: SettingsViewModel,
modifier: Modifier = Modifier
) {

val context = LocalContext.current
val themeStateObserver by themeViewModel.themeState.collectAsState()
val isScreenshotEnabled by settingsViewModel.isScreenshotEnabled.observeAsState(false)
val onLogOutComplete by settingsViewModel.onLogOutComplete.observeAsState(false)
var openThemeDialog by remember { mutableStateOf(false) }
var openLogoutDialog by remember { mutableStateOf(false) }
val userData = userViewModel.state.value

if (onLogOutComplete) {
activity.startActivity(Intent(activity, LoginScreens::class.java))
activity.finish()
}

when {
openThemeDialog -> {
Expand Down Expand Up @@ -88,7 +101,7 @@ fun SettingsScreen(
confirmButton = {
TextButton(
onClick = {
// TODO: IMPL the logout logic
settingsViewModel.logout()
openLogoutDialog = false
},
colors = ButtonDefaults.buttonColors(
Expand Down Expand Up @@ -156,7 +169,7 @@ fun SettingsScreen(
UCSettingsCard(
itemName = "Change Master Password",
onClick = {

navController.navigate(Screen.UpdateMasterKeyScreen.name)
}
)

Expand All @@ -165,22 +178,22 @@ fun SettingsScreen(
color = SurfaceVariantLight
)

UCSettingsCard(
UCSwitchCard(
itemName = stringResource(R.string.unlock_with_biometric),
onClick = {

}
isChecked = false,
onChecked = {}
)

HorizontalDivider(
thickness = 2.dp,
color = SurfaceVariantLight
)

UCSettingsCard(
UCSwitchCard(
itemName = stringResource(R.string.take_in_app_screenshots),
onClick = {

isChecked = isScreenshotEnabled,
onChecked = {
settingsViewModel.setScreenshotEnabled(it)
}
)
}
Expand Down Expand Up @@ -219,10 +232,11 @@ fun SettingsScreen(
Spacer(modifier = Modifier.height(14.dp))

SettingsItemGroup {
UCSettingsCard(
UCSwitchCard(
itemName = stringResource(R.string.theme),
onClick = {

isChecked = themeStateObserver.isDarkMode,
onChecked = {
themeViewModel.toggleTheme()
}
)
}
Expand Down
Loading

0 comments on commit 94f5ae6

Please sign in to comment.