From 5d81c247aa5f6b17397a8401029e869e264a7a74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Orzech?= Date: Sat, 31 Jan 2026 02:13:53 +0100 Subject: [PATCH] Refactor and cleanup UI and storage components Refactored TokenStorage to lazily initialize EncryptedSharedPreferences, improving initialization safety. Removed unused variables and imports from MaskedEmailCard and CreateMaskedEmailScreen. Simplified error display logic in MaskedEmailDetailScreen. Updated MaskedEmailListScreen to use AutoMirrored Logout icon for better RTL support. --- .../com/fastmask/data/local/TokenStorage.kt | 22 ++++++++++--------- .../fastmask/ui/components/MaskedEmailCard.kt | 1 - .../ui/create/CreateMaskedEmailScreen.kt | 3 --- .../ui/detail/MaskedEmailDetailScreen.kt | 4 ++-- .../fastmask/ui/list/MaskedEmailListScreen.kt | 4 ++-- 5 files changed, 16 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/fastmask/data/local/TokenStorage.kt b/app/src/main/java/com/fastmask/data/local/TokenStorage.kt index f5ed142..06589e9 100644 --- a/app/src/main/java/com/fastmask/data/local/TokenStorage.kt +++ b/app/src/main/java/com/fastmask/data/local/TokenStorage.kt @@ -12,17 +12,19 @@ import javax.inject.Singleton class TokenStorage @Inject constructor( @ApplicationContext private val context: Context ) { - private val masterKey = MasterKey.Builder(context) - .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) - .build() + private val sharedPreferences: SharedPreferences by lazy { + val masterKey = MasterKey.Builder(context) + .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) + .build() - private val sharedPreferences: SharedPreferences = EncryptedSharedPreferences.create( - context, - PREFS_FILE_NAME, - masterKey, - EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, - EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM - ) + EncryptedSharedPreferences.create( + context, + PREFS_FILE_NAME, + masterKey, + EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, + EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM + ) + } fun saveToken(token: String) { sharedPreferences.edit().putString(KEY_API_TOKEN, token).apply() diff --git a/app/src/main/java/com/fastmask/ui/components/MaskedEmailCard.kt b/app/src/main/java/com/fastmask/ui/components/MaskedEmailCard.kt index 238fb13..c681446 100644 --- a/app/src/main/java/com/fastmask/ui/components/MaskedEmailCard.kt +++ b/app/src/main/java/com/fastmask/ui/components/MaskedEmailCard.kt @@ -49,7 +49,6 @@ fun MaskedEmailCard( modifier: Modifier = Modifier ) { val haptic = LocalHapticFeedback.current - val statusColors = FastMaskStatusColors.current val stateDescription = when (maskedEmail.state) { EmailState.ENABLED -> "Enabled" diff --git a/app/src/main/java/com/fastmask/ui/create/CreateMaskedEmailScreen.kt b/app/src/main/java/com/fastmask/ui/create/CreateMaskedEmailScreen.kt index 0bb3fc9..3674494 100644 --- a/app/src/main/java/com/fastmask/ui/create/CreateMaskedEmailScreen.kt +++ b/app/src/main/java/com/fastmask/ui/create/CreateMaskedEmailScreen.kt @@ -36,7 +36,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.hapticfeedback.HapticFeedbackType @@ -48,7 +47,6 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import com.fastmask.domain.model.EmailState import kotlinx.coroutines.flow.collectLatest -import kotlinx.coroutines.launch @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -59,7 +57,6 @@ fun CreateMaskedEmailScreen( val uiState by viewModel.uiState.collectAsState() val context = LocalContext.current val snackbarHostState = remember { SnackbarHostState() } - val scope = rememberCoroutineScope() val haptic = LocalHapticFeedback.current LaunchedEffect(Unit) { diff --git a/app/src/main/java/com/fastmask/ui/detail/MaskedEmailDetailScreen.kt b/app/src/main/java/com/fastmask/ui/detail/MaskedEmailDetailScreen.kt index 405c8df..5d4acf1 100644 --- a/app/src/main/java/com/fastmask/ui/detail/MaskedEmailDetailScreen.kt +++ b/app/src/main/java/com/fastmask/ui/detail/MaskedEmailDetailScreen.kt @@ -475,10 +475,10 @@ private fun EmailDetailContent( enabled = !uiState.isUpdating ) - if (uiState.error != null) { + uiState.error?.let { error -> Spacer(modifier = Modifier.height(16.dp)) Text( - text = uiState.error!!, + text = error, color = MaterialTheme.colorScheme.error, style = MaterialTheme.typography.bodyMedium ) diff --git a/app/src/main/java/com/fastmask/ui/list/MaskedEmailListScreen.kt b/app/src/main/java/com/fastmask/ui/list/MaskedEmailListScreen.kt index 4a168d1..b7043d5 100644 --- a/app/src/main/java/com/fastmask/ui/list/MaskedEmailListScreen.kt +++ b/app/src/main/java/com/fastmask/ui/list/MaskedEmailListScreen.kt @@ -21,7 +21,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.FilterList -import androidx.compose.material.icons.filled.Logout +import androidx.compose.material.icons.automirrored.filled.Logout import androidx.compose.material.icons.filled.Search import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem @@ -140,7 +140,7 @@ fun MaskedEmailListScreen( } ) { Icon( - imageVector = Icons.Default.Logout, + imageVector = Icons.AutoMirrored.Filled.Logout, contentDescription = null ) }