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

146 lines
5.2 KiB
Kotlin
Raw Normal View History

2020-10-06 08:46:04 +00:00
/*
* Copyright (c) 2020 Hemanth Savarla.
*
* Licensed under the GNU General Public License v3
*
* This is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
*/
package code.name.monkey.retromusic.fragments.other
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
2020-05-20 21:30:13 +00:00
import android.widget.SeekBar
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.databinding.FragmentVolumeBinding
2020-05-20 21:30:13 +00:00
import code.name.monkey.retromusic.extensions.applyColor
2018-11-30 01:06:16 +00:00
import code.name.monkey.retromusic.helper.MusicPlayerRemote
2020-06-06 18:57:28 +00:00
import code.name.monkey.retromusic.util.PreferenceUtil
2019-12-05 18:18:54 +00:00
import code.name.monkey.retromusic.volume.AudioVolumeObserver
import code.name.monkey.retromusic.volume.OnAudioVolumeChangedListener
2020-01-07 12:33:59 +00:00
2020-05-20 21:30:13 +00:00
class VolumeFragment : Fragment(), SeekBar.OnSeekBarChangeListener, OnAudioVolumeChangedListener,
View.OnClickListener {
2020-01-07 12:33:59 +00:00
private var _binding: FragmentVolumeBinding? = null
private val binding get() = _binding!!
2020-01-07 12:33:59 +00:00
private var audioVolumeObserver: AudioVolumeObserver? = null
private val audioManager: AudioManager
2020-01-07 12:33:59 +00:00
get() = requireContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager
override fun onCreateView(
2020-10-06 08:46:04 +00:00
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentVolumeBinding.inflate(inflater, container, false)
return binding.root
2020-01-07 12:33:59 +00:00
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setTintable(ThemeStore.accentColor(requireContext()))
binding.volumeDown.setOnClickListener(this)
binding.volumeUp.setOnClickListener(this)
2020-01-07 12:33:59 +00:00
}
override fun onResume() {
super.onResume()
if (audioVolumeObserver == null) {
audioVolumeObserver = AudioVolumeObserver(requireActivity())
}
2020-06-06 18:57:28 +00:00
audioVolumeObserver?.register(AudioManager.STREAM_MUSIC, this)
2020-01-07 12:33:59 +00:00
val audioManager = audioManager
binding.volumeSeekBar.max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
binding.volumeSeekBar.progress = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
binding.volumeSeekBar.setOnSeekBarChangeListener(this)
2020-01-07 12:33:59 +00:00
}
2020-05-20 21:30:13 +00:00
override fun onAudioVolumeChanged(currentVolume: Int, maxVolume: Int) {
if (_binding != null) {
binding.volumeSeekBar.max = maxVolume
binding.volumeSeekBar.progress = currentVolume
binding.volumeDown.setImageResource(if (currentVolume == 0) R.drawable.ic_volume_off else R.drawable.ic_volume_down)
2020-01-07 12:33:59 +00:00
}
}
override fun onDestroyView() {
super.onDestroyView()
2020-06-06 18:57:28 +00:00
audioVolumeObserver?.unregister()
_binding = null
2020-01-07 12:33:59 +00:00
}
2020-05-20 21:30:13 +00:00
override fun onProgressChanged(seekBar: SeekBar, i: Int, b: Boolean) {
val audioManager = audioManager
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0)
2020-05-20 21:30:13 +00:00
setPauseWhenZeroVolume(i < 1)
binding.volumeDown.setImageResource(if (i == 0) R.drawable.ic_volume_off else R.drawable.ic_volume_down)
2020-05-20 21:30:13 +00:00
}
override fun onStartTrackingTouch(seekBar: SeekBar) {
}
override fun onStopTrackingTouch(seekBar: SeekBar) {
}
2020-01-07 12:33:59 +00:00
override fun onClick(view: View) {
val audioManager = audioManager
when (view.id) {
R.id.volumeDown -> audioManager.adjustStreamVolume(
2020-01-07 12:33:59 +00:00
AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, 0
)
R.id.volumeUp -> audioManager.adjustStreamVolume(
2020-01-07 12:33:59 +00:00
AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, 0
)
}
}
fun tintWhiteColor() {
val color = Color.WHITE
binding.volumeDown.setColorFilter(color, PorterDuff.Mode.SRC_IN)
binding.volumeUp.setColorFilter(color, PorterDuff.Mode.SRC_IN)
binding.volumeSeekBar.applyColor(color)
2020-01-07 12:33:59 +00:00
}
fun setTintable(color: Int) {
binding.volumeSeekBar.applyColor(color)
2020-05-20 21:30:13 +00:00
}
2020-01-07 12:33:59 +00:00
private fun setPauseWhenZeroVolume(pauseWhenZeroVolume: Boolean) {
2020-06-06 18:57:28 +00:00
if (PreferenceUtil.isPauseOnZeroVolume)
if (MusicPlayerRemote.isPlaying && pauseWhenZeroVolume)
MusicPlayerRemote.pauseSong()
2020-01-07 12:33:59 +00:00
}
fun setTintableColor(color: Int) {
binding.volumeDown.setColorFilter(color, PorterDuff.Mode.SRC_IN)
binding.volumeUp.setColorFilter(color, PorterDuff.Mode.SRC_IN)
2020-10-06 08:46:04 +00:00
// TintHelper.setTint(volumeSeekBar, color, false)
binding.volumeSeekBar.applyColor(color)
2020-01-07 12:33:59 +00:00
}
companion object {
fun newInstance(): VolumeFragment {
return VolumeFragment()
}
}
2018-11-30 01:06:16 +00:00
}