From 8d7db34871e50fa915853ac31364e51519a8b397 Mon Sep 17 00:00:00 2001 From: mshdabiola Date: Tue, 10 Jun 2025 07:44:37 +0100 Subject: [PATCH 01/18] feat: Add MainData to UserData and define MainData sealed class Added a new property `mainData` of type `MainData` to the `UserData` data class. Created a new sealed class `MainData` with the following subtypes: - `Note` - `Achieve` - `Trash` - `Label` (data class with an `id` property) - `Remainder` Each subtype of `MainData` has an `index` property. --- .../src/main/java/com/mshdabiola/model/MainData.kt | 11 +++++++++++ .../src/main/java/com/mshdabiola/model/UserData.kt | 1 + 2 files changed, 12 insertions(+) create mode 100644 modules/model/src/main/java/com/mshdabiola/model/MainData.kt diff --git a/modules/model/src/main/java/com/mshdabiola/model/MainData.kt b/modules/model/src/main/java/com/mshdabiola/model/MainData.kt new file mode 100644 index 00000000..e8b9bf6d --- /dev/null +++ b/modules/model/src/main/java/com/mshdabiola/model/MainData.kt @@ -0,0 +1,11 @@ +package com.mshdabiola.model + + +sealed class MainData(val index: Long) { + object Note : MainData(-1L) + object Achieve : MainData(-2L) + object Trash : MainData(-3L) + data class Label (val id: Long): MainData(0L) // Assigning a default index like in the original enum + object Remainder : MainData(-4L) + +} \ No newline at end of file diff --git a/modules/model/src/main/java/com/mshdabiola/model/UserData.kt b/modules/model/src/main/java/com/mshdabiola/model/UserData.kt index d85c4333..fe71348f 100644 --- a/modules/model/src/main/java/com/mshdabiola/model/UserData.kt +++ b/modules/model/src/main/java/com/mshdabiola/model/UserData.kt @@ -13,4 +13,5 @@ data class UserData( val useDynamicColor: Boolean, val shouldHideOnboarding: Boolean, val contrast: Contrast, + val mainData: MainData ) From 9610bcad8249c21f9e98beecd789aefad9783a7b Mon Sep 17 00:00:00 2001 From: mshdabiola Date: Tue, 10 Jun 2025 07:45:09 +0100 Subject: [PATCH 02/18] Feat: Add main screen type to UserPreferences This commit introduces a new field `main_screen_type` to the `UserPreferences` proto and updates `UserPreferencesRepository` to support managing the main screen's data type. - Added `main_screen_type` (int64) to `user_preferences.proto`. - Updated `UserPreferencesRepository` to map the stored `main_screen_type` integer to the corresponding `MainData` sealed class (Note, Achieve, Trash, Remainder, Label). - Added `setMainData` function to `UserPreferencesRepository` to update the `main_screen_type` in DataStore. --- .../datastore/UserPreferencesRepository.kt | 14 ++++++++++++++ .../mshdabiola/datastore/user_preferences.proto | 3 ++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/modules/datastore/src/main/kotlin/com/mshdabiola/datastore/UserPreferencesRepository.kt b/modules/datastore/src/main/kotlin/com/mshdabiola/datastore/UserPreferencesRepository.kt index fb0eb3d4..81dd8f12 100644 --- a/modules/datastore/src/main/kotlin/com/mshdabiola/datastore/UserPreferencesRepository.kt +++ b/modules/datastore/src/main/kotlin/com/mshdabiola/datastore/UserPreferencesRepository.kt @@ -6,6 +6,8 @@ package com.mshdabiola.datastore import androidx.datastore.core.DataStore import com.mshdabiola.model.Contrast +import com.mshdabiola.model.MainData +import com.mshdabiola.model.NoteType import com.mshdabiola.model.UserData import kotlinx.coroutines.flow.map import javax.inject.Inject @@ -53,6 +55,13 @@ class UserPreferencesRepository @Inject constructor( ThemeContrastProto.THEME_CONTRAST_MEDIUM -> Contrast.Medium }, + mainData = when (it.mainScreenType) { + MainData.Note.index -> MainData.Note + MainData.Achieve.index -> MainData.Achieve + MainData.Trash.index -> MainData.Trash + MainData.Remainder.index -> MainData.Remainder + else -> MainData.Label(it.mainScreenType) + } ) } @@ -104,4 +113,9 @@ class UserPreferencesRepository @Inject constructor( it.copy { this.shouldHideOnboarding = shouldHideOnboarding } } } + suspend fun setMainData(mainData: MainData) { + userPreferences.updateData { + it.copy { this.mainScreenType = mainData.index } + } + } } diff --git a/modules/datastore/src/main/proto/com/mshdabiola/datastore/user_preferences.proto b/modules/datastore/src/main/proto/com/mshdabiola/datastore/user_preferences.proto index 889c9e74..25016c02 100644 --- a/modules/datastore/src/main/proto/com/mshdabiola/datastore/user_preferences.proto +++ b/modules/datastore/src/main/proto/com/mshdabiola/datastore/user_preferences.proto @@ -19,6 +19,7 @@ message UserPreferences { ThemeContrastProto contrast = 5; + int64 main_screen_type = 6; - // NEXT AVAILABLE ID: 6 + // NEXT AVAILABLE ID: 7 // Update this comment for the next person } From bd172590ab01870be8df54422adf1919c8aa9963 Mon Sep 17 00:00:00 2001 From: mshdabiola Date: Tue, 10 Jun 2025 07:45:17 +0100 Subject: [PATCH 03/18] Refactor: Add `mainData` to `MainActivityUiState` Added a new field `mainData` to the `MainActivityUiState` data class in `SharedActivityViewModel.kt`. This field is of type `MainData` and defaults to `MainData.Note`. The `mainData` field will be used to determine which main screen content to display (e.g., Notes, Labels). --- .../java/com/mshdabiola/playnotepad/SharedActivityViewModel.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/com/mshdabiola/playnotepad/SharedActivityViewModel.kt b/app/src/main/java/com/mshdabiola/playnotepad/SharedActivityViewModel.kt index 73f0b7f7..f0649a46 100644 --- a/app/src/main/java/com/mshdabiola/playnotepad/SharedActivityViewModel.kt +++ b/app/src/main/java/com/mshdabiola/playnotepad/SharedActivityViewModel.kt @@ -13,6 +13,7 @@ import com.mshdabiola.data.repository.INotePadRepository import com.mshdabiola.model.Contrast import com.mshdabiola.model.DarkThemeConfig import com.mshdabiola.model.Label +import com.mshdabiola.model.MainData import com.mshdabiola.model.NoteImage import com.mshdabiola.model.NotePad import com.mshdabiola.model.ThemeBrand @@ -156,6 +157,7 @@ sealed interface SharedActivityUiState { useDynamicColor = false, shouldHideOnboarding = false, contrast = Contrast.High, + mainData = MainData.Note ), val notepad: NotePad = NotePad(), val labels: List