Added material desing theme improvements

This commit is contained in:
h4h13 2020-05-06 03:50:15 +05:30
parent 16d256e210
commit 58e29691cb
6 changed files with 72 additions and 231 deletions

View file

@ -109,7 +109,6 @@ class AlbumCoverPagerAdapter(
NowPlayingScreen.FIT, NowPlayingScreen.FIT,
NowPlayingScreen.TINY, NowPlayingScreen.TINY,
NowPlayingScreen.CLASSIC, NowPlayingScreen.CLASSIC,
NowPlayingScreen.MATERIAL,
NowPlayingScreen.FULL -> R.layout.fragment_album_full_cover NowPlayingScreen.FULL -> R.layout.fragment_album_full_cover
else -> { else -> {
if (PreferenceUtil.getInstance(requireContext()) if (PreferenceUtil.getInstance(requireContext())

View file

@ -44,11 +44,11 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(), ViewPager.OnPageChan
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
viewPager.addOnPageChangeListener(this) viewPager.addOnPageChangeListener(this)
val nowPlayingScreen = PreferenceUtil.getInstance(requireContext()).nowPlayingScreen val nps = PreferenceUtil.getInstance(requireContext()).nowPlayingScreen
if (PreferenceUtil.getInstance(requireContext()).carouselEffect() && if (nps == FULL || nps == CLASSIC || nps == FIT) {
!((nowPlayingScreen == FULL) || (nowPlayingScreen == ADAPTIVE) || (nowPlayingScreen == FIT)) viewPager.offscreenPageLimit = 2
) { } else if (PreferenceUtil.getInstance(requireContext()).carouselEffect()) {
viewPager.clipToPadding = false viewPager.clipToPadding = false
viewPager.setPadding(40, 40, 40, 0) viewPager.setPadding(40, 40, 40, 0)
viewPager.pageMargin = 0 viewPager.pageMargin = 0
@ -60,6 +60,22 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(), ViewPager.OnPageChan
PreferenceUtil.getInstance(requireContext()).albumCoverTransform PreferenceUtil.getInstance(requireContext()).albumCoverTransform
) )
} }
/* if (PreferenceUtil.getInstance(requireContext()).carouselEffect() &&
!((nps == FULL) || (nps == ADAPTIVE) || (nps == FIT))
) {
viewPager.clipToPadding = false
viewPager.setPadding(40, 40, 40, 0)
viewPager.pageMargin = 0
viewPager.setPageTransformer(false, CarousalPagerTransformer(requireContext()))
} else if () {
} else {
viewPager.offscreenPageLimit = 2
viewPager.setPageTransformer(
true,
PreferenceUtil.getInstance(requireContext()).albumCoverTransform
)
}*/
} }
override fun onDestroyView() { override fun onDestroyView() {

View file

@ -20,7 +20,6 @@ import kotlinx.android.synthetic.main.fragment_color_player.*
class ColorFragment : AbsPlayerFragment() { class ColorFragment : AbsPlayerFragment() {
private var lastColor: Int = 0 private var lastColor: Int = 0
private var backgroundColor: Int = 0
private lateinit var playbackControlsFragment: ColorPlaybackControlsFragment private lateinit var playbackControlsFragment: ColorPlaybackControlsFragment
private var valueAnimator: ValueAnimator? = null private var valueAnimator: ValueAnimator? = null
@ -29,7 +28,7 @@ class ColorFragment : AbsPlayerFragment() {
} }
override val paletteColor: Int override val paletteColor: Int
get() = backgroundColor get() = lastColor
override fun onColorChanged(color: MediaNotificationProcessor) { override fun onColorChanged(color: MediaNotificationProcessor) {
playbackControlsFragment.setDark(color) playbackControlsFragment.setDark(color)
@ -116,20 +115,6 @@ class ColorFragment : AbsPlayerFragment() {
} }
} }
private fun setColors(colors: MediaNotificationProcessor) {
this.lastColor = colors.backgroundColor
this.backgroundColor = colors.backgroundColor
playbackControlsFragment.setDark(colors)
colorGradientBackground?.setBackgroundColor(colors.backgroundColor)
playerActivity?.setLightNavigationBar(ColorUtil.isColorLight(colors.backgroundColor))
callbacks?.onPaletteColorChanged()
ToolbarContentTintHelper.colorizeToolbar(
playerToolbar,
colors.secondaryTextColor,
requireActivity()
)
}
companion object { companion object {
fun newInstance(): ColorFragment { fun newInstance(): ColorFragment {
return ColorFragment() return ColorFragment()

View file

@ -4,57 +4,22 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.view.ViewCompat
import androidx.recyclerview.widget.LinearLayoutManager
import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ColorUtil
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.retromusic.CustomBottomSheetBehavior
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.activities.base.AbsSlidingMusicPanelActivity
import code.name.monkey.retromusic.adapter.song.PlayingQueueAdapter
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import com.google.android.material.bottomsheet.BottomSheetBehavior
import kotlinx.android.synthetic.main.fragment_material.* import kotlinx.android.synthetic.main.fragment_material.*
import kotlinx.android.synthetic.main.status_bar.*
/** /**
* @author Hemanth S (h4h13). * @author Hemanth S (h4h13).
*/ */
class MaterialFragment : AbsPlayerFragment(), View.OnLayoutChangeListener { class MaterialFragment : AbsPlayerFragment() {
private lateinit var queueAdapter: PlayingQueueAdapter
private val bottomSheetCallbackList = object : BottomSheetBehavior.BottomSheetCallback() {
override fun onSlide(bottomSheet: View, slideOffset: Float) {
(requireActivity() as AbsSlidingMusicPanelActivity).getBottomSheetBehavior()
.setAllowDragging(false)
sheetContent.setPadding(
sheetContent.paddingLeft,
(slideOffset * status_bar.height).toInt(),
sheetContent.paddingRight,
sheetContent.paddingBottom
)
playerControlsContainer.layoutParams.height = playerContainer.width
}
override fun onStateChanged(bottomSheet: View, newState: Int) {
val activity = requireActivity() as AbsSlidingMusicPanelActivity
if (newState == BottomSheetBehavior.STATE_EXPANDED || newState == BottomSheetBehavior.STATE_DRAGGING) {
activity.getBottomSheetBehavior().setAllowDragging(false)
} else {
activity.getBottomSheetBehavior().setAllowDragging(true)
}
}
}
override fun playerToolbar(): Toolbar { override fun playerToolbar(): Toolbar {
return playerToolbar return playerToolbar
@ -85,9 +50,6 @@ class MaterialFragment : AbsPlayerFragment(), View.OnLayoutChangeListener {
} }
override fun onColorChanged(color: MediaNotificationProcessor) { override fun onColorChanged(color: MediaNotificationProcessor) {
val darkColor = ColorUtil.darkenColorTheme(color.backgroundColor)
playerContainer?.setBackgroundColor(ColorUtil.darkenColorTheme(color.backgroundColor))
upComing?.setBackgroundColor(ColorUtil.darkenColorTheme(darkColor))
playbackControlsFragment.setDark(color.backgroundColor) playbackControlsFragment.setDark(color.backgroundColor)
lastColor = color.backgroundColor lastColor = color.backgroundColor
callbacks?.onPaletteColorChanged() callbacks?.onPaletteColorChanged()
@ -121,40 +83,6 @@ class MaterialFragment : AbsPlayerFragment(), View.OnLayoutChangeListener {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setUpSubFragments() setUpSubFragments()
setUpPlayerToolbar() setUpPlayerToolbar()
setupPanel()
setUpQueue()
getQueuePanel().addBottomSheetCallback(bottomSheetCallbackList)
playerQueueSheet.setOnTouchListener { _, _ ->
(requireActivity() as AbsSlidingMusicPanelActivity).getBottomSheetBehavior()
.setAllowDragging(false)
getQueuePanel().setAllowDragging(true)
return@setOnTouchListener false
}
}
private fun setUpQueue() {
queueAdapter = PlayingQueueAdapter(
requireActivity() as AppCompatActivity, mutableListOf(),
MusicPlayerRemote.position,
R.layout.item_queue
)
recyclerView.apply {
adapter = queueAdapter
layoutManager = LinearLayoutManager(requireContext())
}
}
private fun setupPanel() {
if (!ViewCompat.isLaidOut(playerContainer) || playerContainer.isLayoutRequested) {
playerContainer.addOnLayoutChangeListener(this)
return
}
val height = playerContainer?.height ?: 0
val width = playerContainer?.width ?: 0
val finalHeight = height - (playerControlsContainer.height - width)
val panel = getQueuePanel()
panel.peekHeight = finalHeight
} }
private fun setUpSubFragments() { private fun setUpSubFragments() {
@ -180,7 +108,6 @@ class MaterialFragment : AbsPlayerFragment(), View.OnLayoutChangeListener {
override fun onServiceConnected() { override fun onServiceConnected() {
updateIsFavorite() updateIsFavorite()
queueAdapter.swapDataSet(MusicPlayerRemote.playingQueue)
} }
override fun onPlayingMetaChanged() { override fun onPlayingMetaChanged() {
@ -193,32 +120,4 @@ class MaterialFragment : AbsPlayerFragment(), View.OnLayoutChangeListener {
return PlayerFragment() return PlayerFragment()
} }
} }
private fun getQueuePanel(): CustomBottomSheetBehavior<FrameLayout> {
return CustomBottomSheetBehavior.from(playerQueueSheet) as CustomBottomSheetBehavior<FrameLayout>
}
override fun onDestroyView() {
super.onDestroyView()
getQueuePanel().removeBottomSheetCallback(bottomSheetCallbackList)
}
override fun onLayoutChange(
v: View?,
left: Int,
top: Int,
right: Int,
bottom: Int,
oldLeft: Int,
oldTop: Int,
oldRight: Int,
oldBottom: Int
) {
val height = playerContainer?.height ?: 0
val width = playerContainer?.width ?: 0
val finalHeight = height - width
playerControlsContainer.layoutParams.height = height - width
val panel = getQueuePanel()
panel.peekHeight = finalHeight
}
} }

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -7,14 +7,25 @@
android:clickable="true" android:clickable="true"
android:focusable="true"> android:focusable="true">
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorSurface" />
<include layout="@layout/shadow_statusbar_toolbar" /> <include layout="@layout/shadow_statusbar_toolbar" />
<LinearLayout <LinearLayout
android:id="@+id/playerContainer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include layout="@layout/status_bar" />
</FrameLayout>
<code.name.monkey.retromusic.views.WidthFitSquareLayout <code.name.monkey.retromusic.views.WidthFitSquareLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -24,13 +35,20 @@
android:name="code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment" android:name="code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:layout="@layout/fragment_album_full_cover" /> tools:layout="@layout/fragment_album_cover" />
</code.name.monkey.retromusic.views.WidthFitSquareLayout>
<FrameLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="match_parent"
android:layout_weight="1">
<include layout="@layout/status_bar" /> <fragment
android:id="@+id/playbackControlsFragment"
android:name="code.name.monkey.retromusic.fragments.player.material.MaterialControlsFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/fragment_material_playback_controls" />
</FrameLayout> </FrameLayout>
<FrameLayout <FrameLayout
@ -45,80 +63,5 @@
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" /> app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</FrameLayout> </FrameLayout>
</code.name.monkey.retromusic.views.WidthFitSquareLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/playerQueueSheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="bottom"
app:behavior_hideable="false"
app:layout_behavior="code.name.monkey.retromusic.CustomBottomSheetBehavior">
<LinearLayout
android:id="@+id/sheetContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorSurface"
android:orientation="vertical">
<LinearLayout
android:id="@+id/playerControlsContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<fragment
android:id="@+id/playbackControlsFragment"
android:name="code.name.monkey.retromusic.fragments.player.material.MaterialControlsFragment"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="match_parent"
tools:layout="@layout/fragment_material_playback_controls" />
<LinearLayout
android:layout_weight="0"
android:id="@+id/upComing"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:srcCompat="@drawable/ic_shuffle_sharp_white_24dp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.google.android.material.textview.MaterialTextView
android:id="@+id/player_queue_sub_header"
android:layout_width="match_parent"
android:layout_height="?attr/listPreferredItemHeightSmall"
android:background="?attr/colorSurface"
android:gravity="center_vertical"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:text="@string/up_next"
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
android:textColor="?android:attr/textColorSecondary" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/colorSurface"
tools:listitem="@layout/item_list" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</FrameLayout> </FrameLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -30,10 +30,9 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
app:labelBehavior="gone" app:labelBehavior="gone"
app:layout_constraintBottom_toTopOf="@id/playPauseButton"
app:layout_constraintEnd_toStartOf="@id/songTotalTime" app:layout_constraintEnd_toStartOf="@id/songTotalTime"
app:layout_constraintStart_toEndOf="@id/songCurrentProgress" app:layout_constraintStart_toEndOf="@id/songCurrentProgress"
app:layout_constraintTop_toBottomOf="@id/songInfo" app:layout_constraintTop_toTopOf="parent"
app:thumbRadius="@dimen/slider_thumb_radius" app:thumbRadius="@dimen/slider_thumb_radius"
app:trackHeight="@dimen/slider_track_height" app:trackHeight="@dimen/slider_track_height"
tools:ignore="RtlHardcoded,UnusedAttribute" tools:ignore="RtlHardcoded,UnusedAttribute"
@ -62,7 +61,7 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toBottomOf="@+id/progressSlider">
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/title" android:id="@+id/title"
@ -115,10 +114,7 @@
android:paddingEnd="16dp" android:paddingEnd="16dp"
android:textColor="?android:attr/textColorSecondary" android:textColor="?android:attr/textColorSecondary"
android:textSize="12sp" android:textSize="12sp"
app:layout_constraintBottom_toTopOf="@+id/progressSlider" app:layout_constraintBottom_toTopOf="@+id/playPauseButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text" app:layout_constraintTop_toBottomOf="@+id/text"
tools:text="@tools:sample/lorem/random" /> tools:text="@tools:sample/lorem/random" />
@ -159,11 +155,11 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/roundSelector" android:background="?attr/roundSelector"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toTopOf="@+id/volumeFragmentContainer"
app:layout_constraintEnd_toStartOf="@+id/nextButton" app:layout_constraintEnd_toStartOf="@+id/nextButton"
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/previousButton" app:layout_constraintStart_toEndOf="@+id/previousButton"
app:layout_constraintTop_toBottomOf="@+id/progressSlider" app:layout_constraintTop_toBottomOf="@+id/songInfo"
app:srcCompat="@drawable/ic_pause_sharp_white_64dp" app:srcCompat="@drawable/ic_pause_sharp_white_64dp"
tools:tint="@color/md_black_1000" /> tools:tint="@color/md_black_1000" />
@ -198,12 +194,15 @@
tools:ignore="MissingPrefix" tools:ignore="MissingPrefix"
tools:tint="@color/md_black_1000" /> tools:tint="@color/md_black_1000" />
<FrameLayout <FrameLayout
android:id="@+id/volumeFragmentContainer" android:id="@+id/volumeFragmentContainer"
android:layout_width="0dp" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="wrap_content"
android:visibility="gone" android:layout_weight="0"
android:paddingStart="8dp"
android:paddingEnd="8dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" /> tools:backgroundTint="@color/md_red_400"
tools:layout_height="52dp" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>