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

Commit a8533527 authored by Roman Birg's avatar Roman Birg Committed by Gerrit Code Review
Browse files

SystemUI: improve exiting edit mode from qs settings



When the user hits done while in edit mode on the QS Settings page, the
animation can be a little jarring to move to the first page while the
brightness view slides into place. So let's immediately put the
brightness view into its proper position when going out of editing mode
on the settings page.

Ref: OPO-425

Change-Id: I93794a94752978b1055911bbef19ee9f0d77bd3c
Signed-off-by: default avatarRoman Birg <roman@cyngn.com>
parent 0358395c
Loading
Loading
Loading
Loading
+23 −15
Original line number Diff line number Diff line
@@ -390,34 +390,42 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
        }
    }

    public void setEditing(boolean editing) {
        if (mEditing == editing) return;
        mEditing = editing;

        if (!editing) {
    private void persistRecords() {
        // persist the new config.
        List<String> newTiles = new ArrayList<>();
        for (TileRecord record : mRecords) {
            newTiles.add(mHost.getSpec(record.tile));
        }
        mHost.setTiles(newTiles);
    }

    public void setEditing(boolean editing) {
        if (mEditing == editing) return;
        final boolean isOnSettings = isOnSettingsPage();

        mQsPanelTop.setEditing(editing, isOnSettings);
        if (!editing) {
            persistRecords();

            refreshAllTiles();

            mQsPanelTop.animate().translationX(0).start();
            mQsPanelTop.setTranslationX(0);
            if (isOnSettings) {
                mViewPager.setCurrentItem(1, true);
            }
        }
        mEditing = editing;
        mPagerAdapter.notifyDataSetChanged();

        mPageIndicator.setEditing(editing);
        mViewPager.setOffscreenPageLimit(mEditing ? getCurrentMaxPageCount() + 1 : 1);
        mPagerAdapter.notifyDataSetChanged();

        // clear the record state
        for (TileRecord record : mRecords) {
            setupRecord(record);
            drawTile(record, record.tile.getState());
        }
        mQsPanelTop.setEditing(editing);
        mPageIndicator.setEditing(editing);
        mPagerAdapter.notifyDataSetChanged();

        mViewPager.setOffscreenPageLimit(mEditing ? getCurrentMaxPageCount() + 1 : 1);
        mPagerAdapter.notifyDataSetChanged();

        requestLayout();
    }
@@ -2110,8 +2118,8 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
                    CMSettings.Secure.QS_USE_MAIN_TILES, 1, currentUserId) == 1;
            if (firstRowLarge != mFirstRowLarge) {
                mFirstRowLarge = firstRowLarge;
                setTiles(new ArrayList<QSTile<?>>()); // clear out states
                setTiles(mHost.getTiles());
                mPagerAdapter.notifyDataSetChanged();
            }
        }
    }
+16 −6
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ public class QSPanelTopView extends FrameLayout {

    private SettingsObserver mSettingsObserver;
    private boolean mListening;
    private boolean mSkipAnimations;

    public QSPanelTopView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
@@ -137,12 +138,11 @@ public class QSPanelTopView extends FrameLayout {
        boolean animateToState = !isLaidOut();
        super.onLayout(changed, left, top, right, bottom);
        if (animateToState) {
            Log.e(TAG, "first layout animating to state!");
            animateToState();
            goToState();
        }
    }

    public void setEditing(boolean editing) {
    public void setEditing(boolean editing, boolean skipAnim) {
        mEditing = editing;
        if (editing) {
            mDisplayingInstructions = true;
@@ -151,8 +151,12 @@ public class QSPanelTopView extends FrameLayout {
            mDisplayingInstructions = false;
            mDisplayingTrash = false;
        }
        if (skipAnim) {
            goToState();
        } else {
            animateToState();
        }
    }

    public void onStopDrag() {
        mDisplayingTrash = false;
@@ -254,9 +258,9 @@ public class QSPanelTopView extends FrameLayout {
                }
            });

            mAnimator.setDuration(500);
            mAnimator.setDuration(mSkipAnimations ? 0 : 500);
            mAnimator.setInterpolator(new FastOutSlowInInterpolator());
            mAnimator.setStartDelay(100);
            mAnimator.setStartDelay(mSkipAnimations ? 0 : 100);
            mAnimator.playTogether(instructionAnimator, trashAnimator,
                    brightnessAnimator, toastAnimator);
            mAnimator.start();
@@ -271,6 +275,12 @@ public class QSPanelTopView extends FrameLayout {
    }

    private void animateToState() {
        mSkipAnimations = false;
        post(mAnimateRunnable);
    }

    private void goToState() {
        mSkipAnimations = true;
        post(mAnimateRunnable);
    }

+1 −1
Original line number Diff line number Diff line
@@ -776,7 +776,7 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL

    public void setEditing(boolean editing) {
        mEditing = editing;
        if (mEditingDetailAdapter == null) {
        if (editing && mEditingDetailAdapter == null) {
            mEditingDetailAdapter = new QSTile.DetailAdapter() {
                @Override
                public int getTitle() {