Revert "Stop injecting QSPanel everywhere."

This reverts commit 42bd3c0834.

Reason for revert: Causing breakage in QSPanel and monitored tests.

Change-Id: I99cd110f58eb8f4c5faa6f7bef41e820654ea9df
This commit is contained in:
Michael Rosenfeld
2020-11-12 21:54:29 +00:00
parent 7a6e869b0b
commit bce234f3df
12 changed files with 75 additions and 105 deletions

View File

@@ -261,6 +261,7 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
}
public void setHost(QSTileHost qsh) {
mHeader.setQSPanel(mQSPanelController.getView());
mQSDetail.setHost(qsh);
}

View File

@@ -49,7 +49,6 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
private final QSSecurityFooter mQsSecurityFooter;
private final TunerService mTunerService;
private final QSCustomizerController mQsCustomizerController;
private final QSTileRevealController.Factory mQsTileRevealControllerFactory;
private final BrightnessController mBrightnessController;
private final BrightnessSlider.Factory mBrightnessSliderFactory;
private final BrightnessSlider mBrightnessSlider;
@@ -78,11 +77,11 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
DumpManager dumpManager, MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
BrightnessController.Factory brightnessControllerFactory,
BrightnessSlider.Factory brightnessSliderFactory) {
super(view, qstileHost, qsCustomizerController, metricsLogger, uiEventLogger, dumpManager);
super(view, qstileHost, qsCustomizerController, qsTileRevealControllerFactory,
metricsLogger, uiEventLogger, dumpManager);
mQsSecurityFooter = qsSecurityFooter;
mTunerService = tunerService;
mQsCustomizerController = qsCustomizerController;
mQsTileRevealControllerFactory = qsTileRevealControllerFactory;
mQsSecurityFooter.setHostEnvironment(qstileHost);
mBrightnessSliderFactory = brightnessSliderFactory;
@@ -114,12 +113,6 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
}
}
@Override
protected QSTileRevealController createTileRevealController() {
return mQsTileRevealControllerFactory.create(
this, (PagedTileLayout) mView.createRegularTileLayout());
}
@Override
protected void onViewDetached() {
mTunerService.removeTunable(mView);
@@ -287,10 +280,5 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
public void setFooterPageIndicator(PageIndicator pageIndicator) {
mView.setFooterPageIndicator(pageIndicator);
}
/** */
public boolean isExpanded() {
return mView.isExpanded();
}
}

View File

