Use QSPanelController in QSAnimator.

The animator doesn't want the view, but rather some of the views
contained within. At times, it simply wants some of the functionality
that the view provides that will be better encapsulated by its
controller.

Replaced Dependency.get(TunerService.class) with an injected
instance.

Injected an executor for the class to use rather than relying on
QSPanels implicit handler.

Bug: 168904199
Test: manual
Change-Id: Id228a9dd921fbb11ed2d1d56c93d37d8ceda1cd3
This commit is contained in:
Dave Mankoff
2020-10-20 16:14:17 -04:00
parent ca8c768955
commit 074f769adb
4 changed files with 68 additions and 39 deletions

View File

@@ -19,7 +19,7 @@ import android.view.View;
import android.view.View.OnAttachStateChangeListener;
import android.view.View.OnLayoutChangeListener;
import com.android.systemui.Dependency;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.plugins.qs.QSTileView;
@@ -34,6 +34,7 @@ import com.android.systemui.tuner.TunerService.Tunable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.concurrent.Executor;
import javax.inject.Inject;
@@ -57,7 +58,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
*/
private final ArrayList<View> mQuickQsViews = new ArrayList<>();
private final QuickQSPanel mQuickQsPanel;
private final QSPanel mQsPanel;
private final QSPanelController mQsPanelController;
private final QuickQSPanelController mQuickQSPanelController;
private final QSSecurityFooter mSecurityFooter;
@@ -83,34 +83,36 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
private boolean mFullRows;
private int mNumQuickTiles;
private float mLastPosition;
private QSTileHost mHost;
private final QSTileHost mHost;
private final Executor mExecutor;
private final TunerService mTunerService;
private boolean mShowCollapsedOnKeyguard;
@Inject
public QSAnimator(QS qs, QuickQSPanel quickPanel, QSPanel panel,
QSPanelController qsPanelController, QuickQSPanelController quickQSPanelController,
QSTileHost qsTileHost,
QSSecurityFooter securityFooter) {
public QSAnimator(QS qs, QuickQSPanel quickPanel, QSPanelController qsPanelController,
QuickQSPanelController quickQSPanelController, QSTileHost qsTileHost,
QSSecurityFooter securityFooter, @Main Executor executor, TunerService tunerService) {
mQs = qs;
mQuickQsPanel = quickPanel;
mQsPanel = panel;
mQsPanelController = qsPanelController;
mQuickQSPanelController = quickQSPanelController;
mSecurityFooter = securityFooter;
mHost = qsTileHost;
mExecutor = executor;
mTunerService = tunerService;
mHost.addCallback(this);
mQsPanel.addOnAttachStateChangeListener(this);
mQsPanelController.addOnAttachStateChangeListener(this);
qs.getView().addOnLayoutChangeListener(this);
if (mQsPanel.isAttachedToWindow()) {
if (mQsPanelController.isAttachedToWindow()) {
onViewAttachedToWindow(null);
}
QSTileLayout tileLayout = mQsPanel.getTileLayout();
QSTileLayout tileLayout = mQsPanelController.getTileLayout();
if (tileLayout instanceof PagedTileLayout) {
mPagedLayout = ((PagedTileLayout) tileLayout);
} else {
Log.w(TAG, "QS Not using page layout");
}
panel.setPageListener(this);
mQsPanelController.setPageListener(this);
}
public void onRtlChanged() {
@@ -153,14 +155,14 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
@Override
public void onViewAttachedToWindow(View v) {
Dependency.get(TunerService.class).addTunable(this, ALLOW_FANCY_ANIMATION,
mTunerService.addTunable(this, ALLOW_FANCY_ANIMATION,
MOVE_FULL_ROWS, QuickQSPanel.NUM_QUICK_TILES);
}
@Override
public void onViewDetachedFromWindow(View v) {
mHost.removeCallback(this);
Dependency.get(TunerService.class).removeTunable(this);
mTunerService.removeTunable(this);
}
@Override
@@ -205,7 +207,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
mAllViews.clear();
mQuickQsViews.clear();
QSTileLayout tileLayout = mQsPanel.getTileLayout();
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;
@@ -223,7 +225,8 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
View view = mQs.getView();
// This case: less tiles to animate in small displays.
if (count < mQuickQsPanel.getTileLayout().getNumVisibleTiles() && mAllowFancy) {
if (count < mQuickQSPanelController.getTileLayout().getNumVisibleTiles()
&& mAllowFancy) {
// Quick tiles.
QSTileView quickTileView = mQuickQSPanelController.getTileView(tile);
if (quickTileView == null) continue;
@@ -254,7 +257,8 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
translationYBuilder.addFloat(quickTileView, "translationY", 0, yDiff);
// xDiff is negative here and this makes it "more" negative
final int translationX = mQsPanel.isLayoutRtl() ? xDiff - width : xDiff + width;
final int translationX =
mQsPanelController.isLayoutRtl() ? xDiff - width : xDiff + width;
translationXBuilder.addFloat(quickTileView, "translationX", 0,
translationX);
}
@@ -288,7 +292,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
if (mAllowFancy) {
// Make brightness appear static position and alpha in through second half.
View brightness = mQsPanel.getBrightnessView();
View brightness = mQsPanelController.getBrightnessView();
if (brightness != null) {
firstPageBuilder.addFloat(brightness, "translationY", heightDiff, 0);
mBrightnessAnimator = new TouchAnimator.Builder()
@@ -311,13 +315,13 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
// Fade in the security footer and the divider as we reach the final position
builder = new Builder().setStartDelay(EXPANDED_TILE_DELAY);
builder.addFloat(mSecurityFooter.getView(), "alpha", 0, 1);
if (mQsPanel.getDivider() != null) {
builder.addFloat(mQsPanel.getDivider(), "alpha", 0, 1);
if (mQsPanelController.getDivider() != null) {
builder.addFloat(mQsPanelController.getDivider(), "alpha", 0, 1);
}
mAllPagesDelayedAnimator = builder.build();
mAllViews.add(mSecurityFooter.getView());
if (mQsPanel.getDivider() != null) {
mAllViews.add(mQsPanel.getDivider());
if (mQsPanelController.getDivider() != null) {
mAllViews.add(mQsPanelController.getDivider());
}
float px = 0;
@@ -447,14 +451,14 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
int oldTop, int oldRight, int oldBottom) {
mQsPanel.post(mUpdateAnimators);
mExecutor.execute(mUpdateAnimators);
}
@Override
public void onTilesChanged() {
// Give the QS panels a moment to generate their new tiles, then create all new animators
// hooked up to the new views.
mQsPanel.post(mUpdateAnimators);
mExecutor.execute(mUpdateAnimators);
}
private final TouchAnimator.Listener mNonFirstPageListener =
@@ -470,11 +474,8 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
}
};
private Runnable mUpdateAnimators = new Runnable() {
@Override
public void run() {
updateAnimators();
setCurrentPosition();
}
private final Runnable mUpdateAnimators = () -> {
updateAnimators();
setCurrentPosition();
};
}

View File

@@ -119,10 +119,6 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
mView.setHeaderContainer(headerContainer);
}
public QSPanel.QSTileLayout getTileLayout() {
return mView.getTileLayout();
}
/** */
public void setVisibility(int visibility) {
mView.setVisibility(visibility);
@@ -209,4 +205,22 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
public void setGridContentVisibility(boolean visible) {
mView.setGridContentVisibility(visible);
}
public boolean isLayoutRtl() {
return mView.isLayoutRtl();
}
public View getBrightnessView() {
return mView.getBrightnessView();
}
public View getDivider() {
return mView.getDivider();
}
/** */
public void setPageListener(PagedTileLayout.PageListener listener) {
mView.setPageListener(listener);
}
}

View File

@@ -263,6 +263,10 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
}
}
public QSPanel.QSTileLayout getTileLayout() {
return mView.getTileLayout();
}
/** */
public static final class TileRecord extends QSPanel.Record {
public QSTile tile;

View File

@@ -76,12 +76,10 @@ public abstract class ViewController<T extends View> {
onInit();
mInited = true;
if (mView != null) {
if (mView.isAttachedToWindow()) {
mOnAttachStateListener.onViewAttachedToWindow(mView);
}
mView.addOnAttachStateChangeListener(mOnAttachStateListener);
if (isAttachedToWindow()) {
mOnAttachStateListener.onViewAttachedToWindow(mView);
}
addOnAttachStateChangeListener(mOnAttachStateListener);
}
/**
@@ -100,6 +98,17 @@ public abstract class ViewController<T extends View> {
return mView.getResources();
}
public boolean isAttachedToWindow() {
return mView != null && mView.isAttachedToWindow();
}
/** Add an OnAttachStateListener to the view. Does nothing if the view is null. */
public void addOnAttachStateChangeListener(View.OnAttachStateChangeListener listener) {
if (mView != null) {
mView.addOnAttachStateChangeListener(listener);
}
}
/**
* Called when the view is attached and a call to {@link #init()} has been made in either order.
*/
@@ -109,4 +118,5 @@ public abstract class ViewController<T extends View> {
* Called when the view is detached.
*/
protected abstract void onViewDetached();
}