summaryrefslogtreecommitdiff
path: root/location/java
diff options
context:
space:
mode:
author Soonil Nagarkar <sooniln@google.com> 2018-10-24 17:54:54 -0700
committer Soonil Nagarkar <sooniln@google.com> 2018-12-10 10:29:17 -0800
commit1575a04e7bc830a8fc15de34dea6362b10c563eb (patch)
treedb5be622ac5eaa5dcc3eb681258b48ec70d85ca9 /location/java
parent4c47901848ccc14b0e4ced7f971a163e2c734d8a (diff)
Refactor how location providers are managed
Put enabled/disabled state under location provider control, and use it to represent whether a location provider may be used, not whether the user has enabled or disabled a location provider. Bug: 118885128 Test: manually Change-Id: I1209c49c13ca8995b223f383ad332322fffc7a96
Diffstat (limited to 'location/java')
-rw-r--r--location/java/android/location/ILocationManager.aidl8
-rw-r--r--location/java/android/location/LocationManager.java20
-rw-r--r--location/java/com/android/internal/location/ILocationProvider.aidl21
-rw-r--r--location/java/com/android/internal/location/ILocationProviderManager.aidl34
-rw-r--r--location/java/com/android/internal/location/ProviderRequest.java13
5 files changed, 62 insertions, 34 deletions
diff --git a/location/java/android/location/ILocationManager.aidl b/location/java/android/location/ILocationManager.aidl
index ae87998a1615..32c752064a69 100644
--- a/location/java/android/location/ILocationManager.aidl
+++ b/location/java/android/location/ILocationManager.aidl
@@ -96,9 +96,7 @@ interface ILocationManager
void addTestProvider(String name, in ProviderProperties properties, String opPackageName);
void removeTestProvider(String provider, String opPackageName);
void setTestProviderLocation(String provider, in Location loc, String opPackageName);
- void clearTestProviderLocation(String provider, String opPackageName);
void setTestProviderEnabled(String provider, boolean enabled, String opPackageName);
- void clearTestProviderEnabled(String provider, String opPackageName);
// --- deprecated ---
void setTestProviderStatus(String provider, int status, in Bundle extras, long updateTime,
@@ -108,12 +106,8 @@ interface ILocationManager
// --- internal ---
- // Used by location providers to tell the location manager when it has a new location.
- // Passive is true if the location is coming from the passive provider, in which case
- // it need not be shared with other providers.
+ // --- deprecated ---
void reportLocation(in Location location, boolean passive);
-
- // Used when a (initially Gnss) Location batch arrives
void reportLocationBatch(in List<Location> locations);
// for reporting callback completion
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index 3bf98b352b40..334170e5ce03 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -1537,14 +1537,11 @@ public class LocationManager {
* mock location app op} is not set to {@link android.app.AppOpsManager#MODE_ALLOWED
* allowed} for your app.
* @throws IllegalArgumentException if no provider with the given name exists
+ *
+ * @deprecated This function has always been a no-op, and may be removed in the future.
*/
- public void clearTestProviderLocation(String provider) {
- try {
- mService.clearTestProviderLocation(provider, mContext.getOpPackageName());
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- }
+ @Deprecated
+ public void clearTestProviderLocation(String provider) {}
/**
* Sets a mock enabled value for the given provider. This value will be used in place
@@ -1575,13 +1572,12 @@ public class LocationManager {
* mock location app op} is not set to {@link android.app.AppOpsManager#MODE_ALLOWED
* allowed} for your app.
* @throws IllegalArgumentException if no provider with the given name exists
+ *
+ * @deprecated Use {@link #setTestProviderEnabled(String, boolean)} instead.
*/
+ @Deprecated
public void clearTestProviderEnabled(String provider) {
- try {
- mService.clearTestProviderEnabled(provider, mContext.getOpPackageName());
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
+ setTestProviderEnabled(provider, true);
}
/**
diff --git a/location/java/com/android/internal/location/ILocationProvider.aidl b/location/java/com/android/internal/location/ILocationProvider.aidl
index 39c2d92bf278..71b54fb65ae5 100644
--- a/location/java/com/android/internal/location/ILocationProvider.aidl
+++ b/location/java/com/android/internal/location/ILocationProvider.aidl
@@ -16,29 +16,26 @@
package com.android.internal.location;
-import android.location.Location;
-import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.WorkSource;
-import com.android.internal.location.ProviderProperties;
+import com.android.internal.location.ILocationProviderManager;
import com.android.internal.location.ProviderRequest;
/**
- * Binder interface for services that implement location providers.
- * <p>Use {@link LocationProviderBase} as a helper to implement this
- * interface.
+ * Binder interface for services that implement location providers. Do not implement this directly,
+ * extend {@link LocationProviderBase} instead.
* @hide
*/
interface ILocationProvider {
- void enable();
- void disable();
- void setRequest(in ProviderRequest request, in WorkSource ws);
+ oneway void setLocationProviderManager(in ILocationProviderManager manager);
- // --- deprecated (but still supported) ---
- ProviderProperties getProperties();
+ oneway void setRequest(in ProviderRequest request, in WorkSource ws);
+
+ oneway void sendExtraCommand(String command, in Bundle extras);
+
+ // --- deprecated and will be removed the future ---
int getStatus(out Bundle extras);
long getStatusUpdateTime();
- boolean sendExtraCommand(String command, inout Bundle extras);
}
diff --git a/location/java/com/android/internal/location/ILocationProviderManager.aidl b/location/java/com/android/internal/location/ILocationProviderManager.aidl
new file mode 100644
index 000000000000..b1b8f0c7c3f7
--- /dev/null
+++ b/location/java/com/android/internal/location/ILocationProviderManager.aidl
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2009 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 com.android.internal.location;
+
+import android.location.Location;
+
+import com.android.internal.location.ProviderProperties;
+
+/**
+ * Binder interface for manager of all location providers.
+ * @hide
+ */
+interface ILocationProviderManager {
+
+ void onSetEnabled(boolean enabled);
+
+ void onSetProperties(in ProviderProperties properties);
+
+ void onReportLocation(in Location location);
+}
diff --git a/location/java/com/android/internal/location/ProviderRequest.java b/location/java/com/android/internal/location/ProviderRequest.java
index 88919f628638..a45c20d9d09d 100644
--- a/location/java/com/android/internal/location/ProviderRequest.java
+++ b/location/java/com/android/internal/location/ProviderRequest.java
@@ -16,15 +16,15 @@
package com.android.internal.location;
-import java.util.ArrayList;
-import java.util.List;
-
import android.annotation.UnsupportedAppUsage;
import android.location.LocationRequest;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.TimeUtils;
+import java.util.ArrayList;
+import java.util.List;
+
/** @hide */
public final class ProviderRequest implements Parcelable {
/** Location reporting is requested (true) */
@@ -36,6 +36,13 @@ public final class ProviderRequest implements Parcelable {
public long interval = Long.MAX_VALUE;
/**
+ * When this flag is true, providers should ignore all location settings, user consents, power
+ * restrictions or any other restricting factors and always satisfy this request to the best of
+ * their ability. This flag should only be used in event of an emergency.
+ */
+ public boolean forceLocation = false;
+
+ /**
* Whether provider shall make stronger than normal tradeoffs to substantially restrict power
* use.
*/