diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 2a3b86eb77..51090dfbce 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -1277,23 +1277,20 @@ public abstract class RecentsView FULLSCREEN_TRANSLATION_X = + new FloatProperty("fullscreenTranslationX") { + @Override + public void setValue(TaskView taskView, float v) { + taskView.setFullscreenTranslationX(v); + } + + @Override + public Float get(TaskView taskView) { + return taskView.mFullscreenTranslationX; + } + }; + + private static final FloatProperty FULLSCREEN_TRANSLATION_Y = + new FloatProperty("fullscreenTranslationY") { + @Override + public void setValue(TaskView taskView, float v) { + taskView.setFullscreenTranslationY(v); + } + + @Override + public Float get(TaskView taskView) { + return taskView.mFullscreenTranslationY; + } + }; + + private static final FloatProperty NON_FULLSCREEN_TRANSLATION_X = + new FloatProperty("nonFullscreenTranslationX") { + @Override + public void setValue(TaskView taskView, float v) { + taskView.setNonFullscreenTranslationX(v); + } + + @Override + public Float get(TaskView taskView) { + return taskView.mNonFullscreenTranslationX; + } + }; + + private static final FloatProperty NON_FULLSCREEN_TRANSLATION_Y = + new FloatProperty("nonFullscreenTranslationY") { + @Override + public void setValue(TaskView taskView, float v) { + taskView.setNonFullscreenTranslationY(v); + } + + @Override + public Float get(TaskView taskView) { + return taskView.mNonFullscreenTranslationY; + } + }; + private static final FloatProperty COLOR_TINT = new FloatProperty("colorTint") { @Override @@ -284,9 +336,11 @@ public class TaskView extends FrameLayout implements Reusable { private float mTaskResistanceTranslationY; // The following translation variables should only be used in the same orientation as Launcher. private float mFullscreenTranslationX; + private float mFullscreenTranslationY; // Applied as a complement to fullscreenTranslation, for adjusting the carousel overview, or the // in transition carousel before forming the grid on tablets. private float mNonFullscreenTranslationX; + private float mNonFullscreenTranslationY; private float mBoxTranslationY; // The following grid translations scales with mGridProgress. private float mGridTranslationX; @@ -786,8 +840,9 @@ public class TaskView extends FrameLayout implements Reusable { @Override public void onRecycle() { - mFullscreenTranslationX = mNonFullscreenTranslationX = - mGridTranslationX = mGridTranslationY = mBoxTranslationY = 0f; + mFullscreenTranslationX = mFullscreenTranslationY = mNonFullscreenTranslationX = + mNonFullscreenTranslationY = mGridTranslationX = mGridTranslationY = + mBoxTranslationY = 0f; resetViewTransforms(); // Clear any references to the thumbnail (it will be re-read either from the cache or the // system on next bind) @@ -929,16 +984,26 @@ public class TaskView extends FrameLayout implements Reusable { applyTranslationY(); } - public void setFullscreenTranslationX(float fullscreenTranslationX) { + private void setFullscreenTranslationX(float fullscreenTranslationX) { mFullscreenTranslationX = fullscreenTranslationX; applyTranslationX(); } - public void setNonFullscreenTranslationX(float nonFullscreenTranslationX) { + private void setFullscreenTranslationY(float fullscreenTranslationY) { + mFullscreenTranslationY = fullscreenTranslationY; + applyTranslationY(); + } + + private void setNonFullscreenTranslationX(float nonFullscreenTranslationX) { mNonFullscreenTranslationX = nonFullscreenTranslationX; applyTranslationX(); } + private void setNonFullscreenTranslationY(float nonFullscreenTranslationY) { + mNonFullscreenTranslationY = nonFullscreenTranslationY; + applyTranslationY(); + } + public void setGridTranslationX(float gridTranslationX) { mGridTranslationX = gridTranslationX; applyTranslationX(); @@ -960,9 +1025,9 @@ public class TaskView extends FrameLayout implements Reusable { public float getScrollAdjustment(boolean fullscreenEnabled, boolean gridEnabled) { float scrollAdjustment = 0; if (fullscreenEnabled) { - scrollAdjustment += mFullscreenTranslationX; + scrollAdjustment += getPrimaryFullscreenTranslationProperty().get(this); } else { - scrollAdjustment += mNonFullscreenTranslationX; + scrollAdjustment += getPrimaryNonFullscreenTranslationProperty().get(this); } if (gridEnabled) { scrollAdjustment += mGridTranslationX; @@ -1012,7 +1077,10 @@ public class TaskView extends FrameLayout implements Reusable { * change according to a temporary state (e.g. task offset). */ public float getPersistentTranslationY() { - return getGridTrans(mGridTranslationY) + mBoxTranslationY; + return mBoxTranslationY + + getFullscreenTrans(mFullscreenTranslationY) + + getNonFullscreenTrans(mNonFullscreenTranslationY) + + getGridTrans(mGridTranslationY); } public FloatProperty getPrimaryDismissTranslationProperty() { @@ -1035,6 +1103,26 @@ public class TaskView extends FrameLayout implements Reusable { TASK_RESISTANCE_TRANSLATION_X, TASK_RESISTANCE_TRANSLATION_Y); } + public FloatProperty getPrimaryFullscreenTranslationProperty() { + return getPagedOrientationHandler().getPrimaryValue( + FULLSCREEN_TRANSLATION_X, FULLSCREEN_TRANSLATION_Y); + } + + public FloatProperty getSecondaryFullscreenTranslationProperty() { + return getPagedOrientationHandler().getSecondaryValue( + FULLSCREEN_TRANSLATION_X, FULLSCREEN_TRANSLATION_Y); + } + + public FloatProperty getPrimaryNonFullscreenTranslationProperty() { + return getPagedOrientationHandler().getPrimaryValue( + NON_FULLSCREEN_TRANSLATION_X, NON_FULLSCREEN_TRANSLATION_Y); + } + + public FloatProperty getSecondaryNonFullscreenTranslationProperty() { + return getPagedOrientationHandler().getSecondaryValue( + NON_FULLSCREEN_TRANSLATION_X, NON_FULLSCREEN_TRANSLATION_Y); + } + @Override public boolean hasOverlappingRendering() { // TODO: Clip-out the icon region from the thumbnail, since they are overlapping.