Use debouncedClicks every where, for faster UI (it uses throttleFirst operator instead of debounce)
This commit is contained in:
parent
6b09a78ece
commit
9520aff848
@ -23,7 +23,6 @@ import android.view.View
|
|||||||
import android.view.inputmethod.EditorInfo
|
import android.view.inputmethod.EditorInfo
|
||||||
import com.airbnb.mvrx.activityViewModel
|
import com.airbnb.mvrx.activityViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import com.jakewharton.rxbinding3.view.clicks
|
|
||||||
import com.jakewharton.rxbinding3.widget.editorActionEvents
|
import com.jakewharton.rxbinding3.widget.editorActionEvents
|
||||||
import com.jakewharton.rxbinding3.widget.textChanges
|
import com.jakewharton.rxbinding3.widget.textChanges
|
||||||
import im.vector.matrix.android.api.extensions.tryThis
|
import im.vector.matrix.android.api.extensions.tryThis
|
||||||
@ -33,7 +32,6 @@ import im.vector.riotx.core.resources.ColorProvider
|
|||||||
import im.vector.riotx.core.utils.startImportTextFromFileIntent
|
import im.vector.riotx.core.utils.startImportTextFromFileIntent
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import kotlinx.android.synthetic.main.fragment_ssss_access_from_key.*
|
import kotlinx.android.synthetic.main.fragment_ssss_access_from_key.*
|
||||||
import kotlinx.android.synthetic.main.fragment_ssss_access_from_passphrase.*
|
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@ -67,13 +65,7 @@ class SharedSecuredStorageKeyFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
.disposeOnDestroyView()
|
.disposeOnDestroyView()
|
||||||
|
|
||||||
ssss_key_use_file.clicks()
|
ssss_key_use_file.debouncedClicks { startImportTextFromFileIntent(this, IMPORT_FILE_REQ) }
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
startImportTextFromFileIntent(this, IMPORT_FILE_REQ)
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
|
|
||||||
sharedViewModel.observeViewEvents {
|
sharedViewModel.observeViewEvents {
|
||||||
when (it) {
|
when (it) {
|
||||||
@ -83,13 +75,7 @@ class SharedSecuredStorageKeyFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ssss_key_submit.clicks()
|
ssss_key_submit.debouncedClicks { submit() }
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
submit()
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun submit() {
|
fun submit() {
|
||||||
|
@ -22,7 +22,6 @@ import android.view.inputmethod.EditorInfo
|
|||||||
import androidx.core.text.toSpannable
|
import androidx.core.text.toSpannable
|
||||||
import com.airbnb.mvrx.activityViewModel
|
import com.airbnb.mvrx.activityViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import com.jakewharton.rxbinding3.view.clicks
|
|
||||||
import com.jakewharton.rxbinding3.widget.editorActionEvents
|
import com.jakewharton.rxbinding3.widget.editorActionEvents
|
||||||
import com.jakewharton.rxbinding3.widget.textChanges
|
import com.jakewharton.rxbinding3.widget.textChanges
|
||||||
import im.vector.riotx.R
|
import im.vector.riotx.R
|
||||||
@ -37,7 +36,7 @@ import javax.inject.Inject
|
|||||||
|
|
||||||
class SharedSecuredStoragePassphraseFragment @Inject constructor(
|
class SharedSecuredStoragePassphraseFragment @Inject constructor(
|
||||||
private val colorProvider: ColorProvider
|
private val colorProvider: ColorProvider
|
||||||
): VectorBaseFragment() {
|
) : VectorBaseFragment() {
|
||||||
|
|
||||||
override fun getLayoutResId() = R.layout.fragment_ssss_access_from_passphrase
|
override fun getLayoutResId() = R.layout.fragment_ssss_access_from_passphrase
|
||||||
|
|
||||||
@ -83,29 +82,9 @@ class SharedSecuredStoragePassphraseFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ssss_passphrase_submit.clicks()
|
ssss_passphrase_submit.debouncedClicks { submit() }
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
ssss_passphrase_use_key.debouncedClicks { sharedViewModel.handle(SharedSecureStorageAction.UseKey) }
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
ssss_view_show_password.debouncedClicks { sharedViewModel.handle(SharedSecureStorageAction.TogglePasswordVisibility) }
|
||||||
.subscribe {
|
|
||||||
submit()
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
|
|
||||||
ssss_passphrase_use_key.clicks()
|
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
sharedViewModel.handle(SharedSecureStorageAction.UseKey)
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
|
|
||||||
ssss_view_show_password.clicks()
|
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
sharedViewModel.handle(SharedSecureStorageAction.TogglePasswordVisibility)
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun submit() {
|
fun submit() {
|
||||||
|
@ -22,7 +22,6 @@ import android.view.inputmethod.EditorInfo
|
|||||||
import androidx.core.text.toSpannable
|
import androidx.core.text.toSpannable
|
||||||
import com.airbnb.mvrx.parentFragmentViewModel
|
import com.airbnb.mvrx.parentFragmentViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import com.jakewharton.rxbinding3.view.clicks
|
|
||||||
import com.jakewharton.rxbinding3.widget.editorActionEvents
|
import com.jakewharton.rxbinding3.widget.editorActionEvents
|
||||||
import com.jakewharton.rxbinding3.widget.textChanges
|
import com.jakewharton.rxbinding3.widget.textChanges
|
||||||
import im.vector.riotx.R
|
import im.vector.riotx.R
|
||||||
@ -75,21 +74,8 @@ class BootstrapAccountPasswordFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
.disposeOnDestroyView()
|
.disposeOnDestroyView()
|
||||||
|
|
||||||
ssss_view_show_password.clicks()
|
ssss_view_show_password.debouncedClicks { sharedViewModel.handle(BootstrapActions.TogglePasswordVisibility) }
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
bootstrapPasswordButton.debouncedClicks { submit() }
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
sharedViewModel.handle(BootstrapActions.TogglePasswordVisibility)
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
|
|
||||||
bootstrapPasswordButton.clicks()
|
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
submit()
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
|
|
||||||
withState(sharedViewModel) { state ->
|
withState(sharedViewModel) { state ->
|
||||||
(state.step as? BootstrapStep.AccountPassword)?.failure?.let {
|
(state.step as? BootstrapStep.AccountPassword)?.failure?.let {
|
||||||
|
@ -21,14 +21,11 @@ import android.view.View
|
|||||||
import androidx.core.text.toSpannable
|
import androidx.core.text.toSpannable
|
||||||
import com.airbnb.mvrx.parentFragmentViewModel
|
import com.airbnb.mvrx.parentFragmentViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import com.jakewharton.rxbinding3.view.clicks
|
|
||||||
import im.vector.riotx.R
|
import im.vector.riotx.R
|
||||||
import im.vector.riotx.core.platform.VectorBaseFragment
|
import im.vector.riotx.core.platform.VectorBaseFragment
|
||||||
import im.vector.riotx.core.resources.ColorProvider
|
import im.vector.riotx.core.resources.ColorProvider
|
||||||
import im.vector.riotx.core.utils.colorizeMatchingText
|
import im.vector.riotx.core.utils.colorizeMatchingText
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
|
||||||
import kotlinx.android.synthetic.main.fragment_bootstrap_conclusion.*
|
import kotlinx.android.synthetic.main.fragment_bootstrap_conclusion.*
|
||||||
import java.util.concurrent.TimeUnit
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class BootstrapConclusionFragment @Inject constructor(
|
class BootstrapConclusionFragment @Inject constructor(
|
||||||
@ -42,13 +39,7 @@ class BootstrapConclusionFragment @Inject constructor(
|
|||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
bootstrapConclusionContinue.clickableView.clicks()
|
bootstrapConclusionContinue.clickableView.debouncedClicks { sharedViewModel.handle(BootstrapActions.Completed) }
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
sharedViewModel.handle(BootstrapActions.Completed)
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun invalidate() = withState(sharedViewModel) { state ->
|
override fun invalidate() = withState(sharedViewModel) { state ->
|
||||||
|
@ -23,7 +23,6 @@ import androidx.core.text.toSpannable
|
|||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import com.airbnb.mvrx.parentFragmentViewModel
|
import com.airbnb.mvrx.parentFragmentViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import com.jakewharton.rxbinding3.view.clicks
|
|
||||||
import com.jakewharton.rxbinding3.widget.editorActionEvents
|
import com.jakewharton.rxbinding3.widget.editorActionEvents
|
||||||
import com.jakewharton.rxbinding3.widget.textChanges
|
import com.jakewharton.rxbinding3.widget.textChanges
|
||||||
import im.vector.riotx.R
|
import im.vector.riotx.R
|
||||||
@ -88,21 +87,8 @@ class BootstrapConfirmPassphraseFragment @Inject constructor(
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
ssss_view_show_password.clicks()
|
ssss_view_show_password.debouncedClicks { sharedViewModel.handle(BootstrapActions.TogglePasswordVisibility) }
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
bootstrapSubmit.debouncedClicks { submit() }
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
sharedViewModel.handle(BootstrapActions.TogglePasswordVisibility)
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
|
|
||||||
bootstrapSubmit.clicks()
|
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
submit()
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun submit() = withState(sharedViewModel) { state ->
|
private fun submit() = withState(sharedViewModel) { state ->
|
||||||
|
@ -22,7 +22,6 @@ import android.view.inputmethod.EditorInfo
|
|||||||
import androidx.core.text.toSpannable
|
import androidx.core.text.toSpannable
|
||||||
import com.airbnb.mvrx.parentFragmentViewModel
|
import com.airbnb.mvrx.parentFragmentViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import com.jakewharton.rxbinding3.view.clicks
|
|
||||||
import com.jakewharton.rxbinding3.widget.editorActionEvents
|
import com.jakewharton.rxbinding3.widget.editorActionEvents
|
||||||
import com.jakewharton.rxbinding3.widget.textChanges
|
import com.jakewharton.rxbinding3.widget.textChanges
|
||||||
import im.vector.riotx.R
|
import im.vector.riotx.R
|
||||||
@ -83,21 +82,8 @@ class BootstrapEnterPassphraseFragment @Inject constructor(
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
ssss_view_show_password.clicks()
|
ssss_view_show_password.debouncedClicks { sharedViewModel.handle(BootstrapActions.TogglePasswordVisibility) }
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
bootstrapSubmit.debouncedClicks { submit() }
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
sharedViewModel.handle(BootstrapActions.TogglePasswordVisibility)
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
|
|
||||||
bootstrapSubmit.clicks()
|
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
submit()
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun submit() = withState(sharedViewModel) { state ->
|
private fun submit() = withState(sharedViewModel) { state ->
|
||||||
|
@ -28,7 +28,6 @@ import androidx.core.text.toSpannable
|
|||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import com.airbnb.mvrx.parentFragmentViewModel
|
import com.airbnb.mvrx.parentFragmentViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import com.jakewharton.rxbinding3.view.clicks
|
|
||||||
import com.jakewharton.rxbinding3.widget.editorActionEvents
|
import com.jakewharton.rxbinding3.widget.editorActionEvents
|
||||||
import com.jakewharton.rxbinding3.widget.textChanges
|
import com.jakewharton.rxbinding3.widget.textChanges
|
||||||
import im.vector.matrix.android.api.extensions.tryThis
|
import im.vector.matrix.android.api.extensions.tryThis
|
||||||
@ -80,37 +79,10 @@ class BootstrapMigrateBackupFragment @Inject constructor(
|
|||||||
.disposeOnDestroyView()
|
.disposeOnDestroyView()
|
||||||
|
|
||||||
// sharedViewModel.observeViewEvents {}
|
// sharedViewModel.observeViewEvents {}
|
||||||
bootstrapMigrateContinueButton.clicks()
|
bootstrapMigrateContinueButton.debouncedClicks { submit() }
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
bootstrapMigrateShowPassword.debouncedClicks { sharedViewModel.handle(BootstrapActions.TogglePasswordVisibility) }
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
bootstrapMigrateForgotPassphrase.debouncedClicks { sharedViewModel.handle(BootstrapActions.HandleForgotBackupPassphrase) }
|
||||||
.subscribe {
|
bootstrapMigrateUseFile.debouncedClicks { startImportTextFromFileIntent(this, IMPORT_FILE_REQ) }
|
||||||
submit()
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
|
|
||||||
bootstrapMigrateShowPassword.clicks()
|
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
sharedViewModel.handle(BootstrapActions.TogglePasswordVisibility)
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
|
|
||||||
bootstrapMigrateForgotPassphrase.clicks()
|
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
sharedViewModel.handle(BootstrapActions.HandleForgotBackupPassphrase)
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
|
|
||||||
bootstrapMigrateUseFile.clicks()
|
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
startImportTextFromFileIntent(this, IMPORT_FILE_REQ)
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun submit() = withState(sharedViewModel) { state ->
|
private fun submit() = withState(sharedViewModel) { state ->
|
||||||
|
@ -25,19 +25,16 @@ import androidx.core.text.toSpannable
|
|||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import com.airbnb.mvrx.parentFragmentViewModel
|
import com.airbnb.mvrx.parentFragmentViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import com.jakewharton.rxbinding3.view.clicks
|
|
||||||
import im.vector.riotx.R
|
import im.vector.riotx.R
|
||||||
import im.vector.riotx.core.platform.VectorBaseFragment
|
import im.vector.riotx.core.platform.VectorBaseFragment
|
||||||
import im.vector.riotx.core.resources.ColorProvider
|
import im.vector.riotx.core.resources.ColorProvider
|
||||||
import im.vector.riotx.core.utils.colorizeMatchingText
|
import im.vector.riotx.core.utils.colorizeMatchingText
|
||||||
import im.vector.riotx.core.utils.startSharePlainTextIntent
|
import im.vector.riotx.core.utils.startSharePlainTextIntent
|
||||||
import im.vector.riotx.core.utils.toast
|
import im.vector.riotx.core.utils.toast
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
|
||||||
import kotlinx.android.synthetic.main.fragment_bootstrap_save_key.*
|
import kotlinx.android.synthetic.main.fragment_bootstrap_save_key.*
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import java.util.concurrent.TimeUnit
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class BootstrapSaveRecoveryKeyFragment @Inject constructor(
|
class BootstrapSaveRecoveryKeyFragment @Inject constructor(
|
||||||
@ -56,29 +53,13 @@ class BootstrapSaveRecoveryKeyFragment @Inject constructor(
|
|||||||
.colorizeMatchingText(getString(R.string.recovery_passphrase), colorProvider.getColorFromAttribute(android.R.attr.textColorLink))
|
.colorizeMatchingText(getString(R.string.recovery_passphrase), colorProvider.getColorFromAttribute(android.R.attr.textColorLink))
|
||||||
.colorizeMatchingText(getString(R.string.message_key), colorProvider.getColorFromAttribute(android.R.attr.textColorLink))
|
.colorizeMatchingText(getString(R.string.message_key), colorProvider.getColorFromAttribute(android.R.attr.textColorLink))
|
||||||
|
|
||||||
recoverySave.clickableView.clicks()
|
// TODO: previous debouncing window was 600ms, check with Valere why
|
||||||
.debounce(600, TimeUnit.MILLISECONDS)
|
recoverySave.clickableView.debouncedClicks { downloadRecoveryKey() }
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
downloadRecoveryKey()
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
|
|
||||||
recoveryCopy.clickableView.clicks()
|
// TODO: previous debouncing window was 600ms, check with Valere why
|
||||||
.debounce(600, TimeUnit.MILLISECONDS)
|
recoveryCopy.clickableView.debouncedClicks { shareRecoveryKey() }
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
shareRecoveryKey()
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
|
|
||||||
recoveryContinue.clickableView.clicks()
|
recoveryContinue.clickableView.debouncedClicks { sharedViewModel.handle(BootstrapActions.GoToCompleted) }
|
||||||
.debounce(300, TimeUnit.MILLISECONDS)
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe {
|
|
||||||
sharedViewModel.handle(BootstrapActions.GoToCompleted)
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun downloadRecoveryKey() = withState(sharedViewModel) { _ ->
|
private fun downloadRecoveryKey() = withState(sharedViewModel) { _ ->
|
||||||
|
Loading…
x
Reference in New Issue
Block a user