summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author shawnlin <shawnlin@google.com> 2020-02-26 17:51:51 +0800
committer shawnlin <shawnlin@google.com> 2020-02-26 17:57:33 +0800
commit014c68767b4caaa191f31cd8e1fd249ae992dfc2 (patch)
tree46f49bbd893e84014caa38f150714c35367b5edd
parent16ba0682934fbfe368790c9234e69d2b4c46e169 (diff)
Fixed listeners were unexpectedly unregistered when device rotated
Fixes: 150271714 Test: atest ScreenDecorationsTest Change-Id: I66ad1baf7ef801f9c3982260c45d84a2f9e5e391
-rw-r--r--packages/SystemUI/src/com/android/systemui/ScreenDecorations.java12
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java48
2 files changed, 56 insertions, 4 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
index 6ce6353147fb..0f896c44ae63 100644
--- a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
+++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
@@ -99,7 +99,8 @@ public class ScreenDecorations extends SystemUI implements Tunable {
private static final boolean DEBUG_COLOR = DEBUG_SCREENSHOT_ROUNDED_CORNERS;
private DisplayManager mDisplayManager;
- private boolean mIsRegistered;
+ @VisibleForTesting
+ protected boolean mIsRegistered;
private final BroadcastDispatcher mBroadcastDispatcher;
private final Handler mMainHandler;
private final TunerService mTunerService;
@@ -168,7 +169,6 @@ public class ScreenDecorations extends SystemUI implements Tunable {
mDisplayManager = mContext.getSystemService(DisplayManager.class);
updateRoundedCornerRadii();
setupDecorations();
-
mDisplayListener = new DisplayManager.DisplayListener() {
@Override
public void onDisplayAdded(int displayId) {
@@ -230,7 +230,10 @@ public class ScreenDecorations extends SystemUI implements Tunable {
removeAllOverlays();
}
- if (hasOverlays() && !mIsRegistered) {
+ if (hasOverlays()) {
+ if (mIsRegistered) {
+ return;
+ }
DisplayMetrics metrics = new DisplayMetrics();
mDisplayManager.getDisplay(DEFAULT_DISPLAY).getMetrics(metrics);
mDensity = metrics.density;
@@ -271,7 +274,8 @@ public class ScreenDecorations extends SystemUI implements Tunable {
return mContext.getDisplay().getCutout();
}
- private boolean hasOverlays() {
+ @VisibleForTesting
+ boolean hasOverlays() {
if (mOverlays == null) {
return false;
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
index a974c6d0e5b5..1b34b3d85c09 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ScreenDecorationsTest.java
@@ -456,4 +456,52 @@ public class ScreenDecorationsTest extends SysuiTestCase {
assertThat(rectsToRegion(Collections.singletonList(rect)).getBounds(), is(rect));
}
+ @Test
+ public void testRegistration_From_NoOverlay_To_HasOverlays() {
+ doReturn(false).when(mScreenDecorations).hasOverlays();
+ mScreenDecorations.start();
+ verify(mTunerService, times(0)).addTunable(any(), any());
+ verify(mTunerService, times(1)).removeTunable(any());
+ assertThat(mScreenDecorations.mIsRegistered, is(false));
+ reset(mTunerService);
+
+ doReturn(true).when(mScreenDecorations).hasOverlays();
+ mScreenDecorations.onConfigurationChanged(new Configuration());
+ verify(mTunerService, times(1)).addTunable(any(), any());
+ verify(mTunerService, times(0)).removeTunable(any());
+ assertThat(mScreenDecorations.mIsRegistered, is(true));
+ }
+
+ @Test
+ public void testRegistration_From_HasOverlays_To_HasOverlays() {
+ doReturn(true).when(mScreenDecorations).hasOverlays();
+
+ mScreenDecorations.start();
+ verify(mTunerService, times(1)).addTunable(any(), any());
+ verify(mTunerService, times(0)).removeTunable(any());
+ assertThat(mScreenDecorations.mIsRegistered, is(true));
+ reset(mTunerService);
+
+ mScreenDecorations.onConfigurationChanged(new Configuration());
+ verify(mTunerService, times(0)).addTunable(any(), any());
+ verify(mTunerService, times(0)).removeTunable(any());
+ assertThat(mScreenDecorations.mIsRegistered, is(true));
+ }
+
+ @Test
+ public void testRegistration_From_HasOverlays_To_NoOverlay() {
+ doReturn(true).when(mScreenDecorations).hasOverlays();
+
+ mScreenDecorations.start();
+ verify(mTunerService, times(1)).addTunable(any(), any());
+ verify(mTunerService, times(0)).removeTunable(any());
+ assertThat(mScreenDecorations.mIsRegistered, is(true));
+ reset(mTunerService);
+
+ doReturn(false).when(mScreenDecorations).hasOverlays();
+ mScreenDecorations.onConfigurationChanged(new Configuration());
+ verify(mTunerService, times(0)).addTunable(any(), any());
+ verify(mTunerService, times(1)).removeTunable(any());
+ assertThat(mScreenDecorations.mIsRegistered, is(false));
+ }
}