From 2d8ecf9df0ba4f503a09e87f91d12433f29faf52 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Mon, 22 Apr 2013 17:17:03 -0700 Subject: [PATCH] Fix bug where owner info wasn't being updated properly. There was a bug where older platforms only stored the 'enabled' value if the checkbox in Settings was toggled at least once. This caused the checkbox to be checked off when upgrading the device. The code now mimicks the old behavior by detecting a non-empty info string and setting 'enabled' appropriately. Fixes bug 8659048 Change-Id: If2431d54f168a0aab286628165dd3f6b4a0d5cf8 --- .../android/server/LockSettingsService.java | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/services/java/com/android/server/LockSettingsService.java b/services/java/com/android/server/LockSettingsService.java index 8e45415d6b809..0a645f2745319 100644 --- a/services/java/com/android/server/LockSettingsService.java +++ b/services/java/com/android/server/LockSettingsService.java @@ -106,24 +106,31 @@ public class LockSettingsService extends ILockSettings.Stub { final ContentResolver cr = mContext.getContentResolver(); List users = um.getUsers(); for (int user = 0; user < users.size(); user++) { - int userId = users.get(user).getUserHandle().getIdentifier(); - for (String perUserSetting : MIGRATE_SETTINGS_PER_USER) { - // Handle Strings - String value = Settings.Secure.getStringForUser(cr, perUserSetting, userId); - if (value != null) { - setString(perUserSetting, value, userId); - Settings.Secure.putStringForUser(cr, perUserSetting, "", userId); - continue; - } + // Migrate owner info + final int userId = users.get(user).id; + final String OWNER_INFO = Secure.LOCK_SCREEN_OWNER_INFO; + String ownerInfo = Settings.Secure.getStringForUser(cr, OWNER_INFO, userId); + if (ownerInfo != null) { + setString(OWNER_INFO, ownerInfo, userId); + Settings.Secure.putStringForUser(cr, ownerInfo, "", userId); + } - // Handle integers - try { - int ivalue = Settings.Secure.getIntForUser(cr, perUserSetting, userId); - setLong(perUserSetting, ivalue, userId); - Settings.Secure.putIntForUser(cr, perUserSetting, 0, userId); - } catch (SettingNotFoundException e) { + // Migrate owner info enabled. Note there was a bug where older platforms only + // stored this value if the checkbox was toggled at least once. The code detects + // this case by handling the exception. + final String OWNER_INFO_ENABLED = Secure.LOCK_SCREEN_OWNER_INFO_ENABLED; + boolean enabled; + try { + int ivalue = Settings.Secure.getIntForUser(cr, OWNER_INFO_ENABLED, userId); + enabled = ivalue != 0; + setLong(OWNER_INFO_ENABLED, enabled ? 1 : 0, userId); + } catch (SettingNotFoundException e) { + // Setting was never stored. Store it if the string is not empty. + if (!TextUtils.isEmpty(ownerInfo)) { + setLong(OWNER_INFO_ENABLED, 1, userId); } } + Settings.Secure.putIntForUser(cr, OWNER_INFO_ENABLED, 0, userId); } // No need to move the password / pattern files. They're already in the right place. setString("migrated_user_specific", "true", 0); @@ -441,7 +448,8 @@ public class LockSettingsService extends ILockSettings.Stub { Secure.LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED }; - private static final String[] MIGRATE_SETTINGS_PER_USER = new String[] { + // These are protected with a read permission + private static final String[] READ_PROFILE_PROTECTED_SETTINGS = new String[] { Secure.LOCK_SCREEN_OWNER_INFO_ENABLED, Secure.LOCK_SCREEN_OWNER_INFO };