diff options
7 files changed, 105 insertions, 19 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java index a8da1160c503..03bd9f8f27be 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java @@ -155,7 +155,6 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase { mColorExtractor, mDumpManager, mKeyguardStateController, - mKosmos.getScreenOffAnimationController(), mAuthController, mKosmos::getShadeInteractor, mShadeWindowLogger, diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java index 8b7e11c4ab47..4a636d28aa88 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java @@ -68,7 +68,6 @@ import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.KeyguardBypassController; -import com.android.systemui.statusbar.phone.ScreenOffAnimationController; import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.phone.StatusBarWindowCallback; import com.android.systemui.statusbar.policy.ConfigurationController; @@ -131,7 +130,6 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW mCallbacks = new ArrayList<>(); private final SysuiColorExtractor mColorExtractor; - private final ScreenOffAnimationController mScreenOffAnimationController; /** * Layout params would be aggregated and dispatched all at once if this is > 0. * @@ -159,7 +157,6 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW SysuiColorExtractor colorExtractor, DumpManager dumpManager, KeyguardStateController keyguardStateController, - ScreenOffAnimationController screenOffAnimationController, AuthController authController, Lazy<ShadeInteractor> shadeInteractorLazy, ShadeWindowLogger logger, @@ -179,7 +176,6 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW mKeyguardBypassController = keyguardBypassController; mBackgroundExecutor = backgroundExecutor; mColorExtractor = colorExtractor; - mScreenOffAnimationController = screenOffAnimationController; // prefix with {slow} to make sure this dumps at the END of the critical section. dumpManager.registerCriticalDumpable("{slow}NotificationShadeWindowControllerImpl", this); mAuthController = authController; @@ -441,14 +437,8 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW private void applyFocusableFlag(NotificationShadeWindowState state) { boolean panelFocusable = state.notificationShadeFocusable && state.shadeOrQsExpanded; if (state.bouncerShowing && (state.keyguardOccluded || state.keyguardNeedsInput) - || ENABLE_REMOTE_INPUT && state.remoteInputActive - // Make the panel focusable if we're doing the screen off animation, since the light - // reveal scrim is drawing in the panel and should consume touch events so that they - // don't go to the app behind. - || mScreenOffAnimationController.shouldIgnoreKeyguardTouches()) { - mLpChanged.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE; - mLpChanged.flags &= ~LayoutParams.FLAG_ALT_FOCUSABLE_IM; - } else if (state.glanceableHubShowing) { + || (ENABLE_REMOTE_INPUT && state.remoteInputActive) + || state.glanceableHubShowing) { mLpChanged.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE; mLpChanged.flags &= ~LayoutParams.FLAG_ALT_FOCUSABLE_IM; } else if (state.isKeyguardShowingAndNotOccluded() || panelFocusable) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java index 709f7797d2bf..8aea2f16734e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java @@ -262,7 +262,6 @@ public class KeyguardViewMediatorTest extends SysuiTestCase { mColorExtractor, mDumpManager, mKeyguardStateController, - mScreenOffAnimationController, mAuthController, () -> mShadeInteractor, mShadeWindowLogger, diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java index d9a0c4be04ff..18b1705a5f90 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java @@ -338,8 +338,6 @@ public class BubblesTest extends SysuiTestCase { @Mock private KeyguardStateController mKeyguardStateController; @Mock - private ScreenOffAnimationController mScreenOffAnimationController; - @Mock Transitions mTransitions; @Mock private Optional<OneHandedController> mOneHandedOptional; @@ -491,7 +489,6 @@ public class BubblesTest extends SysuiTestCase { mColorExtractor, mDumpManager, mKeyguardStateController, - mScreenOffAnimationController, mAuthController, () -> mShadeInteractor, mShadeWindowLogger, diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt index d4b793720328..a81ac038b38a 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt @@ -56,7 +56,6 @@ import com.android.systemui.shade.data.repository.shadeRepository import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.shadeController import com.android.systemui.statusbar.notification.stack.domain.interactor.sharedNotificationContainerInteractor -import com.android.systemui.statusbar.phone.screenOffAnimationController import com.android.systemui.statusbar.pipeline.mobile.data.repository.fakeMobileConnectionsRepository import com.android.systemui.statusbar.policy.data.repository.fakeDeviceProvisioningRepository import com.android.systemui.statusbar.policy.domain.interactor.deviceProvisioningInteractor @@ -90,7 +89,6 @@ class KosmosJavaAdapter( val simBouncerInteractor by lazy { kosmos.simBouncerInteractor } val statusBarStateController by lazy { kosmos.statusBarStateController } val interactionJankMonitor by lazy { kosmos.interactionJankMonitor } - val screenOffAnimationController by lazy { kosmos.screenOffAnimationController } val fakeSceneContainerConfig by lazy { kosmos.sceneContainerConfig } val sceneInteractor by lazy { kosmos.sceneInteractor } val falsingCollector by lazy { kosmos.falsingCollector } diff --git a/tests/FlickerTests/IME/AndroidTestTemplate.xml b/tests/FlickerTests/IME/AndroidTestTemplate.xml index 988f76f4175c..38442db699f8 100644 --- a/tests/FlickerTests/IME/AndroidTestTemplate.xml +++ b/tests/FlickerTests/IME/AndroidTestTemplate.xml @@ -10,6 +10,8 @@ <target_preparer class="com.android.tradefed.targetprep.DeviceSetup"> <!-- keeps the screen on during tests --> <option name="screen-always-on" value="on"/> + <!-- enable AOD --> + <option name="set-secure-setting" key="doze_always_on" value="1" /> <!-- prevents the phone from restarting --> <option name="force-skip-system-props" value="true"/> <!-- set WM tracing verbose level to all --> diff --git a/tests/FlickerTests/IME/src/com/android/server/wm/flicker/ime/ShowImeOnUnlockScreenTest.kt b/tests/FlickerTests/IME/src/com/android/server/wm/flicker/ime/ShowImeOnUnlockScreenTest.kt new file mode 100644 index 000000000000..31506b5eabf0 --- /dev/null +++ b/tests/FlickerTests/IME/src/com/android/server/wm/flicker/ime/ShowImeOnUnlockScreenTest.kt @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.wm.flicker.ime + +import android.platform.test.annotations.Presubmit +import android.platform.test.rule.UnlockScreenRule +import android.tools.Rotation +import android.tools.flicker.junit.FlickerParametersRunnerFactory +import android.tools.flicker.legacy.FlickerBuilder +import android.tools.flicker.legacy.LegacyFlickerTest +import android.tools.flicker.legacy.LegacyFlickerTestFactory +import android.tools.traces.component.ComponentNameMatcher +import com.android.server.wm.flicker.BaseTest +import com.android.server.wm.flicker.helpers.ImeAppHelper +import org.junit.FixMethodOrder +import org.junit.Ignore +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.MethodSorters +import org.junit.runners.Parameterized + +/** + * Test IME window closing on lock and opening on screen unlock. To run this test: `atest + * FlickerTests:CloseImeWindowToHomeTest` + */ +@RunWith(Parameterized::class) +@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +class ShowImeOnUnlockScreenTest(flicker: LegacyFlickerTest) : BaseTest(flicker) { + private val testApp = ImeAppHelper(instrumentation) + private val imeOrSnapshot = ComponentNameMatcher.IME.or(ComponentNameMatcher.IME_SNAPSHOT) + + /** {@inheritDoc} */ + override val transition: FlickerBuilder.() -> Unit = { + setup { + tapl.expectedRotationCheckEnabled = false + testApp.launchViaIntent(wmHelper) + testApp.openIME(wmHelper) + } + transitions { + device.sleep() + wmHelper.StateSyncBuilder().withoutTopVisibleAppWindows().waitForAndVerify() + UnlockScreenRule.unlockScreen(device) + wmHelper.StateSyncBuilder().withImeShown().waitForAndVerify() + } + teardown { testApp.exit(wmHelper) } + } + + @Presubmit + @Test + fun imeAndAppAnimateTogetherWhenLockingAndUnlocking() { + flicker.assertLayers { + this.isVisible(testApp) + .isVisible(imeOrSnapshot) + .then() + .isInvisible(testApp) + .isInvisible(imeOrSnapshot) + .then() + .isVisible(testApp) + .isVisible(imeOrSnapshot) + } + } + + /** {@inheritDoc} */ + @Test + @Ignore("Not applicable to this CUJ. Display turns off during transition") + override fun navBarWindowIsAlwaysVisible() {} + + /** {@inheritDoc} */ + @Test + @Ignore("Not applicable to this CUJ. Display turns off during transition") + override fun statusBarWindowIsAlwaysVisible() {} + + /** {@inheritDoc} */ + @Test + @Ignore("Not applicable to this CUJ. Display turns off during transition") + override fun taskBarWindowIsAlwaysVisible() {} + + companion object { + @Parameterized.Parameters(name = "{0}") + @JvmStatic + fun getParams() = + LegacyFlickerTestFactory.nonRotationTests( + supportedRotations = listOf(Rotation.ROTATION_0) + ) + } +} |