[Media TTT] Update timeout to take accessibility settings into account.
This will extend the timeout for the chip to at least 10s if a11y is on, or longer if the user has it set to longer. Also update the default timeout to 4s to make it a bit longer. Fixes: 229558433 Test: manual Test: media.taptotransfer tests Change-Id: I65110c83009c883b5107cf9eb3f46f4db3eba728
This commit is contained in:
@@ -27,4 +27,4 @@ interface ChipInfoCommon {
|
||||
fun getTimeoutMs(): Long
|
||||
}
|
||||
|
||||
const val DEFAULT_TIMEOUT_MILLIS = 3000L
|
||||
const val DEFAULT_TIMEOUT_MILLIS = 4000L
|
||||
|
||||
@@ -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<T : ChipInfoCommon>(
|
||||
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<T : ChipInfoCommon>(
|
||||
}
|
||||
|
||||
// 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()
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<ChipInfo>(
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user