Merge "Don't defer app transition if one of activity isn't one of recents." into tm-qpr-dev

This commit is contained in:
Wei Sheng Shih
2023-02-15 07:15:27 +00:00
committed by Android (Google) Code Review

View File

@@ -181,6 +181,42 @@ public class AppTransitionController {
|| !transitionGoodToGoForTaskFragments()) { || !transitionGoodToGoForTaskFragments()) {
return; return;
} }
final boolean isRecentsInOpening = mDisplayContent.mOpeningApps.stream().anyMatch(
ConfigurationContainer::isActivityTypeRecents);
// In order to avoid visual clutter caused by a conflict between app transition
// animation and recents animation, app transition is delayed until recents finishes.
// One exceptional case. When 3P launcher is used and a user taps a task screenshot in
// task switcher (isRecentsInOpening=true), app transition must start even though
// recents is running. Otherwise app transition is blocked until timeout (b/232984498).
// When 1P launcher is used, this animation is controlled by the launcher outside of
// the app transition, so delaying app transition doesn't cause visible delay. After
// recents finishes, app transition is handled just to commit visibility on apps.
if (!isRecentsInOpening) {
final ArraySet<WindowContainer> participants = new ArraySet<>();
participants.addAll(mDisplayContent.mOpeningApps);
participants.addAll(mDisplayContent.mChangingContainers);
boolean deferForRecents = false;
for (int i = 0; i < participants.size(); i++) {
WindowContainer wc = participants.valueAt(i);
final ActivityRecord activity = getAppFromContainer(wc);
if (activity == null) {
continue;
}
// Don't defer recents animation if one of activity isn't running for it, that one
// might be started from quickstep.
if (!activity.isAnimating(PARENTS, ANIMATION_TYPE_RECENTS)) {
deferForRecents = false;
break;
}
deferForRecents = true;
}
if (deferForRecents) {
ProtoLog.v(WM_DEBUG_APP_TRANSITIONS,
"Delaying app transition for recents animation to finish");
return;
}
}
Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "AppTransitionReady"); Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "AppTransitionReady");
ProtoLog.v(WM_DEBUG_APP_TRANSITIONS, "**** GOOD TO GO"); ProtoLog.v(WM_DEBUG_APP_TRANSITIONS, "**** GOOD TO GO");
@@ -1249,27 +1285,12 @@ public class AppTransitionController {
"Delaying app transition for screen rotation animation to finish"); "Delaying app transition for screen rotation animation to finish");
return false; return false;
} }
final boolean isRecentsInOpening = mDisplayContent.mOpeningApps.stream().anyMatch(
ConfigurationContainer::isActivityTypeRecents);
for (int i = 0; i < apps.size(); i++) { for (int i = 0; i < apps.size(); i++) {
WindowContainer wc = apps.valueAt(i); WindowContainer wc = apps.valueAt(i);
final ActivityRecord activity = getAppFromContainer(wc); final ActivityRecord activity = getAppFromContainer(wc);
if (activity == null) { if (activity == null) {
continue; continue;
} }
// In order to avoid visual clutter caused by a conflict between app transition
// animation and recents animation, app transition is delayed until recents finishes.
// One exceptional case. When 3P launcher is used and a user taps a task screenshot in
// task switcher (isRecentsInOpening=true), app transition must start even though
// recents is running. Otherwise app transition is blocked until timeout (b/232984498).
// When 1P launcher is used, this animation is controlled by the launcher outside of
// the app transition, so delaying app transition doesn't cause visible delay. After
// recents finishes, app transition is handled just to commit visibility on apps.
if (!isRecentsInOpening && activity.isAnimating(PARENTS, ANIMATION_TYPE_RECENTS)) {
ProtoLog.v(WM_DEBUG_APP_TRANSITIONS,
"Delaying app transition for recents animation to finish");
return false;
}
ProtoLog.v(WM_DEBUG_APP_TRANSITIONS, ProtoLog.v(WM_DEBUG_APP_TRANSITIONS,
"Check opening app=%s: allDrawn=%b startingDisplayed=%b " "Check opening app=%s: allDrawn=%b startingDisplayed=%b "
+ "startingMoved=%b isRelaunching()=%b startingWindow=%s", + "startingMoved=%b isRelaunching()=%b startingWindow=%s",