@@ -48,6 +48,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
implements Dumpable{
protected final QSTileHost mHost;
private final QSCustomizerController mQsCustomizerController;
private final QSTileRevealController.Factory mQsTileRevealControllerFactory;
private final MediaHost mMediaHost;
private final MetricsLogger mMetricsLogger;
private final UiEventLogger mUiEventLogger;
@@ -74,10 +75,12 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
protected QSPanelControllerBase(T view, QSTileHost host,
QSCustomizerController qsCustomizerController,
QSTileRevealController.Factory qsTileRevealControllerFactory,
MetricsLogger metricsLogger, UiEventLogger uiEventLogger, DumpManager dumpManager) {
super(view);
mHost = host;
mQsCustomizerController = qsCustomizerController;
mQsTileRevealControllerFactory = qsTileRevealControllerFactory;
mMediaHost = mView.getMediaHost();
mMetricsLogger = metricsLogger;
mUiEventLogger = uiEventLogger;
@@ -86,8 +89,10 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
@Override
protected void onViewAttached() {
mQsTileRevealController = createTileRevealController();
if (mQsTileRevealController != null) {
QSPanel.QSTileLayout regularTileLayout = mView.createRegularTileLayout();
if (regularTileLayout instanceof PagedTileLayout) {
mQsTileRevealController = mQsTileRevealControllerFactory.create(
(PagedTileLayout) regularTileLayout);
mQsTileRevealController.setExpansion(mRevealExpansion);
}
@@ -114,10 +119,6 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
mDumpManager.unregisterDumpable(mView.getDumpableTag());
}
protected QSTileRevealController createTileRevealController() {
return null;
}
/** */
public void setTiles() {
setTiles(mHost.getTiles(), false);
@@ -125,11 +126,9 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
/** */
public void setTiles(Collection<QSTile> tiles, boolean collapsedView) {
// TODO(b/168904199): move this logic into QSPanelController.
if (!collapsedView && mQsTileRevealController != null) {
if (!collapsedView) {
mQsTileRevealController.updateRevealedTiles(tiles);
}
for (QSPanelControllerBase.TileRecord record : mRecords) {
mView.removeTile(record);
record.tile.removeCallback(record.callback);

View File

@@ -15,8 +15,6 @@
*/
package com.android.systemui.qs;
import static com.android.systemui.qs.dagger.QSFragmentModule.QS_SECURITY_FOOTER_VIEW;
import android.app.AlertDialog;
import android.app.admin.DeviceAdminInfo;
import android.app.admin.DevicePolicyEventLogger;
@@ -46,10 +44,9 @@ import android.widget.TextView;
import androidx.annotation.VisibleForTesting;
import com.android.internal.util.FrameworkStatsLog;
import com.android.systemui.Dependency;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.settings.UserTracker;
@@ -57,7 +54,6 @@ import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.statusbar.policy.SecurityController;
import javax.inject.Inject;
import javax.inject.Named;
@QSScope
class QSSecurityFooter implements OnClickListener, DialogInterface.OnClickListener {
@@ -85,19 +81,18 @@ class QSSecurityFooter implements OnClickListener, DialogInterface.OnClickListen
private int mFooterIconId;
@Inject
QSSecurityFooter(@Named(QS_SECURITY_FOOTER_VIEW) View rootView, Context context,
UserTracker userTracker, @Main Handler mainHandler, ActivityStarter activityStarter,
SecurityController securityController, @Background Looper bgLooper) {
mRootView = rootView;
public QSSecurityFooter(QSPanel qsPanel, Context context, UserTracker userTracker) {
mRootView = LayoutInflater.from(context)
.inflate(R.layout.quick_settings_footer, qsPanel, false);
mRootView.setOnClickListener(this);
mFooterText = mRootView.findViewById(R.id.footer_text);
mFooterIcon = mRootView.findViewById(R.id.footer_icon);
mFooterIconId = R.drawable.ic_info_outline;
mContext = context;
mMainHandler = mainHandler;
mActivityStarter = activityStarter;
mSecurityController = securityController;
mHandler = new H(bgLooper);
mMainHandler = new Handler(Looper.myLooper());
mActivityStarter = Dependency.get(ActivityStarter.class);
mSecurityController = Dependency.get(SecurityController.class);
mHandler = new H(Dependency.get(Dependency.BG_LOOPER));
mUserTracker = userTracker;
}

View File

@@ -22,7 +22,7 @@ public class QSTileRevealController {
private static final long QS_REVEAL_TILES_DELAY = 500L;
private final Context mContext;
private final QSPanelController mQSPanelController;
private final QSPanel mQSPanel;
private final PagedTileLayout mPagedTileLayout;
private final QSCustomizerController mQsCustomizerController;
private final ArraySet<String> mTilesToReveal = new ArraySet<>();
@@ -32,17 +32,17 @@ public class QSTileRevealController {
@Override
public void run() {
mPagedTileLayout.startTileReveal(mTilesToReveal, () -> {
if (mQSPanelController.isExpanded()) {
if (mQSPanel.isExpanded()) {
addTileSpecsToRevealed(mTilesToReveal);
mTilesToReveal.clear();
}
});
}
};
QSTileRevealController(Context context, QSPanelController qsPanelController,
PagedTileLayout pagedTileLayout, QSCustomizerController qsCustomizerController) {
QSTileRevealController(Context context, QSPanel qsPanel, PagedTileLayout pagedTileLayout,
QSCustomizerController qsCustomizerController) {
mContext = context;
mQSPanelController = qsPanelController;
mQSPanel = qsPanel;
mPagedTileLayout = pagedTileLayout;
mQsCustomizerController = qsCustomizerController;
}
@@ -85,17 +85,18 @@ public class QSTileRevealController {
@QSScope
static class Factory {
private final Context mContext;
private final QSPanel mQsPanel;
private final QSCustomizerController mQsCustomizerController;
@Inject
Factory(Context context, QSCustomizerController qsCustomizerController) {
Factory(Context context, QSPanel qsPanel, QSCustomizerController qsCustomizerController) {
mContext = context;
mQsPanel = qsPanel;
mQsCustomizerController = qsCustomizerController;
}
QSTileRevealController create(QSPanelController qsPanelController,
PagedTileLayout pagedTileLayout) {
return new QSTileRevealController(mContext, qsPanelController, pagedTileLayout,
QSTileRevealController create(PagedTileLayout pagedTileLayout) {
return new QSTileRevealController(mContext, mQsPanel, pagedTileLayout,
mQsCustomizerController);
}
}

View File

@@ -51,6 +51,7 @@ public class QuickQSPanel extends QSPanel {
private boolean mDisabledByPolicy;
private int mMaxTiles;
protected QSPanel mFullPanel;
@Inject
@@ -117,6 +118,10 @@ public class QuickQSPanel extends QSPanel {
return TAG;
}
public void setQSPanelAndHeader(QSPanel fullPanel, View header) {
mFullPanel = fullPanel;
}
@Override
protected boolean shouldShowDetail() {
return !mExpanded;

View File

@@ -46,9 +46,11 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
@Inject
QuickQSPanelController(QuickQSPanel view, QSTileHost qsTileHost,
QSCustomizerController qsCustomizerController,
QSTileRevealController.Factory qsTileRevealControllerFactory,
MetricsLogger metricsLogger, UiEventLogger uiEventLogger,
DumpManager dumpManager) {
super(view, qsTileHost, qsCustomizerController, metricsLogger, uiEventLogger, dumpManager);
super(view, qsTileHost, qsCustomizerController, qsTileRevealControllerFactory,
metricsLogger, uiEventLogger, dumpManager);
}
@Override

View File

@@ -153,12 +153,6 @@ public class QuickStatusBarHeader extends RelativeLayout implements LifecycleOwn
mBatteryRemainingIcon.setPercentShowMode(BatteryMeterView.MODE_ESTIMATE);
mRingerModeTextView.setSelected(true);
mNextAlarmTextView.setSelected(true);
int colorForeground = Utils.getColorAttrDefaultColor(getContext(),
android.R.attr.colorForeground);
float intensity = getColorIntensity(colorForeground);
int fillColor = mDualToneHandler.getSingleColor(intensity);
mBatteryRemainingIcon.onDarkChanged(tintArea, intensity, fillColor);
}
void onAttach(TintedIconManager iconManager) {
@@ -445,6 +439,18 @@ public class QuickStatusBarHeader extends RelativeLayout implements LifecycleOwn
post(() -> setClickable(!mExpanded));
}
public void setQSPanel(final QSPanel qsPanel) {
//host.setHeaderView(mExpandIndicator);
mHeaderQsPanel.setQSPanelAndHeader(qsPanel, this);
Rect tintArea = new Rect(0, 0, 0, 0);
int colorForeground = Utils.getColorAttrDefaultColor(getContext(),
android.R.attr.colorForeground);
float intensity = getColorIntensity(colorForeground);
int fillColor = mDualToneHandler.getSingleColor(intensity);
mBatteryRemainingIcon.onDarkChanged(tintArea, intensity, fillColor);
}
public void setCallback(Callback qsPanelCallback) {
mHeaderQsPanel.setCallback(qsPanelCallback);
}

View File

@@ -16,7 +16,6 @@
package com.android.systemui.qs.dagger;
import android.view.LayoutInflater;
import android.view.View;
import com.android.systemui.R;
@@ -32,8 +31,6 @@ import com.android.systemui.qs.QuickQSPanel;
import com.android.systemui.qs.QuickStatusBarHeader;
import com.android.systemui.qs.customize.QSCustomizer;
import javax.inject.Named;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
@@ -43,8 +40,6 @@ import dagger.Provides;
*/
@Module
public interface QSFragmentModule {
String QS_SECURITY_FOOTER_VIEW = "qs_security_footer";
/** */
@Provides
@RootView
@@ -100,12 +95,4 @@ public interface QSFragmentModule {
static QSCustomizer providesQSCutomizer(@RootView View view) {
return view.findViewById(R.id.qs_customize);
}
/** */
@Provides
@QSScope
@Named(QS_SECURITY_FOOTER_VIEW)
static View providesQSSecurityFooterView(LayoutInflater layoutInflater, QSPanel qsPanel) {
return layoutInflater.inflate(R.layout.quick_settings_footer, qsPanel, false);
}
}
}

View File

@@ -86,16 +86,13 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
private QSPanelControllerBase<QSPanel> mController;
/** Implementation needed to ensure we have a reflectively-available class name. */
private class TestableQSPanelControllerBase extends QSPanelControllerBase<QSPanel> {
private static class TestableQSPanelControllerBase extends QSPanelControllerBase<QSPanel> {
protected TestableQSPanelControllerBase(QSPanel view, QSTileHost host,
QSCustomizerController qsCustomizerController, MetricsLogger metricsLogger,
UiEventLogger uiEventLogger, DumpManager dumpManager) {
super(view, host, qsCustomizerController, metricsLogger, uiEventLogger, dumpManager);
}
@Override
protected QSTileRevealController createTileRevealController() {
return mQSTileRevealController;
QSCustomizerController qsCustomizerController,
QSTileRevealController.Factory qsTileRevealControllerFactory,
MetricsLogger metricsLogger, UiEventLogger uiEventLogger, DumpManager dumpManager) {
super(view, host, qsCustomizerController, qsTileRevealControllerFactory, metricsLogger,
uiEventLogger, dumpManager);
}
}
@@ -111,11 +108,10 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
when(mQSPanel.createRegularTileLayout()).thenReturn(mPagedTileLayout);
when(mQSTileHost.getTiles()).thenReturn(Collections.singleton(mQSTile));
when(mQSTileHost.createTileView(eq(mQSTile), anyBoolean())).thenReturn(mQSTileView);
when(mQSTileRevealControllerFactory.create(any(), any()))
.thenReturn(mQSTileRevealController);
when(mQSTileRevealControllerFactory.create(any())).thenReturn(mQSTileRevealController);
mController = new TestableQSPanelControllerBase(mQSPanel, mQSTileHost,
mQSCustomizerController, mMetricsLogger,
mQSCustomizerController, mQSTileRevealControllerFactory, mMetricsLogger,
mUiEventLogger, mDumpManager);
mController.init();
@@ -126,14 +122,9 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
public void testSetRevealExpansion_preAttach() {
mController.onViewDetached();
QSPanelControllerBase<QSPanel> controller = new QSPanelControllerBase<QSPanel>(
mQSPanel, mQSTileHost, mQSCustomizerController, mMetricsLogger, mUiEventLogger,
mDumpManager) {
@Override
protected QSTileRevealController createTileRevealController() {
return mQSTileRevealController;
}
};
QSPanelControllerBase<QSPanel> controller = new TestableQSPanelControllerBase(mQSPanel,
mQSTileHost, mQSCustomizerController, mQSTileRevealControllerFactory,
mMetricsLogger, mUiEventLogger, mDumpManager);
// Nothing happens until attached
controller.setRevealExpansion(0);

View File

@@ -107,8 +107,7 @@ public class QSPanelControllerTest extends SysuiTestCase {
.thenReturn(mBrightnessSlider);
when(mBrightnessControllerFactory.create(any(ToggleSlider.class)))
.thenReturn(mBrightnessController);
when(mQSTileRevealControllerFactory.create(any(), any()))
.thenReturn(mQSTileRevealController);
when(mQSTileRevealControllerFactory.create(any())).thenReturn(mQSTileRevealController);
mController = new QSPanelController(mQSPanel, mQSSecurityFooter, mTunerService,
mQSTileHost, mQSCustomizerController, mQSTileRevealControllerFactory, mDumpManager,

View File

@@ -23,9 +23,8 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.pm.UserInfo;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
@@ -39,18 +38,16 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.policy.SecurityController;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
/*
* Compile and run the whole SystemUI test suite:
@@ -76,23 +73,22 @@ public class QSSecurityFooterTest extends SysuiTestCase {
private TextView mFooterText;
private TestableImageView mFooterIcon;
private QSSecurityFooter mFooter;
@Mock
private SecurityController mSecurityController;
@Mock
private SecurityController mSecurityController = mock(SecurityController.class);
private UserTracker mUserTracker;
@Mock
private ActivityStarter mActivityStarter;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
Looper looper = TestableLooper.get(this).getLooper();
mDependency.injectTestDependency(SecurityController.class, mSecurityController);
mDependency.injectTestDependency(Dependency.BG_LOOPER,
TestableLooper.get(this).getLooper());
mUserTracker = mock(UserTracker.class);
when(mUserTracker.getUserInfo()).thenReturn(mock(UserInfo.class));
mRootView = (ViewGroup) new LayoutInflaterBuilder(mContext)
.replace("ImageView", TestableImageView.class)
.build().inflate(R.layout.quick_settings_footer, null, false);
mFooter = new QSSecurityFooter(mRootView, mContext, mUserTracker, new Handler(looper),
mActivityStarter, mSecurityController, looper);
mContext.addMockSystemService(Context.LAYOUT_INFLATER_SERVICE,
new LayoutInflaterBuilder(mContext)
.replace("ImageView", TestableImageView.class)
.build());
mFooter = new QSSecurityFooter(null, mContext, mUserTracker);
mRootView = (ViewGroup) mFooter.getView();
mFooterText = mRootView.findViewById(R.id.footer_text);
mFooterIcon = mRootView.findViewById(R.id.footer_icon);
mFooter.setHostEnvironment(null);