From 79c8c820ad1e7fbd3eb1bf6d06ca3b44d40cd832 Mon Sep 17 00:00:00 2001 From: Fabián Kozynski Date: Tue, 24 Sep 2024 15:28:40 -0400 Subject: 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 --- .../systemui/qs/QSPanelControllerBaseTest.java | 34 ++++++++++++++++++++++ .../android/systemui/qs/QSPanelControllerBase.java | 8 +++++ 2 files changed, 42 insertions(+) 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 extends ViewContr setLayoutForMediaInScene(); }; + private boolean mLastListening; + @VisibleForTesting protected final QSPanel.OnConfigurationChangedListener mOnConfigurationChangedListener = new QSPanel.OnConfigurationChangedListener() { @@ -242,6 +244,8 @@ public abstract class QSPanelControllerBase extends ViewContr switchTileLayout(true); mDumpManager.registerDumpable(mView.getDumpableTag(), this); + + setListening(mLastListening); } private void registerForMediaInteractorChanges() { @@ -259,7 +263,10 @@ public abstract class QSPanelControllerBase 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 extends ViewContr } void setListening(boolean listening) { + mLastListening = listening; if (mView.isListening() == listening) return; mView.setListening(listening); -- cgit v1.2.3-59-g8ed1b