diff options
| author | 2020-06-11 12:34:01 +0800 | |
|---|---|---|
| committer | 2020-06-11 12:34:01 +0800 | |
| commit | e334e349c48cd2cc027612ae2dd8e819e439350c (patch) | |
| tree | 00573d40c87c47b85b9dc8c3213c77eb48ba469d | |
| parent | 30c894d5c2c89ecca5501a63769ea79f9fae8aca (diff) | |
Update mainline module utils function of AppUtils
Bug: 156955322
Test: make RunSettingsLibRoboTests
Change-Id: I8ca1deafe4cebfd9e553d1c3e123a08549bee448
| -rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java b/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java index 38eeda245616..898796828131 100644 --- a/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java @@ -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; } |