Added classic theme and updated translations

This commit is contained in:
h4h13 2020-05-05 13:12:09 +05:30
parent 891f1bce34
commit 8d49f8cdcb
61 changed files with 1652 additions and 590 deletions

View file

@ -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);
}
}

View file

@ -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)

View file

@ -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
) {

View file

@ -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
}