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

Commit 820c12c1 authored by Christopher Tate's avatar Christopher Tate Committed by Android Git Automerger
Browse files

am 58e7f73c: Merge "Multiuser awareness in content observer infrastructure" into jb-mr1-dev

* commit '58e7f73c':
  Multiuser awareness in content observer infrastructure
parents 40e80c63 58e7f73c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1219,7 +1219,7 @@ public abstract class ContentResolver {
    public final void registerContentObserver(Uri uri, boolean notifyForDescendents,
            ContentObserver observer)
    {
        registerContentObserver(uri, notifyForDescendents, observer, UserHandle.myUserId());
        registerContentObserver(uri, notifyForDescendents, observer, UserHandle.getCallingUserId());
    }

    /** @hide - designated user version */
@@ -1283,7 +1283,7 @@ public abstract class ContentResolver {
     * @see #requestSync(android.accounts.Account, String, android.os.Bundle)
     */
    public void notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork) {
        notifyChange(uri, observer, syncToNetwork, UserHandle.myUserId());
        notifyChange(uri, observer, syncToNetwork, UserHandle.getCallingUserId());
    }

    /**
+0 −4
Original line number Diff line number Diff line
@@ -154,15 +154,11 @@ public final class ContentService extends IContentService.Stub {
            throw new IllegalArgumentException("You must pass a valid uri and observer");
        }

        // STOPSHIP: disable the multi-user permission checks until a solid fix for the
        // content provider / observer case is in place.
        /*
        final int callingUser = UserHandle.getCallingUserId();
        if (callingUser != userHandle) {
            mContext.enforceCallingOrSelfPermission(Manifest.permission.INTERACT_ACROSS_USERS_FULL,
                    "no permission to observe other users' provider view");
        }
        */

        if (userHandle < 0) {
            if (userHandle == UserHandle.USER_CURRENT) {
+53 −51
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;

import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.backup.BackupManager;
import android.content.BroadcastReceiver;
import android.content.ContentProvider;
@@ -33,20 +32,17 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteQueryBuilder;
import android.database.sqlite.SQLiteStatement;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
import android.os.FileObserver;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
@@ -656,10 +652,13 @@ public class SettingsProvider extends ContentProvider {
            }
        }

        // Okay, permission checks have cleared.  Reset to our own identity so we can
        // manipulate all users' data with impunity.
        long oldId = Binder.clearCallingIdentity();
        try {
            // Note: we assume that get/put operations for moved-to-global names have already
            // been directed to the new location on the caller side (otherwise we'd fix them
            // up here).

            DatabaseHelper dbHelper;
            SettingsCache cache;

@@ -704,6 +703,9 @@ public class SettingsProvider extends ContentProvider {
            } else {
                Slog.w(TAG, "call() with invalid method: " + method);
            }
        } finally {
            Binder.restoreCallingIdentity(oldId);
        }

        return null;
    }
@@ -758,7 +760,7 @@ public class SettingsProvider extends ContentProvider {
        return queryForUser(url, select, where, whereArgs, sort, UserHandle.getCallingUserId());
    }

    public Cursor queryForUser(Uri url, String[] select, String where, String[] whereArgs,
    private Cursor queryForUser(Uri url, String[] select, String where, String[] whereArgs,
            String sort, int forUser) {
        if (LOCAL_LOGV) Slog.v(TAG, "query(" + url + ") for user " + forUser);
        SqlArguments args = new SqlArguments(url, where, whereArgs);