Request GPS permission.

This commit is contained in:
Dennis Guse
2019-07-11 19:24:55 +02:00
parent ab7e8d2f43
commit 705c9b2538
5 changed files with 47 additions and 21 deletions
@@ -54,8 +54,9 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
private static final int DELETE_REQUEST_CODE = 3;
protected static final int GOOGLE_PLAY_SERVICES_REQUEST_CODE = 4;
protected static final int CAMERA_REQUEST_CODE = 5;
protected static final int GPS_REQUEST_CODE = 6;
@Override
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == DELETE_REQUEST_CODE) {
onDeleted();
@@ -16,6 +16,7 @@
package com.google.android.apps.mytracks;
import android.Manifest;
import android.app.Dialog;
import android.app.SearchManager;
import android.content.Context;
@@ -23,15 +24,13 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Looper;
import android.os.Parcelable;
import android.os.RemoteException;
import android.os.StrictMode;
import androidx.loader.app.LoaderManager.LoaderCallbacks;
import androidx.loader.content.CursorLoader;
import androidx.loader.content.Loader;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
@@ -47,6 +46,12 @@ import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.loader.app.LoaderManager.LoaderCallbacks;
import androidx.loader.content.CursorLoader;
import androidx.loader.content.Loader;
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.content.TracksColumns;
@@ -427,6 +432,17 @@ public class TrackListActivity extends AbstractSendToGoogleActivity implements F
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == GPS_REQUEST_CODE) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, R.string.permission_gps_failed, Toast.LENGTH_SHORT).show();
finish();
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
protected int getLayoutResId() {
return R.layout.track_list;
@@ -466,20 +482,18 @@ public class TrackListActivity extends AbstractSendToGoogleActivity implements F
Intent intent;
switch (item.getItemId()) {
case R.id.track_list_search:
// TODO ?
return false;
case R.id.track_list_start_gps:
MyTracksLocationManager myTracksLocationManager = new MyTracksLocationManager(
this, Looper.myLooper(), false);
MyTracksLocationManager myTracksLocationManager = new MyTracksLocationManager(this, Looper.myLooper(), false);
if (!myTracksLocationManager.isGpsProviderEnabled()) {
intent = GoogleLocationUtils.newLocationSettingsIntent(TrackListActivity.this);
startActivity(intent);
} else {
startGps = !TrackRecordingServiceConnectionUtils.isRecordingServiceRunning(
this);
startGps = !TrackRecordingServiceConnectionUtils.isRecordingServiceRunning(this);
// Show toast
Toast toast = Toast.makeText(
this, startGps ? R.string.gps_starting : R.string.gps_stopping, Toast.LENGTH_SHORT);
Toast toast = Toast.makeText(this, startGps ? R.string.gps_starting : R.string.gps_stopping, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
@@ -599,16 +613,15 @@ public class TrackListActivity extends AbstractSendToGoogleActivity implements F
* Shows start up dialogs.
*/
public void showStartupDialogs() {
{
// If stats_units_key is undefined, set it
if (PreferencesUtils.getString(this, R.string.stats_units_key, "").equals("")) {
String statsUnits = getString(
Locale.US.equals(Locale.getDefault()) ? R.string.stats_units_imperial
: R.string.stats_units_metric);
PreferencesUtils.setString(this, R.string.stats_units_key, statsUnits);
}
checkGooglePlayServices();
// If stats_units_key is undefined, set it
if (PreferencesUtils.getString(this, R.string.stats_units_key, "").equals("")) {
String statsUnits = getString(Locale.US.equals(Locale.getDefault()) ? R.string.stats_units_imperial : R.string.stats_units_metric);
PreferencesUtils.setString(this, R.string.stats_units_key, statsUnits);
}
checkGooglePlayServices();
requestGPSPermissions();
}
private void checkGooglePlayServices() {
@@ -628,6 +641,12 @@ public class TrackListActivity extends AbstractSendToGoogleActivity implements F
}
}
private void requestGPSPermissions() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, GPS_REQUEST_CODE);
}
}
/**
* Updates the menu items.
*
@@ -37,7 +37,6 @@ import com.google.android.gms.location.LocationServices;
import com.google.android.gms.tasks.OnSuccessListener;
/**
* My Tracks Location Manager. Applies Google location settings before allowing
* access to {@link LocationManager}.
@@ -67,6 +66,7 @@ public class MyTracksLocationManager {
@Override
public void onConnected(@Nullable Bundle bundle) {
handler.post(new Runnable() {
//Permissions should be already acquired by TrackListActivity during start up.
@SuppressLint("MissingPermission")
@Override
public void run() {
@@ -35,11 +35,12 @@ import android.os.Handler;
import android.os.IBinder;
import android.os.PowerManager.WakeLock;
import android.os.Process;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.core.app.NotificationCompat;
import androidx.core.app.TaskStackBuilder;
import android.util.Log;
import com.google.android.apps.mytracks.Constants;
import com.google.android.apps.mytracks.TrackDetailActivity;
+5
View File
@@ -1233,6 +1233,9 @@ limitations under the License.
</string>
<!-- Permission -->
<string name="permission_gps_failed">
My Tracks requires permission to use GPS.
</string>
<string name="permission_notification_description"
translation_description="The permission description the Google Play Store shows during app
installation when the app wants to receive Google My Tracks notifications.">
@@ -1298,6 +1301,8 @@ limitations under the License.
Speak the name of a track or marker
</string>
<!-- Send Google -->
<string name="send_google_by_my_tracks"
translation_description="When sending a track to Google, a note indicating it is created by