PlayerAndroid/app/src/main/java/code/name/monkey/retromusic/fragments/VolumeFragment.kt

133 lines
4.7 KiB
Kotlin
Raw Normal View History

2019-04-20 05:29:45 +00:00
package code.name.monkey.retromusic.fragments
2018-11-30 01:06:16 +00:00
import android.content.Context
2019-12-05 18:18:54 +00:00
import android.graphics.Color
import android.graphics.PorterDuff
2018-11-30 01:06:16 +00:00
import android.media.AudioManager
import android.os.Bundle
2019-12-05 18:18:54 +00:00
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
2018-11-30 01:06:16 +00:00
import androidx.fragment.app.Fragment
2018-12-25 14:58:47 +00:00
import code.name.monkey.appthemehelper.ThemeStore
2018-11-30 01:06:16 +00:00
import code.name.monkey.retromusic.R
import code.name.monkey.retromusic.extensions.setRange
2018-11-30 01:06:16 +00:00
import code.name.monkey.retromusic.helper.MusicPlayerRemote
2019-12-05 18:18:54 +00:00
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.ViewUtil
import code.name.monkey.retromusic.volume.AudioVolumeObserver
import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener
2020-02-24 22:33:05 +00:00
import com.google.android.material.slider.Slider
2020-03-01 04:38:36 +00:00
import kotlinx.android.synthetic.main.fragment_volume.*
2020-01-07 12:33:59 +00:00
2020-02-24 22:33:05 +00:00
class VolumeFragment : Fragment(), OnAudioVolumeChangedListener,
2020-03-01 04:38:36 +00:00
View.OnClickListener, Slider.OnChangeListener {
2020-01-07 12:33:59 +00:00
private var audioVolumeObserver: AudioVolumeObserver? = null
private val audioManager: AudioManager?
get() = requireContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_volume, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setTintable(ThemeStore.accentColor(requireContext()))
volumeDown.setOnClickListener(this)
volumeUp.setOnClickListener(this)
}
override fun onResume() {
super.onResume()
if (audioVolumeObserver == null) {
audioVolumeObserver = AudioVolumeObserver(requireActivity())
}
audioVolumeObserver!!.register(AudioManager.STREAM_MUSIC, this)
val audioManager = audioManager
if (audioManager != null) {
volumeSeekBar.valueTo =
audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC).toFloat()
2020-02-24 22:33:05 +00:00
volumeSeekBar.value = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC).toFloat()
2020-01-07 12:33:59 +00:00
}
2020-02-24 22:33:05 +00:00
volumeSeekBar.addOnChangeListener(this)
2020-01-07 12:33:59 +00:00
}
2020-02-24 22:33:05 +00:00
override fun onAudioVolumeChanged(currentVolume: Float, maxVolume: Float) {
2020-01-07 12:33:59 +00:00
if (volumeSeekBar == null) {
return
}
if (maxVolume <= 0.0f) {
2020-04-15 17:34:06 +00:00
setPauseWhenZeroVolume(currentVolume < 1)
2020-02-24 22:33:05 +00:00
return
}
volumeSeekBar.setRange(currentVolume, maxVolume)
2020-02-24 22:33:05 +00:00
volumeDown.setImageResource(if (currentVolume == 0.0f) R.drawable.ic_volume_off_white_24dp else R.drawable.ic_volume_down_white_24dp)
2020-01-07 12:33:59 +00:00
}
override fun onDestroyView() {
super.onDestroyView()
if (audioVolumeObserver != null) {
audioVolumeObserver!!.unregister()
}
}
override fun onClick(view: View) {
val audioManager = audioManager
when (view.id) {
R.id.volumeDown -> audioManager?.adjustStreamVolume(
AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, 0
)
R.id.volumeUp -> audioManager?.adjustStreamVolume(
AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, 0
)
}
}
fun tintWhiteColor() {
val iconColor = Color.WHITE
volumeDown.setColorFilter(iconColor, PorterDuff.Mode.SRC_IN)
volumeUp.setColorFilter(iconColor, PorterDuff.Mode.SRC_IN)
ViewUtil.setProgressDrawable(volumeSeekBar, iconColor, true)
}
fun setTintable(color: Int) {
ViewUtil.setProgressDrawable(volumeSeekBar, color, true)
}
private fun setPauseWhenZeroVolume(pauseWhenZeroVolume: Boolean) {
if (PreferenceUtil.getInstance(requireContext()).pauseOnZeroVolume()) if (MusicPlayerRemote.isPlaying && pauseWhenZeroVolume) {
MusicPlayerRemote.pauseSong()
}
}
fun setTintableColor(color: Int) {
volumeDown.setColorFilter(color, PorterDuff.Mode.SRC_IN)
volumeUp.setColorFilter(color, PorterDuff.Mode.SRC_IN)
ViewUtil.setProgressDrawable(volumeSeekBar, color, true)
}
companion object {
fun newInstance(): VolumeFragment {
return VolumeFragment()
}
}
2020-02-24 22:33:05 +00:00
override fun onValueChange(slider: Slider, value: Float, fromUser: Boolean) {
if (value <= 0) {
return
}
val audioManager = audioManager
audioManager?.setStreamVolume(AudioManager.STREAM_MUSIC, value.toInt(), 0)
setPauseWhenZeroVolume(value < 1.0f)
volumeDown.setImageResource(if (value == 0.0f) R.drawable.ic_volume_off_white_24dp else R.drawable.ic_volume_down_white_24dp)
}
2018-11-30 01:06:16 +00:00
}