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

Commit 11c1edf0 authored by Caitlin Cassidy's avatar Caitlin Cassidy Committed by Android (Google) Code Review
Browse files

Merge changes Ib9425d93,I9ce20da5

* changes:
  [Media TTT] Timeout the chip after 3 seconds.
  [Media TTT] Stop chip from crashing on older devices (e.g. Pixel 4a), un-ignore the tests now that it doesn't crash, and rehab the tests a bit.
parents de1f7dd5 634d0eee
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -155,6 +155,7 @@
    <color name="GM2_grey_900">#202124</color>

    <color name="GM2_red_300">#F28B82</color>
    <color name="GM2_red_500">#EA4335</color>
    <color name="GM2_red_700">#C5221F</color>

    <color name="GM2_blue_300">#8AB4F8</color>
+8 −27
Original line number Diff line number Diff line
@@ -16,12 +16,7 @@

package com.android.systemui.media.dagger;

import android.content.Context;
import android.os.Handler;
import android.view.WindowManager;

import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.media.MediaDataManager;
import com.android.systemui.media.MediaFlags;
import com.android.systemui.media.MediaHierarchyManager;
@@ -34,11 +29,8 @@ import com.android.systemui.media.taptotransfer.MediaTttCommandLineHelper;
import com.android.systemui.media.taptotransfer.MediaTttFlags;
import com.android.systemui.media.taptotransfer.receiver.MediaTttChipControllerReceiver;
import com.android.systemui.media.taptotransfer.sender.MediaTttChipControllerSender;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.commandline.CommandRegistry;

import java.util.Optional;
import java.util.concurrent.Executor;

import javax.inject.Named;

