diff --git a/MyTracks/src/com/google/android/apps/mytracks/AbstractMyTracksActivity.java b/MyTracks/src/com/google/android/apps/mytracks/AbstractMyTracksActivity.java index d54a59d0d..02015bbc9 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/AbstractMyTracksActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/AbstractMyTracksActivity.java @@ -35,6 +35,8 @@ public abstract class AbstractMyTracksActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + // Set volume control stream for text to speech setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM); // Hide title must be before setContentView @@ -50,11 +52,6 @@ public abstract class AbstractMyTracksActivity extends FragmentActivity { } } - /** - * Gets the layout resource id. - */ - protected abstract int getLayoutResId(); - /** * Returns true to hide the title. Be default, do not hide the title. */ @@ -62,6 +59,11 @@ public abstract class AbstractMyTracksActivity extends FragmentActivity { return false; } + /** + * Gets the layout resource id. + */ + protected abstract int getLayoutResId(); + /** * Returns true to configure the action bar home button as the up button. */ @@ -69,25 +71,31 @@ public abstract class AbstractMyTracksActivity extends FragmentActivity { return true; } - /** - * Callback when the home menu item is selected. - */ - protected void onHomeSelected() { - finish(); + @Override + public boolean onCreateOptionsMenu(Menu menu) { + + // Set menu icon color + TrackIconUtils.setMenuIconColor(menu); + + return super.onCreateOptionsMenu(menu); } - @Override - public boolean onCreateOptionsMenu(Menu menu) { - TrackIconUtils.setMenuIconColor(menu); - return super.onCreateOptionsMenu(menu); - } - @Override public boolean onOptionsItemSelected(MenuItem item) { + + // Handle home menu item, up navigation if (item.getItemId() == android.R.id.home) { onHomeSelected(); return true; } return super.onOptionsItemSelected(item); } + + /** + * Callback when the home menu item is selected. E.g., setup the back stack + * when home is selected. + */ + protected void onHomeSelected() { + finish(); + } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java b/MyTracks/src/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java index 6e85264c0..6bccb48cc 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java @@ -23,7 +23,6 @@ import com.google.android.apps.mytracks.fragments.ConfirmDeleteDialogFragment.Co import com.google.android.apps.mytracks.fragments.ConfirmSyncDialogFragment; import com.google.android.apps.mytracks.fragments.ConfirmSyncDialogFragment.ConfirmSyncCaller; import com.google.android.apps.mytracks.fragments.InstallEarthDialogFragment; -import com.google.android.apps.mytracks.fragments.PlayMultipleDialogFragment.PlayMultipleCaller; import com.google.android.apps.mytracks.fragments.ShareTrackDialogFragment; import com.google.android.apps.mytracks.fragments.ShareTrackDialogFragment.ShareTrackCaller; import com.google.android.apps.mytracks.io.drive.SendDriveActivity; @@ -64,13 +63,19 @@ import android.widget.Toast; import java.io.IOException; /** - * An abstract class for sending a track to Google services. + * An abstract class for the following common tasks across + * {@link TrackListActivity}, {@link TrackDetailActivity}, and + * {@link SearchListActivity}: + *

