Search in sources :

Example 36 with LocationProviderInterface

use of com.android.server.location.LocationProviderInterface in project android_frameworks_base by crdroidandroid.

the class LocationManagerService method getAllProviders.

/**
     * Returns all providers by name, including passive, but excluding
     * fused, also including ones that are not permitted to
     * be accessed by the calling activity or are currently disabled.
     */
@Override
public List<String> getAllProviders() {
    ArrayList<String> out;
    synchronized (mLock) {
        out = new ArrayList<String>(mProviders.size());
        for (LocationProviderInterface provider : mProviders) {
            String name = provider.getName();
            if (LocationManager.FUSED_PROVIDER.equals(name)) {
                continue;
            }
            out.add(name);
        }
    }
    if (D)
        Log.d(TAG, "getAllProviders()=" + out);
    return out;
}
Also used : LocationProviderInterface(com.android.server.location.LocationProviderInterface)

Example 37 with LocationProviderInterface

use of com.android.server.location.LocationProviderInterface in project android_frameworks_base by crdroidandroid.

the class LocationManagerService method getLastLocation.

@Override
public Location getLastLocation(LocationRequest request, String packageName) {
    if (D)
        Log.d(TAG, "getLastLocation: " + request);
    if (request == null)
        request = DEFAULT_LOCATION_REQUEST;
    int allowedResolutionLevel = getCallerAllowedResolutionLevel();
    checkPackageName(packageName);
    checkResolutionLevelIsSufficientForProviderUse(allowedResolutionLevel, request.getProvider());
    // no need to sanitize this request, as only the provider name is used
    final int pid = Binder.getCallingPid();
    final int uid = Binder.getCallingUid();
    final long identity = Binder.clearCallingIdentity();
    try {
        if (mBlacklist.isBlacklisted(packageName)) {
            if (D)
                Log.d(TAG, "not returning last loc for blacklisted app: " + packageName);
            return null;
        }
        if (!reportLocationAccessNoThrow(pid, uid, packageName, allowedResolutionLevel)) {
            if (D)
                Log.d(TAG, "not returning last loc for no op app: " + packageName);
            return null;
        }
        synchronized (mLock) {
            // Figure out the provider. Either its explicitly request (deprecated API's),
            // or use the fused provider
            String name = request.getProvider();
            if (name == null)
                name = LocationManager.FUSED_PROVIDER;
            LocationProviderInterface provider = mProvidersByName.get(name);
            if (provider == null)
                return null;
            if (!isAllowedByUserSettingsLocked(name, uid))
                return null;
            Location location;
            if (allowedResolutionLevel < RESOLUTION_LEVEL_FINE) {
                // Make sure that an app with coarse permissions can't get frequent location
                // updates by calling LocationManager.getLastKnownLocation repeatedly.
                location = mLastLocationCoarseInterval.get(name);
            } else {
                location = mLastLocation.get(name);
            }
            if (location == null) {
                return null;
            }
            if (allowedResolutionLevel < RESOLUTION_LEVEL_FINE) {
                Location noGPSLocation = location.getExtraLocation(Location.EXTRA_NO_GPS_LOCATION);
                if (noGPSLocation != null) {
                    return new Location(mLocationFudger.getOrCreate(noGPSLocation));
                }
            } else {
                return new Location(location);
            }
        }
        return null;
    } finally {
        Binder.restoreCallingIdentity(identity);
    }
}
Also used : LocationProviderInterface(com.android.server.location.LocationProviderInterface) Location(android.location.Location)

Example 38 with LocationProviderInterface

use of com.android.server.location.LocationProviderInterface in project android_frameworks_base by crdroidandroid.

the class LocationManagerService method isProviderEnabled.

@Override
public boolean isProviderEnabled(String provider) {
    // 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);
            if (p == null)
                return false;
            return isAllowedByUserSettingsLocked(provider, uid);
        }
    } finally {
        Binder.restoreCallingIdentity(identity);
    }
}
Also used : LocationProviderInterface(com.android.server.location.LocationProviderInterface)

Example 39 with LocationProviderInterface

use of com.android.server.location.LocationProviderInterface in project android_frameworks_base by crdroidandroid.

the class LocationManagerService method getProviderProperties.

/**
     * @return null if the provider does not exist
     * @throws SecurityException if the provider is not allowed to be
     * accessed by the caller
     */
@Override
public ProviderProperties getProviderProperties(String provider) {
    if (mProvidersByName.get(provider) == null) {
        return null;
    }
    checkResolutionLevelIsSufficientForProviderUse(getCallerAllowedResolutionLevel(), provider);
    LocationProviderInterface p;
    synchronized (mLock) {
        p = mProvidersByName.get(provider);
    }
    if (p == null)
        return null;
    return p.getProperties();
}
Also used : LocationProviderInterface(com.android.server.location.LocationProviderInterface)

Example 40 with LocationProviderInterface

use of com.android.server.location.LocationProviderInterface in project android_frameworks_base by crdroidandroid.

the class LocationManagerService method addTestProvider.

@Override
public void addTestProvider(String name, ProviderProperties properties, String opPackageName) {
    if (!canCallerAccessMockLocation(opPackageName)) {
        return;
    }
    if (LocationManager.PASSIVE_PROVIDER.equals(name)) {
        throw new IllegalArgumentException("Cannot mock the passive location provider");
    }
    long identity = Binder.clearCallingIdentity();
    synchronized (mLock) {
        // remove the real provider if we are replacing GPS or network provider
        if (LocationManager.GPS_PROVIDER.equals(name) || LocationManager.NETWORK_PROVIDER.equals(name) || LocationManager.FUSED_PROVIDER.equals(name)) {
            LocationProviderInterface p = mProvidersByName.get(name);
            if (p != null) {
                removeProviderLocked(p);
            }
        }
        addTestProviderLocked(name, properties);
        updateProvidersLocked();
    }
    Binder.restoreCallingIdentity(identity);
}
Also used : LocationProviderInterface(com.android.server.location.LocationProviderInterface)

Aggregations

LocationProviderInterface (com.android.server.location.LocationProviderInterface)95 BroadcastReceiver (android.content.BroadcastReceiver)18 Location (android.location.Location)18 MockProvider (com.android.server.location.MockProvider)13 PendingIntent (android.app.PendingIntent)6 Intent (android.content.Intent)6 LocationRequest (android.location.LocationRequest)6 Bundle (android.os.Bundle)6 WorkSource (android.os.WorkSource)6 ProviderRequest (com.android.internal.location.ProviderRequest)6 LocationProviderProxy (com.android.server.location.LocationProviderProxy)6 ArrayList (java.util.ArrayList)6 HashMap (java.util.HashMap)6 Map (java.util.Map)6 FlpHardwareProvider (com.android.server.location.FlpHardwareProvider)5 PackageProviderKey (com.android.server.location.LocationRequestStatistics.PackageProviderKey)5 PackageStatistics (com.android.server.location.LocationRequestStatistics.PackageStatistics)5