Skip to content

Commit c34f1c9

Browse files
committed
Introduce persistent settings using SharedPreferences
This commit introduces `PrefsManager` to store and retrieve user preferences for real-time diffing and view type. Key changes: - Added `BaseApp.kt` to initialize `AppModule` and provide access to `PrefsManager`. - Created `PrefsManager.kt` to handle SharedPreferences operations for `realTimeDiff` (Boolean) and `selectedViewType` (String). - Defined preference keys in `Constant.kt`. - Updated `AppModule.kt` to initialize and provide `PrefsManager`. - Modified `DiffCheckerViewModel.kt`: - Reads initial values for `realTimeDiff` and `selectedViewType` from `PrefsManager`. - Saves changes to these settings back to `PrefsManager`. - Registered `BaseApp` in `AndroidManifest.xml`.
1 parent 19364fb commit c34f1c9

File tree

6 files changed

+70
-3
lines changed

6 files changed

+70
-3
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
xmlns:tools="http://schemas.android.com/tools">
44

55
<application
6+
android:name=".BaseApp"
67
android:allowBackup="true"
78
android:dataExtractionRules="@xml/data_extraction_rules"
89
android:fullBackupContent="@xml/backup_rules"
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dev.jahidhasanco.diffly
2+
3+
import android.app.Application
4+
import dev.jahidhasanco.diffly.data.local.PrefsManager
5+
import dev.jahidhasanco.diffly.di.AppModule
6+
7+
class BaseApp : Application() {
8+
lateinit var settingsManager: PrefsManager
9+
private set
10+
11+
override fun onCreate() {
12+
super.onCreate()
13+
AppModule.init(this)
14+
}
15+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package dev.jahidhasanco.diffly.data.local
2+
import android.content.Context
3+
import android.content.SharedPreferences
4+
import androidx.core.content.edit
5+
import dev.jahidhasanco.diffly.util.Constant.KEY_REALTIME_DIFF
6+
import dev.jahidhasanco.diffly.util.Constant.KEY_VIEW_TYPE
7+
import dev.jahidhasanco.diffly.util.Constant.PREFS_NAME
8+
9+
class PrefsManager(context: Context) {
10+
private val prefs: SharedPreferences =
11+
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
12+
13+
var realTimeDiff: Boolean
14+
get() = prefs.getBoolean(KEY_REALTIME_DIFF, false)
15+
set(value) = prefs.edit { putBoolean(KEY_REALTIME_DIFF, value) }
16+
17+
var selectedViewType: String?
18+
get() = prefs.getString(KEY_VIEW_TYPE, null)
19+
set(value) = prefs.edit { putString(KEY_VIEW_TYPE, value) }
20+
21+
fun clearAll() {
22+
prefs.edit { clear() }
23+
}
24+
}
Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,24 @@
11
package dev.jahidhasanco.diffly.di
22

3+
import android.content.Context
4+
import dev.jahidhasanco.diffly.data.local.PrefsManager
35
import dev.jahidhasanco.diffly.data.repository.DiffRepositoryImpl
46
import dev.jahidhasanco.diffly.domain.repository.DiffRepository
57
import dev.jahidhasanco.diffly.domain.usecase.CalculateDiffUseCase
6-
import dev.jahidhasanco.diffly.domain.util.CharLevelDiff
78
import dev.jahidhasanco.diffly.domain.util.MyersDiff
89

910
object AppModule {
11+
12+
private lateinit var _prefsManager: PrefsManager
13+
val prefsManager: PrefsManager
14+
get() = _prefsManager
15+
16+
fun init(context: Context) {
17+
_prefsManager = PrefsManager(context)
18+
}
19+
1020
private val myersDiff = MyersDiff()
1121
private val repository: DiffRepository = DiffRepositoryImpl(myersDiff)
1222
val calculateDiffUseCase = CalculateDiffUseCase(repository)
23+
1324
}

app/src/main/java/dev/jahidhasanco/diffly/presentation/viewmodel/DiffCheckerViewModel.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package dev.jahidhasanco.diffly.presentation.viewmodel
33
import android.util.Log
44
import androidx.lifecycle.ViewModel
55
import androidx.lifecycle.viewModelScope
6+
import dev.jahidhasanco.diffly.di.AppModule
67
import dev.jahidhasanco.diffly.domain.model.DiffEntry
78
import dev.jahidhasanco.diffly.domain.model.DiffViewType
89
import dev.jahidhasanco.diffly.domain.usecase.CalculateDiffUseCase
@@ -16,6 +17,8 @@ class DiffCheckerViewModel(
1617
private val router: NavigationRouter
1718
) : ViewModel() {
1819

20+
private val prefs = AppModule.prefsManager
21+
1922
private val _diffResult = MutableStateFlow<List<DiffEntry>>(emptyList())
2023
val diffResult: StateFlow<List<DiffEntry>> = _diffResult
2124

@@ -25,13 +28,17 @@ class DiffCheckerViewModel(
2528
private val _newText = MutableStateFlow("")
2629
val newText: StateFlow<String> = _newText
2730

28-
private val _realTimeDiff = MutableStateFlow(false)
31+
private val _realTimeDiff = MutableStateFlow(prefs.realTimeDiff)
2932
val realTimeDiff: StateFlow<Boolean> = _realTimeDiff
3033

3134
private val _expanded = MutableStateFlow(false)
3235
val expanded: StateFlow<Boolean> = _expanded
3336

34-
private val _selectedViewType = MutableStateFlow(DiffViewType.TWO_SIDE)
37+
private val _selectedViewType = MutableStateFlow(
38+
DiffViewType.valueOf(
39+
prefs.selectedViewType ?: DiffViewType.TWO_SIDE.name
40+
)
41+
)
3542
val selectedViewType: StateFlow<DiffViewType> = _selectedViewType
3643

3744
fun updateOldText(value: String) {
@@ -46,6 +53,7 @@ class DiffCheckerViewModel(
4653

4754
fun setRealTimeDiff(value: Boolean) {
4855
_realTimeDiff.value = value
56+
prefs.realTimeDiff = value
4957
if (value) calculateDiff(_oldText.value, _newText.value)
5058
}
5159

@@ -55,6 +63,7 @@ class DiffCheckerViewModel(
5563

5664
fun selectViewType(type: DiffViewType) {
5765
_selectedViewType.value = type
66+
prefs.selectedViewType = type.name
5867
_expanded.value = false
5968
}
6069

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package dev.jahidhasanco.diffly.util
2+
3+
object Constant {
4+
const val PREFS_NAME = "diffly_prefs"
5+
const val KEY_REALTIME_DIFF = "key_realtime_diff"
6+
const val KEY_VIEW_TYPE = "key_view_type"
7+
}

0 commit comments

Comments
 (0)