From 33c1bc586c4b2dde2d54c16cd9c7b8bc366e5096 Mon Sep 17 00:00:00 2001 From: Andrii Kulian Date: Mon, 29 Feb 2016 10:38:59 -0800 Subject: [PATCH] Reset pointer icon when view is not present Sometimes pointer change request is delivered after view is detached from its ViewRootImpl. E.g. when popup is present click outside to close it. Bug: 27292939 Change-Id: I925728af334a1e1ae53f7e530d639e50b0c37f2b --- core/java/android/view/ViewRootImpl.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index b9eb0a96f98d5..2e6de94659ba4 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -4393,8 +4393,14 @@ public final class ViewRootImpl implements ViewParent, private boolean updatePointerIcon(MotionEvent event) { final float x = event.getX(); final float y = event.getY(); + if (mView == null) { + // E.g. click outside a popup to dismiss it + Slog.d(mTag, "updatePointerIcon called after view was removed"); + return false; + } if (x < 0 || x >= mView.getWidth() || y < 0 || y >= mView.getHeight()) { - Slog.e(mTag, "updatePointerIcon called with position out of bounds"); + // E.g. when moving window divider with mouse + Slog.d(mTag, "updatePointerIcon called with position out of bounds"); return false; } final PointerIcon pointerIcon = mView.getPointerIcon(event, x, y);