summaryrefslogtreecommitdiffstats
path: root/core/java/android/appwidget
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2012-12-05 06:06:02 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2012-12-05 06:06:02 -0800
commit368ee53f25cdff7ea89293d2cc81e95816919369 (patch)
treeaf3fa58df3ab0124681e54f3c6bef26e13f56bc4 /core/java/android/appwidget
parent6350cfb529b30af88a2bff42962ab111a0cf137b (diff)
parentf663cad2248d5d38957f8e1408cd794c0de90202 (diff)
downloadframeworks_base-368ee53f25cdff7ea89293d2cc81e95816919369.zip
frameworks_base-368ee53f25cdff7ea89293d2cc81e95816919369.tar.gz
frameworks_base-368ee53f25cdff7ea89293d2cc81e95816919369.tar.bz2
am f663cad2: am 6c58b155: Merge "Make 3rd party lockscreen widgets work on secondary users" into jb-mr1.1-dev
* commit 'f663cad2248d5d38957f8e1408cd794c0de90202': Make 3rd party lockscreen widgets work on secondary users
Diffstat (limited to 'core/java/android/appwidget')
-rw-r--r--core/java/android/appwidget/AppWidgetHost.java16
-rw-r--r--core/java/android/appwidget/AppWidgetHostView.java17
2 files changed, 29 insertions, 4 deletions
diff --git a/core/java/android/appwidget/AppWidgetHost.java b/core/java/android/appwidget/AppWidgetHost.java
index 6a99ccd..fa3bf4d 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);
}
diff --git a/core/java/android/appwidget/AppWidgetHostView.java b/core/java/android/appwidget/AppWidgetHostView.java
index 52771ee..700bba8 100644
--- a/core/java/android/appwidget/AppWidgetHostView.java
+++ b/core/java/android/appwidget/AppWidgetHostView.java
@@ -31,7 +31,9 @@ import android.os.Build;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
+import android.os.Process;
import android.os.SystemClock;
+import android.os.UserHandle;
import android.util.AttributeSet;
import android.util.Log;
import android.util.SparseArray;
@@ -85,6 +87,7 @@ public class AppWidgetHostView extends FrameLayout {
Bitmap mOld;
Paint mOldPaint = new Paint();
private OnClickHandler mOnClickHandler;
+ private UserHandle mUser;
/**
* Create a host view. Uses default fade animations.
@@ -112,12 +115,17 @@ public class AppWidgetHostView extends FrameLayout {
public AppWidgetHostView(Context context, int animationIn, int animationOut) {
super(context);
mContext = context;
-
+ mUser = Process.myUserHandle();
// We want to segregate the view ids within AppWidgets to prevent
// problems when those ids collide with view ids in the AppWidgetHost.
setIsRootNamespace(true);
}
+ /** @hide */
+ public void setUserId(int userId) {
+ mUser = new UserHandle(userId);
+ }
+
/**
* Pass the given handler to RemoteViews when updating this widget. Unless this
* is done immediatly after construction, a call to {@link #updateAppWidget(RemoteViews)}
@@ -465,7 +473,8 @@ public class AppWidgetHostView extends FrameLayout {
try {
// Return if cloned successfully, otherwise default
- return mContext.createPackageContext(packageName, Context.CONTEXT_RESTRICTED);
+ return mContext.createPackageContextAsUser(packageName, Context.CONTEXT_RESTRICTED,
+ mUser);
} catch (NameNotFoundException e) {
Log.e(TAG, "Package name " + packageName + " not found");
return mContext;
@@ -539,8 +548,8 @@ public class AppWidgetHostView extends FrameLayout {
try {
if (mInfo != null) {
- Context theirContext = mContext.createPackageContext(
- mInfo.provider.getPackageName(), Context.CONTEXT_RESTRICTED);
+ Context theirContext = mContext.createPackageContextAsUser(
+ mInfo.provider.getPackageName(), Context.CONTEXT_RESTRICTED, mUser);
mRemoteContext = theirContext;
LayoutInflater inflater = (LayoutInflater)
theirContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);