@@ -101,13 +93,11 @@ public interface MediaModule {
    @SysUISingleton
    static Optional<MediaTttChipControllerSender> providesMediaTttChipControllerSender(
            MediaTttFlags mediaTttFlags,
            CommandQueue commandQueue,
            Context context,
            WindowManager windowManager) {
            Lazy<MediaTttChipControllerSender> controllerSenderLazy) {
        if (!mediaTttFlags.isMediaTttEnabled()) {
            return Optional.empty();
        }
        return Optional.of(new MediaTttChipControllerSender(commandQueue, context, windowManager));
        return Optional.of(controllerSenderLazy.get());
    }

    /** */
@@ -115,16 +105,11 @@ public interface MediaModule {
    @SysUISingleton
    static Optional<MediaTttChipControllerReceiver> providesMediaTttChipControllerReceiver(
            MediaTttFlags mediaTttFlags,
            CommandQueue commandQueue,
            Context context,
            WindowManager windowManager,
            @Main Handler mainHandler) {
            Lazy<MediaTttChipControllerReceiver> controllerReceiverLazy) {
        if (!mediaTttFlags.isMediaTttEnabled()) {
            return Optional.empty();
        }
        return Optional.of(
                new MediaTttChipControllerReceiver(
                        commandQueue, context, windowManager, mainHandler));
        return Optional.of(controllerReceiverLazy.get());
    }

    /** */
@@ -132,14 +117,11 @@ public interface MediaModule {
    @SysUISingleton
    static Optional<MediaTttCommandLineHelper> providesMediaTttCommandLineHelper(
            MediaTttFlags mediaTttFlags,
            CommandRegistry commandRegistry,
            Context context,
            @Main Executor mainExecutor) {
            Lazy<MediaTttCommandLineHelper> helperLazy) {
        if (!mediaTttFlags.isMediaTttEnabled()) {
            return Optional.empty();
        }
        return Optional.of(
                new MediaTttCommandLineHelper(commandRegistry, context, mainExecutor));
        return Optional.of(helperLazy.get());
    }

    /** */
@@ -147,13 +129,12 @@ public interface MediaModule {
    @SysUISingleton
    static Optional<MediaMuteAwaitConnectionCli> providesMediaMuteAwaitConnectionCli(
            MediaFlags mediaFlags,
            CommandRegistry commandRegistry,
            Context context
            Lazy<MediaMuteAwaitConnectionCli> muteAwaitConnectionCliLazy
    ) {
        if (!mediaFlags.areMuteAwaitConnectionsEnabled()) {
            return Optional.empty();
        }
        return Optional.of(new MediaMuteAwaitConnectionCli(commandRegistry, context));
        return Optional.of(muteAwaitConnectionCliLazy.get());
    }

    /** */
+13 −1
Original line number Diff line number Diff line
@@ -25,8 +25,11 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.annotation.VisibleForTesting
import com.android.internal.widget.CachingIconView
import com.android.systemui.R
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.util.concurrency.DelayableExecutor

/**
 * A superclass controller that provides common functionality for showing chips on the sender device
@@ -38,6 +41,7 @@ import com.android.systemui.R
abstract class MediaTttChipControllerCommon<T : MediaTttChipState>(
    internal val context: Context,
    private val windowManager: WindowManager,
    @Main private val mainExecutor: DelayableExecutor,
    @LayoutRes private val chipLayoutRes: Int
) {
    /** The window layout parameters we'll use when attaching the view to a window. */
@@ -56,6 +60,9 @@ abstract class MediaTttChipControllerCommon<T : MediaTttChipState>(
    /** The chip view currently being displayed. Null if the chip is not being displayed. */
    var chipView: ViewGroup? = null

    /** A [Runnable] that, when run, will cancel the pending timeout of the chip. */
    var cancelChipViewTimeout: Runnable? = null

    /**
     * Displays the chip with the current state.
     *
@@ -77,8 +84,11 @@ abstract class MediaTttChipControllerCommon<T : MediaTttChipState>(
        if (oldChipView == null) {
            windowManager.addView(chipView, windowLayoutParams)
        }
    }

        // Cancel and re-set the chip timeout each time we get a new state.
        cancelChipViewTimeout?.run()
        cancelChipViewTimeout = mainExecutor.executeDelayed(this::removeChip, TIMEOUT_MILLIS)
    }

    /** Hides the chip. */
    fun removeChip() {
@@ -118,3 +128,5 @@ abstract class MediaTttChipControllerCommon<T : MediaTttChipState>(
// Used in CTS tests UpdateMediaTapToTransferSenderDisplayTest and
// UpdateMediaTapToTransferReceiverDisplayTest
private const val WINDOW_TITLE = "Media Transfer Chip View"
@VisibleForTesting
const val TIMEOUT_MILLIS = 3000L
+3 −3
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.systemui.media.taptotransfer.receiver

import android.app.StatusBarManager
import android.content.Context
import android.graphics.drawable.Drawable
import android.graphics.drawable.Icon
import android.media.MediaRoute2Info
import android.os.Handler
@@ -27,10 +26,10 @@ import android.view.ViewGroup
import android.view.WindowManager
import com.android.systemui.R
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.media.taptotransfer.common.MediaTttChipControllerCommon
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.util.concurrency.DelayableExecutor
import javax.inject.Inject

/**
@@ -43,9 +42,10 @@ class MediaTttChipControllerReceiver @Inject constructor(
    commandQueue: CommandQueue,
    context: Context,
    windowManager: WindowManager,
    mainExecutor: DelayableExecutor,
    @Main private val mainHandler: Handler,
) : MediaTttChipControllerCommon<ChipStateReceiver>(
    context, windowManager, R.layout.media_ttt_chip_receiver
    context, windowManager, mainExecutor, R.layout.media_ttt_chip_receiver
) {
    private val commandQueueCallbacks = object : CommandQueue.Callbacks {
        override fun updateMediaTapToTransferReceiverDisplay(
+4 −1
Original line number Diff line number Diff line
@@ -27,8 +27,10 @@ import android.widget.TextView
import com.android.internal.statusbar.IUndoMediaTransferCallback
import com.android.systemui.R
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.media.taptotransfer.common.MediaTttChipControllerCommon
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.util.concurrency.DelayableExecutor
import javax.inject.Inject

/**
@@ -40,8 +42,9 @@ class MediaTttChipControllerSender @Inject constructor(
    commandQueue: CommandQueue,
    context: Context,
    windowManager: WindowManager,
    @Main private val mainExecutor: DelayableExecutor,
) : MediaTttChipControllerCommon<ChipStateSender>(
    context, windowManager, R.layout.media_ttt_chip
    context, windowManager, mainExecutor,  R.layout.media_ttt_chip
) {
    private val commandQueueCallbacks = object : CommandQueue.Callbacks {
        override fun updateMediaTapToTransferSenderDisplay(
Loading