summaryrefslogtreecommitdiffstats
path: root/core/java/android/appwidget/AppWidgetHost.java
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2012-09-27 11:17:19 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-09-27 11:17:20 -0700
commit580ee8b0c6e1aea1e2e1d60499b603b9168b44f0 (patch)
tree89038ebd84a7d7d1d6b203596bdd5f83d342efc8 /core/java/android/appwidget/AppWidgetHost.java
parent62d2d62158e5be280e69e7620b8fb8a43a3cc26e (diff)
parent3ff2d867d46067132890a5a6ad68be8a4314d7f6 (diff)
downloadframeworks_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.java11
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.
*/