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 Original line Diff line number Diff line
@@ -33,7 +33,7 @@ class DoubleLineTileLayout(
        private const val NUM_LINES = 2
        private const val NUM_LINES = 2
    }
    }


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


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


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


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


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


    override fun updateResources(): Boolean {
    override fun updateResources(): Boolean {
        with(mContext.resources) {
        with(mContext.resources) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -26,7 +26,7 @@ import com.android.internal.logging.UiEventLogger;
import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.qs.QSPanel.QSTileLayout;
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.ArrayList;
import java.util.Set;
import java.util.Set;
+12 −13
Original line number Original line 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 ArrayList<View> mQuickQsViews = new ArrayList<>();
    private final QuickQSPanel mQuickQsPanel;
    private final QuickQSPanel mQuickQsPanel;
    private final QSPanel mQsPanel;
    private final QSPanel mQsPanel;
    private final QSPanelController mQsPanelController;
    private final QuickQSPanelController mQuickQSPanelController;
    private final QSSecurityFooter mSecurityFooter;
    private final QSSecurityFooter mSecurityFooter;
    private final QS mQs;
    private final QS mQs;


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


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


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

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


    @Override
    @Override
    public void onViewDetachedFromWindow(View v) {
    public void onViewDetachedFromWindow(View v) {
        if (mHost != null) {
        mHost.removeCallback(this);
        mHost.removeCallback(this);
        }
        Dependency.get(TunerService.class).removeTunable(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 translationXBuilder = new Builder();
        TouchAnimator.Builder translationYBuilder = new Builder();
        TouchAnimator.Builder translationYBuilder = new Builder();


        if (mQsPanel.getHost() == null) return;
        Collection<QSTile> tiles = mHost.getTiles();
        Collection<QSTile> tiles = mQsPanel.getHost().getTiles();
        int count = 0;
        int count = 0;
        int[] loc1 = new int[2];
        int[] loc1 = new int[2];
        int[] loc2 = 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);
        firstPageBuilder.addFloat(tileLayout, "translationY", heightDiff, 0);


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


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


package com.android.systemui.qs;
package com.android.systemui.qs;


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


import javax.inject.Inject;
import javax.inject.Inject;


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


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


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


    static class Builder {
    public QSContainerImpl getView() {
        private final QuickStatusBarHeaderController.Builder mQuickStatusBarHeaderControllerBuilder;
        return mView;
        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);
        }
    }
    }
}
}
+11 −17
Original line number Original line Diff line number Diff line
@@ -35,7 +35,6 @@ import androidx.annotation.VisibleForTesting;


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


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


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

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


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


        // Let the views animate their contents correctly by giving them the necessary context.
        // Let the views animate their contents correctly by giving them the necessary context.
        mHeader.setExpansion(onKeyguardAndExpanded, expansion,
        mHeader.setExpansion(onKeyguardAndExpanded, expansion, panelTranslationY);
                panelTranslationY);
        if (expansion < 1 && expansion > 0.99) {
            if (mQuickQSPanelController.switchTileLayout(false)) {
                mHeader.updateResources();
            }
        }
        mFooter.setExpansion(onKeyguardAndExpanded ? 1 : expansion);
        mFooter.setExpansion(onKeyguardAndExpanded ? 1 : expansion);
        mQSPanelController.getQsTileRevealController().setExpansion(expansion);
        mQSPanelController.getQsTileRevealController().setExpansion(expansion);
        mQSPanelController.getTileLayout().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
     * The height this view wants to be. This is different from {@link View#getMeasuredHeight} such
     * during closing the detail panel, this already returns the smaller height.
     * that during closing the detail panel, this already returns the smaller height.
     */
     */
    @Override
    @Override
    public int getDesiredHeight() {
    public int getDesiredHeight() {
Loading