summaryrefslogtreecommitdiff
path: root/location/java
diff options
context:
space:
mode:
author Soonil Nagarkar <sooniln@google.com> 2020-07-15 17:37:36 -0700
committer Soonil Nagarkar <sooniln@google.com> 2020-08-04 11:09:55 -0700
commitd6158258e64e1548d33bf4c2085c4458ba7fcd53 (patch)
treeba44831e64070321e4576a0b8e658c0b58963f83 /location/java
parentde5181ae1ebdddb0ea936c681f56e46c3643b71a (diff)
Extract LocationProviderManager
This extracts LocationProviderManager as a completely stand-alone class, substantially reducing the complexity in LMS, and in LocationProviderManager. Core AOSP location code is now unit testable for the first time, and we begin adding unit tests. Test: extensive manual tests + presubmits Change-Id: I0fb17ddbf91bdd26ed7855110026b3dd09612a5c
Diffstat (limited to 'location/java')
-rw-r--r--location/java/android/location/LocationManagerInternal.java36
-rw-r--r--location/java/android/location/LocationRequest.java56
2 files changed, 69 insertions, 23 deletions
diff --git a/location/java/android/location/LocationManagerInternal.java b/location/java/android/location/LocationManagerInternal.java
index 542737b479e2..ef68814bce84 100644
--- a/location/java/android/location/LocationManagerInternal.java
+++ b/location/java/android/location/LocationManagerInternal.java
@@ -21,6 +21,8 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.location.util.identity.CallerIdentity;
+import java.util.List;
+
/**
* Location manager local system service interface.
*
@@ -29,6 +31,16 @@ import android.location.util.identity.CallerIdentity;
public abstract class LocationManagerInternal {
/**
+ * Listener for changes in provider enabled state.
+ */
+ public interface ProviderEnabledListener {
+ /**
+ * Called when the provider enabled state changes for a particular user.
+ */
+ void onProviderEnabledChanged(String provider, int userId, boolean enabled);
+ }
+
+ /**
* Returns true if the given provider is enabled for the given user.
*
* @param provider A location provider as listed by {@link LocationManager#getAllProviders()}
@@ -38,6 +50,24 @@ public abstract class LocationManagerInternal {
public abstract boolean isProviderEnabledForUser(@NonNull String provider, int userId);
/**
+ * Adds a provider enabled listener. The given provider must exist.
+ *
+ * @param provider The provider to listen for changes
+ * @param listener The listener
+ */
+ public abstract void addProviderEnabledListener(String provider,
+ ProviderEnabledListener listener);
+
+ /**
+ * Removes a provider enabled listener. The given provider must exist.
+ *
+ * @param provider The provider to listen for changes
+ * @param listener The listener
+ */
+ public abstract void removeProviderEnabledListener(String provider,
+ ProviderEnabledListener listener);
+
+ /**
* Returns true if the given identity is a location provider.
*
* @param provider The provider to check, or null to check every provider
@@ -52,4 +82,10 @@ public abstract class LocationManagerInternal {
*/
// TODO: there is no reason for this to exist as part of any API. move all the logic into gnss
public abstract void sendNiResponse(int notifId, int userResponse);
+
+ /**
+ * Should only be used by GNSS code.
+ */
+ // TODO: there is no reason for this to exist as part of any API. create a real batching API
+ public abstract void reportGnssBatchLocations(List<Location> locations);
}
diff --git a/location/java/android/location/LocationRequest.java b/location/java/android/location/LocationRequest.java
index bb36c2a1fc39..280bd058ef0f 100644
--- a/location/java/android/location/LocationRequest.java
+++ b/location/java/android/location/LocationRequest.java
@@ -32,6 +32,8 @@ import android.util.TimeUtils;
import com.android.internal.util.Preconditions;
+import java.util.Objects;
+
/**
* A data object that contains quality of service parameters for requests
@@ -150,8 +152,6 @@ public final class LocationRequest implements Parcelable {
@UnsupportedAppUsage
private String mProvider;
- // if true, client requests coarse location, if false, client requests fine location
- private boolean mCoarseLocation;
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
private int mQuality;
@UnsupportedAppUsage
@@ -257,7 +257,6 @@ public final class LocationRequest implements Parcelable {
public LocationRequest() {
this(
/* provider= */ LocationManager.FUSED_PROVIDER,
- /* coarseLocation= */ false,
/* quality= */ POWER_LOW,
/* interval= */ DEFAULT_INTERVAL_MS,
/* fastestInterval= */ (long) (DEFAULT_INTERVAL_MS / FASTEST_INTERVAL_FACTOR),
@@ -276,7 +275,6 @@ public final class LocationRequest implements Parcelable {
public LocationRequest(LocationRequest src) {
this(
src.mProvider,
- src.mCoarseLocation,
src.mQuality,
src.mInterval,
src.mFastestInterval,
@@ -293,7 +291,6 @@ public final class LocationRequest implements Parcelable {
private LocationRequest(
@NonNull String provider,
- boolean coarseLocation,
int quality,
long intervalMs,
long fastestIntervalMs,
@@ -310,7 +307,6 @@ public final class LocationRequest implements Parcelable {
checkQuality(quality);
mProvider = provider;
- mCoarseLocation = coarseLocation;
mQuality = quality;
mInterval = intervalMs;
mFastestInterval = fastestIntervalMs;
@@ -327,20 +323,6 @@ public final class LocationRequest implements Parcelable {
}
/**
- * @hide
- */
- public boolean isCoarse() {
- return mCoarseLocation;
- }
-
- /**
- * @hide
- */
- public void setCoarse(boolean coarse) {
- mCoarseLocation = coarse;
- }
-
- /**
* Set the quality of the request.
*
* <p>Use with a accuracy constant such as {@link #ACCURACY_FINE}, or a power
@@ -720,7 +702,6 @@ public final class LocationRequest implements Parcelable {
public LocationRequest createFromParcel(Parcel in) {
return new LocationRequest(
/* provider= */ in.readString(),
- /* coarseLocation= */ in.readBoolean(),
/* quality= */ in.readInt(),
/* interval= */ in.readLong(),
/* fastestInterval= */ in.readLong(),
@@ -749,7 +730,6 @@ public final class LocationRequest implements Parcelable {
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeString(mProvider);
- parcel.writeBoolean(mCoarseLocation);
parcel.writeInt(mQuality);
parcel.writeLong(mInterval);
parcel.writeLong(mFastestInterval);
@@ -784,6 +764,36 @@ public final class LocationRequest implements Parcelable {
}
}
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ LocationRequest that = (LocationRequest) o;
+ return mQuality == that.mQuality
+ && mInterval == that.mInterval
+ && mFastestInterval == that.mFastestInterval
+ && mExplicitFastestInterval == that.mExplicitFastestInterval
+ && mExpireAt == that.mExpireAt
+ && mExpireIn == that.mExpireIn
+ && mNumUpdates == that.mNumUpdates
+ && Float.compare(that.mSmallestDisplacement, mSmallestDisplacement) == 0
+ && mHideFromAppOps == that.mHideFromAppOps
+ && mLocationSettingsIgnored == that.mLocationSettingsIgnored
+ && mLowPowerMode == that.mLowPowerMode
+ && mProvider.equals(that.mProvider)
+ && Objects.equals(mWorkSource, that.mWorkSource);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mProvider, mInterval, mWorkSource);
+ }
+
@NonNull
@Override
public String toString() {
@@ -794,7 +804,7 @@ public final class LocationRequest implements Parcelable {
if (mQuality != POWER_NONE) {
s.append(" interval=");
TimeUtils.formatDuration(mInterval, s);
- if (mExplicitFastestInterval) {
+ if (mExplicitFastestInterval && mFastestInterval != mInterval) {
s.append(" fastestInterval=");
TimeUtils.formatDuration(mFastestInterval, s);
}