From 9fbebce2820583b25eeaf3e73b603303fddc11b1 Mon Sep 17 00:00:00 2001 From: Lucas Silva Date: Wed, 2 Feb 2022 18:52:52 +0000 Subject: [PATCH] Fix small bug in DreamOverlayService destroy. Currently we are registering the callback for the second time instead of removing the callback. Test: atest DreamOverlayService Change-Id: I56aa05b52f85ce60b15cb73e9be3a25501534656 --- .../android/systemui/dreams/DreamOverlayService.java | 6 ++++-- .../systemui/dreams/DreamOverlayServiceTest.java | 11 +++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java index 77997e437e33c..4696eed9b3d7e 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java @@ -122,10 +122,12 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ @Override public void onDestroy() { - mKeyguardUpdateMonitor.registerCallback(mKeyguardCallback); + mKeyguardUpdateMonitor.removeCallback(mKeyguardCallback); setCurrentState(Lifecycle.State.DESTROYED); final WindowManager windowManager = mContext.getSystemService(WindowManager.class); - windowManager.removeView(mWindow.getDecorView()); + if (mWindow != null) { + windowManager.removeView(mWindow.getDecorView()); + } mStateController.setOverlayActive(false); super.onDestroy(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java index 8adb55b8d6e21..529a16319cb55 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/DreamOverlayServiceTest.java @@ -31,6 +31,7 @@ import android.testing.AndroidTestingRunner; import android.view.WindowManager; import android.view.WindowManagerImpl; +import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleRegistry; import androidx.test.filters.SmallTest; @@ -191,4 +192,14 @@ public class DreamOverlayServiceTest extends SysuiTestCase { | Complication.COMPLICATION_TYPE_WEATHER; verify(mStateController).setAvailableComplicationTypes(expectedTypes); } + + @Test + public void testDestroy() { + mService.onDestroy(); + mMainExecutor.runAllReady(); + + verify(mKeyguardUpdateMonitor).removeCallback(any()); + verify(mLifecycleRegistry).setCurrentState(Lifecycle.State.DESTROYED); + verify(mStateController).setOverlayActive(false); + } }