forked from upstream-mirrors/OpenTracks
Request GPS permission.
This commit is contained in:
+2
-1
@@ -54,8 +54,9 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
|
|||||||
private static final int DELETE_REQUEST_CODE = 3;
|
private static final int DELETE_REQUEST_CODE = 3;
|
||||||
protected static final int GOOGLE_PLAY_SERVICES_REQUEST_CODE = 4;
|
protected static final int GOOGLE_PLAY_SERVICES_REQUEST_CODE = 4;
|
||||||
protected static final int CAMERA_REQUEST_CODE = 5;
|
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) {
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
if (requestCode == DELETE_REQUEST_CODE) {
|
if (requestCode == DELETE_REQUEST_CODE) {
|
||||||
onDeleted();
|
onDeleted();
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.google.android.apps.mytracks;
|
package com.google.android.apps.mytracks;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.app.SearchManager;
|
import android.app.SearchManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -23,15 +24,13 @@ import android.content.DialogInterface;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.StrictMode;
|
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.util.Log;
|
||||||
import android.view.ContextMenu;
|
import android.view.ContextMenu;
|
||||||
import android.view.ContextMenu.ContextMenuInfo;
|
import android.view.ContextMenu.ContextMenuInfo;
|
||||||
@@ -47,6 +46,12 @@ import android.widget.AdapterView.OnItemClickListener;
|
|||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.Toast;
|
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.MyTracksProviderUtils;
|
||||||
import com.google.android.apps.mytracks.content.Track;
|
import com.google.android.apps.mytracks.content.Track;
|
||||||
import com.google.android.apps.mytracks.content.TracksColumns;
|
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
|
@Override
|
||||||
protected int getLayoutResId() {
|
protected int getLayoutResId() {
|
||||||
return R.layout.track_list;
|
return R.layout.track_list;
|
||||||
@@ -466,20 +482,18 @@ public class TrackListActivity extends AbstractSendToGoogleActivity implements F
|
|||||||
Intent intent;
|
Intent intent;
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.track_list_search:
|
case R.id.track_list_search:
|
||||||
|
// TODO ?
|
||||||
return false;
|
return false;
|
||||||
case R.id.track_list_start_gps:
|
case R.id.track_list_start_gps:
|
||||||
MyTracksLocationManager myTracksLocationManager = new MyTracksLocationManager(
|
MyTracksLocationManager myTracksLocationManager = new MyTracksLocationManager(this, Looper.myLooper(), false);
|
||||||
this, Looper.myLooper(), false);
|
|
||||||
if (!myTracksLocationManager.isGpsProviderEnabled()) {
|
if (!myTracksLocationManager.isGpsProviderEnabled()) {
|
||||||
intent = GoogleLocationUtils.newLocationSettingsIntent(TrackListActivity.this);
|
intent = GoogleLocationUtils.newLocationSettingsIntent(TrackListActivity.this);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
} else {
|
} else {
|
||||||
startGps = !TrackRecordingServiceConnectionUtils.isRecordingServiceRunning(
|
startGps = !TrackRecordingServiceConnectionUtils.isRecordingServiceRunning(this);
|
||||||
this);
|
|
||||||
|
|
||||||
// Show toast
|
// Show toast
|
||||||
Toast toast = Toast.makeText(
|
Toast toast = Toast.makeText(this, startGps ? R.string.gps_starting : R.string.gps_stopping, Toast.LENGTH_SHORT);
|
||||||
this, startGps ? R.string.gps_starting : R.string.gps_stopping, Toast.LENGTH_SHORT);
|
|
||||||
toast.setGravity(Gravity.CENTER, 0, 0);
|
toast.setGravity(Gravity.CENTER, 0, 0);
|
||||||
toast.show();
|
toast.show();
|
||||||
|
|
||||||
@@ -599,16 +613,15 @@ public class TrackListActivity extends AbstractSendToGoogleActivity implements F
|
|||||||
* Shows start up dialogs.
|
* Shows start up dialogs.
|
||||||
*/
|
*/
|
||||||
public void showStartupDialogs() {
|
public void showStartupDialogs() {
|
||||||
{
|
// If stats_units_key is undefined, set it
|
||||||
// If stats_units_key is undefined, set it
|
if (PreferencesUtils.getString(this, R.string.stats_units_key, "").equals("")) {
|
||||||
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);
|
||||||
String statsUnits = getString(
|
PreferencesUtils.setString(this, R.string.stats_units_key, statsUnits);
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkGooglePlayServices();
|
||||||
|
|
||||||
|
requestGPSPermissions();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkGooglePlayServices() {
|
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.
|
* Updates the menu items.
|
||||||
*
|
*
|
||||||
|
|||||||
+1
-1
@@ -37,7 +37,6 @@ import com.google.android.gms.location.LocationServices;
|
|||||||
import com.google.android.gms.tasks.OnSuccessListener;
|
import com.google.android.gms.tasks.OnSuccessListener;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* My Tracks Location Manager. Applies Google location settings before allowing
|
* My Tracks Location Manager. Applies Google location settings before allowing
|
||||||
* access to {@link LocationManager}.
|
* access to {@link LocationManager}.
|
||||||
@@ -67,6 +66,7 @@ public class MyTracksLocationManager {
|
|||||||
@Override
|
@Override
|
||||||
public void onConnected(@Nullable Bundle bundle) {
|
public void onConnected(@Nullable Bundle bundle) {
|
||||||
handler.post(new Runnable() {
|
handler.post(new Runnable() {
|
||||||
|
//Permissions should be already acquired by TrackListActivity during start up.
|
||||||
@SuppressLint("MissingPermission")
|
@SuppressLint("MissingPermission")
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|||||||
+2
-1
@@ -35,11 +35,12 @@ import android.os.Handler;
|
|||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.PowerManager.WakeLock;
|
import android.os.PowerManager.WakeLock;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.core.app.NotificationCompat;
|
import androidx.core.app.NotificationCompat;
|
||||||
import androidx.core.app.TaskStackBuilder;
|
import androidx.core.app.TaskStackBuilder;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import com.google.android.apps.mytracks.Constants;
|
import com.google.android.apps.mytracks.Constants;
|
||||||
import com.google.android.apps.mytracks.TrackDetailActivity;
|
import com.google.android.apps.mytracks.TrackDetailActivity;
|
||||||
|
|||||||
@@ -1233,6 +1233,9 @@ limitations under the License.
|
|||||||
</string>
|
</string>
|
||||||
|
|
||||||
<!-- Permission -->
|
<!-- Permission -->
|
||||||
|
<string name="permission_gps_failed">
|
||||||
|
My Tracks requires permission to use GPS.
|
||||||
|
</string>
|
||||||
<string name="permission_notification_description"
|
<string name="permission_notification_description"
|
||||||
translation_description="The permission description the Google Play Store shows during app
|
translation_description="The permission description the Google Play Store shows during app
|
||||||
installation when the app wants to receive Google My Tracks notifications.">
|
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
|
Speak the name of a track or marker
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Send Google -->
|
<!-- Send Google -->
|
||||||
<string name="send_google_by_my_tracks"
|
<string name="send_google_by_my_tracks"
|
||||||
translation_description="When sending a track to Google, a note indicating it is created by
|
translation_description="When sending a track to Google, a note indicating it is created by
|
||||||
|
|||||||
Reference in New Issue
Block a user