diff options
| author | 2021-04-26 15:33:43 -0400 | |
|---|---|---|
| committer | 2021-04-27 11:39:48 -0400 | |
| commit | aa34cf942c8ba9e40b8567add32a26085bc16c6c (patch) | |
| tree | 96b3b5fea572ddf3d7a73611e2840157b881dcff | |
| parent | 920c7aa24a5c80289fef98794d023108f7aa8075 (diff) | |
Simplify animation code
Extract common code that animates QS tiles' elements.
Test: manual
Bug: 186251234
Change-Id: Iaa0f8de2638d0ed4c52ce00b94bde320cc2151c6
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java | 156 |
1 files changed, 69 insertions, 87 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java index 63aa94319e5d..2ad9d3b88893 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java @@ -80,7 +80,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha private QSExpansionPathInterpolator mQSExpansionPathInterpolator; private TouchAnimator mFirstPageAnimator; private TouchAnimator mFirstPageDelayedAnimator; - private TouchAnimator mTranslationXAnimator; private TouchAnimator mTranslationYAnimator; private TouchAnimator mNonfirstPageAnimator; private TouchAnimator mNonfirstPageDelayedAnimator; @@ -219,10 +218,29 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha 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() { mNeedsAnimatorUpdate = false; TouchAnimator.Builder firstPageBuilder = new Builder(); - TouchAnimator.Builder translationXBuilder = new Builder(); TouchAnimator.Builder translationYBuilder = new Builder(); Collection<QSTile> tiles = mHost.getTiles(); @@ -241,7 +259,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha QSTileLayout tileLayout = mQsPanelController.getTileLayout(); mAllViews.add((View) tileLayout); int height = mQs.getView() != null ? mQs.getView().getMeasuredHeight() : 0; - int width = mQs.getView() != null ? mQs.getView().getMeasuredWidth() : 0; int heightDiff = height - mQs.getHeader().getBottom() + mQs.getHeader().getPaddingBottom(); if (!mTranslateWhileExpanding) { @@ -268,82 +285,58 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha QSTileView quickTileView = mQuickQSPanelController.getTileView(tile); 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(loc2, tileView, view); - 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 - // (that goes from 0 to getOffsetTranslation) - int offsetWithQSBHTranslation = - yOffset - mQuickStatusBarHeader.getOffsetTranslation(); - translationYBuilder.addFloat(quickTileView, "translationY", 0, - offsetWithQSBHTranslation); - translationYBuilder.addFloat(tileView, "translationY", - -offsetWithQSBHTranslation, 0); - - if (mQQSTileHeightAnimator == null) { - mQQSTileHeightAnimator = new HeightExpansionAnimator(this, - quickTileView.getHeight(), tileView.getHeight()); - qqsTileHeight = quickTileView.getHeight(); - } - - mQQSTileHeightAnimator.addView(quickTileView); - - // Label containers - View qqsLabelContainer = quickTileView.getLabelContainer(); - View qsLabelContainer = tileView.getLabelContainer(); - - getRelativePosition(loc1, qqsLabelContainer, view); - getRelativePosition(loc2, qsLabelContainer, view); - yDiff = loc2[1] - loc1[1] - yOffset; - - translationYBuilder.addFloat(qqsLabelContainer, "translationY", 0, yDiff); - translationYBuilder.addFloat(qsLabelContainer, "translationY", -yDiff, 0); - mAllViews.add(qqsLabelContainer); - mAllViews.add(qsLabelContainer); - - // Secondary icon - View qqsSecondaryIcon = quickTileView.getSecondaryIcon(); - View qsSecondaryIcon = tileView.getSecondaryIcon(); - - getRelativePosition(loc1, qqsSecondaryIcon, view); - getRelativePosition(loc2, qsSecondaryIcon, view); - yDiff = loc2[1] - loc1[1] - yOffset; - - 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); + getRelativePosition(loc1, quickTileView, view); + getRelativePosition(loc2, tileView, view); + int yOffset = loc2[1] - loc1[1]; + + // Offset the translation animation on the views + // (that goes from 0 to getOffsetTranslation) + int offsetWithQSBHTranslation = + yOffset - mQuickStatusBarHeader.getOffsetTranslation(); + translationYBuilder.addFloat(quickTileView, "translationY", 0, + offsetWithQSBHTranslation); + translationYBuilder.addFloat(tileView, "translationY", + -offsetWithQSBHTranslation, 0); + + if (mQQSTileHeightAnimator == null) { + mQQSTileHeightAnimator = new HeightExpansionAnimator(this, + quickTileView.getHeight(), tileView.getHeight()); + qqsTileHeight = quickTileView.getHeight(); } + mQQSTileHeightAnimator.addView(quickTileView); + + // Icons + translateContent( + quickTileView.getIcon(), + tileView.getIcon(), + view, + yOffset, + loc1, + translationYBuilder + ); + + // Label containers + translateContent( + quickTileView.getLabelContainer(), + tileView.getLabelContainer(), + view, + yOffset, + loc1, + translationYBuilder + ); + + // Secondary icon + translateContent( + quickTileView.getSecondaryIcon(), + tileView.getSecondaryIcon(), + view, + yOffset, + loc1, + translationYBuilder + ); + mQuickQsViews.add(tileView); - mAllViews.add(tileView.getIcon()); mAllViews.add(quickTileView); } else if (mFullRows && isIconInAnimatedRow(count)) { @@ -406,17 +399,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha if (mQsPanelController.getDivider() != null) { 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()); - mTranslationXAnimator = translationXBuilder.build(); mTranslationYAnimator = translationYBuilder.build(); if (mQQSTileHeightAnimator != null) { mQQSTileHeightAnimator.setInterpolator( @@ -489,7 +472,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha mQuickQsPanel.setAlpha(1); mFirstPageAnimator.setPosition(position); mFirstPageDelayedAnimator.setPosition(position); - mTranslationXAnimator.setPosition(position); mTranslationYAnimator.setPosition(position); if (mBrightnessAnimator != null) { mBrightnessAnimator.setPosition(position); |