diff --git a/app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java b/app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java index 5498ef16a7..8bcce8ef57 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java @@ -12,6 +12,7 @@ import android.location.Address; import android.location.Geocoder; import android.net.Uri; import android.os.AsyncTask; +import android.os.Build; import android.os.Bundle; import android.view.View; import android.view.animation.OvershootInterpolator; @@ -24,11 +25,11 @@ import androidx.core.content.ContextCompat; import androidx.core.view.ViewCompat; import androidx.fragment.app.Fragment; +import com.google.accompanist.permissions.PermissionsUtilKt; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapView; import com.google.android.gms.maps.SupportMapFragment; -import com.google.android.gms.maps.model.CircleOptions; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MapStyleOptions; @@ -72,7 +73,6 @@ public final class PlacePickerActivity extends AppCompatActivity { private Address currentAddress; private LatLng initialLocation; private LatLng currentLocation = new LatLng(0, 0); - private LatLng userLocation; private AddressLookup addressLookup; private GoogleMap googleMap; @@ -103,10 +103,7 @@ public final class PlacePickerActivity extends AppCompatActivity { ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { new LocationRetriever(this, this, location -> { - LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); - userLocation = latLng; - setInitialLocation(latLng); - drawUserLocationIfPossible(); + setInitialLocation(new LatLng(location.getLatitude(), location.getLongitude())); }, () -> { Log.w(TAG, "Failed to get location."); setInitialLocation(PRIME_MERIDIAN); @@ -133,6 +130,8 @@ public final class PlacePickerActivity extends AppCompatActivity { } } + enableMyLocationButtonIfHaveThePermission(googleMap); + googleMap.setOnCameraMoveStartedListener(i -> { markerImage.animate() .translationY(-75f) @@ -171,18 +170,6 @@ public final class PlacePickerActivity extends AppCompatActivity { this.googleMap = googleMap; moveMapToInitialIfPossible(); - drawUserLocationIfPossible(); - } - - private void drawUserLocationIfPossible() { - if (userLocation != null && googleMap != null) { - googleMap.addCircle(new CircleOptions() - .center(userLocation) - .radius(12) - .strokeWidth(4f) - .strokeColor(Color.WHITE) - .fillColor(Color.parseColor("#4285F4"))); - } } private void moveMapToInitialIfPossible() { @@ -229,6 +216,12 @@ public final class PlacePickerActivity extends AppCompatActivity { }); } + private void enableMyLocationButtonIfHaveThePermission(GoogleMap googleMap) { + if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { + googleMap.setMyLocationEnabled(true); + } + } + private void lookupAddress(@Nullable LatLng target) { if (addressLookup != null) { addressLookup.cancel(true); @@ -237,9 +230,13 @@ public final class PlacePickerActivity extends AppCompatActivity { addressLookup.execute(target); } + @SuppressLint("MissingPermission") @Override protected void onPause() { super.onPause(); + if (googleMap != null && (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)) { + googleMap.setMyLocationEnabled(false); + } if (addressLookup != null) { addressLookup.cancel(true); }