Loading apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java +1 −1 Original line number Diff line number Diff line Loading @@ -2179,7 +2179,7 @@ public class DeviceIdleController extends SystemService if (getContext().getResources().getBoolean( com.android.internal.R.bool.config_autoPowerModePrefetchLocation)) { mLocationRequest = new LocationRequest.Builder(/*intervalMillis=*/ 0) .setQuality(LocationRequest.ACCURACY_FINE) .setQuality(LocationRequest.QUALITY_HIGH_ACCURACY) .setMaxUpdates(1) .build(); } Loading api/current.txt +5 −0 Original line number Diff line number Diff line Loading @@ -24099,9 +24099,13 @@ package android.location { method @IntRange(from=1, to=java.lang.Integer.MAX_VALUE) public int getMaxUpdates(); method @FloatRange(from=0, to=java.lang.Float.MAX_VALUE) public float getMinUpdateDistanceMeters(); method @IntRange(from=0) public long getMinUpdateIntervalMillis(); method public int getQuality(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.location.LocationRequest> CREATOR; field public static final long PASSIVE_INTERVAL = 9223372036854775807L; // 0x7fffffffffffffffL field public static final int QUALITY_BALANCED_POWER_ACCURACY = 102; // 0x66 field public static final int QUALITY_HIGH_ACCURACY = 100; // 0x64 field public static final int QUALITY_LOW_POWER = 104; // 0x68 } public static final class LocationRequest.Builder { Loading @@ -24114,6 +24118,7 @@ package android.location { method @NonNull public android.location.LocationRequest.Builder setMaxUpdates(@IntRange(from=1, to=java.lang.Integer.MAX_VALUE) int); method @NonNull public android.location.LocationRequest.Builder setMinUpdateDistanceMeters(@FloatRange(from=0, to=java.lang.Float.MAX_VALUE) float); method @NonNull public android.location.LocationRequest.Builder setMinUpdateIntervalMillis(@IntRange(from=0) long); method @NonNull public android.location.LocationRequest.Builder setQuality(int); } public interface OnNmeaMessageListener { api/system-current.txt +5 −7 Original line number Diff line number Diff line Loading @@ -4174,7 +4174,6 @@ package android.location { method @Deprecated public long getInterval(); method @Deprecated public int getNumUpdates(); method @Deprecated @NonNull public String getProvider(); method public int getQuality(); method @Deprecated public float getSmallestDisplacement(); method @NonNull public android.os.WorkSource getWorkSource(); method public boolean isHiddenFromAppOps(); Loading @@ -4193,11 +4192,11 @@ package android.location { method @Deprecated @NonNull public android.location.LocationRequest setQuality(int); method @Deprecated @NonNull public android.location.LocationRequest setSmallestDisplacement(float); method @Deprecated public void setWorkSource(@Nullable android.os.WorkSource); field public static final int ACCURACY_BLOCK = 102; // 0x66 field public static final int ACCURACY_CITY = 104; // 0x68 field public static final int ACCURACY_FINE = 100; // 0x64 field public static final int POWER_HIGH = 203; // 0xcb field public static final int POWER_LOW = 201; // 0xc9 field @Deprecated public static final int ACCURACY_BLOCK = 102; // 0x66 field @Deprecated public static final int ACCURACY_CITY = 104; // 0x68 field @Deprecated public static final int ACCURACY_FINE = 100; // 0x64 field @Deprecated public static final int POWER_HIGH = 203; // 0xcb field @Deprecated public static final int POWER_LOW = 201; // 0xc9 field @Deprecated public static final int POWER_NONE = 200; // 0xc8 } Loading @@ -4205,7 +4204,6 @@ package android.location { method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_APP_OPS_STATS) public android.location.LocationRequest.Builder setHiddenFromAppOps(boolean); method @NonNull @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public android.location.LocationRequest.Builder setLocationSettingsIgnored(boolean); method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public android.location.LocationRequest.Builder setLowPower(boolean); method @NonNull public android.location.LocationRequest.Builder setQuality(int); method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public android.location.LocationRequest.Builder setWorkSource(@Nullable android.os.WorkSource); } Loading api/test-current.txt +5 −5 Original line number Diff line number Diff line Loading @@ -1777,11 +1777,11 @@ package android.location { method public boolean isHiddenFromAppOps(); method public boolean isLocationSettingsIgnored(); method public boolean isLowPower(); field public static final int ACCURACY_BLOCK = 102; // 0x66 field public static final int ACCURACY_CITY = 104; // 0x68 field public static final int ACCURACY_FINE = 100; // 0x64 field public static final int POWER_HIGH = 203; // 0xcb field public static final int POWER_LOW = 201; // 0xc9 field @Deprecated public static final int ACCURACY_BLOCK = 102; // 0x66 field @Deprecated public static final int ACCURACY_CITY = 104; // 0x68 field @Deprecated public static final int ACCURACY_FINE = 100; // 0x64 field @Deprecated public static final int POWER_HIGH = 203; // 0xcb field @Deprecated public static final int POWER_LOW = 201; // 0xc9 } public static final class LocationRequest.Builder { Loading location/java/android/location/LocationRequest.java +104 −85 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static java.lang.Math.min; import android.Manifest; import android.annotation.FloatRange; import android.annotation.IntDef; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; Loading @@ -38,6 +39,8 @@ import android.util.TimeUtils; import com.android.internal.util.Preconditions; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Objects; Loading Loading @@ -65,16 +68,41 @@ public final class LocationRequest implements Parcelable { */ public static final long PASSIVE_INTERVAL = Long.MAX_VALUE; /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef({QUALITY_LOW_POWER, QUALITY_BALANCED_POWER_ACCURACY, QUALITY_HIGH_ACCURACY}) public @interface Quality {} /** * A quality constant indicating a location provider may choose to satisfy this request by * providing very accurate locations at the expense of potentially increased power usage. */ public static final int QUALITY_HIGH_ACCURACY = 100; /** * A quality constant indicating a location provider may choose to satisfy this request by * equally balancing power and accuracy constraints. */ public static final int QUALITY_BALANCED_POWER_ACCURACY = 102; /** * A quality constant indicating a location provider may choose to satisfy this request by * providing less accurate locations in order to save power. */ public static final int QUALITY_LOW_POWER = 104; /** * Used with {@link #setQuality} to request the most accurate locations available. * * <p>This may be up to 1 meter accuracy, although this is implementation dependent. * * @hide * @deprecated Use {@link #QUALITY_HIGH_ACCURACY} instead. */ @Deprecated @SystemApi @TestApi public static final int ACCURACY_FINE = 100; public static final int ACCURACY_FINE = QUALITY_HIGH_ACCURACY; /** * Used with {@link #setQuality} to request "block" level accuracy. Loading @@ -84,10 +112,12 @@ public final class LocationRequest implements Parcelable { * such as this often consumes less power. * * @hide * @deprecated Use {@link #QUALITY_BALANCED_POWER_ACCURACY} instead. */ @Deprecated @SystemApi @TestApi public static final int ACCURACY_BLOCK = 102; public static final int ACCURACY_BLOCK = QUALITY_BALANCED_POWER_ACCURACY; /** * Used with {@link #setQuality} to request "city" level accuracy. Loading @@ -97,10 +127,12 @@ public final class LocationRequest implements Parcelable { * such as this often consumes less power. * * @hide * @deprecated Use {@link #QUALITY_LOW_POWER} instead. */ @Deprecated @SystemApi @TestApi public static final int ACCURACY_CITY = 104; public static final int ACCURACY_CITY = QUALITY_LOW_POWER; /** * Used with {@link #setQuality} to require no direct power impact (passive locations). Loading @@ -123,7 +155,9 @@ public final class LocationRequest implements Parcelable { * possible. * * @hide * @deprecated Use {@link #QUALITY_LOW_POWER} instead. */ @Deprecated @SystemApi @TestApi public static final int POWER_LOW = 201; Loading @@ -134,7 +168,9 @@ public final class LocationRequest implements Parcelable { * <p>This location request will allow high power location work. * * @hide * @deprecated Use {@link #QUALITY_HIGH_ACCURACY} instead. */ @Deprecated @SystemApi @TestApi public static final int POWER_HIGH = 203; Loading @@ -144,7 +180,7 @@ public final class LocationRequest implements Parcelable { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, publicAlternatives = "Use {@link " + "LocationManager} methods to provide the provider explicitly.") @Nullable private String mProvider; private int mQuality; private @Quality int mQuality; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, publicAlternatives = "Use {@link " + "LocationRequest} instead.") private long mInterval; Loading @@ -168,7 +204,7 @@ public final class LocationRequest implements Parcelable { public static LocationRequest create() { // 60 minutes is the default legacy interval return new LocationRequest.Builder(60 * 60 * 1000) .setQuality(POWER_LOW) .setQuality(QUALITY_LOW_POWER) .build(); } Loading Loading @@ -241,7 +277,7 @@ public final class LocationRequest implements Parcelable { private LocationRequest( @Nullable String provider, long intervalMillis, int quality, @Quality int quality, long expireAtRealtimeMillis, long durationMillis, int maxUpdates, Loading @@ -251,9 +287,6 @@ public final class LocationRequest implements Parcelable { boolean locationSettingsIgnored, boolean lowPower, WorkSource workSource) { Preconditions.checkArgument(intervalMillis != PASSIVE_INTERVAL || quality == POWER_NONE); Preconditions.checkArgument(minUpdateIntervalMillis <= intervalMillis); mProvider = provider; mInterval = intervalMillis; mQuality = quality; Loading Loading @@ -297,25 +330,40 @@ public final class LocationRequest implements Parcelable { @SystemApi @Deprecated public @NonNull LocationRequest setQuality(int quality) { mQuality = Builder.checkQuality(quality, true); switch (quality) { case POWER_HIGH: // fall through case ACCURACY_FINE: mQuality = QUALITY_HIGH_ACCURACY; break; case ACCURACY_BLOCK: mQuality = QUALITY_BALANCED_POWER_ACCURACY; break; case POWER_LOW: // fall through case ACCURACY_CITY: mQuality = QUALITY_LOW_POWER; break; case POWER_NONE: mInterval = PASSIVE_INTERVAL; break; default: throw new IllegalArgumentException("invalid quality: " + quality); } return this; } /** * Returns the quality of the location request. * Returns the quality hint for this location request. The quality hint informs the provider how * it should attempt to manage any accuracy vs power tradeoffs while attempting to satisfy this * location request. * * @return the quality of the location request * * @hide * @return the desired quality tradeoffs between accuracy and power */ @SystemApi public int getQuality() { if (mInterval == PASSIVE_INTERVAL) { return POWER_NONE; } else { public @Quality int getQuality() { return mQuality; } } /** * @hide Loading Loading @@ -749,97 +797,65 @@ public final class LocationRequest implements Parcelable { if (mProvider != null) { s.append(mProvider).append(" "); } if (mQuality != POWER_NONE && mQuality != ACCURACY_BLOCK) { s.append(qualityToString(mQuality)).append(" "); } if (mInterval != PASSIVE_INTERVAL) { s.append("@"); TimeUtils.formatDuration(mInterval, s); switch (mQuality) { case QUALITY_HIGH_ACCURACY: s.append(" HIGH_ACCURACY"); break; case QUALITY_BALANCED_POWER_ACCURACY: s.append(" BALANCED"); break; case QUALITY_LOW_POWER: s.append(" LOW_POWER"); break; } } else { s.append("PASSIVE"); } if (mExpireAtRealtimeMillis != Long.MAX_VALUE) { s.append(" expireAt=").append(TimeUtils.formatRealtime(mExpireAtRealtimeMillis)); s.append(", expireAt=").append(TimeUtils.formatRealtime(mExpireAtRealtimeMillis)); } if (mDurationMillis != Long.MAX_VALUE) { s.append(" duration="); s.append(", duration="); TimeUtils.formatDuration(mDurationMillis, s); } if (mMaxUpdates != Integer.MAX_VALUE) { s.append(" maxUpdates=").append(mMaxUpdates); s.append(", maxUpdates=").append(mMaxUpdates); } if (mMinUpdateIntervalMillis != IMPLICIT_MIN_UPDATE_INTERVAL && mMinUpdateIntervalMillis < mInterval) { s.append(" minUpdateInterval="); s.append(", minUpdateInterval="); TimeUtils.formatDuration(mMinUpdateIntervalMillis, s); } if (mMinUpdateDistanceMeters > 0.0) { s.append(" minUpdateDistance=").append(mMinUpdateDistanceMeters); s.append(", minUpdateDistance=").append(mMinUpdateDistanceMeters); } if (mLowPower) { s.append(" lowPower"); s.append(", lowPower"); } if (mHideFromAppOps) { s.append(" hiddenFromAppOps"); s.append(", hiddenFromAppOps"); } if (mLocationSettingsIgnored) { s.append(" locationSettingsIgnored"); s.append(", locationSettingsIgnored"); } if (mWorkSource != null) { s.append(" ").append(mWorkSource); if (mWorkSource != null && !mWorkSource.isEmpty()) { s.append(", ").append(mWorkSource); } s.append(']'); return s.toString(); } private static String qualityToString(int quality) { switch (quality) { case ACCURACY_FINE: return "ACCURACY_FINE"; case ACCURACY_BLOCK: return "ACCURACY_BLOCK"; case ACCURACY_CITY: return "ACCURACY_CITY"; case POWER_NONE: return "POWER_NONE"; case POWER_LOW: return "POWER_LOW"; case POWER_HIGH: return "POWER_HIGH"; default: return "???"; } } /** * A builder class for {@link LocationRequest}. */ public static final class Builder { private static int checkQuality(int quality, boolean allowDeprecated) { switch (quality) { case ACCURACY_FINE: // fall through case ACCURACY_BLOCK: // fall through case ACCURACY_CITY: // fall through case POWER_LOW: // fall through case POWER_HIGH: return quality; case POWER_NONE: if (allowDeprecated) { return quality; } // fall through default: throw new IllegalArgumentException("invalid quality: " + quality); } } private long mIntervalMillis; private int mQuality; private @Quality int mQuality; private long mDurationMillis; private int mMaxUpdates; private long mMinUpdateIntervalMillis; Loading @@ -857,7 +873,7 @@ public final class LocationRequest implements Parcelable { // gives us a range check setIntervalMillis(intervalMillis); mQuality = ACCURACY_BLOCK; mQuality = QUALITY_BALANCED_POWER_ACCURACY; mDurationMillis = Long.MAX_VALUE; mMaxUpdates = Integer.MAX_VALUE; mMinUpdateIntervalMillis = IMPLICIT_MIN_UPDATE_INTERVAL; Loading Loading @@ -885,9 +901,6 @@ public final class LocationRequest implements Parcelable { // handle edge cases that can only happen with location request that has been modified // by deprecated SystemApi methods if (mQuality == POWER_NONE) { mIntervalMillis = PASSIVE_INTERVAL; } if (mIntervalMillis == PASSIVE_INTERVAL && mMinUpdateIntervalMillis == IMPLICIT_MIN_UPDATE_INTERVAL) { // this is the legacy default minimum update interval, so if we're forced to Loading @@ -914,11 +927,17 @@ public final class LocationRequest implements Parcelable { } /** * @hide * Sets the request quality. The quality is a hint to providers on how they should weigh * power vs accuracy tradeoffs. High accuracy locations may cost more power to produce, and * lower accuracy locations may cost less power to produce. Defaults to * {@link #QUALITY_BALANCED_POWER_ACCURACY}. */ @SystemApi public @NonNull Builder setQuality(int quality) { mQuality = checkQuality(quality, false); public @NonNull Builder setQuality(@Quality int quality) { Preconditions.checkArgument( quality == QUALITY_LOW_POWER || quality == QUALITY_BALANCED_POWER_ACCURACY || quality == QUALITY_HIGH_ACCURACY, "quality must be a defined QUALITY constant, not " + quality); mQuality = quality; return this; } Loading Loading @@ -1102,7 +1121,7 @@ public final class LocationRequest implements Parcelable { return new LocationRequest( null, mIntervalMillis, mIntervalMillis != PASSIVE_INTERVAL ? mQuality : POWER_NONE, mQuality, Long.MAX_VALUE, mDurationMillis, mMaxUpdates, Loading Loading
apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java +1 −1 Original line number Diff line number Diff line Loading @@ -2179,7 +2179,7 @@ public class DeviceIdleController extends SystemService if (getContext().getResources().getBoolean( com.android.internal.R.bool.config_autoPowerModePrefetchLocation)) { mLocationRequest = new LocationRequest.Builder(/*intervalMillis=*/ 0) .setQuality(LocationRequest.ACCURACY_FINE) .setQuality(LocationRequest.QUALITY_HIGH_ACCURACY) .setMaxUpdates(1) .build(); } Loading
api/current.txt +5 −0 Original line number Diff line number Diff line Loading @@ -24099,9 +24099,13 @@ package android.location { method @IntRange(from=1, to=java.lang.Integer.MAX_VALUE) public int getMaxUpdates(); method @FloatRange(from=0, to=java.lang.Float.MAX_VALUE) public float getMinUpdateDistanceMeters(); method @IntRange(from=0) public long getMinUpdateIntervalMillis(); method public int getQuality(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.location.LocationRequest> CREATOR; field public static final long PASSIVE_INTERVAL = 9223372036854775807L; // 0x7fffffffffffffffL field public static final int QUALITY_BALANCED_POWER_ACCURACY = 102; // 0x66 field public static final int QUALITY_HIGH_ACCURACY = 100; // 0x64 field public static final int QUALITY_LOW_POWER = 104; // 0x68 } public static final class LocationRequest.Builder { Loading @@ -24114,6 +24118,7 @@ package android.location { method @NonNull public android.location.LocationRequest.Builder setMaxUpdates(@IntRange(from=1, to=java.lang.Integer.MAX_VALUE) int); method @NonNull public android.location.LocationRequest.Builder setMinUpdateDistanceMeters(@FloatRange(from=0, to=java.lang.Float.MAX_VALUE) float); method @NonNull public android.location.LocationRequest.Builder setMinUpdateIntervalMillis(@IntRange(from=0) long); method @NonNull public android.location.LocationRequest.Builder setQuality(int); } public interface OnNmeaMessageListener {
api/system-current.txt +5 −7 Original line number Diff line number Diff line Loading @@ -4174,7 +4174,6 @@ package android.location { method @Deprecated public long getInterval(); method @Deprecated public int getNumUpdates(); method @Deprecated @NonNull public String getProvider(); method public int getQuality(); method @Deprecated public float getSmallestDisplacement(); method @NonNull public android.os.WorkSource getWorkSource(); method public boolean isHiddenFromAppOps(); Loading @@ -4193,11 +4192,11 @@ package android.location { method @Deprecated @NonNull public android.location.LocationRequest setQuality(int); method @Deprecated @NonNull public android.location.LocationRequest setSmallestDisplacement(float); method @Deprecated public void setWorkSource(@Nullable android.os.WorkSource); field public static final int ACCURACY_BLOCK = 102; // 0x66 field public static final int ACCURACY_CITY = 104; // 0x68 field public static final int ACCURACY_FINE = 100; // 0x64 field public static final int POWER_HIGH = 203; // 0xcb field public static final int POWER_LOW = 201; // 0xc9 field @Deprecated public static final int ACCURACY_BLOCK = 102; // 0x66 field @Deprecated public static final int ACCURACY_CITY = 104; // 0x68 field @Deprecated public static final int ACCURACY_FINE = 100; // 0x64 field @Deprecated public static final int POWER_HIGH = 203; // 0xcb field @Deprecated public static final int POWER_LOW = 201; // 0xc9 field @Deprecated public static final int POWER_NONE = 200; // 0xc8 } Loading @@ -4205,7 +4204,6 @@ package android.location { method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_APP_OPS_STATS) public android.location.LocationRequest.Builder setHiddenFromAppOps(boolean); method @NonNull @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public android.location.LocationRequest.Builder setLocationSettingsIgnored(boolean); method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public android.location.LocationRequest.Builder setLowPower(boolean); method @NonNull public android.location.LocationRequest.Builder setQuality(int); method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public android.location.LocationRequest.Builder setWorkSource(@Nullable android.os.WorkSource); } Loading
api/test-current.txt +5 −5 Original line number Diff line number Diff line Loading @@ -1777,11 +1777,11 @@ package android.location { method public boolean isHiddenFromAppOps(); method public boolean isLocationSettingsIgnored(); method public boolean isLowPower(); field public static final int ACCURACY_BLOCK = 102; // 0x66 field public static final int ACCURACY_CITY = 104; // 0x68 field public static final int ACCURACY_FINE = 100; // 0x64 field public static final int POWER_HIGH = 203; // 0xcb field public static final int POWER_LOW = 201; // 0xc9 field @Deprecated public static final int ACCURACY_BLOCK = 102; // 0x66 field @Deprecated public static final int ACCURACY_CITY = 104; // 0x68 field @Deprecated public static final int ACCURACY_FINE = 100; // 0x64 field @Deprecated public static final int POWER_HIGH = 203; // 0xcb field @Deprecated public static final int POWER_LOW = 201; // 0xc9 } public static final class LocationRequest.Builder { Loading
location/java/android/location/LocationRequest.java +104 −85 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static java.lang.Math.min; import android.Manifest; import android.annotation.FloatRange; import android.annotation.IntDef; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; Loading @@ -38,6 +39,8 @@ import android.util.TimeUtils; import com.android.internal.util.Preconditions; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Objects; Loading Loading @@ -65,16 +68,41 @@ public final class LocationRequest implements Parcelable { */ public static final long PASSIVE_INTERVAL = Long.MAX_VALUE; /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef({QUALITY_LOW_POWER, QUALITY_BALANCED_POWER_ACCURACY, QUALITY_HIGH_ACCURACY}) public @interface Quality {} /** * A quality constant indicating a location provider may choose to satisfy this request by * providing very accurate locations at the expense of potentially increased power usage. */ public static final int QUALITY_HIGH_ACCURACY = 100; /** * A quality constant indicating a location provider may choose to satisfy this request by * equally balancing power and accuracy constraints. */ public static final int QUALITY_BALANCED_POWER_ACCURACY = 102; /** * A quality constant indicating a location provider may choose to satisfy this request by * providing less accurate locations in order to save power. */ public static final int QUALITY_LOW_POWER = 104; /** * Used with {@link #setQuality} to request the most accurate locations available. * * <p>This may be up to 1 meter accuracy, although this is implementation dependent. * * @hide * @deprecated Use {@link #QUALITY_HIGH_ACCURACY} instead. */ @Deprecated @SystemApi @TestApi public static final int ACCURACY_FINE = 100; public static final int ACCURACY_FINE = QUALITY_HIGH_ACCURACY; /** * Used with {@link #setQuality} to request "block" level accuracy. Loading @@ -84,10 +112,12 @@ public final class LocationRequest implements Parcelable { * such as this often consumes less power. * * @hide * @deprecated Use {@link #QUALITY_BALANCED_POWER_ACCURACY} instead. */ @Deprecated @SystemApi @TestApi public static final int ACCURACY_BLOCK = 102; public static final int ACCURACY_BLOCK = QUALITY_BALANCED_POWER_ACCURACY; /** * Used with {@link #setQuality} to request "city" level accuracy. Loading @@ -97,10 +127,12 @@ public final class LocationRequest implements Parcelable { * such as this often consumes less power. * * @hide * @deprecated Use {@link #QUALITY_LOW_POWER} instead. */ @Deprecated @SystemApi @TestApi public static final int ACCURACY_CITY = 104; public static final int ACCURACY_CITY = QUALITY_LOW_POWER; /** * Used with {@link #setQuality} to require no direct power impact (passive locations). Loading @@ -123,7 +155,9 @@ public final class LocationRequest implements Parcelable { * possible. * * @hide * @deprecated Use {@link #QUALITY_LOW_POWER} instead. */ @Deprecated @SystemApi @TestApi public static final int POWER_LOW = 201; Loading @@ -134,7 +168,9 @@ public final class LocationRequest implements Parcelable { * <p>This location request will allow high power location work. * * @hide * @deprecated Use {@link #QUALITY_HIGH_ACCURACY} instead. */ @Deprecated @SystemApi @TestApi public static final int POWER_HIGH = 203; Loading @@ -144,7 +180,7 @@ public final class LocationRequest implements Parcelable { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, publicAlternatives = "Use {@link " + "LocationManager} methods to provide the provider explicitly.") @Nullable private String mProvider; private int mQuality; private @Quality int mQuality; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, publicAlternatives = "Use {@link " + "LocationRequest} instead.") private long mInterval; Loading @@ -168,7 +204,7 @@ public final class LocationRequest implements Parcelable { public static LocationRequest create() { // 60 minutes is the default legacy interval return new LocationRequest.Builder(60 * 60 * 1000) .setQuality(POWER_LOW) .setQuality(QUALITY_LOW_POWER) .build(); } Loading Loading @@ -241,7 +277,7 @@ public final class LocationRequest implements Parcelable { private LocationRequest( @Nullable String provider, long intervalMillis, int quality, @Quality int quality, long expireAtRealtimeMillis, long durationMillis, int maxUpdates, Loading @@ -251,9 +287,6 @@ public final class LocationRequest implements Parcelable { boolean locationSettingsIgnored, boolean lowPower, WorkSource workSource) { Preconditions.checkArgument(intervalMillis != PASSIVE_INTERVAL || quality == POWER_NONE); Preconditions.checkArgument(minUpdateIntervalMillis <= intervalMillis); mProvider = provider; mInterval = intervalMillis; mQuality = quality; Loading Loading @@ -297,25 +330,40 @@ public final class LocationRequest implements Parcelable { @SystemApi @Deprecated public @NonNull LocationRequest setQuality(int quality) { mQuality = Builder.checkQuality(quality, true); switch (quality) { case POWER_HIGH: // fall through case ACCURACY_FINE: mQuality = QUALITY_HIGH_ACCURACY; break; case ACCURACY_BLOCK: mQuality = QUALITY_BALANCED_POWER_ACCURACY; break; case POWER_LOW: // fall through case ACCURACY_CITY: mQuality = QUALITY_LOW_POWER; break; case POWER_NONE: mInterval = PASSIVE_INTERVAL; break; default: throw new IllegalArgumentException("invalid quality: " + quality); } return this; } /** * Returns the quality of the location request. * Returns the quality hint for this location request. The quality hint informs the provider how * it should attempt to manage any accuracy vs power tradeoffs while attempting to satisfy this * location request. * * @return the quality of the location request * * @hide * @return the desired quality tradeoffs between accuracy and power */ @SystemApi public int getQuality() { if (mInterval == PASSIVE_INTERVAL) { return POWER_NONE; } else { public @Quality int getQuality() { return mQuality; } } /** * @hide Loading Loading @@ -749,97 +797,65 @@ public final class LocationRequest implements Parcelable { if (mProvider != null) { s.append(mProvider).append(" "); } if (mQuality != POWER_NONE && mQuality != ACCURACY_BLOCK) { s.append(qualityToString(mQuality)).append(" "); } if (mInterval != PASSIVE_INTERVAL) { s.append("@"); TimeUtils.formatDuration(mInterval, s); switch (mQuality) { case QUALITY_HIGH_ACCURACY: s.append(" HIGH_ACCURACY"); break; case QUALITY_BALANCED_POWER_ACCURACY: s.append(" BALANCED"); break; case QUALITY_LOW_POWER: s.append(" LOW_POWER"); break; } } else { s.append("PASSIVE"); } if (mExpireAtRealtimeMillis != Long.MAX_VALUE) { s.append(" expireAt=").append(TimeUtils.formatRealtime(mExpireAtRealtimeMillis)); s.append(", expireAt=").append(TimeUtils.formatRealtime(mExpireAtRealtimeMillis)); } if (mDurationMillis != Long.MAX_VALUE) { s.append(" duration="); s.append(", duration="); TimeUtils.formatDuration(mDurationMillis, s); } if (mMaxUpdates != Integer.MAX_VALUE) { s.append(" maxUpdates=").append(mMaxUpdates); s.append(", maxUpdates=").append(mMaxUpdates); } if (mMinUpdateIntervalMillis != IMPLICIT_MIN_UPDATE_INTERVAL && mMinUpdateIntervalMillis < mInterval) { s.append(" minUpdateInterval="); s.append(", minUpdateInterval="); TimeUtils.formatDuration(mMinUpdateIntervalMillis, s); } if (mMinUpdateDistanceMeters > 0.0) { s.append(" minUpdateDistance=").append(mMinUpdateDistanceMeters); s.append(", minUpdateDistance=").append(mMinUpdateDistanceMeters); } if (mLowPower) { s.append(" lowPower"); s.append(", lowPower"); } if (mHideFromAppOps) { s.append(" hiddenFromAppOps"); s.append(", hiddenFromAppOps"); } if (mLocationSettingsIgnored) { s.append(" locationSettingsIgnored"); s.append(", locationSettingsIgnored"); } if (mWorkSource != null) { s.append(" ").append(mWorkSource); if (mWorkSource != null && !mWorkSource.isEmpty()) { s.append(", ").append(mWorkSource); } s.append(']'); return s.toString(); } private static String qualityToString(int quality) { switch (quality) { case ACCURACY_FINE: return "ACCURACY_FINE"; case ACCURACY_BLOCK: return "ACCURACY_BLOCK"; case ACCURACY_CITY: return "ACCURACY_CITY"; case POWER_NONE: return "POWER_NONE"; case POWER_LOW: return "POWER_LOW"; case POWER_HIGH: return "POWER_HIGH"; default: return "???"; } } /** * A builder class for {@link LocationRequest}. */ public static final class Builder { private static int checkQuality(int quality, boolean allowDeprecated) { switch (quality) { case ACCURACY_FINE: // fall through case ACCURACY_BLOCK: // fall through case ACCURACY_CITY: // fall through case POWER_LOW: // fall through case POWER_HIGH: return quality; case POWER_NONE: if (allowDeprecated) { return quality; } // fall through default: throw new IllegalArgumentException("invalid quality: " + quality); } } private long mIntervalMillis; private int mQuality; private @Quality int mQuality; private long mDurationMillis; private int mMaxUpdates; private long mMinUpdateIntervalMillis; Loading @@ -857,7 +873,7 @@ public final class LocationRequest implements Parcelable { // gives us a range check setIntervalMillis(intervalMillis); mQuality = ACCURACY_BLOCK; mQuality = QUALITY_BALANCED_POWER_ACCURACY; mDurationMillis = Long.MAX_VALUE; mMaxUpdates = Integer.MAX_VALUE; mMinUpdateIntervalMillis = IMPLICIT_MIN_UPDATE_INTERVAL; Loading Loading @@ -885,9 +901,6 @@ public final class LocationRequest implements Parcelable { // handle edge cases that can only happen with location request that has been modified // by deprecated SystemApi methods if (mQuality == POWER_NONE) { mIntervalMillis = PASSIVE_INTERVAL; } if (mIntervalMillis == PASSIVE_INTERVAL && mMinUpdateIntervalMillis == IMPLICIT_MIN_UPDATE_INTERVAL) { // this is the legacy default minimum update interval, so if we're forced to Loading @@ -914,11 +927,17 @@ public final class LocationRequest implements Parcelable { } /** * @hide * Sets the request quality. The quality is a hint to providers on how they should weigh * power vs accuracy tradeoffs. High accuracy locations may cost more power to produce, and * lower accuracy locations may cost less power to produce. Defaults to * {@link #QUALITY_BALANCED_POWER_ACCURACY}. */ @SystemApi public @NonNull Builder setQuality(int quality) { mQuality = checkQuality(quality, false); public @NonNull Builder setQuality(@Quality int quality) { Preconditions.checkArgument( quality == QUALITY_LOW_POWER || quality == QUALITY_BALANCED_POWER_ACCURACY || quality == QUALITY_HIGH_ACCURACY, "quality must be a defined QUALITY constant, not " + quality); mQuality = quality; return this; } Loading Loading @@ -1102,7 +1121,7 @@ public final class LocationRequest implements Parcelable { return new LocationRequest( null, mIntervalMillis, mIntervalMillis != PASSIVE_INTERVAL ? mQuality : POWER_NONE, mQuality, Long.MAX_VALUE, mDurationMillis, mMaxUpdates, Loading