summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanny Baumann <dannybaumann@web.de>2013-06-13 10:55:37 +0200
committerDanny Baumann <dannybaumann@web.de>2013-06-13 10:55:37 +0200
commitcc89831d1f4e757d68981a8e69a9c8b8f6eec3bc (patch)
tree2dd1db4f13b5fb5a255d2532065389f4f0eec052
parentc5c33031ad8a0b1fab388319f925155ce58528d4 (diff)
downloadframeworks_base-cc89831d1f4e757d68981a8e69a9c8b8f6eec3bc.zip
frameworks_base-cc89831d1f4e757d68981a8e69a9c8b8f6eec3bc.tar.gz
frameworks_base-cc89831d1f4e757d68981a8e69a9c8b8f6eec3bc.tar.bz2
Fix theme provider crashing for non-primary user.
PackageManagerService's context is for user 0, so if the theme provider for other users was invoking the getInstalledThemePackages() method, the themes provider crashed as it doesn't have the INTERACT_ACROSS_USERS permission. Fix that (and simplify code) by making getInstalledThemePackages() return the installed themes for the current user, which was probably the intent anyway. Change-Id: I02002cee005b74128f3b2f7cc7a93b9b8514f1f3
-rw-r--r--core/java/android/app/ApplicationPackageManager.java13
-rw-r--r--core/java/android/content/pm/IPackageManager.aidl2
-rw-r--r--services/java/com/android/server/pm/PackageManagerService.java14
3 files changed, 8 insertions, 21 deletions
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index b93771f..0d11e29 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -427,14 +427,17 @@ final class ApplicationPackageManager extends PackageManager {
}
}
- @SuppressWarnings("unchecked")
@Override
public List<PackageInfo> getInstalledThemePackages() {
- try {
- return mPM.getInstalledThemePackages();
- } catch (RemoteException e) {
- throw new RuntimeException("Package manager has died", e);
+ // Returns a list of theme APKs.
+ ArrayList<PackageInfo> finalList = new ArrayList<PackageInfo>();
+ List<PackageInfo> installedPackagesList = getInstalledPackages(0);
+ for (PackageInfo pi : installedPackagesList) {
+ if (pi != null && pi.isThemeApk) {
+ finalList.add(pi);
+ }
}
+ return finalList;
}
@SuppressWarnings("unchecked")
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index d24bf6e..d6a78ea 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -130,8 +130,6 @@ interface IPackageManager {
*/
ParceledListSlice getInstalledPackages(int flags, in String lastRead, in int userId);
- List<PackageInfo> getInstalledThemePackages();
-
/**
* This implements getInstalledApplications via a "last returned row"
* mechanism that is not exposed in the API. This is to get around the IPC
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index 1833457..461c060 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -2958,20 +2958,6 @@ public class PackageManagerService extends IPackageManager.Stub {
return list;
}
- public List<PackageInfo> getInstalledThemePackages() {
- // Returns a list of theme APKs.
- ArrayList<PackageInfo> finalList = new ArrayList<PackageInfo>();
- List<PackageInfo> installedPackagesList = mContext.getPackageManager().getInstalledPackages(0);
- Iterator<PackageInfo> i = installedPackagesList.iterator();
- while (i.hasNext()) {
- final PackageInfo pi = i.next();
- if (pi != null && pi.isThemeApk) {
- finalList.add(pi);
- }
- }
- return finalList;
- }
-
@Override
public ParceledListSlice<ApplicationInfo> getInstalledApplications(int flags,
String lastRead, int userId) {