Search in sources :

Example 1 with LocationProviderInterface

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

the class LocationManagerService method addTestProvider.

@Override
public void addTestProvider(String name, ProviderProperties properties) {
    checkMockPermissionsSafe();
    if (LocationManager.PASSIVE_PROVIDER.equals(name)) {
        throw new IllegalArgumentException("Cannot mock the passive location provider");
    }
    long identity = Binder.clearCallingIdentity();
    synchronized (mLock) {
        MockProvider provider = new MockProvider(name, this, properties);
        // 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);
            }
        }
        if (mProvidersByName.get(name) != null) {
            throw new IllegalArgumentException("Provider \"" + name + "\" already exists");
        }
        mGeoFencerEnabled = false;
        addProviderLocked(provider);
        mMockProviders.put(name, provider);
        mLastLocation.put(name, null);
        mLastLocationCoarseInterval.put(name, null);
        updateProvidersLocked();
    }
    Binder.restoreCallingIdentity(identity);
}
Also used : MockProvider(com.android.server.location.MockProvider) LocationProviderInterface(com.android.server.location.LocationProviderInterface)

Example 2 with LocationProviderInterface

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

the class LocationManagerService method dump.

@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
    if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP) != PackageManager.PERMISSION_GRANTED) {
        pw.println("Permission Denial: can't dump LocationManagerService from from pid=" + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid());
        return;
    }
    synchronized (mLock) {
        pw.println("Current Location Manager state:");
        pw.println("  Location Listeners:");
        for (Receiver receiver : mReceivers.values()) {
            pw.println("    " + receiver);
        }
        pw.println("  Records by Provider:");
        for (Map.Entry<String, ArrayList<UpdateRecord>> entry : mRecordsByProvider.entrySet()) {
            pw.println("    " + entry.getKey() + ":");
            for (UpdateRecord record : entry.getValue()) {
                pw.println("      " + record);
            }
        }
        pw.println("  Last Known Locations:");
        for (Map.Entry<String, Location> entry : mLastLocation.entrySet()) {
            String provider = entry.getKey();
            Location location = entry.getValue();
            pw.println("    " + provider + ": " + location);
        }
        pw.println("  Last Known Locations Coarse Intervals:");
        for (Map.Entry<String, Location> entry : mLastLocationCoarseInterval.entrySet()) {
            String provider = entry.getKey();
            Location location = entry.getValue();
            pw.println("    " + provider + ": " + location);
        }
        mGeofenceManager.dump(pw);
        if (mGeoFencer != null && mGeoFencerEnabled) {
            mGeoFencer.dump(pw, "");
        }
        if (mEnabledProviders.size() > 0) {
            pw.println("  Enabled Providers:");
            for (String i : mEnabledProviders) {
                pw.println("    " + i);
            }
        }
        if (mDisabledProviders.size() > 0) {
            pw.println("  Disabled Providers:");
            for (String i : mDisabledProviders) {
                pw.println("    " + i);
            }
        }
        pw.append("  ");
        mBlacklist.dump(pw);
        if (mMockProviders.size() > 0) {
            pw.println("  Mock Providers:");
            for (Map.Entry<String, MockProvider> i : mMockProviders.entrySet()) {
                i.getValue().dump(pw, "      ");
            }
        }
        pw.append("  fudger: ");
        mLocationFudger.dump(fd, pw, args);
        if (args.length > 0 && "short".equals(args[0])) {
            return;
        }
        for (LocationProviderInterface provider : mProviders) {
            pw.print(provider.getName() + " Internal State");
            if (provider instanceof LocationProviderProxy) {
                LocationProviderProxy proxy = (LocationProviderProxy) provider;
                pw.print(" (" + proxy.getConnectedPackageName() + ")");
            }
            pw.println(":");
            provider.dump(fd, pw, args);
        }
    }
}
Also used : LocationProviderProxy(com.android.server.location.LocationProviderProxy) ArrayList(java.util.ArrayList) BroadcastReceiver(android.content.BroadcastReceiver) MockProvider(com.android.server.location.MockProvider) Map(java.util.Map) HashMap(java.util.HashMap) LocationProviderInterface(com.android.server.location.LocationProviderInterface) Location(android.location.Location)

Example 3 with LocationProviderInterface

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

the class LocationManagerService method updateProvidersLocked.

private void updateProvidersLocked() {
    boolean changesMade = false;
    for (int i = mProviders.size() - 1; i >= 0; i--) {
        LocationProviderInterface p = mProviders.get(i);
        boolean isEnabled = p.isEnabled();
        String name = p.getName();
        boolean shouldBeEnabled = isAllowedByCurrentUserSettingsLocked(name);
        if (isEnabled && !shouldBeEnabled) {
            updateProviderListenersLocked(name, false, mCurrentUserId);
            changesMade = true;
        } else if (!isEnabled && shouldBeEnabled) {
            updateProviderListenersLocked(name, true, mCurrentUserId);
            changesMade = true;
        }
    }
    if (changesMade) {
        mContext.sendBroadcastAsUser(new Intent(LocationManager.PROVIDERS_CHANGED_ACTION), UserHandle.ALL);
    }
}
Also used : PendingIntent(android.app.PendingIntent) Intent(android.content.Intent) LocationProviderInterface(com.android.server.location.LocationProviderInterface)

Example 4 with LocationProviderInterface

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

the class LocationManagerService method requestLocationUpdatesLocked.

private void requestLocationUpdatesLocked(LocationRequest request, Receiver receiver, int pid, int uid, String packageName) {
    // use the fused provider
    if (request == null)
        request = DEFAULT_LOCATION_REQUEST;
    String name = request.getProvider();
    if (name == null) {
        throw new IllegalArgumentException("provider name must not be null");
    }
    if (D)
        Log.d(TAG, "request " + Integer.toHexString(System.identityHashCode(receiver)) + " " + name + " " + request + " from " + packageName + "(" + uid + ")");
    LocationProviderInterface provider = mProvidersByName.get(name);
    if (provider == null) {
        throw new IllegalArgumentException("provider doesn't exisit: " + provider);
    }
    UpdateRecord record = new UpdateRecord(name, request, receiver);
    UpdateRecord oldRecord = receiver.mUpdateRecords.put(name, record);
    if (oldRecord != null) {
        oldRecord.disposeLocked(false);
    }
    boolean isProviderEnabled = isAllowedByUserSettingsLocked(name, uid);
    if (isProviderEnabled) {
        applyRequirementsLocked(name);
    } else {
        // Notify the listener that updates are currently disabled
        receiver.callProviderEnabledLocked(name, false);
    }
}
Also used : LocationProviderInterface(com.android.server.location.LocationProviderInterface)

Example 5 with LocationProviderInterface

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

the class LocationManagerService method isProviderEnabled.

@Override
public boolean isProviderEnabled(String provider) {
    checkResolutionLevelIsSufficientForProviderUse(getCallerAllowedResolutionLevel(), provider);
    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)

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