Merge "[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." into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
f38fba3e92
@@ -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