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.
This commit is contained in:
Paweł Orzech 2026-01-31 02:13:53 +01:00
parent 5ab1be6cd4
commit 5d81c247aa
No known key found for this signature in database
5 changed files with 16 additions and 18 deletions

View file

@ -12,17 +12,19 @@ import javax.inject.Singleton
class TokenStorage @Inject constructor(
@ApplicationContext private val context: Context
) {
private val masterKey = MasterKey.Builder(context)
private val sharedPreferences: SharedPreferences by lazy {
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
private val sharedPreferences: SharedPreferences = EncryptedSharedPreferences.create(
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()

View file

@ -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"

View file

@ -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) {

View file

@ -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
)

View file

@ -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
)
}