From 7dbf4ed357d9337c42550f2ebf2ce959d507177d Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Tue, 20 Oct 2020 17:42:02 -0400 Subject: [PATCH] Use QSPanelController in QSContainerImpl The QSContainerImpl was accessing the QSPanel directly and, in turn, accessing some of its injected members. By proxying calls through the controller, we should be able to remove the injected members. Bug: 168904199 Test: manual Change-Id: I3aa379f2b64aca12079281096d8134db58031e84 --- .../android/systemui/qs/QSContainerImpl.java | 27 +++++++---------- .../qs/QSContainerImplController.java | 29 +++++++++++++++++-- .../systemui/qs/QSPanelController.java | 22 ++++++++++++++ 3 files changed, 59 insertions(+), 19 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java index a35151068bee4..80bfa79aa7532 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java @@ -35,7 +35,7 @@ import com.android.systemui.qs.customize.QSCustomizer; import com.android.wm.shell.animation.PhysicsAnimator; /** - * Wrapper view with background which contains {@link QSPanel} and {@link BaseStatusBarHeader} + * Wrapper view with background which contains {@link QSPanel} and {@link QuickStatusBarHeader} */ public class QSContainerImpl extends FrameLayout { @@ -57,7 +57,6 @@ public class QSContainerImpl extends FrameLayout { SpringForce.DAMPING_RATIO_LOW_BOUNCY); private int mBackgroundBottom = -1; private int mHeightOverride = -1; - private QSPanel mQSPanel; private View mQSDetail; private QuickStatusBarHeader mHeader; private float mQsExpansion; @@ -81,7 +80,6 @@ public class QSContainerImpl extends FrameLayout { @Override protected void onFinishInflate() { super.onFinishInflate(); - mQSPanel = findViewById(R.id.quick_settings_panel); mQSPanelContainer = findViewById(R.id.expanded_qs_scroll_view); mQSDetail = findViewById(R.id.qs_detail); mHeader = findViewById(R.id.header); @@ -90,22 +88,18 @@ public class QSContainerImpl extends FrameLayout { mBackground = findViewById(R.id.quick_settings_background); mStatusBarBackground = findViewById(R.id.quick_settings_status_bar_background); mBackgroundGradient = findViewById(R.id.quick_settings_gradient_view); - updateResources(); mHeader.getHeaderQsPanel().setMediaVisibilityChangedListener((visible) -> { if (mHeader.getHeaderQsPanel().isShown()) { mAnimateBottomOnNextLayout = true; } }); - mQSPanel.setMediaVisibilityChangedListener((visible) -> { - if (mQSPanel.isShown()) { - mAnimateBottomOnNextLayout = true; - } - }); - - setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO); } + void onMediaVisibilityChanged(boolean qsVisible) { + mAnimateBottomOnNextLayout = qsVisible; + } + private void setBackgroundBottom(int value) { // We're saving the bottom separately since otherwise the bottom would be overridden in // the layout and the animation wouldn't properly start at the old position. @@ -124,7 +118,6 @@ public class QSContainerImpl extends FrameLayout { protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); setBackgroundGradientVisibility(newConfig); - updateResources(); mSizePoint.set(0, 0); // Will be retrieved on next measure pass. } @@ -197,7 +190,7 @@ public class QSContainerImpl extends FrameLayout { mBackground.setVisibility(mQsDisabled ? View.GONE : View.VISIBLE); } - private void updateResources() { + void updateResources(QSPanelController qsPanelController) { LayoutParams layoutParams = (LayoutParams) mQSPanelContainer.getLayoutParams(); layoutParams.topMargin = mContext.getResources().getDimensionPixelSize( com.android.internal.R.dimen.quick_qs_offset_height); @@ -209,7 +202,7 @@ public class QSContainerImpl extends FrameLayout { boolean marginsChanged = padding != mContentPadding; mContentPadding = padding; if (marginsChanged) { - updatePaddingsAndMargins(); + updatePaddingsAndMargins(qsPanelController); } } @@ -275,7 +268,7 @@ public class QSContainerImpl extends FrameLayout { updateExpansion(); } - private void updatePaddingsAndMargins() { + private void updatePaddingsAndMargins(QSPanelController qsPanelController) { for (int i = 0; i < getChildCount(); i++) { View view = getChildAt(i); if (view == mStatusBarBackground || view == mBackgroundGradient @@ -288,8 +281,8 @@ public class QSContainerImpl extends FrameLayout { lp.leftMargin = mSideMargins; if (view == mQSPanelContainer) { // QS panel lays out some of its content full width - mQSPanel.setContentMargins(mContentPadding, mContentPadding); - Pair margins = mQSPanel.getVisualSideMargins(); + qsPanelController.setContentMargins(mContentPadding, mContentPadding); + Pair margins = qsPanelController.getVisualSideMargins(); // Apply paddings based on QSPanel mQSCustomizer.setContentPaddings(margins.first, margins.second); } else if (view == mHeader) { diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImplController.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImplController.java index 4b9f4316f2bf2..27d3221b8e98f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImplController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImplController.java @@ -16,7 +16,10 @@ package com.android.systemui.qs; +import android.content.res.Configuration; + import com.android.systemui.qs.dagger.QSScope; +import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.util.ViewController; import javax.inject.Inject; @@ -24,13 +27,26 @@ import javax.inject.Inject; /** */ @QSScope public class QSContainerImplController extends ViewController { + private final QSPanelController mQsPanelController; private final QuickStatusBarHeaderController mQuickStatusBarHeaderController; + private final ConfigurationController mConfigurationController; + + private final ConfigurationController.ConfigurationListener mConfigurationListener = + new ConfigurationController.ConfigurationListener() { + @Override + public void onConfigChanged(Configuration newConfig) { + mView.updateResources(mQsPanelController); + } + }; @Inject - QSContainerImplController(QSContainerImpl view, - QuickStatusBarHeaderController quickStatusBarHeaderController) { + QSContainerImplController(QSContainerImpl view, QSPanelController qsPanelController, + QuickStatusBarHeaderController quickStatusBarHeaderController, + ConfigurationController configurationController) { super(view); + mQsPanelController = qsPanelController; mQuickStatusBarHeaderController = quickStatusBarHeaderController; + mConfigurationController = configurationController; } @Override @@ -44,10 +60,19 @@ public class QSContainerImplController extends ViewController { @Override protected void onViewAttached() { + mView.updateResources(mQsPanelController); + mQsPanelController.setMediaVisibilityChangedListener((visible) -> { + if (mQsPanelController.isShown()) { + mView.onMediaVisibilityChanged(true); + } + }); + + mConfigurationController.addCallback(mConfigurationListener); } @Override protected void onViewDetached() { + mConfigurationController.removeCallback(mConfigurationListener); } public QSContainerImpl getView() { diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java index 4f87825a49186..eb82a7200c21f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java @@ -20,6 +20,7 @@ import static com.android.systemui.qs.QSPanel.QS_SHOW_BRIGHTNESS; import android.annotation.NonNull; import android.content.res.Configuration; +import android.util.Pair; import android.view.View; import android.view.ViewGroup; @@ -35,6 +36,8 @@ import com.android.systemui.settings.BrightnessController; import com.android.systemui.statusbar.policy.BrightnessMirrorController; import com.android.systemui.tuner.TunerService; +import java.util.function.Consumer; + import javax.inject.Inject; /** @@ -222,5 +225,24 @@ public class QSPanelController extends QSPanelControllerBase { public void setPageListener(PagedTileLayout.PageListener listener) { mView.setPageListener(listener); } + + /** */ + public void setMediaVisibilityChangedListener(Consumer visibilityChangedListener) { + mView.setMediaVisibilityChangedListener(visibilityChangedListener); + } + + public boolean isShown() { + return mView.isShown(); + } + + /** */ + public void setContentMargins(int startMargin, int endMargin) { + mView.setContentMargins(startMargin, endMargin); + } + + /** */ + public Pair getVisualSideMargins() { + return mView.getVisualSideMargins(); + } }