| /* | |
| * Copyright (C) 2007 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| package android.location; | |
| import android.annotation.Nullable; | |
| import android.location.provider.ProviderProperties; | |
| /** | |
| * Information about the properties of a location provider. | |
| * | |
| * @deprecated This class is incapable of representing unknown provider properties and may return | |
| * incorrect results on the rare occasion when a provider's properties are unknown. Prefer using | |
| * {@link LocationManager#getProviderProperties(String)} to retrieve {@link ProviderProperties} | |
| * instead. | |
| */ | |
| @Deprecated | |
| public class LocationProvider { | |
| /** | |
| * @deprecated Location provider statuses are no longer supported. | |
| */ | |
| @Deprecated | |
| public static final int OUT_OF_SERVICE = 0; | |
| /** | |
| * @deprecated Location provider statuses are no longer supported. | |
| */ | |
| @Deprecated | |
| public static final int TEMPORARILY_UNAVAILABLE = 1; | |
| /** | |
| * @deprecated Location provider statuses are no longer supported. | |
| */ | |
| @Deprecated | |
| public static final int AVAILABLE = 2; | |
| private final String mName; | |
| private final @Nullable ProviderProperties mProperties; | |
| LocationProvider(String name, @Nullable ProviderProperties properties) { | |
| mName = name; | |
| mProperties = properties; | |
| } | |
| /** | |
| * Returns the name of this provider. | |
| */ | |
| public String getName() { | |
| return mName; | |
| } | |
| /** | |
| * Returns true if this provider meets the given criteria, | |
| * false otherwise. | |
| */ | |
| public boolean meetsCriteria(Criteria criteria) { | |
| return propertiesMeetCriteria(mName, mProperties, criteria); | |
| } | |
| /** | |
| * @hide | |
| */ | |
| public static boolean propertiesMeetCriteria(String name, ProviderProperties properties, | |
| Criteria criteria) { | |
| if (LocationManager.PASSIVE_PROVIDER.equals(name)) { | |
| // passive provider never matches | |
| return false; | |
| } | |
| if (properties == null) { | |
| // unfortunately this can happen for provider in remote services | |
| // that have not finished binding yet | |
| return false; | |
| } | |
| if (criteria.getAccuracy() != Criteria.NO_REQUIREMENT && | |
| criteria.getAccuracy() < properties.getAccuracy()) { | |
| return false; | |
| } | |
| if (criteria.getPowerRequirement() != Criteria.NO_REQUIREMENT && | |
| criteria.getPowerRequirement() < properties.getPowerUsage()) { | |
| return false; | |
| } | |
| if (criteria.isAltitudeRequired() && !properties.hasAltitudeSupport()) { | |
| return false; | |
| } | |
| if (criteria.isSpeedRequired() && !properties.hasSpeedSupport()) { | |
| return false; | |
| } | |
| if (criteria.isBearingRequired() && !properties.hasBearingSupport()) { | |
| return false; | |
| } | |
| if (!criteria.isCostAllowed() && properties.hasMonetaryCost()) { | |
| return false; | |
| } | |
| return true; | |
| } | |
| /** | |
| * Returns true if the provider requires access to a | |
| * data network (e.g., the Internet), false otherwise. | |
| */ | |
| public boolean requiresNetwork() { | |
| if (mProperties == null) { | |
| return false; | |
| } else { | |
| return mProperties.hasNetworkRequirement(); | |
| } | |
| } | |
| /** | |
| * Returns true if the provider requires access to a | |
| * satellite-based positioning system (e.g., GPS), false | |
| * otherwise. | |
| */ | |
| public boolean requiresSatellite() { | |
| if (mProperties == null) { | |
| return false; | |
| } else { | |
| return mProperties.hasSatelliteRequirement(); | |
| } | |
| } | |
| /** | |
| * Returns true if the provider requires access to an appropriate | |
| * cellular network (e.g., to make use of cell tower IDs), false | |
| * otherwise. | |
| */ | |
| public boolean requiresCell() { | |
| if (mProperties == null) { | |
| return false; | |
| } else { | |
| return mProperties.hasCellRequirement(); | |
| } | |
| } | |
| /** | |
| * Returns true if the use of this provider may result in a | |
| * monetary charge to the user, false if use is free. It is up to | |
| * each provider to give accurate information. | |
| */ | |
| public boolean hasMonetaryCost() { | |
| if (mProperties == null) { | |
| return false; | |
| } else { | |
| return mProperties.hasMonetaryCost(); | |
| } | |
| } | |
| /** | |
| * Returns true if the provider is able to provide altitude | |
| * information, false otherwise. A provider that reports altitude | |
| * under most circumstances but may occassionally not report it | |
| * should return true. | |
| */ | |
| public boolean supportsAltitude() { | |
| if (mProperties == null) { | |
| return false; | |
| } else { | |
| return mProperties.hasAltitudeSupport(); | |
| } | |
| } | |
| /** | |
| * Returns true if the provider is able to provide speed | |
| * information, false otherwise. A provider that reports speed | |
| * under most circumstances but may occassionally not report it | |
| * should return true. | |
| */ | |
| public boolean supportsSpeed() { | |
| if (mProperties == null) { | |
| return false; | |
| } else { | |
| return mProperties.hasSpeedSupport(); | |
| } | |
| } | |
| /** | |
| * Returns true if the provider is able to provide bearing | |
| * information, false otherwise. A provider that reports bearing | |
| * under most circumstances but may occassionally not report it | |
| * should return true. | |
| */ | |
| public boolean supportsBearing() { | |
| if (mProperties == null) { | |
| return false; | |
| } else { | |
| return mProperties.hasBearingSupport(); | |
| } | |
| } | |
| /** | |
| * Returns the power requirement for this provider, one of the ProviderProperties.POWER_USAGE_* | |
| * constants. | |
| */ | |
| public int getPowerRequirement() { | |
| if (mProperties == null) { | |
| return ProviderProperties.POWER_USAGE_HIGH; | |
| } else { | |
| return mProperties.getPowerUsage(); | |
| } | |
| } | |
| /** | |
| * Returns the rough accuracy of this provider, one of the ProviderProperties.ACCURACY_* | |
| * constants. | |
| */ | |
| public int getAccuracy() { | |
| if (mProperties == null) { | |
| return ProviderProperties.ACCURACY_COARSE; | |
| } else { | |
| return mProperties.getAccuracy(); | |
| } | |
| } | |
| } |