Revert "Revert "Making mirror slider appear when brightness slider is used in split shade""

This reverts commit 7b43d58976.

Reason for revert: Submitting code with problem fixed
Test: CTS in Forrest
Bug: 193651759

Change-Id: I8dd921ab34798ac156af17a14e2ca27c70a743cc
This commit is contained in:
Michał Brzeziński
2021-08-03 10:11:39 +00:00
committed by Michal Brzezinski
parent 17d4009aac
commit d057da2ca5
11 changed files with 129 additions and 54 deletions

View File

@@ -52,6 +52,7 @@ 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;
@@ -414,6 +415,12 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
return mQSPanelController;
}
public void setBrightnessMirrorController(
BrightnessMirrorController brightnessMirrorController) {
mQSPanelController.setBrightnessMirror(brightnessMirrorController);
mQuickQSPanelController.setBrightnessMirror(brightnessMirrorController);
}
@Override
public boolean isShowingDetail() {
return mQSCustomizerController.isCustomizing() || mQSDetail.isShowingDetail();

View File

@@ -40,6 +40,7 @@ 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;
@@ -60,10 +61,9 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
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,14 +75,10 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
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) {
@@ -110,12 +106,12 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
mQsTileRevealControllerFactory = qsTileRevealControllerFactory;
mFalsingManager = falsingManager;
mQsSecurityFooter.setHostEnvironment(qstileHost);
mBrightnessSliderFactory = brightnessSliderFactory;
mBrightnessSlider = mBrightnessSliderFactory.create(getContext(), mView);
mBrightnessSlider = brightnessSliderFactory.create(getContext(), mView);
mView.setBrightnessView(mBrightnessSlider.getRootView());
mBrightnessController = brightnessControllerFactory.create(mBrightnessSlider);
mBrightnessMirrorHandler = new BrightnessMirrorHandler(mBrightnessController);
}
@Override
@@ -142,9 +138,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener);
mView.setSecurityFooter(mQsSecurityFooter.getView(), mShouldUseSplitNotificationShade);
switchTileLayout(true);
if (mBrightnessMirrorController != null) {
mBrightnessMirrorController.addCallback(mBrightnessMirrorListener);
}
mBrightnessMirrorHandler.onQsPanelAttached();
((PagedTileLayout) mView.getOrCreateTileLayout())
.setOnTouchListener(mTileLayoutTouchListener);
@@ -160,9 +154,7 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
protected void onViewDetached() {
mTunerService.removeTunable(mView);
mView.removeOnConfigurationChangedListener(mOnConfigurationChangedListener);
if (mBrightnessMirrorController != null) {
mBrightnessMirrorController.removeCallback(mBrightnessMirrorListener);
}
mBrightnessMirrorHandler.onQsPanelDettached();
super.onViewDetached();
}
@@ -196,23 +188,8 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
}
}
/** */
public void setBrightnessMirror(BrightnessMirrorController 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);
}
mBrightnessMirrorHandler.setController(brightnessMirrorController);
}
/** Get the QSTileHost this panel uses. */

View File

@@ -19,6 +19,8 @@ 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
/**
@@ -27,7 +29,7 @@ import javax.inject.Inject
*/
class QuickQSBrightnessController @VisibleForTesting constructor(
private val brightnessControllerFactory: () -> BrightnessController
) {
) : MirroredBrightnessController {
@Inject constructor(
brightnessControllerFactory: BrightnessController.Factory,
@@ -42,6 +44,7 @@ class QuickQSBrightnessController @VisibleForTesting constructor(
private var isListening = false
private var brightnessController: BrightnessController? = null
private var mirrorController: BrightnessMirrorController? = null
fun init(shouldUseSplitNotificationShade: Boolean) {
refreshVisibility(shouldUseSplitNotificationShade)
@@ -77,6 +80,11 @@ class QuickQSBrightnessController @VisibleForTesting constructor(
}
}
override fun setMirror(controller: BrightnessMirrorController) {
mirrorController = controller
mirrorController?.let { brightnessController?.setMirror(it) }
}
private fun hideBrightnessSlider() {
brightnessController?.hideSlider()
}
@@ -84,11 +92,10 @@ class QuickQSBrightnessController @VisibleForTesting constructor(
private fun showBrightnessSlider() {
if (brightnessController == null) {
brightnessController = brightnessControllerFactory()
}
brightnessController?.showSlider()
if (!isListening) {
mirrorController?.also { brightnessController?.setMirror(it) }
brightnessController?.registerCallbacks()
isListening = true
}
brightnessController?.showSlider()
}
}
}

View File

@@ -29,6 +29,8 @@ 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;
@@ -50,6 +52,7 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
// brightness is visible only in split shade
private final QuickQSBrightnessController mBrightnessController;
private final BrightnessMirrorHandler mBrightnessMirrorHandler;
@Inject
QuickQSPanelController(QuickQSPanel view, QSTileHost qsTileHost,
@@ -63,6 +66,7 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
super(view, qsTileHost, qsCustomizerController, usingMediaPlayer, mediaHost, metricsLogger,
uiEventLogger, qsLogger, dumpManager);
mBrightnessController = quickQSBrightnessController;
mBrightnessMirrorHandler = new BrightnessMirrorHandler(mBrightnessController);
}
@Override
@@ -78,12 +82,14 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
protected void onViewAttached() {
super.onViewAttached();
mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener);
mBrightnessMirrorHandler.onQsPanelAttached();
}
@Override
protected void onViewDetached() {
super.onViewDetached();
mView.removeOnConfigurationChangedListener(mOnConfigurationChangedListener);
mBrightnessMirrorHandler.onQsPanelDettached();
}
@Override
@@ -132,4 +138,8 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
public int getNumQuickTiles() {
return mView.getNumQuickTiles();
}
public void setBrightnessMirror(BrightnessMirrorController brightnessMirrorController) {
mBrightnessMirrorHandler.setController(brightnessMirrorController);
}
}

View File

@@ -50,12 +50,13 @@ 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 {
public class BrightnessController implements ToggleSlider.Listener, MirroredBrightnessController {
private static final String TAG = "StatusBar.BrightnessController";
private static final int SLIDER_ANIMATION_DURATION = 3000;
@@ -109,6 +110,11 @@ public class BrightnessController implements ToggleSlider.Listener {
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();

View File

@@ -0,0 +1,46 @@
/*
* 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) }
}
}

View File

@@ -140,13 +140,7 @@ public class BrightnessSlider extends ViewController<BrightnessSliderView> imple
@Override
public void setMirrorControllerAndMirror(BrightnessMirrorController c) {
mMirrorController = c;
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);
}
setMirror(c.getToggleSlider());
}
@Override

View File

@@ -0,0 +1,26 @@
/*
* 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)
}

View File

@@ -1365,7 +1365,7 @@ public class StatusBar extends SystemUI implements
QS qs = (QS) f;
if (qs instanceof QSFragment) {
mQSPanelController = ((QSFragment) qs).getQSPanelController();
mQSPanelController.setBrightnessMirror(mBrightnessMirrorController);
((QSFragment) qs).setBrightnessMirrorController(mBrightnessMirrorController);
}
});
}

View File

@@ -19,13 +19,15 @@ 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.verify
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.Mockito.never
import org.mockito.Mockito.mock
import org.mockito.junit.MockitoJUnit
@SmallTest
@@ -104,4 +106,13 @@ 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)
}
}

View File

@@ -107,15 +107,6 @@ 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)