diff --git a/core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto b/core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto index 11386613c..6c31905b0 100644 --- a/core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto +++ b/core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto @@ -49,5 +49,8 @@ message UserPreferences { bool use_dynamic_color = 19; - // NEXT AVAILABLE ID: 21 + // Key: news resource ID, Value: note text + map bookmark_notes = 21; + + // NEXT AVAILABLE ID: 22 } diff --git a/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource.kt b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource.kt index 9a76a75a1..c11c2aa16 100644 --- a/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource.kt +++ b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource.kt @@ -128,6 +128,7 @@ class NiaPreferencesDataSource @Inject constructor( bookmarkedNewsResourceIds.put(newsResourceId, true) } else { bookmarkedNewsResourceIds.remove(newsResourceId) + bookmarkNotes.remove(newsResourceId) } } } @@ -136,6 +137,26 @@ class NiaPreferencesDataSource @Inject constructor( } } + suspend fun setBookmarkNote(newsResourceId: String, note: String) { + try { + userPreferences.updateData { + it.copy { bookmarkNotes.put(newsResourceId, note) } + } + } catch (ioException: IOException) { + Log.e("NiaPreferences", "Failed to update bookmark note", ioException) + } + } + + suspend fun removeBookmarkNote(newsResourceId: String) { + try { + userPreferences.updateData { + it.copy { bookmarkNotes.remove(newsResourceId) } + } + } catch (ioException: IOException) { + Log.e("NiaPreferences", "Failed to remove bookmark note", ioException) + } + } + suspend fun setNewsResourceViewed(newsResourceId: String, viewed: Boolean) { setNewsResourcesViewed(listOf(newsResourceId), viewed) } diff --git a/core/datastore/src/test/kotlin/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt b/core/datastore/src/test/kotlin/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt index 433bbb5ea..80d62ece1 100644 --- a/core/datastore/src/test/kotlin/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt +++ b/core/datastore/src/test/kotlin/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt @@ -86,4 +86,7 @@ class NiaPreferencesDataSourceTest { subject.setDynamicColorPreference(true) assertTrue(subject.userData.first().useDynamicColor) } + + // TODO(Task 2): Add tests for setBookmarkNote, removeBookmarkNote, and + // bookmarkNotes auto-delete on unbookmark once UserData exposes bookmarkNotes. }