Merge "Apply TaskView's (non)fullscreenTranslation correctly in emulated landscape" into sc-dev

This commit is contained in:
Alex Chau
2021-04-27 20:29:20 +00:00
committed by Android (Google) Code Review
2 changed files with 102 additions and 15 deletions
@@ -1277,23 +1277,20 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
}
float accumulatedTranslationX = 0;
float[] fullscreenTranslations = new float[taskCount];
for (int i = 0; i < taskCount; i++) {
TaskView taskView = getTaskViewAt(i);
taskView.updateTaskSize();
fullscreenTranslations[i] += accumulatedTranslationX;
taskView.getPrimaryFullscreenTranslationProperty().set(taskView,
accumulatedTranslationX);
taskView.getSecondaryFullscreenTranslationProperty().set(taskView, 0f);
// Compensate space caused by TaskView scaling.
float widthDiff =
taskView.getLayoutParams().width * (1 - taskView.getFullscreenScale());
// Compensate page spacing widening caused by RecentsView scaling.
widthDiff += mPageSpacing * (1 - 1 / mFullscreenScale);
float fullscreenTranslationX = mIsRtl ? widthDiff : -widthDiff;
accumulatedTranslationX += fullscreenTranslationX;
accumulatedTranslationX += mIsRtl ? widthDiff : -widthDiff;
}
for (int i = 0; i < taskCount; i++) {
getTaskViewAt(i).setFullscreenTranslationX(fullscreenTranslations[i]);
}
mClearAllButton.setFullscreenTranslationPrimary(accumulatedTranslationX);
updateGridProperties();
@@ -1998,7 +1995,9 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
gridTranslationAnimators.add(taskDismissAnimator);
}
taskView.setGridTranslationX(gridTranslations[i] - snappedTaskGridTranslationX);
taskView.setNonFullscreenTranslationX(snappedTaskFullscreenScrollAdjustment);
taskView.getPrimaryNonFullscreenTranslationProperty().set(taskView,
snappedTaskFullscreenScrollAdjustment);
taskView.getSecondaryNonFullscreenTranslationProperty().set(taskView, 0f);
}
AnimatorSet gridTranslationAnimatorSet = new AnimatorSet();
gridTranslationAnimatorSet.playTogether(gridTranslationAnimators);
@@ -250,6 +250,58 @@ public class TaskView extends FrameLayout implements Reusable {
}
};
private static final FloatProperty<TaskView> FULLSCREEN_TRANSLATION_X =
new FloatProperty<TaskView>("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<TaskView> FULLSCREEN_TRANSLATION_Y =
new FloatProperty<TaskView>("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<TaskView> NON_FULLSCREEN_TRANSLATION_X =
new FloatProperty<TaskView>("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<TaskView> NON_FULLSCREEN_TRANSLATION_Y =
new FloatProperty<TaskView>("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<TaskView> COLOR_TINT =
new FloatProperty<TaskView>("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<TaskView> getPrimaryDismissTranslationProperty() {
@@ -1035,6 +1103,26 @@ public class TaskView extends FrameLayout implements Reusable {
TASK_RESISTANCE_TRANSLATION_X, TASK_RESISTANCE_TRANSLATION_Y);
}
public FloatProperty<TaskView> getPrimaryFullscreenTranslationProperty() {
return getPagedOrientationHandler().getPrimaryValue(
FULLSCREEN_TRANSLATION_X, FULLSCREEN_TRANSLATION_Y);
}
public FloatProperty<TaskView> getSecondaryFullscreenTranslationProperty() {
return getPagedOrientationHandler().getSecondaryValue(
FULLSCREEN_TRANSLATION_X, FULLSCREEN_TRANSLATION_Y);
}
public FloatProperty<TaskView> getPrimaryNonFullscreenTranslationProperty() {
return getPagedOrientationHandler().getPrimaryValue(
NON_FULLSCREEN_TRANSLATION_X, NON_FULLSCREEN_TRANSLATION_Y);
}
public FloatProperty<TaskView> 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.