Skip to content

Commit 737f6db

Browse files
rohitsat13florina-muntenescu
authored andcommitted
Make changes to ProtoDataStore:
1) use context.createDataStore factory 2) Fix bug where unspecified value is not handled 3) Update SharedPreferencesMigration to use the updated Constructor
1 parent 90ded8d commit 737f6db

File tree

2 files changed

+19
-29
lines changed

2 files changed

+19
-29
lines changed

app/src/main/java/com/codelab/android/datastore/data/UserPreferencesRepository.kt

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,41 +19,19 @@ package com.codelab.android.datastore.data
1919
import android.content.Context
2020
import android.util.Log
2121
import androidx.datastore.DataStore
22-
import androidx.datastore.DataStoreFactory
23-
import androidx.datastore.migrations.MigrationFromSharedPreferences
22+
import androidx.datastore.createDataStore
2423
import androidx.datastore.migrations.SharedPreferencesMigration
2524
import androidx.datastore.migrations.SharedPreferencesView
2625
import com.codelab.android.datastore.UserPreferences
2726
import com.codelab.android.datastore.UserPreferences.SortOrder
2827
import kotlinx.coroutines.flow.Flow
2928
import kotlinx.coroutines.flow.catch
30-
import java.io.File
3129
import java.io.IOException
3230

3331
private const val USER_PREFERENCES_NAME = "user_preferences"
3432
private const val DATA_STORE_FILE_NAME = "user_prefs.pb"
3533
private const val SORT_ORDER_KEY = "sort_order"
3634

37-
// Define the mapping from SharedPreferences to UserPreferences
38-
private class UserPreferencesMigration : MigrationFromSharedPreferences<UserPreferences> {
39-
override suspend fun migrate(
40-
prefs: SharedPreferencesView,
41-
currentData: UserPreferences
42-
): UserPreferences {
43-
return if (currentData.sortOrder == SortOrder.UNSPECIFIED) {
44-
currentData.toBuilder()
45-
.setSortOrder(
46-
SortOrder.valueOf(
47-
prefs.getString(SORT_ORDER_KEY, SortOrder.NONE.name) ?: SortOrder.NONE.name
48-
)
49-
)
50-
.build()
51-
} else {
52-
currentData
53-
}
54-
}
55-
}
56-
5735
/**
5836
* Class that handles saving and retrieving user preferences
5937
*/
@@ -62,15 +40,26 @@ class UserPreferencesRepository private constructor(context: Context) {
6240
private val TAG: String = "UserPreferencesRepo"
6341

6442
// Build the DataStore
65-
private val userPreferencesStore: DataStore<UserPreferences> = DataStoreFactory().create(
66-
produceFile = { File(context.filesDir, DATA_STORE_FILE_NAME) },
43+
private val userPreferencesStore: DataStore<UserPreferences> = context.createDataStore(
44+
fileName = DATA_STORE_FILE_NAME,
6745
serializer = UserPreferencesSerializer,
68-
migrationProducers = listOf(
46+
migrations = listOf(
6947
SharedPreferencesMigration(
7048
context,
71-
USER_PREFERENCES_NAME,
72-
UserPreferencesMigration()
73-
)
49+
USER_PREFERENCES_NAME
50+
) { sharedPrefs: SharedPreferencesView, currentData: UserPreferences ->
51+
// Define the mapping from SharedPreferences to UserPreferences
52+
if (currentData.sortOrder == SortOrder.UNSPECIFIED) {
53+
currentData.toBuilder()
54+
.setSortOrder(
55+
SortOrder.valueOf(
56+
sharedPrefs.getString(SORT_ORDER_KEY, SortOrder.NONE.name)!!
57+
)
58+
).build()
59+
} else {
60+
currentData
61+
}
62+
}
7463
)
7564
)
7665

app/src/main/java/com/codelab/android/datastore/ui/TasksViewModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ class TasksViewModel(
7272
}
7373
// sort the tasks
7474
return when (sortOrder) {
75+
SortOrder.UNSPECIFIED -> filteredTasks // Treat unspecified order as NONE
7576
SortOrder.NONE -> filteredTasks
7677
SortOrder.BY_DEADLINE -> filteredTasks.sortedByDescending { it.deadline }
7778
SortOrder.BY_PRIORITY -> filteredTasks.sortedBy { it.priority }

0 commit comments

Comments
 (0)