Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9cf56c8a authored by Anton Potapov's avatar Anton Potapov Committed by Android (Google) Code Review
Browse files

Merge "Fix volume dialog a11y show timeout" into main

parents 7c81533d bb4249ba
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -17,16 +17,17 @@
package com.android.systemui.volume.dialog.domain.interactor

import android.app.ActivityManager
import android.testing.TestableLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.accessibility.data.repository.accessibilityRepository
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testScope
import com.android.systemui.plugins.fakeVolumeDialogController
import com.android.systemui.testKosmos
import com.android.systemui.volume.Events
import com.android.systemui.volume.dialog.shared.model.VolumeDialogSafetyWarningModel
import com.android.systemui.volume.dialog.shared.model.VolumeDialogVisibilityModel
import com.google.common.truth.Truth.assertThat
import kotlin.time.Duration.Companion.days
@@ -34,7 +35,6 @@ import kotlin.time.Duration.Companion.seconds
import kotlinx.coroutines.test.advanceTimeBy
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith

@@ -42,18 +42,19 @@ private val dialogTimeoutDuration = 3.seconds

@SmallTest
@RunWith(AndroidJUnit4::class)
@TestableLooper.RunWithLooper
@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
class VolumeDialogVisibilityInteractorTest : SysuiTestCase() {

    private val kosmos: Kosmos = testKosmos()

    private lateinit var underTest: VolumeDialogVisibilityInteractor

    @Before
    fun setUp() {
        underTest = kosmos.volumeDialogVisibilityInteractor
    private val kosmos: Kosmos =
        testKosmos().apply {
            accessibilityRepository.setRecommendedTimeout(dialogTimeoutDuration)
            volumeDialogStateInteractor.setHovering(false)
            volumeDialogStateInteractor.setSafetyWarning(VolumeDialogSafetyWarningModel.Invisible)
        }

    private val underTest: VolumeDialogVisibilityInteractor =
        kosmos.volumeDialogVisibilityInteractor

    @Test
    fun testShowRequest_visible() =
        with(kosmos) {
@@ -92,6 +93,7 @@ class VolumeDialogVisibilityInteractorTest : SysuiTestCase() {
                runCurrent()

                fakeVolumeDialogController.onDismissRequested(Events.DISMISS_REASON_SCREEN_OFF)
                runCurrent()

                assertThat(visibilityModel!!)
                    .isEqualTo(
@@ -105,7 +107,6 @@ class VolumeDialogVisibilityInteractorTest : SysuiTestCase() {
        with(kosmos) {
            testScope.runTest {
                runCurrent()
                underTest.resetDismissTimeout()
                val visibilityModel by collectLastValue(underTest.dialogVisibility)
                fakeVolumeDialogController.onShowRequested(
                    Events.SHOW_REASON_VOLUME_CHANGED,
@@ -126,7 +127,6 @@ class VolumeDialogVisibilityInteractorTest : SysuiTestCase() {
        with(kosmos) {
            testScope.runTest {
                runCurrent()
                underTest.resetDismissTimeout()
                val visibilityModel by collectLastValue(underTest.dialogVisibility)
                fakeVolumeDialogController.onShowRequested(
                    Events.SHOW_REASON_VOLUME_CHANGED,
+5 −10
Original line number Diff line number Diff line
@@ -17,10 +17,10 @@
package com.android.systemui.volume.dialog.sliders.domain.interactor

import android.app.ActivityManager
import android.testing.TestableLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.accessibility.data.repository.accessibilityRepository
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.testScope
import com.android.systemui.plugins.fakeVolumeDialogController
@@ -35,24 +35,19 @@ import kotlin.time.Duration.Companion.seconds
import kotlinx.coroutines.test.advanceTimeBy
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.runner.RunWith

private val volumeDialogTimeout = 3.seconds

@SmallTest
@RunWith(AndroidJUnit4::class)
@TestableLooper.RunWithLooper
class VolumeDialogSliderInputEventsInteractorTest : SysuiTestCase() {

    private val kosmos = testKosmos()
    private val kosmos =
        testKosmos().apply { accessibilityRepository.setRecommendedTimeout(volumeDialogTimeout) }

    private lateinit var underTest: VolumeDialogSliderInputEventsInteractor

    @Before
    fun setup() {
        underTest = kosmos.volumeDialogSliderInputEventsInteractor
    }
    private val underTest: VolumeDialogSliderInputEventsInteractor =
        kosmos.volumeDialogSliderInputEventsInteractor

    @Test
    fun inputEvents_resetDialogVisibilityTimeout() =
+0 −1
Original line number Diff line number Diff line
@@ -557,7 +557,6 @@
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:showWhenLocked">true</item>
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowNoTitle">true</item>
+12 −3
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import com.android.app.tracing.FlowTracing.tracedAwaitClose
import com.android.app.tracing.FlowTracing.tracedConflatedCallbackFlow
import dagger.Module
import dagger.Provides
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.distinctUntilChanged

@@ -32,6 +34,8 @@ interface AccessibilityRepository {
    /** @see [AccessibilityManager.isEnabled] */
    val isEnabled: Flow<Boolean>

    fun getRecommendedTimeout(originalTimeout: Duration, uiFlags: Int): Duration

    companion object {
        operator fun invoke(a11yManager: AccessibilityManager): AccessibilityRepository =
            AccessibilityRepositoryImpl(a11yManager)
@@ -40,9 +44,8 @@ interface AccessibilityRepository {

private const val TAG = "AccessibilityRepository"

private class AccessibilityRepositoryImpl(
    manager: AccessibilityManager,
) : AccessibilityRepository {
private class AccessibilityRepositoryImpl(private val manager: AccessibilityManager) :
    AccessibilityRepository {
    override val isTouchExplorationEnabled: Flow<Boolean> =
        tracedConflatedCallbackFlow(TAG) {
                val listener = TouchExplorationStateChangeListener(::trySend)
@@ -62,6 +65,12 @@ private class AccessibilityRepositoryImpl(
                tracedAwaitClose(TAG) { manager.removeAccessibilityStateChangeListener(listener) }
            }
            .distinctUntilChanged()

    override fun getRecommendedTimeout(originalTimeout: Duration, uiFlags: Int): Duration {
        return manager
            .getRecommendedTimeoutMillis(originalTimeout.inWholeMilliseconds.toInt(), uiFlags)
            .milliseconds
    }
}

@Module
+0 −3
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.systemui.volume.dialog

import android.content.Context
import android.graphics.PixelFormat
import android.os.Bundle
import android.view.MotionEvent
import android.view.View
@@ -51,10 +50,8 @@ constructor(
                    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
            )
            addPrivateFlags(WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY)

            setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY)
            setWindowAnimations(-1)
            setFormat(PixelFormat.TRANSLUCENT)

            attributes =
                attributes.apply {
Loading