Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10a2b9c8 authored by Tony Wickham's avatar Tony Wickham
Browse files

Separate TaskView translationX into dismiss + offset translations

- Previously, these both setTranslationX() directly, meaning one
  could clobber the other. Now they are set independently and
  aggregated to setTranslationX().
- For fake landscape, we actually are setting translationY, so
  had to create both translationX and translationY properties, and
  set the appropriate one via the current orientation handler's
  "primary" dimension.

Fixes: 176766821
Change-Id: I00ed0bd73dbea00f4018de62260ed35f4d6966a5
parent da5e714c
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -72,7 +72,6 @@ import android.text.StaticLayout;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.util.FloatProperty;
import android.util.Property;
import android.util.SparseBooleanArray;
import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
@@ -1515,7 +1514,9 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
                }
                int scrollDiff = newScroll[i] - oldScroll[i] + offset;
                if (scrollDiff != 0) {
                    Property translationProperty = mOrientationHandler.getPrimaryViewTranslate();
                    FloatProperty translationProperty = child instanceof TaskView
                            ? ((TaskView) child).getPrimaryFillDismissGapTranslationProperty()
                            : mOrientationHandler.getPrimaryViewTranslate();

                    ResourceProvider rp = DynamicResource.provider(mActivity);
                    SpringProperty sp = new SpringProperty(SpringProperty.FLAG_CAN_SPRING_ON_END)
@@ -1927,7 +1928,11 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
                            ? modalLeftOffsetSize
                            : modalRightOffsetSize;
            float totalTranslation = translation + modalTranslation;
            mOrientationHandler.getPrimaryViewTranslate().set(getChildAt(i),
            View child = getChildAt(i);
            FloatProperty translationProperty = child instanceof TaskView
                    ? ((TaskView) child).getPrimaryTaskOffsetTranslationProperty()
                    : mOrientationHandler.getPrimaryViewTranslate();
            translationProperty.set(child,
                    totalTranslation * mOrientationHandler.getPrimaryTranslationDirectionFactor());
        }
        updateCurveProperties();
+99 −0
Original line number Diff line number Diff line
@@ -152,6 +152,58 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
                }
            };

    private static final FloatProperty<TaskView> FILL_DISMISS_GAP_TRANSLATION_X =
            new FloatProperty<TaskView>("fillDismissGapTranslationX") {
                @Override
                public void setValue(TaskView taskView, float v) {
                    taskView.setFillDismissGapTranslationX(v);
                }

                @Override
                public Float get(TaskView taskView) {
                    return taskView.mFillDismissGapTranslationX;
                }
            };

    private static final FloatProperty<TaskView> FILL_DISMISS_GAP_TRANSLATION_Y =
            new FloatProperty<TaskView>("fillDismissGapTranslationY") {
                @Override
                public void setValue(TaskView taskView, float v) {
                    taskView.setFillDismissGapTranslationY(v);
                }

                @Override
                public Float get(TaskView taskView) {
                    return taskView.mFillDismissGapTranslationY;
                }
            };

    private static final FloatProperty<TaskView> TASK_OFFSET_TRANSLATION_X =
            new FloatProperty<TaskView>("taskOffsetTranslationX") {
                @Override
                public void setValue(TaskView taskView, float v) {
                    taskView.setTaskOffsetTranslationX(v);
                }

                @Override
                public Float get(TaskView taskView) {
                    return taskView.mTaskOffsetTranslationX;
                }
            };

    private static final FloatProperty<TaskView> TASK_OFFSET_TRANSLATION_Y =
            new FloatProperty<TaskView>("taskOffsetTranslationY") {
                @Override
                public void setValue(TaskView taskView, float v) {
                    taskView.setTaskOffsetTranslationY(v);
                }

                @Override
                public Float get(TaskView taskView) {
                    return taskView.mTaskOffsetTranslationY;
                }
            };

    private final OnAttachStateChangeListener mTaskMenuStateListener =
            new OnAttachStateChangeListener() {
                @Override
@@ -179,6 +231,13 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
    private final FullscreenDrawParams mCurrentFullscreenParams;
    private final StatefulActivity mActivity;

    // Various causes of changing primary translation, which we aggregate to setTranslationX/Y().
    // TODO: We should do this for secondary translation properties as well.
    private float mFillDismissGapTranslationX;
    private float mFillDismissGapTranslationY;
    private float mTaskOffsetTranslationX;
    private float mTaskOffsetTranslationY;

    private ObjectAnimator mIconAndDimAnimator;
    private float mIconScaleAnimStartProgress = 0;
    private float mFocusTransitionProgress = 1;
@@ -601,6 +660,8 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {

    protected void resetViewTransforms() {
        setCurveScale(1);
        mFillDismissGapTranslationX = mTaskOffsetTranslationX = 0f;
        mFillDismissGapTranslationY = mTaskOffsetTranslationY = 0f;
        setTranslationX(0f);
        setTranslationY(0f);
        setTranslationZ(0);
@@ -745,6 +806,44 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
        return mCurveScale;
    }

    private void setFillDismissGapTranslationX(float x) {
        mFillDismissGapTranslationX = x;
        applyTranslationX();
    }

    private void setFillDismissGapTranslationY(float y) {
        mFillDismissGapTranslationY = y;
        applyTranslationY();
    }

    private void setTaskOffsetTranslationX(float x) {
        mTaskOffsetTranslationX = x;
        applyTranslationX();
    }

    private void setTaskOffsetTranslationY(float y) {
        mTaskOffsetTranslationY = y;
        applyTranslationY();
    }

    private void applyTranslationX() {
        setTranslationX(mFillDismissGapTranslationX + mTaskOffsetTranslationX);
    }

    private void applyTranslationY() {
        setTranslationY(mFillDismissGapTranslationY + mTaskOffsetTranslationY);
    }

    public FloatProperty<TaskView> getPrimaryFillDismissGapTranslationProperty() {
        return getPagedOrientationHandler().getPrimaryValue(
                FILL_DISMISS_GAP_TRANSLATION_X, FILL_DISMISS_GAP_TRANSLATION_Y);
    }

    public FloatProperty<TaskView> getPrimaryTaskOffsetTranslationProperty() {
        return getPagedOrientationHandler().getPrimaryValue(
                TASK_OFFSET_TRANSLATION_X, TASK_OFFSET_TRANSLATION_Y);
    }

    @Override
    public boolean hasOverlappingRendering() {
        // TODO: Clip-out the icon region from the thumbnail, since they are overlapping.