forked from upstream-mirrors/OpenTracks
merge heads
This commit is contained in:
@@ -17,82 +17,82 @@ limitations under the License.
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<item
|
||||
android:icon="@drawable/menu_stop_recording"
|
||||
android:id="@+id/menu_stop_recording"
|
||||
android:id="@+id/track_detail_stop_recording"
|
||||
android:showAsAction="always"
|
||||
android:title="@string/menu_stop_recording"/>
|
||||
<item
|
||||
android:icon="@drawable/menu_insert_marker"
|
||||
android:id="@+id/menu_insert_marker"
|
||||
android:id="@+id/track_detail_insert_marker"
|
||||
android:showAsAction="always"
|
||||
android:title="@string/menu_insert_marker"/>
|
||||
<item
|
||||
android:icon="@drawable/menu_play"
|
||||
android:id="@+id/menu_play"
|
||||
android:id="@+id/track_detail_play"
|
||||
android:showAsAction="always"
|
||||
android:title="@string/menu_play"/>
|
||||
<item
|
||||
android:icon="@drawable/menu_share"
|
||||
android:id="@+id/menu_share"
|
||||
android:id="@+id/track_detail_share"
|
||||
android:showAsAction="always"
|
||||
android:title="@string/menu_share">
|
||||
<menu>
|
||||
<item
|
||||
android:id="@+id/menu_share_map"
|
||||
android:id="@+id/track_detail_share_map"
|
||||
android:title="@string/menu_share_map"/>
|
||||
<item
|
||||
android:id="@+id/menu_share_fusion_table"
|
||||
android:id="@+id/track_detail_share_fusion_table"
|
||||
android:title="@string/menu_share_fusion_table"/>
|
||||
<item android:id="@+id/menu_share_gpx"/>
|
||||
<item android:id="@+id/menu_share_kml"/>
|
||||
<item android:id="@+id/menu_share_csv"/>
|
||||
<item android:id="@+id/menu_share_tcx"/>
|
||||
<item android:id="@+id/track_detail_share_gpx"/>
|
||||
<item android:id="@+id/track_detail_share_kml"/>
|
||||
<item android:id="@+id/track_detail_share_csv"/>
|
||||
<item android:id="@+id/track_detail_share_tcx"/>
|
||||
</menu>
|
||||
</item>
|
||||
<item
|
||||
android:icon="@drawable/ic_menu_waypoints"
|
||||
android:id="@+id/menu_markers"
|
||||
android:id="@+id/track_detail_markers"
|
||||
android:title="@string/menu_markers"/>
|
||||
<item
|
||||
android:id="@+id/menu_send_google"
|
||||
android:id="@+id/track_detail_send_google"
|
||||
android:title="@string/menu_send_google"/>
|
||||
<item
|
||||
android:id="@+id/menu_save"
|
||||
android:id="@+id/track_detail_save"
|
||||
android:title="@string/menu_save">
|
||||
<menu>
|
||||
<item android:id="@+id/menu_save_gpx"/>
|
||||
<item android:id="@+id/menu_save_kml"/>
|
||||
<item android:id="@+id/menu_save_csv"/>
|
||||
<item android:id="@+id/menu_save_tcx"/>
|
||||
<item android:id="@+id/track_detail_save_gpx"/>
|
||||
<item android:id="@+id/track_detail_save_kml"/>
|
||||
<item android:id="@+id/track_detail_save_csv"/>
|
||||
<item android:id="@+id/track_detail_save_tcx"/>
|
||||
</menu>
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/menu_edit"
|
||||
android:id="@+id/track_detail_edit"
|
||||
android:title="@string/menu_edit"/>
|
||||
<item
|
||||
android:id="@+id/menu_delete"
|
||||
android:id="@+id/track_detail_delete"
|
||||
android:title="@string/menu_delete"/>
|
||||
<item
|
||||
android:icon="@android:drawable/ic_menu_mylocation"
|
||||
android:id="@+id/menu_my_location"
|
||||
android:id="@+id/track_detail_my_location"
|
||||
android:title="@string/menu_my_location"/>
|
||||
<item
|
||||
android:icon="@android:drawable/ic_menu_mapmode"
|
||||
android:id="@+id/menu_satellite_mode"
|
||||
android:id="@+id/track_detail_satellite_mode"
|
||||
android:title="@string/menu_satellite_mode"/>
|
||||
<item
|
||||
android:icon="@drawable/ic_menu_chartsettings"
|
||||
android:id="@+id/menu_chart_settings"
|
||||
android:id="@+id/track_detail_chart_settings"
|
||||
android:title="@string/menu_chart_settings"/>
|
||||
<item
|
||||
android:icon="@drawable/ic_menu_sensorstatus"
|
||||
android:id="@+id/menu_sensor_state"
|
||||
android:id="@+id/track_detail_sensor_state"
|
||||
android:title="@string/menu_sensor_state"/>
|
||||
<item
|
||||
android:icon="@drawable/menu_settings"
|
||||
android:id="@+id/menu_settings"
|
||||
android:id="@+id/track_detail_settings"
|
||||
android:title="@string/menu_settings"/>
|
||||
<item
|
||||
android:icon="@drawable/menu_help"
|
||||
android:id="@+id/menu_help"
|
||||
android:id="@+id/track_detail_help"
|
||||
android:title="@string/menu_help"/>
|
||||
</menu>
|
||||
@@ -17,38 +17,45 @@ limitations under the License.
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<item
|
||||
android:icon="@drawable/menu_record_track"
|
||||
android:id="@+id/menu_record_track"
|
||||
android:id="@+id/track_list_record_track"
|
||||
android:showAsAction="always"
|
||||
android:title="@string/menu_record_track"/>
|
||||
<item
|
||||
android:icon="@drawable/menu_stop_recording"
|
||||
android:id="@+id/menu_stop_recording"
|
||||
android:id="@+id/track_list_stop_recording"
|
||||
android:showAsAction="always"
|
||||
android:title="@string/menu_stop_recording"/>
|
||||
<item
|
||||
android:actionViewClass="android.widget.SearchView"
|
||||
android:icon="@drawable/menu_search"
|
||||
android:id="@+id/menu_search"
|
||||
android:id="@+id/track_list_search"
|
||||
android:showAsAction="always|collapseActionView"
|
||||
android:title="@string/menu_search"/>
|
||||
<item
|
||||
android:id="@+id/menu_import_all"
|
||||
android:id="@+id/track_list_import_all"
|
||||
android:title="@string/menu_import_all"/>
|
||||
<item
|
||||
android:id="@+id/menu_export_all"
|
||||
android:title="@string/menu_export_all"/>
|
||||
android:id="@+id/track_list_export_all"
|
||||
android:title="@string/menu_export_all">
|
||||
<menu>
|
||||
<item android:id="@+id/track_list_export_gpx"/>
|
||||
<item android:id="@+id/track_list_export_kml"/>
|
||||
<item android:id="@+id/track_list_export_csv"/>
|
||||
<item android:id="@+id/track_list_export_tcx"/>
|
||||
</menu>
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/menu_delete_all"
|
||||
android:id="@+id/track_list_delete_all"
|
||||
android:title="@string/menu_delete_all"/>
|
||||
<item
|
||||
android:id="@+id/menu_aggregated_statistics"
|
||||
android:id="@+id/track_list_aggregated_statistics"
|
||||
android:title="@string/menu_aggregated_statistics"/>
|
||||
<item
|
||||
android:icon="@drawable/menu_settings"
|
||||
android:id="@+id/menu_settings"
|
||||
android:id="@+id/track_list_settings"
|
||||
android:title="@string/menu_settings"/>
|
||||
<item
|
||||
android:icon="@drawable/menu_help"
|
||||
android:id="@+id/menu_help"
|
||||
android:id="@+id/track_list_help"
|
||||
android:title="@string/menu_help"/>
|
||||
</menu>
|
||||
@@ -986,8 +986,9 @@ limitations under the License.
|
||||
Edit
|
||||
</string>
|
||||
<string name="menu_export_all"
|
||||
translation_description="In the menu, to export all the tracks to the SD card.">
|
||||
Export all
|
||||
translation_description="In the menu, to export all the tracks to the SD card. This menu item
|
||||
has a submenu.">
|
||||
Export all...
|
||||
</string>
|
||||
<string name="menu_export_all_format"
|
||||
translation_description="Under the 'Export all' menu option, the option to export all tracks as
|
||||
@@ -1033,7 +1034,8 @@ limitations under the License.
|
||||
Satellite mode
|
||||
</string>
|
||||
<string name="menu_save"
|
||||
translation_description="In the menu, to save a track to the SD card.">
|
||||
translation_description="In the menu, to save a track to the SD card. This menu item has a
|
||||
submenu.">
|
||||
Save to SD card...
|
||||
</string>
|
||||
<string name="menu_save_format"
|
||||
|
||||
@@ -8,11 +8,13 @@ import com.google.android.maps.mytracks.R;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
||||
import android.os.Bundle;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
|
||||
@@ -60,8 +62,7 @@ public class AggregatedStatsActivity extends Activity implements
|
||||
|
||||
this.tracksProvider = MyTracksProviderUtils.Factory.get(this);
|
||||
|
||||
// Show the action bar (or nothing at all).
|
||||
ApiAdapterFactory.getApiAdapter().showActionBar(this);
|
||||
ApiAdapterFactory.getApiAdapter().configureActionBarHomeAsUp(this);
|
||||
|
||||
setContentView(R.layout.stats);
|
||||
|
||||
@@ -87,6 +88,16 @@ public class AggregatedStatsActivity extends Activity implements
|
||||
loadAggregatedStats();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() != android.R.id.home) {
|
||||
return false;
|
||||
}
|
||||
startActivity(new Intent(this, TrackListActivity.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Reads tracks from the db
|
||||
* 2. Merges the trip stats from the tracks
|
||||
|
||||
@@ -28,7 +28,6 @@ import com.google.android.apps.mytracks.content.TrackDataListener;
|
||||
import com.google.android.apps.mytracks.content.Waypoint;
|
||||
import com.google.android.apps.mytracks.stats.DoubleBuffer;
|
||||
import com.google.android.apps.mytracks.stats.TripStatisticsBuilder;
|
||||
import com.google.android.apps.mytracks.util.ApiAdapterFactory;
|
||||
import com.google.android.apps.mytracks.util.LocationUtils;
|
||||
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||
import com.google.android.maps.mytracks.R;
|
||||
@@ -118,9 +117,6 @@ public class ChartActivity extends Activity implements TrackDataListener {
|
||||
// The volume we want to control is the Text-To-Speech volume
|
||||
setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
|
||||
|
||||
// Show the action bar (or nothing at all).
|
||||
ApiAdapterFactory.getApiAdapter().showActionBar(this);
|
||||
|
||||
setContentView(R.layout.mytracks_charts);
|
||||
ViewGroup layout = (ViewGroup) findViewById(R.id.elevation_chart);
|
||||
chartView = new ChartView(this);
|
||||
|
||||
@@ -141,9 +141,8 @@ public class ImportActivity extends Activity {
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
if (!importAll && trackId != -1L) {
|
||||
Intent intent = new Intent(ImportActivity.this, TrackDetailActivity.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(TrackDetailActivity.TRACK_ID, trackId);
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(TrackDetailActivity.EXTRA_TRACK_ID, trackId);
|
||||
startActivity(intent);
|
||||
}
|
||||
finish();
|
||||
|
||||
@@ -24,7 +24,6 @@ import com.google.android.apps.mytracks.content.TrackDataHub.ListenerDataType;
|
||||
import com.google.android.apps.mytracks.content.TrackDataListener;
|
||||
import com.google.android.apps.mytracks.content.Waypoint;
|
||||
import com.google.android.apps.mytracks.stats.TripStatistics;
|
||||
import com.google.android.apps.mytracks.util.ApiAdapterFactory;
|
||||
import com.google.android.apps.mytracks.util.GeoRect;
|
||||
import com.google.android.apps.mytracks.util.LocationUtils;
|
||||
import com.google.android.maps.GeoPoint;
|
||||
@@ -142,9 +141,6 @@ public class MapActivity extends com.google.android.maps.MapActivity
|
||||
// The volume we want to control is the Text-To-Speech volume
|
||||
setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
|
||||
|
||||
// Show the action bar (or nothing at all).
|
||||
ApiAdapterFactory.getApiAdapter().showActionBar(this);
|
||||
|
||||
// Inflate the layout:
|
||||
setContentView(R.layout.mytracks_layout);
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ public class SearchActivity extends ListActivity {
|
||||
private static final String TRACK_ID_FIELD = "trackId";
|
||||
private static final String WAYPOINT_ID_FIELD = "waypointId";
|
||||
|
||||
private static final String EXTRA_CURRENT_TRACK_ID = "trackId";
|
||||
public static final String EXTRA_TRACK_ID = "track_id";
|
||||
|
||||
private static final boolean LOG_SCORES = true;
|
||||
|
||||
@@ -116,7 +116,7 @@ public class SearchActivity extends ListActivity {
|
||||
|
||||
String textQuery = intent.getStringExtra(SearchManager.QUERY);
|
||||
Location currentLocation = locationManager.getLastKnownLocation("gps");
|
||||
long currentTrackId = intent.getLongExtra(EXTRA_CURRENT_TRACK_ID, -1);
|
||||
long currentTrackId = intent.getLongExtra(EXTRA_TRACK_ID, -1L);
|
||||
long currentTimestamp = System.currentTimeMillis();
|
||||
|
||||
final SearchQuery query =
|
||||
@@ -248,11 +248,10 @@ public class SearchActivity extends ListActivity {
|
||||
|
||||
private Intent createViewDataIntent(Map<String, Object> clickedData) {
|
||||
Intent intent = new Intent(this, TrackDetailActivity.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(TrackDetailActivity.EXTRA_TRACK_ID, (Long) clickedData.get(TRACK_ID_FIELD));
|
||||
if (clickedData.containsKey(WAYPOINT_ID_FIELD)) {
|
||||
intent.putExtra(TrackDetailActivity.WAYPOINT_ID, (Long) clickedData.get(WAYPOINT_ID_FIELD));
|
||||
} else {
|
||||
intent.putExtra(TrackDetailActivity.TRACK_ID, (Long) clickedData.get(TRACK_ID_FIELD));
|
||||
intent.putExtra(TrackDetailActivity.EXTRA_WAYPOINT_ID, (Long) clickedData.get(WAYPOINT_ID_FIELD));
|
||||
}
|
||||
return intent;
|
||||
}
|
||||
|
||||
@@ -628,7 +628,7 @@ public class SettingsActivity extends PreferenceActivity {
|
||||
|
||||
// Restart the settings activity so all changes are loaded.
|
||||
Intent intent = getIntent();
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -23,7 +23,6 @@ import com.google.android.apps.mytracks.content.TrackDataHub.ListenerDataType;
|
||||
import com.google.android.apps.mytracks.content.TrackDataListener;
|
||||
import com.google.android.apps.mytracks.content.Waypoint;
|
||||
import com.google.android.apps.mytracks.services.ServiceUtils;
|
||||
import com.google.android.apps.mytracks.util.ApiAdapterFactory;
|
||||
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||
import com.google.android.maps.mytracks.R;
|
||||
|
||||
@@ -107,9 +106,6 @@ public class StatsActivity extends Activity implements TrackDataListener {
|
||||
// The volume we want to control is the Text-To-Speech volume
|
||||
setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
|
||||
|
||||
// Show the action bar (or nothing at all).
|
||||
ApiAdapterFactory.getApiAdapter().showActionBar(this);
|
||||
|
||||
setContentView(R.layout.stats);
|
||||
|
||||
ScrollView sv = ((ScrollView) findViewById(R.id.scrolly));
|
||||
|
||||
@@ -21,7 +21,6 @@ import static com.google.android.apps.mytracks.Constants.STATS_TAB_TAG;
|
||||
|
||||
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
|
||||
import com.google.android.apps.mytracks.content.TrackDataHub;
|
||||
import com.google.android.apps.mytracks.content.Waypoint;
|
||||
import com.google.android.apps.mytracks.content.WaypointCreationRequest;
|
||||
import com.google.android.apps.mytracks.io.file.SaveActivity;
|
||||
import com.google.android.apps.mytracks.io.file.TrackWriterFactory.TrackFileFormat;
|
||||
@@ -30,11 +29,12 @@ import com.google.android.apps.mytracks.io.sendtogoogle.UploadServiceChooserActi
|
||||
import com.google.android.apps.mytracks.services.ITrackRecordingService;
|
||||
import com.google.android.apps.mytracks.services.ServiceUtils;
|
||||
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
|
||||
import com.google.android.apps.mytracks.util.AnalyticsUtils;
|
||||
import com.google.android.apps.mytracks.util.ApiAdapterFactory;
|
||||
import com.google.android.apps.mytracks.util.DialogUtils;
|
||||
import com.google.android.apps.mytracks.util.PlayTrackUtils;
|
||||
import com.google.android.maps.mytracks.R;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.TabActivity;
|
||||
import android.content.Context;
|
||||
@@ -42,7 +42,10 @@ import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.content.res.Resources;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
import android.os.RemoteException;
|
||||
@@ -58,6 +61,8 @@ import android.widget.RelativeLayout;
|
||||
import android.widget.TabHost;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* An activity to show the track detail.
|
||||
*
|
||||
@@ -67,10 +72,12 @@ import android.widget.Toast;
|
||||
@SuppressWarnings("deprecation")
|
||||
public class TrackDetailActivity extends TabActivity implements OnTouchListener {
|
||||
|
||||
public static final String TRACK_ID = "track_id";
|
||||
public static final String WAYPOINT_ID = "waypoint_id";
|
||||
public static final String EXTRA_TRACK_ID = "track_id";
|
||||
public static final String EXTRA_WAYPOINT_ID = "waypoint_id";
|
||||
|
||||
private static final String TAG = TrackDetailActivity.class.getSimpleName();
|
||||
private static final String MARKET_URL_PREFIX = "market://details?id=";
|
||||
|
||||
private static final int DIALOG_INSTALL_EARTH_ID = 0;
|
||||
private static final int DIALOG_DELETE_CURRENT_ID = 1;
|
||||
|
||||
@@ -78,7 +85,8 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
|
||||
private TrackDataHub trackDataHub;
|
||||
private TrackRecordingServiceConnection trackRecordingServiceConnection;
|
||||
private NavControls navControls;
|
||||
|
||||
private long trackId;
|
||||
|
||||
private MenuItem stopRecordingMenuItem;
|
||||
private MenuItem insertMarkerMenuItem;
|
||||
private MenuItem playMenuItem;
|
||||
@@ -104,10 +112,7 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
|
||||
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
||||
// Note that key can be null
|
||||
if (getString(R.string.recording_track_key).equals(key)) {
|
||||
if (isRecording()) {
|
||||
trackRecordingServiceConnection.startAndBind();
|
||||
}
|
||||
updateMenu();
|
||||
updateMenu();
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -116,16 +121,14 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
|
||||
ApiAdapterFactory.getApiAdapter().configureActionBarHomeAsUp(this);
|
||||
|
||||
sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
|
||||
sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
||||
trackDataHub = ((MyTracksApplication) getApplication()).getTrackDataHub();
|
||||
trackRecordingServiceConnection = new TrackRecordingServiceConnection(this, null);
|
||||
|
||||
setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
|
||||
|
||||
// Show the action bar (or nothing at all).
|
||||
ApiAdapterFactory.getApiAdapter().showActionBar(this);
|
||||
|
||||
final Resources res = getResources();
|
||||
final TabHost tabHost = getTabHost();
|
||||
tabHost.addTab(tabHost.newTabSpec(MAP_TAB_TAG)
|
||||
@@ -150,43 +153,20 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
|
||||
navControls.show();
|
||||
tabHost.addView(layout);
|
||||
layout.setOnTouchListener(this);
|
||||
|
||||
handleIntent(getIntent());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNewIntent(Intent intent) {
|
||||
super.onNewIntent(intent);
|
||||
handleIntent(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
trackDataHub.start();
|
||||
|
||||
if (isRecording()) {
|
||||
trackRecordingServiceConnection.startAndBind();
|
||||
}
|
||||
|
||||
Intent intent = getIntent();
|
||||
long trackId = intent.getLongExtra(TRACK_ID, -1L);
|
||||
if (trackId != -1L) {
|
||||
trackDataHub.loadTrack(trackId);
|
||||
return;
|
||||
}
|
||||
|
||||
long waypointId = intent.getLongExtra(WAYPOINT_ID, -1L);
|
||||
if (waypointId != -1L) {
|
||||
Waypoint waypoint = MyTracksProviderUtils.Factory.get(this).getWaypoint(waypointId);
|
||||
if (waypoint != null) {
|
||||
trackId = waypoint.getTrackId();
|
||||
trackDataHub.loadTrack(trackId);
|
||||
MapActivity mapActivity = getMapActivity();
|
||||
if (mapActivity != null) {
|
||||
getTabHost().setCurrentTab(0);
|
||||
mapActivity.showWaypoint(trackId, waypointId);
|
||||
} else {
|
||||
Log.e(TAG, "MapActivity is null");
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// No track id or waypoint id, return to the track list activity.
|
||||
startTrackListActivity();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -211,7 +191,18 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
|
||||
protected Dialog onCreateDialog(int id) {
|
||||
switch (id) {
|
||||
case DIALOG_INSTALL_EARTH_ID:
|
||||
return PlayTrackUtils.createInstallEarthDialog(this);
|
||||
return new AlertDialog.Builder(this).setCancelable(true)
|
||||
.setMessage(R.string.track_detail_install_earth_message)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
Intent intent = new Intent()
|
||||
.setData(Uri.parse(MARKET_URL_PREFIX + SaveActivity.GOOGLE_EARTH_PACKAGE));
|
||||
startActivity(intent);
|
||||
}
|
||||
})
|
||||
.create();
|
||||
case DIALOG_DELETE_CURRENT_ID:
|
||||
return DialogUtils.createConfirmationDialog(this,
|
||||
R.string.track_detail_delete_confirm_message, new DialogInterface.OnClickListener() {
|
||||
@@ -230,24 +221,32 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.track_detail, menu);
|
||||
String fileTypes[] = getResources().getStringArray(R.array.file_types);
|
||||
menu.findItem(R.id.menu_save_gpx).setTitle(getString(R.string.menu_save_format, fileTypes[0]));
|
||||
menu.findItem(R.id.menu_save_kml).setTitle(getString(R.string.menu_save_format, fileTypes[1]));
|
||||
menu.findItem(R.id.menu_save_csv).setTitle(getString(R.string.menu_save_format, fileTypes[2]));
|
||||
menu.findItem(R.id.menu_save_tcx).setTitle(getString(R.string.menu_save_format, fileTypes[3]));
|
||||
menu.findItem(R.id.track_detail_save_gpx)
|
||||
.setTitle(getString(R.string.menu_save_format, fileTypes[0]));
|
||||
menu.findItem(R.id.track_detail_save_kml)
|
||||
.setTitle(getString(R.string.menu_save_format, fileTypes[1]));
|
||||
menu.findItem(R.id.track_detail_save_csv)
|
||||
.setTitle(getString(R.string.menu_save_format, fileTypes[2]));
|
||||
menu.findItem(R.id.track_detail_save_tcx)
|
||||
.setTitle(getString(R.string.menu_save_format, fileTypes[3]));
|
||||
|
||||
menu.findItem(R.id.menu_share_gpx).setTitle(getString(R.string.menu_share_file, fileTypes[0]));
|
||||
menu.findItem(R.id.menu_share_kml).setTitle(getString(R.string.menu_share_file, fileTypes[1]));
|
||||
menu.findItem(R.id.menu_share_csv).setTitle(getString(R.string.menu_share_file, fileTypes[2]));
|
||||
menu.findItem(R.id.menu_share_tcx).setTitle(getString(R.string.menu_share_file, fileTypes[3]));
|
||||
menu.findItem(R.id.track_detail_share_gpx)
|
||||
.setTitle(getString(R.string.menu_share_file, fileTypes[0]));
|
||||
menu.findItem(R.id.track_detail_share_kml)
|
||||
.setTitle(getString(R.string.menu_share_file, fileTypes[1]));
|
||||
menu.findItem(R.id.track_detail_share_csv)
|
||||
.setTitle(getString(R.string.menu_share_file, fileTypes[2]));
|
||||
menu.findItem(R.id.track_detail_share_tcx)
|
||||
.setTitle(getString(R.string.menu_share_file, fileTypes[3]));
|
||||
|
||||
stopRecordingMenuItem = menu.findItem(R.id.menu_stop_recording);
|
||||
insertMarkerMenuItem = menu.findItem(R.id.menu_insert_marker);
|
||||
playMenuItem = menu.findItem(R.id.menu_play);
|
||||
shareMenuItem = menu.findItem(R.id.menu_share);
|
||||
sendGoogleMenuItem = menu.findItem(R.id.menu_send_google);
|
||||
saveMenuItem = menu.findItem(R.id.menu_save);
|
||||
editMenuItem = menu.findItem(R.id.menu_edit);
|
||||
deleteMenuItem = menu.findItem(R.id.menu_delete);
|
||||
stopRecordingMenuItem = menu.findItem(R.id.track_detail_stop_recording);
|
||||
insertMarkerMenuItem = menu.findItem(R.id.track_detail_insert_marker);
|
||||
playMenuItem = menu.findItem(R.id.track_detail_play);
|
||||
shareMenuItem = menu.findItem(R.id.track_detail_share);
|
||||
sendGoogleMenuItem = menu.findItem(R.id.track_detail_send_google);
|
||||
saveMenuItem = menu.findItem(R.id.track_detail_save);
|
||||
editMenuItem = menu.findItem(R.id.track_detail_edit);
|
||||
deleteMenuItem = menu.findItem(R.id.track_detail_delete);
|
||||
|
||||
updateMenu();
|
||||
return true;
|
||||
@@ -256,13 +255,13 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
|
||||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
String currentTabTag = getTabHost().getCurrentTabTag();
|
||||
menu.findItem(R.id.menu_chart_settings).setVisible(CHART_TAB_TAG.equals(currentTabTag));
|
||||
menu.findItem(R.id.menu_my_location).setVisible(MAP_TAB_TAG.equals(currentTabTag));
|
||||
menu.findItem(R.id.track_detail_chart_settings).setVisible(CHART_TAB_TAG.equals(currentTabTag));
|
||||
menu.findItem(R.id.track_detail_my_location).setVisible(MAP_TAB_TAG.equals(currentTabTag));
|
||||
|
||||
// Set map or satellite mode
|
||||
MapActivity mapActivity = getMapActivity();
|
||||
boolean isSatelliteMode = mapActivity != null ? mapActivity.isSatelliteView() : false;
|
||||
menu.findItem(R.id.menu_satellite_mode).setVisible(MAP_TAB_TAG.equals(currentTabTag))
|
||||
menu.findItem(R.id.track_detail_satellite_mode).setVisible(MAP_TAB_TAG.equals(currentTabTag))
|
||||
.setTitle(isSatelliteMode ? R.string.menu_map_mode : R.string.menu_satellite_mode);
|
||||
|
||||
return super.onPrepareOptionsMenu(menu);
|
||||
@@ -272,98 +271,105 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
MapActivity mapActivity;
|
||||
Intent intent;
|
||||
long trackId = trackDataHub.getSelectedTrackId();
|
||||
switch (item.getItemId()) {
|
||||
case R.id.menu_stop_recording:
|
||||
case android.R.id.home:
|
||||
startTrackListActivity();
|
||||
return true;
|
||||
case R.id.track_detail_stop_recording:
|
||||
updateMenuItems(false);
|
||||
stopRecording();
|
||||
return true;
|
||||
case R.id.menu_insert_marker:
|
||||
case R.id.track_detail_insert_marker:
|
||||
// TODO: Add insert marker when updating WaypointList to ICS
|
||||
return true;
|
||||
case R.id.menu_play:
|
||||
if (PlayTrackUtils.isEarthInstalled(this)) {
|
||||
PlayTrackUtils.playTrack(this, trackId);
|
||||
case R.id.track_detail_play:
|
||||
if (isEarthInstalled()) {
|
||||
AnalyticsUtils.sendPageViews(this, "/action/play");
|
||||
intent = new Intent(this, SaveActivity.class)
|
||||
.putExtra(SaveActivity.EXTRA_TRACK_ID, trackId)
|
||||
.putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) TrackFileFormat.KML)
|
||||
.putExtra(SaveActivity.EXTRA_PLAY_TRACK, true);
|
||||
startActivity(intent);
|
||||
} else {
|
||||
showDialog(DIALOG_INSTALL_EARTH_ID);
|
||||
}
|
||||
return true;
|
||||
case R.id.menu_share_map:
|
||||
case R.id.track_detail_share_map:
|
||||
intent = new Intent(this, UploadServiceChooserActivity.class)
|
||||
.putExtra(SendRequest.SEND_REQUEST_KEY, new SendRequest(trackId, true, false, false));
|
||||
startActivity(intent);
|
||||
return true;
|
||||
case R.id.menu_share_fusion_table:
|
||||
case R.id.track_detail_share_fusion_table:
|
||||
intent = new Intent(this, UploadServiceChooserActivity.class)
|
||||
.putExtra(SendRequest.SEND_REQUEST_KEY, new SendRequest(trackId, false, true, false));
|
||||
startActivity(intent);
|
||||
return true;
|
||||
case R.id.menu_share_gpx:
|
||||
startSaveActivity(trackId, TrackFileFormat.GPX, true);
|
||||
case R.id.track_detail_share_gpx:
|
||||
startSaveActivity(TrackFileFormat.GPX, true);
|
||||
return true;
|
||||
case R.id.menu_share_kml:
|
||||
startSaveActivity(trackId, TrackFileFormat.KML, true);
|
||||
case R.id.track_detail_share_kml:
|
||||
startSaveActivity(TrackFileFormat.KML, true);
|
||||
return true;
|
||||
case R.id.menu_share_csv:
|
||||
startSaveActivity(trackId, TrackFileFormat.CSV, true);
|
||||
case R.id.track_detail_share_csv:
|
||||
startSaveActivity(TrackFileFormat.CSV, true);
|
||||
return true;
|
||||
case R.id.menu_share_tcx:
|
||||
startSaveActivity(trackId, TrackFileFormat.TCX, true);
|
||||
case R.id.track_detail_share_tcx:
|
||||
startSaveActivity(TrackFileFormat.TCX, true);
|
||||
return true;
|
||||
case R.id.menu_markers:
|
||||
case R.id.track_detail_markers:
|
||||
intent = new Intent(this, WaypointsList.class)
|
||||
.putExtra("trackid", trackDataHub.getSelectedTrackId());
|
||||
startActivityForResult(intent, Constants.SHOW_WAYPOINT);
|
||||
return true;
|
||||
case R.id.menu_send_google:
|
||||
case R.id.track_detail_send_google:
|
||||
intent = new Intent(this, UploadServiceChooserActivity.class)
|
||||
.putExtra(SendRequest.SEND_REQUEST_KEY, new SendRequest(trackId, true, true, true));
|
||||
startActivity(intent);
|
||||
return true;
|
||||
case R.id.menu_save_gpx:
|
||||
startSaveActivity(trackId, TrackFileFormat.GPX, false);
|
||||
case R.id.track_detail_save_gpx:
|
||||
startSaveActivity(TrackFileFormat.GPX, false);
|
||||
return true;
|
||||
case R.id.menu_save_kml:
|
||||
startSaveActivity(trackId, TrackFileFormat.KML, false);
|
||||
case R.id.track_detail_save_kml:
|
||||
startSaveActivity(TrackFileFormat.KML, false);
|
||||
return true;
|
||||
case R.id.menu_save_csv:
|
||||
startSaveActivity(trackId, TrackFileFormat.CSV, false);
|
||||
case R.id.track_detail_save_csv:
|
||||
startSaveActivity(TrackFileFormat.CSV, false);
|
||||
return true;
|
||||
case R.id.menu_save_tcx:
|
||||
startSaveActivity(trackId, TrackFileFormat.TCX, false);
|
||||
case R.id.track_detail_save_tcx:
|
||||
startSaveActivity(TrackFileFormat.TCX, false);
|
||||
return true;
|
||||
case R.id.menu_edit:
|
||||
case R.id.track_detail_edit:
|
||||
startActivity(new Intent(this, TrackEditActivity.class)
|
||||
.putExtra(TrackEditActivity.TRACK_ID, trackId));
|
||||
.putExtra(TrackEditActivity.EXTRA_TRACK_ID, trackId));
|
||||
return true;
|
||||
case R.id.menu_delete:
|
||||
case R.id.track_detail_delete:
|
||||
showDialog(DIALOG_DELETE_CURRENT_ID);
|
||||
return true;
|
||||
case R.id.menu_my_location:
|
||||
case R.id.track_detail_my_location:
|
||||
mapActivity = getMapActivity();
|
||||
if (mapActivity != null) {
|
||||
mapActivity.showMyLocation();
|
||||
}
|
||||
return true;
|
||||
case R.id.menu_satellite_mode:
|
||||
case R.id.track_detail_satellite_mode:
|
||||
mapActivity = getMapActivity();
|
||||
if (mapActivity != null) {
|
||||
mapActivity.setSatelliteView(!mapActivity.isSatelliteView());
|
||||
}
|
||||
return true;
|
||||
case R.id.menu_chart_settings:
|
||||
case R.id.track_detail_chart_settings:
|
||||
ChartActivity chartActivity = getChartActivity();
|
||||
if (chartActivity != null) {
|
||||
chartActivity.showChartSettingsDialog();
|
||||
}
|
||||
return true;
|
||||
case R.id.menu_sensor_state:
|
||||
case R.id.track_detail_sensor_state:
|
||||
startActivity(new Intent(this, SensorStateActivity.class));
|
||||
return true;
|
||||
case R.id.menu_settings:
|
||||
case R.id.track_detail_settings:
|
||||
startActivity(new Intent(this, SettingsActivity.class));
|
||||
return true;
|
||||
case R.id.menu_help:
|
||||
case R.id.track_detail_help:
|
||||
startActivity(new Intent(this, WelcomeActivity.class));
|
||||
return true;
|
||||
default:
|
||||
@@ -427,11 +433,37 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the data in the intent.
|
||||
*/
|
||||
private void handleIntent(Intent intent) {
|
||||
// Get the trackid
|
||||
trackId = intent.getLongExtra(EXTRA_TRACK_ID, -1L);
|
||||
if (trackId == -1L) {
|
||||
startTrackListActivity();
|
||||
finish();
|
||||
}
|
||||
trackDataHub.loadTrack(trackId);
|
||||
|
||||
// Get the waypointId
|
||||
long waypointId = intent.getLongExtra(EXTRA_WAYPOINT_ID, -1L);
|
||||
if (waypointId != -1L) {
|
||||
MapActivity mapActivity = getMapActivity();
|
||||
if (mapActivity != null) {
|
||||
getTabHost().setCurrentTab(0);
|
||||
mapActivity.showWaypoint(trackId, waypointId);
|
||||
} else {
|
||||
Log.e(TAG, "MapActivity is null");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the menu.
|
||||
*/
|
||||
private void updateMenu() {
|
||||
updateMenuItems(isRecording());
|
||||
updateMenuItems(
|
||||
trackId == sharedPreferences.getLong(getString(R.string.recording_track_key), -1L));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -475,25 +507,20 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the {@link TrackListActivity} and ends this activity.
|
||||
* Starts the {@link TrackListActivity}.
|
||||
*/
|
||||
private void startTrackListActivity() {
|
||||
Intent intent = new Intent(this, TrackListActivity.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
startActivity(new Intent(this, TrackListActivity.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the {@link SaveActivity} to save a track.
|
||||
*
|
||||
* @param trackId the track id
|
||||
* @param trackFileFormat the track file format
|
||||
* @param shareTrack true to share the track after saving
|
||||
*/
|
||||
private void startSaveActivity(
|
||||
long trackId, TrackFileFormat trackFileFormat, boolean shareTrack) {
|
||||
private void startSaveActivity(TrackFileFormat trackFileFormat, boolean shareTrack) {
|
||||
Intent intent = new Intent(this, SaveActivity.class)
|
||||
.putExtra(SaveActivity.EXTRA_TRACK_ID, trackId)
|
||||
.putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) trackFileFormat)
|
||||
@@ -528,12 +555,27 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
|
||||
long recordingTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1L);
|
||||
if (recordingTrackId != -1L) {
|
||||
Intent intent = new Intent(this, TrackEditActivity.class)
|
||||
.putExtra(TrackEditActivity.SHOW_CANCEL, false)
|
||||
.putExtra(TrackEditActivity.TRACK_ID, recordingTrackId);
|
||||
.putExtra(TrackEditActivity.EXTRA_SHOW_CANCEL, false)
|
||||
.putExtra(TrackEditActivity.EXTRA_TRACK_ID, recordingTrackId);
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if Google Earth app is installed.
|
||||
*/
|
||||
private boolean isEarthInstalled() {
|
||||
List<ResolveInfo> infos = getPackageManager().queryIntentActivities(
|
||||
new Intent().setType(SaveActivity.KML_MIME_TYPE), PackageManager.MATCH_DEFAULT_ONLY);
|
||||
for (ResolveInfo info : infos) {
|
||||
if (info.activityInfo != null && info.activityInfo.packageName != null
|
||||
&& info.activityInfo.packageName.equals(SaveActivity.GOOGLE_EARTH_PACKAGE)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the map activity, can be null.
|
||||
*/
|
||||
|
||||
@@ -37,8 +37,8 @@ import android.widget.EditText;
|
||||
*/
|
||||
public class TrackEditActivity extends Activity implements OnClickListener {
|
||||
|
||||
public static final String TRACK_ID = "trackId";
|
||||
public static final String SHOW_CANCEL = "showCancel";
|
||||
public static final String EXTRA_TRACK_ID = "track_id";
|
||||
public static final String EXTRA_SHOW_CANCEL = "show_cancel";
|
||||
|
||||
private static final String TAG = TrackEditActivity.class.getSimpleName();
|
||||
|
||||
@@ -55,7 +55,7 @@ public class TrackEditActivity extends Activity implements OnClickListener {
|
||||
super.onCreate(bundle);
|
||||
setContentView(R.layout.track_edit);
|
||||
|
||||
trackId = getIntent().getLongExtra(TRACK_ID, -1);
|
||||
trackId = getIntent().getLongExtra(EXTRA_TRACK_ID, -1);
|
||||
if (trackId < 0) {
|
||||
Log.e(TAG, "invalid trackId.");
|
||||
finish();
|
||||
@@ -87,7 +87,7 @@ public class TrackEditActivity extends Activity implements OnClickListener {
|
||||
save.setOnClickListener(this);
|
||||
|
||||
Button cancel = (Button) findViewById(R.id.track_edit_cancel);
|
||||
if (getIntent().getBooleanExtra(SHOW_CANCEL, true)) {
|
||||
if (getIntent().getBooleanExtra(EXTRA_SHOW_CANCEL, true)) {
|
||||
cancel.setOnClickListener(this);
|
||||
cancel.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
|
||||
@@ -41,6 +41,7 @@ import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
import android.speech.tts.TextToSpeech;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v4.app.LoaderManager.LoaderCallbacks;
|
||||
@@ -69,7 +70,6 @@ public class TrackListActivity extends FragmentActivity {
|
||||
private static final String CHECK_UNITS_DIALOG_TAG = "checkUnitsDialog";
|
||||
private static final String DELETE_ALL_DIALOG_TAG = "deleteAllDialog";
|
||||
private static final String EULA_DIALOG_TAG = "eulaDialog";
|
||||
private static final String EXPORT_ALL_DIALOG_TAG = "exportAllDialog";
|
||||
|
||||
private static final int WELCOME_ACTIVITY_REQUEST_CODE = 0;
|
||||
|
||||
@@ -169,7 +169,8 @@ public class TrackListActivity extends FragmentActivity {
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
Intent intent = new Intent(TrackListActivity.this, TrackDetailActivity.class)
|
||||
.putExtra(TrackDetailActivity.TRACK_ID, id);
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(TrackDetailActivity.EXTRA_TRACK_ID, id);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
@@ -238,15 +239,10 @@ public class TrackListActivity extends FragmentActivity {
|
||||
});
|
||||
|
||||
if (!EulaUtils.getEulaValue(this)) {
|
||||
new EulaDialogFragment().show(getSupportFragmentManager(), EULA_DIALOG_TAG);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
if (isRecording()) {
|
||||
trackRecordingServiceConnection.startAndBind();
|
||||
Fragment fragment = getSupportFragmentManager().findFragmentByTag(EULA_DIALOG_TAG);
|
||||
if (fragment == null) {
|
||||
new EulaDialogFragment().show(getSupportFragmentManager(), EULA_DIALOG_TAG);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -283,13 +279,22 @@ public class TrackListActivity extends FragmentActivity {
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.track_list, menu);
|
||||
|
||||
recordTrack = menu.findItem(R.id.menu_record_track);
|
||||
stopRecording = menu.findItem(R.id.menu_stop_recording);
|
||||
search = menu.findItem(R.id.menu_search);
|
||||
importAll = menu.findItem(R.id.menu_import_all);
|
||||
exportAll = menu.findItem(R.id.menu_export_all);
|
||||
deleteAll = menu.findItem(R.id.menu_delete_all);
|
||||
String fileTypes[] = getResources().getStringArray(R.array.file_types);
|
||||
menu.findItem(R.id.track_list_export_gpx)
|
||||
.setTitle(getString(R.string.menu_export_all_format, fileTypes[0]));
|
||||
menu.findItem(R.id.track_list_export_kml)
|
||||
.setTitle(getString(R.string.menu_export_all_format, fileTypes[1]));
|
||||
menu.findItem(R.id.track_list_export_csv)
|
||||
.setTitle(getString(R.string.menu_export_all_format, fileTypes[2]));
|
||||
menu.findItem(R.id.track_list_export_tcx)
|
||||
.setTitle(getString(R.string.menu_export_all_format, fileTypes[3]));
|
||||
|
||||
recordTrack = menu.findItem(R.id.track_list_record_track);
|
||||
stopRecording = menu.findItem(R.id.track_list_stop_recording);
|
||||
search = menu.findItem(R.id.track_list_search);
|
||||
importAll = menu.findItem(R.id.track_list_import_all);
|
||||
exportAll = menu.findItem(R.id.track_list_export_all);
|
||||
deleteAll = menu.findItem(R.id.track_list_delete_all);
|
||||
|
||||
ApiAdapterFactory.getApiAdapter().configureSearchWidget(this, search);
|
||||
updateMenu();
|
||||
@@ -330,33 +335,46 @@ public class TrackListActivity extends FragmentActivity {
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.menu_record_track:
|
||||
case R.id.track_list_record_track:
|
||||
updateMenuItems(true);
|
||||
startRecording();
|
||||
return true;
|
||||
case R.id.menu_stop_recording:
|
||||
case R.id.track_list_stop_recording:
|
||||
updateMenuItems(false);
|
||||
stopRecording();
|
||||
return true;
|
||||
case R.id.menu_search:
|
||||
case R.id.track_list_search:
|
||||
return ApiAdapterFactory.getApiAdapter().handleSearchMenuSelection(this);
|
||||
case R.id.menu_import_all:
|
||||
case R.id.track_list_import_all:
|
||||
startActivity(
|
||||
new Intent(this, ImportActivity.class).putExtra(ImportActivity.EXTRA_IMPORT_ALL, true));
|
||||
return true;
|
||||
case R.id.menu_export_all:
|
||||
new ExportAllDialogFragment().show(getSupportFragmentManager(), EXPORT_ALL_DIALOG_TAG);
|
||||
case R.id.track_list_export_gpx:
|
||||
startActivity(new Intent(this, ExportActivity.class).putExtra(
|
||||
ExportActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) TrackFileFormat.GPX));
|
||||
return true;
|
||||
case R.id.menu_delete_all:
|
||||
case R.id.track_list_export_kml:
|
||||
startActivity(new Intent(this, ExportActivity.class).putExtra(
|
||||
ExportActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) TrackFileFormat.KML));
|
||||
return true;
|
||||
case R.id.track_list_export_csv:
|
||||
startActivity(new Intent(this, ExportActivity.class).putExtra(
|
||||
ExportActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) TrackFileFormat.CSV));
|
||||
return true;
|
||||
case R.id.track_list_export_tcx:
|
||||
startActivity(new Intent(this, ExportActivity.class).putExtra(
|
||||
ExportActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) TrackFileFormat.TCX));
|
||||
return true;
|
||||
case R.id.track_list_delete_all:
|
||||
new DeleteAllDialogFragment().show(getSupportFragmentManager(), DELETE_ALL_DIALOG_TAG);
|
||||
return true;
|
||||
case R.id.menu_aggregated_statistics:
|
||||
case R.id.track_list_aggregated_statistics:
|
||||
startActivity(new Intent(this, AggregatedStatsActivity.class));
|
||||
return true;
|
||||
case R.id.menu_settings:
|
||||
case R.id.track_list_settings:
|
||||
startActivity(new Intent(this, SettingsActivity.class));
|
||||
return true;
|
||||
case R.id.menu_help:
|
||||
case R.id.track_list_help:
|
||||
startActivity(new Intent(this, WelcomeActivity.class));
|
||||
return true;
|
||||
default:
|
||||
@@ -398,8 +416,8 @@ public class TrackListActivity extends FragmentActivity {
|
||||
service.endCurrentTrack();
|
||||
if (recordingTrackId != -1L) {
|
||||
Intent intent = new Intent(this, TrackEditActivity.class)
|
||||
.putExtra(TrackEditActivity.SHOW_CANCEL, false)
|
||||
.putExtra(TrackEditActivity.TRACK_ID, recordingTrackId);
|
||||
.putExtra(TrackEditActivity.EXTRA_SHOW_CANCEL, false)
|
||||
.putExtra(TrackEditActivity.EXTRA_TRACK_ID, recordingTrackId);
|
||||
startActivity(intent);
|
||||
}
|
||||
recordingTrackId = -1L;
|
||||
@@ -503,33 +521,4 @@ public class TrackListActivity extends FragmentActivity {
|
||||
.create();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Export All DialogFragment.
|
||||
*/
|
||||
public static class ExportAllDialogFragment extends DialogFragment {
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
String fileTypes[] = getResources().getStringArray(R.array.file_types);
|
||||
String[] choices = new String[fileTypes.length];
|
||||
for (int i = 0; i < fileTypes.length; i++) {
|
||||
choices[i] = getString(R.string.menu_export_all_format, fileTypes[i]);
|
||||
}
|
||||
return new AlertDialog.Builder(getActivity()).setNegativeButton(R.string.generic_cancel, null)
|
||||
.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
int index = ((AlertDialog) dialog).getListView().getCheckedItemPosition();
|
||||
Intent intent = new Intent(getActivity(), ExportActivity.class).putExtra(
|
||||
ExportActivity.EXTRA_TRACK_FILE_FORMAT,
|
||||
(Parcelable) TrackFileFormat.values()[index]);
|
||||
getActivity().startActivity(intent);
|
||||
}
|
||||
})
|
||||
.setSingleChoiceItems(choices, 0, null)
|
||||
.setTitle(R.string.menu_export_all)
|
||||
.create();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,9 +92,8 @@ public class RestoreActivity extends Activity {
|
||||
public void onAsyncTaskCompleted(boolean success, int messageId) {
|
||||
removeDialog(DIALOG_PROGRESS_ID);
|
||||
Toast.makeText(this, messageId, success ? Toast.LENGTH_SHORT : Toast.LENGTH_LONG).show();
|
||||
startActivity(
|
||||
new Intent(this, TrackListActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
|
||||
finish();
|
||||
startActivity(new Intent(this, TrackListActivity.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,7 +20,6 @@ import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
|
||||
import com.google.android.apps.mytracks.io.file.TrackWriterFactory.TrackFileFormat;
|
||||
import com.google.android.apps.mytracks.util.DialogUtils;
|
||||
import com.google.android.apps.mytracks.util.FileUtils;
|
||||
import com.google.android.apps.mytracks.util.PlayTrackUtils;
|
||||
import com.google.android.maps.mytracks.R;
|
||||
|
||||
import android.app.Activity;
|
||||
@@ -48,8 +47,13 @@ public class SaveActivity extends Activity {
|
||||
public static final String EXTRA_SHARE_TRACK = "share_track";
|
||||
public static final String EXTRA_PLAY_TRACK = "play_track";
|
||||
|
||||
public static final String KML_MIME_TYPE = "application/vnd.google-earth.kml+xml";
|
||||
public static final String GOOGLE_EARTH_PACKAGE = "com.google.earth";
|
||||
|
||||
private static final String TAG = SaveActivity.class.getSimpleName();
|
||||
|
||||
private static final String TOUR_FEATURE_ID = "com.google.earth.EXTRA.tour_feature_id";
|
||||
private static final String GOOGLE_EARTH_CLASS = "com.google.earth.EarthActivity";
|
||||
|
||||
private static final int DIALOG_PROGRESS_ID = 0;
|
||||
private static final int DIALOG_RESULT_ID = 1;
|
||||
|
||||
@@ -206,11 +210,10 @@ public class SaveActivity extends Activity {
|
||||
startActivity(Intent.createChooser(intent, getString(R.string.share_track_picker_title)));
|
||||
} else if (playTrack) {
|
||||
Intent intent = new Intent()
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(PlayTrackUtils.TOUR_FEATURE_ID, KmlTrackWriter.TOUR_FEATURE_ID)
|
||||
.setClassName(PlayTrackUtils.GOOGLE_EARTH_PACKAGE, PlayTrackUtils.GOOGLE_EARTH_CLASS)
|
||||
.setDataAndType(Uri.fromFile(new File(filePath)), PlayTrackUtils.KML_MIME_TYPE);
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(TOUR_FEATURE_ID, KmlTrackWriter.TOUR_FEATURE_ID)
|
||||
.setClassName(GOOGLE_EARTH_PACKAGE, GOOGLE_EARTH_CLASS)
|
||||
.setDataAndType(Uri.fromFile(new File(filePath)), KML_MIME_TYPE);
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -485,7 +485,8 @@ public class TrackRecordingService extends Service {
|
||||
R.drawable.arrow_320, null /* tickerText */,
|
||||
System.currentTimeMillis());
|
||||
Intent intent = new Intent(this, TrackDetailActivity.class)
|
||||
.putExtra(TrackDetailActivity.TRACK_ID, recordingTrackId);
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
.putExtra(TrackDetailActivity.EXTRA_TRACK_ID, recordingTrackId);
|
||||
PendingIntent contentIntent = PendingIntent.getActivity(
|
||||
this, 0 /* requestCode */, intent, 0 /* flags */);
|
||||
notification.setLatestEventInfo(this, getString(R.string.my_tracks_app_name),
|
||||
|
||||
@@ -17,11 +17,11 @@
|
||||
package com.google.android.apps.mytracks.util;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.ActionBar;
|
||||
import android.app.Activity;
|
||||
import android.app.SearchManager;
|
||||
import android.content.Context;
|
||||
import android.view.MenuItem;
|
||||
import android.view.Window;
|
||||
import android.widget.SearchView;
|
||||
|
||||
/**
|
||||
@@ -33,8 +33,10 @@ import android.widget.SearchView;
|
||||
public class Api11Adapter extends Api10Adapter {
|
||||
|
||||
@Override
|
||||
public void showActionBar(Activity activity) {
|
||||
activity.requestWindowFeature(Window.FEATURE_ACTION_BAR);
|
||||
public void configureActionBarHomeAsUp(Activity activity) {
|
||||
ActionBar actionBar = activity.getActionBar();
|
||||
actionBar.setHomeButtonEnabled(true);
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -104,7 +104,7 @@ public class Api7Adapter implements ApiAdapter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showActionBar(Activity activity) {
|
||||
public void configureActionBarHomeAsUp(Activity activity) {
|
||||
// Action bar not available, just hide the title and let actions be shown
|
||||
// via the regular menu.
|
||||
activity.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
|
||||
@@ -101,15 +101,15 @@ public interface ApiAdapter {
|
||||
*/
|
||||
public BluetoothSocket getBluetoothSocket(BluetoothDevice bluetoothDevice) throws IOException;
|
||||
|
||||
/**
|
||||
* Shows the action bar, if the current system supports it.
|
||||
* If it's not supported, the title bar will be kept hidden.
|
||||
*
|
||||
/**
|
||||
* Configures the action bar with the Home button as an Up button. If the
|
||||
* system doesn't support action bar, hide the title bar.
|
||||
* <p>
|
||||
* Due to changes in API level 11.
|
||||
*
|
||||
* @param activity the current activity
|
||||
*/
|
||||
public void showActionBar(Activity activity);
|
||||
public void configureActionBarHomeAsUp(Activity activity);
|
||||
|
||||
/**
|
||||
* Configures the search widget.
|
||||
|
||||
@@ -1,108 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||
* use this file except in compliance with the License. You may obtain a copy of
|
||||
* the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.android.apps.mytracks.util;
|
||||
|
||||
import com.google.android.apps.mytracks.io.file.SaveActivity;
|
||||
import com.google.android.apps.mytracks.io.file.TrackWriterFactory.TrackFileFormat;
|
||||
import com.google.android.maps.mytracks.R;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.net.Uri;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Utilities for playing a track on Google Earth.
|
||||
*
|
||||
* @author Jimmy Shih
|
||||
*/
|
||||
public class PlayTrackUtils {
|
||||
|
||||
/**
|
||||
* KML mime type.
|
||||
*/
|
||||
public static final String KML_MIME_TYPE = "application/vnd.google-earth.kml+xml";
|
||||
public static final String TOUR_FEATURE_ID = "com.google.earth.EXTRA.tour_feature_id";
|
||||
|
||||
public static final String GOOGLE_EARTH_PACKAGE = "com.google.earth";
|
||||
public static final String GOOGLE_EARTH_CLASS = "com.google.earth.EarthActivity";
|
||||
private static final String EARTN_MARKET_URI = "market://details?id=" + GOOGLE_EARTH_PACKAGE;
|
||||
|
||||
private PlayTrackUtils() {}
|
||||
|
||||
/**
|
||||
* Returns true if a Google Earth app that can handle KML mine type is
|
||||
* installed.
|
||||
*
|
||||
* @param context the context
|
||||
*/
|
||||
public static boolean isEarthInstalled(Context context) {
|
||||
List<ResolveInfo> infos = context.getPackageManager().queryIntentActivities(
|
||||
new Intent().setType(KML_MIME_TYPE), PackageManager.MATCH_DEFAULT_ONLY);
|
||||
for (ResolveInfo info : infos) {
|
||||
if (info.activityInfo != null && info.activityInfo.packageName != null
|
||||
&& info.activityInfo.packageName.equals(GOOGLE_EARTH_PACKAGE)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Plays a track by sending an intent to {@link SaveActivity}.
|
||||
*
|
||||
* @param context the context
|
||||
* @param trackId the track id
|
||||
*/
|
||||
public static void playTrack(Context context, long trackId) {
|
||||
AnalyticsUtils.sendPageViews(context, "/action/play");
|
||||
|
||||
Intent intent = new Intent(context, SaveActivity.class)
|
||||
.putExtra(SaveActivity.EXTRA_TRACK_ID, trackId)
|
||||
.putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) TrackFileFormat.KML)
|
||||
.putExtra(SaveActivity.EXTRA_PLAY_TRACK, true);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a dialog to install Google Earth from the Android Market.
|
||||
*
|
||||
* @param context the context
|
||||
*/
|
||||
public static Dialog createInstallEarthDialog(final Context context) {
|
||||
return new AlertDialog.Builder(context)
|
||||
.setCancelable(true)
|
||||
.setMessage(R.string.track_detail_install_earth_message)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
Intent intent = new Intent();
|
||||
intent.setData(Uri.parse(EARTN_MARKET_URI));
|
||||
context.startActivity(intent);
|
||||
}
|
||||
})
|
||||
.create();
|
||||
}
|
||||
}
|
||||
@@ -145,9 +145,10 @@ public class TrackWidgetProvider
|
||||
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.track_widget);
|
||||
|
||||
// Make all of the stats open the mytracks activity.
|
||||
Intent intent = new Intent(context, TrackDetailActivity.class);
|
||||
Intent intent = new Intent(context, TrackDetailActivity.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
if (track != null) {
|
||||
intent.putExtra(TrackDetailActivity.TRACK_ID, track.getId());
|
||||
intent.putExtra(TrackDetailActivity.EXTRA_TRACK_ID, track.getId());
|
||||
}
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
|
||||
views.setOnClickPendingIntent(R.id.appwidget_track_statistics, pendingIntent);
|
||||
|
||||
Reference in New Issue
Block a user