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

Commit 3834b11c authored by Dave Mankoff's avatar Dave Mankoff
Browse files

5/N Move QS Tile tracking logic into QSPanelControllerBase.

This is a big, sort of hairy CL, but is a big push to completing this
series. One notable thing you see happen here is a lot less calls to
methods liks "setHost" which late-bind various member variables.
Classes such as QSTileHost are available to be injected at constrction
time and this CL starts taking advantage of that, removing the need
for a lot of null checks.

Bug: 168904199
Test: atest SystemUITests && manual
Change-Id: Ib4768d10e26debdea8d43daee61d2501ed250e67
parent dfc72305
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ class DoubleLineTileLayout(
        private const val NUM_LINES = 2
    }

    protected val mRecords = ArrayList<QSPanel.TileRecord>()
    protected val mRecords = ArrayList<QSPanelControllerBase.TileRecord>()
    private var _listening = false
    private var smallTileSize = 0
    private val twoLineHeight
@@ -50,17 +50,17 @@ class DoubleLineTileLayout(
        updateResources()
    }

    override fun addTile(tile: QSPanel.TileRecord) {
    override fun addTile(tile: QSPanelControllerBase.TileRecord) {
        mRecords.add(tile)
        tile.tile.setListening(this, _listening)
        addTileView(tile)
    }

    protected fun addTileView(tile: QSPanel.TileRecord) {
    protected fun addTileView(tile: QSPanelControllerBase.TileRecord) {
        addView(tile.tileView)
    }

    override fun removeTile(tile: QSPanel.TileRecord) {
    override fun removeTile(tile: QSPanelControllerBase.TileRecord) {
        mRecords.remove(tile)
        tile.tile.setListening(this, false)
        removeView(tile.tileView)
@@ -72,7 +72,7 @@ class DoubleLineTileLayout(
        super.removeAllViews()
    }

    override fun getOffsetTop(tile: QSPanel.TileRecord?) = top
    override fun getOffsetTop(tile: QSPanelControllerBase.TileRecord?) = top

    override fun updateResources(): Boolean {
        with(mContext.resources) {
+1 −1
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ import com.android.internal.logging.UiEventLogger;
import com.android.systemui.R;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.qs.QSPanel.QSTileLayout;
import com.android.systemui.qs.QSPanel.TileRecord;
import com.android.systemui.qs.QSPanelControllerBase.TileRecord;

import java.util.ArrayList;
import java.util.Set;
+12 −13
Original line number Diff line number Diff line
@@ -58,6 +58,8 @@ 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;
    private final QS mQs;

@@ -86,11 +88,17 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha

    @Inject
    public QSAnimator(QS qs, QuickQSPanel quickPanel, QSPanel panel,
            QSPanelController qsPanelController, QuickQSPanelController quickQSPanelController,
            QSTileHost qsTileHost,
            QSSecurityFooter securityFooter) {
        mQs = qs;
        mQuickQsPanel = quickPanel;
        mQsPanel = panel;
        mQsPanelController = qsPanelController;
        mQuickQSPanelController = quickQSPanelController;
        mSecurityFooter = securityFooter;
        mHost = qsTileHost;
        mHost.addCallback(this);
        mQsPanel.addOnAttachStateChangeListener(this);
        qs.getView().addOnLayoutChangeListener(this);
        if (mQsPanel.isAttachedToWindow()) {
@@ -143,12 +151,6 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
                && !mShowCollapsedOnKeyguard ? View.INVISIBLE : View.VISIBLE);
    }

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

    @Override
    public void onViewAttachedToWindow(View v) {
        Dependency.get(TunerService.class).addTunable(this, ALLOW_FANCY_ANIMATION,
@@ -157,9 +159,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha

    @Override
    public void onViewDetachedFromWindow(View v) {
        if (mHost != null) {
        mHost.removeCallback(this);
        }
        Dependency.get(TunerService.class).removeTunable(this);
    }

@@ -194,8 +194,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
        TouchAnimator.Builder translationXBuilder = new Builder();
        TouchAnimator.Builder translationYBuilder = new Builder();

        if (mQsPanel.getHost() == null) return;
        Collection<QSTile> tiles = mQsPanel.getHost().getTiles();
        Collection<QSTile> tiles = mHost.getTiles();
        int count = 0;
        int[] loc1 = new int[2];
        int[] loc2 = new int[2];
@@ -215,7 +214,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
        firstPageBuilder.addFloat(tileLayout, "translationY", heightDiff, 0);

        for (QSTile tile : tiles) {
            QSTileView tileView = mQsPanel.getTileView(tile);
            QSTileView tileView = mQsPanelController.getTileView(tile);
            if (tileView == null) {
                Log.e(TAG, "tileView is null " + tile.getTileSpec());
                continue;
@@ -226,7 +225,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha
            // This case: less tiles to animate in small displays.
            if (count < mQuickQsPanel.getTileLayout().getNumVisibleTiles() && mAllowFancy) {
                // Quick tiles.
                QSTileView quickTileView = mQuickQsPanel.getTileView(tile);
                QSTileView quickTileView = mQuickQSPanelController.getTileView(tile);
                if (quickTileView == null) continue;

                lastX = loc1[0];
+10 −24
Original line number Diff line number Diff line
@@ -16,19 +16,21 @@

package com.android.systemui.qs;

import com.android.systemui.R;
import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.util.ViewController;

import javax.inject.Inject;

class QSContainerImplController extends ViewController<QSContainerImpl> {
/** */
@QSScope
public class QSContainerImplController extends ViewController<QSContainerImpl> {
    private final QuickStatusBarHeaderController mQuickStatusBarHeaderController;

    private QSContainerImplController(QSContainerImpl view,
            QuickStatusBarHeaderController.Builder quickStatusBarHeaderControllerBuilder) {
    @Inject
    QSContainerImplController(QSContainerImpl view,
            QuickStatusBarHeaderController quickStatusBarHeaderController) {
        super(view);
        mQuickStatusBarHeaderController = quickStatusBarHeaderControllerBuilder
                .setQuickStatusBarHeader(mView.findViewById(R.id.header)).build();
        mQuickStatusBarHeaderController = quickStatusBarHeaderController;
    }

    @Override
@@ -49,23 +51,7 @@ class QSContainerImplController extends ViewController<QSContainerImpl> {
    protected void onViewDetached() {
    }

    static class Builder {
        private final QuickStatusBarHeaderController.Builder mQuickStatusBarHeaderControllerBuilder;
        private QSContainerImpl mView;

        @Inject
        Builder(
                QuickStatusBarHeaderController.Builder quickStatusBarHeaderControllerBuilder) {
            mQuickStatusBarHeaderControllerBuilder = quickStatusBarHeaderControllerBuilder;
        }

        public Builder setQSContainerImpl(QSContainerImpl view) {
            mView = view;
            return this;
        }

        public QSContainerImplController build() {
            return new QSContainerImplController(mView, mQuickStatusBarHeaderControllerBuilder);
        }
    public QSContainerImpl getView() {
        return mView;
    }
}
+11 −17
Original line number Diff line number Diff line
@@ -35,7 +35,6 @@ import androidx.annotation.VisibleForTesting;

import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.R.id;
import com.android.systemui.media.MediaHost;
import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
@@ -83,7 +82,6 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
    private final RemoteInputQuickSettingsDisabler mRemoteInputQuickSettingsDisabler;
    private final InjectionInflationController mInjectionInflater;
    private final QSFragmentComponent.Factory mQsComponentFactory;
    private final QSContainerImplController.Builder mQSContainerImplControllerBuilder;
    private final QSTileHost mHost;
    private boolean mShowCollapsedOnKeyguard;
    private boolean mLastKeyguardAndExpanded;
@@ -104,12 +102,10 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
    public QSFragment(RemoteInputQuickSettingsDisabler remoteInputQsDisabler,
            InjectionInflationController injectionInflater, QSTileHost qsTileHost,
            StatusBarStateController statusBarStateController, CommandQueue commandQueue,
            QSFragmentComponent.Factory qsComponentFactory,
            QSContainerImplController.Builder qsContainerImplControllerBuilder) {
            QSFragmentComponent.Factory qsComponentFactory) {
        mRemoteInputQuickSettingsDisabler = remoteInputQsDisabler;
        mInjectionInflater = injectionInflater;
        mQsComponentFactory = qsComponentFactory;
        mQSContainerImplControllerBuilder = qsContainerImplControllerBuilder;
        commandQueue.observe(getLifecycle(), this);
        mHost = qsTileHost;
        mStatusBarStateController = statusBarStateController;
@@ -147,12 +143,10 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
        mHeader = view.findViewById(R.id.header);
        mQSPanelController.setHeaderContainer(view.findViewById(R.id.header_text_container));
        mFooter = view.findViewById(R.id.qs_footer);
        mContainer = view.findViewById(id.quick_settings_container);

        mQSContainerImplController = mQSContainerImplControllerBuilder
                .setQSContainerImpl((QSContainerImpl) view)
                .build();
        mQSContainerImplController = qsFragmentComponent.getQSContainerImplController();
        mQSContainerImplController.init();
        mContainer = mQSContainerImplController.getView();

        mQSDetail.setQsPanel(mQSPanelController.getView(), mHeader, (View) mFooter);
        mQSAnimator = qsFragmentComponent.getQSAnimator();
@@ -262,10 +256,6 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
        mHeader.setQSPanel(mQSPanelController.getView());
        mFooter.setQSPanel(mQSPanelController.getView());
        mQSDetail.setHost(qsh);

        if (mQSAnimator != null) {
            mQSAnimator.setHost(qsh);
        }
    }

    @Override
@@ -420,8 +410,12 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
        float panelTranslationY = translationScaleY * heightDiff;

        // Let the views animate their contents correctly by giving them the necessary context.
        mHeader.setExpansion(onKeyguardAndExpanded, expansion,
                panelTranslationY);
        mHeader.setExpansion(onKeyguardAndExpanded, expansion, panelTranslationY);
        if (expansion < 1 && expansion > 0.99) {
            if (mQuickQSPanelController.switchTileLayout(false)) {
                mHeader.updateResources();
            }
        }
        mFooter.setExpansion(onKeyguardAndExpanded ? 1 : expansion);
        mQSPanelController.getQsTileRevealController().setExpansion(expansion);
        mQSPanelController.getTileLayout().setExpansion(expansion);
@@ -568,8 +562,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
    }

    /**
     * The height this view wants to be. This is different from {@link #getMeasuredHeight} such that
     * during closing the detail panel, this already returns the smaller height.
     * The height this view wants to be. This is different from {@link View#getMeasuredHeight} such
     * that during closing the detail panel, this already returns the smaller height.
     */
    @Override
    public int getDesiredHeight() {
Loading