Merge "[Audiosharing] Add log for AudioSharingRepository" into main
diff --git a/packages/SettingsLib/src/com/android/settingslib/volume/data/repository/AudioRepository.kt b/packages/SettingsLib/src/com/android/settingslib/volume/data/repository/AudioRepository.kt
index c88c4c9..0e71116 100644
--- a/packages/SettingsLib/src/com/android/settingslib/volume/data/repository/AudioRepository.kt
+++ b/packages/SettingsLib/src/com/android/settingslib/volume/data/repository/AudioRepository.kt
@@ -25,6 +25,7 @@
import android.provider.Settings
import androidx.concurrent.futures.DirectExecutor
import com.android.internal.util.ConcurrentUtils
+import com.android.settingslib.volume.shared.AudioLogger
import com.android.settingslib.volume.shared.AudioManagerEventsReceiver
import com.android.settingslib.volume.shared.model.AudioManagerEvent
import com.android.settingslib.volume.shared.model.AudioStream
@@ -99,7 +100,7 @@
private val contentResolver: ContentResolver,
private val backgroundCoroutineContext: CoroutineContext,
private val coroutineScope: CoroutineScope,
- private val logger: Logger,
+ private val logger: AudioLogger,
) : AudioRepository {
private val streamSettingNames: Map<AudioStream, String> =
@@ -117,10 +118,10 @@
override val mode: StateFlow<Int> =
callbackFlow {
- val listener = AudioManager.OnModeChangedListener { newMode -> trySend(newMode) }
- audioManager.addOnModeChangedListener(ConcurrentUtils.DIRECT_EXECUTOR, listener)
- awaitClose { audioManager.removeOnModeChangedListener(listener) }
- }
+ val listener = AudioManager.OnModeChangedListener { newMode -> trySend(newMode) }
+ audioManager.addOnModeChangedListener(ConcurrentUtils.DIRECT_EXECUTOR, listener)
+ awaitClose { audioManager.removeOnModeChangedListener(listener) }
+ }
.onStart { emit(audioManager.mode) }
.flowOn(backgroundCoroutineContext)
.stateIn(coroutineScope, SharingStarted.WhileSubscribed(), audioManager.mode)
@@ -140,14 +141,14 @@
override val communicationDevice: StateFlow<AudioDeviceInfo?>
get() =
callbackFlow {
- val listener = OnCommunicationDeviceChangedListener { trySend(Unit) }
- audioManager.addOnCommunicationDeviceChangedListener(
- ConcurrentUtils.DIRECT_EXECUTOR,
- listener,
- )
+ val listener = OnCommunicationDeviceChangedListener { trySend(Unit) }
+ audioManager.addOnCommunicationDeviceChangedListener(
+ ConcurrentUtils.DIRECT_EXECUTOR,
+ listener,
+ )
- awaitClose { audioManager.removeOnCommunicationDeviceChangedListener(listener) }
- }
+ awaitClose { audioManager.removeOnCommunicationDeviceChangedListener(listener) }
+ }
.filterNotNull()
.map { audioManager.communicationDevice }
.onStart { emit(audioManager.communicationDevice) }
@@ -160,15 +161,15 @@
override fun getAudioStream(audioStream: AudioStream): Flow<AudioStreamModel> {
return merge(
- audioManagerEventsReceiver.events.filter {
- if (it is StreamAudioManagerEvent) {
- it.audioStream == audioStream
- } else {
- true
- }
- },
- volumeSettingChanges(audioStream),
- )
+ audioManagerEventsReceiver.events.filter {
+ if (it is StreamAudioManagerEvent) {
+ it.audioStream == audioStream
+ } else {
+ true
+ }
+ },
+ volumeSettingChanges(audioStream),
+ )
.conflate()
.map { getCurrentAudioStream(audioStream) }
.onStart { emit(getCurrentAudioStream(audioStream)) }
@@ -251,11 +252,4 @@
awaitClose { contentResolver.unregisterContentObserver(observer) }
}
}
-
- interface Logger {
-
- fun onSetVolumeRequested(audioStream: AudioStream, volume: Int)
-
- fun onVolumeUpdateReceived(audioStream: AudioStream, model: AudioStreamModel)
- }
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/volume/data/repository/AudioSharingRepository.kt b/packages/SettingsLib/src/com/android/settingslib/volume/data/repository/AudioSharingRepository.kt
index 7a66335..ebba7f1 100644
--- a/packages/SettingsLib/src/com/android/settingslib/volume/data/repository/AudioSharingRepository.kt
+++ b/packages/SettingsLib/src/com/android/settingslib/volume/data/repository/AudioSharingRepository.kt
@@ -34,6 +34,7 @@
import com.android.settingslib.bluetooth.onSourceConnectedOrRemoved
import com.android.settingslib.volume.data.repository.AudioSharingRepository.Companion.AUDIO_SHARING_VOLUME_MAX
import com.android.settingslib.volume.data.repository.AudioSharingRepository.Companion.AUDIO_SHARING_VOLUME_MIN
+import com.android.settingslib.volume.shared.AudioSharingLogger
import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -50,6 +51,7 @@
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.merge
+import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.runningFold
import kotlinx.coroutines.flow.stateIn
@@ -90,6 +92,7 @@
private val btManager: LocalBluetoothManager,
private val coroutineScope: CoroutineScope,
private val backgroundCoroutineContext: CoroutineContext,
+ private val logger: AudioSharingLogger
) : AudioSharingRepository {
private val isAudioSharingProfilesReady: StateFlow<Boolean> =
btManager.profileManager.onServiceStateChanged
@@ -104,6 +107,7 @@
btManager.profileManager.leAudioBroadcastProfile.onBroadcastStartedOrStopped
.map { isBroadcasting() }
.onStart { emit(isBroadcasting()) }
+ .onEach { logger.onAudioSharingStateChanged(it) }
.flowOn(backgroundCoroutineContext)
} else {
flowOf(false)
@@ -156,6 +160,7 @@
.map { getSecondaryGroupId() },
primaryGroupId.map { getSecondaryGroupId() })
.onStart { emit(getSecondaryGroupId()) }
+ .onEach { logger.onSecondaryGroupIdChanged(it) }
.flowOn(backgroundCoroutineContext)
.stateIn(
coroutineScope,
@@ -202,6 +207,7 @@
acc
}
}
+ .onEach { logger.onVolumeMapChanged(it) }
.flowOn(backgroundCoroutineContext)
} else {
emptyFlow()
@@ -220,6 +226,7 @@
BluetoothUtils.getSecondaryDeviceForBroadcast(contentResolver, btManager)
if (cachedDevice != null) {
it.setDeviceVolume(cachedDevice.device, volume, /* isGroupOp= */ true)
+ logger.onSetDeviceVolumeRequested(volume)
}
}
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/volume/shared/AudioLogger.kt b/packages/SettingsLib/src/com/android/settingslib/volume/shared/AudioLogger.kt
new file mode 100644
index 0000000..84f7fcb
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/volume/shared/AudioLogger.kt
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.volume.shared
+
+import com.android.settingslib.volume.shared.model.AudioStream
+import com.android.settingslib.volume.shared.model.AudioStreamModel
+
+/** A log interface for audio streams volume events. */
+interface AudioLogger {
+ fun onSetVolumeRequested(audioStream: AudioStream, volume: Int)
+
+ fun onVolumeUpdateReceived(audioStream: AudioStream, model: AudioStreamModel)
+}
\ No newline at end of file
diff --git a/packages/SettingsLib/src/com/android/settingslib/volume/shared/AudioSharingLogger.kt b/packages/SettingsLib/src/com/android/settingslib/volume/shared/AudioSharingLogger.kt
new file mode 100644
index 0000000..18a4c6d
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/volume/shared/AudioSharingLogger.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.volume.shared
+
+/** A log interface for audio sharing volume events. */
+interface AudioSharingLogger {
+
+ fun onAudioSharingStateChanged(state: Boolean)
+
+ fun onSecondaryGroupIdChanged(groupId: Int)
+
+ fun onVolumeMapChanged(map: Map<Int, Int>)
+
+ fun onSetDeviceVolumeRequested(volume: Int)
+}
\ No newline at end of file
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/volume/data/repository/AudioSharingRepositoryTest.kt b/packages/SettingsLib/tests/integ/src/com/android/settingslib/volume/data/repository/AudioSharingRepositoryTest.kt
index 078f0c8..8c5a085 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/volume/data/repository/AudioSharingRepositoryTest.kt
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/volume/data/repository/AudioSharingRepositoryTest.kt
@@ -48,6 +48,7 @@
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
+import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -101,7 +102,7 @@
@Captor
private lateinit var assistantCallbackCaptor:
- ArgumentCaptor<BluetoothLeBroadcastAssistant.Callback>
+ ArgumentCaptor<BluetoothLeBroadcastAssistant.Callback>
@Captor private lateinit var btCallbackCaptor: ArgumentCaptor<BluetoothCallback>
@@ -110,6 +111,7 @@
@Captor
private lateinit var volumeCallbackCaptor: ArgumentCaptor<BluetoothVolumeControl.Callback>
+ private val logger = FakeAudioSharingRepositoryLogger()
private val testScope = TestScope()
private val context: Context = ApplicationProvider.getApplicationContext()
@Spy private val contentResolver: ContentResolver = context.contentResolver
@@ -135,16 +137,23 @@
Settings.Secure.putInt(
contentResolver,
BluetoothUtils.getPrimaryGroupIdUriForBroadcast(),
- TEST_GROUP_ID_INVALID)
+ TEST_GROUP_ID_INVALID
+ )
underTest =
AudioSharingRepositoryImpl(
contentResolver,
btManager,
testScope.backgroundScope,
testScope.testScheduler,
+ logger
)
}
+ @After
+ fun tearDown() {
+ logger.reset()
+ }
+
@Test
fun audioSharingStateChange_profileReady_emitValues() {
testScope.runTest {
@@ -160,6 +169,13 @@
runCurrent()
Truth.assertThat(states).containsExactly(false, true, false, true)
+ Truth.assertThat(logger.logs)
+ .containsAtLeastElementsIn(
+ listOf(
+ "onAudioSharingStateChanged state=true",
+ "onAudioSharingStateChanged state=false",
+ )
+ ).inOrder()
}
}
@@ -187,7 +203,8 @@
Truth.assertThat(groupIds)
.containsExactly(
TEST_GROUP_ID_INVALID,
- TEST_GROUP_ID2)
+ TEST_GROUP_ID2
+ )
}
}
@@ -219,13 +236,16 @@
triggerSourceAdded()
runCurrent()
triggerProfileConnectionChange(
- BluetoothAdapter.STATE_CONNECTING, BluetoothProfile.LE_AUDIO_BROADCAST_ASSISTANT)
+ BluetoothAdapter.STATE_CONNECTING, BluetoothProfile.LE_AUDIO_BROADCAST_ASSISTANT
+ )
runCurrent()
triggerProfileConnectionChange(
- BluetoothAdapter.STATE_DISCONNECTED, BluetoothProfile.LE_AUDIO)
+ BluetoothAdapter.STATE_DISCONNECTED, BluetoothProfile.LE_AUDIO
+ )
runCurrent()
triggerProfileConnectionChange(
- BluetoothAdapter.STATE_DISCONNECTED, BluetoothProfile.LE_AUDIO_BROADCAST_ASSISTANT)
+ BluetoothAdapter.STATE_DISCONNECTED, BluetoothProfile.LE_AUDIO_BROADCAST_ASSISTANT
+ )
runCurrent()
Truth.assertThat(groupIds)
@@ -235,7 +255,16 @@
TEST_GROUP_ID1,
TEST_GROUP_ID_INVALID,
TEST_GROUP_ID2,
- TEST_GROUP_ID_INVALID)
+ TEST_GROUP_ID_INVALID
+ )
+ Truth.assertThat(logger.logs)
+ .containsAtLeastElementsIn(
+ listOf(
+ "onSecondaryGroupIdChanged groupId=$TEST_GROUP_ID_INVALID",
+ "onSecondaryGroupIdChanged groupId=$TEST_GROUP_ID2",
+ "onSecondaryGroupIdChanged groupId=$TEST_GROUP_ID1",
+ )
+ ).inOrder()
}
}
@@ -257,11 +286,22 @@
verify(volumeControl).unregisterCallback(any())
runCurrent()
+ val expectedMap1 = mapOf(TEST_GROUP_ID1 to TEST_VOLUME1)
+ val expectedMap2 = mapOf(TEST_GROUP_ID1 to TEST_VOLUME2)
Truth.assertThat(volumeMaps)
.containsExactly(
emptyMap<Int, Int>(),
- mapOf(TEST_GROUP_ID1 to TEST_VOLUME1),
- mapOf(TEST_GROUP_ID1 to TEST_VOLUME2))
+ expectedMap1,
+ expectedMap2
+ )
+ Truth.assertThat(logger.logs)
+ .containsAtLeastElementsIn(
+ listOf(
+ "onVolumeMapChanged map={}",
+ "onVolumeMapChanged map=$expectedMap1",
+ "onVolumeMapChanged map=$expectedMap2",
+ )
+ ).inOrder()
}
}
@@ -281,12 +321,19 @@
Settings.Secure.putInt(
contentResolver,
BluetoothUtils.getPrimaryGroupIdUriForBroadcast(),
- TEST_GROUP_ID2)
+ TEST_GROUP_ID2
+ )
`when`(assistant.allConnectedDevices).thenReturn(listOf(device1, device2))
underTest.setSecondaryVolume(TEST_VOLUME1)
runCurrent()
verify(volumeControl).setDeviceVolume(device1, TEST_VOLUME1, true)
+ Truth.assertThat(logger.logs)
+ .isEqualTo(
+ listOf(
+ "onSetVolumeRequested volume=$TEST_VOLUME1",
+ )
+ )
}
}
@@ -313,7 +360,8 @@
Settings.Secure.putInt(
contentResolver,
BluetoothUtils.getPrimaryGroupIdUriForBroadcast(),
- TEST_GROUP_ID1)
+ TEST_GROUP_ID1
+ )
`when`(assistant.allConnectedDevices).thenReturn(listOf(device1, device2))
assistantCallbackCaptor.value.sourceAdded(device1, receiveState)
}
@@ -324,7 +372,8 @@
Settings.Secure.putInt(
contentResolver,
BluetoothUtils.getPrimaryGroupIdUriForBroadcast(),
- TEST_GROUP_ID1)
+ TEST_GROUP_ID1
+ )
assistantCallbackCaptor.value.sourceRemoved(device2)
}
@@ -334,7 +383,8 @@
Settings.Secure.putInt(
contentResolver,
BluetoothUtils.getPrimaryGroupIdUriForBroadcast(),
- TEST_GROUP_ID1)
+ TEST_GROUP_ID1
+ )
btCallbackCaptor.value.onProfileConnectionStateChanged(cachedDevice2, state, profile)
}
@@ -343,12 +393,14 @@
.registerContentObserver(
eq(Settings.Secure.getUriFor(BluetoothUtils.getPrimaryGroupIdUriForBroadcast())),
eq(false),
- contentObserverCaptor.capture())
+ contentObserverCaptor.capture()
+ )
`when`(assistant.allConnectedDevices).thenReturn(listOf(device1, device2))
Settings.Secure.putInt(
contentResolver,
BluetoothUtils.getPrimaryGroupIdUriForBroadcast(),
- TEST_GROUP_ID2)
+ TEST_GROUP_ID2
+ )
contentObserverCaptor.value.primaryChanged()
}
@@ -380,8 +432,9 @@
onBroadcastStopped(TEST_REASON, TEST_BROADCAST_ID)
}
val sourceAdded:
- BluetoothLeBroadcastAssistant.Callback.(
- sink: BluetoothDevice, state: BluetoothLeBroadcastReceiveState) -> Unit =
+ BluetoothLeBroadcastAssistant.Callback.(
+ sink: BluetoothDevice, state: BluetoothLeBroadcastReceiveState
+ ) -> Unit =
{ sink, state ->
onReceiveStateChanged(sink, TEST_SOURCE_ID, state)
}
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/volume/data/repository/FakeAudioRepositoryLogger.kt b/packages/SettingsLib/tests/integ/src/com/android/settingslib/volume/data/repository/FakeAudioRepositoryLogger.kt
index 389bf53..bd573fb 100644
--- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/volume/data/repository/FakeAudioRepositoryLogger.kt
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/volume/data/repository/FakeAudioRepositoryLogger.kt
@@ -16,10 +16,11 @@
package com.android.settingslib.volume.data.repository
+import com.android.settingslib.volume.shared.AudioLogger
import com.android.settingslib.volume.shared.model.AudioStream
import com.android.settingslib.volume.shared.model.AudioStreamModel
-class FakeAudioRepositoryLogger : AudioRepositoryImpl.Logger {
+class FakeAudioRepositoryLogger : AudioLogger {
private val mutableLogs: MutableList<String> = mutableListOf()
val logs: List<String>
diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/volume/data/repository/FakeAudioSharingRepositoryLogger.kt b/packages/SettingsLib/tests/integ/src/com/android/settingslib/volume/data/repository/FakeAudioSharingRepositoryLogger.kt
new file mode 100644
index 0000000..cc4cc8d
--- /dev/null
+++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/volume/data/repository/FakeAudioSharingRepositoryLogger.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settingslib.volume.data.repository
+
+import com.android.settingslib.volume.shared.AudioSharingLogger
+import java.util.concurrent.CopyOnWriteArrayList
+
+class FakeAudioSharingRepositoryLogger : AudioSharingLogger {
+ private val mutableLogs = CopyOnWriteArrayList<String>()
+ val logs: List<String>
+ get() = mutableLogs.toList()
+
+ fun reset() {
+ mutableLogs.clear()
+ }
+
+ override fun onAudioSharingStateChanged(state: Boolean) {
+ mutableLogs.add("onAudioSharingStateChanged state=$state")
+ }
+
+ override fun onSecondaryGroupIdChanged(groupId: Int) {
+ mutableLogs.add("onSecondaryGroupIdChanged groupId=$groupId")
+ }
+
+ override fun onVolumeMapChanged(map: GroupIdToVolumes) {
+ mutableLogs.add("onVolumeMapChanged map=$map")
+ }
+
+ override fun onSetDeviceVolumeRequested(volume: Int) {
+ mutableLogs.add("onSetVolumeRequested volume=$volume")
+ }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dagger/AudioModule.kt b/packages/SystemUI/src/com/android/systemui/volume/dagger/AudioModule.kt
index 5d8b6f1..d39daaf 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dagger/AudioModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dagger/AudioModule.kt
@@ -79,13 +79,15 @@
localBluetoothManager: LocalBluetoothManager?,
@Application coroutineScope: CoroutineScope,
@Background coroutineContext: CoroutineContext,
+ volumeLogger: VolumeLogger
): AudioSharingRepository =
if (Flags.enableLeAudioSharing() && localBluetoothManager != null) {
AudioSharingRepositoryImpl(
contentResolver,
localBluetoothManager,
coroutineScope,
- coroutineContext
+ coroutineContext,
+ volumeLogger
)
} else {
AudioSharingRepositoryEmptyImpl()
diff --git a/packages/SystemUI/src/com/android/systemui/volume/shared/VolumeLogger.kt b/packages/SystemUI/src/com/android/systemui/volume/shared/VolumeLogger.kt
index 869a82a..d6b159e 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/shared/VolumeLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/shared/VolumeLogger.kt
@@ -16,7 +16,8 @@
package com.android.systemui.volume.shared
-import com.android.settingslib.volume.data.repository.AudioRepositoryImpl
+import com.android.settingslib.volume.shared.AudioLogger
+import com.android.settingslib.volume.shared.AudioSharingLogger
import com.android.settingslib.volume.shared.model.AudioStream
import com.android.settingslib.volume.shared.model.AudioStreamModel
import com.android.systemui.dagger.SysUISingleton
@@ -30,7 +31,7 @@
/** Logs general System UI volume events. */
@SysUISingleton
class VolumeLogger @Inject constructor(@VolumeLog private val logBuffer: LogBuffer) :
- AudioRepositoryImpl.Logger {
+ AudioLogger, AudioSharingLogger {
override fun onSetVolumeRequested(audioStream: AudioStream, volume: Int) {
logBuffer.log(
@@ -55,4 +56,35 @@
{ "Volume update received: stream=$str1 volume=$int1" }
)
}
+
+ override fun onAudioSharingStateChanged(state: Boolean) {
+ logBuffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ { bool1 = state },
+ { "Audio sharing state update: state=$bool1" }
+ )
+ }
+
+ override fun onSecondaryGroupIdChanged(groupId: Int) {
+ logBuffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ { int1 = groupId },
+ { "Secondary group id in audio sharing update: groupId=$int1" }
+ )
+ }
+
+ override fun onVolumeMapChanged(map: Map<Int, Int>) {
+ logBuffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ { str1 = map.toString() },
+ { "Volume map update: map=$str1" }
+ )
+ }
+
+ override fun onSetDeviceVolumeRequested(volume: Int) {
+ logBuffer.log(TAG, LogLevel.DEBUG, { int1 = volume }, { "Set device volume: volume=$int1" })
+ }
}