diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java index 4e7bd210eab5b..dd81b65723b9f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java @@ -50,7 +50,6 @@ import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.notification.stack.StackStateAnimator; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer; -import com.android.systemui.statusbar.policy.BrightnessMirrorController; import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler; import com.android.systemui.util.InjectionInflationController; import com.android.systemui.util.LifecycleFragment; @@ -404,10 +403,8 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca } } - public void setBrightnessMirrorController( - BrightnessMirrorController brightnessMirrorController) { - mQSPanelController.setBrightnessMirror(brightnessMirrorController); - mQuickQSPanelController.setBrightnessMirror(brightnessMirrorController); + public QSPanelController getQSPanelController() { + return mQSPanelController; } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java index 6e09f22fba631..f3d071e900e30 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelController.java @@ -40,7 +40,6 @@ import com.android.systemui.qs.customize.QSCustomizerController; import com.android.systemui.qs.dagger.QSScope; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.settings.brightness.BrightnessController; -import com.android.systemui.settings.brightness.BrightnessMirrorHandler; import com.android.systemui.settings.brightness.BrightnessSlider; import com.android.systemui.statusbar.policy.BrightnessMirrorController; import com.android.systemui.tuner.TunerService; @@ -61,9 +60,10 @@ public class QSPanelController extends QSPanelControllerBase { private final QSTileRevealController.Factory mQsTileRevealControllerFactory; private final FalsingManager mFalsingManager; private final BrightnessController mBrightnessController; + private final BrightnessSlider.Factory mBrightnessSliderFactory; private final BrightnessSlider mBrightnessSlider; - private final BrightnessMirrorHandler mBrightnessMirrorHandler; + private BrightnessMirrorController mBrightnessMirrorController; private boolean mGridContentVisible = true; private final QSPanel.OnConfigurationChangedListener mOnConfigurationChangedListener = @@ -75,10 +75,14 @@ public class QSPanelController extends QSPanelControllerBase { if (mView.isListening()) { refreshAllTiles(); } + updateBrightnessMirror(); mView.switchSecurityFooter(mShouldUseSplitNotificationShade); } }; + private final BrightnessMirrorController.BrightnessMirrorListener mBrightnessMirrorListener = + mirror -> updateBrightnessMirror(); + private View.OnTouchListener mTileLayoutTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { @@ -106,12 +110,12 @@ public class QSPanelController extends QSPanelControllerBase { mQsTileRevealControllerFactory = qsTileRevealControllerFactory; mFalsingManager = falsingManager; mQsSecurityFooter.setHostEnvironment(qstileHost); + mBrightnessSliderFactory = brightnessSliderFactory; - mBrightnessSlider = brightnessSliderFactory.create(getContext(), mView); + mBrightnessSlider = mBrightnessSliderFactory.create(getContext(), mView); mView.setBrightnessView(mBrightnessSlider.getRootView()); mBrightnessController = brightnessControllerFactory.create(mBrightnessSlider); - mBrightnessMirrorHandler = new BrightnessMirrorHandler(mBrightnessController); } @Override @@ -138,7 +142,9 @@ public class QSPanelController extends QSPanelControllerBase { mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener); mView.setSecurityFooter(mQsSecurityFooter.getView(), mShouldUseSplitNotificationShade); switchTileLayout(true); - mBrightnessMirrorHandler.onQsPanelAttached(); + if (mBrightnessMirrorController != null) { + mBrightnessMirrorController.addCallback(mBrightnessMirrorListener); + } ((PagedTileLayout) mView.getOrCreateTileLayout()) .setOnTouchListener(mTileLayoutTouchListener); @@ -154,7 +160,9 @@ public class QSPanelController extends QSPanelControllerBase { protected void onViewDetached() { mTunerService.removeTunable(mView); mView.removeOnConfigurationChangedListener(mOnConfigurationChangedListener); - mBrightnessMirrorHandler.onQsPanelDettached(); + if (mBrightnessMirrorController != null) { + mBrightnessMirrorController.removeCallback(mBrightnessMirrorListener); + } super.onViewDetached(); } @@ -188,8 +196,23 @@ public class QSPanelController extends QSPanelControllerBase { } } + /** */ public void setBrightnessMirror(BrightnessMirrorController brightnessMirrorController) { - mBrightnessMirrorHandler.setController(brightnessMirrorController); + mBrightnessMirrorController = brightnessMirrorController; + if (mBrightnessMirrorController != null) { + mBrightnessMirrorController.removeCallback(mBrightnessMirrorListener); + } + mBrightnessMirrorController = brightnessMirrorController; + if (mBrightnessMirrorController != null) { + mBrightnessMirrorController.addCallback(mBrightnessMirrorListener); + } + updateBrightnessMirror(); + } + + private void updateBrightnessMirror() { + if (mBrightnessMirrorController != null) { + mBrightnessSlider.setMirrorControllerAndMirror(mBrightnessMirrorController); + } } /** Get the QSTileHost this panel uses. */ diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSBrightnessController.kt b/packages/SystemUI/src/com/android/systemui/qs/QuickQSBrightnessController.kt index 14374ffe9f897..7c81abcfe5840 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSBrightnessController.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSBrightnessController.kt @@ -19,8 +19,6 @@ package com.android.systemui.qs import androidx.annotation.VisibleForTesting import com.android.systemui.settings.brightness.BrightnessController import com.android.systemui.settings.brightness.BrightnessSlider -import com.android.systemui.settings.brightness.MirroredBrightnessController -import com.android.systemui.statusbar.policy.BrightnessMirrorController import javax.inject.Inject /** @@ -29,7 +27,7 @@ import javax.inject.Inject */ class QuickQSBrightnessController @VisibleForTesting constructor( private val brightnessControllerFactory: () -> BrightnessController -) : MirroredBrightnessController { +) { @Inject constructor( brightnessControllerFactory: BrightnessController.Factory, @@ -44,7 +42,6 @@ class QuickQSBrightnessController @VisibleForTesting constructor( private var isListening = false private var brightnessController: BrightnessController? = null - private var mirrorController: BrightnessMirrorController? = null fun init(shouldUseSplitNotificationShade: Boolean) { refreshVisibility(shouldUseSplitNotificationShade) @@ -80,11 +77,6 @@ class QuickQSBrightnessController @VisibleForTesting constructor( } } - override fun setMirror(controller: BrightnessMirrorController) { - mirrorController = controller - mirrorController?.let { brightnessController?.setMirror(it) } - } - private fun hideBrightnessSlider() { brightnessController?.hideSlider() } @@ -92,10 +84,11 @@ class QuickQSBrightnessController @VisibleForTesting constructor( private fun showBrightnessSlider() { if (brightnessController == null) { brightnessController = brightnessControllerFactory() - mirrorController?.also { brightnessController?.setMirror(it) } + } + brightnessController?.showSlider() + if (!isListening) { brightnessController?.registerCallbacks() isListening = true } - brightnessController?.showSlider() } -} +} \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java index 8c7a2cda271af..74cd50c3f2668 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanelController.java @@ -29,8 +29,6 @@ import com.android.systemui.plugins.qs.QSTile; import com.android.systemui.qs.customize.QSCustomizerController; import com.android.systemui.qs.dagger.QSScope; import com.android.systemui.qs.logging.QSLogger; -import com.android.systemui.settings.brightness.BrightnessMirrorHandler; -import com.android.systemui.statusbar.policy.BrightnessMirrorController; import java.util.ArrayList; import java.util.List; @@ -52,7 +50,6 @@ public class QuickQSPanelController extends QSPanelControllerBase // brightness is visible only in split shade private final QuickQSBrightnessController mBrightnessController; - private final BrightnessMirrorHandler mBrightnessMirrorHandler; @Inject QuickQSPanelController(QuickQSPanel view, QSTileHost qsTileHost, @@ -66,7 +63,6 @@ public class QuickQSPanelController extends QSPanelControllerBase super(view, qsTileHost, qsCustomizerController, usingMediaPlayer, mediaHost, metricsLogger, uiEventLogger, qsLogger, dumpManager); mBrightnessController = quickQSBrightnessController; - mBrightnessMirrorHandler = new BrightnessMirrorHandler(mBrightnessController); } @Override @@ -82,14 +78,12 @@ public class QuickQSPanelController extends QSPanelControllerBase protected void onViewAttached() { super.onViewAttached(); mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener); - mBrightnessMirrorHandler.onQsPanelAttached(); } @Override protected void onViewDetached() { super.onViewDetached(); mView.removeOnConfigurationChangedListener(mOnConfigurationChangedListener); - mBrightnessMirrorHandler.onQsPanelDettached(); } @Override @@ -138,8 +132,4 @@ public class QuickQSPanelController extends QSPanelControllerBase public int getNumQuickTiles() { return mView.getNumQuickTiles(); } - - public void setBrightnessMirror(BrightnessMirrorController brightnessMirrorController) { - mBrightnessMirrorHandler.setController(brightnessMirrorController); - } } diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java index 185b8ef04c4c4..a9ebcad8304f8 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java @@ -50,13 +50,12 @@ import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.systemui.Dependency; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.settings.CurrentUserTracker; -import com.android.systemui.statusbar.policy.BrightnessMirrorController; import java.util.ArrayList; import javax.inject.Inject; -public class BrightnessController implements ToggleSlider.Listener, MirroredBrightnessController { +public class BrightnessController implements ToggleSlider.Listener { private static final String TAG = "StatusBar.BrightnessController"; private static final int SLIDER_ANIMATION_DURATION = 3000; @@ -110,11 +109,6 @@ public class BrightnessController implements ToggleSlider.Listener, MirroredBrig private ValueAnimator mSliderAnimator; - @Override - public void setMirror(BrightnessMirrorController controller) { - mControl.setMirrorControllerAndMirror(controller); - } - public interface BrightnessStateChangeCallback { /** Indicates that some of the brightness settings have changed */ void onBrightnessLevelChanged(); diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessMirrorHandler.kt b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessMirrorHandler.kt deleted file mode 100644 index 51aa339149a42..0000000000000 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessMirrorHandler.kt +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2021 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.settings.brightness - -import com.android.systemui.statusbar.policy.BrightnessMirrorController -import com.android.systemui.statusbar.policy.BrightnessMirrorController.BrightnessMirrorListener - -class BrightnessMirrorHandler(private val brightnessController: MirroredBrightnessController) { - - private var mirrorController: BrightnessMirrorController? = null - - private val brightnessMirrorListener = BrightnessMirrorListener { updateBrightnessMirror() } - - fun onQsPanelAttached() { - mirrorController?.addCallback(brightnessMirrorListener) - } - - fun onQsPanelDettached() { - mirrorController?.removeCallback(brightnessMirrorListener) - } - - fun setController(controller: BrightnessMirrorController) { - mirrorController?.removeCallback(brightnessMirrorListener) - mirrorController = controller - mirrorController?.addCallback(brightnessMirrorListener) - updateBrightnessMirror() - } - - private fun updateBrightnessMirror() { - mirrorController?.let { brightnessController.setMirror(it) } - } -} \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSlider.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSlider.java index 7dc9e8ba0edba..896106a82fe43 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSlider.java +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSlider.java @@ -23,7 +23,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.SeekBar; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.settingslib.RestrictedLockUtils; @@ -139,9 +138,15 @@ public class BrightnessSlider extends ViewController imple * @param c */ @Override - public void setMirrorControllerAndMirror(@NonNull BrightnessMirrorController c) { + public void setMirrorControllerAndMirror(BrightnessMirrorController c) { mMirrorController = c; - setMirror(c.getToggleSlider()); + if (c != null) { + setMirror(c.getToggleSlider()); + } else { + // If there's no mirror, we may be the ones dispatching, events but we should not mirror + // them + mView.setOnDispatchTouchEventListener(null); + } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/MirroredBrightnessController.kt b/packages/SystemUI/src/com/android/systemui/settings/brightness/MirroredBrightnessController.kt deleted file mode 100644 index 8d857dec2108b..0000000000000 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/MirroredBrightnessController.kt +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2021 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.settings.brightness - -import com.android.systemui.statusbar.policy.BrightnessMirrorController - -/** - * Indicates controller that has brightness slider and uses [BrightnessMirrorController] - */ -interface MirroredBrightnessController { - fun setMirror(controller: BrightnessMirrorController) -} \ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/ToggleSlider.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/ToggleSlider.java index 3ef4ad2231207..5de22d43a21b8 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/brightness/ToggleSlider.java +++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/ToggleSlider.java @@ -18,8 +18,6 @@ package com.android.systemui.settings.brightness; import android.view.MotionEvent; -import androidx.annotation.NonNull; - import com.android.settingslib.RestrictedLockUtils; import com.android.systemui.statusbar.policy.BrightnessMirrorController; @@ -29,7 +27,7 @@ public interface ToggleSlider { } void setEnforcedAdmin(RestrictedLockUtils.EnforcedAdmin admin); - void setMirrorControllerAndMirror(@NonNull BrightnessMirrorController c); + void setMirrorControllerAndMirror(BrightnessMirrorController c); boolean mirrorTouchEvent(MotionEvent ev); void setOnChangedListener(Listener l); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index e29d026129219..10d5d571ef50c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -1309,7 +1309,8 @@ public class StatusBar extends SystemUI implements DemoMode, fragmentHostManager.addTagListener(QS.TAG, (tag, f) -> { QS qs = (QS) f; if (qs instanceof QSFragment) { - ((QSFragment) qs).setBrightnessMirrorController(mBrightnessMirrorController); + mQSPanelController = ((QSFragment) qs).getQSPanelController(); + mQSPanelController.setBrightnessMirror(mBrightnessMirrorController); } }); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSBrightnessControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSBrightnessControllerTest.kt index de1d86b08785b..f8373ffca955a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSBrightnessControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSBrightnessControllerTest.kt @@ -19,15 +19,13 @@ package com.android.systemui.qs import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.settings.brightness.BrightnessController -import com.android.systemui.statusbar.policy.BrightnessMirrorController import org.junit.Before import org.junit.Rule import org.junit.Test import org.mockito.Mock -import org.mockito.Mockito.times import org.mockito.Mockito.verify +import org.mockito.Mockito.times import org.mockito.Mockito.never -import org.mockito.Mockito.mock import org.mockito.junit.MockitoJUnit @SmallTest @@ -106,13 +104,4 @@ class QuickQSBrightnessControllerTest : SysuiTestCase() { verify(brightnessController, never()).registerCallbacks() } - - @Test - fun testMirrorIsSetWhenSliderIsShown() { - val mirrorController = mock(BrightnessMirrorController::class.java) - quickQSBrightnessController.setMirror(mirrorController) - quickQSBrightnessController.refreshVisibility(shouldUseSplitNotificationShade = true) - - verify(brightnessController).setMirror(mirrorController) - } } \ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderTest.kt index bceb92894609e..e0187bdf6adaf 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderTest.kt @@ -107,6 +107,15 @@ class BrightnessSliderTest : SysuiTestCase() { verify(brightnessSliderView).setEnforcedAdmin(enforcedAdmin) } + @Test + fun testNullMirrorControllerNotTrackingTouch() { + mController.setMirrorControllerAndMirror(null) + + verify(brightnessSliderView, never()).max + verify(brightnessSliderView, never()).value + verify(brightnessSliderView).setOnDispatchTouchEventListener(isNull()) + } + @Test fun testNullMirrorNotTrackingTouch() { whenever(mirrorController.toggleSlider).thenReturn(null)