mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-03 20:47:32 +01:00
making the onboarding store a userId scoped generic store instead
This commit is contained in:
parent
73b80b1c7d
commit
bc373917b5
@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2022 New Vector Ltd
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package im.vector.app.core.extensions
|
|
||||||
|
|
||||||
import androidx.datastore.core.DataStore
|
|
||||||
import androidx.datastore.preferences.core.Preferences
|
|
||||||
import androidx.datastore.preferences.core.edit
|
|
||||||
|
|
||||||
suspend fun DataStore<Preferences>.removeKeysWithPrefix(prefix: String) {
|
|
||||||
edit { preferences ->
|
|
||||||
val keysToRemove = preferences.asMap().keys.filter { key -> key.name.startsWith(prefix) }
|
|
||||||
keysToRemove.forEach {
|
|
||||||
preferences.remove(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -21,7 +21,7 @@ import androidx.core.content.ContextCompat
|
|||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.ProcessLifecycleOwner
|
import androidx.lifecycle.ProcessLifecycleOwner
|
||||||
import im.vector.app.core.services.VectorSyncService
|
import im.vector.app.core.services.VectorSyncService
|
||||||
import im.vector.app.features.onboarding.store.OnboardingStore
|
import im.vector.app.features.session.VectorSessionStore
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupState
|
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupState
|
||||||
import org.matrix.android.sdk.api.session.sync.FilterService
|
import org.matrix.android.sdk.api.session.sync.FilterService
|
||||||
@ -78,4 +78,4 @@ fun Session.cannotLogoutSafely(): Boolean {
|
|||||||
!sharedSecretStorageService.isRecoverySetup())
|
!sharedSecretStorageService.isRecoverySetup())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Session.onboardingStore(context: Context) = OnboardingStore(context, myUserId)
|
fun Session.vectorStore(context: Context) = VectorSessionStore(context, myUserId)
|
||||||
|
@ -28,8 +28,8 @@ import dagger.hilt.android.AndroidEntryPoint
|
|||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.di.ActiveSessionHolder
|
import im.vector.app.core.di.ActiveSessionHolder
|
||||||
import im.vector.app.core.error.ErrorFormatter
|
import im.vector.app.core.error.ErrorFormatter
|
||||||
import im.vector.app.core.extensions.onboardingStore
|
|
||||||
import im.vector.app.core.extensions.startSyncing
|
import im.vector.app.core.extensions.startSyncing
|
||||||
|
import im.vector.app.core.extensions.vectorStore
|
||||||
import im.vector.app.core.platform.VectorBaseActivity
|
import im.vector.app.core.platform.VectorBaseActivity
|
||||||
import im.vector.app.core.utils.deleteAllFiles
|
import im.vector.app.core.utils.deleteAllFiles
|
||||||
import im.vector.app.databinding.ActivityMainBinding
|
import im.vector.app.databinding.ActivityMainBinding
|
||||||
@ -37,11 +37,11 @@ import im.vector.app.features.analytics.VectorAnalytics
|
|||||||
import im.vector.app.features.home.HomeActivity
|
import im.vector.app.features.home.HomeActivity
|
||||||
import im.vector.app.features.home.ShortcutsHandler
|
import im.vector.app.features.home.ShortcutsHandler
|
||||||
import im.vector.app.features.notifications.NotificationDrawerManager
|
import im.vector.app.features.notifications.NotificationDrawerManager
|
||||||
import im.vector.app.features.onboarding.store.OnboardingStore
|
|
||||||
import im.vector.app.features.pin.PinCodeStore
|
import im.vector.app.features.pin.PinCodeStore
|
||||||
import im.vector.app.features.pin.PinLocker
|
import im.vector.app.features.pin.PinLocker
|
||||||
import im.vector.app.features.pin.UnlockedActivity
|
import im.vector.app.features.pin.UnlockedActivity
|
||||||
import im.vector.app.features.popup.PopupAlertManager
|
import im.vector.app.features.popup.PopupAlertManager
|
||||||
|
import im.vector.app.features.session.VectorSessionStore
|
||||||
import im.vector.app.features.settings.VectorPreferences
|
import im.vector.app.features.settings.VectorPreferences
|
||||||
import im.vector.app.features.signout.hard.SignedOutActivity
|
import im.vector.app.features.signout.hard.SignedOutActivity
|
||||||
import im.vector.app.features.themes.ActivityOtherThemes
|
import im.vector.app.features.themes.ActivityOtherThemes
|
||||||
@ -146,7 +146,7 @@ class MainActivity : VectorBaseActivity<ActivityMainBinding>(), UnlockedActivity
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val onboardingStore = session.onboardingStore(this)
|
val onboardingStore = session.vectorStore(this)
|
||||||
when {
|
when {
|
||||||
args.isAccountDeactivated -> {
|
args.isAccountDeactivated -> {
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
@ -187,7 +187,7 @@ class MainActivity : VectorBaseActivity<ActivityMainBinding>(), UnlockedActivity
|
|||||||
Timber.w("Ignoring invalid token global error")
|
Timber.w("Ignoring invalid token global error")
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun doLocalCleanup(clearPreferences: Boolean, onboardingStore: OnboardingStore) {
|
private suspend fun doLocalCleanup(clearPreferences: Boolean, vectorSessionStore: VectorSessionStore) {
|
||||||
// On UI Thread
|
// On UI Thread
|
||||||
Glide.get(this@MainActivity).clearMemory()
|
Glide.get(this@MainActivity).clearMemory()
|
||||||
|
|
||||||
@ -197,7 +197,7 @@ class MainActivity : VectorBaseActivity<ActivityMainBinding>(), UnlockedActivity
|
|||||||
pinLocker.unlock()
|
pinLocker.unlock()
|
||||||
pinCodeStore.deleteEncodedPin()
|
pinCodeStore.deleteEncodedPin()
|
||||||
vectorAnalytics.onSignOut()
|
vectorAnalytics.onSignOut()
|
||||||
onboardingStore.clear()
|
vectorSessionStore.clear()
|
||||||
}
|
}
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
// On BG thread
|
// On BG thread
|
||||||
|
@ -32,7 +32,7 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
|||||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
||||||
import im.vector.app.core.extensions.configureAndStart
|
import im.vector.app.core.extensions.configureAndStart
|
||||||
import im.vector.app.core.extensions.exhaustive
|
import im.vector.app.core.extensions.exhaustive
|
||||||
import im.vector.app.core.extensions.onboardingStore
|
import im.vector.app.core.extensions.vectorStore
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.core.resources.StringProvider
|
import im.vector.app.core.resources.StringProvider
|
||||||
import im.vector.app.core.utils.ensureTrailingSlash
|
import im.vector.app.core.utils.ensureTrailingSlash
|
||||||
@ -753,7 +753,7 @@ class OnboardingViewModel @AssistedInject constructor(
|
|||||||
|
|
||||||
private suspend fun onSessionCreated(session: Session) {
|
private suspend fun onSessionCreated(session: Session) {
|
||||||
awaitState().useCase?.let { useCase ->
|
awaitState().useCase?.let { useCase ->
|
||||||
session.onboardingStore(applicationContext).setUseCase(useCase)
|
session.vectorStore(applicationContext).setUseCase(useCase)
|
||||||
}
|
}
|
||||||
activeSessionHolder.setActiveSession(session)
|
activeSessionHolder.setActiveSession(session)
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package im.vector.app.features.onboarding.store
|
package im.vector.app.features.session
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.datastore.core.DataStore
|
import androidx.datastore.core.DataStore
|
||||||
@ -22,40 +22,38 @@ import androidx.datastore.preferences.core.Preferences
|
|||||||
import androidx.datastore.preferences.core.edit
|
import androidx.datastore.preferences.core.edit
|
||||||
import androidx.datastore.preferences.core.stringPreferencesKey
|
import androidx.datastore.preferences.core.stringPreferencesKey
|
||||||
import androidx.datastore.preferences.preferencesDataStore
|
import androidx.datastore.preferences.preferencesDataStore
|
||||||
import im.vector.app.core.extensions.removeKeysWithPrefix
|
|
||||||
import im.vector.app.features.onboarding.FtueUseCase
|
import im.vector.app.features.onboarding.FtueUseCase
|
||||||
import kotlinx.coroutines.flow.first
|
import kotlinx.coroutines.flow.first
|
||||||
|
|
||||||
private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "vector_onboarding")
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Local storage for:
|
* Local storage for:
|
||||||
* - messaging use case (Enum/String)
|
* - messaging use case (Enum/String)
|
||||||
*/
|
*/
|
||||||
class OnboardingStore constructor(
|
class VectorSessionStore constructor(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
private val myUserId: String
|
myUserId: String
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "vector_session_store_$myUserId")
|
||||||
|
private val useCaseKey = stringPreferencesKey("use_case")
|
||||||
|
|
||||||
suspend fun readUseCase() = context.dataStore.data.first().let { preferences ->
|
suspend fun readUseCase() = context.dataStore.data.first().let { preferences ->
|
||||||
preferences[myUserId.toUseCaseKey()]?.let { FtueUseCase.from(it) }
|
preferences[useCaseKey]?.let { FtueUseCase.from(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun setUseCase(useCase: FtueUseCase) {
|
suspend fun setUseCase(useCase: FtueUseCase) {
|
||||||
context.dataStore.edit { settings ->
|
context.dataStore.edit { settings ->
|
||||||
settings[myUserId.toUseCaseKey()] = useCase.persistableValue
|
settings[useCaseKey] = useCase.persistableValue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun resetUseCase() {
|
suspend fun resetUseCase() {
|
||||||
context.dataStore.edit { settings ->
|
context.dataStore.edit { settings ->
|
||||||
settings.remove(myUserId.toUseCaseKey())
|
settings.remove(useCaseKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun clear() {
|
suspend fun clear() {
|
||||||
context.dataStore.removeKeysWithPrefix(myUserId)
|
context.dataStore.edit { settings -> settings.clear() }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun String.toUseCaseKey() = stringPreferencesKey("$this-use_case")
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user