diff --git a/packages/SystemUI/src/com/android/systemui/SliceBroadcastRelayHandler.java b/packages/SystemUI/src/com/android/systemui/SliceBroadcastRelayHandler.java index 922c65e453beb..b3fc69e8a49d5 100644 --- a/packages/SystemUI/src/com/android/systemui/SliceBroadcastRelayHandler.java +++ b/packages/SystemUI/src/com/android/systemui/SliceBroadcastRelayHandler.java @@ -59,7 +59,10 @@ public class SliceBroadcastRelayHandler extends SystemUI { } else if (SliceBroadcastRelay.ACTION_UNREGISTER.equals(intent.getAction())) { Uri uri = intent.getParcelableExtra(SliceBroadcastRelay.EXTRA_URI); if (DEBUG) Log.d(TAG, "Unregister " + uri); - getAndRemoveRelay(uri).unregister(mContext); + BroadcastRelay relay = getAndRemoveRelay(uri); + if (relay != null) { + relay.unregister(mContext); + } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java index c6e85c3f81a06..19e1a5cef183c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/SliceBroadcastRelayHandlerTest.java @@ -94,6 +94,22 @@ public class SliceBroadcastRelayHandlerTest extends SysuiTestCase { verify(relayHandler.mContext).unregisterReceiver(eq(relay.getValue())); } + @Test + public void testUnregisterWithoutRegister() { + Uri testUri = new Uri.Builder() + .scheme(ContentResolver.SCHEME_CONTENT) + .authority("something") + .path("test") + .build(); + SliceBroadcastRelayHandler relayHandler = new SliceBroadcastRelayHandler(); + relayHandler.mContext = spy(mContext); + + Intent intent = new Intent(SliceBroadcastRelay.ACTION_UNREGISTER); + intent.putExtra(SliceBroadcastRelay.EXTRA_URI, ContentProvider.maybeAddUserId(testUri, 0)); + relayHandler.handleIntent(intent); + // No crash + } + @Test public void testRelay() { Receiver.sReceiver = mock(BroadcastReceiver.class);