Merge "Keep the legacy ssaid for apps on SD card"

This commit is contained in:
TreeHugger Robot
2018-02-02 21:08:25 +00:00
committed by Android (Google) Code Review
2 changed files with 53 additions and 24 deletions

View File

@@ -2328,7 +2328,9 @@ public class SettingsProvider extends ContentProvider {
// Get all uids for the user's packages.
final List<PackageInfo> packages;
try {
packages = mPackageManager.getInstalledPackages(0, user.id).getList();
packages = mPackageManager.getInstalledPackages(
PackageManager.MATCH_UNINSTALLED_PACKAGES,
user.id).getList();
} catch (RemoteException e) {
throw new IllegalStateException("Package manager not available");
}
@@ -3401,7 +3403,9 @@ public class SettingsProvider extends ContentProvider {
// Fill each uid with the legacy ssaid to be backwards compatible.
final List<PackageInfo> packages;
try {
packages = mPackageManager.getInstalledPackages(0, userId).getList();
packages = mPackageManager.getInstalledPackages(
PackageManager.MATCH_UNINSTALLED_PACKAGES,
userId).getList();
} catch (RemoteException e) {
throw new IllegalStateException("Package manager not available");
}
@@ -3416,6 +3420,9 @@ public class SettingsProvider extends ContentProvider {
// Android Id doesn't exist for this package so create it.
ssaidSettings.insertSettingLocked(uid, legacySsaid, null, true,
info.packageName);
if (DEBUG) {
Slog.d(LOG_TAG, "Keep the legacy ssaid for uid=" + uid);
}
}
}
}

View File

@@ -3840,10 +3840,6 @@ Slog.e("TODD",
if (ps == null) {
return null;
}
PackageParser.Package p = ps.pkg;
if (p == null) {
return null;
}
final int callingUid = Binder.getCallingUid();
// Filter out ephemeral app metadata:
// * The system/shell/root can see metadata for any app
@@ -3855,32 +3851,58 @@ Slog.e("TODD",
return null;
}
final PermissionsState permissionsState = ps.getPermissionsState();
// Compute GIDs only if requested
final int[] gids = (flags & PackageManager.GET_GIDS) == 0
? EMPTY_INT_ARRAY : permissionsState.computeGids(userId);
// Compute granted permissions only if package has requested permissions
final Set<String> permissions = ArrayUtils.isEmpty(p.requestedPermissions)
? Collections.<String>emptySet() : permissionsState.getPermissions(userId);
final PackageUserState state = ps.readUserState(userId);
if ((flags & MATCH_UNINSTALLED_PACKAGES) != 0
&& ps.isSystem()) {
flags |= MATCH_ANY_USER;
}
PackageInfo packageInfo = PackageParser.generatePackageInfo(p, gids, flags,
ps.firstInstallTime, ps.lastUpdateTime, permissions, state, userId);
final PackageUserState state = ps.readUserState(userId);
PackageParser.Package p = ps.pkg;
if (p != null) {
final PermissionsState permissionsState = ps.getPermissionsState();
if (packageInfo == null) {
// Compute GIDs only if requested
final int[] gids = (flags & PackageManager.GET_GIDS) == 0
? EMPTY_INT_ARRAY : permissionsState.computeGids(userId);
// Compute granted permissions only if package has requested permissions
final Set<String> permissions = ArrayUtils.isEmpty(p.requestedPermissions)
? Collections.<String>emptySet() : permissionsState.getPermissions(userId);
PackageInfo packageInfo = PackageParser.generatePackageInfo(p, gids, flags,
ps.firstInstallTime, ps.lastUpdateTime, permissions, state, userId);
if (packageInfo == null) {
return null;
}
packageInfo.packageName = packageInfo.applicationInfo.packageName =
resolveExternalPackageNameLPr(p);
return packageInfo;
} else if ((flags & MATCH_UNINSTALLED_PACKAGES) != 0 && state.isAvailable(flags)) {
PackageInfo pi = new PackageInfo();
pi.packageName = ps.name;
pi.setLongVersionCode(ps.versionCode);
pi.sharedUserId = (ps.sharedUser != null) ? ps.sharedUser.name : null;
pi.firstInstallTime = ps.firstInstallTime;
pi.lastUpdateTime = ps.lastUpdateTime;
ApplicationInfo ai = new ApplicationInfo();
ai.packageName = ps.name;
ai.uid = UserHandle.getUid(userId, ps.appId);
ai.primaryCpuAbi = ps.primaryCpuAbiString;
ai.secondaryCpuAbi = ps.secondaryCpuAbiString;
ai.versionCode = ps.versionCode;
ai.flags = ps.pkgFlags;
ai.privateFlags = ps.pkgPrivateFlags;
pi.applicationInfo = PackageParser.generateApplicationInfo(ai, flags, state, userId);
if (DEBUG_PACKAGE_INFO) Log.v(TAG, "ps.pkg is n/a for ["
+ ps.name + "]. Provides a minimum info.");
return pi;
} else {
return null;
}
packageInfo.packageName = packageInfo.applicationInfo.packageName =
resolveExternalPackageNameLPr(p);
return packageInfo;
}
@Override