Fixed bottom sheet for Immersive mode
This commit is contained in:
parent
6a391219a8
commit
c2647b9160
5 changed files with 25 additions and 28 deletions
|
@ -14,17 +14,16 @@
|
|||
*/
|
||||
package code.name.monkey.retromusic.activities.base
|
||||
|
||||
import android.graphics.Color
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.ViewTreeObserver
|
||||
import android.widget.FrameLayout
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.commit
|
||||
import code.name.monkey.appthemehelper.util.ColorUtil
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.RetroBottomSheetBehavior
|
||||
import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding
|
||||
|
@ -55,7 +54,6 @@ import code.name.monkey.retromusic.fragments.queue.PlayingQueueFragment
|
|||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||
import code.name.monkey.retromusic.model.CategoryInfo
|
||||
import code.name.monkey.retromusic.util.PreferenceUtil
|
||||
import code.name.monkey.retromusic.util.RetroUtil
|
||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior.*
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
|
@ -66,6 +64,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
var fromNotification: Boolean = false
|
||||
}
|
||||
|
||||
private var windowInsets: WindowInsetsCompat? = null
|
||||
protected val libraryViewModel by viewModel<LibraryViewModel>()
|
||||
private lateinit var bottomSheetBehavior: RetroBottomSheetBehavior<FrameLayout>
|
||||
private var playerFragment: AbsPlayerFragment? = null
|
||||
|
@ -81,8 +80,6 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
|
||||
override fun onSlide(bottomSheet: View, slideOffset: Float) {
|
||||
setMiniPlayerAlphaProgress(slideOffset)
|
||||
binding.dimBackground.show()
|
||||
binding.dimBackground.alpha = slideOffset
|
||||
}
|
||||
|
||||
override fun onStateChanged(bottomSheet: View, newState: Int) {
|
||||
|
@ -92,7 +89,6 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
}
|
||||
STATE_COLLAPSED -> {
|
||||
onPanelCollapsed()
|
||||
binding.dimBackground.hide()
|
||||
if (fromNotification) {
|
||||
hideBottomBar(MusicPlayerRemote.playingQueue.isEmpty())
|
||||
fromNotification = false
|
||||
|
@ -117,17 +113,16 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
super.onCreate(savedInstanceState)
|
||||
binding = createContentView()
|
||||
setContentView(binding.root)
|
||||
ViewCompat.setOnApplyWindowInsetsListener(
|
||||
binding.root
|
||||
) { _, insets ->
|
||||
windowInsets = insets
|
||||
insets
|
||||
}
|
||||
binding.bottomNavigationView.drawAboveNavBarWithPadding()
|
||||
chooseFragmentForTheme()
|
||||
setupSlidingUpPanel()
|
||||
setupBottomSheet()
|
||||
|
||||
val themeColor = resolveColor(android.R.attr.windowBackground, Color.GRAY)
|
||||
binding.dimBackground.setBackgroundColor(ColorUtil.withAlpha(themeColor, 0.5f))
|
||||
binding.dimBackground.setOnClickListener {
|
||||
println("dimBackground")
|
||||
collapsePanel()
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupBottomSheet() {
|
||||
|
@ -291,13 +286,15 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
}
|
||||
|
||||
fun hideBottomBar(hide: Boolean) {
|
||||
val heightOfBar = RetroUtil.getNavigationBarHeight() +
|
||||
if (MusicPlayerRemote.isCasting) dip(R.dimen.cast_mini_player_height) else dip(R.dimen.mini_player_height)
|
||||
val heightOfBar =
|
||||
windowInsets.safeGetBottomInsets() +
|
||||
if (MusicPlayerRemote.isCasting) dip(R.dimen.cast_mini_player_height) else dip(R.dimen.mini_player_height)
|
||||
val heightOfBarWithTabs = heightOfBar + dip(R.dimen.bottom_nav_height)
|
||||
val isVisible = binding.bottomNavigationView.isVisible
|
||||
if (hide) {
|
||||
bottomSheetBehavior.isHideable = true
|
||||
bottomSheetBehavior.peekHeight = 0
|
||||
bottomSheetBehavior.state = STATE_HIDDEN
|
||||
libraryViewModel.setFabMargin(if (isVisible) dip(R.dimen.bottom_nav_height) else 0)
|
||||
ViewCompat.setElevation(binding.slidingPanel, 0f)
|
||||
ViewCompat.setElevation(binding.bottomNavigationView, 10f)
|
||||
|
@ -312,11 +309,11 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() {
|
|||
if (bottomSheetBehavior.state != STATE_EXPANDED)
|
||||
getBottomNavigationView().translateYAnimate(0F)
|
||||
bottomSheetBehavior.peekHeightAnimate(heightOfBarWithTabs)
|
||||
libraryViewModel.setFabMargin(heightOfBarWithTabs - RetroUtil.getNavigationBarHeight())
|
||||
libraryViewModel.setFabMargin(heightOfBarWithTabs - windowInsets.safeGetBottomInsets())
|
||||
} else {
|
||||
println("Details")
|
||||
bottomSheetBehavior.peekHeight = heightOfBar
|
||||
libraryViewModel.setFabMargin(heightOfBar - RetroUtil.getNavigationBarHeight())
|
||||
libraryViewModel.setFabMargin(heightOfBar - windowInsets.safeGetBottomInsets())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
package code.name.monkey.retromusic.extensions
|
||||
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
|
||||
fun WindowInsetsCompat?.safeGetBottomInsets(): Int {
|
||||
return this?.getInsets(WindowInsetsCompat.Type.navigationBars())?.bottom ?: 0
|
||||
}
|
|
@ -28,6 +28,7 @@ import androidx.core.animation.doOnEnd
|
|||
import androidx.core.animation.doOnStart
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.WindowInsetsCompat.Type.navigationBars
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import code.name.monkey.appthemehelper.ThemeStore
|
||||
import code.name.monkey.appthemehelper.util.TintHelper
|
||||
|
@ -141,7 +142,7 @@ fun View.drawAboveNavBar() {
|
|||
) { v: View, insets: WindowInsetsCompat ->
|
||||
v.updateLayoutParams<MarginLayoutParams> {
|
||||
bottomMargin =
|
||||
insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom
|
||||
insets.getInsets(navigationBars()).bottom
|
||||
}
|
||||
insets
|
||||
}
|
||||
|
@ -154,7 +155,7 @@ fun View.drawAboveNavBarWithPadding() {
|
|||
ViewCompat.setOnApplyWindowInsetsListener(
|
||||
(this)
|
||||
) { v: View, insets: WindowInsetsCompat ->
|
||||
val navBarHeight = insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom
|
||||
val navBarHeight = insets.getInsets(navigationBars()).bottom
|
||||
v.updatePadding(bottom = navBarHeight)
|
||||
insets
|
||||
}
|
||||
|
|
|
@ -16,14 +16,6 @@
|
|||
app:defaultNavHost="true"
|
||||
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" />
|
||||
|
||||
<View
|
||||
android:id="@+id/dimBackground"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:visibility="gone" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/slidingPanel"
|
||||
style="@style/BottomSheetStyle"
|
||||
|
@ -31,7 +23,6 @@
|
|||
android:layout_height="wrap_content"
|
||||
app:behavior_hideable="true"
|
||||
app:behavior_peekHeight="0dp"
|
||||
app:gestureInsetBottomIgnored="true"
|
||||
app:layout_behavior="code.name.monkey.retromusic.RetroBottomSheetBehavior">
|
||||
|
||||
<FrameLayout
|
||||
|
|
|
@ -191,6 +191,7 @@
|
|||
<style name="BottomSheetStyle" parent="Widget.Material3.BottomSheet">
|
||||
<item name="android:maxWidth">@empty</item>
|
||||
<item name="android:backgroundTint">?attr/bottomSheetTint</item>
|
||||
<item name="enableEdgeToEdge">true</item>
|
||||
</style>
|
||||
|
||||
<style name="MaterialCardViewStroke">
|
||||
|
|
Loading…
Reference in a new issue