diff --git a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java index b49416059..cda634e6d 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java @@ -388,7 +388,7 @@ public class SearchListActivity extends AbstractSendToGoogleActivity setTitle(textQuery); final MyTracksLocationManager myTracksLocationManager = new MyTracksLocationManager( - this, Looper.myLooper()); + this, Looper.myLooper(), true); LocationListener locationListener = new LocationListener() { @Override public void onLocationChanged(final Location location) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java index 6177d736f..3297a594c 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java @@ -478,7 +478,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity return ApiAdapterFactory.getApiAdapter().handleSearchMenuSelection(this); case R.id.track_list_start_gps: MyTracksLocationManager myTracksLocationManager = new MyTracksLocationManager( - this, Looper.myLooper()); + this, Looper.myLooper(), false); if (!myTracksLocationManager.isGpsProviderEnabled()) { intent = GoogleLocationUtils.isAvailable(TrackListActivity.this) ? new Intent( GoogleLocationUtils.ACTION_GOOGLE_LOCATION_SETTINGS) diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java index b7b8218bc..26a642828 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java @@ -167,7 +167,7 @@ public class MyTracksMapFragment extends SupportMapFragment implements TrackData @Override public void onClick(View v) { final MyTracksLocationManager myTracksLocationManager = new MyTracksLocationManager( - getActivity(), Looper.myLooper()); + getActivity(), Looper.myLooper(), true); if (!myTracksLocationManager.isAllowed()) { String setting = getString( GoogleLocationUtils.isAvailable(getActivity()) ? R.string.gps_google_location_settings @@ -533,7 +533,7 @@ public class MyTracksMapFragment extends SupportMapFragment implements TrackData TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE, TrackDataType.PREFERENCE)); MyTracksLocationManager myTracksLocationManager = new MyTracksLocationManager( - getActivity(), Looper.myLooper()); + getActivity(), Looper.myLooper(), false); boolean isGpsProviderEnabled = myTracksLocationManager.isGpsProviderEnabled(); if (googleMap != null) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/MyTracksLocationManager.java b/MyTracks/src/com/google/android/apps/mytracks/services/MyTracksLocationManager.java index 1d27147e3..105849fe1 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/MyTracksLocationManager.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/MyTracksLocationManager.java @@ -107,10 +107,10 @@ public class MyTracksLocationManager { private final Looper looper; private final Handler handler; private final LocationClient locationClient; - private final LocationManager locationManager; private final ContentResolver contentResolver; private final GoogleSettingsObserver observer; + private boolean isAvailable; private boolean isAllowed; private LocationListener requestLastLocation; @@ -118,15 +118,21 @@ public class MyTracksLocationManager { private float requestLocationUpdatesDistance; private long requestLocationUpdatesTime; - public MyTracksLocationManager(Context context, Looper looper) { + public MyTracksLocationManager(Context context, Looper looper, boolean enableLocaitonClient) { this.looper = looper; handler = new Handler(looper); - locationClient = new LocationClient(context, connectionCallbacks, onConnectionFailedListener); - locationClient.connect(); + + if (enableLocaitonClient) { + locationClient = new LocationClient(context, connectionCallbacks, onConnectionFailedListener); + locationClient.connect(); + } else { + locationClient = null; + } locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); contentResolver = context.getContentResolver(); observer = new GoogleSettingsObserver(); + isAvailable = GoogleLocationUtils.isAvailable(context); isAllowed = isUseLocationForServicesOn(); @@ -138,7 +144,9 @@ public class MyTracksLocationManager { * Closes the {@link MyTracksLocationManager}. */ public void close() { - locationClient.disconnect(); + if (locationClient != null) { + locationClient.disconnect(); + } contentResolver.unregisterContentObserver(observer); } @@ -186,7 +194,8 @@ public class MyTracksLocationManager { } /** - * Requests location updates. + * Requests location updates. This is an ongoing request, thus the caller + * needs to check the status of {@link #isAllowed}. * * @param minTime the minimal time * @param minDistance the minimal distance @@ -215,7 +224,7 @@ public class MyTracksLocationManager { @Override public void run() { requestLocationUpdates = null; - if (locationClient.isConnected()) { + if (locationClient != null && locationClient.isConnected()) { locationClient.removeLocationUpdates(locationListener); } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java index a094155f9..78bff4bbc 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java @@ -285,7 +285,7 @@ public class TrackRecordingService extends Service { super.onCreate(); context = this; myTracksProviderUtils = MyTracksProviderUtils.Factory.get(this); - myTracksLocationManager = new MyTracksLocationManager(this, Looper.myLooper()); + myTracksLocationManager = new MyTracksLocationManager(this, Looper.myLooper(), true); activityRecognitionPendingIntent = PendingIntent.getService(context, 0, new Intent(context, ActivityRecognitionIntentService.class), PendingIntent.FLAG_UPDATE_CURRENT);