mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-17 11:28:06 +00:00
Fixed double back gesture required to leave conversations list when app is opened from shortcut
This commit is contained in:
parent
ef1669dd4c
commit
fd088fdbc8
3 changed files with 26 additions and 11 deletions
|
|
@ -52,15 +52,16 @@ abstract class AbstractTopBarFragment : GenericFragment() {
|
|||
abstract fun onDefaultAccountChanged()
|
||||
|
||||
fun initSlidingPane(slidingPane: SlidingPaneLayout) {
|
||||
val slidingPaneBackPressedCallback = SlidingPaneBackPressedCallback(slidingPane)
|
||||
requireActivity().onBackPressedDispatcher.addCallback(
|
||||
viewLifecycleOwner,
|
||||
slidingPaneBackPressedCallback
|
||||
)
|
||||
|
||||
view?.doOnPreDraw {
|
||||
slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED
|
||||
|
||||
sharedViewModel.isSlidingPaneSlideable.value = slidingPane.isSlideable
|
||||
|
||||
requireActivity().onBackPressedDispatcher.addCallback(
|
||||
viewLifecycleOwner,
|
||||
SlidingPaneBackPressedCallback(slidingPane)
|
||||
)
|
||||
slidingPaneBackPressedCallback.isEnabled = slidingPane.isSlideable
|
||||
}
|
||||
|
||||
sharedViewModel.closeSlidingPaneEvent.observe(
|
||||
|
|
|
|||
|
|
@ -82,7 +82,11 @@ abstract class GenericFragment : Fragment() {
|
|||
}
|
||||
|
||||
sharedViewModel.isSlidingPaneSlideable.observe(viewLifecycleOwner) {
|
||||
onBackPressedCallback.isEnabled = backPressedCallBackEnabled()
|
||||
val enabled = backPressedCallBackEnabled()
|
||||
onBackPressedCallback.isEnabled = enabled
|
||||
Log.d(
|
||||
"$TAG ${getFragmentRealClassName()} Our own back press callback is ${if (enabled) "enabled" else "disabled"}"
|
||||
)
|
||||
}
|
||||
|
||||
requireActivity().onBackPressedDispatcher.addCallback(
|
||||
|
|
@ -103,6 +107,7 @@ abstract class GenericFragment : Fragment() {
|
|||
|
||||
protected open fun goBack(): Boolean {
|
||||
try {
|
||||
Log.d("$TAG ${getFragmentRealClassName()} Calling onBackPressed on activity dispatcher")
|
||||
requireActivity().onBackPressedDispatcher.onBackPressed()
|
||||
} catch (ise: IllegalStateException) {
|
||||
Log.w("$TAG ${getFragmentRealClassName()}.goBack() can't go back: $ise")
|
||||
|
|
@ -115,14 +120,15 @@ abstract class GenericFragment : Fragment() {
|
|||
// 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.
|
||||
if (!isSlidingPaneChild) return false
|
||||
if (!isSlidingPaneChild) {
|
||||
Log.d("$TAG ${getFragmentRealClassName()} isn't a sliding pane child, disable callback")
|
||||
return false
|
||||
}
|
||||
|
||||
val isSlidingPaneFlat = sharedViewModel.isSlidingPaneSlideable.value == false
|
||||
Log.d(
|
||||
"$TAG ${getFragmentRealClassName()} isSlidingPaneFlat ? $isSlidingPaneFlat"
|
||||
)
|
||||
if (isSlidingPaneFlat) return false
|
||||
|
||||
return true
|
||||
return !isSlidingPaneFlat
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import android.view.View
|
|||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
||||
import org.linphone.core.tools.Log
|
||||
|
||||
@UiThread
|
||||
class SlidingPaneBackPressedCallback(private val slidingPaneLayout: SlidingPaneLayout) :
|
||||
|
|
@ -30,25 +31,32 @@ class SlidingPaneBackPressedCallback(private val slidingPaneLayout: SlidingPaneL
|
|||
slidingPaneLayout.isSlideable && slidingPaneLayout.isOpen
|
||||
),
|
||||
SlidingPaneLayout.PanelSlideListener {
|
||||
companion object {
|
||||
private const val TAG = "[Sliding Pane Back Pressed Callback]"
|
||||
}
|
||||
|
||||
init {
|
||||
slidingPaneLayout.addPanelSlideListener(this)
|
||||
}
|
||||
|
||||
override fun handleOnBackPressed() {
|
||||
Log.d("$TAG handleOnBackPressed: hiding keyboard & closing pane")
|
||||
slidingPaneLayout.hideKeyboard()
|
||||
slidingPaneLayout.closePane()
|
||||
}
|
||||
|
||||
override fun onPanelOpened(panel: View) {
|
||||
Log.d("$TAG Panel is opened, enabling back press callback")
|
||||
isEnabled = true
|
||||
}
|
||||
|
||||
override fun onPanelClosed(panel: View) {
|
||||
Log.d("$TAG Panel is closed, disabled back press callback")
|
||||
isEnabled = false
|
||||
}
|
||||
|
||||
override fun onPanelSlide(panel: View, slideOffset: Float) {
|
||||
Log.d("$TAG Panel is sliding, enabling back press callback")
|
||||
isEnabled = true
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue