Added classic theme and updated translations
This commit is contained in:
parent
891f1bce34
commit
8d49f8cdcb
61 changed files with 1652 additions and 590 deletions
|
@ -0,0 +1,37 @@
|
|||
package code.name.monkey.retromusic;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
||||
|
||||
|
||||
public class CustomBottomSheetBehavior<V extends View> extends BottomSheetBehavior<V> {
|
||||
|
||||
private static final String TAG = "CustomBottomSheetBehavi";
|
||||
|
||||
private boolean allowDragging = true;
|
||||
|
||||
public CustomBottomSheetBehavior() {
|
||||
}
|
||||
|
||||
public CustomBottomSheetBehavior(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public void setAllowDragging(boolean allowDragging) {
|
||||
this.allowDragging = allowDragging;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onInterceptTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) {
|
||||
if (!allowDragging) {
|
||||
return false;
|
||||
}
|
||||
return super.onInterceptTouchEvent(parent, child, event);
|
||||
}
|
||||
}
|
|
@ -11,6 +11,7 @@ import androidx.annotation.LayoutRes
|
|||
import androidx.fragment.app.Fragment
|
||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||
import code.name.monkey.appthemehelper.util.ColorUtil
|
||||
import code.name.monkey.retromusic.CustomBottomSheetBehavior
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.extensions.hide
|
||||
import code.name.monkey.retromusic.extensions.show
|
||||
|
@ -18,7 +19,7 @@ import code.name.monkey.retromusic.fragments.MiniPlayerFragment
|
|||
import code.name.monkey.retromusic.fragments.NowPlayingScreen
|
||||
import code.name.monkey.retromusic.fragments.NowPlayingScreen.*
|
||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
|
||||
import code.name.monkey.retromusic.fragments.player.TestPlayerFragment
|
||||
import code.name.monkey.retromusic.fragments.player.classic.ClassicPlayerFragment
|
||||
import code.name.monkey.retromusic.fragments.player.adaptive.AdaptiveFragment
|
||||
import code.name.monkey.retromusic.fragments.player.blur.BlurPlayerFragment
|
||||
import code.name.monkey.retromusic.fragments.player.card.CardFragment
|
||||
|
@ -48,7 +49,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
|
|||
val TAG: String = AbsSlidingMusicPanelActivity::class.java.simpleName
|
||||
}
|
||||
|
||||
private lateinit var bottomSheetBehavior: BottomSheetBehavior<FrameLayout>
|
||||
private lateinit var bottomSheetBehavior: CustomBottomSheetBehavior<FrameLayout>
|
||||
private var miniPlayerFragment: MiniPlayerFragment? = null
|
||||
private var playerFragment: AbsPlayerFragment? = null
|
||||
private var currentNowPlayingScreen: NowPlayingScreen? = null
|
||||
|
@ -85,6 +86,8 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
|
|||
}
|
||||
}
|
||||
|
||||
fun getBottomSheetBehavior() = bottomSheetBehavior
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(createContentView())
|
||||
|
@ -94,7 +97,8 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
|
|||
|
||||
updateTabs()
|
||||
|
||||
bottomSheetBehavior = BottomSheetBehavior.from(slidingPanel)
|
||||
bottomSheetBehavior =
|
||||
BottomSheetBehavior.from(slidingPanel) as CustomBottomSheetBehavior
|
||||
|
||||
val themeColor = ATHUtil.resolveColor(this, android.R.attr.windowBackground, Color.GRAY)
|
||||
dimBackground.setBackgroundColor(ColorUtil.withAlpha(themeColor, 0.5f))
|
||||
|
@ -242,7 +246,7 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity(),
|
|||
TINY -> TinyPlayerFragment()
|
||||
PEAK -> PeakPlayerFragment()
|
||||
CIRCLE -> CirclePlayerFragment()
|
||||
EXAMPLE -> TestPlayerFragment()
|
||||
EXAMPLE -> ClassicPlayerFragment()
|
||||
else -> PlayerFragment()
|
||||
} // must implement AbsPlayerFragment
|
||||
supportFragmentManager.beginTransaction().replace(R.id.playerFragmentContainer, fragment)
|
||||
|
|
|
@ -14,7 +14,6 @@ import android.view.MenuItem
|
|||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import code.name.monkey.appthemehelper.util.ATHUtil
|
||||
import code.name.monkey.retromusic.R
|
||||
import code.name.monkey.retromusic.activities.tageditor.AbsTagEditorActivity
|
||||
import code.name.monkey.retromusic.activities.tageditor.SongTagEditorActivity
|
||||
|
@ -256,7 +255,6 @@ abstract class AbsPlayerFragment : AbsMusicServiceFragment(),
|
|||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
view.setBackgroundColor(ATHUtil.resolveColor(requireContext(), R.attr.colorSecondary))
|
||||
if (PreferenceUtil.getInstance(requireContext()).fullScreenMode &&
|
||||
view.findViewById<View>(R.id.status_bar) != null
|
||||
) {
|
||||
|
|
|
@ -1,31 +1,30 @@
|
|||
package code.name.monkey.retromusic.fragments.player
|
||||
package code.name.monkey.retromusic.fragments.player.classic
|
||||
|
||||
import android.animation.ObjectAnimator
|
||||
import android.graphics.Color
|
||||
import android.graphics.PorterDuff
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.animation.LinearInterpolator
|
||||
import android.widget.SeekBar
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import code.name.monkey.appthemehelper.ThemeStore
|
||||
import code.name.monkey.appthemehelper.util.*
|
||||
import code.name.monkey.retromusic.CustomBottomSheetBehavior
|
||||
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.extensions.hide
|
||||
import code.name.monkey.retromusic.extensions.ripAlpha
|
||||
import code.name.monkey.retromusic.extensions.show
|
||||
import code.name.monkey.retromusic.fragments.VolumeFragment
|
||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment
|
||||
import code.name.monkey.retromusic.fragments.base.AbsPlayerFragment
|
||||
import code.name.monkey.retromusic.fragments.player.PlayerAlbumCoverFragment
|
||||
import code.name.monkey.retromusic.helper.MusicPlayerRemote
|
||||
import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper
|
||||
import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler
|
||||
import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener
|
||||
import code.name.monkey.retromusic.model.Song
|
||||
import code.name.monkey.retromusic.service.MusicService
|
||||
import code.name.monkey.retromusic.util.MusicUtil
|
||||
|
@ -33,10 +32,11 @@ import code.name.monkey.retromusic.util.PreferenceUtil
|
|||
import code.name.monkey.retromusic.util.ViewUtil
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||
import com.google.android.material.card.MaterialCardView
|
||||
import kotlinx.android.synthetic.main.fragment_full_player.*
|
||||
import kotlinx.android.synthetic.main.fragment_layout_test.*
|
||||
import kotlinx.android.synthetic.main.fragment_clasic_player.*
|
||||
import kotlinx.android.synthetic.main.fragment_classic_controls.*
|
||||
import kotlinx.android.synthetic.main.status_bar.*
|
||||
|
||||
class TestPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
|
||||
class ClassicPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
|
||||
MusicProgressViewUpdateHelper.Callback {
|
||||
|
||||
private var lastColor: Int = 0
|
||||
|
@ -46,13 +46,27 @@ class TestPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
|
|||
private lateinit var queueAdapter: PlayingQueueAdapter
|
||||
private var volumeFragment: VolumeFragment? = null
|
||||
|
||||
|
||||
private val bottomSheetCallbackList = object : BottomSheetBehavior.BottomSheetCallback() {
|
||||
override fun onSlide(bottomSheet: View, slideOffset: Float) {
|
||||
handle.alpha = 1 - slideOffset
|
||||
(requireActivity() as AbsSlidingMusicPanelActivity).getBottomSheetBehavior()
|
||||
.setAllowDragging(false)
|
||||
|
||||
playerQueueSheet.setContentPadding(
|
||||
playerQueueSheet.contentPaddingLeft,
|
||||
(slideOffset * status_bar.height).toInt(),
|
||||
playerQueueSheet.contentPaddingRight,
|
||||
playerQueueSheet.contentPaddingBottom
|
||||
)
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -66,7 +80,7 @@ class TestPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
|
|||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
return inflater.inflate(R.layout.fragment_full_player, container, false)
|
||||
return inflater.inflate(R.layout.fragment_clasic_player, container, false)
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
|
@ -81,6 +95,14 @@ class TestPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
|
|||
coverFragment.setCallbacks(this)
|
||||
|
||||
getQueuePanel().addBottomSheetCallback(bottomSheetCallbackList)
|
||||
|
||||
|
||||
playerQueueSheet.setOnTouchListener { _, _ ->
|
||||
(requireActivity() as AbsSlidingMusicPanelActivity).getBottomSheetBehavior()
|
||||
.setAllowDragging(false)
|
||||
getQueuePanel().setAllowDragging(true)
|
||||
return@setOnTouchListener false
|
||||
}
|
||||
}
|
||||
|
||||
private fun hideVolumeIfAvailable() {
|
||||
|
@ -117,9 +139,9 @@ class TestPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
|
|||
progressViewUpdateHelper.stop()
|
||||
}
|
||||
|
||||
private fun getQueuePanel(): BottomSheetBehavior<MaterialCardView> {
|
||||
private fun getQueuePanel(): CustomBottomSheetBehavior<MaterialCardView> {
|
||||
playerQueueSheet as MaterialCardView
|
||||
return BottomSheetBehavior.from(playerQueueSheet)
|
||||
return CustomBottomSheetBehavior.from(playerQueueSheet) as CustomBottomSheetBehavior<MaterialCardView>
|
||||
}
|
||||
|
||||
private fun setupPanel() {
|
||||
|
@ -153,7 +175,7 @@ class TestPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
|
|||
MusicPlayerRemote.position,
|
||||
R.layout.item_queue
|
||||
)
|
||||
playerQueueRecyclerView.apply {
|
||||
recyclerView.apply {
|
||||
adapter = queueAdapter
|
||||
layoutManager = LinearLayoutManager(requireContext())
|
||||
}
|
||||
|
@ -197,16 +219,21 @@ class TestPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
|
|||
}
|
||||
|
||||
override fun toolbarIconColor(): Int {
|
||||
return ATHUtil.resolveColor(requireContext(), R.attr.colorControlNormal)
|
||||
return Color.WHITE
|
||||
}
|
||||
|
||||
override val paletteColor: Int
|
||||
get() = lastColor
|
||||
|
||||
override fun onColorChanged(color: Int) {
|
||||
playerContainer.setBackgroundColor(color)
|
||||
val colorBg = ATHUtil.resolveColor(requireContext(), color)
|
||||
if (ColorUtil.isColorLight(colorBg)) {
|
||||
lastColor = color
|
||||
ToolbarContentTintHelper.colorizeToolbar(
|
||||
playerToolbar,
|
||||
Color.WHITE,
|
||||
requireActivity()
|
||||
)
|
||||
|
||||
if (!ATHUtil.isWindowBackgroundDark(requireContext())) {
|
||||
lastPlaybackControlsColor =
|
||||
MaterialValueHelper.getSecondaryTextColor(requireContext(), true)
|
||||
lastDisabledPlaybackControlsColor =
|
||||
|
@ -237,7 +264,9 @@ class TestPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
|
|||
songInfo.setTextColor(lastDisabledPlaybackControlsColor)
|
||||
songCurrentProgress.setTextColor(lastPlaybackControlsColor)
|
||||
songTotalTime.setTextColor(lastPlaybackControlsColor)
|
||||
volumeFragment?.setTintableColor(lastPlaybackControlsColor)
|
||||
ViewUtil.setProgressDrawable(progressSlider, colorFinal, true)
|
||||
player_queue_sub_header.setTextColor(colorFinal)
|
||||
volumeFragment?.setTintable(colorFinal)
|
||||
TintHelper.setTintAuto(playPauseButton, colorFinal, true)
|
||||
ViewUtil.setProgressDrawable(progressSlider, colorFinal, true)
|
||||
updateRepeatState()
|
||||
|
@ -257,17 +286,24 @@ class TestPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
|
|||
}
|
||||
|
||||
override fun onUpdateProgressViews(progress: Int, total: Int) {
|
||||
progressSlider.max = total
|
||||
|
||||
val animator = ObjectAnimator.ofInt(progressSlider, "progress", progress)
|
||||
animator.duration = AbsPlayerControlsFragment.SLIDER_ANIMATION_TIME
|
||||
animator.interpolator = LinearInterpolator()
|
||||
animator.start()
|
||||
|
||||
progressSlider.valueTo = total.toFloat()
|
||||
progressSlider.value = progress.toFloat()
|
||||
songTotalTime.text = MusicUtil.getReadableDurationString(total.toLong())
|
||||
songCurrentProgress.text = MusicUtil.getReadableDurationString(progress.toLong())
|
||||
}
|
||||
|
||||
fun setUpProgressSlider() {
|
||||
progressSlider.addOnChangeListener { _, value, fromUser ->
|
||||
if (fromUser) {
|
||||
MusicPlayerRemote.seekTo(value.toInt())
|
||||
onUpdateProgressViews(
|
||||
MusicPlayerRemote.songProgressMillis,
|
||||
MusicPlayerRemote.songDurationMillis
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPlayStateChanged() {
|
||||
updatePlayPauseDrawableState()
|
||||
}
|
||||
|
@ -300,19 +336,6 @@ class TestPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
|
|||
setUpProgressSlider()
|
||||
}
|
||||
|
||||
fun setUpProgressSlider() {
|
||||
progressSlider.setOnSeekBarChangeListener(object : SimpleOnSeekbarChangeListener() {
|
||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
||||
if (fromUser) {
|
||||
MusicPlayerRemote.seekTo(progress)
|
||||
onUpdateProgressViews(
|
||||
MusicPlayerRemote.songProgressMillis,
|
||||
MusicPlayerRemote.songDurationMillis
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun setUpPrevNext() {
|
||||
updatePrevNextColor()
|
||||
|
@ -379,7 +402,7 @@ class TestPlayerFragment : AbsPlayerFragment(), View.OnLayoutChangeListener,
|
|||
) {
|
||||
val height = playerContainer.height
|
||||
val width = playerContainer.width
|
||||
val finalHeight = height - (playerControlsContainer.height + width)
|
||||
val finalHeight = height - width
|
||||
val panel = getQueuePanel()
|
||||
panel.peekHeight = finalHeight
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue