• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.location;
18 
19 import android.os.Parcel;
20 import android.os.Parcelable;
21 
22 /**
23  * A class indicating the application criteria for selecting a
24  * location provider.  Providers maybe ordered according to accuracy,
25  * power usage, ability to report altitude, speed,
26  * and bearing, and monetary cost.
27  */
28 public class Criteria implements Parcelable {
29     /**
30      * A constant indicating that the application does not choose to
31      * place requirement on a particular feature.
32      */
33     public static final int NO_REQUIREMENT = 0;
34 
35     /**
36      * A constant indicating a low power requirement.
37      */
38     public static final int POWER_LOW = 1;
39 
40     /**
41      * A constant indicating a medium power requirement.
42      */
43     public static final int POWER_MEDIUM = 2;
44 
45     /**
46      * A constant indicating a high power requirement.
47      */
48     public static final int POWER_HIGH = 3;
49 
50     /**
51      * A constant indicating a finer location accuracy requirement
52      */
53     public static final int ACCURACY_FINE = 1;
54 
55     /**
56      * A constant indicating an approximate accuracy requirement
57      */
58     public static final int ACCURACY_COARSE = 2;
59 
60     private int mAccuracy              = NO_REQUIREMENT;
61     private int mPowerRequirement      = NO_REQUIREMENT;
62 //    private int mPreferredResponseTime = NO_REQUIREMENT;
63     private boolean mAltitudeRequired  = false;
64     private boolean mBearingRequired   = false;
65     private boolean mSpeedRequired     = false;
66     private boolean mCostAllowed       = false;
67 
68     /**
69      * Constructs a new Criteria object.  The new object will have no
70      * requirements on accuracy, power, or response time; will not
71      * require altitude, speed, or bearing; and will not allow monetary
72      * cost.
73      */
Criteria()74     public Criteria() {}
75 
76     /**
77      * Constructs a new Criteria object that is a copy of the given criteria.
78      */
Criteria(Criteria criteria)79     public Criteria(Criteria criteria) {
80         mAccuracy = criteria.mAccuracy;
81         mPowerRequirement = criteria.mPowerRequirement;
82 //        mPreferredResponseTime = criteria.mPreferredResponseTime;
83         mAltitudeRequired = criteria.mAltitudeRequired;
84         mBearingRequired = criteria.mBearingRequired;
85         mSpeedRequired = criteria.mSpeedRequired;
86         mCostAllowed = criteria.mCostAllowed;
87     }
88 
89     /**
90      * Indicates the desired accuracy for latitude and longitude. Accuracy
91      * may be {@link #ACCURACY_FINE} if desired location
92      * is fine, else it can be {@link #ACCURACY_COARSE}.
93      * More accurate location usually consumes more power and may take
94      * longer.
95      *
96      * @throws IllegalArgumentException if accuracy is negative
97      */
setAccuracy(int accuracy)98     public void setAccuracy(int accuracy) {
99         if (accuracy < NO_REQUIREMENT && accuracy > ACCURACY_COARSE) {
100             throw new IllegalArgumentException("accuracy=" + accuracy);
101         }
102         mAccuracy = accuracy;
103     }
104 
105     /**
106      * Returns a constant indicating desired accuracy of location
107      * Accuracy may be {@link #ACCURACY_FINE} if desired location
108      * is fine, else it can be {@link #ACCURACY_COARSE}.
109      */
getAccuracy()110     public int getAccuracy() {
111         return mAccuracy;
112     }
113 
114     /**
115      * Indicates the desired maximum power level.  The level parameter
116      * must be one of NO_REQUIREMENT, POWER_LOW, POWER_MEDIUM, or
117      * POWER_HIGH.
118      */
setPowerRequirement(int level)119     public void setPowerRequirement(int level) {
120         if (level < NO_REQUIREMENT || level > POWER_HIGH) {
121             throw new IllegalArgumentException("level=" + level);
122         }
123         mPowerRequirement = level;
124     }
125 
126     /**
127      * Returns a constant indicating the desired power requirement.  The
128      * returned
129      */
getPowerRequirement()130     public int getPowerRequirement() {
131         return mPowerRequirement;
132     }
133 
134 //    /**
135 //     * Indicates the preferred response time of the provider, in milliseconds.
136 //     */
137 //    public void setPreferredResponseTime(int time) {
138 //        mPreferredResponseTime = time;
139 //    }
140 //
141 //    /**
142 //     * Returns the preferred response time of the provider, in milliseconds.
143 //     */
144 //    public int getPreferredResponseTime() {
145 //        return mPreferredResponseTime;
146 //    }
147 
148     /**
149      * Indicates whether the provider is allowed to incur monetary cost.
150      */
setCostAllowed(boolean costAllowed)151     public void setCostAllowed(boolean costAllowed) {
152         mCostAllowed = costAllowed;
153     }
154 
155     /**
156      * Returns whether the provider is allowed to incur monetary cost.
157      */
isCostAllowed()158     public boolean isCostAllowed() {
159         return mCostAllowed;
160     }
161 
162     /**
163      * Indicates whether the provider must provide altitude information.
164      * Not all fixes are guaranteed to contain such information.
165      */
setAltitudeRequired(boolean altitudeRequired)166     public void setAltitudeRequired(boolean altitudeRequired) {
167         mAltitudeRequired = altitudeRequired;
168     }
169 
170     /**
171      * Returns whether the provider must provide altitude information.
172      * Not all fixes are guaranteed to contain such information.
173      */
isAltitudeRequired()174     public boolean isAltitudeRequired() {
175         return mAltitudeRequired;
176     }
177 
178     /**
179      * Indicates whether the provider must provide speed information.
180      * Not all fixes are guaranteed to contain such information.
181      */
setSpeedRequired(boolean speedRequired)182     public void setSpeedRequired(boolean speedRequired) {
183         mSpeedRequired = speedRequired;
184     }
185 
186     /**
187      * Returns whether the provider must provide speed information.
188      * Not all fixes are guaranteed to contain such information.
189      */
isSpeedRequired()190     public boolean isSpeedRequired() {
191         return mSpeedRequired;
192     }
193 
194     /**
195      * Indicates whether the provider must provide bearing information.
196      * Not all fixes are guaranteed to contain such information.
197      */
setBearingRequired(boolean bearingRequired)198     public void setBearingRequired(boolean bearingRequired) {
199         mBearingRequired = bearingRequired;
200     }
201 
202     /**
203      * Returns whether the provider must provide bearing information.
204      * Not all fixes are guaranteed to contain such information.
205      */
isBearingRequired()206     public boolean isBearingRequired() {
207         return mBearingRequired;
208     }
209 
210     public static final Parcelable.Creator<Criteria> CREATOR =
211         new Parcelable.Creator<Criteria>() {
212         public Criteria createFromParcel(Parcel in) {
213             Criteria c = new Criteria();
214             c.mAccuracy = in.readInt();
215             c.mPowerRequirement = in.readInt();
216 //            c.mPreferredResponseTime = in.readInt();
217             c.mAltitudeRequired = in.readInt() != 0;
218             c.mBearingRequired = in.readInt() != 0;
219             c.mSpeedRequired = in.readInt() != 0;
220             c.mCostAllowed = in.readInt() != 0;
221             return c;
222         }
223 
224         public Criteria[] newArray(int size) {
225             return new Criteria[size];
226         }
227     };
228 
describeContents()229     public int describeContents() {
230         return 0;
231     }
232 
writeToParcel(Parcel parcel, int flags)233     public void writeToParcel(Parcel parcel, int flags) {
234         parcel.writeInt(mAccuracy);
235         parcel.writeInt(mPowerRequirement);
236 //        parcel.writeInt(mPreferredResponseTime);
237         parcel.writeInt(mAltitudeRequired ? 1 : 0);
238         parcel.writeInt(mBearingRequired ? 1 : 0);
239         parcel.writeInt(mSpeedRequired ? 1 : 0);
240         parcel.writeInt(mCostAllowed ? 1 : 0);
241     }
242 }
243