summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Wale Ogunwale <ogunwale@google.com> 2017-05-01 21:32:58 -0700
committer Wale Ogunwale <ogunwale@google.com> 2017-05-02 22:02:49 +0000
commit42f07d9fd4723bcdf1c024f94da4e0bde1451e4f (patch)
tree937de3657d2d3c987958d9ea7f99b34dc13a2334
parent4794cbf57415798628ce004b9d79437d03ecc0cd (diff)
Skip Pip animation to fullscreen if orientation is going to change
Having this kind of animation look good is extremely difficult. The best we can do is skip the animation and just go to fullscreen if we know the device orientation is going to change because the current screen configuration isn't compatible with the fixed orientation requested by the app going fullscreen. Change-Id: I97b14723a0d678c05efedc93fe692ad3b3212a72 Fixes: 37722472 Test: manual
-rw-r--r--services/core/java/com/android/server/am/ActivityRecord.java2
-rw-r--r--services/core/java/com/android/server/am/ActivityStack.java20
-rw-r--r--services/core/java/com/android/server/am/PinnedActivityStack.java18
3 files changed, 34 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index 44caaf954d97..18c8b322496c 100644
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -2278,7 +2278,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo
}
/** Returns true if the configuration is compatible with this activity. */
- private boolean isConfigurationCompatible(Configuration config) {
+ boolean isConfigurationCompatible(Configuration config) {
final int orientation = mWindowContainerController != null
? mWindowContainerController.getOrientation() : info.screenOrientation;
if (isFixedOrientationPortrait(orientation)
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 39fef4407f0b..912b22c84946 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -655,11 +655,11 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
}
}
- final ActivityRecord topRunningActivityLocked() {
+ ActivityRecord topRunningActivityLocked() {
return topRunningActivityLocked(false /* focusableOnly */);
}
- final ActivityRecord topRunningActivityLocked(boolean focusableOnly) {
+ private ActivityRecord topRunningActivityLocked(boolean focusableOnly) {
for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
ActivityRecord r = mTaskHistory.get(taskNdx).topRunningActivityLocked();
if (r != null && (!focusableOnly || r.isFocusable())) {
@@ -669,7 +669,21 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
return null;
}
- final ActivityRecord topRunningNonDelayedActivityLocked(ActivityRecord notTop) {
+ ActivityRecord topRunningNonOverlayTaskActivity() {
+ for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
+ final TaskRecord task = mTaskHistory.get(taskNdx);
+ final ArrayList<ActivityRecord> activities = task.mActivities;
+ for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) {
+ final ActivityRecord r = activities.get(activityNdx);
+ if (!r.finishing && !r.mTaskOverlay) {
+ return r;
+ }
+ }
+ }
+ return null;
+ }
+
+ ActivityRecord topRunningNonDelayedActivityLocked(ActivityRecord notTop) {
for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
final TaskRecord task = mTaskHistory.get(taskNdx);
final ArrayList<ActivityRecord> activities = task.mActivities;
diff --git a/services/core/java/com/android/server/am/PinnedActivityStack.java b/services/core/java/com/android/server/am/PinnedActivityStack.java
index 672f563d17ca..34cdb54d0b76 100644
--- a/services/core/java/com/android/server/am/PinnedActivityStack.java
+++ b/services/core/java/com/android/server/am/PinnedActivityStack.java
@@ -17,6 +17,7 @@
package com.android.server.am;
import android.app.RemoteAction;
+import android.content.res.Configuration;
import android.graphics.Rect;
import com.android.server.am.ActivityStackSupervisor.ActivityContainer;
@@ -50,8 +51,21 @@ class PinnedActivityStack extends ActivityStack<PinnedStackWindowController>
void animateResizePinnedStack(Rect sourceHintBounds, Rect toBounds, int animationDuration,
boolean schedulePipModeChangedOnAnimationEnd) {
- getWindowContainerController().animateResizePinnedStack(toBounds, sourceHintBounds,
- animationDuration, schedulePipModeChangedOnAnimationEnd);
+ if (skipResizeAnimation(toBounds == null /* toFullscreen */)) {
+ mService.moveTasksToFullscreenStack(mStackId, true /* onTop */);
+ } else {
+ getWindowContainerController().animateResizePinnedStack(toBounds, sourceHintBounds,
+ animationDuration, schedulePipModeChangedOnAnimationEnd);
+ }
+ }
+
+ private boolean skipResizeAnimation(boolean toFullscreen) {
+ if (!toFullscreen) {
+ return false;
+ }
+ final Configuration parentConfig = getParent().getConfiguration();
+ final ActivityRecord top = topRunningNonOverlayTaskActivity();
+ return top != null && !top.isConfigurationCompatible(parentConfig);
}
void setPictureInPictureAspectRatio(float aspectRatio) {