Open diegum opened 1 year ago
Agree, this tutorial needs to be completely cleaned and updated.
There are complete mismatches between the instructions & the code snippets in the instructions & the proto_datastore
branch.
In TasksActivity, I just added (like they did in their proto_datastore
branch) :
private val Context.userPreferencesStore: DataStore<UserPreferences> by dataStore(
fileName = DATA_STORE_FILE_NAME,
serializer = UserPreferencesSerializer,
produceMigrations = {context ->
listOf(SharedPreferencesMigration(
context,
USER_PREFERENCES_NAME
) { sharedPrefs: SharedPreferencesView, currentData: UserPreferences ->
// Define the mapping from SharedPreferences to UserPreferences
if (currentData.sortOrder == SortOrder.UNSPECIFIED) {
currentData.toBuilder().setSortOrder(
SortOrder.valueOf(
sharedPrefs.getString(SORT_ORDER_KEY, SortOrder.NONE.name)!!
)
).build()
} else {
currentData
}
})
}
)
8. SharedPreferences to Proto DataStore is already very chaotic in terms of modifications that ain't clear whether they apply to
UserPreferencesRepository.kt
or toTasksActivity.kt
or maybe to both.That's because, in previous steps, the lab mandates to temporarily create a
Context
extension propertyuserPreferencesStore
that it's also temporarily injected fromTasksActivity
intoUserPreferencesRepository
.But once at step 8. SharedPreferences to Proto DataStore, lots of these temporary things become finalized although the lab only tells what to edit but not where.
At some point, it requests to redefine
userPreferencesStore
but this time not as aContext
extension property but as a presumablyUserPreferencesRepository
property. It doesn't clarify whose this redefinition belongs. I presume that it'sUserPreferencesRepository
.It doesn't end there, though: the new definition invokes a non-existing
context.createDataStore(...)
function as follows:I could only finish the lab by figuring out the missing extension function as follows:
If my guessing is correct, the lab should include my guessed definition for God's sake.
The provided finished branch
proto_datastore
just stuck to the temporary definition (contradicting the lab instructions that called for a redefinition.)