From 53cb16bd2afc3d5051c24a3fb21dfbc5b5fdff29 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Tue, 16 Aug 2022 21:35:20 -0700 Subject: [PATCH] add a logout button that clears datastore when tapped --- .../app/omnivore/omnivore/DatastoreRepository.kt | 5 +++++ .../java/app/omnivore/omnivore/LoginViewModel.kt | 6 ++++++ .../java/app/omnivore/omnivore/MainActivity.kt | 14 ++++++++++---- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/DatastoreRepository.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/DatastoreRepository.kt index 9ed4c5221..5b94ee716 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/DatastoreRepository.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/DatastoreRepository.kt @@ -19,6 +19,7 @@ private val Context.dataStore: DataStore by preferencesDataStore( interface DatastoreRepository { val hasAuthTokenFlow: Flow + suspend fun clear() suspend fun putString(key: String, value: String) suspend fun putInt(key: String, value: Int) suspend fun getString(key: String): String? @@ -54,6 +55,10 @@ class OmnivoreDatastore @Inject constructor( return preferences[preferencesKey] } + override suspend fun clear() { + context.dataStore.edit { it.clear() } + } + override val hasAuthTokenFlow: Flow = context .dataStore.data.map { preferences -> val key = stringPreferencesKey(DatastoreKeys.omnivoreAuthToken) 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 e11d89e0d..48a624862 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 @@ -48,4 +48,10 @@ class LoginViewModel @Inject constructor( } } } + + fun logout() { + viewModelScope.launch { + datastoreRepo.clear() + } + } } 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 db3278273..73d97853c 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 @@ -37,7 +37,7 @@ class MainActivity : ComponentActivity() { OmnivoreTheme { // A surface container using the 'background' color from the theme Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background) { - rootView(viewModel) + RootView(viewModel) } } } @@ -45,18 +45,18 @@ class MainActivity : ComponentActivity() { } @Composable -fun rootView(viewModel: LoginViewModel) { +fun RootView(viewModel: LoginViewModel) { val hasAuthToken: Boolean by viewModel.hasAuthTokenLiveData.observeAsState(false) if (hasAuthToken) { - loggedInView() + LoggedInView(viewModel) } else { LoginView(viewModel) } } @Composable -fun loggedInView() { +fun LoggedInView(viewModel: LoginViewModel) { Column( verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, @@ -65,6 +65,12 @@ fun loggedInView() { .fillMaxSize() ) { Text("You have a valid auth token. Nice. Go save something in Chrome!") + + Button(onClick = { + viewModel.logout() + }) { + Text(text = "Logout") + } } }