+ * - share track
+ * - delete track
+ * - play track
* * @author Jimmy Shih */ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActivity implements ChooseAccountCaller, ConfirmSyncCaller, CheckPermissionCaller, ShareTrackCaller, - ConfirmDeleteCaller, PlayMultipleCaller { + ConfirmDeleteCaller { private static final String TAG = AbstractMyTracksActivity.class.getSimpleName(); private static final String SEND_REQUEST_KEY = "send_request_key"; @@ -371,7 +376,12 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv startActivity(intent); } - protected void deleteTrack(long[] trackIds) { + /** + * Delete tracks. + * + * @param trackIds the track ids + */ + protected void deleteTracks(long[] trackIds) { ConfirmDeleteDialogFragment.newInstance(trackIds) .show(getSupportFragmentManager(), ConfirmDeleteDialogFragment.CONFIRM_DELETE_DIALOG_TAG); } @@ -399,16 +409,23 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv startActivityForResult(intent, DELETE_REQUEST_CODE); } + /** + * Gets the track recording service connection. For stopping the current + * recording if need to delete the current recording track. + */ abstract protected TrackRecordingServiceConnection getTrackRecordingServiceConnection(); + /** + * Called after {@link DeleteActivity} returns its result. + */ abstract protected void onDeleted(); /** - * Play track in Google Earth. + * Play tracks in Google Earth. * * @param trackIds the track ids */ - protected void playTrack(long[] trackIds) { + protected void playTracks(long[] trackIds) { AnalyticsUtils.sendPageViews(this, AnalyticsUtils.ACTION_PLAY); if (GoogleEarthUtils.isEarthInstalled(this)) { Intent intent = IntentUtils.newIntent(this, SaveActivity.class) @@ -421,9 +438,4 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv getSupportFragmentManager(), InstallEarthDialogFragment.INSTALL_EARTH_DIALOG_TAG); } } - - @Override - public void onPlayMultipleDone(long[] trackIds) { - playTrack(trackIds); - } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java index 11c0687df..e390fead5 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/SearchListActivity.java @@ -24,7 +24,6 @@ import com.google.android.apps.mytracks.content.SearchEngineProvider; import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.content.Waypoint.WaypointType; -import com.google.android.apps.mytracks.fragments.ConfirmDeleteDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment.DeleteMarkerCaller; import com.google.android.apps.mytracks.services.MyTracksLocationManager; @@ -348,7 +347,7 @@ public class SearchListActivity extends AbstractSendToGoogleActivity implements Intent intent; switch (itemId) { case R.id.list_context_menu_play: - playTrack(new long[] {trackId}); + playTracks(new long[] {trackId}); return true; case R.id.list_context_menu_share: shareTrack(trackId); @@ -376,8 +375,7 @@ public class SearchListActivity extends AbstractSendToGoogleActivity implements DeleteMarkerDialogFragment.newInstance(new long[] { markerId }).show( getSupportFragmentManager(), DeleteMarkerDialogFragment.DELETE_MARKER_DIALOG_TAG); } else { - ConfirmDeleteDialogFragment.newInstance(new long[] { trackId }) - .show(getSupportFragmentManager(), ConfirmDeleteDialogFragment.CONFIRM_DELETE_DIALOG_TAG); + deleteTracks(new long[] { trackId }); } return true; default: diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java index b9fe81e8f..47a6aec37 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java @@ -25,13 +25,13 @@ import com.google.android.apps.mytracks.content.WaypointCreationRequest; import com.google.android.apps.mytracks.fragments.ChartFragment; import com.google.android.apps.mytracks.fragments.ChooseActivityTypeDialogFragment; import com.google.android.apps.mytracks.fragments.ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller; -import com.google.android.apps.mytracks.fragments.ConfirmDeleteDialogFragment; import com.google.android.apps.mytracks.fragments.ExportDialogFragment; import com.google.android.apps.mytracks.fragments.ExportDialogFragment.ExportCaller; import com.google.android.apps.mytracks.fragments.ExportDialogFragment.ExportType; import com.google.android.apps.mytracks.fragments.FrequencyDialogFragment; import com.google.android.apps.mytracks.fragments.MyTracksMapFragment; import com.google.android.apps.mytracks.fragments.PlayMultipleDialogFragment; +import com.google.android.apps.mytracks.fragments.PlayMultipleDialogFragment.PlayMultipleCaller; import com.google.android.apps.mytracks.fragments.StatsFragment; import com.google.android.apps.mytracks.io.file.TrackFileFormat; import com.google.android.apps.mytracks.io.file.exporter.SaveActivity; @@ -82,7 +82,7 @@ import java.util.Date; * @author Rodrigo Damazio */ public class TrackDetailActivity extends AbstractSendToGoogleActivity - implements ChooseActivityTypeCaller, ExportCaller { + implements ChooseActivityTypeCaller, ExportCaller, PlayMultipleCaller { public static final String EXTRA_TRACK_ID = "track_id"; public static final String EXTRA_MARKER_ID = "marker_id"; @@ -415,7 +415,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity startActivityForResult(intent, CAMERA_REQUEST_CODE); return true; case R.id.track_detail_play: - playTrack(new long[] {trackId}); + playTracks(new long[] {trackId}); return true; case R.id.track_detail_share: shareTrack(trackId); @@ -451,8 +451,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity startActivity(intent); return true; case R.id.track_detail_delete: - ConfirmDeleteDialogFragment.newInstance(new long[] { trackId }) - .show(getSupportFragmentManager(), ConfirmDeleteDialogFragment.CONFIRM_DELETE_DIALOG_TAG); + deleteTracks(new long[] { trackId }); return true; case R.id.track_detail_sensor_state: intent = IntentUtils.newIntent(this, SensorStateActivity.class); @@ -649,4 +648,9 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity Toast.makeText(this, message, Toast.LENGTH_LONG).show(); } } + + @Override + public void onPlayMultipleDone(long[] trackIds) { + playTracks(trackIds); + } } \ 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 7897c7b43..875f1e3b4 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java @@ -19,7 +19,6 @@ package com.google.android.apps.mytracks; import com.google.android.apps.mytracks.content.MyTracksProviderUtils; import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.content.TracksColumns; -import com.google.android.apps.mytracks.fragments.ConfirmDeleteDialogFragment; import com.google.android.apps.mytracks.fragments.EnableSyncDialogFragment; import com.google.android.apps.mytracks.fragments.EnableSyncDialogFragment.EnableSyncCaller; import com.google.android.apps.mytracks.fragments.EulaDialogFragment; @@ -27,6 +26,7 @@ import com.google.android.apps.mytracks.fragments.EulaDialogFragment.EulaCaller; import com.google.android.apps.mytracks.fragments.FileTypeDialogFragment; import com.google.android.apps.mytracks.fragments.FileTypeDialogFragment.FileTypeCaller; import com.google.android.apps.mytracks.fragments.PlayMultipleDialogFragment; +import com.google.android.apps.mytracks.fragments.PlayMultipleDialogFragment.PlayMultipleCaller; import com.google.android.apps.mytracks.io.file.TrackFileFormat; import com.google.android.apps.mytracks.io.file.exporter.SaveActivity; import com.google.android.apps.mytracks.io.file.importer.ImportActivity; @@ -92,7 +92,7 @@ import java.util.Locale; * @author Leif Hendrik Wilden */ public class TrackListActivity extends AbstractSendToGoogleActivity - implements EulaCaller, EnableSyncCaller, FileTypeCaller { + implements EulaCaller, EnableSyncCaller, FileTypeCaller, PlayMultipleCaller { private static final String TAG = TrackListActivity.class.getSimpleName(); private static final String[] PROJECTION = new String[] { TracksColumns._ID, TracksColumns.NAME, @@ -565,8 +565,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity .show(getSupportFragmentManager(), FileTypeDialogFragment.FILE_TYPE_DIALOG_TAG); return true; case R.id.track_list_delete_all: - ConfirmDeleteDialogFragment.newInstance(new long[] {-1L}) - .show(getSupportFragmentManager(), ConfirmDeleteDialogFragment.CONFIRM_DELETE_DIALOG_TAG); + deleteTracks(new long[] {-1L}); return true; case R.id.track_list_settings: intent = IntentUtils.newIntent(this, SettingsActivity.class); @@ -790,7 +789,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity private boolean handleContextItem(int itemId, long[] trackIds) { switch (itemId) { case R.id.list_context_menu_play: - playTrack(trackIds); + playTracks(trackIds); return true; case R.id.list_context_menu_share: shareTrack(trackIds[0]); @@ -804,8 +803,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity if (trackIds.length > 1 && trackIds.length == listView.getCount()) { trackIds = new long[] {-1L}; } - ConfirmDeleteDialogFragment.newInstance(trackIds) - .show(getSupportFragmentManager(), ConfirmDeleteDialogFragment.CONFIRM_DELETE_DIALOG_TAG); + deleteTracks(trackIds); return true; case R.id.list_context_menu_select_all: int size = listView.getCount(); @@ -817,4 +815,9 @@ public class TrackListActivity extends AbstractSendToGoogleActivity return false; } } + + @Override + public void onPlayMultipleDone(long[] trackIds) { + playTracks(trackIds); + } }