blob: 9d258d061d92ecde8e21e78b9f78a9483368f859 [file] [log] [blame]
/*
* 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.os.Parcel;
import android.os.Parcelable;
/**
* A class indicating the application criteria for selecting a
* location provider. Providers maybe ordered according to accuracy,
* power usage, ability to report altitude, speed,
* and bearing, and monetary cost.
*/
public class Criteria implements Parcelable {
/**
* A constant indicating that the application does not choose to
* place requirement on a particular feature.
*/
public static final int NO_REQUIREMENT = 0;
/**
* A constant indicating a low power requirement.
*/
public static final int POWER_LOW = 1;
/**
* A constant indicating a medium power requirement.
*/
public static final int POWER_MEDIUM = 2;
/**
* A constant indicating a high power requirement.
*/
public static final int POWER_HIGH = 3;
/**
* A constant indicating a finer location accuracy requirement
*/
public static final int ACCURACY_FINE = 1;
/**
* A constant indicating an approximate accuracy requirement
*/
public static final int ACCURACY_COARSE = 2;
private int mAccuracy = NO_REQUIREMENT;
private int mPowerRequirement = NO_REQUIREMENT;
// private int mPreferredResponseTime = NO_REQUIREMENT;
private boolean mAltitudeRequired = false;
private boolean mBearingRequired = false;
private boolean mSpeedRequired = false;
private boolean mCostAllowed = false;
/**
* Constructs a new Criteria object. The new object will have no
* requirements on accuracy, power, or response time; will not
* require altitude, speed, or bearing; and will not allow monetary
* cost.
*/
public Criteria() {}
/**
* Constructs a new Criteria object that is a copy of the given criteria.
*/
public Criteria(Criteria criteria) {
mAccuracy = criteria.mAccuracy;
mPowerRequirement = criteria.mPowerRequirement;
// mPreferredResponseTime = criteria.mPreferredResponseTime;
mAltitudeRequired = criteria.mAltitudeRequired;
mBearingRequired = criteria.mBearingRequired;
mSpeedRequired = criteria.mSpeedRequired;
mCostAllowed = criteria.mCostAllowed;
}
/**
* Indicates the desired accuracy for latitude and longitude. Accuracy
* may be {@link #ACCURACY_FINE} if desired location
* is fine, else it can be {@link #ACCURACY_COARSE}.
* More accurate location usually consumes more power and may take
* longer.
*
* @throws IllegalArgumentException if accuracy is negative
*/
public void setAccuracy(int accuracy) {
if (accuracy < NO_REQUIREMENT && accuracy > ACCURACY_COARSE) {
throw new IllegalArgumentException("accuracy=" + accuracy);
}
mAccuracy = accuracy;
}
/**
* Returns a constant indicating desired accuracy of location
* Accuracy may be {@link #ACCURACY_FINE} if desired location
* is fine, else it can be {@link #ACCURACY_COARSE}.
*/
public int getAccuracy() {
return mAccuracy;
}
/**
* Indicates the desired maximum power level. The level parameter
* must be one of NO_REQUIREMENT, POWER_LOW, POWER_MEDIUM, or
* POWER_HIGH.
*/
public void setPowerRequirement(int level) {
if (level < NO_REQUIREMENT || level > POWER_HIGH) {
throw new IllegalArgumentException("level=" + level);
}
mPowerRequirement = level;
}
/**
* Returns a constant indicating the desired power requirement. The
* returned
*/
public int getPowerRequirement() {
return mPowerRequirement;
}
// /**
// * Indicates the preferred response time of the provider, in milliseconds.
// */
// public void setPreferredResponseTime(int time) {
// mPreferredResponseTime = time;
// }
//
// /**
// * Returns the preferred response time of the provider, in milliseconds.
// */
// public int getPreferredResponseTime() {
// return mPreferredResponseTime;
// }
/**
* Indicates whether the provider is allowed to incur monetary cost.
*/
public void setCostAllowed(boolean costAllowed) {
mCostAllowed = costAllowed;
}
/**
* Returns whether the provider is allowed to incur monetary cost.
*/
public boolean isCostAllowed() {
return mCostAllowed;
}
/**
* Indicates whether the provider must provide altitude information.
* Not all fixes are guaranteed to contain such information.
*/
public void setAltitudeRequired(boolean altitudeRequired) {
mAltitudeRequired = altitudeRequired;
}
/**
* Returns whether the provider must provide altitude information.
* Not all fixes are guaranteed to contain such information.
*/
public boolean isAltitudeRequired() {
return mAltitudeRequired;
}
/**
* Indicates whether the provider must provide speed information.
* Not all fixes are guaranteed to contain such information.
*/
public void setSpeedRequired(boolean speedRequired) {
mSpeedRequired = speedRequired;
}
/**
* Returns whether the provider must provide speed information.
* Not all fixes are guaranteed to contain such information.
*/
public boolean isSpeedRequired() {
return mSpeedRequired;
}
/**
* Indicates whether the provider must provide bearing information.
* Not all fixes are guaranteed to contain such information.
*/
public void setBearingRequired(boolean bearingRequired) {
mBearingRequired = bearingRequired;
}
/**
* Returns whether the provider must provide bearing information.
* Not all fixes are guaranteed to contain such information.
*/
public boolean isBearingRequired() {
return mBearingRequired;
}
public static final Parcelable.Creator<Criteria> CREATOR =
new Parcelable.Creator<Criteria>() {
public Criteria createFromParcel(Parcel in) {
Criteria c = new Criteria();
c.mAccuracy = in.readInt();
c.mPowerRequirement = in.readInt();
// c.mPreferredResponseTime = in.readInt();
c.mAltitudeRequired = in.readInt() != 0;
c.mBearingRequired = in.readInt() != 0;
c.mSpeedRequired = in.readInt() != 0;
c.mCostAllowed = in.readInt() != 0;
return c;
}
public Criteria[] newArray(int size) {
return new Criteria[size];
}
};
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(mAccuracy);
parcel.writeInt(mPowerRequirement);
// parcel.writeInt(mPreferredResponseTime);
parcel.writeInt(mAltitudeRequired ? 1 : 0);
parcel.writeInt(mBearingRequired ? 1 : 0);
parcel.writeInt(mSpeedRequired ? 1 : 0);
parcel.writeInt(mCostAllowed ? 1 : 0);
}
}