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

Commit dfc72305 authored by Dave Mankoff's avatar Dave Mankoff
Browse files

4/N Add QSPanelControllerBase

Adds QSPanelControllerBase and QuickQSPanelController. Moved all the
onAttachToWindow functionality into the controllers.

Test: manaul && atest SystemUITests
Bug: 168904199
Change-Id: Ia3d8fe89667768780cc175e1ee93ed9c877a6594
parent e5712bb4
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -98,6 +98,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
    private int mLastViewHeight;
    private float mLastHeaderTranslation;
    private QSPanelController mQSPanelController;
    private QuickQSPanelController mQuickQSPanelController;

    @Inject
    public QSFragment(RemoteInputQuickSettingsDisabler remoteInputQsDisabler,
@@ -126,6 +127,10 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        QSFragmentComponent qsFragmentComponent = mQsComponentFactory.create(this);
        mQSPanelController = qsFragmentComponent.getQSPanelController();
        mQuickQSPanelController = qsFragmentComponent.getQuickQSPanelController();

        mQSPanelController.init();
        mQuickQSPanelController.init();

        mQSPanelScrollView = view.findViewById(R.id.expanded_qs_scroll_view);
        mQSPanelScrollView.addOnLayoutChangeListener(
@@ -253,7 +258,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
    }

    public void setHost(QSTileHost qsh) {
        mQSPanelController.setHost(qsh, mQSCustomizer);
        mQSPanelController.setCustomizer(mQSCustomizer);
        mHeader.setQSPanel(mQSPanelController.getView());
        mFooter.setQSPanel(mQSPanelController.getView());
        mQSDetail.setHost(qsh);
+4 −24
Original line number Diff line number Diff line
@@ -324,27 +324,8 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
        return mCustomizePanel != null && mCustomizePanel.isCustomizing();
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        final TunerService tunerService = Dependency.get(TunerService.class);
        tunerService.addTunable(this, QS_SHOW_BRIGHTNESS);

        if (mHost != null) {
            setTiles(mHost.getTiles());
        }
        if (mBrightnessMirrorController != null) {
            mBrightnessMirrorController.addCallback(this);
        }
        mDumpManager.registerDumpable(getDumpableTag(), this);
    }

    @Override
    protected void onDetachedFromWindow() {
        Dependency.get(TunerService.class).removeTunable(this);
        if (mHost != null) {
            mHost.removeCallback(this);
        }
        if (mTileLayout != null) {
            mTileLayout.setListening(false);
        }
@@ -352,10 +333,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
            record.tile.removeCallbacks();
        }
        mRecords.clear();
        if (mBrightnessMirrorController != null) {
            mBrightnessMirrorController.removeCallback(this);
        }
        mDumpManager.unregisterDumpable(getDumpableTag());
        super.onDetachedFromWindow();
    }

@@ -422,10 +399,13 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne
        mCallback = callback;
    }

    public void setHost(QSTileHost host, QSCustomizer customizer) {
    void setHost(QSTileHost host) {
        mHost = host;
        mHost.addCallback(this);
        setTiles(mHost.getTiles());
    }

    void setCustomizer(QSCustomizer customizer) {
        mCustomizePanel = customizer;
        if (mCustomizePanel != null) {
            mCustomizePanel.setHost(mHost);
+25 −8
Original line number Diff line number Diff line
@@ -16,18 +16,21 @@

package com.android.systemui.qs;

import static com.android.systemui.qs.QSPanel.QS_SHOW_BRIGHTNESS;

import android.annotation.NonNull;
import android.content.ComponentName;
import android.content.res.Configuration;
import android.view.ViewGroup;

import com.android.systemui.R;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.media.MediaHost;
import com.android.systemui.qs.customize.QSCustomizer;
import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.settings.BrightnessController;
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
import com.android.systemui.util.ViewController;
import com.android.systemui.tuner.TunerService;

import javax.inject.Inject;

@@ -35,8 +38,9 @@ import javax.inject.Inject;
 * Controller for {@link QSPanel}.
 */
@QSScope
public class QSPanelController extends ViewController<QSPanel> {
public class QSPanelController extends QSPanelControllerBase<QSPanel> {
    private final QSSecurityFooter mQsSecurityFooter;
    private final TunerService mTunerService;
    private final BrightnessController mBrightnessController;

    private final QSPanel.OnConfigurationChangedListener mOnConfigurationChangedListener =
@@ -50,19 +54,24 @@ public class QSPanelController extends ViewController<QSPanel> {
            }
        }
    };
    private BrightnessMirrorController mBrightnessMirrorController;

    @Inject
    QSPanelController(QSPanel view, QSSecurityFooter qsSecurityFooter,
    QSPanelController(QSPanel view, QSSecurityFooter qsSecurityFooter, TunerService tunerService,
            QSTileHost qstileHost, DumpManager dumpManager,
            BrightnessController.Factory brightnessControllerFactory) {
        super(view);
        super(view, qstileHost, dumpManager);
        mQsSecurityFooter = qsSecurityFooter;

        mTunerService = tunerService;
        mQsSecurityFooter.setHostEnvironment(qstileHost);
        mBrightnessController = brightnessControllerFactory.create(
                mView.findViewById(R.id.brightness_slider));
    }

    @Override
    protected void onViewAttached() {
        super.onViewAttached();
        mTunerService.addTunable(mView, QS_SHOW_BRIGHTNESS);
        mView.updateResources();
        if (mView.isListening()) {
            refreshAllTiles();
@@ -71,11 +80,19 @@ public class QSPanelController extends ViewController<QSPanel> {
        mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener);
        mView.setSecurityFooter(mQsSecurityFooter.getView());
        mView.switchTileLayout(true);
        if (mBrightnessMirrorController != null) {
            mBrightnessMirrorController.addCallback(mView);
        }
    }

    @Override
    protected void onViewDetached() {
        mTunerService.removeTunable(mView);
        mView.removeOnConfigurationChangedListener(mOnConfigurationChangedListener);
        if (mBrightnessMirrorController != null) {
            mBrightnessMirrorController.removeCallback(mView);
        }
        super.onViewDetached();
    }

    /** TODO(b/168904199): Remove this method once view is controllerized. */
@@ -95,9 +112,8 @@ public class QSPanelController extends ViewController<QSPanel> {
    }

    /** */
    public void setHost(QSTileHost host, QSCustomizer customizer) {
        mView.setHost(host, customizer);
        mQsSecurityFooter.setHostEnvironment(host);
    public void setCustomizer(QSCustomizer customizer) {
        mView.setCustomizer(customizer);
    }

    /** */
@@ -150,6 +166,7 @@ public class QSPanelController extends ViewController<QSPanel> {

    /** */
    public void setBrightnessMirror(BrightnessMirrorController brightnessMirrorController) {
        mBrightnessMirrorController = brightnessMirrorController;
        mView.setBrightnessMirror(brightnessMirrorController);
    }

+44 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.qs;

import com.android.systemui.dump.DumpManager;
import com.android.systemui.util.ViewController;

abstract class QSPanelControllerBase<T extends QSPanel> extends ViewController<T> {
    private final QSTileHost mHost;
    private final DumpManager mDumpManager;

    protected QSPanelControllerBase(T view, QSTileHost host, DumpManager dumpManager) {
        super(view);
        mHost = host;
        mDumpManager = dumpManager;
        mView.setHost(mHost);
    }

    @Override
    protected void onViewAttached() {
        mView.setTiles(mHost.getTiles());
        mDumpManager.registerDumpable(mView.getDumpableTag(), mView);
    }

    @Override
    protected void onViewDetached() {
        mHost.removeCallback(mView);
        mDumpManager.unregisterDumpable(mView.getDumpableTag());
    }
}
+0 −24
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import android.view.View;
import android.widget.LinearLayout;

import com.android.internal.logging.UiEventLogger;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.media.MediaHierarchyManager;
@@ -36,10 +35,7 @@ import com.android.systemui.media.MediaHost;
import com.android.systemui.plugins.qs.QSTile;
import com.android.systemui.plugins.qs.QSTile.SignalState;
import com.android.systemui.plugins.qs.QSTile.State;
import com.android.systemui.qs.customize.QSCustomizer;
import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;

import java.util.ArrayList;
import java.util.Collection;
@@ -121,16 +117,9 @@ public class QuickQSPanel extends QSPanel {
        // QS Panel is setting a top padding by default, which we don't need.
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        Dependency.get(TunerService.class).addTunable(mNumTiles, NUM_QUICK_TILES);
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        Dependency.get(TunerService.class).removeTunable(mNumTiles);
    }

    @Override
@@ -160,12 +149,6 @@ public class QuickQSPanel extends QSPanel {
        super.drawTile(r, state);
    }

    @Override
    public void setHost(QSTileHost host, QSCustomizer customizer) {
        super.setHost(host, customizer);
        setTiles(mHost.getTiles());
    }

    public void setMaxTiles(int maxTiles) {
        mMaxTiles = maxTiles;
        if (mHost != null) {
@@ -193,13 +176,6 @@ public class QuickQSPanel extends QSPanel {
        super.setTiles(quickTiles, true);
    }

    private final Tunable mNumTiles = new Tunable() {
        @Override
        public void onTuningChanged(String key, String newValue) {
            setMaxTiles(parseNumTiles(newValue));
        }
    };

    public int getNumQuickTiles() {
        return mMaxTiles;
    }
Loading