diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d58b160..c37f8cb 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -61,6 +61,7 @@ dependencies { implementation(libs.androidx.ui.graphics) implementation(libs.androidx.ui.tooling.preview) implementation(libs.androidx.core.splashscreen) + implementation(libs.androidx.datastore.preferences) implementation(libs.androidx.material3) lintChecks(libs.slack.compose.lint) testImplementation(libs.junit) diff --git a/app/src/main/java/us/kikin/android/gamingbacklog/data/manager/LocalUserManager.kt b/app/src/main/java/us/kikin/android/gamingbacklog/data/manager/LocalUserManager.kt new file mode 100644 index 0000000..aff4bf1 --- /dev/null +++ b/app/src/main/java/us/kikin/android/gamingbacklog/data/manager/LocalUserManager.kt @@ -0,0 +1,37 @@ +package us.kikin.android.gamingbacklog.data.manager + +import android.content.Context +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.booleanPreferencesKey +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.preferencesDataStore +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import us.kikin.android.gamingbacklog.domain.manager.LocalUserManager +import us.kikin.android.gamingbacklog.utils.Constants +import us.kikin.android.gamingbacklog.utils.Constants.USER_SETTINGS + + +class LocalUserManagerImpl( + private val context: Context +) : LocalUserManager { + + override suspend fun saveAppEntry() { + context.dataStore.edit { settings -> + settings[PreferencesKeys.APP_ENTRY] = true + } + } + + override fun readAppEntry(): Flow { + return context.dataStore.data.map { settings -> + settings[PreferencesKeys.APP_ENTRY] ?: false + } + } +} + +private val Context.dataStore: DataStore by preferencesDataStore(name = USER_SETTINGS) + +private object PreferencesKeys { + val APP_ENTRY = booleanPreferencesKey(name = Constants.APP_ENTRY) +} diff --git a/app/src/main/java/us/kikin/android/gamingbacklog/domain/manager/LocalUserManager.kt b/app/src/main/java/us/kikin/android/gamingbacklog/domain/manager/LocalUserManager.kt new file mode 100644 index 0000000..7927b8f --- /dev/null +++ b/app/src/main/java/us/kikin/android/gamingbacklog/domain/manager/LocalUserManager.kt @@ -0,0 +1,10 @@ +package us.kikin.android.gamingbacklog.domain.manager + +import kotlinx.coroutines.flow.Flow + +interface LocalUserManager { + + suspend fun saveAppEntry() + + fun readAppEntry(): Flow +} diff --git a/app/src/main/java/us/kikin/android/gamingbacklog/domain/usecase/ReadAppEntry.kt b/app/src/main/java/us/kikin/android/gamingbacklog/domain/usecase/ReadAppEntry.kt new file mode 100644 index 0000000..5c48f2d --- /dev/null +++ b/app/src/main/java/us/kikin/android/gamingbacklog/domain/usecase/ReadAppEntry.kt @@ -0,0 +1,12 @@ +package us.kikin.android.gamingbacklog.domain.usecase + +import kotlinx.coroutines.flow.Flow +import us.kikin.android.gamingbacklog.domain.manager.LocalUserManager + +class ReadAppEntry( + private val localUserManager: LocalUserManager +) { + + suspend operator fun invoke(): Flow = + localUserManager.readAppEntry() +} diff --git a/app/src/main/java/us/kikin/android/gamingbacklog/domain/usecase/SaveAppEntry.kt b/app/src/main/java/us/kikin/android/gamingbacklog/domain/usecase/SaveAppEntry.kt new file mode 100644 index 0000000..7f37e59 --- /dev/null +++ b/app/src/main/java/us/kikin/android/gamingbacklog/domain/usecase/SaveAppEntry.kt @@ -0,0 +1,12 @@ +package us.kikin.android.gamingbacklog.domain.usecase + +import us.kikin.android.gamingbacklog.domain.manager.LocalUserManager + +class SaveAppEntry( + private val localUserManager: LocalUserManager +) { + + suspend operator fun invoke() { + localUserManager.saveAppEntry() + } +} diff --git a/app/src/main/java/us/kikin/android/gamingbacklog/presentation/common/PageIndicator.kt b/app/src/main/java/us/kikin/android/gamingbacklog/presentation/common/PageIndicator.kt index ed17e18..247c876 100644 --- a/app/src/main/java/us/kikin/android/gamingbacklog/presentation/common/PageIndicator.kt +++ b/app/src/main/java/us/kikin/android/gamingbacklog/presentation/common/PageIndicator.kt @@ -11,7 +11,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import us.kikin.android.gamingbacklog.ui.theme.AppTheme @Composable fun PageIndicator( @@ -19,7 +21,7 @@ fun PageIndicator( selectedPage: Int, modifier: Modifier = Modifier, selectedColor: Color = MaterialTheme.colorScheme.primary, - unselectedColor: Color = Color.Blue + unselectedColor: Color = MaterialTheme.colorScheme.secondary ) { Row( modifier = modifier, @@ -37,3 +39,11 @@ fun PageIndicator( } } } + +@Composable +@Preview(showBackground = true) +internal fun PageIndicatorPreview() { + AppTheme { + PageIndicator(pageSize = 4, selectedPage = 2) + } +} diff --git a/app/src/main/java/us/kikin/android/gamingbacklog/utils/Constants.kt b/app/src/main/java/us/kikin/android/gamingbacklog/utils/Constants.kt new file mode 100644 index 0000000..dff754f --- /dev/null +++ b/app/src/main/java/us/kikin/android/gamingbacklog/utils/Constants.kt @@ -0,0 +1,6 @@ +package us.kikin.android.gamingbacklog.utils + +object Constants { + const val USER_SETTINGS: String = "user_settings" + const val APP_ENTRY: String = "app_entry" +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c8c2f4c..fc963fb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -27,6 +27,7 @@ androidx-material3 = { group = "androidx.compose.material3", name = "material3" slack-compose-lint = { group = "com.slack.lint.compose", name = "compose-lint-checks", version = "1.3.1" } androidx-ui-text-google-fonts = { group = "androidx.compose.ui", name = "ui-text-google-fonts", version = "1.6.7" } androidx-core-splashscreen = { group = "androidx.core", name = "core-splashscreen", version = "1.0.1" } +androidx-datastore-preferences = { group = "androidx.datastore", name = "datastore-preferences", version = "1.1.1" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" }