Skip to content

Commit 0a8e038

Browse files
committed
Rename AppPreferencesDataSource
Stateless data sources can be factory instead of single
1 parent 04f655b commit 0a8e038

File tree

20 files changed

+89
-89
lines changed

20 files changed

+89
-89
lines changed

app/src/main/kotlin/com/darkrockstudios/app/securecamera/App.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import com.darkrockstudios.app.securecamera.auth.AuthorizationRepository
1212
import com.darkrockstudios.app.securecamera.navigation.AppNavHost
1313
import com.darkrockstudios.app.securecamera.navigation.NavController
1414
import com.darkrockstudios.app.securecamera.navigation.enforceAuth
15-
import com.darkrockstudios.app.securecamera.preferences.AppPreferencesDataSource
15+
import com.darkrockstudios.app.securecamera.preferences.AppSettingsDataSource
1616
import com.darkrockstudios.app.securecamera.ui.theme.SecureCameraTheme
1717
import org.koin.compose.KoinContext
1818
import org.koin.compose.koinInject
@@ -26,7 +26,7 @@ fun App(
2626
KoinContext {
2727
SecureCameraTheme {
2828
val snackbarHostState = remember { SnackbarHostState() }
29-
val preferencesManager = koinInject<AppPreferencesDataSource>()
29+
val preferencesManager = koinInject<AppSettingsDataSource>()
3030
val authorizationRepository = koinInject<AuthorizationRepository>()
3131

3232
val hasCompletedIntro by preferencesManager.hasCompletedIntro.collectAsState(initial = null)

app/src/main/kotlin/com/darkrockstudios/app/securecamera/AppModule.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import com.darkrockstudios.app.securecamera.gallery.GalleryViewModel
99
import com.darkrockstudios.app.securecamera.import.ImportPhotosViewModel
1010
import com.darkrockstudios.app.securecamera.introduction.IntroductionViewModel
1111
import com.darkrockstudios.app.securecamera.obfuscation.ObfuscatePhotoViewModel
12-
import com.darkrockstudios.app.securecamera.preferences.AppPreferencesDataSource
13-
import com.darkrockstudios.app.securecamera.preferences.AppPreferencesDataSourceImpl
12+
import com.darkrockstudios.app.securecamera.preferences.AppSettingsDataSource
13+
import com.darkrockstudios.app.securecamera.preferences.PreferencesAppSettingsDataSource
1414
import com.darkrockstudios.app.securecamera.security.DeviceInfoDataSource
1515
import com.darkrockstudios.app.securecamera.security.SecurityLevel
1616
import com.darkrockstudios.app.securecamera.security.SecurityLevelDetector
@@ -33,9 +33,11 @@ import kotlin.time.Clock
3333

3434
val appModule = module {
3535

36-
single { Clock.System } bind Clock::class
37-
singleOf(::SecureImageRepository)
38-
single<AppPreferencesDataSource> { AppPreferencesDataSourceImpl(context = get()) }
36+
factory { Clock.System } bind Clock::class
37+
factory<AppSettingsDataSource> { PreferencesAppSettingsDataSource(context = get()) }
38+
factoryOf(::DeviceInfoDataSource)
39+
40+
singleOf(::SecureImageRepository)
3941
single {
4042
AuthorizationRepository(
4143
preferences = get(),
@@ -71,8 +73,6 @@ val appModule = module {
7173

7274
single { WorkManager.getInstance(get()) }
7375

74-
factoryOf(::DeviceInfoDataSource)
75-
7676
factoryOf(::ThumbnailCache)
7777
factoryOf(::SecurityResetUseCase)
7878
factoryOf(::PinStrengthCheckUseCase)

app/src/main/kotlin/com/darkrockstudios/app/securecamera/MainActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import androidx.navigation3.runtime.rememberNavBackStack
1818
import com.darkrockstudios.app.securecamera.auth.AuthorizationRepository
1919
import com.darkrockstudios.app.securecamera.navigation.*
2020
import com.darkrockstudios.app.securecamera.navigation.Camera
21-
import com.darkrockstudios.app.securecamera.preferences.AppPreferencesDataSource
21+
import com.darkrockstudios.app.securecamera.preferences.AppSettingsDataSource
2222
import kotlinx.coroutines.delay
2323
import kotlinx.coroutines.flow.firstOrNull
2424
import kotlinx.coroutines.isActive
@@ -31,7 +31,7 @@ import kotlin.time.Duration.Companion.seconds
3131
class MainActivity : ComponentActivity() {
3232
private var capturePhoto = mutableStateOf<Boolean?>(null)
3333
private val locationRepository: LocationRepository by inject()
34-
private val preferences: AppPreferencesDataSource by inject()
34+
private val preferences: AppSettingsDataSource by inject()
3535
private val authorizationRepository: AuthorizationRepository by inject()
3636
lateinit var navController: NavController
3737

app/src/main/kotlin/com/darkrockstudios/app/securecamera/auth/AuthorizationRepository.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.darkrockstudios.app.securecamera.auth
22

33
import android.content.Context
4-
import com.darkrockstudios.app.securecamera.preferences.AppPreferencesDataSource
4+
import com.darkrockstudios.app.securecamera.preferences.AppSettingsDataSource
55
import com.darkrockstudios.app.securecamera.preferences.HashedPin
66
import com.darkrockstudios.app.securecamera.security.schemes.EncryptionScheme
77
import kotlinx.coroutines.flow.MutableStateFlow
@@ -17,10 +17,10 @@ import kotlin.time.Instant
1717
* Manages user authorization state, including PIN verification and session expiration.
1818
*/
1919
class AuthorizationRepository(
20-
private val preferences: AppPreferencesDataSource,
21-
private val encryptionScheme: EncryptionScheme,
22-
private val context: Context,
23-
private val clock: Clock,
20+
private val preferences: AppSettingsDataSource,
21+
private val encryptionScheme: EncryptionScheme,
22+
private val context: Context,
23+
private val clock: Clock,
2424
) {
2525
companion object {
2626
const val MAX_FAILED_ATTEMPTS = 10

app/src/main/kotlin/com/darkrockstudios/app/securecamera/gallery/GalleryViewModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import androidx.lifecycle.viewModelScope
55
import com.darkrockstudios.app.securecamera.BaseViewModel
66
import com.darkrockstudios.app.securecamera.camera.PhotoDef
77
import com.darkrockstudios.app.securecamera.camera.SecureImageRepository
8-
import com.darkrockstudios.app.securecamera.preferences.AppPreferencesDataSource
8+
import com.darkrockstudios.app.securecamera.preferences.AppSettingsDataSource
99
import com.darkrockstudios.app.securecamera.share.sharePhotosWithProvider
1010
import kotlinx.coroutines.Dispatchers
1111
import kotlinx.coroutines.flow.update
@@ -14,7 +14,7 @@ import kotlinx.coroutines.withContext
1414

1515
class GalleryViewModel(
1616
private val imageManager: SecureImageRepository,
17-
private val preferencesManager: AppPreferencesDataSource
17+
private val preferencesManager: AppSettingsDataSource
1818
) : BaseViewModel<GalleryUiState>() {
1919

2020
override fun createState() = GalleryUiState()

app/src/main/kotlin/com/darkrockstudios/app/securecamera/preferences/AppPreferencesDataSource.kt renamed to app/src/main/kotlin/com/darkrockstudios/app/securecamera/preferences/AppSettingsDataSource.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package com.darkrockstudios.app.securecamera.preferences
33
import com.darkrockstudios.app.securecamera.security.SchemeConfig
44
import kotlinx.coroutines.flow.Flow
55

6-
interface AppPreferencesDataSource {
6+
interface AppSettingsDataSource {
77
/**
88
* Check if the user has completed the introduction
99
*/

app/src/main/kotlin/com/darkrockstudios/app/securecamera/preferences/AppPreferencesDataSourceImpl.kt renamed to app/src/main/kotlin/com/darkrockstudios/app/securecamera/preferences/PreferencesAppSettingsDataSource.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ import kotlin.time.Duration.Companion.minutes
2121
private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "app_preferences")
2222

2323
/**
24-
* Manages app preferences using DataStore
24+
* Manages app settings using DataStore
2525
*/
26-
class AppPreferencesDataSourceImpl(
26+
class PreferencesAppSettingsDataSource(
2727
private val context: Context,
2828
private val dataStore: DataStore<Preferences> = context.dataStore,
29-
) : AppPreferencesDataSource {
29+
) : AppSettingsDataSource {
3030
companion object {
3131
private val HAS_COMPLETED_INTRO = booleanPreferencesKey("has_completed_intro")
3232
private val APP_PIN = stringPreferencesKey("app_pin")

app/src/main/kotlin/com/darkrockstudios/app/securecamera/security/pin/PinRepositoryHardware.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.darkrockstudios.app.securecamera.security.pin
22

3-
import com.darkrockstudios.app.securecamera.preferences.AppPreferencesDataSource
3+
import com.darkrockstudios.app.securecamera.preferences.AppSettingsDataSource
44
import com.darkrockstudios.app.securecamera.preferences.HashedPin
55
import com.darkrockstudios.app.securecamera.security.DeviceInfoDataSource
66
import com.darkrockstudios.app.securecamera.security.SchemeConfig
@@ -10,10 +10,10 @@ import com.darkrockstudios.app.securecamera.utils.base64Encode
1010
import kotlinx.serialization.json.Json
1111

1212
class PinRepositoryHardware(
13-
private val dataSource: AppPreferencesDataSource,
14-
private val encryptionScheme: EncryptionScheme,
15-
private val deviceInfo: DeviceInfoDataSource,
16-
private val pinCrypto: PinCrypto,
13+
private val dataSource: AppSettingsDataSource,
14+
private val encryptionScheme: EncryptionScheme,
15+
private val deviceInfo: DeviceInfoDataSource,
16+
private val pinCrypto: PinCrypto,
1717
) : PinRepository {
1818

1919
override suspend fun setAppPin(

app/src/main/kotlin/com/darkrockstudios/app/securecamera/security/pin/PinRepositorySoftware.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.darkrockstudios.app.securecamera.security.pin
22

3-
import com.darkrockstudios.app.securecamera.preferences.AppPreferencesDataSource
3+
import com.darkrockstudios.app.securecamera.preferences.AppSettingsDataSource
44
import com.darkrockstudios.app.securecamera.preferences.HashedPin
55
import com.darkrockstudios.app.securecamera.security.DeviceInfoDataSource
66
import com.darkrockstudios.app.securecamera.security.SchemeConfig
@@ -9,9 +9,9 @@ import kotlinx.serialization.json.Json
99
import kotlin.io.encoding.ExperimentalEncodingApi
1010

1111
class PinRepositorySoftware(
12-
private val dataSource: AppPreferencesDataSource,
13-
private val deviceInfo: DeviceInfoDataSource,
14-
private val pinCrypto: PinCrypto,
12+
private val dataSource: AppSettingsDataSource,
13+
private val deviceInfo: DeviceInfoDataSource,
14+
private val pinCrypto: PinCrypto,
1515
) : PinRepository {
1616

1717
override suspend fun setAppPin(pin: String, schemeConfig: SchemeConfig) {

app/src/main/kotlin/com/darkrockstudios/app/securecamera/security/schemes/HardwareBackedEncryptionScheme.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import android.security.keystore.KeyProperties.KEY_ALGORITHM_AES
88
import android.security.keystore.KeyProperties.PURPOSE_DECRYPT
99
import android.security.keystore.KeyProperties.PURPOSE_ENCRYPT
1010
import android.security.keystore.StrongBoxUnavailableException
11-
import com.darkrockstudios.app.securecamera.preferences.AppPreferencesDataSource
11+
import com.darkrockstudios.app.securecamera.preferences.AppSettingsDataSource
1212
import com.darkrockstudios.app.securecamera.preferences.HashedPin
1313
import com.darkrockstudios.app.securecamera.security.DeviceInfoDataSource
1414
import com.darkrockstudios.app.securecamera.security.HardwareSchemeConfig
@@ -30,9 +30,9 @@ import kotlin.time.Duration.Companion.minutes
3030

3131

3232
class HardwareBackedEncryptionScheme(
33-
private val appContext: Context,
34-
deviceInfo: DeviceInfoDataSource,
35-
private val appPreferencesDataSource: AppPreferencesDataSource,
33+
private val appContext: Context,
34+
deviceInfo: DeviceInfoDataSource,
35+
private val appSettingsDataSource: AppSettingsDataSource,
3636
) : SoftwareEncryptionScheme(deviceInfo) {
3737
private val provider = CryptographyProvider.Default
3838
private val ks: KeyStore = KeyStore.getInstance("AndroidKeyStore").apply { load(null) }
@@ -42,7 +42,7 @@ class HardwareBackedEncryptionScheme(
4242
plainPin: String,
4343
hashedPin: HashedPin,
4444
): ByteArray {
45-
val config = appPreferencesDataSource.getSchemeConfig() as HardwareSchemeConfig
45+
val config = appSettingsDataSource.getSchemeConfig() as HardwareSchemeConfig
4646
return if (config.ephemeralKey) {
4747
deriveEphemeralKey(plainPin, hashedPin)
4848
} else {
@@ -98,7 +98,7 @@ class HardwareBackedEncryptionScheme(
9898
* then stores it to disk.
9999
*/
100100
override suspend fun createKey(plainPin: String, hashedPin: HashedPin) {
101-
val config = appPreferencesDataSource.getSchemeConfig() as HardwareSchemeConfig
101+
val config = appSettingsDataSource.getSchemeConfig() as HardwareSchemeConfig
102102

103103
keyMutex.withLock {
104104
// Create hardware backed KEK if it doesn't exist

0 commit comments

Comments
 (0)