diff --git a/app/src/main/java/org/linphone/telecom/TelecomManager.kt b/app/src/main/java/org/linphone/telecom/TelecomManager.kt index 16727b081..adaf5cdfb 100644 --- a/app/src/main/java/org/linphone/telecom/TelecomManager.kt +++ b/app/src/main/java/org/linphone/telecom/TelecomManager.kt @@ -102,13 +102,14 @@ class TelecomManager CallAttributesCompat.DIRECTION_INCOMING } + val type = CallAttributesCompat.CALL_TYPE_AUDIO_CALL or CallAttributesCompat.CALL_TYPE_VIDEO_CALL val capabilities = CallAttributesCompat.SUPPORTS_SET_INACTIVE or CallAttributesCompat.SUPPORTS_TRANSFER val callAttributes = CallAttributesCompat( displayName, uri, direction, - CallAttributesCompat.CALL_TYPE_AUDIO_CALL, + type, capabilities ) Log.i("$TAG Adding call to Telecom's CallsManager with attributes [$callAttributes]") diff --git a/app/src/main/java/org/linphone/ui/main/fragment/AddParticipantsFragment.kt b/app/src/main/java/org/linphone/ui/main/fragment/AddParticipantsFragment.kt index 84462060a..4de2c34f7 100644 --- a/app/src/main/java/org/linphone/ui/main/fragment/AddParticipantsFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/fragment/AddParticipantsFragment.kt @@ -23,6 +23,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.activity.OnBackPressedCallback import androidx.annotation.UiThread import androidx.core.view.doOnPreDraw import androidx.lifecycle.ViewModelProvider @@ -47,6 +48,31 @@ class AddParticipantsFragment : GenericAddressPickerFragment() { private val args: AddParticipantsFragmentArgs by navArgs() + private val onBackPressedCallback = object : OnBackPressedCallback(false) { + override fun handleOnBackPressed() { + Log.d("$TAG ${getFragmentRealClassName()} handleOnBackPressed") + try { + if (!goBack()) { + Log.d( + "$TAG ${getFragmentRealClassName()}'s goBack() method returned false, disabling back pressed callback and trying again" + ) + isEnabled = false + try { + requireActivity().onBackPressedDispatcher.onBackPressed() + } catch (ise: IllegalStateException) { + Log.w( + "$TAG ${getFragmentRealClassName()} Can't go back: $ise" + ) + } + } + } catch (ise: IllegalStateException) { + Log.e( + "$TAG ${getFragmentRealClassName()} Can't go back: $ise" + ) + } + } + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -75,6 +101,11 @@ class AddParticipantsFragment : GenericAddressPickerFragment() { postponeEnterTransition() super.onViewCreated(view, savedInstanceState) + requireActivity().onBackPressedDispatcher.addCallback( + viewLifecycleOwner, + onBackPressedCallback + ) + binding.lifecycleOwner = viewLifecycleOwner binding.viewModel = viewModel observeToastEvents(viewModel) @@ -110,5 +141,29 @@ class AddParticipantsFragment : GenericAddressPickerFragment() { goBack() } } + + sharedViewModel.isSlidingPaneSlideable.observe(viewLifecycleOwner) { slideable -> + val enabled = backPressedCallBackEnabled(slideable) + onBackPressedCallback.isEnabled = enabled + Log.d( + "$TAG ${getFragmentRealClassName()} Our own back press callback is ${if (enabled) "enabled" else "disabled"}" + ) + } + } + + override fun onDestroyView() { + super.onDestroyView() + + onBackPressedCallback.remove() + } + + private fun backPressedCallBackEnabled(slideable: Boolean): Boolean { + // This allow to navigate a SlidingPane child nav graph. + // This only concerns fragments for which the nav graph is inside a SlidingPane layout. + // In our case it's all graphs except the main one. + Log.d( + "$TAG ${getFragmentRealClassName()} Sliding pane is ${if (slideable) "slideable" else "flat"}" + ) + return slideable } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b2b3b78f9..c81c5d88e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,14 +12,14 @@ appcompat = "1.7.0" constraintLayout = "2.2.0" coreKtx = "1.15.0" splashscreen = "1.2.0-alpha02" -telecom = "1.0.0-alpha03" +telecom = "1.0.0-beta01" media = "1.7.0" recyclerview = "1.3.2" slidingpanelayout = "1.2.0" window = "1.3.0" gridlayout = "1.0.0" securityCryptoKtx = "1.1.0-alpha06" -navigation = "2.8.4" +navigation = "2.8.5" emoji2 = "1.5.0" car = "1.7.0-beta03" flexbox = "3.0.0"