From d1055ef5ee5d3a5e3038c1ee24b394a8bb4ea21d Mon Sep 17 00:00:00 2001 From: youtaol Date: Sat, 8 Jun 2013 13:12:39 +0800 Subject: [PATCH] Merge heads --- MyTracks/AndroidManifest.xml | 4 +- .../list_selector_background_mytracks.9.png | Bin 140 -> 0 bytes MyTracks/res/drawable-hdpi/menu_export.png | Bin 1405 -> 312 bytes .../list_selector_background_mytracks.9.png | Bin 115 -> 0 bytes MyTracks/res/drawable-mdpi/menu_export.png | Bin 1259 -> 253 bytes .../list_selector_background_mytracks.9.png | Bin 144 -> 0 bytes MyTracks/res/drawable-xhdpi/menu_export.png | Bin 1593 -> 361 bytes .../activated_background_mytracks.xml | 20 --- MyTracks/res/layout/export.xml | 4 +- .../{add_emails.xml => share_track.xml} | 24 ++- MyTracks/res/menu/track_list.xml | 26 ++-- .../res/raw/mytracks_empty_spreadsheet.ods | Bin 9626 -> 10185 bytes MyTracks/res/values-v11/styles.xml | 2 +- .../res/values/arrays_do_not_translate.xml | 2 +- MyTracks/res/values/keys.xml | 2 + MyTracks/res/values/strings.xml | 141 ++++++++++-------- MyTracks/res/values/styles.xml | 3 +- .../AbstractSendToGoogleActivity.java | 34 ++--- .../apps/mytracks/TrackListActivity.java | 2 +- .../ChooseActivityDialogFragment.java | 2 +- .../fragments/ExportDialogFragment.java | 14 +- .../fragments/MyTracksMapFragment.java | 11 ++ ...ent.java => ShareTrackDialogFragment.java} | 76 +++++++--- .../mytracks/io/drive/SendDriveActivity.java | 4 +- .../mytracks/io/drive/SendDriveAsyncTask.java | 51 +++++-- .../apps/mytracks/io/file/SaveActivity.java | 10 +- .../mytracks/io/file/TrackFileFormat.java | 12 +- .../SendFusionTablesAsyncTask.java | 15 +- .../fusiontables/SendFusionTablesUtils.java | 13 +- .../mytracks/io/maps/SendMapsAsyncTask.java | 12 +- .../apps/mytracks/io/maps/SendMapsUtils.java | 17 --- .../io/sendtogoogle/AbstractSendActivity.java | 3 +- .../sendtogoogle/AbstractSendAsyncTask.java | 28 ++-- .../mytracks/io/sendtogoogle/SendRequest.java | 30 +++- .../io/sendtogoogle/UploadResultActivity.java | 22 +-- .../SendSpreadsheetsAsyncTask.java | 19 +-- .../apps/mytracks/io/sync/SyncUtils.java | 6 +- .../services/RemoveTempFilesService.java | 2 +- .../apps/mytracks/util/PreferencesUtils.java | 17 ++- .../content/MyTracksProviderUtilsImpl.java | 10 -- .../android/apps/mytracks/content/Track.java | 22 --- .../SendFusionTablesUtilsTest.java | 26 +--- .../io/maps/SendMapsAsyncTaskTest.java | 17 --- .../mytracks/io/maps/SendMapsUtilsTest.java | 26 ---- .../io/sendtogoogle/SendRequestTest.java | 21 ++- .../endtoendtest/common/DeleteTest.java | 5 +- .../endtoendtest/common/MenuItemsTest.java | 28 ---- .../endtoendtest/common/SendToGoogleTest.java | 2 +- 48 files changed, 374 insertions(+), 411 deletions(-) delete mode 100644 MyTracks/res/drawable-hdpi/list_selector_background_mytracks.9.png delete mode 100644 MyTracks/res/drawable-mdpi/list_selector_background_mytracks.9.png delete mode 100644 MyTracks/res/drawable-xhdpi/list_selector_background_mytracks.9.png delete mode 100644 MyTracks/res/drawable/activated_background_mytracks.xml rename MyTracks/res/layout/{add_emails.xml => share_track.xml} (59%) rename MyTracks/src/com/google/android/apps/mytracks/fragments/{AddEmailsDialogFragment.java => ShareTrackDialogFragment.java} (60%) 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 bc72a9c8df90242bc6b14aaddbbf3ee4ba8fb9ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqh!JaOTArj%qDF;~oPi&Exxb)zh z|8seaH)c2qCh4SmEMEKQzeD;Nr%lD$hwBwmSe)3{@@H6_kzCRB-#Di+J0<1A!Syp5 o8P}g|Rxvs7(Mcny;ZqO8)GZp!sn?fU0gY$yboFyt=akR{0KFYCRR910 diff --git a/MyTracks/res/drawable-hdpi/menu_export.png b/MyTracks/res/drawable-hdpi/menu_export.png index a1d27cec9b361d420a038617141b690b67cceb30..d919ac5ee06a53f20cf33bb97c9a57be91b117f0 100644 GIT binary patch literal 312 zcmV-80muG{P)u6oF|s(~i2_tz9B>CkijNzx!d6v)i3ugCcQZ^fJ0 zB?gq;8)E^5DxgpW6smwiS?mYf&9ZM7_h#m!K!Gh__Oe^D>_B&G*Y0A#DV0tD0000< KMNUMnLSTYT*nvv` literal 1405 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi))Wpcm$=Slx$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1O_pUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnv1> zG!Lpb1-Dzwaq86vIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z<}b*a#lXP$-qXb~ zq~g|_8TLBPjxxvNqZfq;*RypVZ0M*LOgiACB*Bx`?W)r2dq#}eOh~x%Xo6sl+r%3x zVnRYXVmv}lE}5&(f1i{;dD%p}+V}UerT2T=Wfr~Neee0Z^8LH3?Jk@2Ch65JKGDt5 z(EvjS>cuoJUh(73VEy`l^-hDgfObiv!3>tiZ}w#AbIv=+d4sV$kL!ob9rjrVxL&Zu zE6n>A%fNC_IfCVQt6Bi}HV5g7^Pj9$1zC+B?3o}|$Wjtf5;xUffa!B)>C**`#t}37 zB?A`k=U?UUNdN!A^PvIkZVsle<1LMMKRBb^n7HBCx#yoYM2V-yXnWetUKO0Ujniz; z2`5Lp=_fu~UVYgg|LRdrexK6qytRy?R>=$QyFKUazUgH!`D{~~d0GOOPw=5L9y51! zWo>S&KDEoQkz=!m*7e;#l|0|x*&8E$-%6}dJ=rM1IH$-@>&*{V3#RI@&AFz`i*5Aw zRF;@|r!HeO;HWy_w9RN3%^gKb1^m+_y%hBf_Pe)8GO}BpbE>_=f6G!UuBC6+Mcu~e*mld($FCj* z-gy3~ZP~3lrsX{h*Yi?7g*mafI3UoRsq&0$3_E9*YklJgx&bN>Jzf1=);T3K0RXvb B?SKFP 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 a6b8d599f9365184fcf570b32e786227d7f10a93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqR-P`7Arj%qDGsdv7sj~FFqrXi z|KvoqSxyGiH_lP))nNVKsCK4l)&^0pYUSAu0gO-c7^+!j>pRFXGVG3(V19HixeI6t NgQu&X%Q~loCIG^}B1!-N diff --git a/MyTracks/res/drawable-mdpi/menu_export.png b/MyTracks/res/drawable-mdpi/menu_export.png index 0e06c22127f0de4a5f2a757758aa3d2135ba8a73..c50a8b61e41184edc4bc555e81a467a071d79282 100644 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEX7WqAsj$Z!;#Vf>whZ|2hM2@oHrO%9a)2#$`Uv=8-+9)`Rv%$W_3oUs;ri)IPUYQu57cg zBBwXsvN8r%hRZ_xf)1XvdQz`&bHbaoPuwR7i)VE=H1exWO7*KepB|%EIe9|$t+k(w zUhH<;t9oGX#QJ}7Dz`<8&ij5o(cQq+us@RZflTgBrX6=&mGqu!UP+m#$l;wUX`0#b yGkrVzA3KM+i#h}y#MkaLWp|Z4m@{L02HWeepYoz#32^}3&*16m=d#Wzp$P!A>s%WE literal 1259 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi))Y-tz$kfo($-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OnfUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dR=1cK zxdE-lX&zK>3U0R;;MA)Rbc{YIYLTKECIn1BASOKF0y*%cpPC0u??u3bEgkxO8Uq7k ztfz}(NX4x;*X+Fy2Z*#kT=s9ft4xVNiO8HU%pE&!E?v>_VA+D^)!jQf6zYW4*$WHG z3j#JQ4%oPPL5D@hqHD8`d_N%A)$(nbx#{V>A9Q>#{n_#S&gH5^iL^^GH+@c>W-VZh zX}H2%a%@jM*W?$6c-IO13vZ}glf)x8ub{{I$6B@zJnkQ@$^s6D$NreZb|XK%p-^Ta z^Zoky?($}Z%T*`+*3wW9ZHj#IQL51QQuxO9IG)$f8Xn?#@V&yn!soOfPvRk!1D1Y<3v4I( zHkdqSUgzuYxLt0((l6cTd*`&d&z-i^;<&+j=Zq^#4aC duiYCM87A%u5!^fD=V4Isvd$@?2>_jG!nOba 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 3492ac3535e4d93c6d55e025887092fb962bd85d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0y_a8DP<5RKsElmmSK7IPXe(q`uV z^FC!p=V695hkBm!WIFpiu3sRZzOXV)`*6Ji3!|GtO2P-XY3)A+gCEzo>1wbU8vVEs rq0G!2=qJnhk;8A@k|m)5ZPD;8G|&jQg;A zX82RV@RR;o;Y-YY%6V;`=8g{0%w7}MIy3uNxc_Em#m+>l3xp5`GaKfvk@urGh7hi6 zpPN$sZxt_~<^|NefSMOj^8#vKKrLjRAUCV}H{b=-sxR;bYGXC{j>O%J00000NkvXX Hu0mjfG})bG literal 1593 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%uvD1M9IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|esh**NZ(?$0 z9!LbN!`Ii!Gq1QLF)umQ)5TT^Xog;9W{Q=osfm%Ble3AblYyI|p{t>#iJ_&diIcOV zo2j9>iIX8ruSMv>2~2MaLa!-Ky`aR9TL84#CABECEH%ZgC_h&L>}jh^+-@<# zX&zK>3U0R;l1hD>-3~?btIzFxeoylH zXB+kNi%*{XIe~!_D>`vkwwaVhF9J(Nf!f{`VabU*dW9baUz~k-16lm`+50n*^;b_A4Fg4 zejs4MUiWjxp2Hu(NFk!!j$E8_UR_TZw3|?TIqF3$HZv22V zWBCNT4UPAI%-wz5q+;$isRZp3ei^2t|2teJe;0c5{M^M;8LPOojJNt6k~Nqv#<=@H z?1h8-Ne$*Ew-|ue9wjxr&L!x-yZjK?uF_P3hy>ohN#CZJLofo zNh`;Eesig&KdZH_-B)de7lk*p*2E^seJm{UPI{XAY5jp2_s - - - - - \ 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 eb7aca654a7e4c92bb020c8d22420e6306c83761..856f33fda1d8100432a22a69d4714686a20090e2 100644 GIT binary patch literal 10185 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%0D!yIJm3oUE)iz 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 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++) {