Fix jank when app launched from quick panels on the lock screen

Bug: 209035016
Test: atest AppTransitionTests
Change-Id: Ifb0b41345729afc94e2c9bbbf828db80bf7858f7
This commit is contained in:
Issei Suzuki
2021-12-03 20:50:11 +01:00
parent 4003a0d744
commit c03130ab6f
2 changed files with 32 additions and 12 deletions

View File

@@ -1634,21 +1634,21 @@ public class AppTransition implements Dump {
}
@TransitionType int getKeyguardTransition() {
// In case we unocclude Keyguard and occlude it again, meaning that we never actually
// unoccclude/occlude Keyguard, but just run a normal transition.
final int occludeIndex = mNextAppTransitionRequests.indexOf(TRANSIT_KEYGUARD_UNOCCLUDE);
if (occludeIndex != -1
&& occludeIndex < mNextAppTransitionRequests.indexOf(TRANSIT_KEYGUARD_OCCLUDE)) {
if (mNextAppTransitionRequests.indexOf(TRANSIT_KEYGUARD_GOING_AWAY) != -1) {
return TRANSIT_KEYGUARD_GOING_AWAY;
}
final int unoccludeIndex = mNextAppTransitionRequests.indexOf(TRANSIT_KEYGUARD_UNOCCLUDE);
final int occludeIndex = mNextAppTransitionRequests.indexOf(TRANSIT_KEYGUARD_OCCLUDE);
// No keyguard related transition requests.
if (unoccludeIndex == -1 && occludeIndex == -1) {
return TRANSIT_NONE;
}
for (int i = 0; i < mNextAppTransitionRequests.size(); ++i) {
final @TransitionType int transit = mNextAppTransitionRequests.get(i);
if (isKeyguardTransit(transit)) {
return transit;
}
// In case we unocclude Keyguard and occlude it again, meaning that we never actually
// unoccclude/occlude Keyguard, but just run a normal transition.
if (unoccludeIndex != -1 && unoccludeIndex < occludeIndex) {
return TRANSIT_NONE;
}
return TRANSIT_NONE;
return unoccludeIndex != -1 ? TRANSIT_KEYGUARD_UNOCCLUDE : TRANSIT_KEYGUARD_OCCLUDE;
}
@TransitionType int getFirstAppTransition() {

View File

@@ -22,6 +22,9 @@ import static android.view.WindowManager.TRANSIT_CHANGE;
import static android.view.WindowManager.TRANSIT_CLOSE;
import static android.view.WindowManager.TRANSIT_FLAG_APP_CRASHED;
import static android.view.WindowManager.TRANSIT_KEYGUARD_GOING_AWAY;
import static android.view.WindowManager.TRANSIT_KEYGUARD_OCCLUDE;
import static android.view.WindowManager.TRANSIT_KEYGUARD_UNOCCLUDE;
import static android.view.WindowManager.TRANSIT_NONE;
import static android.view.WindowManager.TRANSIT_OLD_CRASHING_ACTIVITY_CLOSE;
import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY;
import static android.view.WindowManager.TRANSIT_OLD_TASK_CHANGE_WINDOWING_MODE;
@@ -92,6 +95,7 @@ public class AppTransitionTests extends WindowTestsBase {
final ActivityRecord activity = createActivityRecord(dc);
mDc.prepareAppTransition(TRANSIT_OPEN);
mDc.prepareAppTransition(TRANSIT_KEYGUARD_OCCLUDE);
mDc.prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY);
mDc.mOpeningApps.add(activity);
assertEquals(TRANSIT_OLD_KEYGUARD_GOING_AWAY,
@@ -101,6 +105,22 @@ public class AppTransitionTests extends WindowTestsBase {
null /* oldWallpaper */, false /*skipAppTransitionAnimation*/));
}
@Test
public void testKeyguardUnoccludeOcclude() {
final DisplayContent dc = createNewDisplay(Display.STATE_ON);
final ActivityRecord activity = createActivityRecord(dc);
mDc.prepareAppTransition(TRANSIT_KEYGUARD_UNOCCLUDE);
mDc.prepareAppTransition(TRANSIT_KEYGUARD_OCCLUDE);
mDc.mOpeningApps.add(activity);
assertEquals(TRANSIT_NONE,
AppTransitionController.getTransitCompatType(mDc.mAppTransition,
mDisplayContent.mOpeningApps, mDisplayContent.mClosingApps,
mDisplayContent.mChangingContainers, null /* wallpaperTarget */,
null /* oldWallpaper */, false /*skipAppTransitionAnimation*/));
}
@Test
public void testKeyguardKeep() {
final DisplayContent dc = createNewDisplay(Display.STATE_ON);