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

Commit aa34cf94 authored by Fabian Kozynski's avatar Fabian Kozynski
Browse files

Simplify animation code

Extract common code that animates QS tiles' elements.

Test: manual
Bug: 186251234
Change-Id: Iaa0f8de2638d0ed4c52ce00b94bde320cc2151c6
parent 920c7aa2
Loading
Loading
Loading
Loading
+69 −87
Original line number Original line Diff line number Diff line
@@ -80,7 +80,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
    private QSExpansionPathInterpolator mQSExpansionPathInterpolator;
    private QSExpansionPathInterpolator mQSExpansionPathInterpolator;
    private TouchAnimator mFirstPageAnimator;
    private TouchAnimator mFirstPageAnimator;
    private TouchAnimator mFirstPageDelayedAnimator;
    private TouchAnimator mFirstPageDelayedAnimator;
    private TouchAnimator mTranslationXAnimator;
    private TouchAnimator mTranslationYAnimator;
    private TouchAnimator mTranslationYAnimator;
    private TouchAnimator mNonfirstPageAnimator;
    private TouchAnimator mNonfirstPageAnimator;
    private TouchAnimator mNonfirstPageDelayedAnimator;
    private TouchAnimator mNonfirstPageDelayedAnimator;
@@ -219,10 +218,29 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
        mOnFirstPage = isFirst;
        mOnFirstPage = isFirst;
    }
    }


    private void translateContent(
            View qqsView,
            View qsView,
            View commonParent,
            int yOffset,
            int[] temp,
            TouchAnimator.Builder animatorBuilder
    ) {
        getRelativePosition(temp, qqsView, commonParent);
        int qqsPos = temp[1];
        getRelativePosition(temp, qsView, commonParent);
        int qsPos = temp[1];

        int diff = qsPos - qqsPos - yOffset;
        animatorBuilder.addFloat(qqsView, "translationY", 0, diff);
        animatorBuilder.addFloat(qsView, "translationY", -diff, 0);
        mAllViews.add(qqsView);
        mAllViews.add(qsView);
    }

    private void updateAnimators() {
    private void updateAnimators() {
        mNeedsAnimatorUpdate = false;
        mNeedsAnimatorUpdate = false;
        TouchAnimator.Builder firstPageBuilder = new Builder();
        TouchAnimator.Builder firstPageBuilder = new Builder();
        TouchAnimator.Builder translationXBuilder = new Builder();
        TouchAnimator.Builder translationYBuilder = new Builder();
        TouchAnimator.Builder translationYBuilder = new Builder();


        Collection<QSTile> tiles = mHost.getTiles();
        Collection<QSTile> tiles = mHost.getTiles();
@@ -241,7 +259,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
        QSTileLayout tileLayout = mQsPanelController.getTileLayout();
        QSTileLayout tileLayout = mQsPanelController.getTileLayout();
        mAllViews.add((View) tileLayout);
        mAllViews.add((View) tileLayout);
        int height = mQs.getView() != null ? mQs.getView().getMeasuredHeight() : 0;
        int height = mQs.getView() != null ? mQs.getView().getMeasuredHeight() : 0;
        int width = mQs.getView() != null ? mQs.getView().getMeasuredWidth() : 0;
        int heightDiff = height - mQs.getHeader().getBottom()
        int heightDiff = height - mQs.getHeader().getBottom()
                + mQs.getHeader().getPaddingBottom();
                + mQs.getHeader().getPaddingBottom();
        if (!mTranslateWhileExpanding) {
        if (!mTranslateWhileExpanding) {
@@ -268,26 +285,9 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
                    QSTileView quickTileView = mQuickQSPanelController.getTileView(tile);
                    QSTileView quickTileView = mQuickQSPanelController.getTileView(tile);
                    if (quickTileView == null) continue;
                    if (quickTileView == null) continue;


                    getRelativePosition(loc1, quickTileView.getIcon().getIconView(), view);
                    getRelativePosition(loc2, tileIcon, view);
                    final int xDiff = loc2[0] - loc1[0];
                    int yDiff = loc2[1] - loc1[1];

                    if (count < tileLayout.getNumVisibleTiles()) {
                    getRelativePosition(loc1, quickTileView, view);
                    getRelativePosition(loc1, quickTileView, view);
                    getRelativePosition(loc2, tileView, view);
                    getRelativePosition(loc2, tileView, view);
                    int yOffset = loc2[1] - loc1[1];
                    int yOffset = loc2[1] - loc1[1];
                        // Move the quick tile right from its location to the new one.
                        View v = quickTileView.getIcon();
                        translationXBuilder.addFloat(v, "translationX", 0, xDiff);
                        translationYBuilder.addFloat(v, "translationY", 0, yDiff - yOffset);
                        mAllViews.add(v);

                        // Move the real tile from the quick tile position to its final
                        // location.
                        v = tileIcon;
                        translationXBuilder.addFloat(v, "translationX", -xDiff, 0);
                        translationYBuilder.addFloat(v, "translationY", -yDiff + yOffset, 0);


                    // Offset the translation animation on the views
                    // Offset the translation animation on the views
                    // (that goes from 0 to getOffsetTranslation)
                    // (that goes from 0 to getOffsetTranslation)
@@ -306,44 +306,37 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha


                    mQQSTileHeightAnimator.addView(quickTileView);
                    mQQSTileHeightAnimator.addView(quickTileView);


                        // Label containers
                    // Icons
                        View qqsLabelContainer = quickTileView.getLabelContainer();
                    translateContent(
                        View qsLabelContainer = tileView.getLabelContainer();
                            quickTileView.getIcon(),

                            tileView.getIcon(),
                        getRelativePosition(loc1, qqsLabelContainer, view);
                            view,
                        getRelativePosition(loc2, qsLabelContainer, view);
                            yOffset,
                        yDiff = loc2[1] - loc1[1] - yOffset;
                            loc1,
                            translationYBuilder
                    );


                        translationYBuilder.addFloat(qqsLabelContainer, "translationY", 0, yDiff);
                    // Label containers
                        translationYBuilder.addFloat(qsLabelContainer, "translationY", -yDiff, 0);
                    translateContent(
                        mAllViews.add(qqsLabelContainer);
                            quickTileView.getLabelContainer(),
                        mAllViews.add(qsLabelContainer);
                            tileView.getLabelContainer(),
                            view,
                            yOffset,
                            loc1,
                            translationYBuilder
                    );


                    // Secondary icon
                    // Secondary icon
                        View qqsSecondaryIcon = quickTileView.getSecondaryIcon();
                    translateContent(
                        View qsSecondaryIcon = tileView.getSecondaryIcon();
                            quickTileView.getSecondaryIcon(),

                            tileView.getSecondaryIcon(),
                        getRelativePosition(loc1, qqsSecondaryIcon, view);
                            view,
                        getRelativePosition(loc2, qsSecondaryIcon, view);
                            yOffset,
                        yDiff = loc2[1] - loc1[1] - yOffset;
                            loc1,

                            translationYBuilder
                        translationYBuilder.addFloat(qqsSecondaryIcon, "translationY", 0, yDiff);
                    );
                        translationYBuilder.addFloat(qsSecondaryIcon, "translationY", -yDiff, 0);
                        mAllViews.add(qqsSecondaryIcon);
                        mAllViews.add(qsSecondaryIcon);
                    } else { // These tiles disappear when expanding
                        firstPageBuilder.addFloat(quickTileView, "alpha", 1, 0);
                        translationYBuilder.addFloat(quickTileView, "translationY", 0, yDiff);

                        // xDiff is negative here and this makes it "more" negative
                        final int translationX =
                                mQsPanelController.isLayoutRtl() ? xDiff - width : xDiff + width;
                        translationXBuilder.addFloat(quickTileView, "translationX", 0,
                                translationX);
                    }


                    mQuickQsViews.add(tileView);
                    mQuickQsViews.add(tileView);
                    mAllViews.add(tileView.getIcon());
                    mAllViews.add(quickTileView);
                    mAllViews.add(quickTileView);
                } else if (mFullRows && isIconInAnimatedRow(count)) {
                } else if (mFullRows && isIconInAnimatedRow(count)) {


@@ -406,17 +399,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
            if (mQsPanelController.getDivider() != null) {
            if (mQsPanelController.getDivider() != null) {
                mAllViews.add(mQsPanelController.getDivider());
                mAllViews.add(mQsPanelController.getDivider());
            }
            }

            float px = 0;
            if (tiles.size() <= 3) {
                px = 1;
            } else if (tiles.size() <= 6) {
                px = .4f;
            }
            mQSExpansionPathInterpolator.setControlX2(px);
            translationXBuilder.setInterpolator(mQSExpansionPathInterpolator.getXInterpolator());
            translationYBuilder.setInterpolator(mQSExpansionPathInterpolator.getYInterpolator());
            translationYBuilder.setInterpolator(mQSExpansionPathInterpolator.getYInterpolator());
            mTranslationXAnimator = translationXBuilder.build();
            mTranslationYAnimator = translationYBuilder.build();
            mTranslationYAnimator = translationYBuilder.build();
            if (mQQSTileHeightAnimator != null) {
            if (mQQSTileHeightAnimator != null) {
                mQQSTileHeightAnimator.setInterpolator(
                mQQSTileHeightAnimator.setInterpolator(
@@ -489,7 +472,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
            mQuickQsPanel.setAlpha(1);
            mQuickQsPanel.setAlpha(1);
            mFirstPageAnimator.setPosition(position);
            mFirstPageAnimator.setPosition(position);
            mFirstPageDelayedAnimator.setPosition(position);
            mFirstPageDelayedAnimator.setPosition(position);
            mTranslationXAnimator.setPosition(position);
            mTranslationYAnimator.setPosition(position);
            mTranslationYAnimator.setPosition(position);
            if (mBrightnessAnimator != null) {
            if (mBrightnessAnimator != null) {
                mBrightnessAnimator.setPosition(position);
                mBrightnessAnimator.setPosition(position);