This commit is contained in:
bemusementpark 2024-07-10 20:46:19 +09:30
parent 182d3f6973
commit 0d901ef510
4 changed files with 31 additions and 47 deletions

View File

@ -8,7 +8,6 @@ import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.provider.Telephony.Mms.Addr
import android.widget.Toast
import androidx.activity.viewModels
import androidx.core.os.bundleOf
@ -21,7 +20,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@ -185,9 +183,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
// subscribe to outdated config updates, this should be removed after long enough time for device migration
lifecycleScope.launch {
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
TextSecurePreferences.events.filter { it == TextSecurePreferences.HAS_RECEIVED_LEGACY_CONFIG.name }.collect {
updateLegacyConfigView()
}
prefs.hasLegacyConfigFlow().collect(::updateLegacyConfigView)
}
}
@ -224,10 +220,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
}
withContext(Dispatchers.Main) {
updateProfileButton()
TextSecurePreferences.events.filter { it == TextSecurePreferences.PROFILE_NAME_PREF.name }.collect {
updateProfileButton()
}
prefs.profileNameFlow().collect(::updateProfileButton)
}
}
@ -330,8 +323,8 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
binding.newConversationButton.isVisible = !isShown
}
private fun updateLegacyConfigView() {
binding.configOutdatedView.isVisible = textSecurePreferences.getHasLegacyConfig()
private fun updateLegacyConfigView(hasLegacyConfig: Boolean = textSecurePreferences.getHasLegacyConfig()) {
binding.configOutdatedView.isVisible = hasLegacyConfig
}
override fun onResume() {
@ -382,9 +375,9 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
}
}
private fun updateProfileButton() {
private fun updateProfileButton(profileName: String? = textSecurePreferences.getProfileName()) {
binding.profileButton.publicKey = publicKey
binding.profileButton.displayName = textSecurePreferences.getProfileName()
binding.profileButton.displayName = profileName
binding.profileButton.recycle()
binding.profileButton.update()
}

View File

@ -16,7 +16,6 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapLatest
@ -60,11 +59,6 @@ class HomeViewModel @Inject constructor(
::Data
).stateIn(viewModelScope, SharingStarted.Eagerly, null)
private fun hasHiddenMessageRequests() = TextSecurePreferences.events
.filter { it == TextSecurePreferences.HAS_HIDDEN_MESSAGE_REQUESTS.name }
.map { prefs.hasHiddenMessageRequests() }
.onStart { emit(prefs.hasHiddenMessageRequests()) }
private fun observeTypingStatus(): Flow<Set<Long>> =
ApplicationContext.getInstance(context).typingStatusRepository
.typingThreads
@ -74,7 +68,7 @@ class HomeViewModel @Inject constructor(
private fun messageRequests() = combine(
unapprovedConversationCount(),
hasHiddenMessageRequests(),
prefs.hasHiddenMessageRequestsFlow(),
latestUnapprovedConversationTimestamp(),
::createMessageRequests
).flowOn(Dispatchers.IO)

View File

@ -12,8 +12,6 @@ import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.timeout
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@ -44,10 +42,8 @@ internal class LoadingViewModel @Inject constructor(
init {
viewModelScope.launch(Dispatchers.IO) {
try {
TextSecurePreferences.events
.filter { it == TextSecurePreferences.CONFIGURATION_SYNCED.name }
.onStart { emit(TextSecurePreferences.CONFIGURATION_SYNCED.name) }
.filter { prefs.getConfigurationMessageSynced() }
prefs.configurationMessageSyncedFlow()
.filter { it }
.timeout(TIMEOUT_TIME)
.collectLatest { onSuccess() }
} catch (e: Exception) {

View File

@ -2,6 +2,7 @@ package org.session.libsession.utilities
import android.content.Context
import android.content.SharedPreferences
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.hardware.Camera
import android.net.Uri
import android.provider.Settings
@ -12,9 +13,9 @@ import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow
import org.session.libsession.R
import org.session.libsession.utilities.TextSecurePreferences.Companion.instance
import java.util.Date
@ -42,7 +43,6 @@ fun Pref(name: String, default: String) = Pref(name, default, { _, _ -> getStrin
fun Pref(name: String) = Pref(name, null, SharedPreferences::getString, SharedPreferences.Editor::putStringOrRemove)
fun Pref(name: String, default: Set<String>) = Pref(name, default, SharedPreferences::getStringSet, SharedPreferences.Editor::putStringSet)
private fun SharedPreferences.Editor.putStringOrRemove(name: String, value: String?) = value?.let { putString(name, it) } ?: run { remove(name) }
operator fun <T> SharedPreferences.get(pref: Pref<T>): T = pref.get(this)
@ -76,9 +76,6 @@ class TextSecurePreferences @Inject constructor(
var instance: TextSecurePreferences? = null
internal val _events = MutableSharedFlow<String>(0, 64, BufferOverflow.DROP_OLDEST)
val events get() = _events.asSharedFlow()
@JvmStatic
var pushSuffix = ""
@ -165,19 +162,26 @@ class TextSecurePreferences @Inject constructor(
fun <T> set(pref: Pref<T>, value: T?) = sharedPreferences.set(pref, value)
fun <T> remove(pref: Pref<T>) = sharedPreferences.set(pref, null)
fun <T> has(pref: Pref<T>) = sharedPreferences.contains(pref.name)
fun <T> flow(pref: Pref<T>) = callbackFlow {
OnSharedPreferenceChangeListener { _, _ -> trySend(sharedPreferences[pref]) }.let {
trySend(sharedPreferences[pref])
sharedPreferences.registerOnSharedPreferenceChangeListener(it)
awaitClose {
sharedPreferences.unregisterOnSharedPreferenceChangeListener(it)
}
}
}
fun getConfigurationMessageSynced(): Boolean = sharedPreferences[CONFIGURATION_SYNCED]
fun setConfigurationMessageSynced(value: Boolean) {
set(CONFIGURATION_SYNCED, value)
_events.tryEmit(CONFIGURATION_SYNCED.name)
}
fun configurationMessageSyncedFlow() = flow(CONFIGURATION_SYNCED)
fun setConfigurationMessageSynced(value: Boolean) = set(CONFIGURATION_SYNCED, value)
fun isPushEnabled(): Boolean = sharedPreferences[IS_PUSH_ENABLED]
fun setPushEnabled(value: Boolean) = sharedPreferences.set(IS_PUSH_ENABLED, value)
fun getPushToken(): String? = sharedPreferences[PUSH_TOKEN]
fun setPushToken(value: String) = set(PUSH_TOKEN, value)
fun getPushRegisterTime(): Long = sharedPreferences[PUSH_REGISTER_TIME]
fun setPushRegisterTime(value: Long) = set(PUSH_REGISTER_TIME, value)
fun isScreenLockEnabled() = sharedPreferences[SCREEN_LOCK]
fun setScreenLockEnabled(value: Boolean) = set(SCREEN_LOCK, value)
@ -202,11 +206,9 @@ class TextSecurePreferences @Inject constructor(
fun setIsGifSearchInGridLayout(isGrid: Boolean) = set(GIF_GRID_LAYOUT, isGrid)
fun getProfileKey(): String? = sharedPreferences[PROFILE_KEY_PREF]
fun setProfileKey(key: String?) = set(PROFILE_KEY_PREF, key)
fun setProfileName(name: String?) {
sharedPreferences[PROFILE_NAME_PREF] = name
_events.tryEmit(PROFILE_NAME_PREF.name)
}
fun setProfileName(name: String?) = sharedPreferences.set(PROFILE_NAME_PREF, name)
fun getProfileName(): String? = sharedPreferences[PROFILE_NAME_PREF]
fun profileNameFlow() = flow(PROFILE_NAME_PREF)
fun setProfileAvatarId(id: Int) = set(PROFILE_AVATAR_ID_PREF, id)
fun getProfileAvatarId(): Int = sharedPreferences[PROFILE_AVATAR_ID_PREF]
fun setProfilePictureURL(url: String?) = set(PROFILE_AVATAR_URL_PREF, url)
@ -220,10 +222,8 @@ class TextSecurePreferences @Inject constructor(
fun setLocalRegistrationId(registrationId: Int) = set(LOCAL_REGISTRATION_ID_PREF, registrationId)
fun getLocalNumber(): String? = sharedPreferences[LOCAL_NUMBER_PREF]
fun getHasLegacyConfig(): Boolean = sharedPreferences[HAS_RECEIVED_LEGACY_CONFIG]
fun setHasLegacyConfig(newValue: Boolean) {
sharedPreferences[HAS_RECEIVED_LEGACY_CONFIG] = newValue
_events.tryEmit(HAS_RECEIVED_LEGACY_CONFIG.name)
}
fun hasLegacyConfigFlow(): Flow<Boolean> = flow(HAS_RECEIVED_LEGACY_CONFIG)
fun setHasLegacyConfig(newValue: Boolean) = sharedPreferences.set(HAS_RECEIVED_LEGACY_CONFIG, newValue)
fun setLocalNumber(localNumber: String) = set(LOCAL_NUMBER_PREF, localNumber.lowercase())
fun isEnterSendsEnabled() = sharedPreferences[ENTER_SENDS_PREF]
fun isPasswordDisabled(): Boolean = sharedPreferences[DISABLE_PASSPHRASE_PREF]
@ -278,6 +278,7 @@ class TextSecurePreferences @Inject constructor(
}
}
fun hasHiddenMessageRequests(): Boolean = sharedPreferences[HAS_HIDDEN_MESSAGE_REQUESTS]
fun hasHiddenMessageRequestsFlow() = flow(HAS_HIDDEN_MESSAGE_REQUESTS)
fun setHasHiddenMessageRequests() = set(HAS_HIDDEN_MESSAGE_REQUESTS, true)
fun removeHasHiddenMessageRequests() = remove(HAS_HIDDEN_MESSAGE_REQUESTS)
fun getFingerprintKeyGenerated(): Boolean = sharedPreferences[FINGERPRINT_KEY_GENERATED]