Skip to content
Snippets Groups Projects
Commit 44e0510a authored by Pierre Nicolas's avatar Pierre Nicolas :joy: Committed by Adrien Béraud
Browse files

welcome view: fix crash when restarting activity

GitLab: #1389
Change-Id: I593ec94b4166c705843e0b7ad57c720774d827f5
parent 745266c7
No related branches found
No related tags found
No related merge requests found
package cx.ring.fragments package cx.ring.fragments
import android.os.Bundle import android.os.Bundle
import android.text.Editable
import android.text.InputFilter import android.text.InputFilter
import android.text.TextWatcher
import android.text.method.KeyListener import android.text.method.KeyListener
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.core.widget.doOnTextChanged
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
...@@ -21,6 +22,7 @@ import cx.ring.utils.ActionHelper.shareAccount ...@@ -21,6 +22,7 @@ import cx.ring.utils.ActionHelper.shareAccount
import cx.ring.utils.KeyboardVisibilityManager.showKeyboard import cx.ring.utils.KeyboardVisibilityManager.showKeyboard
import cx.ring.utils.RegisteredNameFilter import cx.ring.utils.RegisteredNameFilter
import cx.ring.viewmodel.JamiIdStatus import cx.ring.viewmodel.JamiIdStatus
import cx.ring.viewmodel.JamiIdUiState
import cx.ring.viewmodel.JamiIdViewModel import cx.ring.viewmodel.JamiIdViewModel
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
...@@ -32,6 +34,15 @@ class JamiIdFragment : Fragment() { ...@@ -32,6 +34,15 @@ class JamiIdFragment : Fragment() {
private lateinit var binding: JamiIdLayoutBinding private lateinit var binding: JamiIdLayoutBinding
private val jamiIdViewModel: JamiIdViewModel by viewModels({ requireParentFragment() }) 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. // This var is used in a trick to get ellipsize to work. Allows to EditText.setEnabled.
private lateinit var keyListener: KeyListener private lateinit var keyListener: KeyListener
...@@ -47,9 +58,6 @@ class JamiIdFragment : Fragment() { ...@@ -47,9 +58,6 @@ class JamiIdFragment : Fragment() {
binding = this binding = this
jamiIdEditText.filters = arrayOf<InputFilter>(RegisteredNameFilter()) jamiIdEditText.filters = arrayOf<InputFilter>(RegisteredNameFilter())
keyListener = jamiIdEditText.keyListener!! keyListener = jamiIdEditText.keyListener!!
jamiIdEditText.doOnTextChanged { text, _, _, _ ->
jamiIdViewModel.textChanged(text.toString())
}
}.root }.root
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
...@@ -58,18 +66,25 @@ class JamiIdFragment : Fragment() { ...@@ -58,18 +66,25 @@ class JamiIdFragment : Fragment() {
// Observe the uiState and update the UI // Observe the uiState and update the UI
viewLifecycleOwner.lifecycleScope.launch { viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
var prevState: JamiIdUiState? = null
jamiIdViewModel.uiState.collect { uiState -> jamiIdViewModel.uiState.collect { uiState ->
if (uiState.jamiIdStatus == prevState?.jamiIdStatus) return@collect
prevState = uiState
when (uiState.jamiIdStatus) { when (uiState.jamiIdStatus) {
JamiIdStatus.USERNAME_NOT_DEFINED -> JamiIdStatus.USERNAME_NOT_DEFINED ->
setUsernameNotDefinedUiState( setUsernameNotDefinedUiState(
username = uiState.username username = uiState.username
) )
JamiIdStatus.EDITING_USERNAME_INITIAL -> JamiIdStatus.EDITING_USERNAME_INITIAL -> {
binding.jamiIdEditText.addTextChangedListener(textWatcher)
setEditingUsernameInitialUiState( setEditingUsernameInitialUiState(
typingUsername = uiState.editedUsername typingUsername = uiState.editedUsername
) )
}
JamiIdStatus.EDITING_USERNAME_LOADING -> JamiIdStatus.EDITING_USERNAME_LOADING ->
setEditingUsernameLoadingUiState( setEditingUsernameLoadingUiState(
...@@ -86,10 +101,12 @@ class JamiIdFragment : Fragment() { ...@@ -86,10 +101,12 @@ class JamiIdFragment : Fragment() {
typingUsername = uiState.editedUsername typingUsername = uiState.editedUsername
) )
JamiIdStatus.USERNAME_DEFINED -> JamiIdStatus.USERNAME_DEFINED -> {
binding.jamiIdEditText.removeTextChangedListener(textWatcher)
setUsernameDefinedUiState( setUsernameDefinedUiState(
username = uiState.username username = uiState.username
) )
}
else -> { else -> {
Log.w(TAG, "Unknown JamiIdStatus: ${uiState.jamiIdStatus}") Log.w(TAG, "Unknown JamiIdStatus: ${uiState.jamiIdStatus}")
......
...@@ -31,7 +31,7 @@ class WelcomeJamiFragment : Fragment() { ...@@ -31,7 +31,7 @@ class WelcomeJamiFragment : Fragment() {
private val jamiIdViewModel by lazy { ViewModelProvider(this)[JamiIdViewModel::class.java] } private val jamiIdViewModel by lazy { ViewModelProvider(this)[JamiIdViewModel::class.java] }
companion object { companion object {
private val TAG = WelcomeJamiViewModel::class.simpleName!! private val TAG = WelcomeJamiFragment::class.simpleName!!
} }
override fun onCreateView( override fun onCreateView(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment