From a4f7c99f6119d32b24436edcf77d4e7315a35f65 Mon Sep 17 00:00:00 2001 From: h4h13 Date: Fri, 4 Oct 2019 18:29:37 +0530 Subject: [PATCH] Refactor from sliding uppanel to bottom sheet --- .../base/AbsSlidingMusicPanelActivity.kt | 124 +++++++++++------- .../monkey/retromusic/adapter/HomeAdapter.kt | 24 ++-- .../AbsLibraryPagerRecyclerViewFragment.kt | 6 +- .../mainactivity/home/BannerHomeFragment.kt | 6 +- .../retromusic/mvp/presenter/HomePresenter.kt | 10 +- .../main/res/layout-land/fragment_home.xml | 3 +- .../res/layout-xlarge-land/fragment_home.xml | 3 +- .../main/res/layout-xlarge/fragment_home.xml | 3 +- app/src/main/res/layout/item_artist.xml | 3 +- app/src/main/res/layout/item_list.xml | 1 - .../layout/metal_section_recycler_view.xml | 71 +++++++--- .../main/res/layout/section_recycler_view.xml | 72 +++++++--- .../res/layout/sliding_music_panel_layout.xml | 52 ++++---- app/src/main/res/values/strings.xml | 5 + 14 files changed, 241 insertions(+), 142 deletions(-) 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 edd72234..54678bb8 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 @@ -31,16 +31,20 @@ import code.name.monkey.retromusic.fragments.player.plain.PlainPlayerFragment import code.name.monkey.retromusic.fragments.player.simple.SimplePlayerFragment import code.name.monkey.retromusic.fragments.player.tiny.TinyPlayerFragment import code.name.monkey.retromusic.helper.MusicPlayerRemote +import code.name.monkey.retromusic.util.DensityUtil import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.views.BottomNavigationBarTinted -import com.sothree.slidinguppanel.SlidingUpPanelLayout +import com.google.android.material.bottomsheet.BottomSheetBehavior +import com.google.android.material.card.MaterialCardView import kotlinx.android.synthetic.main.sliding_music_panel_layout.* -abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), SlidingUpPanelLayout.PanelSlideListener, AbsPlayerFragment.Callbacks { + +abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), AbsPlayerFragment.Callbacks { companion object { val TAG: String = AbsSlidingMusicPanelActivity::class.java.simpleName } + private lateinit var bottomSheetBehavior: BottomSheetBehavior private var miniPlayerFragment: MiniPlayerFragment? = null private var playerFragment: AbsPlayerFragment? = null private var currentNowPlayingScreen: NowPlayingScreen? = null @@ -49,11 +53,37 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding private var lightStatusBar: Boolean = false private var lightNavigationBar: Boolean = false private var navigationBarColorAnimator: ValueAnimator? = null - protected abstract fun createContentView(): View + private val panelState: Int + get() = bottomSheetBehavior.state + + private val bottomSheetCallbackList = object : BottomSheetBehavior.BottomSheetCallback() { + + override fun onSlide(bottomSheet: View, slideOffset: Float) { + setMiniPlayerAlphaProgress(slideOffset) + } + + override fun onStateChanged(bottomSheet: View, newState: Int) { + when (newState) { + BottomSheetBehavior.STATE_HIDDEN -> { + } + BottomSheetBehavior.STATE_EXPANDED -> { + onPanelExpanded() + } + BottomSheetBehavior.STATE_COLLAPSED -> { + onPanelCollapsed() + } + BottomSheetBehavior.STATE_DRAGGING -> { + } + BottomSheetBehavior.STATE_SETTLING -> { + } + else -> { + + } + } + } + } - val panelState: SlidingUpPanelLayout.PanelState? - get() = slidingLayout.panelState override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -63,6 +93,10 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding setupSlidingUpPanel() updateTabs() + + bottomSheetBehavior = BottomSheetBehavior.from(slidingPanel) + bottomSheetBehavior.bottomSheetCallback = bottomSheetCallbackList + } override fun onResume() { @@ -87,18 +121,19 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding } fun setAntiDragView(antiDragView: View) { - slidingLayout.setAntiDragView(antiDragView) + //slidingLayout.setAntiDragView(antiDragView) } private fun collapsePanel() { - slidingLayout.panelState = SlidingUpPanelLayout.PanelState.COLLAPSED + bottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED } fun expandPanel() { - slidingLayout.panelState = SlidingUpPanelLayout.PanelState.EXPANDED + bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED } private fun setMiniPlayerAlphaProgress(progress: Float) { + print("Sliding $progress") if (miniPlayerFragment?.view == null) return val alpha = 1 - progress miniPlayerFragment?.view?.alpha = alpha @@ -117,44 +152,41 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding super.setLightNavigationBar(lightNavigationBar) - playerFragment!!.setMenuVisibility(false) - playerFragment!!.userVisibleHint = false - playerFragment!!.onHide() + playerFragment?.setMenuVisibility(false) + playerFragment?.userVisibleHint = false + playerFragment?.onHide() } open fun onPanelExpanded() { val playerFragmentColor = playerFragment!!.paletteColor super.setTaskDescriptionColor(playerFragmentColor) - playerFragment!!.setMenuVisibility(true) - playerFragment!!.userVisibleHint = true - playerFragment!!.onShow() + playerFragment?.setMenuVisibility(true) + playerFragment?.userVisibleHint = true + playerFragment?.onShow() onPaletteColorChanged() } private fun setupSlidingUpPanel() { - slidingLayout.viewTreeObserver + slidingPanel.viewTreeObserver .addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { override fun onGlobalLayout() { - slidingLayout.viewTreeObserver.removeOnGlobalLayoutListener(this) + slidingPanel.viewTreeObserver.removeOnGlobalLayoutListener(this) if (currentNowPlayingScreen != PEAK) { val params = slidingPanel.layoutParams as ViewGroup.LayoutParams params.height = ViewGroup.LayoutParams.MATCH_PARENT slidingPanel.layoutParams = params } - when (panelState) { - SlidingUpPanelLayout.PanelState.EXPANDED -> { - onPanelSlide(slidingLayout, 1f) - onPanelExpanded() - } - SlidingUpPanelLayout.PanelState.COLLAPSED -> onPanelCollapsed() - else -> playerFragment!!.onHide() - } + /* when (panelState) { + SlidingUpPanelLayout.PanelState.EXPANDED -> { + onPanelSlide(slidingLayout, 1f) + onPanelExpanded() + } + SlidingUpPanelLayout.PanelState.COLLAPSED -> onPanelCollapsed() + else -> playerFragment!!.onHide() + }*/ } }) - - slidingLayout.addPanelSlideListener(this) - } fun toggleBottomNavigationView(toggle: Boolean) { @@ -165,16 +197,20 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding return bottomNavigationView } - fun hideBottomBar(hide: Boolean) { + private fun hideBottomBar(hide: Boolean) { val heightOfBar = resources.getDimensionPixelSize(R.dimen.mini_player_height) val heightOfBarWithTabs = resources.getDimensionPixelSize(R.dimen.mini_player_height_expanded) if (hide) { - slidingLayout.panelHeight = 0 + bottomSheetBehavior.isHideable = true + bottomSheetBehavior.peekHeight = 0 collapsePanel() + bottomNavigationView.elevation = DensityUtil.dip2px(this, 10f).toFloat() } else { if (MusicPlayerRemote.playingQueue.isNotEmpty()) { - slidingLayout.panelHeight = if (bottomNavigationView.visibility == View.VISIBLE) heightOfBarWithTabs else heightOfBar + bottomNavigationView.elevation = 0f + bottomSheetBehavior.isHideable = false + bottomSheetBehavior.peekHeight = if (bottomNavigationView.visibility == View.VISIBLE) heightOfBarWithTabs else heightOfBar } } } @@ -215,10 +251,10 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding override fun onServiceConnected() { super.onServiceConnected() - if (!MusicPlayerRemote.playingQueue.isEmpty()) { - slidingLayout.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { + if (MusicPlayerRemote.playingQueue.isNotEmpty()) { + slidingPanel.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { override fun onGlobalLayout() { - slidingLayout.viewTreeObserver.removeOnGlobalLayoutListener(this) + slidingPanel.viewTreeObserver.removeOnGlobalLayoutListener(this) hideBottomBar(false) } }) @@ -236,20 +272,17 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding } open fun handleBackPress(): Boolean { - if (slidingLayout.panelHeight != 0 && playerFragment!!.onBackPressed()) + if (bottomSheetBehavior.peekHeight != 0 && playerFragment!!.onBackPressed()) return true - if (panelState == SlidingUpPanelLayout.PanelState.EXPANDED) { + if (panelState == BottomSheetBehavior.STATE_EXPANDED) { collapsePanel() return true } return false } - override fun onPanelSlide(panel: View?, slideOffset: Float) { - setMiniPlayerAlphaProgress(slideOffset) - } - override fun onPanelStateChanged(panel: View, previousState: SlidingUpPanelLayout.PanelState, newState: SlidingUpPanelLayout.PanelState) { + /*override fun onPanelStateChanged(panel: View, previousState: SlidingUpPanelLayout.PanelState, newState: SlidingUpPanelLayout.PanelState) { when (newState) { SlidingUpPanelLayout.PanelState.COLLAPSED -> onPanelCollapsed() SlidingUpPanelLayout.PanelState.EXPANDED -> onPanelExpanded() @@ -257,16 +290,15 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding else -> { } } - } + }*/ override fun onPaletteColorChanged() { - if (panelState == SlidingUpPanelLayout.PanelState.EXPANDED) { + if (panelState == BottomSheetBehavior.STATE_EXPANDED) { val paletteColor = playerFragment!!.paletteColor super.setTaskDescriptionColor(paletteColor) val isColorLight = ColorUtil.isColorLight(paletteColor) - if (PreferenceUtil.getInstance(this).adaptiveColor && (currentNowPlayingScreen == NORMAL || currentNowPlayingScreen == FLAT)) { super.setLightNavigationBar(true) @@ -289,21 +321,21 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding override fun setLightStatusbar(enabled: Boolean) { lightStatusBar = enabled - if (panelState == SlidingUpPanelLayout.PanelState.COLLAPSED) { + if (panelState == BottomSheetBehavior.STATE_COLLAPSED) { super.setLightStatusbar(enabled) } } override fun setLightNavigationBar(enabled: Boolean) { lightNavigationBar = enabled - if (panelState == SlidingUpPanelLayout.PanelState.COLLAPSED) { + if (panelState == BottomSheetBehavior.STATE_COLLAPSED) { super.setLightNavigationBar(enabled) } } override fun setNavigationbarColor(color: Int) { navigationBarColor = color - if (panelState == SlidingUpPanelLayout.PanelState.COLLAPSED) { + if (panelState == BottomSheetBehavior.STATE_COLLAPSED) { if (navigationBarColorAnimator != null) navigationBarColorAnimator!!.cancel() super.setNavigationbarColor(color) } @@ -311,7 +343,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(), Sliding override fun setTaskDescriptionColor(color: Int) { taskColor = color - if (panelState == SlidingUpPanelLayout.PanelState.COLLAPSED) { + if (panelState == BottomSheetBehavior.STATE_COLLAPSED) { super.setTaskDescriptionColor(color) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt index b6eb3800..3835cc63 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/HomeAdapter.kt @@ -1,6 +1,5 @@ package code.name.monkey.retromusic.adapter -import android.content.res.ColorStateList import android.util.DisplayMetrics import android.view.LayoutInflater import android.view.View @@ -9,7 +8,6 @@ import androidx.annotation.IntDef import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView -import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.R import code.name.monkey.retromusic.adapter.album.AlbumFullWidthAdapter import code.name.monkey.retromusic.adapter.artist.ArtistAdapter @@ -20,7 +18,7 @@ import code.name.monkey.retromusic.model.Artist import code.name.monkey.retromusic.model.Home import code.name.monkey.retromusic.model.Playlist import code.name.monkey.retromusic.util.PreferenceUtil -import com.google.android.material.chip.Chip +import com.google.android.material.textview.MaterialTextView class HomeAdapter( @@ -92,8 +90,8 @@ class HomeAdapter( recyclerView.apply { adapter = AlbumFullWidthAdapter(activity, home.arrayList as ArrayList, displayMetrics) } - chip.text = activity.getString(home.title) - chip.setChipIconResource(home.icon) + title.text = activity.getString(home.title) + text.text = activity.getString(home.subTitle) } } @@ -104,8 +102,9 @@ class HomeAdapter( val artistAdapter = ArtistAdapter(activity, home.arrayList as ArrayList, PreferenceUtil.getInstance(activity).getHomeGridStyle(context!!), false, null) adapter = artistAdapter } - chip.text = activity.getString(home.title) - chip.setChipIconResource(home.icon) + + title.text = activity.getString(home.title) + text.text = activity.getString(home.subTitle) } } @@ -118,17 +117,14 @@ class HomeAdapter( adapter = songAdapter } - chip.text = activity.getString(home.title) - chip.setChipIconResource(home.icon) + title.text = activity.getString(home.title) + text.text = activity.getString(home.subTitle) } } private open inner class AbsHomeViewItem(itemView: View) : RecyclerView.ViewHolder(itemView) { val recyclerView: RecyclerView = itemView.findViewById(R.id.recyclerView) - val chip: Chip = itemView.findViewById(R.id.chipHead) - - init { - chip.apply { chipBackgroundColor = ColorStateList.valueOf(ThemeStore.primaryColor(context)) } - } + val title: MaterialTextView = itemView.findViewById(R.id.title) + val text: MaterialTextView = itemView.findViewById(R.id.text) } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt index 7246dfee..420d3620 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt @@ -9,7 +9,6 @@ import androidx.annotation.StringRes import androidx.recyclerview.widget.RecyclerView import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.retromusic.R -import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.util.DensityUtil import code.name.monkey.retromusic.util.ViewUtil import com.google.android.material.appbar.AppBarLayout @@ -64,10 +63,7 @@ abstract class AbsLibraryPagerRecyclerViewFragment, } private fun checkForPadding() { - val height = if (MusicPlayerRemote.playingQueue.isEmpty()) - DensityUtil.dip2px(context!!, 52f) - else - 0 + val height = DensityUtil.dip2px(requireContext(), 52f) recyclerView.setPadding(0, 0, 0, (height * 2.3).toInt()) } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt index d09635d6..6d9a799f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/home/BannerHomeFragment.kt @@ -151,11 +151,7 @@ class BannerHomeFragment : AbsMainActivityFragment(), MainActivityFragmentCallba } private fun checkPadding() { - val marginSpan = when { - MusicPlayerRemote.playingQueue.isEmpty() -> RetroUtil.convertDpToPixel(52f, context!!).toInt() - else -> RetroUtil.convertDpToPixel(0f, requireContext()).toInt() - } - + val marginSpan = DensityUtil.dip2px(requireContext(), 52f) (recyclerView.layoutParams as ViewGroup.MarginLayoutParams).bottomMargin = (marginSpan * 2.3f).toInt() } diff --git a/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt b/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt index d54cdd8b..c89ad868 100644 --- a/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/HomePresenter.kt @@ -72,7 +72,7 @@ interface HomePresenter : Presenter { if (it.isNotEmpty()) hashSet.add( Home(0, R.string.recent_artists, - 0, + R.string.recent_added_artists, it, RECENT_ARTISTS, R.drawable.ic_artist_white_24dp @@ -87,7 +87,7 @@ interface HomePresenter : Presenter { if (it.isNotEmpty()) hashSet.add( Home(1, R.string.recent_albums, - 0, + R.string.recent_added_albums, it, RECENT_ALBUMS, R.drawable.ic_album_white_24dp @@ -102,7 +102,7 @@ interface HomePresenter : Presenter { if (it.isNotEmpty()) hashSet.add( Home(2, R.string.top_artists, - 0, + R.string.most_played_artists, it, TOP_ARTISTS, R.drawable.ic_artist_white_24dp @@ -117,7 +117,7 @@ interface HomePresenter : Presenter { if (it.isNotEmpty()) hashSet.add( Home(3, R.string.top_albums, - 0, + R.string.most_played_albums, it, TOP_ALBUMS, R.drawable.ic_album_white_24dp @@ -132,7 +132,7 @@ interface HomePresenter : Presenter { if (it.isNotEmpty()) hashSet.add( Home(4, R.string.favorites, - 0, + R.string.favorites_songs, it, PLAYLISTS, R.drawable.ic_favorite_white_24dp diff --git a/app/src/main/res/layout-land/fragment_home.xml b/app/src/main/res/layout-land/fragment_home.xml index 2320ebaa..7c4f57a9 100644 --- a/app/src/main/res/layout-land/fragment_home.xml +++ b/app/src/main/res/layout-land/fragment_home.xml @@ -33,9 +33,10 @@ android:layout_height="match_parent"> @@ -27,7 +27,6 @@ android:gravity="center" android:maxLines="1" android:paddingTop="12dp" - android:textAppearance="@style/TextViewNormal" android:textColor="?colorOnPrimary" tools:text="Name" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_list.xml b/app/src/main/res/layout/item_list.xml index 7c40f790..8d36f852 100755 --- a/app/src/main/res/layout/item_list.xml +++ b/app/src/main/res/layout/item_list.xml @@ -89,7 +89,6 @@ android:layout_height="wrap_content" android:ellipsize="end" android:maxLines="1" - android:textAppearance="@style/TextViewBody2" android:textColor="?colorOnBackground" tools:text="Song artist name " /> diff --git a/app/src/main/res/layout/metal_section_recycler_view.xml b/app/src/main/res/layout/metal_section_recycler_view.xml index 2d432d9a..7fd6f48e 100644 --- a/app/src/main/res/layout/metal_section_recycler_view.xml +++ b/app/src/main/res/layout/metal_section_recycler_view.xml @@ -1,5 +1,5 @@ - - + android:gravity="center_vertical" + android:orientation="horizontal" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + - \ No newline at end of file + app:itemMargin="28dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/titleContainer" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/section_recycler_view.xml b/app/src/main/res/layout/section_recycler_view.xml index c4f05bc0..29d94f32 100644 --- a/app/src/main/res/layout/section_recycler_view.xml +++ b/app/src/main/res/layout/section_recycler_view.xml @@ -1,5 +1,5 @@ - - + android:gravity="center_vertical" + android:orientation="horizontal" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + + + + + + + + + android:layout_marginTop="16dp" + android:nestedScrollingEnabled="false" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/titleContainer" /> - \ No newline at end of file + \ 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 ce7cb08c..afd73cc2 100644 --- a/app/src/main/res/layout/sliding_music_panel_layout.xml +++ b/app/src/main/res/layout/sliding_music_panel_layout.xml @@ -6,7 +6,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + sothree:umanoShadowHeight="0dp">--> + + + + + + android:layout_height="match_parent" /> - + android:layout_height="48dp" + tools:layout="@layout/fragment_mini_player" /> - - - - - - + + Toggle favorite Dialog corner Peak + Recently added artists + Recently added albums + Most played artists + Most played albums + You\'re most favorites songs