Fix back button behaviour

This commit is contained in:
tomaThomas 2024-12-07 11:27:20 +01:00
parent 4e5ff47324
commit e80082d5a8
No known key found for this signature in database
GPG key ID: DEE963DC84059108
2 changed files with 17 additions and 11 deletions

View file

@ -117,9 +117,6 @@ class MainActivity : AbsCastActivity() {
} }
} }
override fun onSupportNavigateUp(): Boolean =
findNavController(R.id.fragment_container).navigateUp()
override fun onNewIntent(intent: Intent?) { override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent) super.onNewIntent(intent)
val expand = intent?.extra<Boolean>(EXPAND_PANEL)?.value ?: false val expand = intent?.extra<Boolean>(EXPAND_PANEL)?.value ?: false

View file

@ -33,6 +33,7 @@ import androidx.core.view.isGone
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
import androidx.fragment.app.commit import androidx.fragment.app.commit
import androidx.navigation.fragment.NavHostFragment
import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.appthemehelper.util.VersionUtils
import code.name.monkey.retromusic.ADAPTIVE_COLOR_APP import code.name.monkey.retromusic.ADAPTIVE_COLOR_APP
import code.name.monkey.retromusic.ALBUM_COVER_STYLE import code.name.monkey.retromusic.ALBUM_COVER_STYLE
@ -132,6 +133,8 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
private val panelState: Int private val panelState: Int
get() = bottomSheetBehavior.state get() = bottomSheetBehavior.state
private var panelStateBefore: Int? = null
private var panelStateCurrent: Int? = null
private lateinit var binding: SlidingMusicPanelLayoutBinding private lateinit var binding: SlidingMusicPanelLayoutBinding
private var isInOneTabMode = false private var isInOneTabMode = false
@ -140,10 +143,13 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
private val onBackPressedCallback = object : OnBackPressedCallback(true) { private val onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() { override fun handleOnBackPressed() {
println("Handle back press ${bottomSheetBehavior.state}") if (handleBackPress()) {
if (!handleBackPress()) { return
remove() }
onBackPressedDispatcher.onBackPressed() val navHostFragment =
supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment
if (!navHostFragment.navController.navigateUp()) {
finish()
} }
} }
} }
@ -164,7 +170,10 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
} }
override fun onStateChanged(bottomSheet: View, newState: Int) { override fun onStateChanged(bottomSheet: View, newState: Int) {
onBackPressedCallback.isEnabled = newState == STATE_EXPANDED if (panelStateCurrent != null) {
panelStateBefore = panelStateCurrent
}
panelStateCurrent = newState
when (newState) { when (newState) {
STATE_EXPANDED -> { STATE_EXPANDED -> {
onPanelExpanded() onPanelExpanded()
@ -224,7 +233,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
navigationBarColor = surfaceColor() navigationBarColor = surfaceColor()
onBackPressedDispatcher.addCallback(onBackPressedCallback) onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
} }
private fun setupBottomSheet() { private fun setupBottomSheet() {
@ -276,7 +285,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
ALBUM_COVER_TRANSFORM, CAROUSEL_EFFECT, ALBUM_COVER_TRANSFORM, CAROUSEL_EFFECT,
ALBUM_COVER_STYLE, TOGGLE_VOLUME, EXTRA_SONG_INFO, CIRCLE_PLAY_BUTTON, ALBUM_COVER_STYLE, TOGGLE_VOLUME, EXTRA_SONG_INFO, CIRCLE_PLAY_BUTTON,
-> { -> {
chooseFragmentForTheme() chooseFragmentForTheme()
onServiceConnected() onServiceConnected()
} }
@ -408,7 +417,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
} }
private fun handleBackPress(): Boolean { private fun handleBackPress(): Boolean {
if (panelState == STATE_EXPANDED) { if (panelState == STATE_EXPANDED || (panelState == STATE_SETTLING && panelStateBefore != STATE_EXPANDED)) {
collapsePanel() collapsePanel()
return true return true
} }