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); + } }