-
-
Notifications
You must be signed in to change notification settings - Fork 89
/
CastVolumeProvider.kt
56 lines (45 loc) · 1.47 KB
/
CastVolumeProvider.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.github.ashutoshgngwr.noice.cast
import androidx.annotation.VisibleForTesting
import com.github.ashutoshgngwr.noice.engine.SoundPlaybackMediaSession
import com.google.android.gms.cast.framework.CastContext
import kotlin.math.max
import kotlin.math.min
import kotlin.math.roundToInt
/**
* A [remote volume provider][SoundPlaybackMediaSession.RemoteDeviceVolumeProvider] for managing
* volume of the connected Google Cast device.
*/
class CastVolumeProvider(
private val context: CastContext,
) : SoundPlaybackMediaSession.RemoteDeviceVolumeProvider {
private var isMute: Boolean = context.sessionManager.currentCastSession?.isMute ?: false
private var currentVolume: Int =
((context.sessionManager.currentCastSession?.volume ?: 1.0) * MAX_VOLUME).roundToInt()
override fun getMaxVolume(): Int {
return MAX_VOLUME
}
override fun getVolume(): Int {
return currentVolume
}
override fun setVolume(volume: Int) {
currentVolume = volume
context.sessionManager.currentCastSession?.volume = volume.toDouble() / MAX_VOLUME
}
override fun increaseVolume() {
setVolume(min(MAX_VOLUME, getVolume() + 1))
}
override fun decreaseVolume() {
setVolume(max(0, getVolume() - 1))
}
override fun isMute(): Boolean {
return isMute
}
override fun setMute(enabled: Boolean) {
isMute = enabled
context.sessionManager.currentCastSession?.isMute = enabled
}
companion object {
@VisibleForTesting
const val MAX_VOLUME = 20
}
}