summaryrefslogtreecommitdiff
path: root/java/com/android/incallui/calllocation/impl/LocationHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/incallui/calllocation/impl/LocationHelper.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