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

Commit 269518e8 authored by Victoria Lease's avatar Victoria Lease
Browse files

Revert "make FLP play nicely with multiuser"

This reverts commit e5601ce9

Change-Id: Icd12f2d2c18f2eeeb2c367a885fb6d170ce426ae
parent dbcec903
Loading
Loading
Loading
Loading
+20 −49
Original line number Diff line number Diff line
@@ -405,10 +405,8 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
            mLastLocation.clear();
            for (LocationProviderInterface p : mProviders) {
                updateProviderListenersLocked(p.getName(), false, mCurrentUserId);
                if (!LocationManager.FUSED_PROVIDER.equals(p.getName())) {
                p.switchUser(userId);
            }
            }
            mCurrentUserId = userId;
            updateProvidersLocked();
        }
@@ -666,27 +664,9 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
        mProvidersByName.remove(provider.getName());
    }

    /**
     * Returns true if the specified UID is SYSTEM_UID or matches the current user.
     *
     * @param uid the uid
     * @return true if uid is SYSTEM_UID or matches the current user
     */
    private boolean isCurrentUserOrSystemLocked(int uid) {
        return uid == Process.SYSTEM_UID || UserHandle.getUserId(uid) == mCurrentUserId;
    }

    /**
     * Returns the first UID in the current user's range.
     *
     * @return the first UID in the current user's range
     */
    private int getCurrentUidBaseLocked() {
        return UserHandle.getUid(mCurrentUserId, 0);
    }

    private boolean isAllowedBySettingsLocked(String provider, int uid) {
        if (!isCurrentUserOrSystemLocked(uid)) {
    private boolean isAllowedBySettingsLocked(String provider, int userId) {
        if (userId != mCurrentUserId) {
            return false;
        }
        if (mEnabledProviders.contains(provider)) {
@@ -695,10 +675,6 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
        if (mDisabledProviders.contains(provider)) {
            return false;
        }
        if (uid == Process.SYSTEM_UID) {
            return true;
        }

        // Use system settings
        ContentResolver resolver = mContext.getContentResolver();

@@ -852,8 +828,8 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
    public List<String> getProviders(Criteria criteria, boolean enabledOnly) {
        int allowedResolutionLevel = getCallerAllowedResolutionLevel();
        ArrayList<String> out;
        final int callingUid = Binder.getCallingUid();
        final long identity = Binder.clearCallingIdentity();
        int callingUserId = UserHandle.getCallingUserId();
        long identity = Binder.clearCallingIdentity();
        try {
            synchronized (mLock) {
                out = new ArrayList<String>(mProviders.size());
@@ -863,7 +839,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
                        continue;
                    }
                    if (allowedResolutionLevel >= getMinimumResolutionLevelForProviderUse(name)) {
                        if (enabledOnly && !isAllowedBySettingsLocked(name, callingUid)) {
                        if (enabledOnly && !isAllowedBySettingsLocked(name, callingUserId)) {
                            continue;
                        }
                        if (criteria != null && !LocationProvider.propertiesMeetCriteria(
@@ -939,7 +915,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
            LocationProviderInterface p = mProviders.get(i);
            boolean isEnabled = p.isEnabled();
            String name = p.getName();
            boolean shouldBeEnabled = isAllowedBySettingsLocked(name, getCurrentUidBaseLocked());
            boolean shouldBeEnabled = isAllowedBySettingsLocked(name, mCurrentUserId);
            if (isEnabled && !shouldBeEnabled) {
                updateProviderListenersLocked(name, false, mCurrentUserId);
                changesMade = true;
@@ -967,7 +943,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
            final int N = records.size();
            for (int i = 0; i < N; i++) {
                UpdateRecord record = records.get(i);
                if (isCurrentUserOrSystemLocked(record.mReceiver.mUid)) {
                if (UserHandle.getUserId(record.mReceiver.mUid) == userId) {
                    // Sends a notification message to the receiver
                    if (!record.mReceiver.callProviderEnabledLocked(provider, enabled)) {
                        if (deadReceivers == null) {
@@ -1006,7 +982,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run

        if (records != null) {
            for (UpdateRecord record : records) {
                if (isCurrentUserOrSystemLocked(record.mReceiver.mUid)) {
                if (UserHandle.getUserId(record.mReceiver.mUid) == mCurrentUserId) {
                    LocationRequest locationRequest = record.mRequest;
                    providerRequest.locationRequests.add(locationRequest);
                    if (locationRequest.getInterval() < providerRequest.interval) {
@@ -1024,7 +1000,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
                // under that threshold.
                long thresholdInterval = (providerRequest.interval + 1000) * 3 / 2;
                for (UpdateRecord record : records) {
                    if (isCurrentUserOrSystemLocked(record.mReceiver.mUid)) {
                    if (UserHandle.getUserId(record.mReceiver.mUid) == mCurrentUserId) {
                        LocationRequest locationRequest = record.mRequest;
                        if (locationRequest.getInterval() <= thresholdInterval) {
                            worksource.add(record.mReceiver.mUid);
@@ -1247,7 +1223,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
            oldRecord.disposeLocked(false);
        }

        boolean isProviderEnabled = isAllowedBySettingsLocked(name, uid);
        boolean isProviderEnabled = isAllowedBySettingsLocked(name, UserHandle.getUserId(uid));
        if (isProviderEnabled) {
            applyRequirementsLocked(name);
        } else {
@@ -1302,10 +1278,9 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
        }

        // update provider
        int currentUidBase = getCurrentUidBaseLocked();
        for (String provider : providers) {
            // If provider is already disabled, don't need to do anything
            if (!isAllowedBySettingsLocked(provider, currentUidBase)) {
            if (!isAllowedBySettingsLocked(provider, mCurrentUserId)) {
                continue;
            }

@@ -1323,8 +1298,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
                request.getProvider());
        // no need to sanitize this request, as only the provider name is used

        final int callingUid = Binder.getCallingUid();
        final long identity = Binder.clearCallingIdentity();
        long identity = Binder.clearCallingIdentity();
        try {
            if (mBlacklist.isBlacklisted(packageName)) {
                if (D) Log.d(TAG, "not returning last loc for blacklisted app: " +
@@ -1340,9 +1314,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
                LocationProviderInterface provider = mProvidersByName.get(name);
                if (provider == null) return null;

                if (!isAllowedBySettingsLocked(name, callingUid)) {
                    return null;
                }
                if (!isAllowedBySettingsLocked(name, mCurrentUserId)) return null;

                Location location = mLastLocation.get(name);
                if (location == null) {
@@ -1499,14 +1471,13 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
                provider);
        if (LocationManager.FUSED_PROVIDER.equals(provider)) return false;

        final int callingUid = Binder.getCallingUid();
        final long identity = Binder.clearCallingIdentity();
        long identity = Binder.clearCallingIdentity();
        try {
            synchronized (mLock) {
                LocationProviderInterface p = mProvidersByName.get(provider);
                if (p == null) return false;

                return isAllowedBySettingsLocked(provider, callingUid);
                return isAllowedBySettingsLocked(provider, mCurrentUserId);
            }
        } finally {
            Binder.restoreCallingIdentity(identity);
@@ -1645,10 +1616,10 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
            Receiver receiver = r.mReceiver;
            boolean receiverDead = false;

            final int receiverUid = receiver.mUid;
            if (!isCurrentUserOrSystemLocked(receiverUid)) {
            int receiverUserId = UserHandle.getUserId(receiver.mUid);
            if (receiverUserId != mCurrentUserId) {
                if (D) {
                    Log.d(TAG, "skipping loc update for background uid " + receiverUid +
                    Log.d(TAG, "skipping loc update for background user " + receiverUserId +
                            " (current user: " + mCurrentUserId + ", app: " +
                            receiver.mPackageName + ")");
                }
@@ -1745,7 +1716,7 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
        }

        synchronized (mLock) {
            if (isAllowedBySettingsLocked(provider, getCurrentUidBaseLocked())) {
            if (isAllowedBySettingsLocked(provider, mCurrentUserId)) {
                handleLocationChangedLocked(location, passive);
            }
        }