Add Home theme and code refactor

This commit is contained in:
Hemanth S 2020-05-14 15:55:57 +05:30
parent 1e85e7e943
commit f32ef48e51
12 changed files with 302 additions and 68 deletions

View file

@ -1,7 +1,6 @@
package code.name.monkey.retromusic.activities.base package code.name.monkey.retromusic.activities.base
import android.animation.ValueAnimator import android.animation.ValueAnimator
import android.content.Context
import android.graphics.Color import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
@ -30,6 +29,7 @@ import code.name.monkey.retromusic.fragments.player.color.ColorFragment
import code.name.monkey.retromusic.fragments.player.fit.FitFragment import code.name.monkey.retromusic.fragments.player.fit.FitFragment
import code.name.monkey.retromusic.fragments.player.flat.FlatPlayerFragment import code.name.monkey.retromusic.fragments.player.flat.FlatPlayerFragment
import code.name.monkey.retromusic.fragments.player.full.FullPlayerFragment import code.name.monkey.retromusic.fragments.player.full.FullPlayerFragment
import code.name.monkey.retromusic.fragments.player.home.HomePlayerFragment
import code.name.monkey.retromusic.fragments.player.material.MaterialFragment import code.name.monkey.retromusic.fragments.player.material.MaterialFragment
import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment import code.name.monkey.retromusic.fragments.player.normal.PlayerFragment
import code.name.monkey.retromusic.fragments.player.peak.PeakPlayerFragment import code.name.monkey.retromusic.fragments.player.peak.PeakPlayerFragment
@ -190,7 +190,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
ViewTreeObserver.OnGlobalLayoutListener { ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() { override fun onGlobalLayout() {
slidingPanel.viewTreeObserver.removeOnGlobalLayoutListener(this) slidingPanel.viewTreeObserver.removeOnGlobalLayoutListener(this)
if (cps != PEAK) { if (cps != Peak) {
val params = slidingPanel.layoutParams as ViewGroup.LayoutParams val params = slidingPanel.layoutParams as ViewGroup.LayoutParams
params.height = ViewGroup.LayoutParams.MATCH_PARENT params.height = ViewGroup.LayoutParams.MATCH_PARENT
slidingPanel.layoutParams = params slidingPanel.layoutParams = params
@ -242,22 +242,22 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
cps = PreferenceUtil.getInstance(this).nowPlayingScreen cps = PreferenceUtil.getInstance(this).nowPlayingScreen
val fragment: Fragment = when (cps) { val fragment: Fragment = when (cps) {
BLUR -> BlurPlayerFragment() Blur -> BlurPlayerFragment()
ADAPTIVE -> AdaptiveFragment() Adaptive -> AdaptiveFragment()
NORMAL -> PlayerFragment() Normal -> PlayerFragment()
CARD -> CardFragment() Card -> CardFragment()
BLUR_CARD -> CardBlurFragment() BlurCard -> CardBlurFragment()
FIT -> FitFragment() Fit -> FitFragment()
FLAT -> FlatPlayerFragment() Flat -> FlatPlayerFragment()
FULL -> FullPlayerFragment() Full -> FullPlayerFragment()
PLAIN -> PlainPlayerFragment() Plain -> PlainPlayerFragment()
SIMPLE -> SimplePlayerFragment() Simple -> SimplePlayerFragment()
MATERIAL -> MaterialFragment() Material -> MaterialFragment()
COLOR -> ColorFragment() Color -> ColorFragment()
TINY -> TinyPlayerFragment() Tiny -> TinyPlayerFragment()
PEAK -> PeakPlayerFragment() Peak -> PeakPlayerFragment()
CIRCLE -> CirclePlayerFragment() Circle -> CirclePlayerFragment()
CLASSIC -> ClassicPlayerFragment() Classic -> ClassicPlayerFragment()
else -> PlayerFragment() else -> PlayerFragment()
} // must implement AbsPlayerFragment } // must implement AbsPlayerFragment
supportFragmentManager.beginTransaction() supportFragmentManager.beginTransaction()
@ -310,24 +310,24 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
val isColorLight = ColorUtil.isColorLight(paletteColor) val isColorLight = ColorUtil.isColorLight(paletteColor)
if (PreferenceUtil.getInstance(this).adaptiveColor && (cps == NORMAL || cps == FLAT)) { if (PreferenceUtil.getInstance(this).adaptiveColor && (cps == Normal || cps == Flat)) {
super.setLightNavigationBar(true) super.setLightNavigationBar(true)
super.setLightStatusbar(isColorLight) super.setLightStatusbar(isColorLight)
} else if (cps == CARD || cps == BLUR || cps == BLUR_CARD) { } else if (cps == Card || cps == Blur || cps == BlurCard) {
super.setLightStatusbar(false) super.setLightStatusbar(false)
super.setLightNavigationBar(true) super.setLightNavigationBar(true)
super.setNavigationbarColor(Color.BLACK) super.setNavigationbarColor(Color.BLACK)
} else if (cps == COLOR || cps == TINY) { } else if (cps == Color || cps == Tiny) {
super.setNavigationbarColor(paletteColor) super.setNavigationbarColor(paletteColor)
super.setLightNavigationBar(isColorLight) super.setLightNavigationBar(isColorLight)
super.setLightStatusbar(isColorLight) super.setLightStatusbar(isColorLight)
} else if (cps == FULL) { } else if (cps == Full) {
super.setNavigationbarColor(paletteColor) super.setNavigationbarColor(paletteColor)
super.setLightNavigationBar(isColorLight) super.setLightNavigationBar(isColorLight)
super.setLightStatusbar(false) super.setLightStatusbar(false)
} else if (cps == CLASSIC) { } else if (cps == Classic ) {
super.setLightStatusbar(false) super.setLightStatusbar(false)
} else if (cps == FIT) { } else if (cps == Fit) {
super.setLightStatusbar(false) super.setLightStatusbar(false)
} else { } else {
super.setLightStatusbar( super.setLightStatusbar(
@ -386,8 +386,4 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
bottomNavigationView.hide() bottomNavigationView.hide()
} }
} }
}
fun Context.dim(dimen: Int) {
} }

View file

@ -9,7 +9,7 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import code.name.monkey.retromusic.R import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.fragments.AlbumCoverStyle import code.name.monkey.retromusic.fragments.AlbumCoverStyle
import code.name.monkey.retromusic.fragments.NowPlayingScreen import code.name.monkey.retromusic.fragments.NowPlayingScreen.*
import code.name.monkey.retromusic.glide.RetroMusicColoredTarget import code.name.monkey.retromusic.glide.RetroMusicColoredTarget
import code.name.monkey.retromusic.glide.SongGlideRequest import code.name.monkey.retromusic.glide.SongGlideRequest
import code.name.monkey.retromusic.misc.CustomFragmentStatePagerAdapter import code.name.monkey.retromusic.misc.CustomFragmentStatePagerAdapter
@ -83,19 +83,19 @@ class AlbumCoverPagerAdapter(
): View? { ): View? {
val view = inflater.inflate(getLayoutWithPlayerTheme(), container, false) val view = inflater.inflate(getLayoutWithPlayerTheme(), container, false)
albumCover = view.findViewById(R.id.player_image) albumCover = view.findViewById(R.id.player_image)
albumCover.setOnClickListener { /*albumCover.setOnClickListener {
NavigationUtil.goToLyrics(requireActivity()) NavigationUtil.goToLyrics(requireActivity())
} }*/
return view return view
} }
private fun getLayoutWithPlayerTheme(): Int { private fun getLayoutWithPlayerTheme(): Int {
return when (PreferenceUtil.getInstance(requireContext()).nowPlayingScreen) { return when (PreferenceUtil.getInstance(requireContext()).nowPlayingScreen) {
NowPlayingScreen.CARD, Card,
NowPlayingScreen.FIT, Fit,
NowPlayingScreen.TINY, Tiny,
NowPlayingScreen.CLASSIC, Classic,
NowPlayingScreen.FULL -> R.layout.fragment_album_full_cover Full -> R.layout.fragment_album_full_cover
else -> { else -> {
if (PreferenceUtil.getInstance(requireContext()).carouselEffect() if (PreferenceUtil.getInstance(requireContext()).carouselEffect()
) { ) {

View file

@ -11,20 +11,20 @@ enum class NowPlayingScreen constructor(
val id: Int val id: Int
) { ) {
ADAPTIVE(R.string.adaptive, R.drawable.np_adaptive, 10), Adaptive(R.string.adaptive, R.drawable.np_adaptive, 10),
BLUR(R.string.blur, R.drawable.np_blur, 4), Blur(R.string.blur, R.drawable.np_blur, 4),
BLUR_CARD(R.string.blur_card, R.drawable.np_blur_card, 9), BlurCard(R.string.blur_card, R.drawable.np_blur_card, 9),
CARD(R.string.card, R.drawable.np_card, 6), Card(R.string.card, R.drawable.np_card, 6),
CIRCLE(R.string.circle, R.drawable.np_minimalistic_circle, 15), Circle(R.string.circle, R.drawable.np_minimalistic_circle, 15),
CLASSIC(R.string.classic, R.drawable.np_classic, 16), Classic(R.string.classic, R.drawable.np_classic, 16),
COLOR(R.string.color, R.drawable.np_color, 5), Color(R.string.color, R.drawable.np_color, 5),
FIT(R.string.fit, R.drawable.np_fit, 12), Fit(R.string.fit, R.drawable.np_fit, 12),
FLAT(R.string.flat, R.drawable.np_flat, 1), Flat(R.string.flat, R.drawable.np_flat, 1),
FULL(R.string.full, R.drawable.np_full, 2), Full(R.string.full, R.drawable.np_full, 2),
MATERIAL(R.string.material, R.drawable.np_material, 11), Material(R.string.material, R.drawable.np_material, 11),
NORMAL(R.string.normal, R.drawable.np_normal, 0), Normal(R.string.normal, R.drawable.np_normal, 0),
PEAK(R.string.peak, R.drawable.np_peak, 14), Peak(R.string.peak, R.drawable.np_peak, 14),
PLAIN(R.string.plain, R.drawable.np_plain, 3), Plain(R.string.plain, R.drawable.np_plain, 3),
SIMPLE(R.string.simple, R.drawable.np_simple, 8), Simple(R.string.simple, R.drawable.np_simple, 8),
TINY(R.string.tiny, R.drawable.np_tiny, 7), Tiny(R.string.tiny, R.drawable.np_tiny, 7),
} }

View file

@ -51,7 +51,7 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(), ViewPager.OnPageChan
val ratio = metrics.heightPixels.toFloat() / metrics.widthPixels.toFloat() val ratio = metrics.heightPixels.toFloat() / metrics.widthPixels.toFloat()
if (nps == FULL || nps == CLASSIC || nps == FIT) { if (nps == Full || nps == Classic || nps == Fit) {
viewPager.offscreenPageLimit = 2 viewPager.offscreenPageLimit = 2
} else if (PreferenceUtil.getInstance(requireContext()).carouselEffect()) { } else if (PreferenceUtil.getInstance(requireContext()).carouselEffect()) {
viewPager.clipToPadding = false viewPager.clipToPadding = false

View file

@ -263,6 +263,7 @@ class ClassicPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
override fun onColorChanged(color: MediaNotificationProcessor) { override fun onColorChanged(color: MediaNotificationProcessor) {
lastColor = color.backgroundColor lastColor = color.backgroundColor
callbacks?.onPaletteColorChanged()
lastPlaybackControlsColor = color.primaryTextColor lastPlaybackControlsColor = color.primaryTextColor
lastDisabledPlaybackControlsColor = ColorUtil.withAlpha(color.primaryTextColor, 0.3f) lastDisabledPlaybackControlsColor = ColorUtil.withAlpha(color.primaryTextColor, 0.3f)

View file

@ -0,0 +1,130 @@
package code.name.monkey.retromusic.fragments.player.home
import android.graphics.Color
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.widget.Toolbar
import code.name.monkey.appthemehelper.util.ATHUtil
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
import code.name.monkey.retromusic.helper.MusicPlayerRemote
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.util.MusicUtil
import code.name.monkey.retromusic.util.color.MediaNotificationProcessor
import kotlinx.android.synthetic.main.fragment_home_player.*
class HomePlayerFragment : AbsPlayerFragment(), MusicProgressViewUpdateHelper.Callback {
private var lastColor: Int = 0
private lateinit var progressViewUpdateHelper: MusicProgressViewUpdateHelper
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
progressViewUpdateHelper = MusicProgressViewUpdateHelper(this)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_home_player, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setUpPlayerToolbar()
}
override fun onResume() {
super.onResume()
progressViewUpdateHelper.start()
}
override fun onPause() {
super.onPause()
progressViewUpdateHelper.stop()
}
override fun playerToolbar(): Toolbar? {
return playerToolbar
}
override fun onShow() {
}
override fun onHide() {
}
override fun onServiceConnected() {
super.onServiceConnected()
updateSong()
}
override fun onPlayingMetaChanged() {
super.onPlayingMetaChanged()
updateSong()
}
private fun updateSong() {
val song = MusicPlayerRemote.currentSong
title.text = song.title
text.text = song.artistName
}
override fun onBackPressed(): Boolean {
return false
}
override fun toolbarIconColor(): Int {
return Color.WHITE
}
override val paletteColor: Int
get() = lastColor
override fun onColorChanged(color: MediaNotificationProcessor) {
lastColor = color.backgroundColor
callbacks?.onPaletteColorChanged()
ToolbarContentTintHelper.colorizeToolbar(
playerToolbar,
Color.WHITE,
requireActivity()
)
}
override fun toggleFavorite(song: Song) {
super.toggleFavorite(song)
if (song.id == MusicPlayerRemote.currentSong.id) {
updateIsFavorite()
}
}
override fun onFavoriteToggled() {
toggleFavorite(MusicPlayerRemote.currentSong)
}
override fun onUpdateProgressViews(progress: Int, total: Int) {
songTotalTime.text = MusicUtil.getReadableDurationString(progress.toLong())
}
private fun setUpPlayerToolbar() {
playerToolbar.inflateMenu(R.menu.menu_player)
playerToolbar.setNavigationOnClickListener { requireActivity().onBackPressed() }
playerToolbar.setOnMenuItemClickListener(this)
ToolbarContentTintHelper.colorizeToolbar(
playerToolbar,
ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal),
requireActivity()
)
}
}

View file

@ -171,14 +171,14 @@ private class NowPlayingScreenAdapter(private val context: Context) : PagerAdapt
} }
private fun isNowPlayingThemes(screen: NowPlayingScreen): Boolean { private fun isNowPlayingThemes(screen: NowPlayingScreen): Boolean {
return (screen == FULL || return (screen == Full ||
screen == CARD || screen == Card ||
screen == PLAIN || screen == Plain ||
screen == BLUR || screen == Blur ||
screen == COLOR || screen == Color ||
screen == SIMPLE || screen == Simple ||
screen == BLUR_CARD || screen == BlurCard ||
screen == CIRCLE || screen == Circle ||
screen == ADAPTIVE) screen == Adaptive)
&& !App.isProVersion() && !App.isProVersion()
} }

View file

@ -294,11 +294,11 @@ public class MusicUtil {
long minutes = (songDurationMillis / 1000) / 60; long minutes = (songDurationMillis / 1000) / 60;
long seconds = (songDurationMillis / 1000) % 60; long seconds = (songDurationMillis / 1000) % 60;
if (minutes < 60) { if (minutes < 60) {
return String.format(Locale.getDefault(), "%01d:%02d", minutes, seconds); return String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds);
} else { } else {
long hours = minutes / 60; long hours = minutes / 60;
minutes = minutes % 60; minutes = minutes % 60;
return String.format(Locale.getDefault(), "%d:%02d:%02d", hours, minutes, seconds); return String.format(Locale.getDefault(), "%02d:%02d:%02d", hours, minutes, seconds);
} }
} }

View file

@ -641,7 +641,7 @@ public final class PreferenceUtil {
return nowPlayingScreen; return nowPlayingScreen;
} }
} }
return NowPlayingScreen.ADAPTIVE; return NowPlayingScreen.Adaptive;
} }
@SuppressLint("CommitPrefEdits") @SuppressLint("CommitPrefEdits")

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="135"
android:endColor="#00000000"
android:startColor="#11000000"
android:type="linear" />
</shape>

View file

@ -27,13 +27,13 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:background="@drawable/shadow_down_strong" android:background="@drawable/shadow_down_strong"
app:layout_constraintBottom_toBottomOf="@id/dummy_statusbar_actionbar" app:layout_constraintBottom_toBottomOf="@id/toolbarContainer"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/dummy_statusbar_actionbar" /> app:layout_constraintTop_toTopOf="@id/toolbarContainer" />
<LinearLayout <LinearLayout
android:id="@+id/dummy_statusbar_actionbar" android:id="@+id/toolbarContainer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"

View file

@ -0,0 +1,99 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/playerAlbumCoverFragment"
android:name="code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/songTotalTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:shadowColor="@color/md_black_1000"
android:shadowDx="1"
android:shadowDy="1"
android:shadowRadius="2"
android:textAppearance="@style/TextViewHeadline2"
android:textColor="@color/md_white_1000"
app:layout_constraintBottom_toTopOf="@id/title"
app:layout_constraintEnd_toEndOf="parent"
tools:text="@tools:sample/date/hhmm"
tools:textColor="@color/md_black_1000" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="end"
android:paddingHorizontal="16dp"
android:shadowColor="@color/md_black_1000"
android:shadowDx="1"
android:shadowDy="1"
android:shadowRadius="2"
android:textAppearance="@style/TextViewHeadline5"
android:textColor="@color/md_white_1000"
app:layout_constraintBottom_toTopOf="@id/text"
app:layout_constraintEnd_toEndOf="parent"
tools:text="@tools:sample/full_names"
tools:textColor="@color/md_black_1000" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:alpha="0.75"
android:gravity="end"
android:paddingHorizontal="16dp"
android:paddingBottom="16dp"
android:shadowColor="@color/md_black_1000"
android:shadowDx="1"
android:shadowDy="1"
android:shadowRadius="2"
android:textAppearance="@style/TextViewSubtitle1"
android:textColor="@color/md_white_1000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
tools:text="@tools:sample/full_names"
tools:textColor="@color/md_black_1000" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/shadow_down_strong"
app:layout_constraintBottom_toBottomOf="@id/toolbarContainer"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/toolbarContainer" />
<LinearLayout
android:id="@+id/toolbarContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<code.name.monkey.retromusic.views.StatusBarView
android:id="@+id/status_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/status_bar_padding" />
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/playerToolbar"
style="@style/Toolbar"
android:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp"
app:navigationIcon="@drawable/ic_keyboard_arrow_down_black_24dp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>