Merge "Don't defer app transition if one of activity isn't one of recents." into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
879b9a8549
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user