summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authormdooley <mdooley@google.com>2017-09-28 15:26:01 -0700
committerEric Erfanian <erfanian@google.com>2017-10-02 14:58:07 -0700
commit6038c5d6d86087bed87a9475d5f7814195139b27 (patch)
tree5bf9fc4e7f3bf6732adf9e9d8cdccf14d21b8809 /java
parent90b570e4f427f14fd17d53561c209d5eb1ac1936 (diff)
Updating emergency location code to use non-deprecated location apis
Also tuning the location request accuracy and minimum update interval. i noticed during testing that we often get locations with uncertainties greater than our threshold (100 meters), which we ignore. That combined with the long update interval can result in not showing a location for a long time. Bug: 67046739 Test: manual PiperOrigin-RevId: 170407138 Change-Id: I1a84088f9fa09b474b07e375b92af25852dd6f46
Diffstat (limited to 'java')
-rw-r--r--java/com/android/incallui/calllocation/impl/LocationHelper.java85
1 files changed, 33 insertions, 52 deletions
diff --git a/java/com/android/incallui/calllocation/impl/LocationHelper.java b/java/com/android/incallui/calllocation/impl/LocationHelper.java
index 99a759bbb..48baa020a 100644
--- a/java/com/android/incallui/calllocation/impl/LocationHelper.java
+++ b/java/com/android/incallui/calllocation/impl/LocationHelper.java
@@ -20,7 +20,6 @@ import android.content.Context;
import android.location.Location;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
-import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.IntDef;
import android.support.annotation.MainThread;
@@ -28,12 +27,7 @@ import android.support.v4.os.UserManagerCompat;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.util.PermissionsUtil;
-import com.google.android.gms.common.ConnectionResult;
-import com.google.android.gms.common.api.GoogleApiClient;
-import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
-import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
-import com.google.android.gms.common.api.ResultCallback;
-import com.google.android.gms.common.api.Status;
+import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
@@ -45,7 +39,7 @@ import java.util.List;
/** Uses the Fused location service to get location and pass updates on to listeners. */
public class LocationHelper {
- private static final int MIN_UPDATE_INTERVAL_MS = 30 * 1000;
+ private static final int MIN_UPDATE_INTERVAL_MS = 20 * 1000;
private static final int LAST_UPDATE_THRESHOLD_MS = 60 * 1000;
private static final int LOCATION_ACCURACY_THRESHOLD_METERS = 100;
@@ -143,10 +137,7 @@ public class LocationHelper {
Assert.isMainThread();
LogUtil.enterBlock("LocationHelper.close");
listeners.clear();
-
- if (locationHelperInternal != null) {
- locationHelperInternal.close();
- }
+ locationHelperInternal.close();
}
@MainThread
@@ -163,67 +154,57 @@ public class LocationHelper {
* This class contains all the asynchronous callbacks. It only posts location changes back to the
* outer class on the main thread.
*/
- private class LocationHelperInternal
- implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener {
+ private class LocationHelperInternal implements LocationListener {
- private final GoogleApiClient apiClient;
+ private final FusedLocationProviderClient locationClient;
private final ConnectivityManager connectivityManager;
private final Handler mainThreadHandler = new Handler();
@MainThread
LocationHelperInternal(Context context) {
Assert.isMainThread();
- apiClient =
- new GoogleApiClient.Builder(context)
- .addApi(LocationServices.API)
- .addConnectionCallbacks(this)
- .addOnConnectionFailedListener(this)
- .build();
-
- LogUtil.i("LocationHelperInternal", "Connecting to location service...");
- apiClient.connect();
-
+ locationClient = LocationServices.getFusedLocationProviderClient(context);
connectivityManager =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ requestUpdates();
+ getLocation();
}
void close() {
- if (apiClient.isConnected()) {
- LogUtil.i("LocationHelperInternal", "disconnecting");
- LocationServices.FusedLocationApi.removeLocationUpdates(apiClient, this);
- apiClient.disconnect();
- }
+ LogUtil.enterBlock("LocationHelperInternal.close");
+ locationClient.removeLocationUpdates(this);
}
- @Override
- public void onConnected(Bundle bundle) {
- LogUtil.enterBlock("LocationHelperInternal.onConnected");
+ private void requestUpdates() {
+ LogUtil.enterBlock("LocationHelperInternal.requestUpdates");
+
LocationRequest locationRequest =
LocationRequest.create()
- .setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY)
+ .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(MIN_UPDATE_INTERVAL_MS)
.setFastestInterval(MIN_UPDATE_INTERVAL_MS);
- LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, locationRequest, this)
- .setResultCallback(
- new ResultCallback<Status>() {
- @Override
- public void onResult(Status status) {
- if (status.getStatus().isSuccess()) {
- onLocationChanged(LocationServices.FusedLocationApi.getLastLocation(apiClient));
- }
- }
- });
+ locationClient
+ .requestLocationUpdates(locationRequest, this)
+ .addOnSuccessListener(
+ result -> LogUtil.i("LocationHelperInternal.requestUpdates", "onSuccess"))
+ .addOnFailureListener(
+ e -> LogUtil.e("LocationHelperInternal.requestUpdates", "onFailure", e));
}
- @Override
- public void onConnectionSuspended(int i) {
- // Do nothing.
- }
-
- @Override
- public void onConnectionFailed(ConnectionResult result) {
- // Do nothing.
+ private void getLocation() {
+ LogUtil.enterBlock("LocationHelperInternal.getLocation");
+
+ locationClient
+ .getLastLocation()
+ .addOnSuccessListener(
+ location -> {
+ LogUtil.i("LocationHelperInternal.getLocation", "onSuccess");
+ Assert.isMainThread();
+ LocationHelper.this.onLocationChanged(location, isConnected());
+ })
+ .addOnFailureListener(
+ e -> LogUtil.e("LocationHelperInternal.getLocation", "onFailure", e));
}
@Override