From e4e75daa655c862a7d5ee62da4104b13e3f45bbd Mon Sep 17 00:00:00 2001 From: Jun Mukai Date: Tue, 15 Dec 2015 16:19:20 -0800 Subject: [PATCH] Exclude accessing settings from PointerIcon. This code structure causes a crash as rerported, better to extract access to the settings to InputManagerService, who actually cares about it. Bug: 26196092 Change-Id: I4e0dbcc24ccf5d11681738ca3576b64471aa8cc4 --- core/java/android/view/PointerIcon.java | 10 ++++------ .../android/server/input/InputManagerService.java | 13 +++++++++++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/core/java/android/view/PointerIcon.java b/core/java/android/view/PointerIcon.java index aa879cdce69c7..7ba046b0ca1fe 100644 --- a/core/java/android/view/PointerIcon.java +++ b/core/java/android/view/PointerIcon.java @@ -17,8 +17,6 @@ package android.view; import android.annotation.NonNull; -import android.os.UserHandle; -import android.provider.Settings; import android.util.SparseArray; import com.android.internal.util.XmlUtils; @@ -142,6 +140,9 @@ public final class PointerIcon implements Parcelable { private static final PointerIcon gNullIcon = new PointerIcon(STYLE_NULL); private static final SparseArray gSystemIcons = new SparseArray(); + /** @hide */ + public static boolean sUseLargeIcons = false; + private final int mStyle; private int mSystemIconResourceId; private Bitmap mBitmap; @@ -210,10 +211,7 @@ public final class PointerIcon implements Parcelable { styleIndex = getSystemIconStyleIndex(STYLE_DEFAULT); } - int accessibilityConfig = Settings.Secure.getIntForUser( - context.getContentResolver(), Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON, - 0, UserHandle.USER_CURRENT); - int defStyle = (accessibilityConfig == 1) ? + int defStyle = sUseLargeIcons ? com.android.internal.R.style.LargePointer : com.android.internal.R.style.Pointer; TypedArray a = context.obtainStyledAttributes(null, com.android.internal.R.styleable.Pointer, diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java index 8b373834a6b36..68b38179e26d1 100644 --- a/services/core/java/com/android/server/input/InputManagerService.java +++ b/services/core/java/com/android/server/input/InputManagerService.java @@ -320,12 +320,13 @@ public class InputManagerService extends IInputManager.Stub public void onReceive(Context context, Intent intent) { updatePointerSpeedFromSettings(); updateShowTouchesFromSettings(); - nativeReloadPointerIcons(mPtr); + updateAccessibilityLargePointerFromSettings(); } }, new IntentFilter(Intent.ACTION_USER_SWITCHED), null, mHandler); updatePointerSpeedFromSettings(); updateShowTouchesFromSettings(); + updateAccessibilityLargePointerFromSettings(); } // TODO(BT) Pass in paramter for bluetooth system @@ -1366,13 +1367,21 @@ public class InputManagerService extends IInputManager.Stub }, UserHandle.USER_ALL); } + public void updateAccessibilityLargePointerFromSettings() { + final int accessibilityConfig = Settings.Secure.getIntForUser( + mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON, + 0, UserHandle.USER_CURRENT); + PointerIcon.sUseLargeIcons = (accessibilityConfig == 1); + nativeReloadPointerIcons(mPtr); + } + private void registerAccessibilityLargePointerSettingObserver() { mContext.getContentResolver().registerContentObserver( Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON), true, new ContentObserver(mHandler) { @Override public void onChange(boolean selfChange) { - nativeReloadPointerIcons(mPtr); + updateAccessibilityLargePointerFromSettings(); } }, UserHandle.USER_ALL); }