Fix flow listening in SettingsController

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
This commit is contained in:
Álvaro Brey 2022-06-22 10:44:35 +02:00 committed by Andy Scherzinger
parent b9d2ca2517
commit f7786e1b93
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
2 changed files with 96 additions and 90 deletions

View File

@ -101,7 +101,9 @@ import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
import kotlinx.coroutines.MainScope import kotlinx.coroutines.MainScope
import kotlinx.coroutines.cancel import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener import net.orange_box.storebox.listeners.OnPreferenceValueChangedListener
import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody import okhttp3.RequestBody
@ -147,15 +149,12 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
get() = get() =
resources!!.getString(R.string.nc_settings) resources!!.getString(R.string.nc_settings)
private fun getCurrentUser() { private suspend fun getCurrentUser() {
scope.launch { val user = currentUserProvider.currentUser.first()
currentUserProvider.currentUser.collect { Log.e(TAG, "User: $user")
Log.e(TAG, "User: $it") currentUser = user
this@SettingsController.currentUser = it credentials =
this@SettingsController.credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token)
ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token)
}
}
} }
override fun onViewBound(view: View) { override fun onViewBound(view: View) {
@ -164,43 +163,46 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
sharedApplication!!.componentApplication.inject(this) sharedApplication!!.componentApplication.inject(this)
ViewCompat.setTransitionName((binding.avatarImage), "userAvatar.transitionTag") ViewCompat.setTransitionName((binding.avatarImage), "userAvatar.transitionTag")
getCurrentUser()
if (saveStateHandler == null) { runBlocking {
saveStateHandler = LovelySaveStateHandler() getCurrentUser()
}
registerChangeListeners() if (saveStateHandler == null) {
saveStateHandler = LovelySaveStateHandler()
}
setupSettingsScreen() registerChangeListeners()
setupLicenceSetting()
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { setupSettingsScreen()
binding.settingsIncognitoKeyboard.visibility = View.GONE setupLicenceSetting()
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
binding.settingsScreenLock.visibility = View.GONE binding.settingsIncognitoKeyboard.visibility = View.GONE
binding.settingsScreenLockTimeout.visibility = View.GONE }
} else {
binding.settingsScreenLock.setSummary( if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
String.format( binding.settingsScreenLock.visibility = View.GONE
Locale.getDefault(), binding.settingsScreenLockTimeout.visibility = View.GONE
resources!!.getString(R.string.nc_settings_screen_lock_desc), } else {
resources!!.getString(R.string.nc_app_product_name) binding.settingsScreenLock.setSummary(
String.format(
Locale.getDefault(),
resources!!.getString(R.string.nc_settings_screen_lock_desc),
resources!!.getString(R.string.nc_app_product_name)
)
) )
) }
setupPrivacyUrl()
setupSourceCodeUrl()
binding.settingsVersion.setSummary("v" + BuildConfig.VERSION_NAME)
setupSoundSettings()
setupPhoneBookIntegration()
setupClientCertView()
} }
setupPrivacyUrl()
setupSourceCodeUrl()
binding.settingsVersion.setSummary("v" + BuildConfig.VERSION_NAME)
setupSoundSettings()
setupPhoneBookIntegration()
setupClientCertView()
} }
private fun setupPhoneBookIntegration() { private fun setupPhoneBookIntegration() {
@ -484,69 +486,73 @@ class SettingsController : NewBaseController(R.layout.controller_settings) {
super.onAttach(view) super.onAttach(view)
actionBar?.show() actionBar?.show()
dispose(null) dispose(null)
getCurrentUser()
binding.settingsVersion.setOnClickListener { runBlocking {
sendLogs()
}
if (!TextUtils.isEmpty(currentUser!!.clientCertificate)) { getCurrentUser()
binding.settingsClientCert.setTitle(R.string.nc_client_cert_change)
} else {
binding.settingsClientCert.setTitle(R.string.nc_client_cert_setup)
}
setupCheckables() binding.settingsVersion.setOnClickListener {
setupScreenLockSetting() sendLogs()
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (!TextUtils.isEmpty(currentUser!!.clientCertificate)) {
binding.settingsNotificationsCategory.setTitle( binding.settingsClientCert.setTitle(R.string.nc_client_cert_change)
resources!!.getString(R.string.nc_settings_notification_sounds_post_oreo) } else {
) binding.settingsClientCert.setTitle(R.string.nc_client_cert_setup)
} }
val callRingtoneUri = getCallRingtoneUri(view.context, (appPreferences)!!) setupCheckables()
binding.settingsCallSound.setSummary(getRingtoneName(view.context, callRingtoneUri)) setupScreenLockSetting()
val messageRingtoneUri = getMessageRingtoneUri(view.context, (appPreferences)!!)
binding.settingsMessageSound.setSummary(getRingtoneName(view.context, messageRingtoneUri))
setupProxyTypeSettings() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
setupProxyCredentialSettings() binding.settingsNotificationsCategory.setTitle(
resources!!.getString(R.string.nc_settings_notification_sounds_post_oreo)
if (currentUser != null) {
binding.baseUrlText.text = Uri.parse(currentUser!!.baseUrl).host
setupServerAgeWarning()
binding.settingsReauthorize.addPreferenceClickListener {
router.pushController(
RouterTransaction.with(WebViewLoginController(currentUser!!.baseUrl, true))
.pushChangeHandler(VerticalChangeHandler())
.popChangeHandler(VerticalChangeHandler())
) )
} }
if (currentUser!!.displayName != null) { val callRingtoneUri = getCallRingtoneUri(view.context, (appPreferences)!!)
binding.displayNameText.text = currentUser!!.displayName binding.settingsCallSound.setSummary(getRingtoneName(view.context, callRingtoneUri))
val messageRingtoneUri = getMessageRingtoneUri(view.context, (appPreferences)!!)
binding.settingsMessageSound.setSummary(getRingtoneName(view.context, messageRingtoneUri))
setupProxyTypeSettings()
setupProxyCredentialSettings()
if (currentUser != null) {
binding.baseUrlText.text = Uri.parse(currentUser!!.baseUrl).host
setupServerAgeWarning()
binding.settingsReauthorize.addPreferenceClickListener {
router.pushController(
RouterTransaction.with(WebViewLoginController(currentUser!!.baseUrl, true))
.pushChangeHandler(VerticalChangeHandler())
.popChangeHandler(VerticalChangeHandler())
)
}
if (currentUser!!.displayName != null) {
binding.displayNameText.text = currentUser!!.displayName
}
DisplayUtils.loadAvatarImage(currentUser, binding.avatarImage, false)
setupProfileQueryDisposable()
binding.settingsRemoveAccount.addPreferenceClickListener {
showLovelyDialog(ID_REMOVE_ACCOUNT_WARNING_DIALOG, null)
}
} }
DisplayUtils.loadAvatarImage(currentUser, binding.avatarImage, false) setupMessageView()
setupProfileQueryDisposable() binding.avatarContainer.setOnClickListener {
router
.pushController(
RouterTransaction.with(ProfileController())
.pushChangeHandler(HorizontalChangeHandler())
.popChangeHandler(HorizontalChangeHandler())
binding.settingsRemoveAccount.addPreferenceClickListener { )
showLovelyDialog(ID_REMOVE_ACCOUNT_WARNING_DIALOG, null)
} }
} }
setupMessageView()
binding.avatarContainer.setOnClickListener {
router
.pushController(
RouterTransaction.with(ProfileController())
.pushChangeHandler(HorizontalChangeHandler())
.popChangeHandler(HorizontalChangeHandler())
)
}
} }
private fun setupProxyTypeSettings() { private fun setupProxyTypeSettings() {

View File

@ -38,8 +38,8 @@ class PushConfigurationConverter {
} }
@TypeConverter @TypeConverter
fun fromStringToPushConfiguration(value: String): PushConfigurationState? { fun fromStringToPushConfiguration(value: String?): PushConfigurationState? {
if (value.isBlank()) { if (value.isNullOrBlank()) {
return null return null
} }