Skip to content

Commit 33c074f

Browse files
John Quallstejas-n
John Qualls
andauthored
Audio focus fix for pre Oreo devices (#44)
* Fix audio focus issue encountered on pre Oreo devices Store a reference to onAudioFocusChangeListener that was used to request audio focus and use it with abandonAudioFocus(..) so that the framework can give back the audio focus to the previous owner. This fix is relevant to pre Oreo devices. * Fix test for abandoning audio focus on pre Oreo devices * Add to Changelog * Inject OnAudioFocusChangeListener in constructor and avoid use of argument capturer for test consistency * Update changelog Co-authored-by: Tejas Nandanikar <[email protected]>
1 parent dd90e43 commit 33c074f

File tree

4 files changed

+18
-8
lines changed

4 files changed

+18
-8
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
### 0.2.1
4+
5+
Bug Fixes
6+
7+
- Fixed a bug where the audio focus wasn't being returned to the previous audio focus owner on pre Oreo devices.
8+
39
### 0.2.0
410

511
Enhancements

audioswitch/src/main/java/com/twilio/audioswitch/selection/AudioDeviceManager.kt

+5-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ internal class AudioDeviceManager(
1717
private val logger: LogWrapper,
1818
private val audioManager: AudioManager,
1919
private val build: BuildWrapper,
20-
private val audioFocusRequest: AudioFocusRequestWrapper
20+
private val audioFocusRequest: AudioFocusRequestWrapper,
21+
private val audioFocusChangeListener: AudioManager.OnAudioFocusChangeListener =
22+
AudioManager.OnAudioFocusChangeListener { }
2123
) {
2224

2325
private var savedAudioMode = 0
@@ -60,7 +62,7 @@ internal class AudioDeviceManager(
6062
audioRequest?.let { audioManager.requestAudioFocus(it) }
6163
} else {
6264
audioManager.requestAudioFocus(
63-
{},
65+
audioFocusChangeListener,
6466
AudioManager.STREAM_VOICE_CALL,
6567
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT)
6668
}
@@ -100,7 +102,7 @@ internal class AudioDeviceManager(
100102
if (build.getVersion() >= Build.VERSION_CODES.O) {
101103
audioRequest?.let { audioManager.abandonAudioFocusRequest(it) }
102104
} else {
103-
audioManager.abandonAudioFocus { }
105+
audioManager.abandonAudioFocus(audioFocusChangeListener)
104106
}
105107
}
106108
}

audioswitch/src/test/java/com/twilio/audioswitch/bluetooth/BaseTest.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.bluetooth.BluetoothClass
55
import android.bluetooth.BluetoothDevice
66
import android.bluetooth.BluetoothHeadset
77
import android.content.Context
8+
import android.media.AudioManager
89
import com.nhaarman.mockitokotlin2.mock
910
import com.nhaarman.mockitokotlin2.whenever
1011
import com.twilio.audioswitch.DEVICE_NAME
@@ -34,8 +35,9 @@ open class BaseTest {
3435
internal val audioDeviceChangeListener = mock<AudioDeviceChangeListener>()
3536
internal val buildWrapper = mock<BuildWrapper>()
3637
internal val audioFocusRequest = mock<AudioFocusRequestWrapper>()
38+
internal val audioFocusChangeListener = mock<AudioManager.OnAudioFocusChangeListener>()
3739
internal val audioDeviceManager = AudioDeviceManager(context, logger, audioManager, buildWrapper,
38-
audioFocusRequest)
40+
audioFocusRequest, audioFocusChangeListener)
3941
internal val wiredHeadsetReceiver = WiredHeadsetReceiver(context, logger)
4042
internal var handler = setupScoHandlerMock()
4143
internal var systemClockWrapper = setupSystemClockMock()

audioswitch/src/test/java/com/twilio/audioswitch/selection/AudioDeviceSelectorTest.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -254,9 +254,9 @@ class AudioDeviceSelectorTest : BaseTest() {
254254
audioDeviceSelector.activate()
255255

256256
verify(audioManager).requestAudioFocus(
257-
isA(),
258-
eq(AudioManager.STREAM_VOICE_CALL),
259-
eq(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT)
257+
audioFocusChangeListener,
258+
AudioManager.STREAM_VOICE_CALL,
259+
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT
260260
)
261261
}
262262

@@ -291,7 +291,7 @@ class AudioDeviceSelectorTest : BaseTest() {
291291
audioDeviceSelector.activate()
292292
audioDeviceSelector.stop()
293293

294-
verify(audioManager).abandonAudioFocus(isA())
294+
verify(audioManager).abandonAudioFocus(audioFocusChangeListener)
295295
}
296296

297297
@Test

0 commit comments

Comments
 (0)