Merge "Merge "UserRestrictionsUtil.isValidRestriction wtfs" into qt-dev am: a126a24c52" into qt-dev-plus-aosp

am: 3f176785c5

Change-Id: Idd5f4618e6fdb73121ba2746bee91636fece7241
This commit is contained in:
Bookatz
2019-04-08 14:39:54 -07:00
committed by android-build-merger

View File

@@ -19,10 +19,14 @@ package com.android.server.pm;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.AppGlobals;
import android.app.admin.DevicePolicyManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.os.Binder;
import android.os.Bundle;
import android.os.Process;
@@ -221,16 +225,66 @@ public class UserRestrictionsUtils {
);
/**
* Throws {@link IllegalArgumentException} if the given restriction name is invalid.
* Returns whether the given restriction name is valid (and logs it if it isn't).
*/
public static boolean isValidRestriction(@NonNull String restriction) {
if (!USER_RESTRICTIONS.contains(restriction)) {
Slog.e(TAG, "Unknown restriction: " + restriction);
// Log this, with severity depending on the source.
final int uid = Binder.getCallingUid();
String[] pkgs = null;
try {
pkgs = AppGlobals.getPackageManager().getPackagesForUid(uid);
} catch (RemoteException e) {
// Ignore
}
StringBuilder msg = new StringBuilder("Unknown restriction queried by uid ");
msg.append(uid);
if (pkgs != null && pkgs.length > 0) {
msg.append(" (");
msg.append(pkgs[0]);
if (pkgs.length > 1) {
msg.append(" et al");
}
msg.append(")");
}
msg.append(": ");
msg.append(restriction);
if (restriction != null && isSystemApp(uid, pkgs)) {
Slog.wtf(TAG, msg.toString());
} else {
Slog.e(TAG, msg.toString());
}
return false;
}
return true;
}
/** Returns whether the given uid (or corresponding packageList) is for a System app. */
private static boolean isSystemApp(int uid, String[] packageList) {
if (UserHandle.isCore(uid)) {
return true;
}
if (packageList == null) {
return false;
}
final IPackageManager pm = AppGlobals.getPackageManager();
for (int i = 0; i < packageList.length; i++) {
try {
final int flags = PackageManager.MATCH_UNINSTALLED_PACKAGES
| PackageManager.MATCH_DIRECT_BOOT_AWARE
| PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
final ApplicationInfo appInfo =
pm.getApplicationInfo(packageList[i], flags, UserHandle.getUserId(uid));
if (appInfo != null && appInfo.isSystemApp()) {
return true;
}
} catch (RemoteException e) {
// Ignore
}
}
return false;
}
public static void writeRestrictions(@NonNull XmlSerializer serializer,
@Nullable Bundle restrictions, @NonNull String tag) throws IOException {
if (restrictions == null) {