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

Commit 381a55ad authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Remove unused methods from LocationManagerService"

parents 44b261f3 c84d42e7
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -88,11 +88,6 @@ interface ILocationManager
    boolean providerMeetsCriteria(String provider, in Criteria criteria);
    ProviderProperties getProviderProperties(String provider);
    String getNetworkProviderPackage();
    boolean isProviderEnabled(String provider);
    boolean isProviderEnabledForUser(String provider, int userId);
    boolean setProviderEnabledForUser(String provider, boolean enabled, int userId);
    boolean isLocationEnabledForUser(int userId);
    void setLocationEnabledForUser(boolean enabled, int userId);

    void addTestProvider(String name, in ProviderProperties properties, String opPackageName);
    void removeTestProvider(String provider, String opPackageName);
+0 −171
Original line number Diff line number Diff line
@@ -1396,23 +1396,6 @@ public class LocationManagerService extends ILocationManager.Stub {
        return isAllowedByCurrentUserSettingsLocked(provider);
    }

    /**
     * Returns "true" if access to the specified location provider is allowed by the specified
     * user's settings. Access to all location providers is forbidden to non-location-provider
     * processes belonging to background users.
     *
     * @param provider the name of the location provider
     * @param uid      the requestor's UID
     * @param userId   the user id to query
     */
    private boolean isAllowedByUserSettingsLockedForUser(
            String provider, int uid, int userId) {
        if (!isCurrentProfile(UserHandle.getUserId(uid)) && !isUidALocationProvider(uid)) {
            return false;
        }
        return isLocationProviderEnabledForUser(provider, userId);
    }

    /**
     * Returns the permission string associated with the specified resolution level.
     *
@@ -2584,143 +2567,6 @@ public class LocationManagerService extends ILocationManager.Stub {
        return null;
    }

    /**
     * Method for enabling or disabling location.
     *
     * @param enabled true to enable location. false to disable location
     * @param userId the user id to set
     */
    @Override
    public void setLocationEnabledForUser(boolean enabled, int userId) {
        // Check INTERACT_ACROSS_USERS permission if userId is not current user id.
        checkInteractAcrossUsersPermission(userId);

        // Enable or disable all location providers. Fused provider and passive provider are
        // excluded.
        synchronized (mLock) {
            for(String provider : getAllProvidersForLocationSettings()) {
                setProviderEnabledForUser(provider, enabled, userId);
            }
        }
    }

    /**
     * Returns the current enabled/disabled status of location
     *
     * @param userId the user id to query
     * @return true if location is enabled. false if location is disabled.
     */
    @Override
    public boolean isLocationEnabledForUser(int userId) {
        // Check INTERACT_ACROSS_USERS permission if userId is not current user id.
        checkInteractAcrossUsersPermission(userId);

        // If at least one location provider is enabled, return true. Fused provider and passive
        // provider are excluded.
        synchronized (mLock) {
            for (String provider : getAllProvidersForLocationSettings()) {
                if (isProviderEnabledForUser(provider, userId)) {
                    return true;
                }
            }
            return false;
        }
    }

    @Override
    public boolean isProviderEnabled(String provider) {
        return isProviderEnabledForUser(provider, UserHandle.getCallingUserId());
    }

    /**
     * Method for determining if a location provider is enabled.
     *
     * @param provider the location provider to query
     * @param userId the user id to query
     * @return true if the provider is enabled
     */
    @Override
    public boolean isProviderEnabledForUser(String provider, int userId) {
        // Check INTERACT_ACROSS_USERS permission if userId is not current user id.
        checkInteractAcrossUsersPermission(userId);

        // Fused provider is accessed indirectly via criteria rather than the provider-based APIs,
        // so we discourage its use
        if (LocationManager.FUSED_PROVIDER.equals(provider)) return false;

        int uid = Binder.getCallingUid();
        long identity = Binder.clearCallingIdentity();
        try {
            synchronized (mLock) {
                LocationProviderInterface p = mProvidersByName.get(provider);
                return p != null
                    && isAllowedByUserSettingsLockedForUser(provider, uid, userId);
            }
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
    }

    /**
     * Method for enabling or disabling a single location provider.
     *
     * @param provider the name of the provider
     * @param enabled true to enable the provider. false to disable the provider
     * @param userId the user id to set
     * @return true if the value was set successfully. false on failure.
     */
    @Override
    public boolean setProviderEnabledForUser(
            String provider, boolean enabled, int userId) {
        mContext.enforceCallingPermission(
                android.Manifest.permission.WRITE_SECURE_SETTINGS,
                "Requires WRITE_SECURE_SETTINGS permission");

        // Check INTERACT_ACROSS_USERS permission if userId is not current user id.
        checkInteractAcrossUsersPermission(userId);

        final long identity = Binder.clearCallingIdentity();
        try {
            synchronized (mLock) {
                // to ensure thread safety, we write the provider name with a '+' or '-'
                // and let the SettingsProvider handle it rather than reading and modifying
                // the list of enabled providers.
                if (enabled) {
                    provider = "+" + provider;
                } else {
                    provider = "-" + provider;
                }
                return Settings.Secure.putStringForUser(
                        mContext.getContentResolver(),
                        Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
                        provider,
                        userId);
            }
        } finally {
            Binder.restoreCallingIdentity(identity);
        }
    }

    /**
     * Return all location providers except fused provider and passive provider. These two
     * providers are not generating location by themselves, but only echo locations from other
     * providers.
     *
     * @return All location providers except fused provider and passive provider, including
     *          providers that are not permitted to be accessed by the calling activity or are
     *          currently disabled.
     */
    private List<String> getAllProvidersForLocationSettings() {
        List<String> providersForSettings = new ArrayList<>(mProviders.size());
        for (String provider : getAllProviders()) {
            if (provider.equals(LocationManager.PASSIVE_PROVIDER)) {
                continue;
            }
            providersForSettings.add(provider);
        }
        return providersForSettings;
    }

    /**
     * Read location provider status from Settings.Secure
     *
@@ -2741,23 +2587,6 @@ public class LocationManagerService extends ILocationManager.Stub {
        }
    }

    /**
     * Method for checking INTERACT_ACROSS_USERS permission if specified user id is not the same as
     * current user id
     *
     * @param userId the user id to get or set value
     */
    private void checkInteractAcrossUsersPermission(int userId) {
        int uid = Binder.getCallingUid();
        if (UserHandle.getUserId(uid) != userId) {
            if (ActivityManager.checkComponentPermission(
                android.Manifest.permission.INTERACT_ACROSS_USERS, uid, -1, true)
                != PERMISSION_GRANTED) {
                throw new SecurityException("Requires INTERACT_ACROSS_USERS permission");
            }
        }
    }

    /**
     * Returns "true" if the UID belongs to a bound location provider.
     *