2020package me.kavishdevar.aln.utils
2121
2222import android.media.AudioManager
23+ import android.media.AudioPlaybackConfiguration
24+ import android.os.Handler
25+ import android.os.Looper
2326import android.util.Log
2427import android.view.KeyEvent
2528
2629object MediaController {
27- private var initialVolume: Int? = null // Nullable to track the unset state
28- private lateinit var audioManager: AudioManager // Declare AudioManager
30+ private var initialVolume: Int? = null
31+ private lateinit var audioManager: AudioManager
32+ var iPausedTheMedia = false
33+ var userPlayedTheMedia = false
2934
30- // Initialize the singleton with the AudioManager instance
3135 fun initialize (audioManager : AudioManager ) {
3236 this .audioManager = audioManager
37+ audioManager.registerAudioPlaybackCallback(cb, null )
38+ }
39+
40+ val cb = object : AudioManager .AudioPlaybackCallback () {
41+ override fun onPlaybackConfigChanged (configs : MutableList <AudioPlaybackConfiguration >? ) {
42+ super .onPlaybackConfigChanged(configs)
43+ Log .d(" MediaController" , " Playback config changed, iPausedTheMedia: $iPausedTheMedia " )
44+ if (configs != null && ! iPausedTheMedia) {
45+ Log .d(" MediaController" , " Seems like the user changed the state of media themselves, now I won't `play` until the ear detection pauses it." )
46+ Handler (Looper .getMainLooper()).postDelayed({
47+ iPausedTheMedia = ! audioManager.isMusicActive
48+ userPlayedTheMedia = audioManager.isMusicActive
49+ }, 7 ) // i have no idea why, but android sends a pause event a hundred times after the user does something.
50+ }
51+ }
3352 }
3453
3554 @Synchronized
3655 fun sendPause () {
37- if (audioManager.isMusicActive) {
56+ Log .d(" MediaController" , " Sending pause with iPausedTheMedia: $iPausedTheMedia , userPlayedTheMedia: $userPlayedTheMedia " )
57+ if (audioManager.isMusicActive && ! userPlayedTheMedia) {
58+ iPausedTheMedia = true
59+ userPlayedTheMedia = false
3860 audioManager.dispatchMediaKeyEvent(
3961 KeyEvent (
4062 KeyEvent .ACTION_DOWN ,
@@ -52,7 +74,10 @@ object MediaController {
5274
5375 @Synchronized
5476 fun sendPlay () {
55- if (! audioManager.isMusicActive) {
77+ Log .d(" MediaController" , " Sending play with iPausedTheMedia: $iPausedTheMedia " )
78+ if (iPausedTheMedia) {
79+ Log .d(" MediaController" , " Sending play and setting userPlayedTheMedia to false" )
80+ userPlayedTheMedia = false
5681 audioManager.dispatchMediaKeyEvent(
5782 KeyEvent (
5883 KeyEvent .ACTION_DOWN ,
@@ -76,8 +101,7 @@ object MediaController {
76101 Log .d(" MediaController" , " Initial Volume Set: $initialVolume " )
77102 audioManager.setStreamVolume(
78103 AudioManager .STREAM_MUSIC ,
79- audioManager.getStreamMaxVolume(AudioManager .STREAM_MUSIC ) * 1 / 12 , // Set to a lower volume when speaking starts
80- 0
104+ audioManager.getStreamMaxVolume(AudioManager .STREAM_MUSIC ) * 1 / 12 , 0
81105 )
82106 }
83107 Log .d(" MediaController" , " Initial Volume: $initialVolume " )
@@ -91,4 +115,5 @@ object MediaController {
91115 initialVolume = null // Reset to null after restoring the volume
92116 }
93117 }
118+
94119}
0 commit comments