diff options
| author | 2024-09-24 15:28:40 -0400 | |
|---|---|---|
| committer | 2024-09-24 15:28:40 -0400 | |
| commit | 79c8c820ad1e7fbd3eb1bf6d06ca3b44d40cd832 (patch) | |
| tree | 3befaef47c322f6496b2bf5da29f2d2cff3a23ff | |
| parent | 7aa881eb4b478d34423fff22713da16f2f790854 (diff) | |
Restore QSPanelControllerBase listening state
In flexiglass, when the views are detached we set the
tile layout to be not listening. However, if we were listening before,
we should still be listening after re-attaching. This makes sure that
that is restored properly.
Note that this applies to both QQS and QS (as they both use the same
abstract controller class).
Fixes: 366362115
Test: atest QSPanelControllerBaseTest
Test: atest PlatformScenarioTest:AirplaneModeIconTest
Flag: EXEMPT bugfix
Change-Id: Ia67ab43b67bf7699eeaca7687d6a9a70078e01d3
| -rw-r--r-- | packages/SystemUI/multivalentTests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java | 34 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java | 8 |
2 files changed, 42 insertions, 0 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java index 225adab04ff0..527aeaac426d 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java @@ -136,6 +136,8 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { @Mock private ViewTreeObserver mViewTreeObserver; + private boolean mPagedTileLayoutListening = false; + private TestableLongPressEffectProvider mLongPressEffectProvider = new TestableLongPressEffectProvider(); @@ -213,6 +215,11 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { return null; }).when(mQSPanel).setListening(anyBoolean()); + doAnswer(invocation -> { + mPagedTileLayoutListening = invocation.getArgument(0); + return null; + }).when(mPagedTileLayout).setListening(anyBoolean(), any()); + mController = new TestableQSPanelControllerBase(mQSPanel, mQSHost, mQSCustomizerController, mMediaHost, mMetricsLogger, mUiEventLogger, mQSLogger, mDumpManager); @@ -571,6 +578,33 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { assertThat(mController.mRecords).isEmpty(); } + @Test + public void listening_dettach_reAttach_listeningSetAgain() { + mController.setListening(true); + + assertThat(mPagedTileLayoutListening).isTrue(); + + mController.onViewDetached(); + assertThat(mPagedTileLayoutListening).isFalse(); + + mController.onViewAttached(); + assertThat(mPagedTileLayoutListening).isTrue(); + } + + @Test + public void notListening_dettach_reAttach_stillNotListening() { + mController.setListening(false); + + assertThat(mPagedTileLayoutListening).isFalse(); + + mController.onViewDetached(); + assertThat(mPagedTileLayoutListening).isFalse(); + + mController.onViewAttached(); + assertThat(mPagedTileLayoutListening).isFalse(); + } + + private boolean usingMediaPlayer() { return !SceneContainerFlag.isEnabled(); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java index 13cedc2d2f3b..6cf5b32e469b 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java @@ -107,6 +107,8 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr setLayoutForMediaInScene(); }; + private boolean mLastListening; + @VisibleForTesting protected final QSPanel.OnConfigurationChangedListener mOnConfigurationChangedListener = new QSPanel.OnConfigurationChangedListener() { @@ -242,6 +244,8 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr switchTileLayout(true); mDumpManager.registerDumpable(mView.getDumpableTag(), this); + + setListening(mLastListening); } private void registerForMediaInteractorChanges() { @@ -259,7 +263,10 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr mQSLogger.logOnViewDetached(mLastOrientation, mView.getDumpableTag()); mView.removeOnConfigurationChangedListener(mOnConfigurationChangedListener); + // Call directly so mLastListening is not modified. We want that to have the last actual + // value. mView.getTileLayout().setListening(false, mUiEventLogger); + mView.setListening(false); mMediaHost.removeVisibilityChangeListener(mMediaHostVisibilityListener); @@ -436,6 +443,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr } void setListening(boolean listening) { + mLastListening = listening; if (mView.isListening() == listening) return; mView.setListening(listening); |