Merge "Handle "uninstalled" apps when pruning app-ops." into mnc-dr-dev
This commit is contained in:
@@ -63,7 +63,9 @@ interface IPackageManager {
|
||||
boolean isPackageAvailable(String packageName, int userId);
|
||||
PackageInfo getPackageInfo(String packageName, int flags, int userId);
|
||||
int getPackageUid(String packageName, int userId);
|
||||
int getPackageUidEtc(String packageName, int flags, int userId);
|
||||
int[] getPackageGids(String packageName, int userId);
|
||||
int[] getPackageGidsEtc(String packageName, int flags, int userId);
|
||||
|
||||
String[] currentToCanonicalPackageNames(in String[] names);
|
||||
String[] canonicalToCurrentPackageNames(in String[] names);
|
||||
|
||||
@@ -39,7 +39,6 @@ import android.content.Context;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.media.AudioAttributes;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Binder;
|
||||
@@ -263,12 +262,12 @@ public class AppOpsService extends IAppOpsService.Stub {
|
||||
Iterator<Ops> it = pkgs.values().iterator();
|
||||
while (it.hasNext()) {
|
||||
Ops ops = it.next();
|
||||
int curUid;
|
||||
int curUid = -1;
|
||||
try {
|
||||
curUid = mContext.getPackageManager().getPackageUid(ops.packageName,
|
||||
curUid = AppGlobals.getPackageManager().getPackageUidEtc(ops.packageName,
|
||||
PackageManager.GET_UNINSTALLED_PACKAGES,
|
||||
UserHandle.getUserId(ops.uidState.uid));
|
||||
} catch (NameNotFoundException e) {
|
||||
curUid = -1;
|
||||
} catch (RemoteException ignored) {
|
||||
}
|
||||
if (curUid != ops.uidState.uid) {
|
||||
Slog.i(TAG, "Pruning old package " + ops.packageName
|
||||
|
||||
@@ -2733,26 +2733,38 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
|
||||
@Override
|
||||
public int getPackageUid(String packageName, int userId) {
|
||||
return getPackageUidEtc(packageName, 0, userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPackageUidEtc(String packageName, int flags, int userId) {
|
||||
if (!sUserManager.exists(userId)) return -1;
|
||||
enforceCrossUserPermission(Binder.getCallingUid(), userId, false, false, "get package uid");
|
||||
|
||||
// reader
|
||||
synchronized (mPackages) {
|
||||
PackageParser.Package p = mPackages.get(packageName);
|
||||
if(p != null) {
|
||||
final PackageParser.Package p = mPackages.get(packageName);
|
||||
if (p != null) {
|
||||
return UserHandle.getUid(userId, p.applicationInfo.uid);
|
||||
}
|
||||
PackageSetting ps = mSettings.mPackages.get(packageName);
|
||||
if((ps == null) || (ps.pkg == null) || (ps.pkg.applicationInfo == null)) {
|
||||
return -1;
|
||||
if ((flags & PackageManager.GET_UNINSTALLED_PACKAGES) != 0) {
|
||||
final PackageSetting ps = mSettings.mPackages.get(packageName);
|
||||
if (ps != null) {
|
||||
return UserHandle.getUid(userId, ps.appId);
|
||||
}
|
||||
}
|
||||
p = ps.pkg;
|
||||
return p != null ? UserHandle.getUid(userId, p.applicationInfo.uid) : -1;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getPackageGids(String packageName, int userId) throws RemoteException {
|
||||
public int[] getPackageGids(String packageName, int userId) {
|
||||
return getPackageGidsEtc(packageName, 0, userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getPackageGidsEtc(String packageName, int flags, int userId) {
|
||||
if (!sUserManager.exists(userId)) {
|
||||
return null;
|
||||
}
|
||||
@@ -2762,14 +2774,17 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
|
||||
// reader
|
||||
synchronized (mPackages) {
|
||||
PackageParser.Package p = mPackages.get(packageName);
|
||||
if (DEBUG_PACKAGE_INFO) {
|
||||
Log.v(TAG, "getPackageGids" + packageName + ": " + p);
|
||||
}
|
||||
final PackageParser.Package p = mPackages.get(packageName);
|
||||
if (p != null) {
|
||||
PackageSetting ps = (PackageSetting) p.mExtras;
|
||||
return ps.getPermissionsState().computeGids(userId);
|
||||
}
|
||||
if ((flags & PackageManager.GET_UNINSTALLED_PACKAGES) != 0) {
|
||||
final PackageSetting ps = mSettings.mPackages.get(packageName);
|
||||
if (ps != null) {
|
||||
return ps.getPermissionsState().computeGids(userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user