[Media TTT] Add DeviceInfo to the service callback.
Bug: 203800643
Bug: 203800347
Test: manual (verify chip contains right name)
Test: media.taptotransfer tests
Change-Id: Iab3f8a7d793d0c824fad9041c52b5a7fe862d236
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 0000000..861a4ed
--- /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 0000000..d41aaf3
--- /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 f34b8d6..484791d 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 @@
* 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 0078b95..460d38f 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.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 @@
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 a7e70fa..b56a699 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.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 @@
// 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 @@
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 abf53d3..4839bde 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 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 @@
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 5849ed5..8f64698 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 @@
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 @@
@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)
}
}