diff options
| author | Danny Baumann <dannybaumann@web.de> | 2013-06-13 10:55:37 +0200 |
|---|---|---|
| committer | Danny Baumann <dannybaumann@web.de> | 2013-06-13 10:55:37 +0200 |
| commit | cc89831d1f4e757d68981a8e69a9c8b8f6eec3bc (patch) | |
| tree | 2dd1db4f13b5fb5a255d2532065389f4f0eec052 | |
| parent | c5c33031ad8a0b1fab388319f925155ce58528d4 (diff) | |
| download | frameworks_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
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) { |
