Merge "Keep the legacy ssaid for apps on SD card"
This commit is contained in:
committed by
Android (Google) Code Review
commit
bf5f48e16c
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user