Merge "Detect "expand to fullscreen" over recents and switch to it" into tm-dev
This commit is contained in:
@@ -40,4 +40,14 @@ public interface RecentsAnimationListener {
|
|||||||
* was running becomes ready for control.
|
* was running becomes ready for control.
|
||||||
*/
|
*/
|
||||||
void onTasksAppeared(RemoteAnimationTargetCompat[] app);
|
void onTasksAppeared(RemoteAnimationTargetCompat[] app);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called to request that the current task tile be switched out for a screenshot (if not
|
||||||
|
* already). Once complete, onFinished should be called.
|
||||||
|
* @return true if this impl will call onFinished. No other onSwitchToScreenshot impls will
|
||||||
|
* be called afterwards (to avoid multiple calls to onFinished).
|
||||||
|
*/
|
||||||
|
default boolean onSwitchToScreenshot(Runnable onFinished) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package com.android.systemui.shared.system;
|
|||||||
|
|
||||||
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
|
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
|
||||||
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
|
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
|
||||||
|
import static android.view.WindowManager.TRANSIT_CHANGE;
|
||||||
import static android.view.WindowManager.TRANSIT_CLOSE;
|
import static android.view.WindowManager.TRANSIT_CLOSE;
|
||||||
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
|
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
|
||||||
import static android.view.WindowManager.TRANSIT_OPEN;
|
import static android.view.WindowManager.TRANSIT_OPEN;
|
||||||
@@ -244,6 +245,8 @@ public class RemoteTransitionCompat implements Parcelable {
|
|||||||
RecentsAnimationListener recents) {
|
RecentsAnimationListener recents) {
|
||||||
ArrayList<TransitionInfo.Change> openingTasks = null;
|
ArrayList<TransitionInfo.Change> openingTasks = null;
|
||||||
boolean cancelRecents = false;
|
boolean cancelRecents = false;
|
||||||
|
boolean homeGoingAway = false;
|
||||||
|
boolean hasChangingApp = false;
|
||||||
for (int i = info.getChanges().size() - 1; i >= 0; --i) {
|
for (int i = info.getChanges().size() - 1; i >= 0; --i) {
|
||||||
final TransitionInfo.Change change = info.getChanges().get(i);
|
final TransitionInfo.Change change = info.getChanges().get(i);
|
||||||
if (change.getMode() == TRANSIT_OPEN || change.getMode() == TRANSIT_TO_FRONT) {
|
if (change.getMode() == TRANSIT_OPEN || change.getMode() == TRANSIT_TO_FRONT) {
|
||||||
@@ -257,7 +260,27 @@ public class RemoteTransitionCompat implements Parcelable {
|
|||||||
}
|
}
|
||||||
openingTasks.add(change);
|
openingTasks.add(change);
|
||||||
}
|
}
|
||||||
|
} else if (change.getMode() == TRANSIT_CLOSE
|
||||||
|
|| change.getMode() == TRANSIT_TO_BACK) {
|
||||||
|
if (mRecentsTask.equals(change.getContainer())) {
|
||||||
|
homeGoingAway = true;
|
||||||
}
|
}
|
||||||
|
} else if (change.getMode() == TRANSIT_CHANGE) {
|
||||||
|
hasChangingApp = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hasChangingApp && homeGoingAway) {
|
||||||
|
// This happens when a visible app is expanding (usually PiP). In this case,
|
||||||
|
// The transition probably has a special-purpose animation, so finish recents
|
||||||
|
// now and let it do its animation (since recents is going to be occluded).
|
||||||
|
if (!recents.onSwitchToScreenshot(() -> {
|
||||||
|
finish(true /* toHome */, false /* userLeaveHint */);
|
||||||
|
})) {
|
||||||
|
Log.w(TAG, "Recents callback doesn't support support switching to screenshot"
|
||||||
|
+ ", there might be a flicker.");
|
||||||
|
finish(true /* toHome */, false /* userLeaveHint */);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
if (openingTasks == null) return false;
|
if (openingTasks == null) return false;
|
||||||
int pauseMatches = 0;
|
int pauseMatches = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user