diff options
author | Adam Cohen <adamcohen@google.com> | 2012-09-27 11:17:19 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-09-27 11:17:20 -0700 |
commit | 580ee8b0c6e1aea1e2e1d60499b603b9168b44f0 (patch) | |
tree | 89038ebd84a7d7d1d6b203596bdd5f83d342efc8 /core/java/android/appwidget/AppWidgetHost.java | |
parent | 62d2d62158e5be280e69e7620b8fb8a43a3cc26e (diff) | |
parent | 3ff2d867d46067132890a5a6ad68be8a4314d7f6 (diff) | |
download | frameworks_base-580ee8b0c6e1aea1e2e1d60499b603b9168b44f0.zip frameworks_base-580ee8b0c6e1aea1e2e1d60499b603b9168b44f0.tar.gz frameworks_base-580ee8b0c6e1aea1e2e1d60499b603b9168b44f0.tar.bz2 |
Merge "Fixing AppWidgetService / AppWidgetHost to work in system process" into jb-mr1-dev
Diffstat (limited to 'core/java/android/appwidget/AppWidgetHost.java')
-rw-r--r-- | core/java/android/appwidget/AppWidgetHost.java | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/core/java/android/appwidget/AppWidgetHost.java b/core/java/android/appwidget/AppWidgetHost.java index 185fb5a..cb61a71 100644 --- a/core/java/android/appwidget/AppWidgetHost.java +++ b/core/java/android/appwidget/AppWidgetHost.java @@ -21,6 +21,7 @@ import java.util.HashMap; import android.app.ActivityThread; import android.content.Context; +import android.os.Binder; import android.os.Handler; import android.os.IBinder; import android.os.Looper; @@ -57,6 +58,9 @@ public class AppWidgetHost { class Callbacks extends IAppWidgetHost.Stub { public void updateAppWidget(int appWidgetId, RemoteViews views) { + if (isLocalBinder() && views != null) { + views = views.clone(); + } Message msg = mHandler.obtainMessage(HANDLE_UPDATE); msg.arg1 = appWidgetId; msg.obj = views; @@ -64,6 +68,9 @@ public class AppWidgetHost { } public void providerChanged(int appWidgetId, AppWidgetProviderInfo info) { + if (isLocalBinder() && info != null) { + info = info.clone(); + } Message msg = mHandler.obtainMessage(HANDLE_PROVIDER_CHANGED); msg.arg1 = appWidgetId; msg.obj = info; @@ -225,6 +232,10 @@ public class AppWidgetHost { throw new SecurityException("Disallowed call for uid " + uid); } + private boolean isLocalBinder() { + return Process.myPid() == Binder.getCallingPid(); + } + /** * Stop listening to changes for this AppWidget. */ |