diff --git a/MyTracks/AndroidManifest.xml b/MyTracks/AndroidManifest.xml index 0e04a5e78..9d6e534e5 100755 --- a/MyTracks/AndroidManifest.xml +++ b/MyTracks/AndroidManifest.xml @@ -16,8 +16,8 @@ limitations under the License. --> diff --git a/MyTracks/res/drawable-hdpi/list_selector_background_mytracks.9.png b/MyTracks/res/drawable-hdpi/list_selector_background_mytracks.9.png deleted file mode 100644 index bc72a9c8d..000000000 Binary files a/MyTracks/res/drawable-hdpi/list_selector_background_mytracks.9.png and /dev/null differ diff --git a/MyTracks/res/drawable-hdpi/menu_export.png b/MyTracks/res/drawable-hdpi/menu_export.png index a1d27cec9..d919ac5ee 100644 Binary files a/MyTracks/res/drawable-hdpi/menu_export.png and b/MyTracks/res/drawable-hdpi/menu_export.png differ diff --git a/MyTracks/res/drawable-mdpi/list_selector_background_mytracks.9.png b/MyTracks/res/drawable-mdpi/list_selector_background_mytracks.9.png deleted file mode 100644 index a6b8d599f..000000000 Binary files a/MyTracks/res/drawable-mdpi/list_selector_background_mytracks.9.png and /dev/null differ diff --git a/MyTracks/res/drawable-mdpi/menu_export.png b/MyTracks/res/drawable-mdpi/menu_export.png index 0e06c2212..c50a8b61e 100644 Binary files a/MyTracks/res/drawable-mdpi/menu_export.png and b/MyTracks/res/drawable-mdpi/menu_export.png differ diff --git a/MyTracks/res/drawable-xhdpi/list_selector_background_mytracks.9.png b/MyTracks/res/drawable-xhdpi/list_selector_background_mytracks.9.png deleted file mode 100644 index 3492ac353..000000000 Binary files a/MyTracks/res/drawable-xhdpi/list_selector_background_mytracks.9.png and /dev/null differ diff --git a/MyTracks/res/drawable-xhdpi/menu_export.png b/MyTracks/res/drawable-xhdpi/menu_export.png index 37d98e5dd..34121651c 100644 Binary files a/MyTracks/res/drawable-xhdpi/menu_export.png and b/MyTracks/res/drawable-xhdpi/menu_export.png differ diff --git a/MyTracks/res/drawable/activated_background_mytracks.xml b/MyTracks/res/drawable/activated_background_mytracks.xml deleted file mode 100644 index 05290f463..000000000 --- a/MyTracks/res/drawable/activated_background_mytracks.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/MyTracks/res/layout/export.xml b/MyTracks/res/layout/export.xml index 3a17b7437..a0ca96f67 100644 --- a/MyTracks/res/layout/export.xml +++ b/MyTracks/res/layout/export.xml @@ -65,10 +65,10 @@ limitations under the License. android:id="@+id/export_external_storage_options" style="@style/ExportRadioGroup" > + android:paddingBottom="16dp" + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:paddingTop="8dp" > + + + android:singleLine="false" + android:visibility="gone" > \ No newline at end of file diff --git a/MyTracks/res/menu/track_list.xml b/MyTracks/res/menu/track_list.xml index 802280907..965ae20c6 100644 --- a/MyTracks/res/menu/track_list.xml +++ b/MyTracks/res/menu/track_list.xml @@ -27,32 +27,32 @@ limitations under the License. android:showAsAction="ifRoom" android:title="@string/menu_start_gps"/> - + android:icon="@drawable/menu_sync_now" + android:id="@+id/track_list_sync_now" + android:title="@string/menu_sync_now"/> + + + - - - diff --git a/MyTracks/res/raw/mytracks_empty_spreadsheet.ods b/MyTracks/res/raw/mytracks_empty_spreadsheet.ods index eb7aca654..856f33fda 100644 Binary files a/MyTracks/res/raw/mytracks_empty_spreadsheet.ods and b/MyTracks/res/raw/mytracks_empty_spreadsheet.ods differ diff --git a/MyTracks/res/values-v11/styles.xml b/MyTracks/res/values-v11/styles.xml index 857775530..1152b1215 100644 --- a/MyTracks/res/values-v11/styles.xml +++ b/MyTracks/res/values-v11/styles.xml @@ -34,7 +34,7 @@ limitations under the License. true diff --git a/MyTracks/src/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java b/MyTracks/src/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java index c0925ec61..09be42dc6 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java @@ -16,16 +16,15 @@ package com.google.android.apps.mytracks; -import com.google.android.apps.mytracks.fragments.AddEmailsDialogFragment; -import com.google.android.apps.mytracks.fragments.AddEmailsDialogFragment.AddEmailsCaller; import com.google.android.apps.mytracks.fragments.CheckPermissionFragment; import com.google.android.apps.mytracks.fragments.CheckPermissionFragment.CheckPermissionCaller; import com.google.android.apps.mytracks.fragments.ChooseAccountDialogFragment; import com.google.android.apps.mytracks.fragments.ChooseAccountDialogFragment.ChooseAccountCaller; -import com.google.android.apps.mytracks.fragments.ChooseActivityDialogFragment; import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment; import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment.ConfirmCaller; import com.google.android.apps.mytracks.fragments.InstallEarthDialogFragment; +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; import com.google.android.apps.mytracks.io.file.SaveActivity; import com.google.android.apps.mytracks.io.file.TrackFileFormat; @@ -66,7 +65,7 @@ import java.io.IOException; * @author Jimmy Shih */ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActivity implements - ChooseAccountCaller, CheckPermissionCaller, AddEmailsCaller, ConfirmCaller { + ChooseAccountCaller, CheckPermissionCaller, ShareTrackCaller, ConfirmCaller { private static final String TAG = AbstractMyTracksActivity.class.getSimpleName(); private static final String SEND_REQUEST_KEY = "send_request_key"; @@ -182,13 +181,12 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv } @Override - public void onAddEmailsDone(String emails) { - if (emails != null && !emails.equals("")) { - sendRequest.setDriveShareEmails(emails); - Intent intent = IntentUtils.newIntent(this, SendDriveActivity.class) - .putExtra(SendRequest.SEND_REQUEST_KEY, sendRequest); - startActivity(intent); - } + public void onShareTrackDone(String emails, boolean makePublic) { + sendRequest.setDriveShareEmails(emails); + sendRequest.setDriveSharePublic(makePublic); + Intent intent = IntentUtils.newIntent(this, SendDriveActivity.class) + .putExtra(SendRequest.SEND_REQUEST_KEY, sendRequest); + startActivity(intent); } private void onDrivePermissionSuccess() { @@ -260,15 +258,11 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv *

* isSendDrive and isDriveEnableSync -> enable sync *

- * isSendDrive and isDriveShare -> show {@link AddEmailsDialogFragment} + * isSendDrive and isDriveShare -> show {@link ShareTrackDialogFragment} *

* isSendDrive -> start {@link SendDriveActivity} *

- * isSendMaps and isMapShare -> show {@link ChooseActivityDialogFragment} - *

- * isSendMaps and isMapsExistingMap -> start {@link ChooseMapActivity} - *

- * isSendMaps and !isMapsExistingMap -> {@link SendMapsActivity} + * isSendMaps -> start {@link SendMapsActivity} *

* isSendFusionTables -> start {@link SendFusionTablesActivity} *

@@ -292,8 +286,8 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv SyncUtils.enableSync(sendRequest.getAccount()); return; } else if (sendRequest.isDriveShare()) { - AddEmailsDialogFragment.newInstance(sendRequest.getTrackId()) - .show(getSupportFragmentManager(), AddEmailsDialogFragment.ADD_EMAILS_DIALOG_TAG); + ShareTrackDialogFragment.newInstance(sendRequest.getTrackId()) + .show(getSupportFragmentManager(), ShareTrackDialogFragment.SHARE_TRACK_DIALOG_TAG); return; } else { next = SendDriveActivity.class; @@ -344,7 +338,7 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv protected void confirmShare(long trackId) { ConfirmDialogFragment.newInstance(R.string.confirm_share_drive_key, PreferencesUtils.CONFIRM_SHARE_DRIVE_DEFAULT, - getString(R.string.share_track_drive_confirm_message), new long[] { trackId }) + getString(R.string.share_track_confirm_message), new long[] { trackId }) .show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java index 41ee179b6..e1b16c239 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java @@ -527,7 +527,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity return true; case R.id.track_list_export_all: FileTypeDialogFragment.newInstance(R.id.track_list_export_all, - R.string.save_selection_title, R.string.save_all_selection_option, 4) + R.string.export_all_title, R.string.export_all_option, 4) .show(getSupportFragmentManager(), FileTypeDialogFragment.FILE_TYPE_DIALOG_TAG); return true; case R.id.track_list_delete_all: diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityDialogFragment.java index 06262ca8f..1dba7e249 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityDialogFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityDialogFragment.java @@ -124,7 +124,7 @@ public class ChooseActivityDialogFragment extends DialogFragment { caller.onChooseActivityDone( activityInfo.applicationInfo.packageName, activityInfo.name); } - }).setTitle(R.string.share_track_picker_title).create(); + }).setTitle(R.string.share_track_share_url_title).create(); } @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/ExportDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/ExportDialogFragment.java index 8af92d8ec..60d36e4b3 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/ExportDialogFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/ExportDialogFragment.java @@ -120,10 +120,10 @@ public class ExportDialogFragment extends DialogFragment { exportGoogleFusionTablesPublic ? R.id.export_google_fusion_tables_public : R.id.export_google_fusion_tables_private); - setExternalStorageOption( - (RadioButton) view.findViewById(R.id.export_external_storage_gpx), TrackFileFormat.GPX); setExternalStorageOption( (RadioButton) view.findViewById(R.id.export_external_storage_kml), TrackFileFormat.KML); + setExternalStorageOption( + (RadioButton) view.findViewById(R.id.export_external_storage_gpx), TrackFileFormat.GPX); setExternalStorageOption( (RadioButton) view.findViewById(R.id.export_external_storage_csv), TrackFileFormat.CSV); setExternalStorageOption( @@ -159,7 +159,7 @@ public class ExportDialogFragment extends DialogFragment { } caller.onExportDone(type, format); } - }).setTitle(R.string.export_dialog_title).setView(view).create(); + }).setTitle(R.string.export_title).setView(view).create(); } /** @@ -179,10 +179,10 @@ public class ExportDialogFragment extends DialogFragment { */ private int getExternalStorageFormatId(TrackFileFormat trackFileFormat) { switch (trackFileFormat) { - case GPX: - return R.id.export_external_storage_gpx; case KML: return R.id.export_external_storage_kml; + case GPX: + return R.id.export_external_storage_gpx; case CSV: return R.id.export_external_storage_csv; default: @@ -197,10 +197,10 @@ public class ExportDialogFragment extends DialogFragment { */ private TrackFileFormat getTrackFileFormat(int externalStorageFormatId) { switch (externalStorageFormatId) { - case R.id.export_external_storage_gpx: - return TrackFileFormat.GPX; case R.id.export_external_storage_kml: return TrackFileFormat.KML; + case R.id.export_external_storage_gpx: + return TrackFileFormat.GPX; case R.id.export_external_storage_csv: return TrackFileFormat.CSV; default: diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java index 0f6109429..d1c996d68 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/MyTracksMapFragment.java @@ -62,7 +62,9 @@ import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; import android.view.ViewTreeObserver.OnGlobalLayoutListener; +import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.RelativeLayout; import android.widget.TextView; @@ -146,6 +148,15 @@ public class MyTracksMapFragment extends SupportMapFragment implements TrackData RelativeLayout mapContainer = (RelativeLayout) layout.findViewById(R.id.map_container); mapContainer.addView(mapView, 0); + /* + * For Froyo (2.2) and Gingerbread (2.3), need a transparent FrameLayout on + * top for view pager to work correctly. + */ + FrameLayout frameLayout = new FrameLayout(getActivity()); + frameLayout.setBackgroundColor(getResources().getColor(android.R.color.transparent)); + mapContainer.addView(frameLayout, + new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); + myLocationImageButton = (ImageButton) layout.findViewById(R.id.map_my_location); myLocationImageButton.setOnClickListener(new View.OnClickListener() { @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/AddEmailsDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/ShareTrackDialogFragment.java similarity index 60% rename from MyTracks/src/com/google/android/apps/mytracks/fragments/AddEmailsDialogFragment.java rename to MyTracks/src/com/google/android/apps/mytracks/fragments/ShareTrackDialogFragment.java index a22734399..ac3e3f5ea 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/AddEmailsDialogFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/ShareTrackDialogFragment.java @@ -16,6 +16,7 @@ package com.google.android.apps.mytracks.fragments; +import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.maps.mytracks.R; import android.app.Activity; @@ -30,64 +31,73 @@ import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentActivity; import android.support.v4.widget.SimpleCursorAdapter; import android.view.View; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.FilterQueryProvider; import android.widget.MultiAutoCompleteTextView; +import android.widget.Toast; /** - * A DialogFragment to add emails. + * A DialogFragment to share a track. * * @author Jimmy Shih */ -public class AddEmailsDialogFragment extends DialogFragment { +public class ShareTrackDialogFragment extends DialogFragment { /** * Interface for caller of this dialog fragment. * * @author Jimmy Shih */ - public interface AddEmailsCaller { + public interface ShareTrackCaller { /** - * Called when add emails is done. + * Called when share track is done. * * @param emails the added emails + * @param makePublic true to make the track public */ - public void onAddEmailsDone(String emails); + public void onShareTrackDone(String emails, boolean makePublic); } - public static final String ADD_EMAILS_DIALOG_TAG = "addEmailsDialog"; + public static final String SHARE_TRACK_DIALOG_TAG = "shareTrackDialog"; private static final String KEY_TRACK_ID = "trackId"; - public static AddEmailsDialogFragment newInstance(long trackId) { + public static ShareTrackDialogFragment newInstance(long trackId) { Bundle bundle = new Bundle(); bundle.putLong(KEY_TRACK_ID, trackId); - AddEmailsDialogFragment addPeopleDialogFragment = new AddEmailsDialogFragment(); - addPeopleDialogFragment.setArguments(bundle); - return addPeopleDialogFragment; + ShareTrackDialogFragment shareleTrackDialogFragment = new ShareTrackDialogFragment(); + shareleTrackDialogFragment.setArguments(bundle); + return shareleTrackDialogFragment; } - private AddEmailsCaller caller; + private ShareTrackCaller caller; private FragmentActivity fragmentActivity; private MultiAutoCompleteTextView multiAutoCompleteTextView; + private CheckBox publicCheckBox; + private CheckBox inviteCheckBox; @Override public void onAttach(Activity activity) { super.onAttach(activity); try { - caller = (AddEmailsCaller) activity; + caller = (ShareTrackCaller) activity; } catch (ClassCastException e) { throw new ClassCastException( - activity.toString() + " must implement " + AddEmailsCaller.class.getSimpleName()); + activity.toString() + " must implement " + ShareTrackCaller.class.getSimpleName()); } } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { fragmentActivity = getActivity(); - View view = fragmentActivity.getLayoutInflater().inflate(R.layout.add_emails, null); - multiAutoCompleteTextView = (MultiAutoCompleteTextView) view.findViewById(R.id.add_emails); + View view = fragmentActivity.getLayoutInflater().inflate(R.layout.share_track, null); + + multiAutoCompleteTextView = (MultiAutoCompleteTextView) view.findViewById( + R.id.share_track_emails); multiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); SimpleCursorAdapter adapter = new SimpleCursorAdapter(fragmentActivity, @@ -109,15 +119,45 @@ public class AddEmailsDialogFragment extends DialogFragment { }); multiAutoCompleteTextView.setAdapter(adapter); + publicCheckBox = (CheckBox) view.findViewById(R.id.share_track_public); + publicCheckBox.setChecked(PreferencesUtils.getBoolean( + fragmentActivity, R.string.share_track_public_key, + PreferencesUtils.SHARE_TRACK_PUBLIC_DEFAULT)); + + inviteCheckBox = (CheckBox) view.findViewById(R.id.share_track_invite); + inviteCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + multiAutoCompleteTextView.setVisibility(isChecked ? View.VISIBLE : View.GONE); + } + }); + inviteCheckBox.setChecked(PreferencesUtils.getBoolean( + fragmentActivity, R.string.share_track_invite_key, + PreferencesUtils.SHARE_TRACK_INVITE_DEFAULT)); + return new AlertDialog.Builder(fragmentActivity).setNegativeButton( R.string.generic_cancel, null) .setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - String acl = multiAutoCompleteTextView.getText().toString(); - caller.onAddEmailsDone(acl); + if (!publicCheckBox.isChecked() && !inviteCheckBox.isChecked()) { + Toast.makeText(fragmentActivity, R.string.share_track_no_selection, Toast.LENGTH_LONG) + .show(); + return; + } + String acl = multiAutoCompleteTextView.getText().toString().trim(); + if (!publicCheckBox.isChecked() && acl.equals("")) { + Toast.makeText(fragmentActivity, R.string.share_track_no_emails, Toast.LENGTH_LONG) + .show(); + return; + } + PreferencesUtils.setBoolean( + fragmentActivity, R.string.share_track_public_key, publicCheckBox.isChecked()); + PreferencesUtils.setBoolean( + fragmentActivity, R.string.share_track_invite_key, inviteCheckBox.isChecked()); + caller.onShareTrackDone(acl, publicCheckBox.isChecked()); } - }).setTitle(R.string.share_track_add_emails_title).setView(view).create(); + }).setTitle(R.string.share_track_title).setView(view).create(); } /** diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveActivity.java b/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveActivity.java index 6db5dcb25..207683b2c 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveActivity.java @@ -37,8 +37,8 @@ public class SendDriveActivity extends AbstractSendActivity { @Override protected AbstractSendAsyncTask createAsyncTask() { - return new SendDriveAsyncTask( - this, sendRequest.getTrackId(), sendRequest.getAccount(), sendRequest.getDriveShareEmails()); + return new SendDriveAsyncTask(this, sendRequest.getTrackId(), sendRequest.getAccount(), + sendRequest.getDriveShareEmails(), sendRequest.isDriveSharePublic()); } @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveAsyncTask.java index 5f0f9f262..ca379ff80 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveAsyncTask.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveAsyncTask.java @@ -28,6 +28,7 @@ import com.google.api.client.googleapis.extensions.android.gms.auth.UserRecovera import com.google.api.services.drive.Drive; import com.google.api.services.drive.model.File; import com.google.api.services.drive.model.Permission; +import com.google.api.services.drive.model.PermissionList; import android.accounts.Account; import android.content.Context; @@ -44,10 +45,12 @@ public class SendDriveAsyncTask extends AbstractSendAsyncTask { private final long trackId; private final Account account; private final String[] acl; + private final boolean isPublic; private final Context context; private final MyTracksProviderUtils myTracksProviderUtils; - public SendDriveAsyncTask(SendDriveActivity activity, long trackId, Account account, String acl) { + public SendDriveAsyncTask( + SendDriveActivity activity, long trackId, Account account, String acl, boolean isPublic) { super(activity); this.trackId = trackId; this.account = account; @@ -56,7 +59,8 @@ public class SendDriveAsyncTask extends AbstractSendAsyncTask { } else { this.acl = null; } - + this.isPublic = isPublic; + context = activity.getApplicationContext(); myTracksProviderUtils = MyTracksProviderUtils.Factory.get(context); } @@ -64,9 +68,6 @@ public class SendDriveAsyncTask extends AbstractSendAsyncTask { @Override protected void closeConnection() {} - @Override - protected void saveResult() {} - @Override protected boolean performTask() { try { @@ -91,18 +92,18 @@ public class SendDriveAsyncTask extends AbstractSendAsyncTask { File driveFile = drive.files().get(driveId).execute(); if (SyncUtils.isValid(driveFile, folderId) && SyncUtils.updateDriveFile( drive, driveFile, context, myTracksProviderUtils, track, false)) { - addPermission(drive, driveId); + addPermission(drive, driveFile); return true; } SyncUtils.updateTrackWithDriveFileInfo(myTracksProviderUtils, track, null); } - String id = SyncUtils.insertDriveFile( + File file = SyncUtils.insertDriveFile( drive, folderId, context, myTracksProviderUtils, track, false); - if (id == null) { + if (file == null) { return false; } - addPermission(drive, id); + addPermission(drive, file); return true; } catch (UserRecoverableAuthException e) { SendToGoogleUtils.sendNotification( @@ -126,18 +127,40 @@ public class SendDriveAsyncTask extends AbstractSendAsyncTask { * Adds permission. * * @param drive the drive - * @param driveId the drive id + * @param file the drive file */ - private void addPermission(Drive drive, String driveId) throws IOException { + private void addPermission(Drive drive, File file) throws IOException { + if (isPublic) { + boolean hasPublic = false; + PermissionList permissionList = drive.permissions().list(file.getId()).execute(); + for (Permission permission : permissionList.getItems()) { + String role = permission.getRole(); + if (role.equals("reader") || role.equals("writer")) { + if (permission.getType().equals("anyone")) { + hasPublic = true; + break; + } + } + } + if (!hasPublic) { + Permission permission = new Permission(); + permission.setRole("reader"); + permission.setType("anyone"); + permission.setValue(""); + drive.permissions().insert(file.getId(), permission).execute(); + } + shareUrl = file.getAlternateLink(); + } + if (acl != null) { for (String email : acl) { email = email.trim(); if (!email.equals("")) { Permission permission = new Permission(); - permission.setValue(email); - permission.setType("user"); permission.setRole("reader"); - drive.permissions().insert(driveId, permission).execute(); + permission.setType("user"); + permission.setValue(email); + drive.permissions().insert(file.getId(), permission).execute(); } } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/SaveActivity.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/SaveActivity.java index d19694922..7d69bc683 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/SaveActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/SaveActivity.java @@ -111,8 +111,9 @@ public class SaveActivity extends Activity { protected Dialog onCreateDialog(int id) { switch (id) { case DIALOG_PROGRESS_ID: - progressDialog = DialogUtils.createHorizontalProgressDialog( - this, R.string.save_progress_message, new DialogInterface.OnCancelListener() { + progressDialog = DialogUtils.createHorizontalProgressDialog(this, + R.string.export_external_storage_progress_message, + new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { saveAsyncTask.cancel(true); @@ -128,10 +129,11 @@ public class SaveActivity extends Activity { .getQuantityString(R.plurals.tracks, totalCount, totalCount); if (successCount == totalCount && totalCount > 0) { success = true; - message = getString(R.string.save_success, totalTracks, directoryName); + message = getString(R.string.export_external_storage_success, totalTracks, directoryName); } else { success = false; - message = getString(R.string.save_error, successCount, totalTracks, directoryName); + message = getString( + R.string.export_external_storage_error, successCount, totalTracks, directoryName); } AlertDialog.Builder builder = new AlertDialog.Builder(this).setCancelable(true).setIcon( success ? android.R.drawable.ic_dialog_info : android.R.drawable.ic_dialog_alert) diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackFileFormat.java b/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackFileFormat.java index a53c2a37a..b4362ee80 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackFileFormat.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/file/TrackFileFormat.java @@ -10,18 +10,18 @@ import java.util.Locale; * Definition of all possible track formats. */ public enum TrackFileFormat implements Parcelable { - GPX { - @Override - TrackFormatWriter newFormatWriter(Context context) { - return new GpxTrackWriter(context); - } - }, KML { @Override TrackFormatWriter newFormatWriter(Context context) { return new KmlTrackWriter(context); } }, + GPX { + @Override + TrackFormatWriter newFormatWriter(Context context) { + return new GpxTrackWriter(context); + } + }, CSV { @Override public TrackFormatWriter newFormatWriter(Context context) { diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesAsyncTask.java index 7601f627a..bf35f2a40 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesAsyncTask.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesAsyncTask.java @@ -88,9 +88,6 @@ public class SendFusionTablesAsyncTask extends AbstractSendAsyncTask { @Override protected void closeConnection() {} - @Override - protected void saveResult() {} - @Override protected boolean performTask() { try { @@ -121,7 +118,7 @@ public class SendFusionTablesAsyncTask extends AbstractSendAsyncTask { publishProgress(PROGRESS_SET_STYLE); setStyle(fusiontables, tableId); setTemplate(fusiontables, tableId); - if (!setPermission(tableId)) { + if (!setPermission(track, tableId)) { Log.d(TAG, "Cannot set permission for table " + tableId); return false; } @@ -138,9 +135,6 @@ public class SendFusionTablesAsyncTask extends AbstractSendAsyncTask { return false; } - track.setTableId(tableId); - myTracksProviderUtils.updateTrack(track); - publishProgress(PROGRESS_COMPLETE); return true; @@ -200,7 +194,7 @@ public class SendFusionTablesAsyncTask extends AbstractSendAsyncTask { fusiontables.template().insert(tableId, template).execute(); } - private boolean setPermission(String tableId) throws IOException, GoogleAuthException { + private boolean setPermission(Track track, String tableId) throws IOException, GoogleAuthException { boolean defaultTablePublic = PreferencesUtils.getBoolean(context, R.string.export_google_fusion_tables_public_key, PreferencesUtils.EXPORT_GOOGLE_FUSION_TABLES_PUBLIC_DEFAULT); @@ -214,9 +208,12 @@ public class SendFusionTablesAsyncTask extends AbstractSendAsyncTask { } Drive drive = SyncUtils.getDriveService(driveCredential); Permission permission = new Permission(); - permission.setType("anyone"); permission.setRole("reader"); + permission.setType("anyone"); + permission.setValue(""); drive.permissions().insert(tableId, permission).execute(); + + shareUrl = SendFusionTablesUtils.getMapUrl(track, tableId); return true; } diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesUtils.java b/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesUtils.java index 989fd0db9..f7f47f995 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesUtils.java @@ -42,13 +42,11 @@ public class SendFusionTablesUtils { * Gets the url to visualize a fusion table on a map. * * @param track the track + * @param tableId the table id * @return the url. */ - public static String getMapUrl(Track track) { - if (track == null - || track.getTripStatistics() == null - || track.getTableId() == null - || track.getTableId().length() == 0) { + public static String getMapUrl(Track track, String tableId) { + if (track == null || track.getTripStatistics() == null) { Log.e(TAG, "Invalid track"); return null; } @@ -57,7 +55,7 @@ public class SendFusionTablesUtils { int z; if (track.getNumberOfPoints() < 2) { // Use Google's latitude and longitude - latE6 = 37.423 * 1.E6; + latE6 = 37.423 * 1.E6; lonE6 = -122.084 * 1.E6; z = 2; } else { @@ -69,8 +67,7 @@ public class SendFusionTablesUtils { // We explicitly format with Locale.US because we need the latitude and // longitude to be formatted in a locale-independent manner. Specifically, // we need the decimal separator to be a period rather than a comma. - return String.format( - Locale.US, MAP_URL, track.getTableId(), latE6 / 1.E6, lonE6 / 1.E6, z); + return String.format(Locale.US, MAP_URL, tableId, latE6 / 1.E6, lonE6 / 1.E6, z); } /** diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTask.java index a80c555df..11a5fb040 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTask.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTask.java @@ -123,17 +123,6 @@ public class SendMapsAsyncTask extends AbstractSendAsyncTask { } } - @Override - protected void saveResult() { - Track track = myTracksProviderUtils.getTrack(trackId); - if (track == null) { - Log.d(TAG, "No track for " + trackId); - return; - } - track.setMapId(mapId); - myTracksProviderUtils.updateTrack(track); - } - @Override protected boolean performTask() { // Reset the per upload states @@ -222,6 +211,7 @@ public class SendMapsAsyncTask extends AbstractSendAsyncTask { + context.getString(R.string.send_google_by_my_tracks, "", ""); mapId = SendMapsUtils.createNewMap( track.getName(), description, defaultMapPublic, mapsClient, authToken); + shareUrl = MapsClient.buildMapUrl(mapId); } catch (ParseException e) { Log.d(TAG, "Unable to create a new map", e); return false; diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/maps/SendMapsUtils.java b/MyTracks/src/com/google/android/apps/mytracks/io/maps/SendMapsUtils.java index f930039ae..2b811db42 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/maps/SendMapsUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/maps/SendMapsUtils.java @@ -15,7 +15,6 @@ */ package com.google.android.apps.mytracks.io.maps; -import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.io.gdata.maps.MapsClient; import com.google.android.apps.mytracks.io.gdata.maps.MapsFeature; @@ -46,22 +45,6 @@ public class SendMapsUtils { private SendMapsUtils() {} - /** - * Gets the Google Maps url for a track. - * - * @param track the track - * @return the url if available. - */ - public static String getMapUrl(Track track) { - if (track == null - || track.getMapId() == null - || track.getMapId().length() == 0) { - Log.e(TAG, "Invalid track"); - return null; - } - return MapsClient.buildMapUrl(track.getMapId()); - } - /** * Creates a new Google Map. * diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendActivity.java b/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendActivity.java index b21aee1d9..1c5d1b002 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendActivity.java @@ -90,7 +90,8 @@ public abstract class AbstractSendActivity extends Activity { * * @param success true if the AsyncTask is successful */ - public void onAsyncTaskCompleted(boolean success) { + public void onAsyncTaskCompleted(boolean success, String shareUrl) { + sendRequest.setShareUrl(shareUrl); startNextActivity(success, false); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendAsyncTask.java index 11dab9c5c..dd9fe1a0e 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendAsyncTask.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendAsyncTask.java @@ -20,7 +20,7 @@ import android.os.AsyncTask; /** * The abstract class for AsyncTasks sending a track to Google. - * + * * @author Jimmy Shih */ public abstract class AbstractSendAsyncTask extends AsyncTask { @@ -35,6 +35,11 @@ public abstract class AbstractSendAsyncTask extends AsyncTask diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/UploadResultActivity.java b/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/UploadResultActivity.java index 6bf4039c5..d35f665d7 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/UploadResultActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/UploadResultActivity.java @@ -20,10 +20,7 @@ import com.google.android.apps.mytracks.content.MyTracksProviderUtils; import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.fragments.ChooseActivityDialogFragment; import com.google.android.apps.mytracks.fragments.ChooseActivityDialogFragment.ChooseActivityCaller; -import com.google.android.apps.mytracks.io.fusiontables.SendFusionTablesUtils; -import com.google.android.apps.mytracks.io.maps.SendMapsUtils; import com.google.android.apps.mytracks.util.IntentUtils; -import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.maps.mytracks.R; import com.google.common.annotations.VisibleForTesting; @@ -60,7 +57,7 @@ public class UploadResultActivity extends FragmentActivity implements ChooseActi protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sendRequest = getIntent().getParcelableExtra(SendRequest.SEND_REQUEST_KEY); - shareUrl = null; + shareUrl = sendRequest.getShareUrl(); Track track = MyTracksProviderUtils.Factory.get(this).getTrack(sendRequest.getTrackId()); if (track == null) { @@ -69,17 +66,10 @@ public class UploadResultActivity extends FragmentActivity implements ChooseActi return; } - if (sendRequest.isSendMaps() && sendRequest.isMapsSuccess()) { - shareUrl = SendMapsUtils.getMapUrl(track); - } - if (shareUrl == null && sendRequest.isSendFusionTables() - && sendRequest.isFusionTablesSuccess()) { - boolean defaultTablePublic = PreferencesUtils.getBoolean(this, - R.string.export_google_fusion_tables_public_key, - PreferencesUtils.EXPORT_GOOGLE_FUSION_TABLES_PUBLIC_DEFAULT); - if (defaultTablePublic) { - shareUrl = SendFusionTablesUtils.getMapUrl(track); - } + if (sendRequest.isDriveSuccess() && shareUrl != null) { + new ChooseActivityDialogFragment().show( + getSupportFragmentManager(), ChooseActivityDialogFragment.CHOOSE_ACTIVITY_DIALOG_TAG); + return; } showDialog(DIALOG_RESULT_ID); } @@ -171,7 +161,7 @@ public class UploadResultActivity extends FragmentActivity implements ChooseActi .setView(view); // Add a Share URL button if shareUrl exists - if (shareUrl != null) { + if (!hasError && shareUrl != null) { builder.setNegativeButton( R.string.share_track_share_url, new DialogInterface.OnClickListener() { @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/spreadsheets/SendSpreadsheetsAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/io/spreadsheets/SendSpreadsheetsAsyncTask.java index 4586bd6d3..a2b6a4a4f 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/spreadsheets/SendSpreadsheetsAsyncTask.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/spreadsheets/SendSpreadsheetsAsyncTask.java @@ -18,8 +18,6 @@ package com.google.android.apps.mytracks.io.spreadsheets; import com.google.android.apps.mytracks.content.MyTracksProviderUtils; import com.google.android.apps.mytracks.content.Track; -import com.google.android.apps.mytracks.io.fusiontables.SendFusionTablesUtils; -import com.google.android.apps.mytracks.io.maps.SendMapsUtils; import com.google.android.apps.mytracks.io.sendtogoogle.AbstractSendAsyncTask; import com.google.android.apps.mytracks.io.sendtogoogle.SendToGoogleUtils; import com.google.android.apps.mytracks.io.sync.SyncUtils; @@ -97,9 +95,6 @@ public class SendSpreadsheetsAsyncTask extends AbstractSendAsyncTask { @Override protected void closeConnection() {} - @Override - protected void saveResult() {} - @Override protected boolean performTask() { try { @@ -281,19 +276,7 @@ public class SendSpreadsheetsAsyncTask extends AbstractSendAsyncTask { row.getCustomElements().setValueLocal( "maxelevation", SendSpreadsheetsUtils.getElevation(tripStatistics.getMaxElevation(), metricUnits)); row.getCustomElements().setValueLocal("elevationunit", elevationUnit); - - String map = SendMapsUtils.getMapUrl(track); - if (map == null) { - map = context.getString(R.string.value_unknown); - } - row.getCustomElements().setValueLocal("map", map); - - String fusionTable = SendFusionTablesUtils.getMapUrl(track); - if (fusionTable == null) { - fusionTable = context.getString(R.string.value_unknown); - } - row.getCustomElements().setValueLocal("fusiontable", fusionTable); - + ListEntry result = spreadsheetService.insert(worksheetUrl, row); return result != null; } diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/sync/SyncUtils.java b/MyTracks/src/com/google/android/apps/mytracks/io/sync/SyncUtils.java index 737a8b6c0..4790e868b 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/sync/SyncUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/sync/SyncUtils.java @@ -262,9 +262,9 @@ public class SyncUtils { * @param myTracksProviderUtils the myTracksProviderUtils * @param track the track * @param canRetry true if can retry - * @return the added drive file id or null. + * @return the added drive file or null. */ - public static String insertDriveFile(Drive drive, String folderId, Context context, + public static File insertDriveFile(Drive drive, String folderId, Context context, MyTracksProviderUtils myTracksProviderUtils, Track track, boolean canRetry) throws IOException { java.io.File file = getFile(context, myTracksProviderUtils, track); @@ -281,7 +281,7 @@ public class SyncUtils { return null; } SyncUtils.updateTrackWithDriveFileInfo(myTracksProviderUtils, track, uploadedFile); - return uploadedFile.getId(); + return uploadedFile; } finally { file.delete(); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/RemoveTempFilesService.java b/MyTracks/src/com/google/android/apps/mytracks/services/RemoveTempFilesService.java index 33e18357c..37d690db8 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/RemoveTempFilesService.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/RemoveTempFilesService.java @@ -77,8 +77,8 @@ public class RemoveTempFilesService extends Service { // Can't do anything return null; } - cleanTempDirectory(TrackFileFormat.GPX.getExtension()); cleanTempDirectory(TrackFileFormat.KML.getExtension()); + cleanTempDirectory(TrackFileFormat.GPX.getExtension()); cleanTempDirectory(TrackFileFormat.CSV.getExtension()); cleanTempDirectory(TrackFileFormat.TCX.getExtension()); return null; diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java index 3decfba39..84bba4f7f 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/PreferencesUtils.java @@ -48,6 +48,7 @@ public class PreferencesUtils { public static final int AUTO_RESUME_TRACK_TIMEOUT_NEVER = 0; public static final String BLUETOOTH_SENSOR_DEFAULT = ""; + public static final boolean CHART_BY_DISTANCE_DEFAULT = true; public static final boolean CHART_SHOW_CADENCE_DEFAULT = true; public static final boolean CHART_SHOW_ELEVATION_DEFAULT = true; @@ -59,6 +60,7 @@ public class PreferencesUtils { public static final boolean CONFIRM_SHARE_DRIVE_DEFAULT = true; public static final String DEFAULT_ACTIVITY_DEFAULT = ""; + public static final String DRIVE_DELETED_LIST_DEFAULT = ""; public static final long DRIVE_LARGEST_CHANGE_ID_DEFAULT = -1L; public static final boolean DRIVE_SYNC_DEFAULT = false; @@ -72,9 +74,7 @@ public class PreferencesUtils { public static final int FREQUENCY_OFF = 0; public static final String GOOGLE_ACCOUNT_DEFAULT = ""; - public static final int MAP_TYPE_DEFAUlT = 1; - public static final int MAX_RECORDING_DISTANCE_DEFAULT = 200; public static final boolean METRIC_UNITS_DEFAULT = true; public static final int MIN_RECORDING_DISTANCE_DEFAULT = 5; @@ -93,16 +93,27 @@ public class PreferencesUtils { public static final boolean RECORDING_TRACK_PAUSED_DEFAULT = true; public static final boolean REPORT_SPEED_DEFAULT = true; public static final long SELECTED_TRACK_ID_DEFAULT = -1L; - public static final String SENSOR_TYPE_DEFAULT = "NONE"; + + // Share track + public static final boolean SHARE_TRACK_INVITE_DEFAULT = false; + public static final boolean SHARE_TRACK_PUBLIC_DEFAULT = false; + public static final int SPLIT_FREQUENCY_DEFAULT = 0; + + // Stats public static final boolean STATS_SHOW_COORDINATE_DEFAULT = false; public static final boolean STATS_SHOW_GRADE_ELEVATION_DEFAULT = false; + + // Track color public static final String TRACK_COLOR_MODE_DEFAULT = "SINGLE"; public static final int TRACK_COLOR_MODE_MEDIUM_DEFAULT = 15; public static final int TRACK_COLOR_MODE_PERCENTAGE_DEFAULT = 25; public static final int TRACK_COLOR_MODE_SLOW_DEFAULT = 9; + public static final String TRACK_NAME_DEFAULT = "LOCATION"; + + // Track widget public static final int TRACK_WIDGET_ITEM1_DEFAULT = 3; // moving time public static final int TRACK_WIDGET_ITEM2_DEFAULT = 0; // distance public static final int TRACK_WIDGET_ITEM3_DEFAULT = 1; // total time diff --git a/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtilsImpl.java b/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtilsImpl.java index ebc1c0597..7c8a6dcad 100644 --- a/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtilsImpl.java +++ b/MyTracksLib/src/com/google/android/apps/mytracks/content/MyTracksProviderUtilsImpl.java @@ -82,8 +82,6 @@ public class MyTracksProviderUtilsImpl implements MyTracksProviderUtils { int elevationGainIndex = cursor.getColumnIndexOrThrow(TracksColumns.ELEVATIONGAIN); int minGradeIndex = cursor.getColumnIndexOrThrow(TracksColumns.MINGRADE); int maxGradeIndex = cursor.getColumnIndexOrThrow(TracksColumns.MAXGRADE); - int mapIdIndex = cursor.getColumnIndexOrThrow(TracksColumns.MAPID); - int tableIdIndex = cursor.getColumnIndexOrThrow(TracksColumns.TABLEID); int iconIndex = cursor.getColumnIndexOrThrow(TracksColumns.ICON); int driveIdIndex = cursor.getColumnIndexOrThrow(TracksColumns.DRIVEID); int modifiedTimeIndex = cursor.getColumnIndexOrThrow(TracksColumns.MODIFIEDTIME); @@ -154,12 +152,6 @@ public class MyTracksProviderUtilsImpl implements MyTracksProviderUtils { if (!cursor.isNull(maxGradeIndex)) { tripStatistics.setMaxGrade(cursor.getFloat(maxGradeIndex)); } - if (!cursor.isNull(mapIdIndex)) { - track.setMapId(cursor.getString(mapIdIndex)); - } - if (!cursor.isNull(tableIdIndex)) { - track.setTableId(cursor.getString(tableIdIndex)); - } if (!cursor.isNull(iconIndex)) { track.setIcon(cursor.getString(iconIndex)); } @@ -319,8 +311,6 @@ public class MyTracksProviderUtilsImpl implements MyTracksProviderUtils { values.put(TracksColumns.ELEVATIONGAIN, tripStatistics.getTotalElevationGain()); values.put(TracksColumns.MINGRADE, tripStatistics.getMinGrade()); values.put(TracksColumns.MAXGRADE, tripStatistics.getMaxGrade()); - values.put(TracksColumns.MAPID, track.getMapId()); - values.put(TracksColumns.TABLEID, track.getTableId()); values.put(TracksColumns.ICON, track.getIcon()); values.put(TracksColumns.DRIVEID, track.getDriveId()); values.put(TracksColumns.MODIFIEDTIME, track.getModifiedTime()); diff --git a/MyTracksLib/src/com/google/android/apps/mytracks/content/Track.java b/MyTracksLib/src/com/google/android/apps/mytracks/content/Track.java index ae3193780..195d2f99d 100644 --- a/MyTracksLib/src/com/google/android/apps/mytracks/content/Track.java +++ b/MyTracksLib/src/com/google/android/apps/mytracks/content/Track.java @@ -44,8 +44,6 @@ public class Track implements Parcelable { * not loaded) */ private int numberOfPoints = 0; - private String mapId = ""; - private String tableId = ""; private String icon = ""; private String driveId = ""; private long modifiedTime = -1L; @@ -67,8 +65,6 @@ public class Track implements Parcelable { startId = in.readLong(); stopId = in.readLong(); numberOfPoints = in.readInt(); - mapId = in.readString(); - tableId = in.readString(); icon = in.readString(); driveId = in.readString(); modifiedTime = in.readLong(); @@ -98,8 +94,6 @@ public class Track implements Parcelable { dest.writeLong(startId); dest.writeLong(stopId); dest.writeInt(numberOfPoints); - dest.writeString(mapId); - dest.writeString(tableId); dest.writeString(icon); dest.writeString(driveId); dest.writeLong(modifiedTime); @@ -180,22 +174,6 @@ public class Track implements Parcelable { this.numberOfPoints = numberOfPoints; } - public String getMapId() { - return mapId; - } - - public void setMapId(String mapId) { - this.mapId = mapId; - } - - public String getTableId() { - return tableId; - } - - public void setTableId(String tableId) { - this.tableId = tableId; - } - public String getIcon() { return icon; } diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesUtilsTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesUtilsTest.java index 4d85afd19..a25c37b2b 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesUtilsTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesUtilsTest.java @@ -32,36 +32,23 @@ import junit.framework.TestCase; public class SendFusionTablesUtilsTest extends TestCase { /** - * Tests {@link SendFusionTablesUtils#getMapUrl(Track)} with null track. + * Tests {@link SendFusionTablesUtils#getMapUrl(Track, String)} with null track. */ public void testGetMapUrl_null_track() { - assertEquals(null, SendFusionTablesUtils.getMapUrl(null)); + assertEquals(null, SendFusionTablesUtils.getMapUrl(null, "123")); } /** - * Tests {@link SendFusionTablesUtils#getMapUrl(Track)} with null table id. - */ - public void testGetMapUrl_null_table_id() { - Track track = new Track(); - TripStatistics stats = new TripStatistics(); - stats.setBounds((int) 100.E6, (int) 10.E6, (int) 50.E6, (int) 5.E6); - track.setTripStatistics(stats); - track.setTableId(null); - assertEquals(null, SendFusionTablesUtils.getMapUrl(track)); - } - - /** - * Tests {@link SendFusionTablesUtils#getMapUrl(Track)} with null stats. + * Tests {@link SendFusionTablesUtils#getMapUrl(Track, String)} with null stats. */ public void testGetMapUrl_null_stats() { Track track = new Track(); track.setTripStatistics(null); - track.setTableId("123"); - assertEquals(null, SendFusionTablesUtils.getMapUrl(track)); + assertEquals(null, SendFusionTablesUtils.getMapUrl(track, "123")); } /** - * Tests {@link SendFusionTablesUtils#getMapUrl(Track)} with a valid track. + * Tests {@link SendFusionTablesUtils#getMapUrl(Track, String)} with a valid track. */ public void testGetMapUrl_valid_track() { Track track = new Track(); @@ -69,11 +56,10 @@ public class SendFusionTablesUtilsTest extends TestCase { TripStatistics stats = new TripStatistics(); stats.setBounds((int) 100.E6, (int) 10.E6, (int) 50.E6, (int) 5.E6); track.setTripStatistics(stats); - track.setTableId("123"); assertEquals( "https://www.google.com/fusiontables/embedviz?" + "viz=MAP&q=select+col0,+col1,+col2,+col3+from+123+&h=false&lat=7.500000&lng=75.000000" - + "&z=15&t=1&l=col2", SendFusionTablesUtils.getMapUrl(track)); + + "&z=15&t=1&l=col2", SendFusionTablesUtils.getMapUrl(track, "123")); } /** diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTaskTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTaskTest.java index 32dc997e1..b8830b12d 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTaskTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsAsyncTaskTest.java @@ -89,23 +89,6 @@ public class SendMapsAsyncTaskTest extends AndroidTestCase { AndroidMock.expect(sendMapsActivityMock.getApplicationContext()).andReturn(getContext()); } - /** - * Tests the method {@link SendMapsAsyncTask#saveResult()}and makes sure the - * track is updated. - */ - public void testSaveResult() { - Track track = TrackStubUtils.createTrack(1); - track.setMapId(null); - AndroidMock.expect(myTracksProviderUtilsMock.getTrack(TRACK_ID)).andReturn(track); - myTracksProviderUtilsMock.updateTrack(track); - - AndroidMock.replay(sendMapsActivityMock, myTracksProviderUtilsMock); - SendMapsAsyncTask sendMapsAsyncTask = new SendMapsAsyncTask(sendMapsActivityMock, - sendRequest.getTrackId(), sendRequest.getAccount(), myTracksProviderUtilsMock); - sendMapsAsyncTask.saveResult(); - AndroidMock.verify(sendMapsActivityMock, myTracksProviderUtilsMock); - } - /** * Tests {@link SendMapsAsyncTask#fetchSendMapId(Track)} when chooseMapId is * null and makes sure it returns false. diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsUtilsTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsUtilsTest.java index 7b532e063..a7df7ccdf 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsUtilsTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/maps/SendMapsUtilsTest.java @@ -15,7 +15,6 @@ */ package com.google.android.apps.mytracks.io.maps; -import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.io.gdata.maps.MapsFeature; import android.location.Location; @@ -31,31 +30,6 @@ import junit.framework.TestCase; */ public class SendMapsUtilsTest extends TestCase { - /** - * Tests {@link SendMapsUtils#getMapUrl(Track)} with null track. - */ - public void testGetMapUrl_null_track() { - assertEquals(null, SendMapsUtils.getMapUrl(null)); - } - - /** - * Tests {@link SendMapsUtils#getMapUrl(Track)} with null map id. - */ - public void testGetMapUrl_null_map_id() { - Track track = new Track(); - track.setMapId(null); - assertEquals(null, SendMapsUtils.getMapUrl(track)); - } - - /** - * Tests {@link SendMapsUtils#getMapUrl(Track)} with a valid track. - */ - public void testGetMapUrl_valid_track() { - Track track = new Track(); - track.setMapId("123"); - assertEquals("https://maps.google.com/maps/ms?msa=0&msid=123", SendMapsUtils.getMapUrl(track)); - } - /** * Test {@link SendMapsUtils#buildMapsMarkerFeature(String, String, String, * Location)} with a title. diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/SendRequestTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/SendRequestTest.java index 8e98912f0..019fa686d 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/SendRequestTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/sendtogoogle/SendRequestTest.java @@ -32,6 +32,7 @@ public class SendRequestTest extends AndroidTestCase { private final static String ACCOUNTNAME = "testAccount1"; private final static String ACCOUNTYPE = "testType1"; private final static String DRIVE_SHARE_EMAILS = "foo@foo.com"; + private final static String SHARE_URL = "url@url.com"; @Override protected void setUp() throws Exception { @@ -128,12 +129,14 @@ public class SendRequestTest extends AndroidTestCase { parcel.writeByte((byte) 1); parcel.writeByte((byte) 1); parcel.writeString(DRIVE_SHARE_EMAILS); + parcel.writeByte((byte) 1); Account account = new Account(ACCOUNTNAME, ACCOUNTYPE); parcel.writeParcelable(account, 0); parcel.writeByte((byte) 1); parcel.writeByte((byte) 1); parcel.writeByte((byte) 1); parcel.writeByte((byte) 1); + parcel.writeString(SHARE_URL); parcel.setDataPosition(0); sendRequest = SendRequest.CREATOR.createFromParcel(parcel); assertEquals(2, sendRequest.getTrackId()); @@ -144,11 +147,13 @@ public class SendRequestTest extends AndroidTestCase { assertTrue(sendRequest.isDriveEnableSync()); assertTrue(sendRequest.isDriveShare()); assertEquals(DRIVE_SHARE_EMAILS, sendRequest.getDriveShareEmails()); + assertTrue(sendRequest.isDriveSharePublic()); assertEquals(account, sendRequest.getAccount()); assertTrue(sendRequest.isDriveSuccess()); assertTrue(sendRequest.isMapsSuccess()); assertTrue(sendRequest.isFusionTablesSuccess()); assertTrue(sendRequest.isSpreadsheetsSuccess()); + assertEquals(SHARE_URL, sendRequest.getShareUrl()); } /** @@ -165,12 +170,14 @@ public class SendRequestTest extends AndroidTestCase { parcel.writeByte((byte) 0); parcel.writeByte((byte) 0); parcel.writeString(null); + parcel.writeByte((byte) 0); Account account = new Account(ACCOUNTNAME, ACCOUNTYPE); parcel.writeParcelable(account, 0); parcel.writeByte((byte) 0); parcel.writeByte((byte) 0); parcel.writeByte((byte) 0); parcel.writeByte((byte) 0); + parcel.writeString(null); parcel.setDataPosition(0); sendRequest = SendRequest.CREATOR.createFromParcel(parcel); assertEquals(4, sendRequest.getTrackId()); @@ -181,11 +188,13 @@ public class SendRequestTest extends AndroidTestCase { assertFalse(sendRequest.isDriveEnableSync()); assertFalse(sendRequest.isDriveShare()); assertNull(sendRequest.getDriveShareEmails()); + assertFalse(sendRequest.isDriveSharePublic()); assertEquals(account, sendRequest.getAccount()); assertFalse(sendRequest.isDriveSuccess()); assertFalse(sendRequest.isMapsSuccess()); assertFalse(sendRequest.isFusionTablesSuccess()); assertFalse(sendRequest.isSpreadsheetsSuccess()); + assertNull(sendRequest.getShareUrl()); } /** @@ -202,14 +211,16 @@ public class SendRequestTest extends AndroidTestCase { boolean sendMaps = parcel.readByte() == 1; boolean sendFusionTables = parcel.readByte() == 1; boolean sendSpreadsheets = parcel.readByte() == 1; - boolean driveEnableSync = parcel.readByte() == 1; + boolean driveEnableSync = parcel.readByte() == 1; boolean driveShare = parcel.readByte() == 1; String dirveShareEmails = parcel.readString(); + boolean driveSharePublic = parcel.readByte() == 1; Parcelable account = parcel.readParcelable(null); boolean driveSuccess = parcel.readByte() == 1; boolean mapsSuccess = parcel.readByte() == 1; boolean fusionTablesSuccess = parcel.readByte() == 1; boolean spreadsheetsSuccess = parcel.readByte() == 1; + String shareUrl = parcel.readString(); assertEquals(1, trackId); assertFalse(sendDrive); assertFalse(sendMaps); @@ -218,11 +229,13 @@ public class SendRequestTest extends AndroidTestCase { assertFalse(driveEnableSync); assertFalse(driveShare); assertNull(dirveShareEmails); + assertFalse(driveSharePublic); assertNull(account); assertFalse(driveSuccess); assertFalse(mapsSuccess); assertFalse(fusionTablesSuccess); assertFalse(spreadsheetsSuccess); + assertNull(shareUrl); } /** @@ -237,12 +250,14 @@ public class SendRequestTest extends AndroidTestCase { sendRequest.setDriveEnableSync(true); sendRequest.setDriveShare(true); sendRequest.setDriveShareEmails(DRIVE_SHARE_EMAILS); + sendRequest.setDriveSharePublic(true); Account accountNew = new Account(ACCOUNTNAME + "2", ACCOUNTYPE + "2"); sendRequest.setAccount(accountNew); sendRequest.setMapsSuccess(true); sendRequest.setDriveSuccess(true); sendRequest.setFusionTablesSuccess(true); sendRequest.setSpreadsheetsSuccess(true); + sendRequest.setShareUrl(SHARE_URL); Parcel parcel = Parcel.obtain(); parcel.setDataPosition(0); sendRequest.writeToParcel(parcel, 1); @@ -255,11 +270,13 @@ public class SendRequestTest extends AndroidTestCase { boolean driveEnableSync = parcel.readByte() == 1; boolean driveShare = parcel.readByte() == 1; String driveShareEmails = parcel.readString(); + boolean driveSharePublic = parcel.readByte() == 1; Parcelable account = parcel.readParcelable(null); boolean driveSuccess = parcel.readByte() == 1; boolean mapsSuccess = parcel.readByte() == 1; boolean fusionTablesSuccess = parcel.readByte() == 1; boolean spreadsheetsSuccess = parcel.readByte() == 1; + String shareUrl = parcel.readString(); assertEquals(4, trackId); assertTrue(sendDrive); assertTrue(sendMaps); @@ -268,10 +285,12 @@ public class SendRequestTest extends AndroidTestCase { assertTrue(driveEnableSync); assertTrue(driveShare); assertEquals(DRIVE_SHARE_EMAILS, driveShareEmails); + assertTrue(driveSharePublic); assertEquals(accountNew, account); assertTrue(driveSuccess); assertTrue(mapsSuccess); assertTrue(fusionTablesSuccess); assertTrue(spreadsheetsSuccess); + assertEquals(SHARE_URL, shareUrl); } } diff --git a/MyTracksTest_E2E/src/com/google/android/apps/mytracks/endtoendtest/common/DeleteTest.java b/MyTracksTest_E2E/src/com/google/android/apps/mytracks/endtoendtest/common/DeleteTest.java index 9533af947..31f512a9a 100644 --- a/MyTracksTest_E2E/src/com/google/android/apps/mytracks/endtoendtest/common/DeleteTest.java +++ b/MyTracksTest_E2E/src/com/google/android/apps/mytracks/endtoendtest/common/DeleteTest.java @@ -73,13 +73,14 @@ public class DeleteTest extends ActivityInstrumentationTestCase2 views = EndToEndTestUtils.SOLO.getViews(); - int i = 0; - for (View view : views) { - String name = view.getParent().getClass().getName(); - // Each share item is a child of a "RecycleListView" - if (name.indexOf(SHARE_ITEM_PARENT_VIEW_NAME) > 0) { - if (index == i) { - return view; - } - i++; - } - } - return null; - } - /** * Checks the voice frequency and split frequency menus during recording. When * recording, they should be in both the menu and the recording settings. When diff --git a/MyTracksTest_E2E/src/com/google/android/apps/mytracks/endtoendtest/common/SendToGoogleTest.java b/MyTracksTest_E2E/src/com/google/android/apps/mytracks/endtoendtest/common/SendToGoogleTest.java index 61f6e62bb..2e16fe026 100644 --- a/MyTracksTest_E2E/src/com/google/android/apps/mytracks/endtoendtest/common/SendToGoogleTest.java +++ b/MyTracksTest_E2E/src/com/google/android/apps/mytracks/endtoendtest/common/SendToGoogleTest.java @@ -133,7 +133,7 @@ public class SendToGoogleTest extends ActivityInstrumentationTestCase2 checkBoxs = EndToEndTestUtils.SOLO.getCurrentCheckBoxes(); for (int i = 0; i < checkBoxs.size(); i++) {