summaryrefslogtreecommitdiff
path: root/core/java/android/appwidget/AppWidgetHost.java
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2012-12-04 11:05:39 -0800
committerAmith Yamasani <yamasani@google.com>2012-12-04 16:25:38 -0800
commit94022e8997084be458a1faf46e72efab1d59e973 (patch)
treeae057bc155e917bd490aecd545a4acba0cf7e4e9 /core/java/android/appwidget/AppWidgetHost.java
parentb6b4f171ff38ccac833edb2a1ad7f725ed068d46 (diff)
Make 3rd party lockscreen widgets work on secondary users
If you install a lockscreen widget app on a secondary user, lockscreen fails to find it. There were several places where the correct context and userId were required under the covers - AppWidgetHost, AppWidgetHostView and RemoteViewsAdapter. Set the user id in the required places and use it to query the package information. Bug: 7662835 Change-Id: Ife482c8ab2a2e601650b7cfe2660e88d3b8f2050
Diffstat (limited to 'core/java/android/appwidget/AppWidgetHost.java')
-rw-r--r--core/java/android/appwidget/AppWidgetHost.java16
1 files changed, 16 insertions, 0 deletions
diff --git a/core/java/android/appwidget/AppWidgetHost.java b/core/java/android/appwidget/AppWidgetHost.java
index 6a99ccdd0d8d..fa3bf4d32a6d 100644
--- a/core/java/android/appwidget/AppWidgetHost.java
+++ b/core/java/android/appwidget/AppWidgetHost.java
@@ -60,6 +60,7 @@ public class AppWidgetHost {
public void updateAppWidget(int appWidgetId, RemoteViews views) {
if (isLocalBinder() && views != null) {
views = views.clone();
+ views.setUser(mUser);
}
Message msg = mHandler.obtainMessage(HANDLE_UPDATE);
msg.arg1 = appWidgetId;
@@ -123,6 +124,8 @@ public class AppWidgetHost {
Callbacks mCallbacks = new Callbacks();
final HashMap<Integer,AppWidgetHostView> mViews = new HashMap<Integer, AppWidgetHostView>();
private OnClickHandler mOnClickHandler;
+ // Optionally set by lockscreen
+ private UserHandle mUser;
public AppWidgetHost(Context context, int hostId) {
this(context, hostId, null, context.getMainLooper());
@@ -137,9 +140,15 @@ public class AppWidgetHost {
mOnClickHandler = handler;
mHandler = new UpdateHandler(looper);
mDisplayMetrics = context.getResources().getDisplayMetrics();
+ mUser = Process.myUserHandle();
bindService();
}
+ /** @hide */
+ public void setUserId(int userId) {
+ mUser = new UserHandle(userId);
+ }
+
private static void bindService() {
synchronized (sServiceLock) {
if (sService == null) {
@@ -179,6 +188,9 @@ public class AppWidgetHost {
final int N = updatedIds.length;
for (int i=0; i<N; i++) {
+ if (updatedViews.get(i) != null) {
+ updatedViews.get(i).setUser(new UserHandle(userId));
+ }
updateAppWidgetView(updatedIds[i], updatedViews.get(i));
}
}
@@ -350,6 +362,7 @@ public class AppWidgetHost {
public final AppWidgetHostView createView(Context context, int appWidgetId,
AppWidgetProviderInfo appWidget) {
AppWidgetHostView view = onCreateView(context, appWidgetId, appWidget);
+ view.setUserId(mUser.getIdentifier());
view.setOnClickHandler(mOnClickHandler);
view.setAppWidget(appWidgetId, appWidget);
synchronized (mViews) {
@@ -358,6 +371,9 @@ public class AppWidgetHost {
RemoteViews views;
try {
views = sService.getAppWidgetViews(appWidgetId);
+ if (views != null) {
+ views.setUser(mUser);
+ }
} catch (RemoteException e) {
throw new RuntimeException("system server dead?", e);
}