Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 11721ddc authored by chelseahao's avatar chelseahao Committed by Chelsea Hao
Browse files

Start / stop broadcast by clicking on plus or checkmark icon.

Test: atest
Bug: 382397280
Flag: com.android.settingslib.flags.enable_le_audio_sharing
Change-Id: I7495bab92117fc10e0a89330ac9490de31292e3b
parent aaefed75
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -110,6 +110,28 @@ class AudioSharingRepositoryTest : SysuiTestCase() {
            }
        }

    @Test
    fun testStopAudioSharing() =
        with(kosmos) {
            testScope.runTest {
                whenever(localBluetoothManager.profileManager).thenReturn(profileManager)
                whenever(profileManager.leAudioBroadcastProfile).thenReturn(leAudioBroadcastProfile)
                audioSharingRepository.setAudioSharingAvailable(true)
                underTest.stopAudioSharing()
                verify(leAudioBroadcastProfile).stopLatestBroadcast()
            }
        }

    @Test
    fun testStopAudioSharing_flagOff_doNothing() =
        with(kosmos) {
            testScope.runTest {
                audioSharingRepository.setAudioSharingAvailable(false)
                underTest.stopAudioSharing()
                verify(leAudioBroadcastProfile, never()).stopLatestBroadcast()
            }
        }

    @Test
    fun testAddSource_flagOff_doesNothing() =
        with(kosmos) {
+39 −5
Original line number Diff line number Diff line
@@ -15,14 +15,15 @@
 */
package com.android.systemui.bluetooth.qsdialog

import androidx.test.ext.junit.runners.AndroidJUnit4
import android.testing.TestableLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
import com.android.systemui.statusbar.phone.SystemUIDialog
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
@@ -48,6 +49,7 @@ class DeviceItemActionInteractorTest : SysuiTestCase() {
    private lateinit var notConnectedDeviceItem: DeviceItem
    private lateinit var connectedMediaDeviceItem: DeviceItem
    private lateinit var connectedOtherDeviceItem: DeviceItem
    private lateinit var audioSharingDeviceItem: DeviceItem
    @Mock private lateinit var dialog: SystemUIDialog

    @Before
@@ -59,7 +61,7 @@ class DeviceItemActionInteractorTest : SysuiTestCase() {
                deviceName = DEVICE_NAME,
                connectionSummary = DEVICE_CONNECTION_SUMMARY,
                iconWithDescription = null,
                background = null
                background = null,
            )
        notConnectedDeviceItem =
            DeviceItem(
@@ -68,7 +70,7 @@ class DeviceItemActionInteractorTest : SysuiTestCase() {
                deviceName = DEVICE_NAME,
                connectionSummary = DEVICE_CONNECTION_SUMMARY,
                iconWithDescription = null,
                background = null
                background = null,
            )
        connectedMediaDeviceItem =
            DeviceItem(
@@ -77,7 +79,7 @@ class DeviceItemActionInteractorTest : SysuiTestCase() {
                deviceName = DEVICE_NAME,
                connectionSummary = DEVICE_CONNECTION_SUMMARY,
                iconWithDescription = null,
                background = null
                background = null,
            )
        connectedOtherDeviceItem =
            DeviceItem(
@@ -86,7 +88,16 @@ class DeviceItemActionInteractorTest : SysuiTestCase() {
                deviceName = DEVICE_NAME,
                connectionSummary = DEVICE_CONNECTION_SUMMARY,
                iconWithDescription = null,
                background = null
                background = null,
            )
        audioSharingDeviceItem =
            DeviceItem(
                type = DeviceItemType.AUDIO_SHARING_MEDIA_BLUETOOTH_DEVICE,
                cachedBluetoothDevice = kosmos.cachedBluetoothDevice,
                deviceName = DEVICE_NAME,
                connectionSummary = DEVICE_CONNECTION_SUMMARY,
                iconWithDescription = null,
                background = null,
            )
        actionInteractorImpl = kosmos.deviceItemActionInteractorImpl
    }
@@ -135,6 +146,29 @@ class DeviceItemActionInteractorTest : SysuiTestCase() {
        }
    }

    @Test
    fun onActionIconClick_onIntent() {
        with(kosmos) {
            testScope.runTest {
                var onIntentCalledOnAddress = ""
                whenever(cachedBluetoothDevice.address).thenReturn(DEVICE_ADDRESS)
                actionInteractorImpl.onActionIconClick(connectedMediaDeviceItem) {
                    onIntentCalledOnAddress = connectedMediaDeviceItem.cachedBluetoothDevice.address
                }
                assertThat(onIntentCalledOnAddress).isEqualTo(DEVICE_ADDRESS)
            }
        }
    }

    @Test(expected = IllegalArgumentException::class)
    fun onActionIconClick_audioSharingDeviceType_throwException() {
        with(kosmos) {
            testScope.runTest {
                actionInteractorImpl.onActionIconClick(audioSharingDeviceItem) {}
            }
        }
    }

    private companion object {
        const val DEVICE_NAME = "device"
        const val DEVICE_CONNECTION_SUMMARY = "active"
+25 −0
Original line number Diff line number Diff line
@@ -104,6 +104,31 @@ constructor(
        }
    }

    override suspend fun onActionIconClick(deviceItem: DeviceItem, onIntent: (Intent) -> Unit) {
        withContext(backgroundDispatcher) {
            if (!audioSharingInteractor.audioSharingAvailable()) {
                return@withContext deviceItemActionInteractorImpl.onActionIconClick(
                    deviceItem,
                    onIntent,
                )
            }

            when (deviceItem.type) {
                DeviceItemType.AUDIO_SHARING_MEDIA_BLUETOOTH_DEVICE -> {
                    uiEventLogger.log(BluetoothTileDialogUiEvent.CHECK_MARK_ACTION_BUTTON_CLICKED)
                    audioSharingInteractor.stopAudioSharing()
                }
                DeviceItemType.AVAILABLE_AUDIO_SHARING_MEDIA_BLUETOOTH_DEVICE -> {
                    uiEventLogger.log(BluetoothTileDialogUiEvent.PLUS_ACTION_BUTTON_CLICKED)
                    audioSharingInteractor.startAudioSharing()
                }
                else -> {
                    deviceItemActionInteractorImpl.onActionIconClick(deviceItem, onIntent)
                }
            }
        }
    }

    private fun inSharingAndDeviceNoSource(
        inAudioSharing: Boolean,
        deviceItem: DeviceItem,
+11 −0
Original line number Diff line number Diff line
@@ -55,6 +55,8 @@ interface AudioSharingInteractor {

    suspend fun startAudioSharing()

    suspend fun stopAudioSharing()

    suspend fun audioSharingAvailable(): Boolean

    suspend fun qsDialogImprovementAvailable(): Boolean
@@ -149,6 +151,13 @@ constructor(
        audioSharingRepository.startAudioSharing()
    }

    override suspend fun stopAudioSharing() {
        if (!audioSharingAvailable()) {
            return
        }
        audioSharingRepository.stopAudioSharing()
    }

    // TODO(b/367965193): Move this after flags rollout
    override suspend fun audioSharingAvailable(): Boolean {
        return audioSharingRepository.audioSharingAvailable()
@@ -185,6 +194,8 @@ class AudioSharingInteractorEmptyImpl @Inject constructor() : AudioSharingIntera

    override suspend fun startAudioSharing() {}

    override suspend fun stopAudioSharing() {}

    override suspend fun audioSharingAvailable(): Boolean = false

    override suspend fun qsDialogImprovementAvailable(): Boolean = false
+13 −0
Original line number Diff line number Diff line
@@ -45,6 +45,8 @@ interface AudioSharingRepository {
    suspend fun setActive(cachedBluetoothDevice: CachedBluetoothDevice)

    suspend fun startAudioSharing()

    suspend fun stopAudioSharing()
}

@SysUISingleton
@@ -100,6 +102,15 @@ class AudioSharingRepositoryImpl(
            leAudioBroadcastProfile?.startPrivateBroadcast()
        }
    }

    override suspend fun stopAudioSharing() {
        withContext(backgroundDispatcher) {
            if (!settingsLibAudioSharingRepository.audioSharingAvailable()) {
                return@withContext
            }
            leAudioBroadcastProfile?.stopLatestBroadcast()
        }
    }
}

@SysUISingleton
@@ -117,4 +128,6 @@ class AudioSharingRepositoryEmptyImpl : AudioSharingRepository {
    override suspend fun setActive(cachedBluetoothDevice: CachedBluetoothDevice) {}

    override suspend fun startAudioSharing() {}

    override suspend fun stopAudioSharing() {}
}
Loading