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

Commit 7c6632e8 authored by Jason Monk's avatar Jason Monk Committed by android-build-merger
Browse files

Merge "Make QS do simpler anim on lock screen" into nyc-dev

am: 84606d70

* commit '84606d70':
  Make QS do simpler anim on lock screen
parents 575d06e5 84606d70
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -167,6 +167,11 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {
        }
    };

    public int getColumnCount() {
        if (mPages.size() == 0) return 0;
        return mPages.get(0).mColumns;
    }

    public static class TilePage extends TileLayout {
        private int mMaxRows = 3;

+88 −9
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ package com.android.systemui.qs;

import android.util.Log;
import android.view.View;
import android.view.View.OnAttachStateChangeListener;
import android.view.View.OnLayoutChangeListener;
import android.view.animation.PathInterpolator;
import android.widget.TextView;
@@ -25,14 +26,20 @@ import com.android.systemui.qs.QSTile.Host.Callback;
import com.android.systemui.qs.TouchAnimator.Builder;
import com.android.systemui.qs.TouchAnimator.Listener;
import com.android.systemui.statusbar.phone.QSTileHost;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;

import java.util.ArrayList;
import java.util.Collection;

public class QSAnimator implements Callback, PageListener, Listener, OnLayoutChangeListener {
public class QSAnimator implements Callback, PageListener, Listener, OnLayoutChangeListener,
        OnAttachStateChangeListener, Tunable {

    private static final String TAG = "QSAnimator";

    private static final String ALLOW_FANCY_ANIMATION = "sysui_qs_fancy_anim";
    private static final String MOVE_FULL_ROWS = "sysui_qs_move_whole_rows";

    public static final PathInterpolator TRANSLATION_Y_INTERPOLATOR =
            new PathInterpolator(.1f, .3f, 1, 1);

@@ -44,34 +51,77 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
    private final QSPanel mQsPanel;
    private final QSContainer mQsContainer;

    private PagedTileLayout mPagedLayout;

    private boolean mOnFirstPage = true;
    private TouchAnimator mFirstPageAnimator;
    private TouchAnimator mFirstPageDelayedAnimator;
    private TouchAnimator mTranslationYAnimator;
    private TouchAnimator mNonfirstPageAnimator;

    private boolean mOnKeyguard;

    private boolean mAllowFancy;
    private boolean mFullRows;
    private int mNumQuickTiles;

    public QSAnimator(QSContainer container, QuickQSPanel quickPanel, QSPanel panel) {
        mQsContainer = container;
        mQuickQsPanel = quickPanel;
        mQsPanel = panel;
        mQsPanel.addOnAttachStateChangeListener(this);
        container.addOnLayoutChangeListener(this);
        QSTileLayout tileLayout = mQsPanel.getTileLayout();
        if (tileLayout instanceof PagedTileLayout) {
            ((PagedTileLayout) tileLayout).setPageListener(this);
            mPagedLayout = ((PagedTileLayout) tileLayout);
            mPagedLayout.setPageListener(this);
        } else {
            Log.w(TAG, "QS Not using page layout");
        }
    }

    public void setOnKeyguard(boolean onKeyguard) {
        mOnKeyguard = onKeyguard;
        if (mOnKeyguard) {
            clearAnimationState();
        }
    }

    public void setHost(QSTileHost qsh) {
        qsh.addCallback(this);
    }

    @Override
    public void onViewAttachedToWindow(View v) {
        TunerService.get(mQsContainer.getContext()).addTunable(this, ALLOW_FANCY_ANIMATION,
                MOVE_FULL_ROWS, QuickQSPanel.NUM_QUICK_TILES);
    }

    @Override
    public void onViewDetachedFromWindow(View v) {
        TunerService.get(mQsContainer.getContext()).removeTunable(this);
    }

    @Override
    public void onTuningChanged(String key, String newValue) {
        if (ALLOW_FANCY_ANIMATION.equals(key)) {
            mAllowFancy = newValue == null || Integer.parseInt(newValue) != 0;
            if (!mAllowFancy) {
                clearAnimationState();
            }
        } else if (MOVE_FULL_ROWS.equals(key)) {
            mFullRows = newValue != null && Integer.parseInt(newValue) != 0;
        } else if (QuickQSPanel.NUM_QUICK_TILES.equals(key)) {
            mNumQuickTiles = QuickQSPanel.getNumQuickTiles(mQsContainer.getContext());
            clearAnimationState();
        }
        updateAnimators();
    }

    @Override
    public void onPageChanged(boolean isFirst) {
        if (mOnFirstPage == isFirst) return;
        if (!isFirst) {
            setPosition(1);
            clearAnimationState();
        }
        mOnFirstPage = isFirst;
@@ -85,6 +135,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
        int count = 0;
        int[] loc1 = new int[2];
        int[] loc2 = new int[2];
        int lastYDiff = 0;
        firstPageDelayedBuilder.setStartDelay(EXPANDED_TILE_DELAY);
        firstPageBuilder.setListener(this);
        translationYBuilder.setInterpolator(TRANSLATION_Y_INTERPOLATOR);
@@ -92,18 +143,20 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
        firstPageDelayedBuilder.addFloat(mQsPanel.getTileLayout(), "alpha", 0, 1);
        mAllViews.clear();
        mTopFiveQs.clear();
        mAllViews.add((View) mQsPanel.getTileLayout());
        for (QSTile<?> tile : tiles) {
            QSTileBaseView tileView = mQsPanel.getTileView(tile);
            final TextView label = ((QSTileView) tileView).getLabel();
            if (count++ < 5) {
            final View tileIcon = tileView.getIcon();
            if (count < mNumQuickTiles && mAllowFancy) {
                // Quick tiles.
                QSTileBaseView quickTileView = mQuickQsPanel.getTileView(tile);
                final View tileIcon = tileView.getIcon();

                getRelativePosition(loc1, quickTileView.getIcon(), mQsContainer);
                getRelativePosition(loc2, tileIcon, mQsContainer);
                final int xDiff = loc2[0] - loc1[0];
                final int yDiff = loc2[1] - loc1[1];
                lastYDiff = yDiff;
                // Move the quick tile right from its location to the new one.
                firstPageBuilder.addFloat(quickTileView, "translationX", 0, xDiff);
                translationYBuilder.addFloat(quickTileView, "translationY", 0, yDiff);
@@ -119,20 +172,38 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha

                mTopFiveQs.add(tileIcon);
                mAllViews.add(tileIcon);
                mAllViews.add(label);
                mAllViews.add(quickTileView);
            } else if (mFullRows && isIconInAnimatedRow(count)) {
                firstPageBuilder.addFloat(tileView, "translationY", mQsPanel.getHeight(), 0);
                translationYBuilder.addFloat(label, "translationY", -lastYDiff, 0);
                translationYBuilder.addFloat(tileIcon, "translationY", -lastYDiff, 0);
                mAllViews.add(tileIcon);
                mAllViews.add(label);
            }
            mAllViews.add(tileView);
            mAllViews.add(label);
            count++;
        }
        if (mAllowFancy) {
            mFirstPageAnimator = firstPageBuilder.build();
            mFirstPageDelayedAnimator = firstPageDelayedBuilder.build();
            mTranslationYAnimator = translationYBuilder.build();
        }
        mNonfirstPageAnimator = new TouchAnimator.Builder()
                .addFloat(mQuickQsPanel, "alpha", 1, 0)
                .setEndDelay(.5f)
                .build();
    }

    private boolean isIconInAnimatedRow(int count) {
        if (mPagedLayout == null) {
            return false;
        }
        final int columnCount = mPagedLayout.getColumnCount();
        return count < ((mNumQuickTiles + columnCount - 1) / columnCount) * columnCount;
    }

    private void getRelativePosition(int[] loc1, View view, View parent) {
        loc1[0] = 0 + view.getWidth() / 2;
        loc1[1] = 0;
@@ -148,7 +219,10 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha

    public void setPosition(float position) {
        if (mFirstPageAnimator == null) return;
        if (mOnFirstPage) {
        if (mOnKeyguard) {
            return;
        }
        if (mOnFirstPage && mAllowFancy) {
            mQuickQsPanel.setAlpha(1);
            mFirstPageAnimator.setPosition(position);
            mFirstPageDelayedAnimator.setPosition(position);
@@ -186,12 +260,17 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
    private void clearAnimationState() {
        final int N = mAllViews.size();
        mQuickQsPanel.setAlpha(0);
        mQuickQsPanel.setVisibility(View.VISIBLE);
        for (int i = 0; i < N; i++) {
            View v = mAllViews.get(i);
            v.setAlpha(1);
            v.setTranslationX(1);
            v.setTranslationY(1);
        }
        final int N2 = mTopFiveQs.size();
        for (int i = 0; i < N2; i++) {
            mTopFiveQs.get(i).setVisibility(View.VISIBLE);
        }
    }

    @Override
+1 −0
Original line number Diff line number Diff line
@@ -156,6 +156,7 @@ public class QSContainer extends FrameLayout {
    public void setKeyguardShowing(boolean keyguardShowing) {
        if (DEBUG) Log.d(TAG, "setKeyguardShowing " + keyguardShowing);
        mKeyguardShowing = keyguardShowing;
        mQSAnimator.setOnKeyguard(keyguardShowing);
        updateQsState();
    }

+28 −0
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@ import android.widget.Space;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile.SignalState;
import com.android.systemui.qs.QSTile.State;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;

import java.util.ArrayList;
import java.util.Collection;
@@ -35,6 +37,8 @@ import java.util.Collection;
 */
public class QuickQSPanel extends QSPanel {

    public static final String NUM_QUICK_TILES = "sysui_qqs_count";

    private int mMaxTiles;
    private QSPanel mFullPanel;
    private View mHeader;
@@ -51,6 +55,18 @@ public class QuickQSPanel extends QSPanel {
        addView((View) mTileLayout, 1 /* Between brightness and footer */);
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        TunerService.get(mContext).addTunable(mNumTiles, NUM_QUICK_TILES);
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        TunerService.get(mContext).removeTunable(mNumTiles);
    }

    @Override
    protected void createCustomizePanel() {
        // No customizing from the header.
@@ -86,6 +102,7 @@ public class QuickQSPanel extends QSPanel {

    public void setMaxTiles(int maxTiles) {
        mMaxTiles = maxTiles;
        setTiles(mHost.getTiles());
    }

    @Override
@@ -114,6 +131,17 @@ public class QuickQSPanel extends QSPanel {
        super.setTiles(quickTiles);
    }

    private final Tunable mNumTiles = new Tunable() {
        @Override
        public void onTuningChanged(String key, String newValue) {
            setMaxTiles(getNumQuickTiles(mContext));
        }
    };

    public static int getNumQuickTiles(Context context) {
        return TunerService.get(context).getValue(NUM_QUICK_TILES, 5);
    }

    private static class HeaderTileLayout extends LinearLayout implements QSTileLayout {

        private final Space mEndSpacer;
+0 −1
Original line number Diff line number Diff line
@@ -296,7 +296,6 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements
        mHost = host;
        host.setHeaderView(this);
        mHeaderQsPanel.setQSPanelAndHeader(mQsPanel, this);
        mHeaderQsPanel.setMaxTiles(5);
        mHeaderQsPanel.setHost(host);
        setUserInfoController(host.getUserInfoController());
        setBatteryController(host.getBatteryController());