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

Commit 180e9686 authored by Caitlin Cassidy's avatar Caitlin Cassidy
Browse files

[Media TTT] Add NoLongerCloseToReceiver callback.

Bug: 203800643
Bug: 203800347
Test: verify `adb shell cmd statusbar media-ttt-chip-sender Device
NoLongerCloseToReceiver` hides the chip
Test: media.taptotransfer tests

Change-Id: Iceea7c10b23dc1b175e11335ca4fcf695ca98fb6
parent ca400ac4
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -124,4 +124,10 @@ interface IDeviceSenderService {
     * on the receiver and the transfer that should've *ended* the playing on the receiver.
     */
    oneway void transferFailed(in MediaRoute2Info mediaInfo, in DeviceInfo otherDeviceInfo);

    /**
     * Invoke to notify System UI that this device is no longer close to the receiver device.
     */
    oneway void noLongerCloseToReceiver(
        in MediaRoute2Info mediaInfo, in DeviceInfo otherDeviceInfo);
}
+0 −2
Original line number Diff line number Diff line
@@ -112,7 +112,6 @@ public interface MediaModule {
            MediaTttFlags mediaTttFlags,
            CommandRegistry commandRegistry,
            Context context,
            MediaTttChipControllerSender mediaTttChipControllerSender,
            MediaTttChipControllerReceiver mediaTttChipControllerReceiver) {
        if (!mediaTttFlags.isMediaTttEnabled()) {
            return Optional.empty();
@@ -121,7 +120,6 @@ public interface MediaModule {
                new MediaTttCommandLineHelper(
                        commandRegistry,
                        context,
                        mediaTttChipControllerSender,
                        mediaTttChipControllerReceiver));
    }

+16 −26
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ import com.android.systemui.R
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.media.taptotransfer.receiver.MediaTttChipControllerReceiver
import com.android.systemui.media.taptotransfer.receiver.ChipStateReceiver
import com.android.systemui.media.taptotransfer.sender.MediaTttChipControllerSender
import com.android.systemui.media.taptotransfer.sender.MediaTttSenderService
import com.android.systemui.media.taptotransfer.sender.MoveCloserToEndCast
import com.android.systemui.media.taptotransfer.sender.MoveCloserToStartCast
@@ -55,7 +54,6 @@ import javax.inject.Inject
class MediaTttCommandLineHelper @Inject constructor(
    commandRegistry: CommandRegistry,
    private val context: Context,
    private val mediaTttChipControllerSender: MediaTttChipControllerSender,
    private val mediaTttChipControllerReceiver: MediaTttChipControllerReceiver,
) {
    private var senderService: IDeviceSenderService? = null
@@ -67,17 +65,15 @@ class MediaTttCommandLineHelper @Inject constructor(
        }

    init {
        commandRegistry.registerCommand(
            ADD_CHIP_COMMAND_SENDER_TAG) { AddChipCommandSender() }
        commandRegistry.registerCommand(
            REMOVE_CHIP_COMMAND_SENDER_TAG) { RemoveChipCommandSender() }
        commandRegistry.registerCommand(SENDER_COMMAND) { SenderCommand() }
        commandRegistry.registerCommand(
            ADD_CHIP_COMMAND_RECEIVER_TAG) { AddChipCommandReceiver() }
        commandRegistry.registerCommand(
            REMOVE_CHIP_COMMAND_RECEIVER_TAG) { RemoveChipCommandReceiver() }
    }

    inner class AddChipCommandSender : Command {
    /** All commands for the sender device. */
    inner class SenderCommand : Command {
        override fun execute(pw: PrintWriter, args: List<String>) {
            val otherDeviceName = args[0]
            val mediaInfo = MediaRoute2Info.Builder("id", "Test Name")
@@ -145,24 +141,29 @@ class MediaTttCommandLineHelper @Inject constructor(
                        senderService.transferFailed(mediaInfo, otherDeviceInfo)
                    }
                }
                NO_LONGER_CLOSE_TO_RECEIVER_COMMAND_NAME -> {
                    runOnService { senderService ->
                        senderService.noLongerCloseToReceiver(mediaInfo, otherDeviceInfo)
                        context.unbindService(senderServiceConnection)
                    }
                }
                else -> {
                    pw.println("Chip type must be one of " +
                    pw.println("Sender command must be one of " +
                            "$MOVE_CLOSER_TO_START_CAST_COMMAND_NAME, " +
                            "$MOVE_CLOSER_TO_END_CAST_COMMAND_NAME, " +
                            "$TRANSFER_TO_RECEIVER_TRIGGERED_COMMAND_NAME, " +
                            "$TRANSFER_TO_THIS_DEVICE_TRIGGERED_COMMAND_NAME, " +
                            "$TRANSFER_TO_RECEIVER_SUCCEEDED_COMMAND_NAME, " +
                            "$TRANSFER_TO_THIS_DEVICE_SUCCEEDED_COMMAND_NAME, " +
                            TRANSFER_FAILED_COMMAND_NAME
                            "$TRANSFER_FAILED_COMMAND_NAME, " +
                            NO_LONGER_CLOSE_TO_RECEIVER_COMMAND_NAME
                    )
                }
            }
        }

        override fun help(pw: PrintWriter) {
            pw.println("Usage: adb shell cmd statusbar " +
                    "$ADD_CHIP_COMMAND_SENDER_TAG <deviceName> <chipStatus>"
            )
            pw.println("Usage: adb shell cmd statusbar $SENDER_COMMAND <deviceName> <chipStatus>")
        }

        private fun runOnService(command: SenderServiceCommand) {
@@ -185,19 +186,6 @@ class MediaTttCommandLineHelper @Inject constructor(
        }
    }

    /** A command to REMOVE the media ttt chip on the SENDER device. */
    inner class RemoveChipCommandSender : Command {
        override fun execute(pw: PrintWriter, args: List<String>) {
            mediaTttChipControllerSender.removeChip()
            if (senderService != null) {
                context.unbindService(senderServiceConnection)
            }
        }
        override fun help(pw: PrintWriter) {
            pw.println("Usage: adb shell cmd statusbar $REMOVE_CHIP_COMMAND_SENDER_TAG")
        }
    }

    /** A command to DISPLAY the media ttt chip on the RECEIVER device. */
    inner class AddChipCommandReceiver : Command {
        override fun execute(pw: PrintWriter, args: List<String>) {
@@ -245,7 +233,7 @@ class MediaTttCommandLineHelper @Inject constructor(
}

@VisibleForTesting
const val ADD_CHIP_COMMAND_SENDER_TAG = "media-ttt-chip-add-sender"
const val SENDER_COMMAND = "media-ttt-chip-sender"
@VisibleForTesting
const val REMOVE_CHIP_COMMAND_SENDER_TAG = "media-ttt-chip-remove-sender"
@VisibleForTesting
@@ -268,6 +256,8 @@ val TRANSFER_TO_THIS_DEVICE_SUCCEEDED_COMMAND_NAME =
    TransferToThisDeviceSucceeded::class.simpleName!!
@VisibleForTesting
val TRANSFER_FAILED_COMMAND_NAME = TransferFailed::class.simpleName!!
@VisibleForTesting
val NO_LONGER_CLOSE_TO_RECEIVER_COMMAND_NAME = "NoLongerCloseToReceiver"

private const val APP_ICON_CONTENT_DESCRIPTION = "Fake media app icon"
private const val TAG = "MediaTapToTransferCli"
+3 −0
Original line number Diff line number Diff line
@@ -81,6 +81,9 @@ abstract class MediaTttChipControllerCommon<T : MediaTttChipState>(

    /** Hides the chip. */
    fun removeChip() {
        // TODO(b/203800347): We may not want to hide the chip if we're currently in a
        //  TransferTriggered state: Once the user has initiated the transfer, they should be able
        //  to move away from the receiver device but still see the status of the transfer.
        if (chipView == null) { return }
        windowManager.removeView(chipView)
        chipView = null
+11 −0
Original line number Diff line number Diff line
@@ -88,6 +88,13 @@ class MediaTttSenderService @Inject constructor(
                mediaInfo, otherDeviceInfo, undoCallback
            )
        }

        override fun noLongerCloseToReceiver(
            mediaInfo: MediaRoute2Info,
            otherDeviceInfo: DeviceInfo
        ) {
            this@MediaTttSenderService.noLongerCloseToReceiver()
        }
    }

    // TODO(b/203800643): Use the app icon from the media info instead of a fake one.
@@ -168,4 +175,8 @@ class MediaTttSenderService @Inject constructor(
        )
        controller.displayChip(chipState)
    }

    private fun noLongerCloseToReceiver() {
        controller.removeChip()
    }
}
Loading