Merge "Using the split screen secondory bounds returned by SystemUIProxy" into ub-launcher3-edmonton
diff --git a/quickstep/libs/sysui_shared.jar b/quickstep/libs/sysui_shared.jar
index 0adc83a..13f41ee 100644
--- a/quickstep/libs/sysui_shared.jar
+++ b/quickstep/libs/sysui_shared.jar
Binary files differ
diff --git a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
index ab350e4..bd1cdc6 100644
--- a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
+++ b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
@@ -190,7 +190,7 @@
}
});
}
- anim.play(getWindowAnimators(v, targetCompats));
+ anim.play(getOpeningWindowAnimators(v, targetCompats));
}
if (launcherClosing) {
@@ -454,7 +454,7 @@
/**
* @return Animator that controls the window of the opening targets.
*/
- private ValueAnimator getWindowAnimators(View v, RemoteAnimationTargetCompat[] targets) {
+ private ValueAnimator getOpeningWindowAnimators(View v, RemoteAnimationTargetCompat[] targets) {
Rect bounds = new Rect();
if (v.getParent() instanceof DeepShortcutView) {
// Deep shortcut views have their icon drawn in a separate view.
@@ -475,7 +475,6 @@
appAnimator.addUpdateListener(new MultiValueUpdateListener() {
// Fade alpha for the app window.
FloatProp mAlpha = new FloatProp(0f, 1f, 0, 60, LINEAR);
-
boolean isFirstFrame = true;
@Override
@@ -522,6 +521,10 @@
crop.bottom = (int) (crop.top + cropHeight);
TransactionCompat t = new TransactionCompat();
+ if (isFirstFrame) {
+ RemoteAnimationProvider.prepareTargetsForFirstFrame(targets, t, MODE_OPENING);
+ isFirstFrame = false;
+ }
for (RemoteAnimationTargetCompat target : targets) {
if (target.mode == MODE_OPENING) {
t.setAlpha(target.leash, mAlpha.value);
@@ -533,15 +536,10 @@
t.setWindowCrop(target.leash, crop);
t.deferTransactionUntil(target.leash, surface, getNextFrameNumber(surface));
}
- if (isFirstFrame) {
- t.show(target.leash);
- }
}
- t.setEarlyWakeup();
t.apply();
matrix.reset();
- isFirstFrame = false;
}
});
return appAnimator;
@@ -638,6 +636,10 @@
@Override
public void onUpdate(float percent) {
TransactionCompat t = new TransactionCompat();
+ if (isFirstFrame) {
+ RemoteAnimationProvider.prepareTargetsForFirstFrame(targets, t, MODE_CLOSING);
+ isFirstFrame = false;
+ }
for (RemoteAnimationTargetCompat app : targets) {
if (app.mode == RemoteAnimationTargetCompat.MODE_CLOSING) {
t.setAlpha(app.leash, mAlpha.value);
@@ -648,19 +650,10 @@
matrix.postTranslate(app.position.x, app.position.y);
t.setMatrix(app.leash, matrix);
}
- if (isFirstFrame) {
- int layer = app.mode == RemoteAnimationTargetCompat.MODE_CLOSING
- ? Integer.MAX_VALUE
- : app.prefixOrderIndex;
- t.setLayer(app.leash, layer);
- t.show(app.leash);
- }
}
- t.setEarlyWakeup();
t.apply();
matrix.reset();
- isFirstFrame = false;
}
});
diff --git a/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java b/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java
index f7e45d3..6ce9372 100644
--- a/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java
+++ b/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java
@@ -22,7 +22,6 @@
import static android.view.MotionEvent.ACTION_UP;
import static android.view.MotionEvent.INVALID_POINTER_ID;
-import static com.android.systemui.shared.system.NavigationBarCompat.QUICK_STEP_DRAG_SLOP_PX;
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING;
import android.annotation.TargetApi;
@@ -50,6 +49,7 @@
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.AssistDataReceiver;
import com.android.systemui.shared.system.BackgroundExecutor;
+import com.android.systemui.shared.system.NavigationBarCompat;
import com.android.systemui.shared.system.NavigationBarCompat.HitTarget;
import com.android.systemui.shared.system.RecentsAnimationControllerCompat;
import com.android.systemui.shared.system.RecentsAnimationListener;
@@ -79,6 +79,7 @@
private final PointF mLastPos = new PointF();
private int mActivePointerId = INVALID_POINTER_ID;
private boolean mPassedInitialSlop;
+ private int mQuickStepDragSlop;
private float mStartDisplacement;
private WindowTransformSwipeHandler mInteractionHandler;
private int mDisplayRotation;
@@ -120,6 +121,7 @@
mDownPos.set(ev.getX(), ev.getY());
mLastPos.set(mDownPos);
mPassedInitialSlop = false;
+ mQuickStepDragSlop = NavigationBarCompat.getQuickStepDragSlopPx();
// Start the window animation on down to give more time for launcher to draw if the
// user didn't start the gesture over the back button
@@ -152,7 +154,8 @@
}
mLastPos.set(ev.getX(pointerIndex), ev.getY(pointerIndex));
float displacement = getDisplacement(ev);
- if (!mPassedInitialSlop && Math.abs(displacement) > QUICK_STEP_DRAG_SLOP_PX) {
+ if (!mPassedInitialSlop
+ && Math.abs(displacement) > mQuickStepDragSlop) {
mPassedInitialSlop = true;
mStartDisplacement = displacement;
diff --git a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java
index aadd44f..43772fb 100644
--- a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java
+++ b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java
@@ -42,7 +42,6 @@
import android.util.Log;
import android.view.View;
import android.view.ViewConfiguration;
-
import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.MainThreadExecutor;
@@ -52,7 +51,6 @@
import com.android.quickstep.ActivityControlHelper.FallbackActivityControllerHelper;
import com.android.quickstep.ActivityControlHelper.LauncherActivityControllerHelper;
import com.android.quickstep.util.ClipAnimationHelper;
-import com.android.quickstep.util.RemoteAnimationProvider;
import com.android.quickstep.util.RemoteAnimationTargetSet;
import com.android.quickstep.util.SysuiEventLogger;
import com.android.quickstep.views.RecentsView;
@@ -60,7 +58,6 @@
import com.android.systemui.shared.system.PackageManagerWrapper;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
import com.android.systemui.shared.system.TransactionCompat;
-
import java.util.ArrayList;
/**
@@ -278,7 +275,6 @@
if (mListener != null) {
mListener.unregister();
}
- RemoteAnimationProvider.showOpeningTarget(targetCompats);
AnimatorSet anim = new AnimatorSet();
anim.addListener(new AnimationSuccessListener() {
@Override
@@ -321,12 +317,13 @@
mHelper.getSwipeUpDestinationAndLength(
mActivity.getDeviceProfile(), mActivity, targetRect);
clipHelper.updateTargetRect(targetRect);
+ clipHelper.prepareAnimation(false /* isOpening */);
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);
valueAnimator.setDuration(RECENTS_LAUNCH_DURATION);
valueAnimator.setInterpolator(TOUCH_RESPONSE_INTERPOLATOR);
valueAnimator.addUpdateListener((v) ->
- clipHelper.applyTransform(targetSet, (float) v.getAnimatedValue()));
+ clipHelper.applyTransform(targetSet, (float) v.getAnimatedValue()));
if (targetSet.isAnimatingHome()) {
// If we are animating home, fade in the opening targets
@@ -337,9 +334,7 @@
valueAnimator.addUpdateListener((v) -> {
for (RemoteAnimationTargetCompat app : openingSet.apps) {
transaction.setAlpha(app.leash, (float) v.getAnimatedValue());
- transaction.show(app.leash);
}
- transaction.setEarlyWakeup();
transaction.apply();
});
}
diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java
index 31bead1..b780a3e 100644
--- a/quickstep/src/com/android/quickstep/RecentsActivity.java
+++ b/quickstep/src/com/android/quickstep/RecentsActivity.java
@@ -231,7 +231,7 @@
super.onStop();
// Workaround for b/78520668, explicitly trim memory once UI is hidden
- UiFactory.onTrimMemory(this, TRIM_MEMORY_UI_HIDDEN);
+ onTrimMemory(TRIM_MEMORY_UI_HIDDEN);
}
@Override
diff --git a/quickstep/src/com/android/quickstep/TaskUtils.java b/quickstep/src/com/android/quickstep/TaskUtils.java
index c66f00f..559236d 100644
--- a/quickstep/src/com/android/quickstep/TaskUtils.java
+++ b/quickstep/src/com/android/quickstep/TaskUtils.java
@@ -41,6 +41,7 @@
import com.android.launcher3.util.ComponentKey;
import com.android.quickstep.RecentsAnimationInterpolator.TaskWindowBounds;
import com.android.quickstep.util.MultiValueUpdateListener;
+import com.android.quickstep.util.RemoteAnimationProvider;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.TaskView;
import com.android.systemui.shared.recents.model.Task;
@@ -159,7 +160,6 @@
@Override
public void onUpdate(float percent) {
-
final Surface surface = getSurface(v);
final long frameNumber = surface != null ? getNextFrameNumber(surface) : -1;
if (frameNumber == -1) {
@@ -182,6 +182,10 @@
crop.set(tw.winCrop);
TransactionCompat t = new TransactionCompat();
+ if (isFirstFrame) {
+ RemoteAnimationProvider.prepareTargetsForFirstFrame(targets, t, MODE_OPENING);
+ isFirstFrame = false;
+ }
for (RemoteAnimationTargetCompat target : targets) {
if (target.mode == RemoteAnimationTargetCompat.MODE_OPENING) {
t.setAlpha(target.leash, mTaskAlpha.value);
@@ -196,15 +200,10 @@
t.deferTransactionUntil(target.leash, surface, frameNumber);
}
}
- if (isFirstFrame) {
- t.show(target.leash);
- }
}
- t.setEarlyWakeup();
t.apply();
matrix.reset();
- isFirstFrame = false;
}
});
return appAnimator;
diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
index 3217b78..ec50e67 100644
--- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
+++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
@@ -64,6 +64,7 @@
import com.android.quickstep.ActivityControlHelper.LayoutListener;
import com.android.quickstep.TouchConsumer.InteractionType;
import com.android.quickstep.util.ClipAnimationHelper;
+import com.android.quickstep.util.RemoteAnimationProvider;
import com.android.quickstep.util.RemoteAnimationTargetSet;
import com.android.quickstep.util.SysuiEventLogger;
import com.android.quickstep.views.RecentsView;
@@ -545,9 +546,9 @@
if (runningTaskTarget != null) {
mClipAnimationHelper.updateSource(overviewStackBounds, runningTaskTarget);
}
+ mClipAnimationHelper.prepareAnimation(false /* isOpening */);
initTransitionEndpoints(dp);
-
mRecentsAnimationWrapper.setController(controller, targets);
setStateOnUiThread(STATE_APP_CONTROLLER_RECEIVED);
}
diff --git a/quickstep/src/com/android/quickstep/util/ClipAnimationHelper.java b/quickstep/src/com/android/quickstep/util/ClipAnimationHelper.java
index ff72570..8b9903d 100644
--- a/quickstep/src/com/android/quickstep/util/ClipAnimationHelper.java
+++ b/quickstep/src/com/android/quickstep/util/ClipAnimationHelper.java
@@ -17,6 +17,8 @@
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.anim.Interpolators.SCROLL;
+import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING;
+import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING;
import android.graphics.Canvas;
import android.graphics.Matrix;
@@ -71,6 +73,11 @@
private float mTargetScale = 1f;
+ // Whether to boost the opening animation target layers, or the closing
+ private int mBoostModeTargetLayers = -1;
+ // Wether or not applyTransform has been called yet since prepareAnimation()
+ private boolean mIsFirstFrame = true;
+
public void updateSource(Rect homeStackBounds, RemoteAnimationTargetCompat target) {
mHomeStackBounds.set(homeStackBounds);
mSourceInsets.set(target.contentInsets);
@@ -104,6 +111,11 @@
mSourceRect.set(scaledTargetRect);
}
+ public void prepareAnimation(boolean isOpening) {
+ mIsFirstFrame = true;
+ mBoostModeTargetLayers = isOpening ? MODE_OPENING : MODE_CLOSING;
+ }
+
public void applyTransform(RemoteAnimationTargetSet targetSet, float progress) {
RectF currentRect;
mTmpRectF.set(mTargetRect);
@@ -124,6 +136,11 @@
(mSourceStackBounds.height() - (mSourceWindowClipInsets.bottom * progress));
TransactionCompat transaction = new TransactionCompat();
+ if (mIsFirstFrame) {
+ RemoteAnimationProvider.prepareTargetsForFirstFrame(targetSet.unfilteredApps,
+ transaction, mBoostModeTargetLayers);
+ mIsFirstFrame = false;
+ }
for (RemoteAnimationTargetCompat app : targetSet.apps) {
if (app.activityType != RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME) {
mTmpMatrix.setRectToRect(mSourceRect, currentRect, ScaleToFit.FILL);
@@ -136,9 +153,7 @@
|| app.activityType == RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME) {
transaction.setAlpha(app.leash, 1 - progress);
}
- transaction.show(app.leash);
}
- transaction.setEarlyWakeup();
transaction.apply();
}
diff --git a/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java b/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java
index dfe1984..7fc3efb 100644
--- a/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java
+++ b/quickstep/src/com/android/quickstep/util/RemoteAnimationProvider.java
@@ -44,15 +44,22 @@
new RemoteAnimationAdapterCompat(runner, duration, 0));
}
- static void showOpeningTarget(RemoteAnimationTargetCompat[] targetCompats) {
- TransactionCompat t = new TransactionCompat();
- for (RemoteAnimationTargetCompat target : targetCompats) {
- int layer = target.mode == RemoteAnimationTargetCompat.MODE_CLOSING
+ /**
+ * Prepares the given {@param targets} for a remote animation, and should be called with the
+ * transaction from the first frame of animation.
+ *
+ * @param boostModeTargets The mode indicating which targets to boost in z-order above other
+ * targets.
+ */
+ static void prepareTargetsForFirstFrame(RemoteAnimationTargetCompat[] targets,
+ TransactionCompat t, int boostModeTargets) {
+ for (RemoteAnimationTargetCompat target : targets) {
+ int layer = target.mode == boostModeTargets
? Integer.MAX_VALUE
: target.prefixOrderIndex;
t.setLayer(target.leash, layer);
t.show(target.leash);
}
- t.apply();
+ t.setEarlyWakeup();
}
}
diff --git a/quickstep/src/com/android/quickstep/util/RemoteAnimationTargetSet.java b/quickstep/src/com/android/quickstep/util/RemoteAnimationTargetSet.java
index 97d7fb9..04b8be5 100644
--- a/quickstep/src/com/android/quickstep/util/RemoteAnimationTargetSet.java
+++ b/quickstep/src/com/android/quickstep/util/RemoteAnimationTargetSet.java
@@ -24,6 +24,7 @@
*/
public class RemoteAnimationTargetSet {
+ public final RemoteAnimationTargetCompat[] unfilteredApps;
public final RemoteAnimationTargetCompat[] apps;
public RemoteAnimationTargetSet(RemoteAnimationTargetCompat[] apps, int targetMode) {
@@ -36,6 +37,7 @@
}
}
+ this.unfilteredApps = apps;
this.apps = filteredApps.toArray(new RemoteAnimationTargetCompat[filteredApps.size()]);
}
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 1285a2b..2c08169 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -738,7 +738,7 @@
getStateManager().moveToRestState();
// Workaround for b/78520668, explicitly trim memory once UI is hidden
- UiFactory.onTrimMemory(this, TRIM_MEMORY_UI_HIDDEN);
+ onTrimMemory(TRIM_MEMORY_UI_HIDDEN);
}
@Override