From 44e0510a65bab66ad7112c44eb0c25da341305bc Mon Sep 17 00:00:00 2001 From: Pierre Nicolas <pierre.nicolas@savoirfairelinux.com> Date: Mon, 2 Oct 2023 14:13:42 -0400 Subject: [PATCH] welcome view: fix crash when restarting activity GitLab: #1389 Change-Id: I593ec94b4166c705843e0b7ad57c720774d827f5 --- .../java/cx/ring/fragments/JamiIdFragment.kt | 29 +++++++++++++++---- .../cx/ring/fragments/WelcomeJamiFragment.kt | 2 +- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/jami-android/app/src/main/java/cx/ring/fragments/JamiIdFragment.kt b/jami-android/app/src/main/java/cx/ring/fragments/JamiIdFragment.kt index 6afb103fe..f3e29dfbc 100644 --- a/jami-android/app/src/main/java/cx/ring/fragments/JamiIdFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/fragments/JamiIdFragment.kt @@ -1,14 +1,15 @@ package cx.ring.fragments import android.os.Bundle +import android.text.Editable import android.text.InputFilter +import android.text.TextWatcher import android.text.method.KeyListener import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.annotation.DrawableRes import androidx.appcompat.content.res.AppCompatResources -import androidx.core.widget.doOnTextChanged import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.Lifecycle @@ -21,6 +22,7 @@ import cx.ring.utils.ActionHelper.shareAccount import cx.ring.utils.KeyboardVisibilityManager.showKeyboard import cx.ring.utils.RegisteredNameFilter import cx.ring.viewmodel.JamiIdStatus +import cx.ring.viewmodel.JamiIdUiState import cx.ring.viewmodel.JamiIdViewModel import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch @@ -32,6 +34,15 @@ class JamiIdFragment : Fragment() { private lateinit var binding: JamiIdLayoutBinding private val jamiIdViewModel: JamiIdViewModel by viewModels({ requireParentFragment() }) + private val textWatcher = object : TextWatcher { + override fun afterTextChanged(s: Editable?) {} + + override fun beforeTextChanged(text: CharSequence?, start: Int, count: Int, after: Int) {} + + override fun onTextChanged(text: CharSequence?, start: Int, before: Int, count: Int) = + jamiIdViewModel.textChanged(text?.toString()!!) + } + // This var is used in a trick to get ellipsize to work. Allows to EditText.setEnabled. private lateinit var keyListener: KeyListener @@ -47,9 +58,6 @@ class JamiIdFragment : Fragment() { binding = this jamiIdEditText.filters = arrayOf<InputFilter>(RegisteredNameFilter()) keyListener = jamiIdEditText.keyListener!! - jamiIdEditText.doOnTextChanged { text, _, _, _ -> - jamiIdViewModel.textChanged(text.toString()) - } }.root override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -58,18 +66,25 @@ class JamiIdFragment : Fragment() { // Observe the uiState and update the UI viewLifecycleOwner.lifecycleScope.launch { viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { + var prevState: JamiIdUiState? = null + jamiIdViewModel.uiState.collect { uiState -> + if (uiState.jamiIdStatus == prevState?.jamiIdStatus) return@collect + prevState = uiState + when (uiState.jamiIdStatus) { JamiIdStatus.USERNAME_NOT_DEFINED -> setUsernameNotDefinedUiState( username = uiState.username ) - JamiIdStatus.EDITING_USERNAME_INITIAL -> + JamiIdStatus.EDITING_USERNAME_INITIAL -> { + binding.jamiIdEditText.addTextChangedListener(textWatcher) setEditingUsernameInitialUiState( typingUsername = uiState.editedUsername ) + } JamiIdStatus.EDITING_USERNAME_LOADING -> setEditingUsernameLoadingUiState( @@ -86,10 +101,12 @@ class JamiIdFragment : Fragment() { typingUsername = uiState.editedUsername ) - JamiIdStatus.USERNAME_DEFINED -> + JamiIdStatus.USERNAME_DEFINED -> { + binding.jamiIdEditText.removeTextChangedListener(textWatcher) setUsernameDefinedUiState( username = uiState.username ) + } else -> { Log.w(TAG, "Unknown JamiIdStatus: ${uiState.jamiIdStatus}") diff --git a/jami-android/app/src/main/java/cx/ring/fragments/WelcomeJamiFragment.kt b/jami-android/app/src/main/java/cx/ring/fragments/WelcomeJamiFragment.kt index 47c7cd9f3..1b7d0b3d6 100644 --- a/jami-android/app/src/main/java/cx/ring/fragments/WelcomeJamiFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/fragments/WelcomeJamiFragment.kt @@ -31,7 +31,7 @@ class WelcomeJamiFragment : Fragment() { private val jamiIdViewModel by lazy { ViewModelProvider(this)[JamiIdViewModel::class.java] } companion object { - private val TAG = WelcomeJamiViewModel::class.simpleName!! + private val TAG = WelcomeJamiFragment::class.simpleName!! } override fun onCreateView( -- GitLab