Search in sources :

Example 41 with LocationProviderInterface

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

the class LocationManagerService method shutdownComponents.

/**
     * Provides a way for components held by the {@link LocationManagerService} to clean-up
     * gracefully on system's shutdown.
     *
     * NOTES:
     * 1) Only provides a chance to clean-up on an opt-in basis. This guarantees back-compat
     * support for components that do not wish to handle such event.
     */
private void shutdownComponents() {
    if (D)
        Log.d(TAG, "Shutting down components...");
    LocationProviderInterface gpsProvider = mProvidersByName.get(LocationManager.GPS_PROVIDER);
    if (gpsProvider != null && gpsProvider.isEnabled()) {
        gpsProvider.disable();
    }
    // avoids an exception to be thrown by the singleton factory method
    if (FlpHardwareProvider.isSupported()) {
        FlpHardwareProvider flpHardwareProvider = FlpHardwareProvider.getInstance(mContext);
        flpHardwareProvider.cleanup();
    }
}
Also used : LocationProviderInterface(com.android.server.location.LocationProviderInterface) FlpHardwareProvider(com.android.server.location.FlpHardwareProvider)

Example 42 with LocationProviderInterface

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

the class LocationManagerService method switchUser.

/**
     * Called when the device's active user changes.
     * @param userId the new active user's UserId
     */
private void switchUser(int userId) {
    if (mCurrentUserId == userId) {
        return;
    }
    mBlacklist.switchUser(userId);
    mLocationHandler.removeMessages(MSG_LOCATION_CHANGED);
    synchronized (mLock) {
        mLastLocation.clear();
        mLastLocationCoarseInterval.clear();
        for (LocationProviderInterface p : mProviders) {
            updateProviderListenersLocked(p.getName(), false);
        }
        mCurrentUserId = userId;
        updateUserProfiles(userId);
        updateProvidersLocked();
    }
}
Also used : LocationProviderInterface(com.android.server.location.LocationProviderInterface)

Example 43 with LocationProviderInterface

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

the class LocationManagerService method removeTestProvider.

@Override
public void removeTestProvider(String provider, String opPackageName) {
    if (!canCallerAccessMockLocation(opPackageName)) {
        return;
    }
    synchronized (mLock) {
        // These methods can't be called after removing the test provider, so first make sure
        // we don't leave anything dangling.
        clearTestProviderEnabled(provider, opPackageName);
        clearTestProviderLocation(provider, opPackageName);
        clearTestProviderStatus(provider, opPackageName);
        MockProvider mockProvider = mMockProviders.remove(provider);
        if (mockProvider == null) {
            throw new IllegalArgumentException("Provider \"" + provider + "\" unknown");
        }
        long identity = Binder.clearCallingIdentity();
        removeProviderLocked(mProvidersByName.get(provider));
        // reinstate real provider if available
        LocationProviderInterface realProvider = mRealProviders.get(provider);
        if (realProvider != null) {
            addProviderLocked(realProvider);
        }
        mLastLocation.put(provider, null);
        mLastLocationCoarseInterval.put(provider, null);
        updateProvidersLocked();
        Binder.restoreCallingIdentity(identity);
    }
}
Also used : MockProvider(com.android.server.location.MockProvider) LocationProviderInterface(com.android.server.location.LocationProviderInterface)

Example 44 with LocationProviderInterface

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

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);
            // If any provider has been disabled, clear all last locations for all providers.
            // This is to be on the safe side in case a provider has location derived from
            // this disabled provider.
            mLastLocation.clear();
            mLastLocationCoarseInterval.clear();
            changesMade = true;
        } else if (!isEnabled && shouldBeEnabled) {
            updateProviderListenersLocked(name, true);
            changesMade = true;
        }
    }
    if (changesMade) {
        mContext.sendBroadcastAsUser(new Intent(LocationManager.PROVIDERS_CHANGED_ACTION), UserHandle.ALL);
        mContext.sendBroadcastAsUser(new Intent(LocationManager.MODE_CHANGED_ACTION), UserHandle.ALL);
    }
}
Also used : PendingIntent(android.app.PendingIntent) Intent(android.content.Intent) LocationProviderInterface(com.android.server.location.LocationProviderInterface)

Example 45 with LocationProviderInterface

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

the class LocationManagerService method getProviders.

/**
     * Return all providers by name, that match criteria and are optionally
     * enabled.
     * Can return passive provider, but never returns fused provider.
     */
@Override
public List<String> getProviders(Criteria criteria, boolean enabledOnly) {
    int allowedResolutionLevel = getCallerAllowedResolutionLevel();
    ArrayList<String> out;
    int uid = Binder.getCallingUid();
    ;
    long identity = Binder.clearCallingIdentity();
    try {
        synchronized (mLock) {
            out = new ArrayList<String>(mProviders.size());
            for (LocationProviderInterface provider : mProviders) {
                String name = provider.getName();
                if (LocationManager.FUSED_PROVIDER.equals(name)) {
                    continue;
                }
                if (allowedResolutionLevel >= getMinimumResolutionLevelForProviderUse(name)) {
                    if (enabledOnly && !isAllowedByUserSettingsLocked(name, uid)) {
                        continue;
                    }
                    if (criteria != null && !LocationProvider.propertiesMeetCriteria(name, provider.getProperties(), criteria)) {
                        continue;
                    }
                    out.add(name);
                }
            }
        }
    } finally {
        Binder.restoreCallingIdentity(identity);
    }
    if (D)
        Log.d(TAG, "getProviders()=" + out);
    return out;
}
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