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 3cc99a8ef77e8..e95976f555f88 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 = 3000L +const val DEFAULT_TIMEOUT_MILLIS = 4000L 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 7cc52e4282189..fe1ac80e24df0 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 @@ -31,6 +31,10 @@ import android.view.MotionEvent import android.view.View import android.view.ViewGroup import android.view.WindowManager +import android.view.accessibility.AccessibilityManager +import android.view.accessibility.AccessibilityManager.FLAG_CONTENT_CONTROLS +import android.view.accessibility.AccessibilityManager.FLAG_CONTENT_ICONS +import android.view.accessibility.AccessibilityManager.FLAG_CONTENT_TEXT import android.widget.LinearLayout import com.android.internal.widget.CachingIconView import com.android.settingslib.Utils @@ -56,6 +60,7 @@ abstract class MediaTttChipControllerCommon( private val windowManager: WindowManager, private val viewUtil: ViewUtil, @Main private val mainExecutor: DelayableExecutor, + private val accessibilityManager: AccessibilityManager, private val tapGestureDetector: TapGestureDetector, private val powerManager: PowerManager, @LayoutRes private val chipLayoutRes: Int @@ -110,10 +115,16 @@ abstract class MediaTttChipControllerCommon( } // Cancel and re-set the chip timeout each time we get a new state. + val timeout = accessibilityManager.getRecommendedTimeoutMillis( + chipInfo.getTimeoutMs().toInt(), + // Not all chips have controls so FLAG_CONTENT_CONTROLS might be superfluous, but + // include it just to be safe. + FLAG_CONTENT_ICONS or FLAG_CONTENT_TEXT or FLAG_CONTENT_CONTROLS + ) cancelChipViewTimeout?.run() cancelChipViewTimeout = mainExecutor.executeDelayed( { removeChip(MediaTttRemovalReason.REASON_TIMEOUT) }, - chipInfo.getTimeoutMs() + timeout.toLong() ) } 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 072263fcf38cf..a5d763c5327bd 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 @@ -26,6 +26,7 @@ import android.os.PowerManager import android.util.Log import android.view.ViewGroup import android.view.WindowManager +import android.view.accessibility.AccessibilityManager import com.android.systemui.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Main @@ -52,6 +53,7 @@ class MediaTttChipControllerReceiver @Inject constructor( windowManager: WindowManager, viewUtil: ViewUtil, mainExecutor: DelayableExecutor, + accessibilityManager: AccessibilityManager, tapGestureDetector: TapGestureDetector, powerManager: PowerManager, @Main private val mainHandler: Handler, @@ -62,6 +64,7 @@ class MediaTttChipControllerReceiver @Inject constructor( windowManager, viewUtil, mainExecutor, + accessibilityManager, tapGestureDetector, powerManager, R.layout.media_ttt_chip_receiver 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 54b4380e2443a..943604cff8879 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 @@ -24,6 +24,7 @@ import android.util.Log import android.view.View import android.view.ViewGroup import android.view.WindowManager +import android.view.accessibility.AccessibilityManager import android.widget.TextView import com.android.internal.statusbar.IUndoMediaTransferCallback import com.android.systemui.R @@ -53,6 +54,7 @@ class MediaTttChipControllerSender @Inject constructor( windowManager: WindowManager, viewUtil: ViewUtil, @Main mainExecutor: DelayableExecutor, + accessibilityManager: AccessibilityManager, tapGestureDetector: TapGestureDetector, powerManager: PowerManager, private val uiEventLogger: MediaTttSenderUiEventLogger @@ -62,6 +64,7 @@ class MediaTttChipControllerSender @Inject constructor( windowManager, viewUtil, mainExecutor, + accessibilityManager, 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 b9a69bb8641a1..1527f0d0d71f5 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 @@ -25,6 +25,7 @@ import android.view.MotionEvent import android.view.View import android.view.ViewGroup import android.view.WindowManager +import android.view.accessibility.AccessibilityManager import android.widget.ImageView import androidx.test.filters.SmallTest import com.android.systemui.R @@ -65,6 +66,8 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() { @Mock private lateinit var logger: MediaTttLogger @Mock + private lateinit var accessibilityManager: AccessibilityManager + @Mock private lateinit var windowManager: WindowManager @Mock private lateinit var viewUtil: ViewUtil @@ -88,11 +91,21 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() { )).thenReturn(applicationInfo) context.setMockPackageManager(packageManager) + whenever(accessibilityManager.getRecommendedTimeoutMillis(any(), any())) + .thenReturn(TIMEOUT_MS.toInt()) + fakeClock = FakeSystemClock() fakeExecutor = FakeExecutor(fakeClock) controllerCommon = TestControllerCommon( - context, logger, windowManager, viewUtil, fakeExecutor, tapGestureDetector, powerManager + context, + logger, + windowManager, + viewUtil, + fakeExecutor, + accessibilityManager, + tapGestureDetector, + powerManager ) } @@ -344,6 +357,7 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() { windowManager: WindowManager, viewUtil: ViewUtil, @Main mainExecutor: DelayableExecutor, + accessibilityManager: AccessibilityManager, tapGestureDetector: TapGestureDetector, powerManager: PowerManager ) : MediaTttChipControllerCommon( @@ -352,6 +366,7 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() { windowManager, viewUtil, mainExecutor, + accessibilityManager, tapGestureDetector, powerManager, R.layout.media_ttt_chip @@ -364,7 +379,7 @@ class MediaTttChipControllerCommonTest : SysuiTestCase() { } inner class ChipInfo : ChipInfoCommon { - override fun getTimeoutMs() = TIMEOUT_MS + override fun getTimeoutMs() = 1L } } 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 9edc4f4c71c33..bbc5641930802 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 @@ -28,6 +28,7 @@ import android.testing.TestableLooper import android.view.View import android.view.ViewGroup import android.view.WindowManager +import android.view.accessibility.AccessibilityManager import android.widget.ImageView import androidx.test.filters.SmallTest import com.android.internal.logging.testing.UiEventLoggerFake @@ -65,6 +66,8 @@ class MediaTttChipControllerReceiverTest : SysuiTestCase() { @Mock private lateinit var logger: MediaTttLogger @Mock + private lateinit var accessibilityManager: AccessibilityManager + @Mock private lateinit var powerManager: PowerManager @Mock private lateinit var windowManager: WindowManager @@ -99,6 +102,7 @@ class MediaTttChipControllerReceiverTest : SysuiTestCase() { windowManager, viewUtil, FakeExecutor(FakeSystemClock()), + accessibilityManager, TapGestureDetector(context), powerManager, Handler.getMain(), 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 a8c72ddfd5d72..7ca0cd34ab265 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 @@ -27,6 +27,7 @@ import android.testing.TestableLooper import android.view.View import android.view.ViewGroup import android.view.WindowManager +import android.view.accessibility.AccessibilityManager import android.widget.ImageView import android.widget.TextView import androidx.test.filters.SmallTest @@ -67,6 +68,8 @@ class MediaTttChipControllerSenderTest : SysuiTestCase() { @Mock private lateinit var logger: MediaTttLogger @Mock + private lateinit var accessibilityManager: AccessibilityManager + @Mock private lateinit var powerManager: PowerManager @Mock private lateinit var windowManager: WindowManager @@ -95,9 +98,12 @@ class MediaTttChipControllerSenderTest : SysuiTestCase() { fakeClock = FakeSystemClock() fakeExecutor = FakeExecutor(fakeClock) + uiEventLoggerFake = UiEventLoggerFake() senderUiEventLogger = MediaTttSenderUiEventLogger(uiEventLoggerFake) + whenever(accessibilityManager.getRecommendedTimeoutMillis(any(), any())).thenReturn(TIMEOUT) + controllerSender = MediaTttChipControllerSender( commandQueue, context, @@ -105,6 +111,7 @@ class MediaTttChipControllerSenderTest : SysuiTestCase() { windowManager, viewUtil, fakeExecutor, + accessibilityManager, TapGestureDetector(context), powerManager, senderUiEventLogger @@ -592,7 +599,7 @@ class MediaTttChipControllerSenderTest : SysuiTestCase() { fakeClock.advanceTime(1000L) controllerSender.removeChip("fakeRemovalReason") - fakeClock.advanceTime(state.state.timeout + 1) + fakeClock.advanceTime(TIMEOUT + 1L) verify(windowManager).removeView(any()) } @@ -615,7 +622,7 @@ class MediaTttChipControllerSenderTest : SysuiTestCase() { fakeClock.advanceTime(1000L) controllerSender.removeChip("fakeRemovalReason") - fakeClock.advanceTime(state.state.timeout + 1) + fakeClock.advanceTime(TIMEOUT + 1L) verify(windowManager).removeView(any()) } @@ -674,6 +681,7 @@ class MediaTttChipControllerSenderTest : SysuiTestCase() { private const val APP_NAME = "Fake app name" private const val OTHER_DEVICE_NAME = "My Tablet" private const val PACKAGE_NAME = "com.android.systemui" +private const val TIMEOUT = 10000 private val routeInfo = MediaRoute2Info.Builder("id", OTHER_DEVICE_NAME) .addFeature("feature")