diff options
8 files changed, 32 insertions, 80 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/ChipInfoCommon.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/ChipInfoCommon.kt index e95976f555f8..a29c5883118c 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/ChipInfoCommon.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/ChipInfoCommon.kt @@ -27,4 +27,4 @@ interface ChipInfoCommon { fun getTimeoutMs(): Long } -const val DEFAULT_TIMEOUT_MILLIS = 4000L +const val DEFAULT_TIMEOUT_MILLIS = 10000L diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommon.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommon.kt index 79e1fb9a60f6..5f478ce32590 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommon.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommon.kt @@ -26,7 +26,6 @@ import android.os.PowerManager import android.os.SystemClock import android.util.Log import android.view.LayoutInflater -import android.view.MotionEvent import android.view.ViewGroup import android.view.WindowManager import android.view.accessibility.AccessibilityManager @@ -38,7 +37,6 @@ import com.android.internal.widget.CachingIconView import com.android.settingslib.Utils import com.android.systemui.R import com.android.systemui.dagger.qualifiers.Main -import com.android.systemui.statusbar.gesture.TapGestureDetector import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.util.concurrency.DelayableExecutor import com.android.systemui.util.view.ViewUtil @@ -61,7 +59,6 @@ abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>( @Main private val mainExecutor: DelayableExecutor, private val accessibilityManager: AccessibilityManager, private val configurationController: ConfigurationController, - private val tapGestureDetector: TapGestureDetector, private val powerManager: PowerManager, @LayoutRes private val chipLayoutRes: Int, ) { @@ -111,13 +108,16 @@ abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>( } else { // The chip is new, so set up all our callbacks and inflate the view configurationController.addCallback(displayScaleListener) - tapGestureDetector.addOnGestureDetectedCallback(TAG, this::onScreenTapped) - // Wake the screen so the user will see the chip - powerManager.wakeUp( - SystemClock.uptimeMillis(), - PowerManager.WAKE_REASON_APPLICATION, - "com.android.systemui:media_tap_to_transfer_activated" - ) + // Wake the screen if necessary so the user will see the chip. (Per b/239426653, we want + // the chip to show over the dream state, so we should only wake up if the screen is + // completely off.) + if (!powerManager.isScreenOn) { + powerManager.wakeUp( + SystemClock.uptimeMillis(), + PowerManager.WAKE_REASON_APPLICATION, + "com.android.systemui:media_tap_to_transfer_activated" + ) + } inflateAndUpdateChip(newChipInfo) } @@ -172,7 +172,6 @@ abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>( if (chipView == null) { return } logger.logChipRemoval(removalReason) configurationController.removeCallback(displayScaleListener) - tapGestureDetector.removeOnGestureDetectedCallback(TAG) windowManager.removeView(chipView) chipView = null chipInfo = null @@ -257,15 +256,6 @@ abstract class MediaTttChipControllerCommon<T : ChipInfoCommon>( isAppIcon = false ) } - - private fun onScreenTapped(e: MotionEvent) { - val view = chipView ?: return - // If the tap is within the chip bounds, we shouldn't hide the chip (in case users think the - // chip is tappable). - if (!viewUtil.touchIsWithinView(view, e.x, e.y)) { - removeChip(MediaTttRemovalReason.REASON_SCREEN_TAP) - } - } } // Used in CTS tests UpdateMediaTapToTransferSenderDisplayTest and diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt index f0e5a3a63405..495f697f57e6 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiver.kt @@ -41,7 +41,6 @@ import com.android.systemui.media.taptotransfer.common.DEFAULT_TIMEOUT_MILLIS import com.android.systemui.media.taptotransfer.common.MediaTttChipControllerCommon import com.android.systemui.media.taptotransfer.common.MediaTttLogger import com.android.systemui.statusbar.CommandQueue -import com.android.systemui.statusbar.gesture.TapGestureDetector import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.util.animation.AnimationUtil.Companion.frames import com.android.systemui.util.concurrency.DelayableExecutor @@ -63,7 +62,6 @@ class MediaTttChipControllerReceiver @Inject constructor( mainExecutor: DelayableExecutor, accessibilityManager: AccessibilityManager, configurationController: ConfigurationController, - tapGestureDetector: TapGestureDetector, powerManager: PowerManager, @Main private val mainHandler: Handler, private val uiEventLogger: MediaTttReceiverUiEventLogger, @@ -75,7 +73,6 @@ class MediaTttChipControllerReceiver @Inject constructor( mainExecutor, accessibilityManager, configurationController, - tapGestureDetector, powerManager, R.layout.media_ttt_chip_receiver, ) { diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt index cd86fff1c6f8..a153cb6c0d31 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt @@ -243,6 +243,6 @@ enum class ChipStateSender( // Give the Transfer*Triggered states a longer timeout since those states represent an active // process and we should keep the user informed about it as long as possible (but don't allow it to // continue indefinitely). -private const val TRANSFER_TRIGGERED_TIMEOUT_MILLIS = 15000L +private const val TRANSFER_TRIGGERED_TIMEOUT_MILLIS = 30000L private const val TAG = "ChipStateSender" diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSender.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSender.kt index 540798af9a77..3ea11b8aa4dd 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSender.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSender.kt @@ -38,7 +38,6 @@ import com.android.systemui.media.taptotransfer.common.MediaTttChipControllerCom import com.android.systemui.media.taptotransfer.common.MediaTttLogger import com.android.systemui.media.taptotransfer.common.MediaTttRemovalReason import com.android.systemui.statusbar.CommandQueue -import com.android.systemui.statusbar.gesture.TapGestureDetector import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.util.concurrency.DelayableExecutor import com.android.systemui.util.view.ViewUtil @@ -58,7 +57,6 @@ class MediaTttChipControllerSender @Inject constructor( @Main mainExecutor: DelayableExecutor, accessibilityManager: AccessibilityManager, configurationController: ConfigurationController, - tapGestureDetector: TapGestureDetector, powerManager: PowerManager, private val uiEventLogger: MediaTttSenderUiEventLogger ) : MediaTttChipControllerCommon<ChipSenderInfo>( @@ -69,7 +67,6 @@ class MediaTttChipControllerSender @Inject constructor( mainExecutor, accessibilityManager, configurationController, - tapGestureDetector, powerManager, R.layout.media_ttt_chip, ) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommonTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommonTest.kt index 55397868125b..f1330682b0e1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommonTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/common/MediaTttChipControllerCommonTest.kt @@ -21,7 +21,6 @@ import android.content.pm.ApplicationInfo import android.content.pm.PackageManager import android.graphics.drawable.Drawable import android.os.PowerManager -import android.view.MotionEvent import android.view.View import android.view.ViewGroup import android.view.WindowManager @@ -31,7 +30,6 @@ import androidx.test.filters.SmallTest import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.dagger.qualifiers.Main -import com.android.systemui.statusbar.gesture.TapGestureDetector import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener import com.android.systemui.util.concurrency.DelayableExecutor @@ -76,8 +74,6 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() { @Mock private lateinit var viewUtil: ViewUtil @Mock - private lateinit var tapGestureDetector: TapGestureDetector - @Mock private lateinit var powerManager: PowerManager @Before @@ -109,29 +105,42 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() { fakeExecutor, accessibilityManager, configurationController, - tapGestureDetector, powerManager, ) } @Test - fun displayChip_chipAddedAndGestureDetectionStartedAndScreenOn() { + fun displayChip_chipAdded() { controllerCommon.displayChip(getState()) verify(windowManager).addView(any(), any()) - verify(tapGestureDetector).addOnGestureDetectedCallback(any(), any()) + } + + @Test + fun displayChip_screenOff_screenWakes() { + whenever(powerManager.isScreenOn).thenReturn(false) + + controllerCommon.displayChip(getState()) + verify(powerManager).wakeUp(any(), any(), any()) } @Test - fun displayChip_twice_chipAndGestureDetectionNotAddedTwice() { + fun displayChip_screenAlreadyOn_screenNotWoken() { + whenever(powerManager.isScreenOn).thenReturn(true) + + controllerCommon.displayChip(getState()) + + verify(powerManager, never()).wakeUp(any(), any(), any()) + } + + @Test + fun displayChip_twice_chipNotAddedTwice() { controllerCommon.displayChip(getState()) reset(windowManager) - reset(tapGestureDetector) controllerCommon.displayChip(getState()) verify(windowManager, never()).addView(any(), any()) - verify(tapGestureDetector, never()).addOnGestureDetectedCallback(any(), any()) } @Test @@ -204,7 +213,7 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() { } @Test - fun removeChip_chipRemovedAndGestureDetectionStoppedAndRemovalLogged() { + fun removeChip_chipRemovedAndRemovalLogged() { // First, add the chip controllerCommon.displayChip(getState()) @@ -213,7 +222,6 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() { controllerCommon.removeChip(reason) verify(windowManager).removeView(any()) - verify(tapGestureDetector).removeOnGestureDetectedCallback(any()) verify(logger).logChipRemoval(reason) } @@ -325,40 +333,6 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() { assertThat(chipView.getAppIconView().measuredHeight).isEqualTo(ICON_SIZE) } - @Test - fun tapGestureDetected_outsideViewBounds_viewHidden() { - controllerCommon.displayChip(getState()) - whenever(viewUtil.touchIsWithinView(any(), any(), any())).thenReturn(false) - val gestureCallbackCaptor = argumentCaptor<(MotionEvent) -> Unit>() - verify(tapGestureDetector).addOnGestureDetectedCallback( - any(), capture(gestureCallbackCaptor) - ) - val callback = gestureCallbackCaptor.value!! - - callback.invoke( - MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, 0f, 0f, 0) - ) - - verify(windowManager).removeView(any()) - } - - @Test - fun tapGestureDetected_insideViewBounds_viewNotHidden() { - controllerCommon.displayChip(getState()) - whenever(viewUtil.touchIsWithinView(any(), any(), any())).thenReturn(true) - val gestureCallbackCaptor = argumentCaptor<(MotionEvent) -> Unit>() - verify(tapGestureDetector).addOnGestureDetectedCallback( - any(), capture(gestureCallbackCaptor) - ) - val callback = gestureCallbackCaptor.value!! - - callback.invoke( - MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, 0f, 0f, 0) - ) - - verify(windowManager, never()).removeView(any()) - } - private fun getState(name: String = "name") = ChipInfo(name) private fun getChipView(): ViewGroup { @@ -383,7 +357,6 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() { @Main mainExecutor: DelayableExecutor, accessibilityManager: AccessibilityManager, configurationController: ConfigurationController, - tapGestureDetector: TapGestureDetector, powerManager: PowerManager, ) : MediaTttChipControllerCommon<ChipInfo>( context, @@ -393,7 +366,6 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() { mainExecutor, accessibilityManager, configurationController, - tapGestureDetector, powerManager, R.layout.media_ttt_chip, ) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt index 7c5d07737313..dbc5f7c7041e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/receiver/MediaTttChipControllerReceiverTest.kt @@ -36,7 +36,6 @@ import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.media.taptotransfer.common.MediaTttLogger import com.android.systemui.statusbar.CommandQueue -import com.android.systemui.statusbar.gesture.TapGestureDetector import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.any @@ -107,7 +106,6 @@ class MediaTttChipControllerReceiverTest : SysuiTestCase() { FakeExecutor(FakeSystemClock()), accessibilityManager, configurationController, - TapGestureDetector(context), powerManager, Handler.getMain(), receiverUiEventLogger diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSenderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSenderTest.kt index e06a27d6a272..cd8ee732e113 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSenderTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttChipControllerSenderTest.kt @@ -37,7 +37,6 @@ import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.media.taptotransfer.common.MediaTttLogger import com.android.systemui.statusbar.CommandQueue -import com.android.systemui.statusbar.gesture.TapGestureDetector import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.any @@ -115,7 +114,6 @@ class MediaTttChipControllerSenderTest : SysuiTestCase() { fakeExecutor, accessibilityManager, configurationController, - TapGestureDetector(context), powerManager, senderUiEventLogger ) |