Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f663cad2 authored by Amith Yamasani's avatar Amith Yamasani Committed by Android Git Automerger
Browse files

am 6c58b155: Merge "Make 3rd party lockscreen widgets work on secondary users" into jb-mr1.1-dev

* commit '6c58b155':
  Make 3rd party lockscreen widgets work on secondary users
parents 6a3ad968 6c58b155
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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);
        }
+13 −4
Original line number Diff line number Diff line
@@ -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);
+1 −0
Original line number Diff line number Diff line
@@ -1001,6 +1001,7 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback
        long itemId = 0;
        try {
            remoteViews = factory.getViewAt(position);
            remoteViews.setUser(new UserHandle(mUserId));
            itemId = factory.getItemId(position);
        } catch (RemoteException e) {
            Log.e(TAG, "Error in updateRemoteViews(" + position + "): " + e.getMessage());
+1 −0
Original line number Diff line number Diff line
@@ -133,6 +133,7 @@ public class KeyguardHostView extends KeyguardViewBase {
        mUserId = mLockPatternUtils.getCurrentUser();
        mAppWidgetHost = new AppWidgetHost(
                context, APPWIDGET_HOST_ID, mOnClickHandler, Looper.myLooper());
        mAppWidgetHost.setUserId(mUserId);
        cleanupAppWidgetIds();

        mAppWidgetManager = AppWidgetManager.getInstance(mContext);