Merge "Update mainline module utils function of AppUtils" into rvc-dev am: 2db442459a

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11824582

Change-Id: Id9d37487ef03923290c18358eabdf554a8d50402
This commit is contained in:
Yanting Yang
2020-06-15 03:07:05 +00:00
committed by Automerger Merge Worker

View File

@@ -22,10 +22,12 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.hardware.usb.IUsbManager;
import android.net.Uri;
import android.os.Environment;
import android.os.RemoteException;
import android.os.SystemProperties;
import android.os.UserHandle;
@@ -146,10 +148,23 @@ public class AppUtils {
/**
* Returns a boolean indicating whether a given package is a mainline module.
*/
public static boolean isMainlineModule(Context context, String packageName) {
final PackageManager pm = context.getPackageManager();
public static boolean isMainlineModule(PackageManager pm, String packageName) {
// Check if the package is listed among the system modules.
try {
return pm.getModuleInfo(packageName, 0 /* flags */) != null;
pm.getModuleInfo(packageName, 0 /* flags */);
return true;
} catch (PackageManager.NameNotFoundException e) {
//pass
}
try {
final PackageInfo pkg = pm.getPackageInfo(packageName, 0 /* flags */);
// Check if the package is contained in an APEX. There is no public API to properly
// check whether a given APK package comes from an APEX registered as module.
// Therefore we conservatively assume that any package scanned from an /apex path is
// a system package.
return pkg.applicationInfo.sourceDir.startsWith(
Environment.getApexDirectory().getAbsolutePath());
} catch (PackageManager.NameNotFoundException e) {
return false;
}