Improved back nav

This commit is contained in:
Sylvain Berfini 2023-09-06 16:53:47 +02:00
parent 643a2be9a2
commit 17ef0a5ca7
17 changed files with 62 additions and 61 deletions

View file

@ -40,7 +40,6 @@
<activity
android:name=".ui.main.MainActivity"
android:enableOnBackInvokedCallback="true"
android:windowSoftInputMode="adjustResize"
android:exported="true"
android:label="@string/app_name">
@ -52,22 +51,18 @@
</activity>
<!-- Disable enableOnBackInvokedCallback so back gesture will go back in viewPager -->
<activity
android:name=".ui.welcome.WelcomeActivity"
android:enableOnBackInvokedCallback="false"
android:launchMode="singleTask"
android:resizeableActivity="true" />
<activity
android:name=".ui.assistant.AssistantActivity"
android:enableOnBackInvokedCallback="true"
android:launchMode="singleTask"
android:resizeableActivity="true" />
<activity
android:name=".ui.voip.VoipActivity"
android:enableOnBackInvokedCallback="true"
android:launchMode="singleTask"
android:turnScreenOn="true"
android:showWhenLocked="true"

View file

@ -27,6 +27,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.annotation.UiThread
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.navigation.navGraphViewModels
@ -38,11 +39,10 @@ import org.linphone.core.tools.Log
import org.linphone.databinding.AssistantLoginFragmentBinding
import org.linphone.ui.assistant.AssistantActivity
import org.linphone.ui.assistant.viewmodel.AccountLoginViewModel
import org.linphone.ui.main.fragment.GenericFragment
import org.linphone.utils.PhoneNumberUtils
@UiThread
class LoginFragment : GenericFragment() {
class LoginFragment : Fragment() {
companion object {
private const val TAG = "[Login Fragment]"
}
@ -62,10 +62,6 @@ class LoginFragment : GenericFragment() {
return binding.root
}
override fun goBack() {
requireActivity().finish()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -142,4 +138,8 @@ class LoginFragment : GenericFragment() {
)
requireActivity().window.navigationBarColor = white
}
private fun goBack() {
requireActivity().finish()
}
}

View file

@ -28,6 +28,7 @@ import android.view.ViewGroup
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.UiThread
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import androidx.navigation.navGraphViewModels
import org.linphone.LinphoneApplication.Companion.coreContext
@ -36,10 +37,9 @@ import org.linphone.core.tools.Log
import org.linphone.databinding.AssistantQrCodeScannerFragmentBinding
import org.linphone.ui.assistant.AssistantActivity
import org.linphone.ui.assistant.viewmodel.QrCodeViewModel
import org.linphone.ui.main.fragment.GenericFragment
@UiThread
class QrCodeScannerFragment : GenericFragment() {
class QrCodeScannerFragment : Fragment() {
companion object {
private const val TAG = "[Qr Code Scanner Fragment]"
}
@ -71,10 +71,6 @@ class QrCodeScannerFragment : GenericFragment() {
return binding.root
}
override fun goBack() {
findNavController().popBackStack()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -133,6 +129,10 @@ class QrCodeScannerFragment : GenericFragment() {
super.onPause()
}
private fun goBack() {
findNavController().popBackStack()
}
private fun isCameraPermissionGranted(): Boolean {
val granted = ContextCompat.checkSelfPermission(
requireContext(),

View file

@ -26,16 +26,16 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.UiThread
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import androidx.navigation.navGraphViewModels
import org.linphone.R
import org.linphone.core.tools.Log
import org.linphone.databinding.AssistantRegisterConfirmSmsCodeFragmentBinding
import org.linphone.ui.assistant.viewmodel.AccountCreationViewModel
import org.linphone.ui.main.fragment.GenericFragment
@UiThread
class RegisterCodeConfirmationFragment : GenericFragment() {
class RegisterCodeConfirmationFragment : Fragment() {
companion object {
private const val TAG = "[Register Code Confirmation Fragment]"
}
@ -55,10 +55,6 @@ class RegisterCodeConfirmationFragment : GenericFragment() {
return binding.root
}
override fun goBack() {
findNavController().popBackStack()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -97,4 +93,8 @@ class RegisterCodeConfirmationFragment : GenericFragment() {
}
}
}
private fun goBack() {
findNavController().popBackStack()
}
}

View file

@ -28,6 +28,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.UiThread
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.navigation.navGraphViewModels
@ -39,12 +40,11 @@ import org.linphone.core.tools.Log
import org.linphone.databinding.AssistantRegisterFragmentBinding
import org.linphone.ui.assistant.model.ConfirmPhoneNumberDialogModel
import org.linphone.ui.assistant.viewmodel.AccountCreationViewModel
import org.linphone.ui.main.fragment.GenericFragment
import org.linphone.utils.DialogUtils
import org.linphone.utils.PhoneNumberUtils
@UiThread
class RegisterFragment : GenericFragment() {
class RegisterFragment : Fragment() {
companion object {
private const val TAG = "[Register Fragment]"
}
@ -64,10 +64,6 @@ class RegisterFragment : GenericFragment() {
return binding.root
}
override fun goBack() {
findNavController().popBackStack()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -143,6 +139,10 @@ class RegisterFragment : GenericFragment() {
}
}
private fun goBack() {
findNavController().popBackStack()
}
private fun showPhoneNumberConfirmationDialog(number: String) {
val model = ConfirmPhoneNumberDialogModel(number)
val dialog = DialogUtils.getAccountCreationPhoneNumberConfirmationDialog(

View file

@ -26,6 +26,7 @@ import android.view.ViewGroup
import android.widget.AdapterView
import android.widget.ArrayAdapter
import androidx.annotation.UiThread
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.navigation.navGraphViewModels
@ -37,11 +38,10 @@ import org.linphone.core.tools.Log
import org.linphone.databinding.AssistantThirdPartySipAccountLoginFragmentBinding
import org.linphone.ui.assistant.AssistantActivity
import org.linphone.ui.assistant.viewmodel.ThirdPartySipAccountLoginViewModel
import org.linphone.ui.main.fragment.GenericFragment
import org.linphone.utils.PhoneNumberUtils
@UiThread
class ThirdPartySipAccountLoginFragment : GenericFragment() {
class ThirdPartySipAccountLoginFragment : Fragment() {
companion object {
private const val TAG = "[Third Party SIP Account Login Fragment]"
}
@ -74,10 +74,6 @@ class ThirdPartySipAccountLoginFragment : GenericFragment() {
return binding.root
}
override fun goBack() {
findNavController().popBackStack()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -128,4 +124,8 @@ class ThirdPartySipAccountLoginFragment : GenericFragment() {
viewModel.internationalPrefix.postValue(prefix)
}
}
private fun goBack() {
findNavController().popBackStack()
}
}

View file

@ -26,13 +26,13 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.UiThread
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import org.linphone.core.tools.Log
import org.linphone.databinding.AssistantThirdPartySipAccountWarningFragmentBinding
import org.linphone.ui.main.fragment.GenericFragment
@UiThread
class ThirdPartySipAccountWarningFragment : GenericFragment() {
class ThirdPartySipAccountWarningFragment : Fragment() {
companion object {
private const val TAG = "[Third Party SIP Account Warning Fragment]"
}
@ -48,10 +48,6 @@ class ThirdPartySipAccountWarningFragment : GenericFragment() {
return binding.root
}
override fun goBack() {
findNavController().popBackStack()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -81,4 +77,8 @@ class ThirdPartySipAccountWarningFragment : GenericFragment() {
findNavController().navigate(action)
}
}
private fun goBack() {
findNavController().popBackStack()
}
}

View file

@ -154,7 +154,7 @@ class ContactsListFragment : GenericFragment() {
"$TAG Default account changed, updating avatar in top bar & refreshing contacts list"
)
listViewModel.updateDefaultAccount()
listViewModel.applyFilter()
listViewModel.applyCurrentDefaultAccountFilter()
}
}

View file

@ -110,6 +110,16 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel()
super.onCleared()
}
@UiThread
fun applyCurrentDefaultAccountFilter() {
coreContext.postOnCoreThread { core ->
val defaultAccount = core.defaultAccount
limitSearchToLinphoneAccounts = defaultAccount?.isInSecureMode() ?: false
}
applyFilter(currentFilter)
}
@UiThread
fun toggleContactsFilter() {
limitSearchToLinphoneAccounts = !limitSearchToLinphoneAccounts

View file

@ -92,7 +92,7 @@ class DrawerMenuFragment : GenericFragment() {
viewModel.startAssistantEvent.observe(viewLifecycleOwner) {
it.consume {
startActivity(Intent(requireContext(), AssistantActivity::class.java))
startActivity(Intent(requireActivity(), AssistantActivity::class.java))
(requireActivity() as MainActivity).closeDrawerMenu()
}
}

View file

@ -27,11 +27,10 @@ import android.view.ViewGroup
import androidx.annotation.UiThread
import androidx.lifecycle.ViewModelProvider
import org.linphone.databinding.VoipIncomingCallFragmentBinding
import org.linphone.ui.main.fragment.GenericFragment
import org.linphone.ui.voip.viewmodel.CurrentCallViewModel
@UiThread
class IncomingCallFragment : GenericFragment() {
class IncomingCallFragment : GenericCallFragment() {
private lateinit var binding: VoipIncomingCallFragmentBinding
private lateinit var callViewModel: CurrentCallViewModel

View file

@ -27,11 +27,10 @@ import android.view.ViewGroup
import androidx.annotation.UiThread
import androidx.lifecycle.ViewModelProvider
import org.linphone.databinding.VoipOutgoingCallFragmentBinding
import org.linphone.ui.main.fragment.GenericFragment
import org.linphone.ui.voip.viewmodel.CurrentCallViewModel
@UiThread
class OutgoingCallFragment : GenericFragment() {
class OutgoingCallFragment : GenericCallFragment() {
private lateinit var binding: VoipOutgoingCallFragmentBinding
private lateinit var callViewModel: CurrentCallViewModel

View file

@ -50,14 +50,6 @@ class WelcomeActivity : AppCompatActivity() {
private val pageChangedCallback = PageChangedCallback()
override fun onBackPressed() {
if (viewPager.currentItem == 0) {
super.onBackPressed()
} else {
viewPager.currentItem = viewPager.currentItem - 1
}
}
override fun onCreate(savedInstanceState: Bundle?) {
WindowCompat.setDecorFitsSystemWindows(window, true)
super.onCreate(savedInstanceState)

View file

@ -23,9 +23,11 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.UiThread
import androidx.fragment.app.Fragment
import org.linphone.R
@UiThread
class WelcomePage1Fragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,

View file

@ -23,9 +23,11 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.UiThread
import androidx.fragment.app.Fragment
import org.linphone.R
@UiThread
class WelcomePage2Fragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,

View file

@ -23,9 +23,11 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.UiThread
import androidx.fragment.app.Fragment
import org.linphone.R
@UiThread
class WelcomePage3Fragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,

View file

@ -69,9 +69,9 @@
<action
android:id="@+id/action_contactsFragment_to_callsFragment"
app:destination="@id/callsFragment"
app:popUpTo="@id/callsFragment"
app:popUpToInclusive="true"
app:launchSingleTop="true"/>
app:launchSingleTop="true"
app:popUpTo="@id/contactsFragment"
app:popUpToInclusive="true" />
</fragment>
<fragment
@ -82,9 +82,9 @@
<action
android:id="@+id/action_callsFragment_to_contactsFragment"
app:destination="@id/contactsFragment"
app:popUpTo="@id/contactsFragment"
app:popUpToInclusive="true"
app:launchSingleTop="true" />
app:launchSingleTop="true"
app:popUpTo="@id/callsFragment"
app:popUpToInclusive="true" />
<action
android:id="@+id/action_callsFragment_to_conversationsFragment"
app:destination="@id/conversationsFragment" />