diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java b/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java index 42afb69a27f48..c4ff71940d200 100644 --- a/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/applications/AppUtils.java @@ -132,4 +132,12 @@ public class AppUtils { .isHiddenModule(packageName); } + /** + * Returns a boolean indicating whether a given package is a system module. + */ + public static boolean isSystemModule(Context context, String packageName) { + return ApplicationsState.getInstance((Application) context.getApplicationContext()) + .isSystemModule(packageName); + } + } diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java index 5eaa163db6395..f9df5a3eef28d 100644 --- a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java +++ b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java @@ -139,7 +139,8 @@ public class ApplicationsState { String mCurComputingSizePkg; int mCurComputingSizeUserId; boolean mSessionsChanged; - final HashSet mHiddenModules = new HashSet<>(); + // Maps all installed modules on the system to whether they're hidden or not. + final HashMap mSystemModules = new HashMap<>(); // Temporary for dispatching session callbacks. Only touched by main thread. final ArrayList> mActiveSessions = new ArrayList<>(); @@ -212,9 +213,7 @@ public class ApplicationsState { final List moduleInfos = mPm.getInstalledModules(0 /* flags */); for (ModuleInfo info : moduleInfos) { - if (info.isHidden()) { - mHiddenModules.add(info.getPackageName()); - } + mSystemModules.put(info.getPackageName(), info.isHidden()); } /** @@ -426,7 +425,16 @@ public class ApplicationsState { } boolean isHiddenModule(String packageName) { - return mHiddenModules.contains(packageName); + Boolean isHidden = mSystemModules.get(packageName); + if (isHidden == null) { + return false; + } + + return isHidden; + } + + boolean isSystemModule(String packageName) { + return mSystemModules.containsKey(packageName); } void doPauseIfNeededLocked() { @@ -688,7 +696,10 @@ public class ApplicationsState { Log.i(TAG, "Looking up entry of pkg " + info.packageName + ": " + entry); } if (entry == null) { - if (mHiddenModules.contains(info.packageName)) { + if (isHiddenModule(info.packageName)) { + if (DEBUG) { + Log.i(TAG, "No AppEntry for " + info.packageName + " (hidden module)"); + } return null; } if (DEBUG) {