[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
This commit is contained in:
Caitlin Cassidy
2022-01-11 20:01:08 +00:00
parent 38aa601aa2
commit 0a93932437
7 changed files with 94 additions and 17 deletions

View File

@@ -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;

View File

@@ -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)
}
}

View File

@@ -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);
}

View File

@@ -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)
}
}

View File

@@ -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"

View File

@@ -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

View File

@@ -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)
}
}