diff --git a/MyTracks/res/menu/track_detail.xml b/MyTracks/res/menu/track_detail.xml index fb0982296..db98bfd8b 100644 --- a/MyTracks/res/menu/track_detail.xml +++ b/MyTracks/res/menu/track_detail.xml @@ -51,20 +51,6 @@ limitations under the License. android:id="@+id/track_detail_save" android:orderInCategory="7" android:title="@string/menu_save"> - - - - - - - - - - - - - No + No @@ -738,9 +738,9 @@ limitations under the License. - Yes + Yes - + + %1$s: file format. 'GPX', 'KML', 'CSV', or 'TCX'."> Import all %1$s + translation_description="The dialog title to import from external storage."> Import from external storage Select all - + Import all @@ -1078,21 +1078,13 @@ limitations under the License. translation_description="In the menu, to save a track to the external storage. Character limit: ~20 (1 line)"> - Save to external storage + Save - Save all to external storage - - - Save as %1$s + Save all + Save all as %1$s + Saving to %1$s… + + Save as %1$s + + + Save to external storage + Share track @@ -2062,7 +2072,7 @@ limitations under the License. As %1$s file @@ -2070,8 +2080,8 @@ limitations under the License. translation_description="In the 'Sharing' settings, the option in the 'Share track' setting to share via Google Maps url."> Via Google Maps url - - + + - This will save your track to external storage so you can share the file. + This will save your track to external storage so you can share the file. The tracks and their markers will be permanently deleted from the device. If Google Drive sync is enabled, this will also delete the tracks on Google Drive. - - + + diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java index d55da7ccf..720af7bbe 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java @@ -27,6 +27,8 @@ import com.google.android.apps.mytracks.fragments.ChooseUploadServiceDialogFragm import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteTrackDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteTrackDialogFragment.DeleteTrackCaller; +import com.google.android.apps.mytracks.fragments.FileTypeDialogFragment; +import com.google.android.apps.mytracks.fragments.FileTypeDialogFragment.FileTypeCaller; import com.google.android.apps.mytracks.fragments.FrequencyDialogFragment; import com.google.android.apps.mytracks.fragments.InstallEarthDialogFragment; import com.google.android.apps.mytracks.fragments.MyTracksMapFragment; @@ -72,7 +74,7 @@ import java.util.Locale; * @author Rodrigo Damazio */ public class TrackDetailActivity extends AbstractSendToGoogleActivity - implements ChooseUploadServiceCaller, DeleteTrackCaller { + implements ChooseUploadServiceCaller, DeleteTrackCaller, FileTypeCaller { public static final String EXTRA_TRACK_ID = "track_id"; public static final String EXTRA_MARKER_ID = "marker_id"; @@ -301,15 +303,6 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.track_detail, menu); - String fileTypes[] = getResources().getStringArray(R.array.file_types); - 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])); Track track = myTracksProviderUtils.getTrack(trackId); boolean sharedWithMe = track != null ? track.isSharedWithMe() : true; @@ -387,18 +380,11 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity getSupportFragmentManager(), ChooseUploadServiceDialogFragment.CHOOSE_UPLOAD_SERVICE_DIALOG_TAG); return true; - case R.id.track_detail_save_gpx: - startSaveActivity(TrackFileFormat.GPX); - return true; - case R.id.track_detail_save_kml: - startSaveActivity(TrackFileFormat.KML); - return true; - case R.id.track_detail_save_csv: - startSaveActivity(TrackFileFormat.CSV); - return true; - case R.id.track_detail_save_tcx: - startSaveActivity(TrackFileFormat.TCX); - return true; + case R.id.track_detail_save: + FileTypeDialogFragment.newInstance(R.id.track_detail_save, R.string.save_selection_title, + R.string.save_selection_option, 4) + .show(getSupportFragmentManager(), FileTypeDialogFragment.FILE_TYPE_DIALOG_TAG); + return true; case R.id.track_detail_edit: intent = IntentUtils.newIntent(this, TrackEditActivity.class) .putExtra(TrackEditActivity.EXTRA_TRACK_ID, trackId); @@ -494,6 +480,21 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity } }); } + + @Override + public void onFileTypeDone(int menuId, TrackFileFormat trackFileFormat) { + switch (menuId) { + case R.id.track_detail_save: + AnalyticsUtils.sendPageViews( + this, "/action/save_" + trackFileFormat.name().toLowerCase(Locale.US)); + Intent intent = IntentUtils.newIntent(this, SaveActivity.class) + .putExtra(SaveActivity.EXTRA_TRACK_ID, trackId) + .putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) trackFileFormat); + startActivity(intent); + break; + default: + } + } /** * Gets the {@link TrackDataHub}. @@ -590,20 +591,6 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity setTitle(title); } - /** - * Starts the {@link SaveActivity} to save a track. - * - * @param trackFileFormat the track file format - */ - private void startSaveActivity(TrackFileFormat trackFileFormat) { - AnalyticsUtils.sendPageViews( - this, "/action/save_" + trackFileFormat.name().toLowerCase(Locale.US)); - Intent intent = IntentUtils.newIntent(this, SaveActivity.class) - .putExtra(SaveActivity.EXTRA_TRACK_ID, trackId) - .putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) trackFileFormat); - startActivity(intent); - } - /** * Returns true if Google Earth app is installed. */ diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java index 714a45775..d7a692cd4 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java @@ -29,8 +29,8 @@ 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; import com.google.android.apps.mytracks.fragments.EulaDialogFragment.EulaCaller; -import com.google.android.apps.mytracks.fragments.ImportSelectionDialogFragment; -import com.google.android.apps.mytracks.fragments.ImportSelectionDialogFragment.ImportSelectionCaller; +import com.google.android.apps.mytracks.fragments.FileTypeDialogFragment; +import com.google.android.apps.mytracks.fragments.FileTypeDialogFragment.FileTypeCaller; import com.google.android.apps.mytracks.io.file.ImportActivity; import com.google.android.apps.mytracks.io.file.SaveActivity; import com.google.android.apps.mytracks.io.file.TrackFileFormat; @@ -95,7 +95,7 @@ import java.util.Locale; * @author Leif Hendrik Wilden */ public class TrackListActivity extends AbstractSendToGoogleActivity - implements EulaCaller, EnableSyncCaller, DeleteTrackCaller, ImportSelectionCaller { + implements EulaCaller, EnableSyncCaller, DeleteTrackCaller, FileTypeCaller { private static final String TAG = TrackListActivity.class.getSimpleName(); private static final String START_GPS_KEY = "start_gps_key"; @@ -537,17 +537,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.track_list, menu); - String fileTypes[] = getResources().getStringArray(R.array.file_types); - // Save all submenu titles - menu.findItem(R.id.track_list_save_all_gpx) - .setTitle(getString(R.string.menu_save_format, fileTypes[0])); - menu.findItem(R.id.track_list_save_all_kml) - .setTitle(getString(R.string.menu_save_format, fileTypes[1])); - menu.findItem(R.id.track_list_save_all_csv) - .setTitle(getString(R.string.menu_save_format, fileTypes[2])); - menu.findItem(R.id.track_list_save_all_tcx) - .setTitle(getString(R.string.menu_save_format, fileTypes[3])); - + searchMenuItem = menu.findItem(R.id.track_list_search); startGpsMenuItem = menu.findItem(R.id.track_list_start_gps); importAllMenuItem = menu.findItem(R.id.track_list_import_all); @@ -586,20 +576,14 @@ public class TrackListActivity extends AbstractSendToGoogleActivity updateMenuItems(recordingTrackId != PreferencesUtils.RECORDING_TRACK_ID_DEFAULT); return true; case R.id.track_list_import_all: - new ImportSelectionDialogFragment().show( - getSupportFragmentManager(), ImportSelectionDialogFragment.IMPORT_SELECTION_DIALOG_TAG); - return true; - case R.id.track_list_save_all_gpx: - startSaveActivity(TrackFileFormat.GPX); + FileTypeDialogFragment.newInstance(R.id.track_list_import_all, + R.string.import_selection_title, R.string.import_selection_option, 2) + .show(getSupportFragmentManager(), FileTypeDialogFragment.FILE_TYPE_DIALOG_TAG); return true; - case R.id.track_list_save_all_kml: - startSaveActivity(TrackFileFormat.KML); - return true; - case R.id.track_list_save_all_csv: - startSaveActivity(TrackFileFormat.CSV); - return true; - case R.id.track_list_save_all_tcx: - startSaveActivity(TrackFileFormat.TCX); + case R.id.track_list_save_all: + FileTypeDialogFragment.newInstance(R.id.track_list_save_all, R.string.save_selection_title, + R.string.save_all_selection_option, 4) + .show(getSupportFragmentManager(), FileTypeDialogFragment.FILE_TYPE_DIALOG_TAG); return true; case R.id.track_list_delete_all: DeleteTrackDialogFragment.newInstance(true, new long[] {}) @@ -666,15 +650,28 @@ public class TrackListActivity extends AbstractSendToGoogleActivity public void onDeleteTrackDone() { // Do nothing } - + @Override - public void onImportSelectionDone(TrackFileFormat trackFileFormat) { - AnalyticsUtils.sendPageViews( - this, "/action/import_all_" + trackFileFormat.name().toLowerCase(Locale.US)); - Intent intent = IntentUtils.newIntent(this, ImportActivity.class) - .putExtra(ImportActivity.EXTRA_IMPORT_ALL, true) - .putExtra(ImportActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) trackFileFormat); - startActivity(intent); + public void onFileTypeDone(int menuId, TrackFileFormat trackFileFormat) { + Intent intent; + switch (menuId) { + case R.id.track_list_save_all: + AnalyticsUtils.sendPageViews( + this, "/action/save_all_" + trackFileFormat.name().toLowerCase(Locale.US)); + intent = IntentUtils.newIntent(this, SaveActivity.class) + .putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) trackFileFormat); + startActivity(intent); + break; + case R.id.track_list_import_all: + AnalyticsUtils.sendPageViews( + this, "/action/import_all_" + trackFileFormat.name().toLowerCase(Locale.US)); + intent = IntentUtils.newIntent(this, ImportActivity.class) + .putExtra(ImportActivity.EXTRA_IMPORT_ALL, true) + .putExtra(ImportActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) trackFileFormat); + startActivity(intent); + break; + default: + } } /** @@ -790,19 +787,6 @@ public class TrackListActivity extends AbstractSendToGoogleActivity bindChangedCallback.run(); } - /** - * Starts the {@link SaveActivity} to save all tracks. - * - * @param trackFileFormat the track file format - */ - private void startSaveActivity(TrackFileFormat trackFileFormat) { - AnalyticsUtils.sendPageViews( - this, "/action/save_all_" + trackFileFormat.name().toLowerCase(Locale.US)); - Intent intent = IntentUtils.newIntent(this, SaveActivity.class) - .putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) trackFileFormat); - startActivity(intent); - } - /** * Handles a context item selection. * diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/ImportSelectionDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/FileTypeDialogFragment.java similarity index 51% rename from MyTracks/src/com/google/android/apps/mytracks/fragments/ImportSelectionDialogFragment.java rename to MyTracks/src/com/google/android/apps/mytracks/fragments/FileTypeDialogFragment.java index e25578293..b9be1c4a6 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/ImportSelectionDialogFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/FileTypeDialogFragment.java @@ -28,55 +28,76 @@ import android.os.Bundle; import android.support.v4.app.DialogFragment; /** - * A DialogFragment to select an import type, gpx, kml, etc. + * A DialogFragment to select a file type, gpx, kml, etc. * * @author Jimmy Shih */ -public class ImportSelectionDialogFragment extends DialogFragment { +public class FileTypeDialogFragment extends DialogFragment { /** * Interface for caller of this dialog fragment. * * @author Jimmy Shih */ - public interface ImportSelectionCaller { + public interface FileTypeCaller { /** - * Called when import selection is done. + * Called when file type selection is done. */ - public void onImportSelectionDone(TrackFileFormat trackFileFormat); + public void onFileTypeDone(int menuId, TrackFileFormat trackFileFormat); } - public static final String IMPORT_SELECTION_DIALOG_TAG = "importSelection"; + public static final String FILE_TYPE_DIALOG_TAG = "fileType"; - private ImportSelectionCaller caller; + private static final String KEY_MENU_ID = "menuId"; + private static final String KEY_TITLE_ID = "titleId"; + private static final String KEY_OPTION_ID = "optionId"; + private static final String KEY_SIZE = "size"; + + public static FileTypeDialogFragment newInstance( + int menuId, int titleId, int optionId, int size) { + Bundle bundle = new Bundle(); + bundle.putInt(KEY_MENU_ID, menuId); + bundle.putInt(KEY_TITLE_ID, titleId); + bundle.putInt(KEY_OPTION_ID, optionId); + bundle.putInt(KEY_SIZE, size); + + FileTypeDialogFragment fileTypeDialogFragment = new FileTypeDialogFragment(); + fileTypeDialogFragment.setArguments(bundle); + return fileTypeDialogFragment; + } + + private FileTypeCaller caller; @Override public void onAttach(Activity activity) { super.onAttach(activity); try { - caller = (ImportSelectionCaller) activity; + caller = (FileTypeCaller) activity; } catch (ClassCastException e) { throw new ClassCastException( - activity.toString() + " must implement " + ImportSelectionCaller.class.getSimpleName()); + activity.toString() + " must implement " + FileTypeCaller.class.getSimpleName()); } } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - String[] choices = new String[2]; String fileTypes[] = getResources().getStringArray(R.array.file_types); - choices[0] = getString(R.string.import_selection_option, fileTypes[0]); - choices[1] = getString(R.string.import_selection_option, fileTypes[1]); - + int size = getArguments().getInt(KEY_SIZE); + int optionId = getArguments().getInt(KEY_OPTION_ID); + final int titleId = getArguments().getInt(KEY_TITLE_ID); + final int menuId = getArguments().getInt(KEY_MENU_ID); + String[] choices = new String[size]; + for (int i = 0; i < choices.length; i++) { + choices[i] = getString(optionId, fileTypes[i]); + } return new AlertDialog.Builder(getActivity()).setNegativeButton(R.string.generic_cancel, null) .setPositiveButton(R.string.generic_ok, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { int position = ((AlertDialog) dialog).getListView().getCheckedItemPosition(); - caller.onImportSelectionDone(position == 0 ? TrackFileFormat.GPX : TrackFileFormat.KML); + caller.onFileTypeDone(menuId, TrackFileFormat.values()[position]); } - }).setSingleChoiceItems(choices, 0, null).setTitle(R.string.import_selection_title) - .create(); + }).setSingleChoiceItems(choices, 0, null).setTitle(titleId).create(); } } \ No newline at end of file