From d2a758886126e7253d05f9e15a132afc64f017cf Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Sun, 5 Jun 2022 23:48:37 +0530 Subject: [PATCH] Added NavigationRailView for Landscape --- .../retromusic/activities/MainActivity.kt | 4 +- .../base/AbsSlidingMusicPanelActivity.kt | 43 ++++++++------ .../retromusic/extensions/ViewExtensions.kt | 8 ++- .../fragments/base/AbsRecyclerViewFragment.kt | 2 +- .../fragments/folder/FoldersFragment.kt | 2 +- .../retromusic/fragments/home/HomeFragment.kt | 2 +- .../fragments/library/LibraryFragment.kt | 2 +- .../fragments/search/SearchFragment.kt | 2 +- .../sliding_music_panel_layout.xml | 58 +++++++++++++++++++ .../res/layout/sliding_music_panel_layout.xml | 7 +-- app/src/main/res/values/dimens.xml | 4 +- 11 files changed, 100 insertions(+), 34 deletions(-) create mode 100644 app/src/main/res/layout-land/sliding_music_panel_layout.xml 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 766031351..a337487fc 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 @@ -78,9 +78,9 @@ class MainActivity : AbsCastActivity() { ) } navController.graph = navGraph - bottomNavigationView.setupWithNavController(navController) + navigationView.setupWithNavController(navController) // Scroll Fragment to top - bottomNavigationView.setOnItemReselectedListener { + navigationView.setOnItemReselectedListener { currentFragment(R.id.fragment_container).apply { if (this is IScrollHelper) { scrollToTop() 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 3dea6fa4a..7819bb125 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 @@ -66,6 +66,7 @@ import code.name.monkey.retromusic.model.CategoryInfo import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.ViewUtil import code.name.monkey.retromusic.util.logD +import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior.* import org.koin.androidx.viewmodel.ext.android.viewModel @@ -127,7 +128,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), } STATE_SETTLING, STATE_DRAGGING -> { if (fromNotification) { - binding.bottomNavigationView.bringToFront() + binding.navigationView.bringToFront() fromNotification = false } } @@ -162,7 +163,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), updateColor() if (!PreferenceUtil.materialYou) { binding.slidingPanel.backgroundTintList = ColorStateList.valueOf(darkAccentColor()) - bottomNavigationView.backgroundTintList = ColorStateList.valueOf(darkAccentColor()) + navigationView.backgroundTintList = ColorStateList.valueOf(darkAccentColor()) } navigationBarColor = surfaceColor() @@ -230,7 +231,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), updateTabs() } TAB_TEXT_MODE -> { - bottomNavigationView.labelVisibilityMode = PreferenceUtil.tabTitleMode + navigationView.labelVisibilityMode = PreferenceUtil.tabTitleMode } TOGGLE_FULL_SCREEN -> { if (!PreferenceUtil.isFullScreenMode) exitFullscreen() @@ -258,8 +259,10 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), val alpha = 1 - progress miniPlayerFragment?.view?.alpha = 1 - (progress / 0.2F) miniPlayerFragment?.view?.isGone = alpha == 0f - binding.bottomNavigationView.translationY = progress * 500 - binding.bottomNavigationView.alpha = alpha + if (!isLandscape) { + binding.navigationView.translationY = progress * 500 + binding.navigationView.alpha = alpha + } binding.playerFragmentContainer.alpha = (progress - 0.2F) / 0.2F } @@ -316,10 +319,12 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), }) } - val bottomNavigationView get() = binding.bottomNavigationView + val navigationView get() = binding.navigationView val slidingPanel get() = binding.slidingPanel + val isBottomNavVisible get() = navigationView.isVisible && navigationView is BottomNavigationView + override fun onServiceConnected() { super.onServiceConnected() hideBottomSheet(false) @@ -386,18 +391,18 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), } fun updateTabs() { - binding.bottomNavigationView.menu.clear() + binding.navigationView.menu.clear() val currentTabs: List = PreferenceUtil.libraryCategory for (tab in currentTabs) { if (tab.visible) { val menu = tab.category - binding.bottomNavigationView.menu.add(0, menu.id, 0, menu.stringRes) + binding.navigationView.menu.add(0, menu.id, 0, menu.stringRes) .setIcon(menu.icon) } } - if (binding.bottomNavigationView.menu.size() == 1) { + if (binding.navigationView.menu.size() == 1) { isInOneTabMode = true - binding.bottomNavigationView.isVisible = false + binding.navigationView.isVisible = false } else { isInOneTabMode = false } @@ -423,33 +428,33 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), ) return } - if (visible xor bottomNavigationView.isVisible) { + if (visible xor navigationView.isVisible) { val mAnimate = animate && bottomSheetBehavior.state == STATE_COLLAPSED if (mAnimate) { if (visible) { - binding.bottomNavigationView.bringToFront() - binding.bottomNavigationView.show() + binding.navigationView.bringToFront() + binding.navigationView.show() } else { - binding.bottomNavigationView.hide() + binding.navigationView.hide() } } else { - binding.bottomNavigationView.isVisible = false + binding.navigationView.isVisible = visible if (visible && bottomSheetBehavior.state != STATE_EXPANDED) { - binding.bottomNavigationView.bringToFront() + binding.navigationView.bringToFront() } } } hideBottomSheet( hide = hideBottomSheet, animate = animate, - isBottomNavVisible = visible + isBottomNavVisible = visible && navigationView is BottomNavigationView ) } fun hideBottomSheet( hide: Boolean, animate: Boolean = false, - isBottomNavVisible: Boolean = bottomNavigationView.isVisible, + isBottomNavVisible: Boolean = navigationView.isVisible && navigationView is BottomNavigationView, ) { val heightOfBar = windowInsets.getBottomInsets() + dip(R.dimen.mini_player_height) val heightOfBarWithTabs = heightOfBar + dip(R.dimen.bottom_nav_height) @@ -463,7 +468,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), } else { if (MusicPlayerRemote.playingQueue.isNotEmpty()) { binding.slidingPanel.elevation = 0F - binding.bottomNavigationView.elevation = 5F + binding.navigationView.elevation = 5F if (isBottomNavVisible) { logD("List") if (animate) { 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 9f53714fd..d9ce08d9c 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 @@ -38,6 +38,8 @@ import code.name.monkey.retromusic.util.RetroUtil import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.card.MaterialCardView +import com.google.android.material.navigation.NavigationBarView +import com.google.android.material.navigationrail.NavigationRailView import dev.chrisbanes.insetter.applyInsetter const val ANIM_DURATION = 300L @@ -74,7 +76,8 @@ fun EditText.appHandleColor(): EditText { * Instead, take a snapshot of the view, and animate this in, only changing the visibility (and * thus layout) when the animation completes. */ -fun BottomNavigationView.show() { +fun NavigationBarView.show() { + if (this is NavigationRailView) return if (isVisible) return val parent = parent as ViewGroup @@ -118,7 +121,8 @@ fun BottomNavigationView.show() { * Instead, take a snapshot, instantly hide the view (so content lays out to fill), then animate * out the snapshot. */ -fun BottomNavigationView.hide() { +fun NavigationBarView.hide() { + if (this is NavigationRailView) return if (isGone) return if (!isLaidOut) { 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 48adf7eb1..eafdfee8f 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 @@ -147,7 +147,7 @@ abstract class AbsRecyclerViewFragment, LM : Recycle } private fun checkForMargins() { - if (mainActivity.bottomNavigationView.isVisible) { + if (mainActivity.isBottomNavVisible) { binding.recyclerView.updateLayoutParams { bottomMargin = dip(R.dimen.bottom_nav_height) } 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 a20ee89fc..ce8955057 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 @@ -407,7 +407,7 @@ class FoldersFragment : AbsMainActivityFragment(R.layout.fragment_folder), } private fun checkForMargins() { - if (mainActivity.bottomNavigationView.isVisible) { + if (mainActivity.isBottomNavVisible) { binding.recyclerView.updateLayoutParams { bottomMargin = dip(R.dimen.bottom_nav_height) } 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 5aecc5427..6d42e2801 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 @@ -192,7 +192,7 @@ class HomeFragment : } private fun checkForMargins() { - if (mainActivity.bottomNavigationView.isVisible) { + if (mainActivity.isBottomNavVisible) { binding.recyclerView.updateLayoutParams { bottomMargin = dip(R.dimen.bottom_nav_height) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/library/LibraryFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/library/LibraryFragment.kt index e70047a3e..eb66ca5b6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/library/LibraryFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/library/LibraryFragment.kt @@ -80,7 +80,7 @@ class LibraryFragment : AbsMainActivityFragment(R.layout.fragment_library) { navGraph.setStartDestination(categoryInfo.category.id) } navController.graph = navGraph - NavigationUI.setupWithNavController(mainActivity.bottomNavigationView, navController) + NavigationUI.setupWithNavController(mainActivity.navigationView, navController) navController.addOnDestinationChangedListener { _, _, _ -> binding.appBarLayout.setExpanded(true, true) } 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 2e9488277..808aa6732 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 @@ -147,7 +147,7 @@ class SearchFragment : AbsMainActivityFragment(R.layout.fragment_search), } private fun checkForMargins() { - if (mainActivity.bottomNavigationView.isVisible) { + if (mainActivity.isBottomNavVisible) { binding.recyclerView.updateLayoutParams { bottomMargin = dip(R.dimen.bottom_nav_height) } diff --git a/app/src/main/res/layout-land/sliding_music_panel_layout.xml b/app/src/main/res/layout-land/sliding_music_panel_layout.xml new file mode 100644 index 000000000..c314081d8 --- /dev/null +++ b/app/src/main/res/layout-land/sliding_music_panel_layout.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/sliding_music_panel_layout.xml b/app/src/main/res/layout/sliding_music_panel_layout.xml index fc67d2327..e8ce8ffc8 100644 --- a/app/src/main/res/layout/sliding_music_panel_layout.xml +++ b/app/src/main/res/layout/sliding_music_panel_layout.xml @@ -43,14 +43,13 @@ + app:menu="@menu/bottom_navigation_main" + tools:viewBindingType="com.google.android.material.navigation.NavigationBarView"/> \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index fedd0d28f..1f442a00e 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -12,8 +12,8 @@ 8dp 56dp - 72dp - 128dp + 80dp + 136dp 96dp 96dp