From 690052b48fad3b4e4ccfae3171fbf5f135ca3c1b Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sun, 12 Mar 2023 21:10:06 +0530 Subject: [PATCH] feat(android): set up DataStore --- android/build.gradle.kts | 1 + .../claw/android/injection/DataStoreModule.kt | 36 +++++++++++++++++++ .../claw/android/settings/LoginSettings.kt | 15 ++++++++ gradle/libs.versions.toml | 1 + settings.gradle.kts | 1 + 5 files changed, 54 insertions(+) create mode 100644 android/src/main/kotlin/dev/msfjarvis/claw/android/injection/DataStoreModule.kt create mode 100644 android/src/main/kotlin/dev/msfjarvis/claw/android/settings/LoginSettings.kt diff --git a/android/build.gradle.kts b/android/build.gradle.kts index e3baf329..0f9005a4 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -59,6 +59,7 @@ dependencies { implementation(libs.androidx.compose.material) implementation(libs.androidx.compose.material3) implementation(libs.androidx.core.splashscreen) + implementation(libs.androidx.datastore.preferences) implementation(libs.androidx.lifecycle.compose) implementation(libs.androidx.navigation.compose) implementation(libs.androidx.paging.compose) diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/injection/DataStoreModule.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/injection/DataStoreModule.kt new file mode 100644 index 00000000..afd2d59c --- /dev/null +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/injection/DataStoreModule.kt @@ -0,0 +1,36 @@ +package dev.msfjarvis.claw.android.injection + +import android.content.Context +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.PreferenceDataStoreFactory +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.preferencesDataStoreFile +import com.deliveryhero.whetstone.ForScope +import com.deliveryhero.whetstone.app.ApplicationScope +import com.squareup.anvil.annotations.ContributesTo +import dagger.Module +import dagger.Provides +import dev.msfjarvis.claw.util.coroutines.DispatcherProvider +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.SupervisorJob +import javax.inject.Singleton + +@Module +@ContributesTo(ApplicationScope::class) +interface DataStoreModule { + + @Singleton + @Provides + fun provideLoginDatastore( + @ForScope(ApplicationScope::class) context: Context, + dispatcherProvider: DispatcherProvider, + ): DataStore { + return PreferenceDataStoreFactory.create( + corruptionHandler = null, + migrations = emptyList(), + scope = CoroutineScope(dispatcherProvider.io() + SupervisorJob()), + ) { + context.preferencesDataStoreFile("login") + } + } +} diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/settings/LoginSettings.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/settings/LoginSettings.kt new file mode 100644 index 00000000..716f0168 --- /dev/null +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/settings/LoginSettings.kt @@ -0,0 +1,15 @@ +package dev.msfjarvis.claw.android.settings + +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.stringPreferencesKey +import javax.inject.Inject + +class LoginSettings @Inject constructor( + val dataStore: DataStore, +) { + companion object { + val CSRF_TOKEN = stringPreferencesKey("csrf_token") + val LOGIN_COOKIE = stringPreferencesKey("login_cookie") + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ff5215d3..d0c83661 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -35,6 +35,7 @@ androidx-compose-ui-text = { module = "androidx.compose.ui:ui-text" } androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" } androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" } androidx-core-splashscreen = "androidx.core:core-splashscreen:1.0.0" +androidx-datastore-preferences = "androidx.datastore:datastore-preferences:1.0.0" androidx-lifecycle-compose = "androidx.lifecycle:lifecycle-viewmodel-compose:2.6.0" androidx-navigation-compose = "androidx.navigation:navigation-compose:2.6.0-alpha07" androidx-paging-compose = "androidx.paging:paging-compose:1.0.0-alpha18" diff --git a/settings.gradle.kts b/settings.gradle.kts index 2e80543c..fed049bf 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -70,6 +70,7 @@ dependencyResolutionManagement { includeGroup("androidx.cursoradapter") includeGroup("androidx.customview") includeGroup("androidx.databinding") + includeGroup("androidx.datastore") includeGroup("androidx.drawerlayout") includeGroup("androidx.emoji2") includeGroup("androidx.exifinterface")