Remove QQS brightness controller
This was not being used and it was leaking ContentObservers Test: heapdump, switching between splitshade and not splitshade many times Test: atest com.android.systemui.qs Fixes: 218888308 Change-Id: I63501bf573e006f52379192b7b766283fea40dda
This commit is contained in:
@@ -420,7 +420,6 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca
|
|||||||
public void setBrightnessMirrorController(
|
public void setBrightnessMirrorController(
|
||||||
BrightnessMirrorController brightnessMirrorController) {
|
BrightnessMirrorController brightnessMirrorController) {
|
||||||
mQSPanelController.setBrightnessMirror(brightnessMirrorController);
|
mQSPanelController.setBrightnessMirror(brightnessMirrorController);
|
||||||
mQuickQSPanelController.setBrightnessMirror(brightnessMirrorController);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,102 +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.qs
|
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting
|
|
||||||
import com.android.systemui.settings.brightness.BrightnessController
|
|
||||||
import com.android.systemui.settings.brightness.BrightnessSliderController
|
|
||||||
import com.android.systemui.settings.brightness.MirroredBrightnessController
|
|
||||||
import com.android.systemui.statusbar.policy.BrightnessMirrorController
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Controls brightness slider in QQS, which is visible only in split shade. It's responsible for
|
|
||||||
* showing/hiding it when appropriate and (un)registering listeners
|
|
||||||
*/
|
|
||||||
class QuickQSBrightnessController @VisibleForTesting constructor(
|
|
||||||
private val brightnessControllerFactory: () -> BrightnessController
|
|
||||||
) : MirroredBrightnessController {
|
|
||||||
|
|
||||||
@Inject constructor(
|
|
||||||
brightnessControllerFactory: BrightnessController.Factory,
|
|
||||||
brightnessSliderControllerFactory: BrightnessSliderController.Factory,
|
|
||||||
quickQSPanel: QuickQSPanel
|
|
||||||
) : this(brightnessControllerFactory = {
|
|
||||||
val slider = brightnessSliderControllerFactory.create(quickQSPanel.context,
|
|
||||||
quickQSPanel)
|
|
||||||
slider.init()
|
|
||||||
quickQSPanel.setBrightnessView(slider.rootView)
|
|
||||||
brightnessControllerFactory.create(slider)
|
|
||||||
})
|
|
||||||
|
|
||||||
private var isListening = false
|
|
||||||
private var brightnessController: BrightnessController? = null
|
|
||||||
private var mirrorController: BrightnessMirrorController? = null
|
|
||||||
|
|
||||||
fun init(shouldUseSplitNotificationShade: Boolean) {
|
|
||||||
refreshVisibility(shouldUseSplitNotificationShade)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts/Stops listening for brightness changing events.
|
|
||||||
* It's fine to call this function even if slider is not visible (which would be the case for
|
|
||||||
* all small screen devices), it will just do nothing in that case
|
|
||||||
*/
|
|
||||||
fun setListening(listening: Boolean) {
|
|
||||||
if (listening) {
|
|
||||||
// controller can be null when slider was never shown
|
|
||||||
if (!isListening && brightnessController != null) {
|
|
||||||
brightnessController?.registerCallbacks()
|
|
||||||
isListening = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
brightnessController?.unregisterCallbacks()
|
|
||||||
isListening = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun checkRestrictionAndSetEnabled() {
|
|
||||||
brightnessController?.checkRestrictionAndSetEnabled()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun refreshVisibility(shouldUseSplitNotificationShade: Boolean) {
|
|
||||||
if (shouldUseSplitNotificationShade) {
|
|
||||||
showBrightnessSlider()
|
|
||||||
} else {
|
|
||||||
hideBrightnessSlider()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setMirror(controller: BrightnessMirrorController) {
|
|
||||||
mirrorController = controller
|
|
||||||
mirrorController?.let { brightnessController?.setMirror(it) }
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun hideBrightnessSlider() {
|
|
||||||
brightnessController?.hideSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun showBrightnessSlider() {
|
|
||||||
if (brightnessController == null) {
|
|
||||||
brightnessController = brightnessControllerFactory()
|
|
||||||
mirrorController?.also { brightnessController?.setMirror(it) }
|
|
||||||
brightnessController?.registerCallbacks()
|
|
||||||
isListening = true
|
|
||||||
}
|
|
||||||
brightnessController?.showSlider()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -33,8 +33,6 @@ import com.android.systemui.plugins.qs.QSTile;
|
|||||||
import com.android.systemui.qs.customize.QSCustomizerController;
|
import com.android.systemui.qs.customize.QSCustomizerController;
|
||||||
import com.android.systemui.qs.dagger.QSScope;
|
import com.android.systemui.qs.dagger.QSScope;
|
||||||
import com.android.systemui.qs.logging.QSLogger;
|
import com.android.systemui.qs.logging.QSLogger;
|
||||||
import com.android.systemui.settings.brightness.BrightnessMirrorHandler;
|
|
||||||
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
|
|
||||||
import com.android.systemui.util.leak.RotationUtils;
|
import com.android.systemui.util.leak.RotationUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -55,10 +53,6 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// brightness is visible only in split shade
|
|
||||||
private final QuickQSBrightnessController mBrightnessController;
|
|
||||||
private final BrightnessMirrorHandler mBrightnessMirrorHandler;
|
|
||||||
|
|
||||||
private final MediaFlags mMediaFlags;
|
private final MediaFlags mMediaFlags;
|
||||||
private final boolean mUsingCollapsedLandscapeMedia;
|
private final boolean mUsingCollapsedLandscapeMedia;
|
||||||
|
|
||||||
@@ -70,13 +64,10 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
|
|||||||
@Named(QS_USING_COLLAPSED_LANDSCAPE_MEDIA) boolean usingCollapsedLandscapeMedia,
|
@Named(QS_USING_COLLAPSED_LANDSCAPE_MEDIA) boolean usingCollapsedLandscapeMedia,
|
||||||
MediaFlags mediaFlags,
|
MediaFlags mediaFlags,
|
||||||
MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger,
|
MetricsLogger metricsLogger, UiEventLogger uiEventLogger, QSLogger qsLogger,
|
||||||
DumpManager dumpManager,
|
DumpManager dumpManager
|
||||||
QuickQSBrightnessController quickQSBrightnessController
|
|
||||||
) {
|
) {
|
||||||
super(view, qsTileHost, qsCustomizerController, usingMediaPlayer, mediaHost, metricsLogger,
|
super(view, qsTileHost, qsCustomizerController, usingMediaPlayer, mediaHost, metricsLogger,
|
||||||
uiEventLogger, qsLogger, dumpManager);
|
uiEventLogger, qsLogger, dumpManager);
|
||||||
mBrightnessController = quickQSBrightnessController;
|
|
||||||
mBrightnessMirrorHandler = new BrightnessMirrorHandler(mBrightnessController);
|
|
||||||
mUsingCollapsedLandscapeMedia = usingCollapsedLandscapeMedia;
|
mUsingCollapsedLandscapeMedia = usingCollapsedLandscapeMedia;
|
||||||
mMediaFlags = mediaFlags;
|
mMediaFlags = mediaFlags;
|
||||||
}
|
}
|
||||||
@@ -87,7 +78,6 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
|
|||||||
updateMediaExpansion();
|
updateMediaExpansion();
|
||||||
mMediaHost.setShowsOnlyActiveMedia(true);
|
mMediaHost.setShowsOnlyActiveMedia(true);
|
||||||
mMediaHost.init(MediaHierarchyManager.LOCATION_QQS);
|
mMediaHost.init(MediaHierarchyManager.LOCATION_QQS);
|
||||||
mBrightnessController.init(mShouldUseSplitNotificationShade);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateMediaExpansion() {
|
private void updateMediaExpansion() {
|
||||||
@@ -111,20 +101,17 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
|
|||||||
protected void onViewAttached() {
|
protected void onViewAttached() {
|
||||||
super.onViewAttached();
|
super.onViewAttached();
|
||||||
mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener);
|
mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener);
|
||||||
mBrightnessMirrorHandler.onQsPanelAttached();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onViewDetached() {
|
protected void onViewDetached() {
|
||||||
super.onViewDetached();
|
super.onViewDetached();
|
||||||
mView.removeOnConfigurationChangedListener(mOnConfigurationChangedListener);
|
mView.removeOnConfigurationChangedListener(mOnConfigurationChangedListener);
|
||||||
mBrightnessMirrorHandler.onQsPanelDettached();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void setListening(boolean listening) {
|
void setListening(boolean listening) {
|
||||||
super.setListening(listening);
|
super.setListening(listening);
|
||||||
mBrightnessController.setListening(listening);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isListening() {
|
public boolean isListening() {
|
||||||
@@ -136,15 +123,8 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
|
|||||||
setTiles();
|
setTiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void refreshAllTiles() {
|
|
||||||
mBrightnessController.checkRestrictionAndSetEnabled();
|
|
||||||
super.refreshAllTiles();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onConfigurationChanged() {
|
protected void onConfigurationChanged() {
|
||||||
mBrightnessController.refreshVisibility(mShouldUseSplitNotificationShade);
|
|
||||||
updateMediaExpansion();
|
updateMediaExpansion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,8 +148,4 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
|
|||||||
public int getNumQuickTiles() {
|
public int getNumQuickTiles() {
|
||||||
return mView.getNumQuickTiles();
|
return mView.getNumQuickTiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBrightnessMirror(BrightnessMirrorController brightnessMirrorController) {
|
|
||||||
mBrightnessMirrorHandler.setController(brightnessMirrorController);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,118 +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.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.never
|
|
||||||
import org.mockito.Mockito.mock
|
|
||||||
import org.mockito.junit.MockitoJUnit
|
|
||||||
|
|
||||||
@SmallTest
|
|
||||||
class QuickQSBrightnessControllerTest : SysuiTestCase() {
|
|
||||||
|
|
||||||
@Mock
|
|
||||||
lateinit var brightnessController: BrightnessController
|
|
||||||
@get:Rule
|
|
||||||
val mockito = MockitoJUnit.rule()
|
|
||||||
|
|
||||||
lateinit var quickQSBrightnessController: QuickQSBrightnessController
|
|
||||||
|
|
||||||
@Before
|
|
||||||
fun setUp() {
|
|
||||||
quickQSBrightnessController = QuickQSBrightnessController(
|
|
||||||
brightnessControllerFactory = { brightnessController })
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testSliderIsShownWhenInitializedInSplitShade() {
|
|
||||||
quickQSBrightnessController.init(shouldUseSplitNotificationShade = true)
|
|
||||||
|
|
||||||
verify(brightnessController).showSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testSliderIsShownWhenRefreshedInSplitShade() {
|
|
||||||
quickQSBrightnessController.refreshVisibility(shouldUseSplitNotificationShade = true)
|
|
||||||
|
|
||||||
verify(brightnessController, times(1)).showSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testSliderIsHiddenWhenRefreshedInNonSplitShade() {
|
|
||||||
// needs to be shown first
|
|
||||||
quickQSBrightnessController.refreshVisibility(shouldUseSplitNotificationShade = true)
|
|
||||||
quickQSBrightnessController.refreshVisibility(shouldUseSplitNotificationShade = false)
|
|
||||||
|
|
||||||
verify(brightnessController).hideSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testSliderChangesVisibilityWhenRotating() {
|
|
||||||
quickQSBrightnessController.refreshVisibility(shouldUseSplitNotificationShade = true)
|
|
||||||
verify(brightnessController, times(1)).showSlider()
|
|
||||||
|
|
||||||
quickQSBrightnessController.refreshVisibility(shouldUseSplitNotificationShade = false)
|
|
||||||
verify(brightnessController, times(1)).hideSlider()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testCallbacksAreRegisteredOnlyOnce() {
|
|
||||||
// this flow simulates expanding shade in portrait...
|
|
||||||
quickQSBrightnessController.setListening(true)
|
|
||||||
quickQSBrightnessController.refreshVisibility(shouldUseSplitNotificationShade = false)
|
|
||||||
// ... and rotating to landscape/split shade where slider is visible
|
|
||||||
quickQSBrightnessController.refreshVisibility(shouldUseSplitNotificationShade = true)
|
|
||||||
|
|
||||||
verify(brightnessController, times(1)).registerCallbacks()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testCallbacksAreRegisteredOnlyOnceWhenRotatingPhone() {
|
|
||||||
quickQSBrightnessController.setListening(true)
|
|
||||||
quickQSBrightnessController.refreshVisibility(shouldUseSplitNotificationShade = true)
|
|
||||||
quickQSBrightnessController.refreshVisibility(shouldUseSplitNotificationShade = false)
|
|
||||||
quickQSBrightnessController.refreshVisibility(shouldUseSplitNotificationShade = true)
|
|
||||||
|
|
||||||
verify(brightnessController, times(1)).registerCallbacks()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testCallbacksAreNotRegisteredWhenSliderNotVisible() {
|
|
||||||
quickQSBrightnessController.setListening(true)
|
|
||||||
quickQSBrightnessController.refreshVisibility(shouldUseSplitNotificationShade = false)
|
|
||||||
|
|
||||||
verify(brightnessController, never()).registerCallbacks()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testMirrorIsSetWhenSliderIsShown() {
|
|
||||||
val mirrorController = mock(BrightnessMirrorController::class.java)
|
|
||||||
quickQSBrightnessController.setMirror(mirrorController)
|
|
||||||
quickQSBrightnessController.refreshVisibility(shouldUseSplitNotificationShade = true)
|
|
||||||
|
|
||||||
verify(brightnessController).setMirror(mirrorController)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -71,8 +71,6 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
|||||||
private lateinit var tileLayout: TileLayout
|
private lateinit var tileLayout: TileLayout
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var tileView: QSTileView
|
private lateinit var tileView: QSTileView
|
||||||
@Mock
|
|
||||||
private lateinit var quickQsBrightnessController: QuickQSBrightnessController
|
|
||||||
@Captor
|
@Captor
|
||||||
private lateinit var captor: ArgumentCaptor<QSPanel.OnConfigurationChangedListener>
|
private lateinit var captor: ArgumentCaptor<QSPanel.OnConfigurationChangedListener>
|
||||||
|
|
||||||
@@ -100,8 +98,7 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
|||||||
metricsLogger,
|
metricsLogger,
|
||||||
uiEventLogger,
|
uiEventLogger,
|
||||||
qsLogger,
|
qsLogger,
|
||||||
dumpManager,
|
dumpManager
|
||||||
quickQsBrightnessController
|
|
||||||
)
|
)
|
||||||
|
|
||||||
controller.init()
|
controller.init()
|
||||||
@@ -132,16 +129,6 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
|||||||
verify(quickQSPanel, times(limit)).addTile(any())
|
verify(quickQSPanel, times(limit)).addTile(any())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testBrightnessRefreshedWhenConfigurationChanged() {
|
|
||||||
// times(2) because both controller and base controller are registering their listeners
|
|
||||||
verify(quickQSPanel, times(2)).addOnConfigurationChangedListener(captor.capture())
|
|
||||||
|
|
||||||
captor.allValues.forEach { it.onConfigurationChange(Configuration.EMPTY) }
|
|
||||||
|
|
||||||
verify(quickQsBrightnessController).refreshVisibility(anyBoolean())
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testMediaExpansionUpdatedWhenConfigurationChanged() {
|
fun testMediaExpansionUpdatedWhenConfigurationChanged() {
|
||||||
`when`(mediaFlags.useMediaSessionLayout()).thenReturn(true)
|
`when`(mediaFlags.useMediaSessionLayout()).thenReturn(true)
|
||||||
@@ -171,11 +158,10 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
|
|||||||
metricsLogger: MetricsLogger,
|
metricsLogger: MetricsLogger,
|
||||||
uiEventLogger: UiEventLoggerFake,
|
uiEventLogger: UiEventLoggerFake,
|
||||||
qsLogger: QSLogger,
|
qsLogger: QSLogger,
|
||||||
dumpManager: DumpManager,
|
dumpManager: DumpManager
|
||||||
quickQSBrightnessController: QuickQSBrightnessController
|
|
||||||
) : QuickQSPanelController(view, qsTileHost, qsCustomizerController, usingMediaPlayer,
|
) : QuickQSPanelController(view, qsTileHost, qsCustomizerController, usingMediaPlayer,
|
||||||
mediaHost, usingCollapsedLandscapeMedia, mediaFlags, metricsLogger, uiEventLogger, qsLogger,
|
mediaHost, usingCollapsedLandscapeMedia, mediaFlags, metricsLogger, uiEventLogger, qsLogger,
|
||||||
dumpManager, quickQSBrightnessController) {
|
dumpManager) {
|
||||||
|
|
||||||
private var rotation = RotationUtils.ROTATION_NONE
|
private var rotation = RotationUtils.ROTATION_NONE
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user