Move more PM calls to ParceledListSlice.
Since the data returned by these calls can grow unbounded based on
various GET flags, we need to switch 'em over.
Bug: 27391893
Change-Id: Ie849ca30dbaaa91158da4c83675657715629a0ee
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 1bc33b8..14688c1 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -193,7 +193,7 @@
private ContextImpl mSystemContext;
- static IPackageManager sPackageManager;
+ static volatile IPackageManager sPackageManager;
final ApplicationThread mAppThread = new ApplicationThread();
final Looper mLooper = Looper.myLooper();
@@ -218,7 +218,7 @@
// set of instantiated backup agents, keyed by package name
final ArrayMap<String, BackupAgent> mBackupAgents = new ArrayMap<String, BackupAgent>();
/** Reference to singleton {@link ActivityThread} */
- private static ActivityThread sCurrentActivityThread;
+ private static volatile ActivityThread sCurrentActivityThread;
Instrumentation mInstrumentation;
String mInstrumentationPackageName = null;
String mInstrumentationAppDir = null;
@@ -296,7 +296,7 @@
final GcIdler mGcIdler = new GcIdler();
boolean mGcIdlerScheduled = false;
- static Handler sMainThreadHandler; // set once in main()
+ static volatile Handler sMainThreadHandler; // set once in main()
Bundle mCoreSettings = null;
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 38f32f7..0b44925 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -275,7 +275,7 @@
public List<PermissionInfo> queryPermissionsByGroup(String group, int flags)
throws NameNotFoundException {
try {
- List<PermissionInfo> pi = mPM.queryPermissionsByGroup(group, flags);
+ List<PermissionInfo> pi = mPM.queryPermissionsByGroup(group, flags).getList();
if (pi != null) {
return pi;
}
@@ -304,7 +304,7 @@
@Override
public List<PermissionGroupInfo> getAllPermissionGroups(int flags) {
try {
- return mPM.getAllPermissionGroups(flags);
+ return mPM.getAllPermissionGroups(flags).getList();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -441,7 +441,12 @@
@Override
public FeatureInfo[] getSystemAvailableFeatures() {
try {
- return mPM.getSystemAvailableFeatures();
+ final List<FeatureInfo> list = mPM.getSystemAvailableFeatures().getList();
+ final FeatureInfo[] res = new FeatureInfo[list.size()];
+ for (int i = 0; i < res.length; i++) {
+ res[i] = list.get(i);
+ }
+ return res;
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -772,7 +777,7 @@
intent,
intent.resolveTypeIfNeeded(mContext.getContentResolver()),
flags,
- userId);
+ userId).getList();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -802,9 +807,10 @@
}
try {
- return mPM.queryIntentActivityOptions(caller, specifics,
- specificTypes, intent, intent.resolveTypeIfNeeded(resolver),
- flags, mContext.getUserId());
+ return mPM
+ .queryIntentActivityOptions(caller, specifics, specificTypes, intent,
+ intent.resolveTypeIfNeeded(resolver), flags, mContext.getUserId())
+ .getList();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -820,7 +826,7 @@
intent,
intent.resolveTypeIfNeeded(mContext.getContentResolver()),
flags,
- userId);
+ userId).getList();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -851,7 +857,7 @@
intent,
intent.resolveTypeIfNeeded(mContext.getContentResolver()),
flags,
- userId);
+ userId).getList();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -867,7 +873,8 @@
Intent intent, int flags, int userId) {
try {
return mPM.queryIntentContentProviders(intent,
- intent.resolveTypeIfNeeded(mContext.getContentResolver()), flags, userId);
+ intent.resolveTypeIfNeeded(mContext.getContentResolver()), flags, userId)
+ .getList();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -926,7 +933,7 @@
public List<InstrumentationInfo> queryInstrumentation(
String targetPackage, int flags) {
try {
- return mPM.queryInstrumentation(targetPackage, flags);
+ return mPM.queryInstrumentation(targetPackage, flags).getList();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -1572,7 +1579,7 @@
@Override
public List<IntentFilterVerificationInfo> getIntentFilterVerifications(String packageName) {
try {
- return mPM.getIntentFilterVerifications(packageName);
+ return mPM.getIntentFilterVerifications(packageName).getList();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -1581,7 +1588,7 @@
@Override
public List<IntentFilter> getAllIntentFilters(String packageName) {
try {
- return mPM.getAllIntentFilters(packageName);
+ return mPM.getAllIntentFilters(packageName).getList();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -1892,31 +1899,21 @@
throw e.rethrowFromSystemServer();
}
}
+
@Override
public void addPackageToPreferred(String packageName) {
- try {
- mPM.addPackageToPreferred(packageName);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
+ Log.w(TAG, "addPackageToPreferred() is a no-op");
}
@Override
public void removePackageFromPreferred(String packageName) {
- try {
- mPM.removePackageFromPreferred(packageName);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
+ Log.w(TAG, "removePackageFromPreferred() is a no-op");
}
@Override
public List<PackageInfo> getPreferredPackages(int flags) {
- try {
- return mPM.getPreferredPackages(flags);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
+ Log.w(TAG, "getPreferredPackages() is a no-op");
+ return Collections.emptyList();
}
@Override
diff --git a/core/java/android/content/pm/AppsQueryHelper.java b/core/java/android/content/pm/AppsQueryHelper.java
index e542589..4c01b27 100644
--- a/core/java/android/content/pm/AppsQueryHelper.java
+++ b/core/java/android/content/pm/AppsQueryHelper.java
@@ -171,7 +171,7 @@
return mPackageManager.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES
| PackageManager.GET_DISABLED_COMPONENTS, userId).getList();
} catch (RemoteException e) {
- throw new IllegalStateException("Package manager has died", e);
+ throw e.rethrowFromSystemServer();
}
}
@@ -181,9 +181,9 @@
return mPackageManager.queryIntentActivities(intent, null,
PackageManager.GET_DISABLED_COMPONENTS
| PackageManager.GET_UNINSTALLED_PACKAGES,
- userId);
+ userId).getList();
} catch (RemoteException e) {
- throw new IllegalStateException("Package manager has died", e);
+ throw e.rethrowFromSystemServer();
}
}
@@ -192,9 +192,9 @@
try {
return mPackageManager.queryIntentServices(intent, null,
PackageManager.GET_META_DATA
- | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, userId);
+ | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, userId).getList();
} catch (RemoteException e) {
- throw new IllegalStateException("Package manager has died", e);
+ throw e.rethrowFromSystemServer();
}
}
@@ -205,8 +205,7 @@
return mPackageManager.getPackagesHoldingPermissions(new String[]{perm}, 0,
userId).getList();
} catch (RemoteException e) {
- throw new IllegalStateException("Package manager has died", e);
+ throw e.rethrowFromSystemServer();
}
}
-
}
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 0389085..b4e9f60 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -71,11 +71,11 @@
PermissionInfo getPermissionInfo(String name, int flags);
- List<PermissionInfo> queryPermissionsByGroup(String group, int flags);
+ ParceledListSlice queryPermissionsByGroup(String group, int flags);
PermissionGroupInfo getPermissionGroupInfo(String name, int flags);
- List<PermissionGroupInfo> getAllPermissionGroups(int flags);
+ ParceledListSlice getAllPermissionGroups(int flags);
ApplicationInfo getApplicationInfo(String packageName, int flags ,int userId);
@@ -138,24 +138,24 @@
boolean canForwardTo(in Intent intent, String resolvedType, int sourceUserId, int targetUserId);
- List<ResolveInfo> queryIntentActivities(in Intent intent,
+ ParceledListSlice queryIntentActivities(in Intent intent,
String resolvedType, int flags, int userId);
- List<ResolveInfo> queryIntentActivityOptions(
+ ParceledListSlice queryIntentActivityOptions(
in ComponentName caller, in Intent[] specifics,
in String[] specificTypes, in Intent intent,
String resolvedType, int flags, int userId);
- List<ResolveInfo> queryIntentReceivers(in Intent intent,
+ ParceledListSlice queryIntentReceivers(in Intent intent,
String resolvedType, int flags, int userId);
ResolveInfo resolveService(in Intent intent,
String resolvedType, int flags, int userId);
- List<ResolveInfo> queryIntentServices(in Intent intent,
+ ParceledListSlice queryIntentServices(in Intent intent,
String resolvedType, int flags, int userId);
- List<ResolveInfo> queryIntentContentProviders(in Intent intent,
+ ParceledListSlice queryIntentContentProviders(in Intent intent,
String resolvedType, int flags, int userId);
/**
@@ -189,7 +189,7 @@
* @return A List<applicationInfo> containing one entry for each persistent
* application.
*/
- List<ApplicationInfo> getPersistentApplications(int flags);
+ ParceledListSlice getPersistentApplications(int flags);
ProviderInfo resolveContentProvider(String name, int flags, int userId);
@@ -210,7 +210,7 @@
InstrumentationInfo getInstrumentationInfo(
in ComponentName className, int flags);
- List<InstrumentationInfo> queryInstrumentation(
+ ParceledListSlice queryInstrumentation(
String targetPackage, int flags);
/** @deprecated Use PackageInstaller instead */
@@ -240,12 +240,6 @@
String getInstallerPackageName(in String packageName);
- void addPackageToPreferred(String packageName);
-
- void removePackageFromPreferred(String packageName);
-
- List<PackageInfo> getPreferredPackages(int flags);
-
void resetApplicationPreferences(int userId);
ResolveInfo getLastChosenActivity(in Intent intent,
@@ -406,7 +400,7 @@
* Get a list of features that are available on the
* system.
*/
- FeatureInfo[] getSystemAvailableFeatures();
+ ParceledListSlice getSystemAvailableFeatures();
boolean hasSystemFeature(String name, int version);
@@ -480,8 +474,8 @@
void verifyIntentFilter(int id, int verificationCode, in List<String> failedDomains);
int getIntentVerificationStatus(String packageName, int userId);
boolean updateIntentVerificationStatus(String packageName, int status, int userId);
- List<IntentFilterVerificationInfo> getIntentFilterVerifications(String packageName);
- List<IntentFilter> getAllIntentFilters(String packageName);
+ ParceledListSlice getIntentFilterVerifications(String packageName);
+ ParceledListSlice getAllIntentFilters(String packageName);
boolean setDefaultBrowserPackageName(String packageName, int userId);
String getDefaultBrowserPackageName(int userId);