From 7811d9f5095a343acd218f4bb0a0e9e8f480b401 Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Mon, 27 Jul 2015 15:10:13 -0700 Subject: Fix and deprecate lock pattern related settings Bug: 22557690 Change-Id: Ib4b3ef7cebe815ba9d9d2284f945a9ec746b216c --- api/current.txt | 2 +- api/system-current.txt | 2 +- core/java/android/provider/Settings.java | 33 ++++++++++++++++++---- .../com/android/server/LockSettingsService.java | 7 ++++- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/api/current.txt b/api/current.txt index 7c5115f..4f296dc 100644 --- a/api/current.txt +++ b/api/current.txt @@ -26571,7 +26571,7 @@ package android.provider { field public static final deprecated java.lang.String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed"; field public static final deprecated java.lang.String LOCK_PATTERN_ENABLED = "lock_pattern_autolock"; field public static final deprecated java.lang.String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled"; - field public static final java.lang.String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern"; + field public static final deprecated java.lang.String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern"; field public static final deprecated java.lang.String LOGGING_ID = "logging_id"; field public static final deprecated java.lang.String NETWORK_PREFERENCE = "network_preference"; field public static final java.lang.String PARENTAL_CONTROL_ENABLED = "parental_control_enabled"; diff --git a/api/system-current.txt b/api/system-current.txt index a08a011..e07ef38 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -28631,7 +28631,7 @@ package android.provider { field public static final deprecated java.lang.String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed"; field public static final deprecated java.lang.String LOCK_PATTERN_ENABLED = "lock_pattern_autolock"; field public static final deprecated java.lang.String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled"; - field public static final java.lang.String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern"; + field public static final deprecated java.lang.String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern"; field public static final deprecated java.lang.String LOGGING_ID = "logging_id"; field public static final deprecated java.lang.String NETWORK_PREFERENCE = "network_preference"; field public static final java.lang.String PARENTAL_CONTROL_ENABLED = "parental_control_enabled"; diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index a79970c..c5534c3 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -19,6 +19,8 @@ package android.provider; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; +import android.app.ActivityThread; +import android.app.Application; import android.app.SearchManager; import android.app.WallpaperManager; import android.content.ComponentName; @@ -3839,10 +3841,24 @@ public final class Settings { } } if (sLockSettings != null && !sIsSystemProcess) { - try { - return sLockSettings.getString(name, "0", userHandle); - } catch (RemoteException re) { - // Fall through + // No context; use the ActivityThread's context as an approximation for + // determining the target API level. + Application application = ActivityThread.currentApplication(); + + boolean isPreMnc = application != null + && application.getApplicationInfo() != null + && application.getApplicationInfo().targetSdkVersion + <= VERSION_CODES.LOLLIPOP_MR1; + if (isPreMnc) { + try { + return sLockSettings.getString(name, "0", userHandle); + } catch (RemoteException re) { + // Fall through + } + } else { + throw new SecurityException("Settings.Secure." + name + + " is deprecated and no longer accessible." + + " See API documentation for potential replacements."); } } } @@ -4378,14 +4394,19 @@ public final class Settings { * Whether autolock is enabled (0 = false, 1 = true) * * @deprecated Use {@link android.app.KeyguardManager} to determine the state and security - * level of the keyguard. + * level of the keyguard. Accessing this setting from an app that is targeting + * {@link VERSION_CODES#MNC} or later throws a {@code SecurityException}. */ @Deprecated public static final String LOCK_PATTERN_ENABLED = "lock_pattern_autolock"; /** * Whether lock pattern is visible as user enters (0 = false, 1 = true) + * + * @deprecated Accessing this setting from an app that is targeting + * {@link VERSION_CODES#MNC} or later throws a {@code SecurityException}. */ + @Deprecated public static final String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern"; /** @@ -4395,6 +4416,8 @@ public final class Settings { * @deprecated Starting in {@link VERSION_CODES#JELLY_BEAN_MR1} the * lockscreen uses * {@link Settings.System#HAPTIC_FEEDBACK_ENABLED}. + * Accessing this setting from an app that is targeting + * {@link VERSION_CODES#MNC} or later throws a {@code SecurityException}. */ @Deprecated public static final String diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java index 42794e7..5e2fe5a 100644 --- a/services/core/java/com/android/server/LockSettingsService.java +++ b/services/core/java/com/android/server/LockSettingsService.java @@ -335,7 +335,12 @@ public class LockSettingsService extends ILockSettings.Stub { public String getStringUnchecked(String key, String defaultValue, int userId) { if (Settings.Secure.LOCK_PATTERN_ENABLED.equals(key)) { - return mLockPatternUtils.isLockPatternEnabled(userId) ? "1" : "0"; + long ident = Binder.clearCallingIdentity(); + try { + return mLockPatternUtils.isLockPatternEnabled(userId) ? "1" : "0"; + } finally { + Binder.restoreCallingIdentity(ident); + } } return mStorage.readKeyValue(key, defaultValue, userId); -- cgit v1.1