From ccf6c6814736e368949b64aadce676ab6d045fdc Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Wed, 17 Jun 2015 15:23:31 -0700 Subject: [PATCH] AppWidgetServiceImpl should use ParceledListSlice as return object b/19904873 > Reason: to prevent TransactionTooLargeException from occuring when binder transaction size goes over the limit. Change-Id: I054cb161d235234f3ccdaadd70314163e690b0db --- core/java/android/appwidget/AppWidgetManager.java | 7 ++++--- .../com/android/internal/appwidget/IAppWidgetService.aidl | 3 ++- .../com/android/server/appwidget/AppWidgetServiceImpl.java | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java index 1205708478a71..278c9d6f86999 100644 --- a/core/java/android/appwidget/AppWidgetManager.java +++ b/core/java/android/appwidget/AppWidgetManager.java @@ -20,6 +20,7 @@ import android.annotation.Nullable; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.content.pm.ParceledListSlice; import android.os.Bundle; import android.os.IBinder; import android.os.Process; @@ -753,16 +754,16 @@ public class AppWidgetManager { } try { - List providers = mService.getInstalledProvidersForProfile( + ParceledListSlice providers = mService.getInstalledProvidersForProfile( categoryFilter, profile.getIdentifier()); if (providers == null) { return Collections.emptyList(); } - for (AppWidgetProviderInfo info : providers) { + for (AppWidgetProviderInfo info : providers.getList()) { // Converting complex to dp. convertSizesToPixels(info); } - return providers; + return providers.getList(); } catch (RemoteException e) { throw new RuntimeException("system server dead?", e); diff --git a/core/java/com/android/internal/appwidget/IAppWidgetService.aidl b/core/java/com/android/internal/appwidget/IAppWidgetService.aidl index 7d3db02d6bcab..5a195cb7dd204 100644 --- a/core/java/com/android/internal/appwidget/IAppWidgetService.aidl +++ b/core/java/com/android/internal/appwidget/IAppWidgetService.aidl @@ -20,6 +20,7 @@ import android.content.ComponentName; import android.content.Intent; import android.content.IntentSender; import android.content.pm.ApplicationInfo; +import android.content.pm.ParceledListSlice; import android.appwidget.AppWidgetProviderInfo; import com.android.internal.appwidget.IAppWidgetHost; import android.os.Bundle; @@ -54,7 +55,7 @@ interface IAppWidgetService { in RemoteViews views); void updateAppWidgetProvider(in ComponentName provider, in RemoteViews views); void notifyAppWidgetViewDataChanged(String packageName, in int[] appWidgetIds, int viewId); - List getInstalledProvidersForProfile(int categoryFilter, + ParceledListSlice getInstalledProvidersForProfile(int categoryFilter, int profileId); AppWidgetProviderInfo getAppWidgetInfo(String callingPackage, int appWidgetId); boolean hasBindAppWidgetPermission(in String packageName, int userId); diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java index 17d70789c7822..b737de3cd64e2 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java @@ -37,6 +37,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.pm.ParceledListSlice; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.pm.UserInfo; @@ -1281,7 +1282,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku } @Override - public List getInstalledProvidersForProfile(int categoryFilter, + public ParceledListSlice getInstalledProvidersForProfile(int categoryFilter, int profileId) { final int userId = UserHandle.getCallingUserId(); @@ -1321,7 +1322,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku } } - return result; + return new ParceledListSlice(result); } }