@@ -14,6 +14,7 @@ import android.graphics.drawable.GradientDrawable
14
14
import android.graphics.drawable.InsetDrawable
15
15
import android.graphics.drawable.LayerDrawable
16
16
import android.media.AudioManager
17
+ import android.media.AudioManager.STREAM_MUSIC
17
18
import android.net.Uri
18
19
import android.os.Build
19
20
import android.os.Bundle
@@ -25,16 +26,16 @@ import android.view.animation.Animation.AnimationListener
25
26
import android.widget.ImageView
26
27
import android.widget.LinearLayout
27
28
import android.widget.SeekBar
29
+ import androidx.annotation.RequiresApi
28
30
import androidx.appcompat.widget.PopupMenu
29
31
import androidx.fragment.app.FragmentManager
30
32
import androidx.palette.graphics.Palette
31
33
import androidx.palette.graphics.Palette.Swatch
32
34
import androidx.viewpager.widget.ViewPager.OnPageChangeListener
33
- import io.reactivex.Completable
34
35
import io.reactivex.Single
35
36
import io.reactivex.android.schedulers.AndroidSchedulers
36
- import io.reactivex.functions.BiFunction
37
37
import io.reactivex.schedulers.Schedulers
38
+ import kotlinx.coroutines.launch
38
39
import remix.myplayer.App
39
40
import remix.myplayer.R
40
41
import remix.myplayer.bean.mp3.Song
@@ -348,40 +349,29 @@ class PlayerActivity : BaseMusicActivity() {
348
349
}
349
350
}
350
351
351
- @SuppressLint(" CheckResult" )
352
352
private val onVolumeClick = View .OnClickListener { v ->
353
353
when (v.id) {
354
- R .id.volume_down -> Completable
355
- .fromAction {
356
- audioManager.adjustStreamVolume(AudioManager .STREAM_MUSIC ,
357
- AudioManager .ADJUST_LOWER ,
358
- AudioManager .FLAG_PLAY_SOUND )
359
- }
360
- .subscribeOn(Schedulers .io())
361
- .subscribe()
362
- R .id.volume_up -> Completable
363
- .fromAction {
364
- audioManager.adjustStreamVolume(AudioManager .STREAM_MUSIC ,
365
- AudioManager .ADJUST_RAISE ,
366
- AudioManager .FLAG_PLAY_SOUND )
367
- }
368
- .subscribeOn(Schedulers .io())
369
- .subscribe()
354
+ R .id.volume_down, R .id.volume_up -> {
355
+ launch {
356
+ audioManager.adjustStreamVolume(
357
+ STREAM_MUSIC ,
358
+ when (v.id) {
359
+ R .id.volume_down -> AudioManager .ADJUST_LOWER
360
+ R .id.volume_up -> AudioManager .ADJUST_RAISE
361
+ else -> AudioManager .ADJUST_SAME
362
+ },
363
+ AudioManager .FLAG_PLAY_SOUND
364
+ )
365
+ updateVolumeSeekbar()
366
+ }
367
+ }
370
368
R .id.next_song -> if (bottomConfig == BOTTOM_SHOW_BOTH ) {
371
369
makeAndStartAnimation(binding.layoutPlayerVolume.nextSong, false )
372
370
makeAndStartAnimation(binding.layoutPlayerVolume.volumeContainer, true )
373
371
handler.removeCallbacks(volumeRunnable)
374
- handler.postDelayed(volumeRunnable, DELAY_SHOW_NEXT_SONG .toLong() )
372
+ handler.postDelayed(volumeRunnable, DELAY_SHOW_NEXT_SONG )
375
373
}
376
374
}
377
- if (v.id != R .id.next_song) {
378
- Single .zip(Single .fromCallable { audioManager.getStreamMaxVolume(AudioManager .STREAM_MUSIC ) },
379
- Single .fromCallable { audioManager.getStreamVolume(AudioManager .STREAM_MUSIC ) },
380
- BiFunction { max: Int , current: Int -> longArrayOf(max.toLong(), current.toLong()) })
381
- .subscribeOn(Schedulers .io())
382
- .observeOn(AndroidSchedulers .mainThread())
383
- .subscribe { longs: LongArray -> binding.layoutPlayerVolume.volumeSeekbar.progress = (longs[1 ] * 1.0 / longs[0 ] * 100 ).toInt() }
384
- }
385
375
}
386
376
387
377
private fun makeAndStartAnimation (view : View , show : Boolean ) {
@@ -474,35 +464,44 @@ class PlayerActivity : BaseMusicActivity() {
474
464
}
475
465
})
476
466
477
- // 音量的Seekbar
478
- Single .zip(Single .fromCallable { audioManager.getStreamMaxVolume(AudioManager .STREAM_MUSIC ) },
479
- Single .fromCallable { audioManager.getStreamVolume(AudioManager .STREAM_MUSIC ) },
480
- BiFunction { max: Int , current: Int -> intArrayOf(max, current) })
481
- .subscribeOn(Schedulers .io())
482
- .observeOn(AndroidSchedulers .mainThread())
483
- .subscribe { ints: IntArray ->
484
- val current = ints[1 ]
485
- val max = ints[0 ]
486
- binding.layoutPlayerVolume.volumeSeekbar.progress = (current * 1.0 / max * 100 ).toInt()
487
- binding.layoutPlayerVolume.volumeSeekbar.setOnSeekBarChangeListener(object : SeekBar .OnSeekBarChangeListener {
488
- override fun onProgressChanged (seekBar : SeekBar , progress : Int , fromUser : Boolean ) {
489
- if (bottomConfig == BOTTOM_SHOW_BOTH ) {
490
- handler.removeCallbacks(volumeRunnable)
491
- handler.postDelayed(volumeRunnable, DELAY_SHOW_NEXT_SONG .toLong())
492
- }
493
- if (fromUser) {
494
- audioManager.setStreamVolume(AudioManager .STREAM_MUSIC ,
495
- (seekBar.progress / 100f * max).toInt(),
496
- AudioManager .FLAG_PLAY_SOUND )
497
- }
467
+ launch {
468
+ val volumeSeekbar = binding.layoutPlayerVolume.volumeSeekbar
469
+ val min = if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .P ) {
470
+ audioManager.getStreamMinVolume(STREAM_MUSIC )
471
+ } else 0
472
+ val max = audioManager.getStreamMaxVolume(STREAM_MUSIC )
473
+ val current = audioManager.getStreamVolume(STREAM_MUSIC )
474
+
475
+ runOnUiThread {
476
+ if (min != 0 ) {
477
+ @RequiresApi(Build .VERSION_CODES .O )
478
+ volumeSeekbar.min = min
479
+ }
480
+ volumeSeekbar.max = max
481
+ volumeSeekbar.progress = current
482
+
483
+ volumeSeekbar.setOnSeekBarChangeListener(object : SeekBar .OnSeekBarChangeListener {
484
+ override fun onProgressChanged (seekBar : SeekBar , progress : Int , fromUser : Boolean ) {
485
+ if (bottomConfig == BOTTOM_SHOW_BOTH ) {
486
+ handler.removeCallbacks(volumeRunnable)
487
+ handler.postDelayed(volumeRunnable, DELAY_SHOW_NEXT_SONG )
488
+ }
489
+ if (fromUser) {
490
+ audioManager.setStreamVolume(
491
+ STREAM_MUSIC ,
492
+ progress,
493
+ AudioManager .FLAG_PLAY_SOUND
494
+ )
498
495
}
496
+ }
499
497
500
- override fun onStartTrackingTouch (seekBar : SeekBar ) {}
501
- override fun onStopTrackingTouch (seekBar : SeekBar ) {}
502
- })
503
- }
498
+ override fun onStartTrackingTouch (seekBar : SeekBar ) {}
499
+ override fun onStopTrackingTouch (seekBar : SeekBar ) {}
500
+ })
501
+ }
502
+ }
504
503
if (bottomConfig == BOTTOM_SHOW_BOTH ) {
505
- handler.postDelayed(volumeRunnable, DELAY_SHOW_NEXT_SONG .toLong() )
504
+ handler.postDelayed(volumeRunnable, DELAY_SHOW_NEXT_SONG )
506
505
}
507
506
}
508
507
@@ -733,9 +732,7 @@ class PlayerActivity : BaseMusicActivity() {
733
732
try {
734
733
// 音量
735
734
if (binding.layoutPlayerVolume.volumeSeekbar.visibility == View .VISIBLE ) {
736
- val max = audioManager.getStreamMaxVolume(AudioManager .STREAM_MUSIC )
737
- val current = audioManager.getStreamVolume(AudioManager .STREAM_MUSIC )
738
- runOnUiThread { binding.layoutPlayerVolume.volumeSeekbar.progress = (current * 1.0 / max * 100 ).toInt() }
735
+ updateVolumeSeekbar()
739
736
}
740
737
if (! isPlaying()) {
741
738
sleep(500 )
@@ -997,6 +994,13 @@ class PlayerActivity : BaseMusicActivity() {
997
994
binding.seekbar.progress = currentTime
998
995
}
999
996
997
+ private fun updateVolumeSeekbar () {
998
+ val volume = audioManager.getStreamVolume(STREAM_MUSIC )
999
+ runOnUiThread {
1000
+ binding.layoutPlayerVolume.volumeSeekbar.progress = volume
1001
+ }
1002
+ }
1003
+
1000
1004
@OnHandleMessage
1001
1005
fun handleInternal (msg : Message ) {
1002
1006
// if(msg.what == UPDATE_BG){
@@ -1044,7 +1048,7 @@ class PlayerActivity : BaseMusicActivity() {
1044
1048
const val BACKGROUND_CUSTOM_IMAGE = 2
1045
1049
1046
1050
private const val FRAGMENT_COUNT = 2
1047
- private const val DELAY_SHOW_NEXT_SONG = 3000
1051
+ private const val DELAY_SHOW_NEXT_SONG : Long = 3000
1048
1052
1049
1053
const val ACTION_UPDATE_NEXT = " remix.myplayer.update.next_song"
1050
1054
0 commit comments