diff options
| author | 2016-03-04 15:52:45 +0000 | |
|---|---|---|
| committer | 2016-03-04 15:52:47 +0000 | |
| commit | 84606d704a5b51da270ad36285f5b16aa7674568 (patch) | |
| tree | fc6a308da342e1a5357716c1836ba021a93ddf02 | |
| parent | 10b6e07717f2cd80952200ddb6dabe20052e9eea (diff) | |
| parent | 8fb7787cf9628284c75d873850a41b660b568348 (diff) | |
Merge "Make QS do simpler anim on lock screen" into nyc-dev
5 files changed, 122 insertions, 10 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java index 8ccf60d38650..24b45cc1030b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java @@ -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; diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java index c643d6708adb..6137349e179f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java @@ -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();          } -        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 diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainer.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainer.java index c59da8d8baf7..c0c1e4d24359 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSContainer.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainer.java @@ -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();      } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java index 8b826eea4285..f8a57d08e5b9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java @@ -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; @@ -52,6 +56,18 @@ public class QuickQSPanel extends QSPanel {      }      @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; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java index 256cc6b6ae3f..326ca2b121a0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java @@ -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());  |