diff --git a/core/java/com/android/internal/widget/PointerLocationView.java b/core/java/com/android/internal/widget/PointerLocationView.java index 09ff4e0aa0764..9ee9b82494937 100644 --- a/core/java/com/android/internal/widget/PointerLocationView.java +++ b/core/java/com/android/internal/widget/PointerLocationView.java @@ -828,6 +828,8 @@ public class PointerLocationView extends View implements InputDeviceListener, mSystemGestureExclusionListener, mContext.getDisplayId()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); + } catch (IllegalArgumentException e) { + Log.e(TAG, "Failed to unregister window manager callbacks", e); } } diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index 14e2241112861..e6b5c2000be2c 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -2907,7 +2907,10 @@ public class DisplayPolicy { return; } - mDisplayContent.unregisterPointerEventListener(mPointerLocationView); + if (!mDisplayContent.isRemoved()) { + mDisplayContent.unregisterPointerEventListener(mPointerLocationView); + } + final WindowManager wm = mContext.getSystemService(WindowManager.class); wm.removeView(mPointerLocationView); mPointerLocationView = null; @@ -2932,6 +2935,9 @@ public class DisplayPolicy { mHandler.post(mGestureNavigationSettingsObserver::unregister); mHandler.post(mForceShowNavBarSettingsObserver::unregister); mImmersiveModeConfirmation.release(); + if (mService.mPointerLocationEnabled) { + setPointerLocationEnabled(false); + } } @VisibleForTesting