SettingsProvider should use correct cache when redirecting to user 0.

SettingsProvider reads secure and system settings for managed
profiles from user 0 instead. However it still checks the cache
for the managed profile not user 0.

Bug: 17736586
Change-Id: I15d44b8a5779b01e6b9032e528dc34f5c5602449
This commit is contained in:
Kenny Guy
2014-10-01 18:35:37 +01:00
parent 7dc7f676d6
commit a37d000c2b

View File

@@ -691,12 +691,11 @@ public class SettingsProvider extends ContentProvider {
if (Settings.CALL_METHOD_GET_SYSTEM.equals(method)) {
if (LOCAL_LOGV) Slog.v(TAG, "call(system:" + request + ") for " + callingUser);
// Check if this request should be (re)directed to the primary user's db
if (callingUser == UserHandle.USER_OWNER
|| shouldShadowParentProfile(callingUser, sSystemCloneToManagedKeys, request)) {
dbHelper = getOrEstablishDatabase(UserHandle.USER_OWNER);
} else {
dbHelper = getOrEstablishDatabase(callingUser);
if (callingUser != UserHandle.USER_OWNER
&& shouldShadowParentProfile(callingUser, sSystemCloneToManagedKeys, request)) {
callingUser = UserHandle.USER_OWNER;
}
dbHelper = getOrEstablishDatabase(callingUser);
cache = sSystemCaches.get(callingUser);
return lookupValue(dbHelper, TABLE_SYSTEM, cache, request);
}
@@ -710,10 +709,9 @@ public class SettingsProvider extends ContentProvider {
UserManager.DISALLOW_SHARE_LOCATION, new UserHandle(callingUser))) {
return sSecureCaches.get(callingUser).putIfAbsent(request, "");
}
dbHelper = getOrEstablishDatabase(UserHandle.USER_OWNER);
} else {
dbHelper = getOrEstablishDatabase(callingUser);
callingUser = UserHandle.USER_OWNER;
}
dbHelper = getOrEstablishDatabase(callingUser);
cache = sSecureCaches.get(callingUser);
return lookupValue(dbHelper, TABLE_SECURE, cache, request);
}