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:
@@ -27,4 +27,4 @@ interface ChipInfoCommon {
|
||||
fun getTimeoutMs(): Long
|
||||
}
|
||||
|
||||
const val DEFAULT_TIMEOUT_MILLIS = 4000L
|
||||
const val DEFAULT_TIMEOUT_MILLIS = 10000L
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
) {
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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,
|
||||
) {
|
||||
|
||||
@@ -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,
|
||||
) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user