diff --git a/android/Omnivore/app/build.gradle b/android/Omnivore/app/build.gradle index 4bb871bc5..6ff7a6a27 100644 --- a/android/Omnivore/app/build.gradle +++ b/android/Omnivore/app/build.gradle @@ -6,11 +6,11 @@ plugins { } android { - compileSdk 32 + compileSdk 33 defaultConfig { applicationId "app.omnivore.omnivore" - minSdk 21 + minSdk 23 targetSdk 32 versionCode 1 versionName "1.0" @@ -111,9 +111,7 @@ dependencies { // implementation "androidx.activity:activity-ktx:1.3.1" //Dagger - Hilt - implementation 'com.google.dagger:hilt-android:2.43.2' - kapt 'com.google.dagger:hilt-compiler:2.43.2' - - implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03' + implementation 'com.google.dagger:hilt-android:2.42' + kapt 'com.google.dagger:hilt-compiler:2.42' } diff --git a/android/Omnivore/app/src/main/AndroidManifest.xml b/android/Omnivore/app/src/main/AndroidManifest.xml index 3bf761e86..344d7f7aa 100644 --- a/android/Omnivore/app/src/main/AndroidManifest.xml +++ b/android/Omnivore/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ package="app.omnivore.omnivore"> by preferencesDataStore( + name = Constants.dataStoreName +) + +interface DatastoreRepository { + suspend fun putString(key: String, value: String) + suspend fun putInt(key: String, value: Int) + suspend fun getString(key: String): String? + suspend fun getInt(key: String): Int? +} + +class OmnivoreDatastore @Inject constructor( + private val context: Context +) : DatastoreRepository { + override suspend fun putString(key: String, value: String) { + val preferencesKey = stringPreferencesKey(key) + context.dataStore.edit { preferences -> + preferences[preferencesKey] = value + } + } + + override suspend fun putInt(key: String, value: Int) { + val preferencesKey = intPreferencesKey(key) + context.dataStore.edit { preferences -> + preferences[preferencesKey] = value + } + } + + override suspend fun getString(key: String): String? { + val preferencesKey = stringPreferencesKey(key) + val preferences = context.dataStore.data.first() + return preferences[preferencesKey] + } + + override suspend fun getInt(key: String): Int? { + val preferencesKey = intPreferencesKey(key) + val preferences = context.dataStore.data.first() + return preferences[preferencesKey] + } +} diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/LoginViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/LoginViewModel.kt index 2ee230390..5cccad43a 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/LoginViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/LoginViewModel.kt @@ -3,24 +3,40 @@ package app.omnivore.omnivore import android.content.ContentValues import android.util.Log import androidx.lifecycle.ViewModel -import kotlinx.coroutines.GlobalScope +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch +import javax.inject.Inject -class LoginViewModel: ViewModel() { +@HiltViewModel +class LoginViewModel @Inject constructor( + private val datastoreRepo: DatastoreRepository +): ViewModel() { fun login(email: String, password: String) { val emailLogin = RetrofitHelper.getInstance().create(EmailLoginSubmit::class.java) - GlobalScope.launch { + viewModelScope.launch { val result = emailLogin.submitEmailLogin( EmailLoginCredentials(email = email, password = password) ) - // TODO: parse out result and store auth token - // set some variable that compose can observe - if (result != null) { - Log.d(ContentValues.TAG, result.body().toString()) - } else { - Log.d(ContentValues.TAG, result.body().toString()) + // TODO: bail early if email is pending +// if (result.body()?.pendingEmailVerification == true) { +// return void +// } + + if (result.body()?.authToken != null) { + datastoreRepo.putString(DatastoreKeys.omnivoreAuthToken, result.body()?.authToken!!) + } + + if (result.body()?.authCookieString != null) { + datastoreRepo.putString( + DatastoreKeys.omnivoreAuthCookieString, result.body()?.authCookieString!! + ) + } + + datastoreRepo.getString(DatastoreKeys.omnivoreAuthToken)?.let { + Log.d(ContentValues.TAG, it) } } } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/MainActivity.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/MainActivity.kt index fa310f6ae..3b8804963 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/MainActivity.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/MainActivity.kt @@ -24,7 +24,9 @@ import androidx.compose.ui.unit.dp import app.omnivore.omnivore.ui.theme.OmnivoreTheme import androidx.compose.runtime.getValue import androidx.compose.runtime.setValue +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -43,7 +45,7 @@ class MainActivity : ComponentActivity() { } @Composable -fun LoginView(viewModel: LoginViewModel = LoginViewModel()) { +fun LoginView(viewModel: LoginViewModel) { var email by rememberSaveable { mutableStateOf("") } var password by rememberSaveable { mutableStateOf("") } @@ -125,10 +127,10 @@ fun LoginFields( // showBackground = true, // name = "Dark Mode" //) -@Preview(showBackground = true) -@Composable -fun DefaultPreview() { - OmnivoreTheme { - LoginView() - } -} +//@Preview(showBackground = true) +//@Composable +//fun DefaultPreview() { +// OmnivoreTheme { +// LoginView() +// } +//} diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/OmnivoreApplication.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/OmnivoreApplication.kt new file mode 100644 index 000000000..7e339793a --- /dev/null +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/OmnivoreApplication.kt @@ -0,0 +1,8 @@ +package app.omnivore.omnivore + +import android.app.Application +import dagger.hilt.android.HiltAndroidApp + +@HiltAndroidApp +class OmnivoreApplication: Application() { +} diff --git a/android/Omnivore/build.gradle b/android/Omnivore/build.gradle index a78e10a1b..07f495e2f 100644 --- a/android/Omnivore/build.gradle +++ b/android/Omnivore/build.gradle @@ -5,7 +5,8 @@ buildscript { } dependencies { - classpath "com.google.dagger:hilt-android-gradle-plugin:2.43.2" + classpath "com.google.dagger:hilt-android-gradle-plugin:2.42" + classpath "com.android.tools.build:gradle:7.2.1" } }// Top-level build file where you can add configuration options common to all sub-projects/modules. @@ -13,6 +14,9 @@ plugins { id 'com.android.application' version '7.2.1' apply false id 'com.android.library' version '7.2.1' apply false id 'org.jetbrains.kotlin.android' version '1.5.31' apply false +// id 'com.android.application' version '7.2.2' apply false +// id 'com.android.library' version '7.2.2' apply false +// id 'org.jetbrains.kotlin.android' version '1.7.20-Beta' apply false } task clean(type: Delete) { diff --git a/android/Omnivore/gradle/wrapper/gradle-wrapper.properties b/android/Omnivore/gradle/wrapper/gradle-wrapper.properties index 29d14b04b..5bf8d8081 100644 --- a/android/Omnivore/gradle/wrapper/gradle-wrapper.properties +++ b/android/Omnivore/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Aug 02 13:19:15 PDT 2022 +#Wed Aug 10 17:39:47 PDT 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME