From 5ed888c94181c288b55cadb74042e41cac18bc4a Mon Sep 17 00:00:00 2001 From: Bryce Lee Date: Fri, 31 Mar 2023 09:27:14 -0700 Subject: [PATCH] Capture IllegalArgumentException when unregistering dock receiver. RotationButtonController uses a broadcast receiver to track the current dock state. The controller is used in multiple spots, including Launcher. The usage paths in Launcher are open to a race condition where multiple threads might unregister the receiver, side stepping measures to pair unregister with register. This changelist catches the exception, which is consistent with other broadcast receiver unregistration in Launcher. Test: manual Fixes: 275476588 Change-Id: I809dc66ae20675312c538498bbade0c0c8f4b828 --- .../shared/rotation/RotationButtonController.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/rotation/RotationButtonController.java b/packages/SystemUI/shared/src/com/android/systemui/shared/rotation/RotationButtonController.java index 53fab69bd3b84..cab54d08b3ec7 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/rotation/RotationButtonController.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/rotation/RotationButtonController.java @@ -66,7 +66,6 @@ import com.android.systemui.shared.system.TaskStackChangeListeners; import java.io.PrintWriter; import java.util.Optional; -import java.util.function.Consumer; import java.util.function.Supplier; /** @@ -244,7 +243,12 @@ public class RotationButtonController { mListenersRegistered = false; - mContext.unregisterReceiver(mDockedReceiver); + try { + mContext.unregisterReceiver(mDockedReceiver); + } catch (IllegalArgumentException e) { + Log.e(TAG, "Docked receiver already unregistered", e); + } + if (mRotationWatcherRegistered) { try { WindowManagerGlobal.getWindowManagerService().removeRotationWatcher(