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

Commit 83762d22 authored by Victoria Lease's avatar Victoria Lease
Browse files

multiuser support for LocationBlacklist

This allows primary/secondary users to have different "Google
Location Services" preferences. It also reenables LocationBlacklist,
which is fixed elsewhere.

Bug: 7213502
Bug: 7248239
Change-Id: I94837682f95920c225c00b7da2de6dd1418a673e
parent 0f9deb3c
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -325,6 +325,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
     * @param userId the new active user's UserId
     * @param userId the new active user's UserId
     */
     */
    private void switchUser(int userId) {
    private void switchUser(int userId) {
        mBlacklist.switchUser(userId);
        //Log.d("LocationManagerService", "switchUser(" + mCurrentUserId + " -> " + userId + ")"); // TODO: remove this
        //Log.d("LocationManagerService", "switchUser(" + mCurrentUserId + " -> " + userId + ")"); // TODO: remove this
        synchronized (mLock) {
        synchronized (mLock) {
            // TODO: inform previous user's Receivers that they will no longer receive updates
            // TODO: inform previous user's Receivers that they will no longer receive updates
+26 −12
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@ package com.android.server.location;
import android.content.Context;
import android.content.Context;
import android.database.ContentObserver;
import android.database.ContentObserver;
import android.os.Handler;
import android.os.Handler;
import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings;
import android.util.Log;
import android.util.Log;
import android.util.Slog;
import android.util.Slog;
@@ -49,6 +50,8 @@ public final class LocationBlacklist extends ContentObserver {
    private String[] mWhitelist = new String[0];
    private String[] mWhitelist = new String[0];
    private String[] mBlacklist = new String[0];
    private String[] mBlacklist = new String[0];


    private int mCurrentUserId = UserHandle.USER_OWNER;
    
    public LocationBlacklist(Context context, Handler handler) {
    public LocationBlacklist(Context context, Handler handler) {
        super(handler);
        super(handler);
        mContext = context;
        mContext = context;
@@ -56,21 +59,23 @@ public final class LocationBlacklist extends ContentObserver {


    public void init() {
    public void init() {
        mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor(
        mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor(
                BLACKLIST_CONFIG_NAME), false, this);
                BLACKLIST_CONFIG_NAME), false, this, UserHandle.USER_ALL);
//        mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor(
//        mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor(
//                WHITELIST_CONFIG_NAME), false, this);
//                WHITELIST_CONFIG_NAME), false, this, UserHandle.USER_ALL);
        reloadBlacklist();
        reloadBlacklist();
    }
    }


    private void reloadBlacklist() {
    private void reloadBlacklistLocked() {
        String blacklist[] = getStringArray(BLACKLIST_CONFIG_NAME);
        mWhitelist = getStringArrayLocked(WHITELIST_CONFIG_NAME);
        String whitelist[] = getStringArray(WHITELIST_CONFIG_NAME);
        synchronized (mLock) {
            mWhitelist = whitelist;
        Slog.i(TAG, "whitelist: " + Arrays.toString(mWhitelist));
        Slog.i(TAG, "whitelist: " + Arrays.toString(mWhitelist));
            mBlacklist = blacklist;
        mBlacklist = getStringArrayLocked(BLACKLIST_CONFIG_NAME);
        Slog.i(TAG, "blacklist: " + Arrays.toString(mBlacklist));
        Slog.i(TAG, "blacklist: " + Arrays.toString(mBlacklist));
    }
    }

    private void reloadBlacklist() {
        synchronized (mLock) {
            reloadBlacklistLocked();
        }
    }
    }


    /**
    /**
@@ -78,7 +83,6 @@ public final class LocationBlacklist extends ContentObserver {
     * (package name matches blacklist, and does not match whitelist)
     * (package name matches blacklist, and does not match whitelist)
     */
     */
    public boolean isBlacklisted(String packageName) {
    public boolean isBlacklisted(String packageName) {
        /*
        synchronized (mLock) {
        synchronized (mLock) {
            for (String black : mBlacklist) {
            for (String black : mBlacklist) {
                if (packageName.startsWith(black)) {
                if (packageName.startsWith(black)) {
@@ -92,7 +96,6 @@ public final class LocationBlacklist extends ContentObserver {
                }
                }
            }
            }
        }
        }
        */
        return false;
        return false;
    }
    }


@@ -113,8 +116,19 @@ public final class LocationBlacklist extends ContentObserver {
        reloadBlacklist();
        reloadBlacklist();
    }
    }


    private String[] getStringArray(String key) {
    public void switchUser(int userId) {
        String flatString = Settings.Secure.getString(mContext.getContentResolver(), key);
        synchronized(mLock) {
            mCurrentUserId = userId;
            reloadBlacklistLocked();
        }
    }

    private String[] getStringArrayLocked(String key) {
        String flatString;
        synchronized(mLock) {
            flatString = Settings.Secure.getStringForUser(mContext.getContentResolver(), key,
                    mCurrentUserId);
        }
        if (flatString == null) {
        if (flatString == null) {
            return new String[0];
            return new String[0];
        }
        }