diff options
7 files changed, 94 insertions, 17 deletions
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/mediattt/DeviceInfo.aidl b/packages/SystemUI/shared/src/com/android/systemui/shared/mediattt/DeviceInfo.aidl new file mode 100644 index 000000000000..861a4ed8eaf9 --- /dev/null +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/mediattt/DeviceInfo.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2022 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.systemui.shared.mediattt; + +parcelable DeviceInfo; diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/mediattt/DeviceInfo.kt b/packages/SystemUI/shared/src/com/android/systemui/shared/mediattt/DeviceInfo.kt new file mode 100644 index 000000000000..d41aaf30a12f --- /dev/null +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/mediattt/DeviceInfo.kt @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2022 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.systemui.shared.mediattt + +import android.os.Parcel +import android.os.Parcelable + +/** + * Represents a device that can send or receive media. Includes any device information necessary for + * SysUI to display an informative chip to the user. + */ +class DeviceInfo(val name: String) : Parcelable { + constructor(parcel: Parcel) : this(parcel.readString()) + + override fun writeToParcel(dest: Parcel?, flags: Int) { + dest?.writeString(name) + } + + override fun describeContents() = 0 + + override fun toString() = "name: $name" + + companion object CREATOR : Parcelable.Creator<DeviceInfo> { + override fun createFromParcel(parcel: Parcel) = DeviceInfo(parcel) + override fun newArray(size: Int) = arrayOfNulls<DeviceInfo?>(size) + } +} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/mediattt/IDeviceSenderCallback.aidl b/packages/SystemUI/shared/src/com/android/systemui/shared/mediattt/IDeviceSenderCallback.aidl index f34b8d657d33..484791df053e 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/mediattt/IDeviceSenderCallback.aidl +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/mediattt/IDeviceSenderCallback.aidl @@ -17,6 +17,7 @@ package com.android.systemui.shared.mediattt; import android.media.MediaRoute2Info; +import com.android.systemui.shared.mediattt.DeviceInfo; /** * A callback interface that can be invoked to trigger media transfer events on System UI. @@ -40,6 +41,6 @@ interface IDeviceSenderCallback { * playing media locally and the media should be transferred to be played on the receiver * device instead. */ - // TODO(b/203800643): Add the otherDeviceInfo parameter. - oneway void closeToReceiverToStartCast(in MediaRoute2Info mediaInfo); + oneway void closeToReceiverToStartCast( + in MediaRoute2Info mediaInfo, in DeviceInfo otherDeviceInfo); } diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/MediaTttCommandLineHelper.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/MediaTttCommandLineHelper.kt index 0078b958a38b..460d38f45b4d 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/MediaTttCommandLineHelper.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/MediaTttCommandLineHelper.kt @@ -36,6 +36,7 @@ import com.android.systemui.media.taptotransfer.sender.MediaTttSenderService import com.android.systemui.media.taptotransfer.sender.MoveCloserToStartCast import com.android.systemui.media.taptotransfer.sender.TransferInitiated import com.android.systemui.media.taptotransfer.sender.TransferSucceeded +import com.android.systemui.shared.mediattt.DeviceInfo import com.android.systemui.shared.mediattt.IDeviceSenderCallback import com.android.systemui.statusbar.commandline.Command import com.android.systemui.statusbar.commandline.CommandRegistry @@ -81,11 +82,12 @@ class MediaTttCommandLineHelper @Inject constructor( val mediaInfo = MediaRoute2Info.Builder("id", "Test Name") .addFeature("feature") .build() + val otherDeviceInfo = DeviceInfo(otherDeviceName) when (args[1]) { MOVE_CLOSER_TO_START_CAST_COMMAND_NAME -> { runOnService { senderCallback -> - senderCallback.closeToReceiverToStartCast(mediaInfo) + senderCallback.closeToReceiverToStartCast(mediaInfo, otherDeviceInfo) } } diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderService.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderService.kt index a7e70fa1b29a..b56a69903ea4 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderService.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderService.kt @@ -24,6 +24,7 @@ import android.graphics.drawable.Icon import android.media.MediaRoute2Info import android.os.IBinder import com.android.systemui.R +import com.android.systemui.shared.mediattt.DeviceInfo import com.android.systemui.shared.mediattt.IDeviceSenderCallback import javax.inject.Inject @@ -37,8 +38,10 @@ class MediaTttSenderService @Inject constructor( // TODO(b/203800643): Add logging when callbacks trigger. private val binder: IBinder = object : IDeviceSenderCallback.Stub() { - override fun closeToReceiverToStartCast(mediaInfo: MediaRoute2Info) { - this@MediaTttSenderService.closeToReceiverToStartCast(mediaInfo) + override fun closeToReceiverToStartCast( + mediaInfo: MediaRoute2Info, otherDeviceInfo: DeviceInfo + ) { + this@MediaTttSenderService.closeToReceiverToStartCast(mediaInfo, otherDeviceInfo) } } @@ -50,14 +53,14 @@ class MediaTttSenderService @Inject constructor( override fun onBind(intent: Intent?): IBinder = binder - private fun closeToReceiverToStartCast(mediaInfo: MediaRoute2Info) { + private fun closeToReceiverToStartCast( + mediaInfo: MediaRoute2Info, otherDeviceInfo: DeviceInfo + ) { val chipState = MoveCloserToStartCast( appIconDrawable = fakeAppIconDrawable, appIconContentDescription = mediaInfo.name.toString(), - otherDeviceName = FAKE_DEVICE_NAME + otherDeviceName = otherDeviceInfo.name ) controller.displayChip(chipState) } } - -private const val FAKE_DEVICE_NAME = "Fake Other Device Name" diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/MediaTttCommandLineHelperTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/MediaTttCommandLineHelperTest.kt index abf53d303139..4839bdea1b70 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/MediaTttCommandLineHelperTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/MediaTttCommandLineHelperTest.kt @@ -21,15 +21,15 @@ import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.media.taptotransfer.receiver.ChipStateReceiver import com.android.systemui.media.taptotransfer.receiver.MediaTttChipControllerReceiver -import com.android.systemui.media.taptotransfer.sender.MediaTttChipControllerSender -import com.android.systemui.media.taptotransfer.sender.MediaTttSenderService -import com.android.systemui.media.taptotransfer.sender.TransferInitiated -import com.android.systemui.media.taptotransfer.sender.TransferSucceeded +import com.android.systemui.media.taptotransfer.sender.* +import com.android.systemui.shared.mediattt.DeviceInfo import com.android.systemui.shared.mediattt.IDeviceSenderCallback import com.android.systemui.statusbar.commandline.Command import com.android.systemui.statusbar.commandline.CommandRegistry import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.any +import com.android.systemui.util.mockito.argumentCaptor +import com.android.systemui.util.mockito.capture import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import org.junit.Before @@ -120,7 +120,10 @@ class MediaTttCommandLineHelperTest : SysuiTestCase() { commandRegistry.onShellCommand(pw, getMoveCloserToStartCastCommand()) assertThat(context.isBound(mediaSenderServiceComponentName)).isTrue() - verify(mediaSenderService).closeToReceiverToStartCast(any()) + + val deviceInfoCaptor = argumentCaptor<DeviceInfo>() + verify(mediaSenderService).closeToReceiverToStartCast(any(), capture(deviceInfoCaptor)) + assertThat(deviceInfoCaptor.value!!.name).isEqualTo(DEVICE_NAME) } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderServiceTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderServiceTest.kt index 5849ed55f133..8f64698a5a6c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderServiceTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderServiceTest.kt @@ -3,8 +3,11 @@ package com.android.systemui.media.taptotransfer.sender import android.media.MediaRoute2Info import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase +import com.android.systemui.shared.mediattt.DeviceInfo import com.android.systemui.shared.mediattt.IDeviceSenderCallback -import com.android.systemui.util.mockito.any +import com.android.systemui.util.mockito.argumentCaptor +import com.android.systemui.util.mockito.capture +import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test import org.mockito.Mock @@ -33,8 +36,13 @@ class MediaTttSenderServiceTest : SysuiTestCase() { @Test fun closeToReceiverToStartCast_controllerTriggeredWithMoveCloserToStartCastState() { - callback.closeToReceiverToStartCast(mediaInfo) + val name = "Fake name" + callback.closeToReceiverToStartCast(mediaInfo, DeviceInfo(name)) - verify(controller).displayChip(any<MoveCloserToStartCast>()) + val chipStateCaptor = argumentCaptor<MoveCloserToStartCast>() + verify(controller).displayChip(capture(chipStateCaptor)) + + val chipState = chipStateCaptor.value!! + assertThat(chipState.otherDeviceName).isEqualTo(name) } } |