summaryrefslogtreecommitdiffstats
path: root/quickstep/src/com/android/quickstep
diff options
context:
space:
mode:
authorLucas Dupin <dupin@google.com>2018-10-01 16:37:15 -0700
committerWinson Chung <winsonc@google.com>2018-12-03 20:50:43 -0800
commitd0ab1d0578052114475b1f704a16ffaadea400f5 (patch)
treef584a2615bd3299d161743170fe41d26724ba316 /quickstep/src/com/android/quickstep
parent4d64da3259d83fa85b6db16a926276a5e283ac3f (diff)
downloadandroid_packages_apps_Trebuchet-d0ab1d0578052114475b1f704a16ffaadea400f5.tar.gz
android_packages_apps_Trebuchet-d0ab1d0578052114475b1f704a16ffaadea400f5.tar.bz2
android_packages_apps_Trebuchet-d0ab1d0578052114475b1f704a16ffaadea400f5.zip
Rounded corners on app transitions
Test: Manualy launch an app Test: Press home when activity is on top of the stack Test: Quick scrub Test: Swipe up on the home button, swipe down Bug: 111514493 Fixes: 116745318 Change-Id: I66d25bc433061ede46107ea9651c198614306692 (cherry picked from commit faa443308ef4de1be482d7d033209d8d6d8cff7b)
Diffstat (limited to 'quickstep/src/com/android/quickstep')
-rw-r--r--quickstep/src/com/android/quickstep/ActivityControlHelper.java2
-rw-r--r--quickstep/src/com/android/quickstep/OverviewCommandHelper.java2
-rw-r--r--quickstep/src/com/android/quickstep/RecentsActivity.java2
-rw-r--r--quickstep/src/com/android/quickstep/RecentsModel.java26
-rw-r--r--quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java3
-rw-r--r--quickstep/src/com/android/quickstep/util/ClipAnimationHelper.java22
-rw-r--r--quickstep/src/com/android/quickstep/util/TaskViewDrawable.java2
7 files changed, 50 insertions, 9 deletions
diff --git a/quickstep/src/com/android/quickstep/ActivityControlHelper.java b/quickstep/src/com/android/quickstep/ActivityControlHelper.java
index b96f9f067..d78ba9c9f 100644
--- a/quickstep/src/com/android/quickstep/ActivityControlHelper.java
+++ b/quickstep/src/com/android/quickstep/ActivityControlHelper.java
@@ -332,7 +332,7 @@ public interface ActivityControlHelper<T extends BaseDraggingActivity> {
float prevRvScale = recentsView.getScaleX();
float targetRvScale = endState.getOverviewScaleAndTranslationYFactor(launcher)[0];
SCALE_PROPERTY.set(recentsView, targetRvScale);
- ClipAnimationHelper clipHelper = new ClipAnimationHelper();
+ ClipAnimationHelper clipHelper = new ClipAnimationHelper(launcher);
clipHelper.fromTaskThumbnailView(v.getThumbnail(), (RecentsView) v.getParent(), null);
SCALE_PROPERTY.set(recentsView, prevRvScale);
diff --git a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java
index f8f09055f..61bb75f85 100644
--- a/quickstep/src/com/android/quickstep/OverviewCommandHelper.java
+++ b/quickstep/src/com/android/quickstep/OverviewCommandHelper.java
@@ -326,7 +326,7 @@ public class OverviewCommandHelper {
return anim;
}
- final ClipAnimationHelper clipHelper = new ClipAnimationHelper();
+ final ClipAnimationHelper clipHelper = new ClipAnimationHelper(mActivity);
// At this point, the activity is already started and laid-out. Get the home-bounds
// relative to the screen using the rootView of the activity.
diff --git a/quickstep/src/com/android/quickstep/RecentsActivity.java b/quickstep/src/com/android/quickstep/RecentsActivity.java
index 9d01f7447..deedd324a 100644
--- a/quickstep/src/com/android/quickstep/RecentsActivity.java
+++ b/quickstep/src/com/android/quickstep/RecentsActivity.java
@@ -183,7 +183,7 @@ public class RecentsActivity extends BaseDraggingActivity {
RemoteAnimationTargetCompat[] targets) {
AnimatorSet target = new AnimatorSet();
boolean activityClosing = taskIsATargetWithMode(targets, getTaskId(), MODE_CLOSING);
- ClipAnimationHelper helper = new ClipAnimationHelper();
+ ClipAnimationHelper helper = new ClipAnimationHelper(this);
target.play(getRecentsWindowAnimator(taskView, !activityClosing, targets, helper)
.setDuration(RECENTS_LAUNCH_DURATION));
diff --git a/quickstep/src/com/android/quickstep/RecentsModel.java b/quickstep/src/com/android/quickstep/RecentsModel.java
index 2e4d4d2b8..a62e6adfa 100644
--- a/quickstep/src/com/android/quickstep/RecentsModel.java
+++ b/quickstep/src/com/android/quickstep/RecentsModel.java
@@ -45,6 +45,9 @@ import androidx.annotation.WorkerThread;
*/
@TargetApi(Build.VERSION_CODES.O)
public class RecentsModel extends TaskStackChangeListener {
+
+ private static final String TAG = "RecentsModel";
+
// We do not need any synchronization for this variable as its only written on UI thread.
public static final MainThreadInitializedObject<RecentsModel> INSTANCE =
new MainThreadInitializedObject<>(c -> new RecentsModel(c));
@@ -62,6 +65,9 @@ public class RecentsModel extends TaskStackChangeListener {
private final TaskIconCache mIconCache;
private final TaskThumbnailCache mThumbnailCache;
+ private float mWindowCornerRadius = -1;
+
+
private RecentsModel(Context context) {
mContext = context;
@@ -174,6 +180,26 @@ public class RecentsModel extends TaskStackChangeListener {
return mSystemUiProxy;
}
+ public float getWindowCornerRadius() {
+ // The window corner radius is expressed in pixels and won't change if the
+ // display density changes. It's safe to cache the value.
+ if (mWindowCornerRadius == -1) {
+ if (mSystemUiProxy != null) {
+ try {
+ mWindowCornerRadius = mSystemUiProxy.getWindowCornerRadius();
+ } catch (RemoteException e) {
+ Log.w(TAG, "Connection to ISystemUIProxy was lost, ignoring window corner "
+ + "radius");
+ return 0;
+ }
+ } else {
+ Log.w(TAG, "ISystemUIProxy is null, ignoring window corner radius");
+ return 0;
+ }
+ }
+ return mWindowCornerRadius;
+ }
+
public void onTrimMemory(int level) {
if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
mThumbnailCache.getHighResLoadingState().setVisible(false);
diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
index fe3300d36..f4b2febe7 100644
--- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
+++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
@@ -175,7 +175,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
private static final float SWIPE_DURATION_MULTIPLIER =
Math.min(1 / MIN_PROGRESS_FOR_OVERVIEW, 1 / (1 - MIN_PROGRESS_FOR_OVERVIEW));
- private final ClipAnimationHelper mClipAnimationHelper = new ClipAnimationHelper();
+ private final ClipAnimationHelper mClipAnimationHelper;
protected Runnable mGestureEndCallback;
protected boolean mIsGoingToHome;
@@ -255,6 +255,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
mTouchInteractionLog = touchInteractionLog;
mRecentsAnimationWrapper = new RecentsAnimationWrapper(inputConsumer,
this::createNewTouchProxyHandler);
+ mClipAnimationHelper = new ClipAnimationHelper(context);
initStateCallbacks();
}
diff --git a/quickstep/src/com/android/quickstep/util/ClipAnimationHelper.java b/quickstep/src/com/android/quickstep/util/ClipAnimationHelper.java
index 57a0e8f8f..f25424494 100644
--- a/quickstep/src/com/android/quickstep/util/ClipAnimationHelper.java
+++ b/quickstep/src/com/android/quickstep/util/ClipAnimationHelper.java
@@ -21,6 +21,7 @@ import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MOD
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING;
import android.annotation.TargetApi;
+import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Matrix.ScaleToFit;
@@ -31,6 +32,8 @@ import android.os.Build;
import android.os.RemoteException;
import android.view.animation.Interpolator;
+import androidx.annotation.Nullable;
+
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.R;
@@ -50,8 +53,6 @@ import com.android.systemui.shared.system.WindowManagerWrapper;
import java.util.function.BiFunction;
-import androidx.annotation.Nullable;
-
/**
* Utility class to handle window clip animation
*/
@@ -82,6 +83,10 @@ public class ClipAnimationHelper {
private final Matrix mTmpMatrix = new Matrix();
private final RectF mTmpRectF = new RectF();
private final RectF mCurrentRectWithInsets = new RectF();
+ // Corner radius of windows, in pixels
+ private final float mWindowCornerRadius;
+ // Corner radius of windows when they're in overview mode.
+ private final float mTaskCornerRadius;
private float mTargetScale = 1f;
private float mOffsetScale = 1f;
@@ -95,6 +100,11 @@ public class ClipAnimationHelper {
private BiFunction<RemoteAnimationTargetCompat, Float, Float> mTaskAlphaCallback =
(t, a1) -> a1;
+ public ClipAnimationHelper(Context context) {
+ mTaskCornerRadius = context.getResources().getDimension(R.dimen.task_corner_radius);
+ mWindowCornerRadius = RecentsModel.INSTANCE.get(context).getWindowCornerRadius();
+ }
+
private void updateSourceStack(RemoteAnimationTargetCompat target) {
mSourceInsets.set(target.contentInsets);
mSourceStackBounds.set(target.sourceContainerBounds);
@@ -168,11 +178,15 @@ public class ClipAnimationHelper {
Rect crop = app.sourceContainerBounds;
float alpha = 1f;
int layer;
+ float cornerRadius = 0f;
if (app.mode == targetSet.targetMode) {
if (app.activityType != RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME) {
mTmpMatrix.setRectToRect(mSourceRect, currentRect, ScaleToFit.FILL);
mTmpMatrix.postTranslate(app.position.x, app.position.y);
mClipRectF.roundOut(crop);
+ float scale = crop.width() / currentRect.width();
+ cornerRadius = Utilities.mapRange(progress, mWindowCornerRadius,
+ mTaskCornerRadius * scale);
}
if (app.isNotInRecents
@@ -186,7 +200,7 @@ public class ClipAnimationHelper {
crop = null;
layer = Integer.MAX_VALUE;
}
- params[i] = new SurfaceParams(app.leash, alpha, mTmpMatrix, crop, layer);
+ params[i] = new SurfaceParams(app.leash, alpha, mTmpMatrix, crop, layer, cornerRadius);
}
applyParams(syncTransactionApplier, params);
return currentRect;
@@ -315,7 +329,7 @@ public class ClipAnimationHelper {
-mSourceWindowClipInsets.top * insetProgress,
ttv.getMeasuredWidth() + mSourceWindowClipInsets.right * insetProgress,
ttv.getMeasuredHeight() + mSourceWindowClipInsets.bottom * insetProgress,
- ttv.getCornerRadius() * progress);
+ Utilities.mapRange(progress, mWindowCornerRadius, ttv.getCornerRadius()));
}
public RectF getTargetRect() {
diff --git a/quickstep/src/com/android/quickstep/util/TaskViewDrawable.java b/quickstep/src/com/android/quickstep/util/TaskViewDrawable.java
index 48b07a714..6ee305f80 100644
--- a/quickstep/src/com/android/quickstep/util/TaskViewDrawable.java
+++ b/quickstep/src/com/android/quickstep/util/TaskViewDrawable.java
@@ -71,7 +71,7 @@ public class TaskViewDrawable extends Drawable {
Utilities.getDescendantCoordRelativeToAncestor(mIconView, parent, mIconPos, true);
mThumbnailView = tv.getThumbnail();
- mClipAnimationHelper = new ClipAnimationHelper();
+ mClipAnimationHelper = new ClipAnimationHelper(parent.getContext());
mClipAnimationHelper.fromTaskThumbnailView(mThumbnailView, parent);
}