forked from upstream-mirrors/OpenTracks
Add a menu item to start/stop gps.
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 1.7 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.9 KiB |
@@ -21,6 +21,11 @@ limitations under the License.
|
|||||||
android:id="@+id/track_list_search"
|
android:id="@+id/track_list_search"
|
||||||
android:showAsAction="ifRoom|collapseActionView"
|
android:showAsAction="ifRoom|collapseActionView"
|
||||||
android:title="@string/menu_search"/>
|
android:title="@string/menu_search"/>
|
||||||
|
<item
|
||||||
|
android:icon="@drawable/menu_start_gps"
|
||||||
|
android:id="@+id/track_list_start_gps"
|
||||||
|
android:showAsAction="ifRoom"
|
||||||
|
android:title="@string/menu_start_gps"/>
|
||||||
<item
|
<item
|
||||||
android:icon="@drawable/menu_import"
|
android:icon="@drawable/menu_import"
|
||||||
android:id="@+id/track_list_import"
|
android:id="@+id/track_list_import"
|
||||||
|
|||||||
@@ -1171,6 +1171,18 @@ limitations under the License.
|
|||||||
Character limit: ~20 (1 line)">
|
Character limit: ~20 (1 line)">
|
||||||
Split frequency
|
Split frequency
|
||||||
</string>
|
</string>
|
||||||
|
<string name="menu_start_gps"
|
||||||
|
translation_description="In the menu, to start the GPS receiver on the phone.
|
||||||
|
|
||||||
|
Character limit: ~20 (1 line)">
|
||||||
|
Start GPS
|
||||||
|
</string>
|
||||||
|
<string name="menu_stop_gps"
|
||||||
|
translation_description="In the menu, to stop the GPS receiver on the phone.
|
||||||
|
|
||||||
|
Character limit: ~20 (1 line)">
|
||||||
|
Stop GPS
|
||||||
|
</string>
|
||||||
<string name="menu_voice_frequency"
|
<string name="menu_voice_frequency"
|
||||||
translation_description="In the menu, to configure the voice frequency, how frequent to announce
|
translation_description="In the menu, to configure the voice frequency, how frequent to announce
|
||||||
status.
|
status.
|
||||||
|
|||||||
@@ -16,7 +16,12 @@
|
|||||||
|
|
||||||
package com.google.android.apps.mytracks;
|
package com.google.android.apps.mytracks;
|
||||||
|
|
||||||
|
import com.google.android.apps.mytracks.content.Track;
|
||||||
|
import com.google.android.apps.mytracks.content.TrackDataHub;
|
||||||
|
import com.google.android.apps.mytracks.content.TrackDataListener;
|
||||||
|
import com.google.android.apps.mytracks.content.TrackDataType;
|
||||||
import com.google.android.apps.mytracks.content.TracksColumns;
|
import com.google.android.apps.mytracks.content.TracksColumns;
|
||||||
|
import com.google.android.apps.mytracks.content.Waypoint;
|
||||||
import com.google.android.apps.mytracks.fragments.CheckUnitsDialogFragment;
|
import com.google.android.apps.mytracks.fragments.CheckUnitsDialogFragment;
|
||||||
import com.google.android.apps.mytracks.fragments.DeleteAllTrackDialogFragment;
|
import com.google.android.apps.mytracks.fragments.DeleteAllTrackDialogFragment;
|
||||||
import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment;
|
import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment;
|
||||||
@@ -44,6 +49,7 @@ import android.content.Intent;
|
|||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
|
import android.location.Location;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.speech.tts.TextToSpeech;
|
import android.speech.tts.TextToSpeech;
|
||||||
@@ -67,6 +73,8 @@ import android.widget.AdapterView.OnItemClickListener;
|
|||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import java.util.EnumSet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An activity displaying a list of tracks.
|
* An activity displaying a list of tracks.
|
||||||
*
|
*
|
||||||
@@ -75,7 +83,8 @@ import android.widget.Toast;
|
|||||||
public class TrackListActivity extends FragmentActivity implements DeleteOneTrackCaller {
|
public class TrackListActivity extends FragmentActivity implements DeleteOneTrackCaller {
|
||||||
|
|
||||||
private static final String TAG = TrackListActivity.class.getSimpleName();
|
private static final String TAG = TrackListActivity.class.getSimpleName();
|
||||||
|
private static final String START_GPS_KEY = "start_gps_key";
|
||||||
|
|
||||||
private static final String[] PROJECTION = new String[] { TracksColumns._ID, TracksColumns.NAME,
|
private static final String[] PROJECTION = new String[] { TracksColumns._ID, TracksColumns.NAME,
|
||||||
TracksColumns.DESCRIPTION, TracksColumns.CATEGORY, TracksColumns.STARTTIME,
|
TracksColumns.DESCRIPTION, TracksColumns.CATEGORY, TracksColumns.STARTTIME,
|
||||||
TracksColumns.TOTALDISTANCE, TracksColumns.TOTALTIME, TracksColumns.ICON };
|
TracksColumns.TOTALDISTANCE, TracksColumns.TOTALTIME, TracksColumns.ICON };
|
||||||
@@ -181,6 +190,8 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
if (recordingTrackId == PreferencesUtils.RECORDING_TRACK_ID_DEFAULT) {
|
if (recordingTrackId == PreferencesUtils.RECORDING_TRACK_ID_DEFAULT) {
|
||||||
// Not recording -> Recording
|
// Not recording -> Recording
|
||||||
AnalyticsUtils.sendPageViews(TrackListActivity.this, "/action/record_track");
|
AnalyticsUtils.sendPageViews(TrackListActivity.this, "/action/record_track");
|
||||||
|
startGps = false;
|
||||||
|
handleStartGps();
|
||||||
updateMenuItems(true);
|
updateMenuItems(true);
|
||||||
startRecording();
|
startRecording();
|
||||||
} else {
|
} else {
|
||||||
@@ -211,11 +222,94 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private final TrackDataListener trackDataListener = new TrackDataListener() {
|
||||||
|
@Override
|
||||||
|
public void onTrackUpdated(Track track) {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSelectedTrackChanged(Track track) {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSegmentSplit(Location location) {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSampledOutTrackPoint(Location location) {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSampledInTrackPoint(Location location) {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onReportSpeedChanged(boolean reportSpeed) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNewWaypointsDone() {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNewWaypoint(Waypoint waypoint) {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNewTrackPointsDone() {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onMinRecordingDistanceChanged(int minRecordingDistance) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onMetricUnitsChanged(boolean isMetricUnits) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLocationStateChanged(LocationState locationState) {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLocationChanged(Location location) {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onHeadingChanged(double heading) {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clearWaypoints() {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clearTrackPoints() {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// The following are set in onCreate
|
// The following are set in onCreate
|
||||||
private TrackRecordingServiceConnection trackRecordingServiceConnection;
|
private TrackRecordingServiceConnection trackRecordingServiceConnection;
|
||||||
private TrackController trackController;
|
private TrackController trackController;
|
||||||
private ListView listView;
|
private ListView listView;
|
||||||
private ResourceCursorAdapter resourceCursorAdapter;
|
private ResourceCursorAdapter resourceCursorAdapter;
|
||||||
|
private TrackDataHub trackDataHub;
|
||||||
|
|
||||||
// Preferences
|
// Preferences
|
||||||
private boolean metricUnits;
|
private boolean metricUnits;
|
||||||
@@ -224,11 +318,13 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
|
|
||||||
// Menu items
|
// Menu items
|
||||||
private MenuItem searchMenuItem;
|
private MenuItem searchMenuItem;
|
||||||
|
private MenuItem startGpsMenuItem;
|
||||||
private MenuItem importMenuItem;
|
private MenuItem importMenuItem;
|
||||||
private MenuItem saveAllMenuItem;
|
private MenuItem saveAllMenuItem;
|
||||||
private MenuItem deleteAllMenuItem;
|
private MenuItem deleteAllMenuItem;
|
||||||
|
|
||||||
private boolean startNewRecording = false; // true to start a new recording
|
private boolean startNewRecording = false; // true to start a new recording
|
||||||
|
private boolean startGps = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -306,10 +402,19 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
resourceCursorAdapter.swapCursor(null);
|
resourceCursorAdapter.swapCursor(null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
trackDataHub = TrackDataHub.newInstance(this);
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
startGps = savedInstanceState.getBoolean(START_GPS_KEY);
|
||||||
|
}
|
||||||
showStartupDialogs();
|
showStartupDialogs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
trackDataHub.start();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
@@ -322,6 +427,19 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
TrackRecordingServiceConnectionUtils.resumeConnection(this, trackRecordingServiceConnection);
|
TrackRecordingServiceConnectionUtils.resumeConnection(this, trackRecordingServiceConnection);
|
||||||
trackController.update(
|
trackController.update(
|
||||||
recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT, recordingTrackPaused);
|
recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT, recordingTrackPaused);
|
||||||
|
handleStartGps();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSaveInstanceState(Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
outState.putBoolean(START_GPS_KEY, startGps);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStop() {
|
||||||
|
super.onStop();
|
||||||
|
trackDataHub.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -344,6 +462,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
.setTitle(getString(R.string.menu_save_format, fileTypes[3]));
|
.setTitle(getString(R.string.menu_save_format, fileTypes[3]));
|
||||||
|
|
||||||
searchMenuItem = menu.findItem(R.id.track_list_search);
|
searchMenuItem = menu.findItem(R.id.track_list_search);
|
||||||
|
startGpsMenuItem = menu.findItem(R.id.track_list_start_gps);
|
||||||
importMenuItem = menu.findItem(R.id.track_list_import);
|
importMenuItem = menu.findItem(R.id.track_list_import);
|
||||||
saveAllMenuItem = menu.findItem(R.id.track_list_save_all);
|
saveAllMenuItem = menu.findItem(R.id.track_list_save_all);
|
||||||
deleteAllMenuItem = menu.findItem(R.id.track_list_delete_all);
|
deleteAllMenuItem = menu.findItem(R.id.track_list_delete_all);
|
||||||
@@ -359,6 +478,11 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.track_list_search:
|
case R.id.track_list_search:
|
||||||
return ApiAdapterFactory.getApiAdapter().handleSearchMenuSelection(this);
|
return ApiAdapterFactory.getApiAdapter().handleSearchMenuSelection(this);
|
||||||
|
case R.id.track_list_start_gps:
|
||||||
|
startGps = !startGps;
|
||||||
|
handleStartGps();
|
||||||
|
updateMenuItems(recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT);
|
||||||
|
return true;
|
||||||
case R.id.track_list_import:
|
case R.id.track_list_import:
|
||||||
AnalyticsUtils.sendPageViews(this, "/action/import");
|
AnalyticsUtils.sendPageViews(this, "/action/import");
|
||||||
intent = IntentUtils.newIntent(this, ImportActivity.class)
|
intent = IntentUtils.newIntent(this, ImportActivity.class)
|
||||||
@@ -467,6 +591,10 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
* @param isRecording true if recording
|
* @param isRecording true if recording
|
||||||
*/
|
*/
|
||||||
private void updateMenuItems(boolean isRecording) {
|
private void updateMenuItems(boolean isRecording) {
|
||||||
|
if (startGpsMenuItem != null) {
|
||||||
|
startGpsMenuItem.setIcon(startGps ? R.drawable.menu_stop_gps : R.drawable.menu_start_gps);
|
||||||
|
startGpsMenuItem.setTitle(startGps ? R.string.menu_stop_gps : R.string.menu_start_gps);
|
||||||
|
}
|
||||||
if (importMenuItem != null) {
|
if (importMenuItem != null) {
|
||||||
importMenuItem.setVisible(!isRecording);
|
importMenuItem.setVisible(!isRecording);
|
||||||
}
|
}
|
||||||
@@ -534,4 +662,15 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles starting gps.
|
||||||
|
*/
|
||||||
|
private void handleStartGps() {
|
||||||
|
if (startGps) {
|
||||||
|
trackDataHub.registerTrackDataListener(trackDataListener, EnumSet.of(TrackDataType.LOCATION));
|
||||||
|
} else {
|
||||||
|
trackDataHub.unregisterTrackDataListener(trackDataListener);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user