diff --git a/MyTracks/res/drawable-hdpi/menu_insert_marker.png b/MyTracks/res/drawable-hdpi/menu_insert_marker.png new file mode 100644 index 000000000..e6c7bf317 Binary files /dev/null and b/MyTracks/res/drawable-hdpi/menu_insert_marker.png differ diff --git a/MyTracks/res/drawable-hdpi/menu_play.png b/MyTracks/res/drawable-hdpi/menu_play.png new file mode 100644 index 000000000..df8a2ca28 Binary files /dev/null and b/MyTracks/res/drawable-hdpi/menu_play.png differ diff --git a/MyTracks/res/drawable-hdpi/menu_share.png b/MyTracks/res/drawable-hdpi/menu_share.png new file mode 100644 index 000000000..c329f58da Binary files /dev/null and b/MyTracks/res/drawable-hdpi/menu_share.png differ diff --git a/MyTracks/res/drawable-mdpi/menu_insert_marker.png b/MyTracks/res/drawable-mdpi/menu_insert_marker.png new file mode 100644 index 000000000..de9a29e7c Binary files /dev/null and b/MyTracks/res/drawable-mdpi/menu_insert_marker.png differ diff --git a/MyTracks/res/drawable-mdpi/menu_play.png b/MyTracks/res/drawable-mdpi/menu_play.png new file mode 100644 index 000000000..6a40cd5f7 Binary files /dev/null and b/MyTracks/res/drawable-mdpi/menu_play.png differ diff --git a/MyTracks/res/drawable-mdpi/menu_share.png b/MyTracks/res/drawable-mdpi/menu_share.png new file mode 100644 index 000000000..056deb57b Binary files /dev/null and b/MyTracks/res/drawable-mdpi/menu_share.png differ diff --git a/MyTracks/res/drawable-xhdpi/menu_insert_marker.png b/MyTracks/res/drawable-xhdpi/menu_insert_marker.png new file mode 100644 index 000000000..6b197c30f Binary files /dev/null and b/MyTracks/res/drawable-xhdpi/menu_insert_marker.png differ diff --git a/MyTracks/res/drawable-xhdpi/menu_play.png b/MyTracks/res/drawable-xhdpi/menu_play.png new file mode 100644 index 000000000..51124993d Binary files /dev/null and b/MyTracks/res/drawable-xhdpi/menu_play.png differ diff --git a/MyTracks/res/drawable-xhdpi/menu_share.png b/MyTracks/res/drawable-xhdpi/menu_share.png new file mode 100644 index 000000000..15549b04e Binary files /dev/null and b/MyTracks/res/drawable-xhdpi/menu_share.png differ diff --git a/MyTracks/res/layout/mytracks_layout.xml b/MyTracks/res/layout/mytracks_layout.xml index 203d0636a..20fec4b55 100644 --- a/MyTracks/res/layout/mytracks_layout.xml +++ b/MyTracks/res/layout/mytracks_layout.xml @@ -59,23 +59,4 @@ limitations under the License. android:minHeight="80dp" android:layout_gravity="center"/> - - - - diff --git a/MyTracks/res/menu/track_detail.xml b/MyTracks/res/menu/track_detail.xml index 95d8bbca8..f318173c9 100644 --- a/MyTracks/res/menu/track_detail.xml +++ b/MyTracks/res/menu/track_detail.xml @@ -15,43 +15,74 @@ See the License for the specific language governing permissions and limitations under the License. --> - + + + + + + + + + + + + + android:id="@+id/menu_send_google" + android:title="@string/menu_send_google"/> + + + + + + + + + + + android:title="@string/menu_my_location"/> + android:title="@string/menu_satellite_mode"/> + android:icon="@drawable/ic_menu_chartsettings" + android:id="@+id/menu_chart_settings" + android:title="@string/menu_chart_settings"/> - Delete all + + Delete + + + Edit + Export all + + Export as %1$s + Help @@ -989,6 +1004,10 @@ limitations under the License. translation_description="In the menu, to import all the tracks from the SD card."> Import all + + Insert marker + Map mode @@ -1001,6 +1020,10 @@ limitations under the License. translation_description="In the menu, to display the user's current location."> My location + + Play + Record track @@ -1009,10 +1032,25 @@ limitations under the License. translation_description="In the menu, to switch the display to the satellite mode."> Satellite mode + + Save to SD card... + + + As a %1$s file + Search + + Send to Google... + Sensor state @@ -1025,7 +1063,31 @@ limitations under the License. translation_description="In the menu, to stop recording a track."> Stop recording + + Share with friends... + + + A %1$s file + + + Fusion Table + + + Map + + No tracks or waypoints matched your search. + + In track \'%1$s\'. + @@ -2233,7 +2302,22 @@ limitations under the License. Total time - + + + The track and its markers will be permanently deleted from the phone. + + + You need Google Earth to play the track. Do you want to install from the Market? + + + Track + @@ -2258,165 +2342,32 @@ limitations under the License. track name."> Track name - - - - Track - - - Clear map - - - This track - + translation_description="When deleting all the tracks, the confirmation dialog message informing + the user that all tracks and markers will be permanently deleted from the phone."> All tracks and markers will be permanently deleted from the phone. - - Delete from phone... + + Unable to start recording. No GPS location. Try again. - - The track and its markers will be permanently deleted from the phone. - - - Edit - - - Export as %1$s - - - Play - - - You need Google Earth to play the track. Do you want to install from the Market? - - - As a %1$s file - - - Save to SD card... - - - Send to Google... - - - A %1$s file - - - Fusion Table - - - Map - - - Share with friends... - - - Show on map - - - In track \'%1$s\'. + + Now recording a new track. + %1$d: track number. E.g., '1'."> Track %1$d - - Unable to start recording. No GPS location. Try again. - + informing the user that My Tracks is actively recording his track."> Recording your track... - - Now recording a new track. - = 0) { - Toast.makeText(this, R.string.marker_insert_success, Toast.LENGTH_LONG).show(); - } - return waypointId; - } catch (RemoteException e) { - Toast.makeText(this, R.string.marker_insert_error, Toast.LENGTH_LONG).show(); - throw e; - } - } - - private void startRecordingNewTrack( - ITrackRecordingService trackRecordingService) { - try { - long recordingTrackId = trackRecordingService.startNewTrack(); - // Select the recording track. - trackDataHub.loadTrack(recordingTrackId); - Toast.makeText(this, getString(R.string.track_record_success), Toast.LENGTH_SHORT).show(); - // TODO: We catch Exception, because after eliminating the service process - // all exceptions it may throw are no longer wrapped in a RemoteException. - } catch (Exception e) { - Toast.makeText(this, getString(R.string.track_record_error), Toast.LENGTH_SHORT).show(); - Log.w(TAG, "Unable to start recording.", e); - } + private void startSaveActivity( + long trackId, 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) + .putExtra(SaveActivity.EXTRA_SHARE_TRACK, shareTrack); + startActivity(intent); } /** - * Starts the track recording service (if not already running) and binds to - * it. Starts recording a new track. + * Returns true if recording. */ - @VisibleForTesting - void startRecording() { - synchronized (trackRecordingServiceConnection) { - startNewTrackRequested = true; - trackRecordingServiceConnection.startAndBind(); - - // Binding was already requested before, it either already happened - // (in which case running the callback manually triggers the actual recording start) - // or it will happen in the future - // (in which case running the callback now will have no effect). - serviceBindCallback.run(); - } + private boolean isRecording() { + return ServiceUtils.isRecording( + this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences); } /** - * Stops the track recording service and unbinds from it. Will display a toast - * "Stopped recording" and pop up the Track Details activity. + * Stops the recording and the track recording service connection and shows + * {@link TrackEditActivity}. */ - @VisibleForTesting - void stopRecording() { - // Save the track id as the shared preference will overwrite the recording track id. - long currentTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1L); - - ITrackRecordingService trackRecordingService = trackRecordingServiceConnection.getServiceIfBound(); + private void stopRecording() { + ITrackRecordingService trackRecordingService = trackRecordingServiceConnection + .getServiceIfBound(); if (trackRecordingService != null) { try { trackRecordingService.endCurrentTrack(); @@ -423,14 +518,28 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener Log.e(TAG, "Unable to stop recording.", e); } } - trackRecordingServiceConnection.stop(); - if (currentTrackId > 0) { + 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, currentTrackId); + .putExtra(TrackEditActivity.TRACK_ID, recordingTrackId); startActivity(intent); } } + + /** + * Gets the map activity, can be null. + */ + private MapActivity getMapActivity() { + return (MapActivity) getLocalActivityManager().getActivity(MAP_TAB_TAG); + } + + /** + * Gets the chart activity, can be null. + */ + private ChartActivity getChartActivity() { + return (ChartActivity) getLocalActivityManager().getActivity(CHART_TAB_TAG); + } } \ No newline at end of file diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java index 5c7a34251..da4e9f464 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java @@ -35,6 +35,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; +import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.database.Cursor; import android.os.Bundle; import android.os.Parcelable; @@ -67,11 +68,11 @@ public class TrackListActivity extends FragmentActivity { private static final String TAG = TrackListActivity.class.getSimpleName(); 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 EULA_DIALOG_TAG = "eulaDialog"; private static final String EXPORT_ALL_DIALOG_TAG = "exportAllDialog"; - + private static final int WELCOME_ACTIVITY_REQUEST_CODE = 0; - + private static final String[] PROJECTION = new String[] { TracksColumns._ID, TracksColumns.NAME, @@ -81,21 +82,57 @@ public class TrackListActivity extends FragmentActivity { TracksColumns.STARTTIME, TracksColumns.DESCRIPTION }; - // Callback when the trackRecordingServiceConnection binding changes + // Callback when the trackRecordingServiceConnection binding changes. private final Runnable bindChangedCallback = new Runnable() { @Override public void run() { - synchronized (trackRecordingServiceConnection) { - if (startNewRecording) { - startRecording(); + if (startNewRecording) { + ITrackRecordingService service = trackRecordingServiceConnection.getServiceIfBound(); + if (service != null) { + try { + recordingTrackId = service.startNewTrack(); + startNewRecording = false; + Toast.makeText( + TrackListActivity.this, R.string.track_list_record_success, Toast.LENGTH_SHORT) + .show(); + Log.d(TAG, "Started a new recording"); + } catch (Exception e) { + Toast.makeText( + TrackListActivity.this, R.string.track_list_record_error, Toast.LENGTH_LONG).show(); + Log.d(TAG, "Unable to start a new recording.", e); + } } else { - updateMenu(); - adapter.notifyDataSetChanged(); + Log.d(TAG, "service not available to start a new recording"); } } } }; + /* + * Note that sharedPreferenceChangeListenr cannot be an anonymous inner class. + * Anonymous inner class will get garbage collected. + */ + private final OnSharedPreferenceChangeListener sharedPreferenceChangeListener = + new OnSharedPreferenceChangeListener() { + @Override + public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { + if (key == null) { + return; + } + if (key.equals(getString(R.string.metric_units_key))) { + metricUnits = preferences.getBoolean(getString(R.string.metric_units_key), true); + } + if (key.equals(getString(R.string.recording_track_key))) { + recordingTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1L); + if (isRecording()) { + trackRecordingServiceConnection.startAndBind(); + } + updateMenu(); + } + adapter.notifyDataSetChanged(); + } + }; + private TrackRecordingServiceConnection trackRecordingServiceConnection; private SharedPreferences sharedPreferences; private boolean metricUnits; @@ -103,7 +140,7 @@ public class TrackListActivity extends FragmentActivity { private ListView listView; private ResourceCursorAdapter adapter; - // True to start a new recording + // True to start a new recording. private boolean startNewRecording = false; private MenuItem recordTrack; @@ -119,28 +156,12 @@ public class TrackListActivity extends FragmentActivity { setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM); setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); setContentView(R.layout.track_list); - + trackRecordingServiceConnection = new TrackRecordingServiceConnection( this, bindChangedCallback); sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE); - sharedPreferences.registerOnSharedPreferenceChangeListener( - new SharedPreferences.OnSharedPreferenceChangeListener() { - @Override - public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { - if (key == null) { - return; - } - if (key.equals(getString(R.string.metric_units_key))) { - metricUnits = preferences.getBoolean(getString(R.string.metric_units_key), true); - } - if (key.equals(getString(R.string.recording_track_key))) { - recordingTrackId = sharedPreferences.getLong( - getString(R.string.recording_track_key), -1L); - } - adapter.notifyDataSetChanged(); - } - }); + sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); metricUnits = sharedPreferences.getBoolean(getString(R.string.metric_units_key), true); recordingTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1L); @@ -216,7 +237,7 @@ public class TrackListActivity extends FragmentActivity { adapter.swapCursor(null); } }); - + if (!EulaUtils.getEulaValue(this)) { new EulaDialogFragment().show(getSupportFragmentManager(), EULA_DIALOG_TAG); } @@ -225,18 +246,16 @@ public class TrackListActivity extends FragmentActivity { @Override protected void onStart() { super.onStart(); - if (ServiceUtils.isRecording( - this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences)) { + if (isRecording()) { trackRecordingServiceConnection.startAndBind(); } } - + @Override protected void onResume() { super.onResume(); trackRecordingServiceConnection.bindIfRunning(); } - @Override protected void onDestroy() { @@ -250,9 +269,10 @@ public class TrackListActivity extends FragmentActivity { if (!CheckUnitsUtils.getCheckUnitsValue(this)) { /* * See bug http://code.google.com/p/android/issues/detail?id=23761. - * Instead of - * new CheckUnitsDialogFragment().show(getSupportFragmentManager(), CHECK_UNITS_DIALOG_TAG) - * Need to use commitAllowingStateLoss with the support package. + * Cannot use + * CheckUnitsDialogFragment().show(getSupportFragmentManager(), + * CHECK_UNITS_DIALOG_TAG). Need to use commitAllowingStateLoss with the + * support package. */ FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(new CheckUnitsDialogFragment(), CHECK_UNITS_DIALOG_TAG); @@ -260,7 +280,7 @@ public class TrackListActivity extends FragmentActivity { } } } - + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.track_list, menu); @@ -281,8 +301,7 @@ public class TrackListActivity extends FragmentActivity { * Updates the menu based on whether My Tracks is recording or not. */ private void updateMenu() { - boolean isRecording = ServiceUtils.isRecording( - this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences); + boolean isRecording = isRecording(); updateMenuItems(isRecording); } @@ -314,23 +333,11 @@ public class TrackListActivity extends FragmentActivity { switch (item.getItemId()) { case R.id.menu_record_track: updateMenuItems(true); - synchronized (trackRecordingServiceConnection) { - startNewRecording = true; - trackRecordingServiceConnection.startAndBind(); - - /* - * If the binding has happened, then invoke the callback to start a - * new recording. If the binding hasn't happened, then invoking the - * callback will have no effect. But when the binding occurs, the - * callback will get invoked. - */ - bindChangedCallback.run(); - } + startRecording(); return true; case R.id.menu_stop_recording: updateMenuItems(false); stopRecording(); - trackRecordingServiceConnection.stop(); return true; case R.id.menu_search: return ApiAdapterFactory.getApiAdapter().handleSearchMenuSelection(this); @@ -358,27 +365,28 @@ public class TrackListActivity extends FragmentActivity { } } + /** + * Returns true if recording. + */ + private boolean isRecording() { + return ServiceUtils.isRecording( + this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences); + } + /** * Starts a new recording. */ private void startRecording() { - ITrackRecordingService service = trackRecordingServiceConnection.getServiceIfBound(); - if (service != null) { - try { - recordingTrackId = service.startNewTrack(); - startNewRecording = false; - adapter.notifyDataSetChanged(); - Toast.makeText(TrackListActivity.this, R.string.track_record_success, Toast.LENGTH_SHORT) - .show(); - Log.d(TAG, "Started a new recording"); - } catch (Exception e) { - Toast.makeText(TrackListActivity.this, R.string.track_record_error, Toast.LENGTH_LONG) - .show(); - Log.d(TAG, "Unable to start a new recording.", e); - } - } else { - Log.d(TAG, "service not available to start a new recording"); - } + startNewRecording = true; + trackRecordingServiceConnection.startAndBind(); + + /* + * If the binding has happened, then invoke the callback to start a new + * recording. If the binding hasn't happened, then invoking the callback + * will have no effect. But when the binding occurs, the callback will get + * invoked. + */ + bindChangedCallback.run(); } /** @@ -396,17 +404,27 @@ public class TrackListActivity extends FragmentActivity { startActivity(intent); } recordingTrackId = -1L; - adapter.notifyDataSetChanged(); } catch (Exception e) { Log.d(TAG, "Unable to stop recording.", e); } } + trackRecordingServiceConnection.stop(); + } + + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_SEARCH) { + if (ApiAdapterFactory.getApiAdapter().handleSearchKey(search)) { + return true; + } + } + return super.onKeyUp(keyCode, event); } /** * Check Units DialogFragment. */ - private static class CheckUnitsDialogFragment extends DialogFragment { + public static class CheckUnitsDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -438,7 +456,7 @@ public class TrackListActivity extends FragmentActivity { /** * Delete All DialogFragment. */ - private static class DeleteAllDialogFragment extends DialogFragment { + public static class DeleteAllDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -446,7 +464,7 @@ public class TrackListActivity extends FragmentActivity { R.string.track_list_delete_all_confirm_message, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - MyTracksProviderUtils.Factory.get(getActivity()).deleteAllTracks(); + MyTracksProviderUtils.Factory.get(getActivity()).deleteAllTracks(); } }); } @@ -455,14 +473,13 @@ public class TrackListActivity extends FragmentActivity { /** * Eula DialogFragment. */ - private static class EulaDialogFragment extends DialogFragment { + public static class EulaDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { return new AlertDialog.Builder(getActivity()) .setCancelable(true) - .setMessage( - EulaUtils.getEulaMessage(getActivity())) + .setMessage(EulaUtils.getEulaMessage(getActivity())) .setNegativeButton(R.string.eula_decline, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { @@ -491,15 +508,14 @@ public class TrackListActivity extends FragmentActivity { /** * Export All DialogFragment. */ - private static class ExportAllDialogFragment extends DialogFragment { + public static class ExportAllDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - String exportFileFormat = getString(R.string.track_list_export_file); String fileTypes[] = getResources().getStringArray(R.array.file_types); String[] choices = new String[fileTypes.length]; for (int i = 0; i < fileTypes.length; i++) { - choices[i] = String.format(exportFileFormat, fileTypes[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() { @@ -516,15 +532,5 @@ public class TrackListActivity extends FragmentActivity { .setTitle(R.string.menu_export_all) .create(); } - }; - - @Override - public boolean onKeyUp(int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_SEARCH) { - if (ApiAdapterFactory.getApiAdapter().handleSearchKey(search)) { - return true; - } - } - return super.onKeyUp(keyCode, event); } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/backup/RestoreActivity.java b/MyTracks/src/com/google/android/apps/mytracks/io/backup/RestoreActivity.java index a95edb6a1..92cd7fb58 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/backup/RestoreActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/backup/RestoreActivity.java @@ -16,7 +16,7 @@ package com.google.android.apps.mytracks.io.backup; -import com.google.android.apps.mytracks.TrackDetailActivity; +import com.google.android.apps.mytracks.TrackListActivity; import com.google.android.apps.mytracks.util.DialogUtils; import com.google.android.maps.mytracks.R; @@ -93,7 +93,7 @@ public class RestoreActivity extends Activity { removeDialog(DIALOG_PROGRESS_ID); Toast.makeText(this, messageId, success ? Toast.LENGTH_SHORT : Toast.LENGTH_LONG).show(); startActivity( - new Intent(this, TrackDetailActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); + new Intent(this, TrackListActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); finish(); } 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 7af00130c..c72c1a19d 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java @@ -484,9 +484,10 @@ public class TrackRecordingService extends Service { Notification notification = new Notification( R.drawable.arrow_320, null /* tickerText */, System.currentTimeMillis()); + Intent intent = new Intent(this, TrackDetailActivity.class) + .putExtra(TrackDetailActivity.TRACK_ID, recordingTrackId); PendingIntent contentIntent = PendingIntent.getActivity( - this, 0 /* requestCode */, new Intent(this, TrackDetailActivity.class), - 0 /* flags */); + this, 0 /* requestCode */, intent, 0 /* flags */); notification.setLatestEventInfo(this, getString(R.string.my_tracks_app_name), getString(R.string.track_record_notification), contentIntent); notification.flags += Notification.FLAG_NO_CLEAR; diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/PlayTrackUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/PlayTrackUtils.java index 2605904a5..28cdf39e3 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/PlayTrackUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/PlayTrackUtils.java @@ -93,7 +93,7 @@ public class PlayTrackUtils { public static Dialog createInstallEarthDialog(final Context context) { return new AlertDialog.Builder(context) .setCancelable(true) - .setMessage(R.string.track_list_play_install_earth_message) + .setMessage(R.string.track_detail_install_earth_message) .setNegativeButton(android.R.string.cancel, null) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java b/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java index 9908c3ec5..40546740f 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java +++ b/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java @@ -146,6 +146,9 @@ public class TrackWidgetProvider // Make all of the stats open the mytracks activity. Intent intent = new Intent(context, TrackDetailActivity.class); + if (track != null) { + intent.putExtra(TrackDetailActivity.TRACK_ID, track.getId()); + } PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); views.setOnClickPendingIntent(R.id.appwidget_track_statistics, pendingIntent); diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/TrackDetailActivityTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/TrackDetailActivityTest.java index 7b412de1e..697e63ea9 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/TrackDetailActivityTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/TrackDetailActivityTest.java @@ -19,15 +19,12 @@ import com.google.android.apps.mytracks.services.ServiceUtils; import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection; import com.google.android.maps.mytracks.R; -import android.app.Activity; -import android.app.Instrumentation.ActivityMonitor; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.net.Uri; import android.test.ActivityInstrumentationTestCase2; -import android.widget.Button; import java.io.File; import java.util.concurrent.TimeoutException; @@ -112,62 +109,6 @@ public class TrackDetailActivityTest extends ActivityInstrumentationTestCase2= 0); - - // Wait until we are done and make sure that selectedTrack = recordingTrack. - waitForIdle(); - assertEquals(recordingTrackId, getSharedPreferences().getLong( - getActivity().getString(R.string.recording_track_key), -1)); - long selectedTrackId = getSharedPreferences().getLong( - getActivity().getString(R.string.selected_track_key), -1); - assertEquals(recordingTrackId, selectedTrackId); - - // Watch for MyTracksDetails activity. - ActivityMonitor monitor = getInstrumentation().addMonitor( - TrackEditActivity.class.getName(), null, false); - - // Now, stop the track and make sure that it is still selected, but - // no longer recording. - getActivity().stopRecording(); - - // Check if we got back MyTracksDetails activity. - Activity activity = getInstrumentation().waitForMonitor(monitor); - assertTrue(activity instanceof TrackEditActivity); - - // TODO: Update track name and other properties and test if they were - // properly saved. - - // Simulate a click on Save button. - final Button save = (Button) activity.findViewById(R.id.track_edit_save); - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - save.performClick(); - } - }); - - // Check the remaining properties. - recordingTrackId = awaitRecordingStatus(5000, false); - assertEquals(-1, recordingTrackId); - assertEquals(recordingTrackId, getRecordingTrackId()); - assertEquals(recordingTrackId, getSharedPreferences().getLong( - getActivity().getString(R.string.recording_track_key), -1)); - } - private void assertInitialized() { assertNotNull(getActivity());