am cf14b8ba: am 143e118f: Merge "Make grant default permission more robust." into mnc-dev

* commit 'cf14b8ba1f86820b6307d65b6fc800d9aa96a6ed':
  Make grant default permission more robust.
This commit is contained in:
Svet Ganov
2015-06-26 23:19:34 +00:00
committed by Android Git Automerger
3 changed files with 58 additions and 8 deletions

View File

@@ -431,6 +431,8 @@ final class DefaultPermissionGrantPolicy {
}
}
}
mService.mSettings.onDefaultRuntimePermissionsGrantedLPr(userId);
}
}

View File

@@ -14110,6 +14110,8 @@ public class PackageManagerService extends IPackageManager.Stub {
Log.d(TAG, "compatibility mode:" + compatibilityModeEnabled);
}
int[] grantPermissionsUserIds = EMPTY_INT_ARRAY;
synchronized (mPackages) {
// Verify that all of the preferred activity components actually
// exist. It is possible for applications to be updated and at
@@ -14139,15 +14141,19 @@ public class PackageManagerService extends IPackageManager.Stub {
mSettings.mPreferredActivities.keyAt(i));
}
}
for (int userId : UserManagerService.getInstance().getUserIds()) {
if (!mSettings.areDefaultRuntimePermissionsGrantedLPr(userId)) {
grantPermissionsUserIds = ArrayUtils.appendInt(
grantPermissionsUserIds, userId);
}
}
}
sUserManager.systemReady();
// If we upgraded grant all default permissions before kicking off.
if (isFirstBoot() || (CLEAR_RUNTIME_PERMISSIONS_ON_UPGRADE && mIsUpgrade)) {
updatePermissionsLPw(null, null, UPDATE_PERMISSIONS_ALL);
for (int userId : UserManagerService.getInstance().getUserIds()) {
mDefaultPermissionPolicy.grantDefaultPermissions(userId);
}
for (int userId : grantPermissionsUserIds) {
mDefaultPermissionPolicy.grantDefaultPermissions(userId);
}
// Kick off any messages waiting for system ready

View File

@@ -195,6 +195,7 @@ final class Settings {
private static final String ATTR_BLOCK_UNINSTALL = "blockUninstall";
private static final String ATTR_DOMAIN_VERIFICATON_STATE = "domainVerificationStatus";
private static final String ATTR_PACKAGE_NAME= "packageName";
private static final String ATTR_FINGERPRINT = "fingerprint";
private final Object mLock;
@@ -1177,6 +1178,16 @@ final class Settings {
}
}
boolean areDefaultRuntimePermissionsGrantedLPr(int userId) {
return mRuntimePermissionsPersistence
.areDefaultRuntimPermissionsGrantedLPr(userId);
}
void onDefaultRuntimePermissionsGrantedLPr(int userId) {
mRuntimePermissionsPersistence
.onDefaultRuntimePermissionsGrantedLPr(userId);
}
/**
* Returns whether the current database has is older than {@code version}
* for apps on internal storage.
@@ -4364,15 +4375,33 @@ final class Settings {
private final Object mLock;
@GuardedBy("mLock")
private SparseBooleanArray mWriteScheduled = new SparseBooleanArray();
private final SparseBooleanArray mWriteScheduled = new SparseBooleanArray();
@GuardedBy("mLock")
private SparseLongArray mLastNotWrittenMutationTimesMillis = new SparseLongArray();
// The mapping keys are user ids.
private final SparseLongArray mLastNotWrittenMutationTimesMillis = new SparseLongArray();
@GuardedBy("mLock")
// The mapping keys are user ids.
private final SparseArray<String> mFingerprints = new SparseArray<>();
@GuardedBy("mLock")
// The mapping keys are user ids.
private final SparseBooleanArray mDefaultPermissionsGranted = new SparseBooleanArray();
public RuntimePermissionPersistence(Object lock) {
mLock = lock;
}
public boolean areDefaultRuntimPermissionsGrantedLPr(int userId) {
return mDefaultPermissionsGranted.get(userId);
}
public void onDefaultRuntimePermissionsGrantedLPr(int userId) {
mFingerprints.put(userId, Build.FINGERPRINT);
writePermissionsForUserAsyncLPr(userId);
}
public void writePermissionsForUserSyncLPr(int userId) {
mHandler.removeMessages(userId);
writePermissionsSync(userId);
@@ -4457,6 +4486,9 @@ final class Settings {
serializer.startDocument(null, true);
serializer.startTag(null, TAG_RUNTIME_PERMISSIONS);
String fingerprint = mFingerprints.get(userId);
serializer.attribute(null, ATTR_FINGERPRINT, fingerprint);
final int packageCount = permissionsForPackage.size();
for (int i = 0; i < packageCount; i++) {
String packageName = permissionsForPackage.keyAt(i);
@@ -4481,7 +4513,10 @@ final class Settings {
serializer.endDocument();
destination.finishWrite(out);
// Any error while writing is fatal.
if (Build.FINGERPRINT.equals(fingerprint)) {
mDefaultPermissionsGranted.put(userId, true);
}
// Any error while writing is fatal.
} catch (Throwable t) {
Slog.wtf(PackageManagerService.TAG,
"Failed to write settings, restoring backup", t);
@@ -4559,6 +4594,13 @@ final class Settings {
}
switch (parser.getName()) {
case TAG_RUNTIME_PERMISSIONS: {
String fingerprint = parser.getAttributeValue(null, ATTR_FINGERPRINT);
mFingerprints.put(userId, fingerprint);
final boolean defaultsGranted = Build.FINGERPRINT.equals(fingerprint);
mDefaultPermissionsGranted.put(userId, defaultsGranted);
} break;
case TAG_PACKAGE: {
String name = parser.getAttributeValue(null, ATTR_NAME);
PackageSetting ps = mPackages.get(name);