From 94ccecc012e567aa7492b8527994572751911d91 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Fri, 22 Oct 2021 20:23:23 +0530 Subject: [PATCH] Fixed overlapping navbar in landscape --- .../retromusic/activities/MainActivity.kt | 2 + .../base/AbsSlidingMusicPanelActivity.kt | 5 ++ .../retromusic/extensions/InsetsExtensions.kt | 2 +- .../retromusic/extensions/ViewExtensions.kt | 65 ++++++++++++++----- .../fragments/base/AbsRecyclerViewFragment.kt | 2 + .../fragments/folder/FoldersFragment.kt | 2 + .../retromusic/fragments/home/HomeFragment.kt | 3 + .../player/gradient/GradientPlayerFragment.kt | 9 ++- .../fragments/player/normal/PlayerFragment.kt | 3 +- .../fragments/search/SearchFragment.kt | 1 + .../main/res/layout-land/fragment_player.xml | 1 + .../res/layout/fragment_main_recycler.xml | 3 +- 12 files changed, 72 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt index 83dafade..004fa1fb 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/MainActivity.kt @@ -27,6 +27,7 @@ import code.name.monkey.retromusic.* import code.name.monkey.retromusic.activities.base.AbsCastActivity import code.name.monkey.retromusic.databinding.SlidingMusicPanelLayoutBinding import code.name.monkey.retromusic.extensions.currentFragment +import code.name.monkey.retromusic.extensions.drawNextToNavbar import code.name.monkey.retromusic.extensions.extra import code.name.monkey.retromusic.extensions.findNavController import code.name.monkey.retromusic.fragments.base.AbsRecyclerViewFragment @@ -39,6 +40,7 @@ import code.name.monkey.retromusic.repository.PlaylistSongsLoader import code.name.monkey.retromusic.service.MusicService import code.name.monkey.retromusic.util.AppRater import code.name.monkey.retromusic.util.PreferenceUtil +import com.google.android.material.appbar.AppBarLayout import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.launch import org.koin.android.ext.android.get diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index 168a7e96..64fbc2db 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -55,6 +55,7 @@ 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 @@ -121,7 +122,11 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { windowInsets = insets insets } + //binding.fragmentContainer.drawAboveNavBar() binding.bottomNavigationView.drawAboveNavBarWithPadding() + if (RetroUtil.isLandscape()) { + binding.slidingPanel.drawAboveNavBarWithPadding(true) + } chooseFragmentForTheme() setupSlidingUpPanel() setupBottomSheet() diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/InsetsExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/InsetsExtensions.kt index 48a60554..b24168a3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/InsetsExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/InsetsExtensions.kt @@ -3,5 +3,5 @@ package code.name.monkey.retromusic.extensions import androidx.core.view.WindowInsetsCompat fun WindowInsetsCompat?.safeGetBottomInsets(): Int { - return this?.getInsets(WindowInsetsCompat.Type.navigationBars())?.bottom ?: 0 + return this?.getInsets(WindowInsetsCompat.Type.systemBars())?.bottom ?: 0 } diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt index a2c0a9e0..de587396 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ViewExtensions.kt @@ -33,6 +33,7 @@ import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.TintHelper import code.name.monkey.retromusic.util.PreferenceUtil import com.afollestad.materialdialogs.utils.MDUtil.updatePadding +import com.google.android.material.appbar.AppBarLayout import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.imageview.ShapeableImageView import com.google.android.material.shape.ShapeAppearanceModel @@ -140,27 +141,34 @@ fun View.drawAboveNavBar() { val initialMargin = recordInitialMarginForView(this) ViewCompat.setOnApplyWindowInsetsListener( (this) - ) { v: View, insets: WindowInsetsCompat -> - v.updateLayoutParams { - bottomMargin = initialMargin.bottom + - insets.getInsets(navigationBars()).bottom + ) { _: View, windowInsets: WindowInsetsCompat -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + // Apply the insets as a margin to the view. + updateLayoutParams { + leftMargin = initialMargin.left + insets.left + bottomMargin = initialMargin.bottom + insets.bottom + rightMargin = initialMargin.right + insets.right } - insets + windowInsets } } /** * This will draw our view above the navigation bar instead of behind it by adding padding. */ -fun View.drawAboveNavBarWithPadding() { +fun View.drawAboveNavBarWithPadding(consume: Boolean = false) { val initialPadding = recordInitialPaddingForView(this) ViewCompat.setOnApplyWindowInsetsListener( (this) - ) { v: View, insets: WindowInsetsCompat -> - val navBarHeight = insets.getInsets(navigationBars()).bottom - v.updatePadding(bottom = initialPadding.bottom + navBarHeight) - insets + ) { v: View, windowInsets: WindowInsetsCompat -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.updatePadding( + left = initialPadding.left + insets.left, + bottom = initialPadding.bottom + insets.bottom, + right = initialPadding.right + insets.right + ) + if (consume) WindowInsetsCompat.CONSUMED else windowInsets } requestApplyInsetsWhenAttached() } @@ -183,17 +191,38 @@ fun View.requestApplyInsetsWhenAttached() { } } +fun AppBarLayout.drawNextToNavbar() { + val initialMargin = recordInitialMarginForView(this) -data class InitialMargin(val left: Int, val top: Int, - val right: Int, val bottom: Int) + ViewCompat.setOnApplyWindowInsetsListener( + (this) + ) { v: View, windowInsets: WindowInsetsCompat -> + val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.updatePadding( + top = initialMargin.top + insets.top, + left = initialMargin.left + insets.left, + right = initialMargin.right + insets.right + ) + windowInsets + } + requestApplyInsetsWhenAttached() +} + +data class InitialMargin( + val left: Int, val top: Int, + val right: Int, val bottom: Int +) private fun recordInitialMarginForView(view: View) = InitialMargin( - view.marginLeft, view.marginTop, view.marginRight, view.marginBottom) + view.marginLeft, view.marginTop, view.marginRight, view.marginBottom +) +data class InitialPadding( + val left: Int, val top: Int, + val right: Int, val bottom: Int +) -data class InitialPadding(val left: Int, val top: Int, - val right: Int, val bottom: Int) - -private fun recordInitialPaddingForView(view: View) = InitialMargin( - view.paddingLeft, view.paddingTop, view.paddingRight, view.paddingBottom) +private fun recordInitialPaddingForView(view: View) = InitialPadding( + view.paddingLeft, view.paddingTop, view.paddingRight, view.paddingBottom +) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt index cda1b1a3..0e21dde2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsRecyclerViewFragment.kt @@ -34,6 +34,7 @@ import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog import code.name.monkey.retromusic.extensions.accentColor import code.name.monkey.retromusic.extensions.dip +import code.name.monkey.retromusic.extensions.drawNextToNavbar import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.util.ThemedFastScroller.create import com.google.android.material.shape.MaterialShapeDrawable @@ -94,6 +95,7 @@ abstract class AbsRecyclerViewFragment, LM : Recycle bottomMargin = it } }) + binding.appBarLayout.drawNextToNavbar() } open fun onShuffleClicked() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt index 312b2f4f..68bcb282 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/folder/FoldersFragment.kt @@ -40,6 +40,7 @@ import code.name.monkey.retromusic.adapter.Storage import code.name.monkey.retromusic.adapter.StorageAdapter import code.name.monkey.retromusic.adapter.StorageClickListener import code.name.monkey.retromusic.databinding.FragmentFolderBinding +import code.name.monkey.retromusic.extensions.drawNextToNavbar import code.name.monkey.retromusic.extensions.surfaceColor import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.fragments.folder.FoldersFragment.ListPathsAsyncTask.OnPathsListedCallback @@ -123,6 +124,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), } } }) + binding.appBarLayout.drawNextToNavbar() } private fun setUpTitle() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt index f7409d68..0d7bd31a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/home/HomeFragment.kt @@ -37,11 +37,13 @@ import code.name.monkey.retromusic.databinding.FragmentBannerHomeBinding import code.name.monkey.retromusic.databinding.FragmentHomeBinding import code.name.monkey.retromusic.dialogs.CreatePlaylistDialog import code.name.monkey.retromusic.dialogs.ImportPlaylistDialog +import code.name.monkey.retromusic.extensions.drawNextToNavbar import code.name.monkey.retromusic.fragments.base.AbsMainActivityFragment import code.name.monkey.retromusic.glide.GlideApp import code.name.monkey.retromusic.glide.RetroGlideExtension import code.name.monkey.retromusic.util.PreferenceUtil import com.google.android.gms.cast.framework.CastButtonFactory +import com.google.android.material.appbar.AppBarLayout import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.transition.MaterialSharedAxis @@ -74,6 +76,7 @@ class HomeFragment : view.doOnPreDraw { startPostponedEnterTransition() } binding.appBarLayout.statusBarForeground = MaterialShapeDrawable.createWithElevationOverlay(requireContext()) + binding.appBarLayout.drawNextToNavbar() } private fun setupListeners() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt index b910b3ce..7f24e4cc 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/gradient/GradientPlayerFragment.kt @@ -29,6 +29,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.ViewCompat +import androidx.core.view.updatePadding import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -86,11 +87,8 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play private val bottomSheetCallbackList = object : BottomSheetCallback() { override fun onSlide(bottomSheet: View, slideOffset: Float) { mainActivity.getBottomSheetBehavior().setAllowDragging(false) - binding.playerQueueSheet.setPadding( - binding.playerQueueSheet.paddingLeft, - (slideOffset * binding.statusBarLayout.statusBar.height).toInt(), - binding.playerQueueSheet.paddingRight, - binding.playerQueueSheet.paddingBottom + binding.playerQueueSheet.updatePadding( + bottom = (slideOffset * binding.statusBarLayout.statusBar.height).toInt() ) } @@ -156,6 +154,7 @@ class GradientPlayerFragment : AbsPlayerFragment(R.layout.fragment_gradient_play goToArtist(requireActivity()) } binding.container.drawAboveNavBarWithPadding() + binding.playbackControlsFragment.root.drawAboveNavBar() } @SuppressLint("ClickableViewAccessibility") diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt index 54ee37cc..bf705313 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/normal/PlayerFragment.kt @@ -30,6 +30,7 @@ import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RetroUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.views.DrawableGradient @@ -121,7 +122,7 @@ class PlayerFragment : AbsPlayerFragment(R.layout.fragment_player) { _binding = FragmentPlayerBinding.bind(view) setUpSubFragments() setUpPlayerToolbar() - playerToolbar().drawAboveNavBar() + //playerToolbar().drawAboveNavBar() } override fun onDestroyView() { diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt index fb5e4cb3..fae6ab4b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/search/SearchFragment.kt @@ -45,6 +45,7 @@ import com.google.android.material.transition.MaterialSharedAxis import java.util.* import kotlin.collections.ArrayList + class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), TextWatcher, ChipGroup.OnCheckedChangeListener { companion object { diff --git a/app/src/main/res/layout-land/fragment_player.xml b/app/src/main/res/layout-land/fragment_player.xml index a982f11b..e447c619 100755 --- a/app/src/main/res/layout-land/fragment_player.xml +++ b/app/src/main/res/layout-land/fragment_player.xml @@ -50,6 +50,7 @@ diff --git a/app/src/main/res/layout/fragment_main_recycler.xml b/app/src/main/res/layout/fragment_main_recycler.xml index c1d2df14..010d7fe1 100644 --- a/app/src/main/res/layout/fragment_main_recycler.xml +++ b/app/src/main/res/layout/fragment_main_recycler.xml @@ -82,8 +82,9 @@ android:id="@+id/shuffle_button" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="bottom|right" + android:layout_gravity="bottom|end" app:srcCompat="@drawable/ic_shuffle" + android:contentDescription="@string/shuffle" style="@style/Widget.Material3.FloatingActionButton.Primary" android:layout_marginHorizontal="16dp"/> \ No newline at end of file