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

Commit a6d18d89 authored by Caitlin Cassidy's avatar Caitlin Cassidy
Browse files

[Media TTT] Add the #transferToReceiverSucceeded callback.

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

Change-Id: Id5aef5c4f5fe61d26ad556b28f6d6cdb4d6ad31d
parent b3defd20
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -84,6 +84,18 @@ interface IDeviceSenderCallback {
    oneway void transferToThisDeviceTriggered(
        in MediaRoute2Info mediaInfo, in DeviceInfo otherDeviceInfo);

    /**
     * Invoke to notify System UI that a media transfer from this device (the sender) to a receiver
     * device has finished successfully.
     *
     * Important notes:
     *   - This callback is for *starting* a cast. It should be used when this device had previously
     *     been playing media locally and the media has successfully been transferred to the
     *     receiver device instead.
     */
    oneway void transferToReceiverSucceeded(
        in MediaRoute2Info mediaInfo, in DeviceInfo otherDeviceInfo);

    /**
     * Invoke to notify System UI that the attempted transfer has failed.
     *
+7 −18
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ import com.android.systemui.media.taptotransfer.sender.MoveCloserToStartCast
import com.android.systemui.media.taptotransfer.sender.TransferFailed
import com.android.systemui.media.taptotransfer.sender.TransferToReceiverTriggered
import com.android.systemui.media.taptotransfer.sender.TransferToThisDeviceTriggered
import com.android.systemui.media.taptotransfer.sender.TransferSucceeded
import com.android.systemui.media.taptotransfer.sender.TransferToReceiverSucceeded
import com.android.systemui.shared.mediattt.DeviceInfo
import com.android.systemui.shared.mediattt.IDeviceSenderCallback
import com.android.systemui.statusbar.commandline.Command
@@ -104,17 +104,10 @@ class MediaTttCommandLineHelper @Inject constructor(
                        senderCallback.transferToThisDeviceTriggered(mediaInfo, otherDeviceInfo)
                    }
                }
                // TODO(b/203800643): Migrate this command to invoke the service instead of the
                //   controller.
                TRANSFER_SUCCEEDED_COMMAND_NAME -> {
                    mediaTttChipControllerSender.displayChip(
                        TransferSucceeded(
                            appIconDrawable,
                            APP_ICON_CONTENT_DESCRIPTION,
                            otherDeviceName,
                            fakeUndoRunnable
                        )
                    )
                TRANSFER_TO_RECEIVER_SUCCEEDED_COMMAND_NAME -> {
                    runOnService { senderCallback ->
                        senderCallback.transferToReceiverSucceeded(mediaInfo, otherDeviceInfo)
                    }
                }
                TRANSFER_FAILED_COMMAND_NAME -> {
                    runOnService { senderCallback ->
@@ -127,7 +120,7 @@ class MediaTttCommandLineHelper @Inject constructor(
                            "$MOVE_CLOSER_TO_END_CAST_COMMAND_NAME, " +
                            "$TRANSFER_TO_RECEIVER_TRIGGERED_COMMAND_NAME, " +
                            "$TRANSFER_TO_THIS_DEVICE_TRIGGERED_COMMAND_NAME, " +
                            "$TRANSFER_SUCCEEDED_COMMAND_NAME, " +
                            "$TRANSFER_TO_RECEIVER_SUCCEEDED_COMMAND_NAME, " +
                            TRANSFER_FAILED_COMMAND_NAME
                    )
                }
@@ -217,10 +210,6 @@ class MediaTttCommandLineHelper @Inject constructor(
        /** Runs the command on the provided [senderCallback]. */
        fun run(senderCallback: IDeviceSenderCallback)
    }

    private val fakeUndoRunnable = Runnable {
        Log.i(TAG, "Undo runnable triggered")
    }
}

@VisibleForTesting
@@ -241,7 +230,7 @@ val TRANSFER_TO_RECEIVER_TRIGGERED_COMMAND_NAME = TransferToReceiverTriggered::c
val TRANSFER_TO_THIS_DEVICE_TRIGGERED_COMMAND_NAME =
    TransferToThisDeviceTriggered::class.simpleName!!
@VisibleForTesting
val TRANSFER_SUCCEEDED_COMMAND_NAME = TransferSucceeded::class.simpleName!!
val TRANSFER_TO_RECEIVER_SUCCEEDED_COMMAND_NAME = TransferToReceiverSucceeded::class.simpleName!!
@VisibleForTesting
val TRANSFER_FAILED_COMMAND_NAME = TransferFailed::class.simpleName!!

+2 −2
Original line number Diff line number Diff line
@@ -111,13 +111,13 @@ class TransferToThisDeviceTriggered(
}

/**
 * A state representing that a transfer has been successfully completed.
 * A state representing that a transfer to the receiver device has been successfully completed.
 *
 * @property otherDeviceName the name of the other device involved in the transfer.
 * @property undoRunnable if present, the runnable that should be run to undo the transfer. We will
 *   show an Undo button on the chip if this runnable is present.
 */
class TransferSucceeded(
class TransferToReceiverSucceeded(
    appIconDrawable: Drawable,
    appIconContentDescription: String,
    private val otherDeviceName: String,
+1 −1
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ class MediaTttChipControllerSender @Inject constructor(

        // Undo
        val undoClickListener: View.OnClickListener? =
            if (chipState is TransferSucceeded && chipState.undoRunnable != null)
            if (chipState is TransferToReceiverSucceeded && chipState.undoRunnable != null)
                View.OnClickListener { chipState.undoRunnable.run() }
            else
                null
+19 −0
Original line number Diff line number Diff line
@@ -67,6 +67,12 @@ class MediaTttSenderService @Inject constructor(
        ) {
            this@MediaTttSenderService.transferToThisDeviceTriggered(mediaInfo)
        }

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

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

    private fun transferToReceiverSucceeded(
        mediaInfo: MediaRoute2Info, otherDeviceInfo: DeviceInfo
    ) {
        val chipState = TransferToReceiverSucceeded(
            appIconDrawable = fakeAppIconDrawable,
            appIconContentDescription = mediaInfo.name.toString(),
            otherDeviceName = otherDeviceInfo.name
            // TODO(b/203800643): Implement the undo API correctly so we can provide an undo
            //   callback here.
        )
        controller.displayChip(chipState)
    }
}
Loading