19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.location;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A class indicating the application criteria for selecting a
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * location provider.  Providers maybe ordered according to accuracy,
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * power usage, ability to report altitude, speed,
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and bearing, and monetary cost.
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Criteria implements Parcelable {
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * A constant indicating that the application does not choose to
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * place requirement on a particular feature.
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int NO_REQUIREMENT = 0;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * A constant indicating a low power requirement.
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int POWER_LOW = 1;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * A constant indicating a medium power requirement.
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int POWER_MEDIUM = 2;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * A constant indicating a high power requirement.
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int POWER_HIGH = 3;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * A constant indicating a finer location accuracy requirement
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int ACCURACY_FINE = 1;
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * A constant indicating an approximate accuracy requirement
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int ACCURACY_COARSE = 2;
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6003ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    /**
6103ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * A constant indicating a low location accuracy requirement
6203ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * - may be used for horizontal, altitude, speed or bearing accuracy.
638900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * For horizontal and vertical position this corresponds roughly to
648900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * an accuracy of greater than 500 meters.
6503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     */
6603ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    public static final int ACCURACY_LOW = 1;
6703ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood
6803ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    /**
6903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * A constant indicating a medium accuracy requirement
708900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * - currently used only for horizontal accuracy.
718900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * For horizontal position this corresponds roughly to to an accuracy
728900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * of between 100 and 500 meters.
7303ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     */
7403ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    public static final int ACCURACY_MEDIUM = 2;
7503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood
7603ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    /**
7703ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * a constant indicating a high accuracy requirement
7803ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * - may be used for horizontal, altitude, speed or bearing accuracy.
798900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * For horizontal and vertical position this corresponds roughly to
808900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * an accuracy of less than 100 meters.
8103ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     */
8203ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    public static final int ACCURACY_HIGH = 3;
8303ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood
8403ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    private int mHorizontalAccuracy    = NO_REQUIREMENT;
8503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    private int mVerticalAccuracy      = NO_REQUIREMENT;
8603ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    private int mSpeedAccuracy         = NO_REQUIREMENT;
8703ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    private int mBearingAccuracy       = NO_REQUIREMENT;
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mPowerRequirement      = NO_REQUIREMENT;
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean mAltitudeRequired  = false;
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean mBearingRequired   = false;
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean mSpeedRequired     = false;
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean mCostAllowed       = false;
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Constructs a new Criteria object.  The new object will have no
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * requirements on accuracy, power, or response time; will not
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * require altitude, speed, or bearing; and will not allow monetary
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * cost.
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Criteria() {}
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Constructs a new Criteria object that is a copy of the given criteria.
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Criteria(Criteria criteria) {
10603ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        mHorizontalAccuracy = criteria.mHorizontalAccuracy;
10703ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        mVerticalAccuracy = criteria.mVerticalAccuracy;
10803ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        mSpeedAccuracy = criteria.mSpeedAccuracy;
10903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        mBearingAccuracy = criteria.mBearingAccuracy;
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPowerRequirement = criteria.mPowerRequirement;
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mAltitudeRequired = criteria.mAltitudeRequired;
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mBearingRequired = criteria.mBearingRequired;
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSpeedRequired = criteria.mSpeedRequired;
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mCostAllowed = criteria.mCostAllowed;
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11803ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * Indicates the desired horizontal accuracy (latitude and longitude).
11903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * Accuracy may be {@link #ACCURACY_LOW}, {@link #ACCURACY_MEDIUM},
1208900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * {@link #ACCURACY_HIGH} or {@link #NO_REQUIREMENT}.
12103ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * More accurate location may consume more power and may take longer.
12203ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     *
12303ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * @throws IllegalArgumentException if accuracy is not one of the supported constants
12403ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     */
12503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    public void setHorizontalAccuracy(int accuracy) {
1268900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood        if (accuracy < NO_REQUIREMENT || accuracy > ACCURACY_HIGH) {
12703ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood            throw new IllegalArgumentException("accuracy=" + accuracy);
12803ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        }
12903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        mHorizontalAccuracy = accuracy;
13003ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    }
13103ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood
13203ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    /**
13303ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * Returns a constant indicating the desired horizontal accuracy (latitude and longitude).
13403ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * Accuracy may be {@link #ACCURACY_LOW}, {@link #ACCURACY_MEDIUM},
1358900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * {@link #ACCURACY_HIGH} or {@link #NO_REQUIREMENT}.
13603ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     */
13703ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    public int getHorizontalAccuracy() {
13803ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        return mHorizontalAccuracy;
13903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    }
14003ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood
14103ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    /**
14203ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * Indicates the desired vertical accuracy (altitude).
14303ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * Accuracy may be {@link #ACCURACY_LOW}, {@link #ACCURACY_MEDIUM},
1448900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * {@link #ACCURACY_HIGH} or {@link #NO_REQUIREMENT}.
14503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * More accurate location may consume more power and may take longer.
14603ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     *
14703ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * @throws IllegalArgumentException if accuracy is not one of the supported constants
14803ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     */
14903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    public void setVerticalAccuracy(int accuracy) {
1508900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood        if (accuracy < NO_REQUIREMENT || accuracy > ACCURACY_HIGH) {
15103ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood            throw new IllegalArgumentException("accuracy=" + accuracy);
15203ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        }
15303ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        mVerticalAccuracy = accuracy;
15403ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    }
15503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood
15603ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    /**
15703ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * Returns a constant indicating the desired vertical accuracy (altitude).
1588900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * Accuracy may be {@link #ACCURACY_LOW}, {@link #ACCURACY_HIGH},
1598900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * or {@link #NO_REQUIREMENT}.
16003ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     */
16103ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    public int getVerticalAccuracy() {
16203ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        return mVerticalAccuracy;
16303ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    }
16403ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood
16503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    /**
16603ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * Indicates the desired speed accuracy.
1678900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * Accuracy may be {@link #ACCURACY_LOW}, {@link #ACCURACY_HIGH},
1688900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * or {@link #NO_REQUIREMENT}.
16903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * More accurate location may consume more power and may take longer.
17003ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     *
17103ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * @throws IllegalArgumentException if accuracy is not one of the supported constants
17203ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     */
17303ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    public void setSpeedAccuracy(int accuracy) {
1748900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood        if (accuracy < NO_REQUIREMENT || accuracy > ACCURACY_HIGH) {
17503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood            throw new IllegalArgumentException("accuracy=" + accuracy);
17603ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        }
17703ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        mSpeedAccuracy = accuracy;
17803ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    }
17903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood
18003ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    /**
18103ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * Returns a constant indicating the desired speed accuracy
1828900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * Accuracy may be {@link #ACCURACY_LOW}, {@link #ACCURACY_HIGH},
1838900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * or {@link #NO_REQUIREMENT}.
18403ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     */
18503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    public int getSpeedAccuracy() {
18603ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        return mSpeedAccuracy;
18703ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    }
18803ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood
18903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    /**
19003ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * Indicates the desired bearing accuracy.
1918900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * Accuracy may be {@link #ACCURACY_LOW}, {@link #ACCURACY_HIGH},
1928900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * or {@link #NO_REQUIREMENT}.
19303ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * More accurate location may consume more power and may take longer.
19403ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     *
19503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * @throws IllegalArgumentException if accuracy is not one of the supported constants
19603ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     */
19703ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    public void setBearingAccuracy(int accuracy) {
1988900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood        if (accuracy < NO_REQUIREMENT || accuracy > ACCURACY_HIGH) {
19903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood            throw new IllegalArgumentException("accuracy=" + accuracy);
20003ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        }
20103ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        mBearingAccuracy = accuracy;
20203ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    }
20303ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood
20403ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    /**
20503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * Returns a constant indicating the desired bearing accuracy.
2068900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * Accuracy may be {@link #ACCURACY_LOW}, {@link #ACCURACY_HIGH},
2078900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood     * or {@link #NO_REQUIREMENT}.
20803ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     */
20903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    public int getBearingAccuracy() {
21003ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        return mBearingAccuracy;
21103ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    }
21203ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood
21303ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood    /**
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Indicates the desired accuracy for latitude and longitude. Accuracy
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * may be {@link #ACCURACY_FINE} if desired location
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is fine, else it can be {@link #ACCURACY_COARSE}.
21703ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * More accurate location may consume more power and may take longer.
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
21903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood     * @throws IllegalArgumentException if accuracy is not one of the supported constants
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setAccuracy(int accuracy) {
22203ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        if (accuracy < NO_REQUIREMENT || accuracy > ACCURACY_COARSE) {
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new IllegalArgumentException("accuracy=" + accuracy);
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
22503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        if (accuracy == ACCURACY_FINE) {
2268900c32986eb9b06f30ecbe6709857fd2cc7b576Mike Lockwood            mHorizontalAccuracy = ACCURACY_HIGH;
22703ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        } else {
22803ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood            mHorizontalAccuracy = ACCURACY_LOW;
22903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        }
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns a constant indicating desired accuracy of location
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Accuracy may be {@link #ACCURACY_FINE} if desired location
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * is fine, else it can be {@link #ACCURACY_COARSE}.
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getAccuracy() {
23803ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        if (mHorizontalAccuracy >= ACCURACY_HIGH) {
23903ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood            return ACCURACY_FINE;
24003ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        } else {
24103ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood            return ACCURACY_COARSE;
24203ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        }
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Indicates the desired maximum power level.  The level parameter
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * must be one of NO_REQUIREMENT, POWER_LOW, POWER_MEDIUM, or
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * POWER_HIGH.
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setPowerRequirement(int level) {
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (level < NO_REQUIREMENT || level > POWER_HIGH) {
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new IllegalArgumentException("level=" + level);
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mPowerRequirement = level;
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns a constant indicating the desired power requirement.  The
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * returned
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getPowerRequirement() {
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mPowerRequirement;
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Indicates whether the provider is allowed to incur monetary cost.
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setCostAllowed(boolean costAllowed) {
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mCostAllowed = costAllowed;
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns whether the provider is allowed to incur monetary cost.
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean isCostAllowed() {
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mCostAllowed;
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Indicates whether the provider must provide altitude information.
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Not all fixes are guaranteed to contain such information.
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setAltitudeRequired(boolean altitudeRequired) {
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mAltitudeRequired = altitudeRequired;
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns whether the provider must provide altitude information.
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Not all fixes are guaranteed to contain such information.
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean isAltitudeRequired() {
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mAltitudeRequired;
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Indicates whether the provider must provide speed information.
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Not all fixes are guaranteed to contain such information.
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setSpeedRequired(boolean speedRequired) {
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSpeedRequired = speedRequired;
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns whether the provider must provide speed information.
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Not all fixes are guaranteed to contain such information.
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean isSpeedRequired() {
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mSpeedRequired;
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Indicates whether the provider must provide bearing information.
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Not all fixes are guaranteed to contain such information.
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setBearingRequired(boolean bearingRequired) {
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mBearingRequired = bearingRequired;
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns whether the provider must provide bearing information.
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Not all fixes are guaranteed to contain such information.
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean isBearingRequired() {
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mBearingRequired;
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Parcelable.Creator<Criteria> CREATOR =
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Parcelable.Creator<Criteria>() {
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Criteria createFromParcel(Parcel in) {
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Criteria c = new Criteria();
33103ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood            c.mHorizontalAccuracy = in.readInt();
33203ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood            c.mVerticalAccuracy = in.readInt();
33303ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood            c.mSpeedAccuracy = in.readInt();
33403ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood            c.mBearingAccuracy = in.readInt();
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            c.mPowerRequirement = in.readInt();
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            c.mAltitudeRequired = in.readInt() != 0;
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            c.mBearingRequired = in.readInt() != 0;
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            c.mSpeedRequired = in.readInt() != 0;
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            c.mCostAllowed = in.readInt() != 0;
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return c;
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Criteria[] newArray(int size) {
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new Criteria[size];
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel parcel, int flags) {
35303ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        parcel.writeInt(mHorizontalAccuracy);
35403ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        parcel.writeInt(mVerticalAccuracy);
35503ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        parcel.writeInt(mSpeedAccuracy);
35603ca216ac19ea4e7afcb183c20c7c780f0d97756Mike Lockwood        parcel.writeInt(mBearingAccuracy);
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeInt(mPowerRequirement);
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeInt(mAltitudeRequired ? 1 : 0);
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeInt(mBearingRequired ? 1 : 0);
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeInt(mSpeedRequired ? 1 : 0);
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeInt(mCostAllowed ? 1 : 0);
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
364