Merge changes I0d063c25,I27d2e4ae,Ieef1681c into tm-qpr-dev am: 91b6e7c0ac

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19484912

Change-Id: Ia9dd41467fd2e2b88ce8bf07c33b65c97ceb9c98
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Caitlin Cassidy
2022-08-02 22:15:56 +00:00
committed by Automerger Merge Worker
8 changed files with 32 additions and 80 deletions

View File

@@ -27,4 +27,4 @@ interface ChipInfoCommon {
fun getTimeoutMs(): Long
}
const val DEFAULT_TIMEOUT_MILLIS = 4000L
const val DEFAULT_TIMEOUT_MILLIS = 10000L

View File

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

View File

@@ -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,
) {

View File

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

View File

@@ -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,
) {

View File

@@ -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,
) {

View File

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

View File

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