From 66fd25365bd4570a417a7570e8744d48be455aa1 Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Thu, 14 Feb 2013 10:46:24 -0800 Subject: [PATCH] Add share via drive in the contextual menu. --- .../res/drawable-hdpi/menu_share_drive.png | Bin 0 -> 3478 bytes .../res/drawable-mdpi/menu_share_drive.png | Bin 0 -> 3266 bytes .../res/drawable-xhdpi/menu_share_drive.png | Bin 0 -> 3713 bytes MyTracks/res/menu/list_context_menu.xml | 5 ++ MyTracks/res/menu/track_detail.xml | 2 +- .../ContextualActionModeCallback.java | 19 ++---- .../apps/mytracks/MarkerListActivity.java | 20 ++---- .../apps/mytracks/SearchListActivity.java | 56 +++++++++------- .../apps/mytracks/TrackDetailActivity.java | 63 +++++++++--------- .../apps/mytracks/TrackListActivity.java | 46 ++++++++----- .../fragments/ConfirmDialogFragment.java | 41 ++++++++++-- .../DeleteOneTrackDialogFragment.java | 6 +- .../apps/mytracks/util/Api11Adapter.java | 19 +++--- 13 files changed, 159 insertions(+), 118 deletions(-) create mode 100644 MyTracks/res/drawable-hdpi/menu_share_drive.png create mode 100644 MyTracks/res/drawable-mdpi/menu_share_drive.png create mode 100644 MyTracks/res/drawable-xhdpi/menu_share_drive.png diff --git a/MyTracks/res/drawable-hdpi/menu_share_drive.png b/MyTracks/res/drawable-hdpi/menu_share_drive.png new file mode 100644 index 0000000000000000000000000000000000000000..43985b88c5dca4ed62dabbfcec2946f2a909c0d1 GIT binary patch literal 3478 zcmV;H4QcX;P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0008PNkl3flZUK{Kf?Ux`B^CUia4mKMVl>fL*Nw zxTQvlK!+Y1Gd_i}=%NqgSSH@A(0Du+1>pDj6dfLA-LX0*W;Cu)ZC18iP z?>7Q`0lJz30BiyNgf#NlbKR5?;$p)A00+D<8X3@Q`}C=V)o&md2EdXFoe`0v#&vGJ zh=_BpC?b}WAuA%68kP$I8?{#~dgzPM3oIJ0Uj%v^@(KZujOKq;rcz&=abui&u>pYN z*fmn6BXY(kSqAzd0|4uQd87H~wNe7$f-&Ay9DqsV%@%;ob;ewm&h-}cn*o4h5ni2h zAt#PeW87&I0I)hjIy?hpLIQLEv&Q&&3&4ai_>zCHg@70`-lL!yZfyYIu$FliU5QZ1 zIeluT+0F0Q1x%f@BC_4!<(-J^bI$#Z0C7k}t{X0y6OmIj7Y5+Ip+`!<{+5142>{qs zqge54yyc&Pstn?rAC)l8;xGyGPeqMcrUdYBmmW-DZ>iyH! zmADi56cFe$utwW#HKxc>HC@TCthvz1YAd3if0lsx60kdJGUtG|o?s6==T0Q_>fDZ7 z4-9Ic??8_p%j#FSX6qY}ZA3-(1Q_=0-$|(VhZ|K=_IS1rM97t*=w(o0R5urL&ecqV zMdXc$>}~RbTNaT$&bdMmz%sw-AKfWH3XlS%0CDtx00$3D3)C|j@&Et;07*qoM6N<$ Eg8F1>8vpKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0005)Nkll8G&xCDWVQw}0nu8Fm@H6(JOt)hlN zR|U7G#KG(~h=YSmiw#*cNtl>IO``o#e+|9D?QqU{zvDR|gfAQp_k7R$oZtEQzVCf+ z3D8+aS!W#Q0F{jT4oO>*u1lJh^dmvHCTTRpu#|BT)+N1>bS&vzitbQSr=)Gy5eU7m z@;6@D??Zs1ppdB2TsIuN~i z0U8O$A8q`m1JK9=aL+NnYq}4PuJ1Ge7lH4Naox1Tj&9{N0P~LNTcFaUUvcy!SpaT1 zW=B9zB&W~G`D9zy1!xbL`iYDS_9X6v0L(Zh>p)8aK(CYg8E8!d7{rfj&d!;2@}B^g z;sENv7bp37z`0Qa_EJ0!fTt(==4!YoX&|L;ZAj`4teP#7F2|JXvZSh2(~W39@KDl$ zq~Qe9F}n{1G%~xAej3O>#aB|Rq@AR4Tm$xFrft&3C&(Y0!0ohM@GO$BW2^o`0$i3j zj-DTJ0Byi-Q_>B4{KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000B5NklV#!?MPj6 ztS10qC2%NsJp%a40pZO-0|0my=&lH#6C7Xb0C09N0XP&0KM@>n1+F+CEN*%Lz@mPH zzZJZ{+yUSc(9*O3fRVr-{RqF%0byNJ0RWx?x-tlFPXH@ww}6q&1YmPU;kSV?!Fk_0AZ%(10Kf~tgB-#?4bFWL z=q(7~4luq{06+_HHmC6afr){SFCDX>vuptG78L$P;A2wG8I%gMp#Xr1z`q5BKL%b7 zeC=?|g8gLyIP4Jp2$&W48V}ra_E44 zJN&+y7eLV!p-xH9Ihw^aX4aEDXlC~$eeCeNt?nyAza{Zv#jO-fLAI%H%0B6oR{VjN36?0Ys~;u zma#541lAcaE5=Y6)P2bLy`xxVSRc5%W4Q!VLhJ2J|?DoJxKv<%DqD5xd<5 zpfU|Tt2RBrbm!{wY)AZVV2q~_S|w?&L;pu+_L~QQnO%_dRl(E8NopTxKx-8TTOHaj zN&2itJ9r;Tx>1y2;Ytwrq~O%+O{>eBZvV3ifYAk;lg|gs2Cxm(^_iJ~_ayDe5$~F$ z8D@6BZ!b{Nq7w5zBdH@b#|!}4Bwdy?C1b#aW_G-i{8UN5NE%jB^1YH~N$M(mgM^tq zl(aEpz=M6sS8R8Q$xG5MGwX7^e31DVFo1gyylM-Vdm6&`lFuQJxqQHSf!1ammigP7@ z`g`iSDhx~xy2JC~-5S8^l9T@%c%~7{;vK+4;HAXI#_f^;tZwAK!25|~`%6y#`?Pz9 zT%~ZvTKf%2r^_t&CB0^5Kc)dFTnT1KzE#rRlKY)~X~|cubcz2OQv?tJL;w*$1P}p4 f01?2Dv?l`qzixqQN!PnA00000NkvXXu0mjfEIHV% literal 0 HcmV?d00001 diff --git a/MyTracks/res/menu/list_context_menu.xml b/MyTracks/res/menu/list_context_menu.xml index 68aaa23c4..25cacde0c 100644 --- a/MyTracks/res/menu/list_context_menu.xml +++ b/MyTracks/res/menu/list_context_menu.xml @@ -15,6 +15,11 @@ See the License for the specific language governing permissions and limitations under the License. --> + item = arrayAdapter.getItem(position); - Long trackId = (Long) item.get(TRACK_ID_FIELD); - Track track = myTracksProviderUtils.getTrack(trackId); - return !track.isSharedWithMe(); - } - - @Override - public boolean canDelete(int position, long id) { + public void onPrepare(Menu menu, int position, long id) { Map item = arrayAdapter.getItem(position); Long trackId = (Long) item.get(TRACK_ID_FIELD); Long markerId = (Long) item.get(MARKER_ID_FIELD); - if (markerId != null) { - Track track = myTracksProviderUtils.getTrack(trackId); - return !track.isSharedWithMe(); - } else { - return true; - } + Track track = myTracksProviderUtils.getTrack(trackId); + menu.findItem(R.id.list_context_menu_share_drive) + .setVisible(markerId == null && !track.isSharedWithMe()); + menu.findItem(R.id.list_context_menu_show_on_map).setVisible(markerId != null); + menu.findItem(R.id.list_context_menu_edit).setVisible(!track.isSharedWithMe()); + menu.findItem(R.id.list_context_menu_delete) + .setVisible(markerId == null || !track.isSharedWithMe()); } }; @@ -295,14 +290,8 @@ public class SearchListActivity extends AbstractMyTracksActivity super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.menu.list_context_menu, menu); - Map item = arrayAdapter.getItem(((AdapterContextMenuInfo) menuInfo).position); - Long trackId = (Long) item.get(TRACK_ID_FIELD); - Long markerId = (Long) item.get(MARKER_ID_FIELD); - Track track = myTracksProviderUtils.getTrack(trackId); - menu.findItem(R.id.list_context_menu_edit).setVisible(!track.isSharedWithMe()); - if (markerId != null) { - menu.findItem(R.id.list_context_menu_delete).setVisible(!track.isSharedWithMe()); - } + int position = ((AdapterContextMenuInfo) menuInfo).position; + contextualActionModeCallback.onPrepare(menu, position, 0); } @Override @@ -337,6 +326,12 @@ public class SearchListActivity extends AbstractMyTracksActivity Long markerId = (Long) item.get(MARKER_ID_FIELD); Intent intent; switch (itemId) { + case R.id.list_context_menu_share_drive: + ConfirmDialogFragment.newInstance(R.string.confirm_share_drive_key, + PreferencesUtils.CONFIRM_SHARE_DRIVE_DEFAULT, + getString(R.string.share_track_drive_confirm_message), trackId) + .show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG); + return true; case R.id.list_context_menu_show_on_map: if (markerId != null) { intent = IntentUtils.newIntent(this, TrackDetailActivity.class) @@ -509,6 +504,17 @@ public class SearchListActivity extends AbstractMyTracksActivity resultMap.put(MARKER_ID_FIELD, null); } + @Override + public void onConfirmed(int confirmId, long trackId) { + switch (confirmId) { + case R.string.confirm_share_drive_key: + AddPeopleDialogFragment.newInstance(trackId) + .show(getSupportFragmentManager(), AddPeopleDialogFragment.ADD_PEOPLE_DIALOG_TAG); + break; + default: + } + } + @Override public TrackRecordingServiceConnection getTrackRecordingServiceConnection() { return trackRecordingServiceConnection; diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java index 3bfb2d2b4..84113d471 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java @@ -26,6 +26,7 @@ import com.google.android.apps.mytracks.fragments.ChartFragment; import com.google.android.apps.mytracks.fragments.ChooseActivityDialogFragment; import com.google.android.apps.mytracks.fragments.ChooseUploadServiceDialogFragment; import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment; +import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment.ConfirmCaller; import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment.DeleteOneTrackCaller; import com.google.android.apps.mytracks.fragments.FrequencyDialogFragment; @@ -70,7 +71,7 @@ import java.util.Locale; * @author Leif Hendrik Wilden * @author Rodrigo Damazio */ -public class TrackDetailActivity extends AbstractMyTracksActivity implements DeleteOneTrackCaller { +public class TrackDetailActivity extends AbstractMyTracksActivity implements ConfirmCaller, DeleteOneTrackCaller { public static final String EXTRA_TRACK_ID = "track_id"; public static final String EXTRA_MARKER_ID = "marker_id"; @@ -322,34 +323,6 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del return super.onPrepareOptionsMenu(menu); } - /** - * Invokes when the confirm dialog is done. - * - * @param id the confirm id - */ - public void onConfirmDialogDone(int id) { - switch (id) { - case R.string.confirm_play_earth_key: - AnalyticsUtils.sendPageViews(this, "/action/play"); - Intent intent = IntentUtils.newIntent(this, SaveActivity.class) - .putExtra(SaveActivity.EXTRA_TRACK_ID, trackId) - .putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) TrackFileFormat.KML) - .putExtra(SaveActivity.EXTRA_PLAY_TRACK, true); - startActivity(intent); - break; - case R.string.confirm_share_map_key: - AnalyticsUtils.sendPageViews(this, "/action/share"); - ChooseActivityDialogFragment.newInstance(trackId, null).show( - getSupportFragmentManager(), ChooseActivityDialogFragment.CHOOSE_ACTIVITY_DIALOG_TAG); - break; - case R.string.confirm_share_drive_key: - AddPeopleDialogFragment.newInstance(trackId) - .show(getSupportFragmentManager(), AddPeopleDialogFragment.ADD_PEOPLE_DIALOG_TAG); - break; - default: - } - } - @Override public boolean onOptionsItemSelected(MenuItem item) { Intent intent; @@ -364,7 +337,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del if (isEarthInstalled()) { ConfirmDialogFragment.newInstance(R.string.confirm_play_earth_key, PreferencesUtils.CONFIRM_PLAY_EARTH_DEFAULT, - getString(R.string.track_detail_play_confirm_message)) + getString(R.string.track_detail_play_confirm_message), trackId) .show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG); } else { new InstallEarthDialogFragment().show( @@ -374,13 +347,13 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del case R.id.track_detail_share: ConfirmDialogFragment.newInstance(R.string.confirm_share_map_key, PreferencesUtils.CONFIRM_SHARE_MAP_DEFAULT, StringUtils.getHtml( - this, R.string.share_track_map_confirm_message, R.string.maps_public_unlisted_url)) - .show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG); + this, R.string.share_track_map_confirm_message, R.string.maps_public_unlisted_url), + trackId).show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG); return true; case R.id.track_detail_share_drive: ConfirmDialogFragment.newInstance(R.string.confirm_share_drive_key, PreferencesUtils.CONFIRM_SHARE_DRIVE_DEFAULT, - getString(R.string.share_track_drive_confirm_message)) + getString(R.string.share_track_drive_confirm_message), trackId) .show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG); return true; case R.id.track_detail_markers: @@ -455,6 +428,30 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del return super.onTrackballEvent(event); } + @Override + public void onConfirmed(int confirmId, long confirmTrackId) { + switch (confirmId) { + case R.string.confirm_play_earth_key: + AnalyticsUtils.sendPageViews(this, "/action/play"); + Intent intent = IntentUtils.newIntent(this, SaveActivity.class) + .putExtra(SaveActivity.EXTRA_TRACK_ID, confirmTrackId) + .putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) TrackFileFormat.KML) + .putExtra(SaveActivity.EXTRA_PLAY_TRACK, true); + startActivity(intent); + break; + case R.string.confirm_share_map_key: + AnalyticsUtils.sendPageViews(this, "/action/share"); + ChooseActivityDialogFragment.newInstance(confirmTrackId, null).show( + getSupportFragmentManager(), ChooseActivityDialogFragment.CHOOSE_ACTIVITY_DIALOG_TAG); + break; + case R.string.confirm_share_drive_key: + AddPeopleDialogFragment.newInstance(confirmTrackId) + .show(getSupportFragmentManager(), AddPeopleDialogFragment.ADD_PEOPLE_DIALOG_TAG); + break; + default: + } + } + @Override public TrackRecordingServiceConnection getTrackRecordingServiceConnection() { return trackRecordingServiceConnection; diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java index 4a073ea05..7725acbac 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java @@ -23,6 +23,9 @@ import com.google.android.apps.mytracks.content.TrackDataListener; import com.google.android.apps.mytracks.content.TrackDataType; import com.google.android.apps.mytracks.content.TracksColumns; import com.google.android.apps.mytracks.content.Waypoint; +import com.google.android.apps.mytracks.fragments.AddPeopleDialogFragment; +import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment; +import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment.ConfirmCaller; import com.google.android.apps.mytracks.fragments.DeleteAllTrackDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment.DeleteOneTrackCaller; @@ -89,7 +92,8 @@ import java.util.Locale; * * @author Leif Hendrik Wilden */ -public class TrackListActivity extends FragmentActivity implements DeleteOneTrackCaller { +public class TrackListActivity extends FragmentActivity + implements ConfirmCaller, DeleteOneTrackCaller { private static final String TAG = TrackListActivity.class.getSimpleName(); private static final String START_GPS_KEY = "start_gps_key"; @@ -195,15 +199,12 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac return handleContextItem(itemId, id); } - @Override - public boolean canEdit(int position, long id) { + public void onPrepare(Menu menu, int position, long id) { Track track = myTracksProviderUtils.getTrack(id); - return !track.isSharedWithMe(); - } - - @Override - public boolean canDelete(int position, long id) { - return true; + menu.findItem(R.id.list_context_menu_share_drive).setVisible(!track.isSharedWithMe()); + menu.findItem(R.id.list_context_menu_show_on_map).setVisible(false); + menu.findItem(R.id.list_context_menu_edit).setVisible(!track.isSharedWithMe()); + menu.findItem(R.id.list_context_menu_delete).setVisible(true); } }; @@ -401,10 +402,10 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac TrackListActivity.this, cursor.getDouble(totalDistanceIndex), metricUnits); long startTime = cursor.getLong(startTimeIndex); String description = cursor.getString(descriptionIndex); - + ListItemUtils.setListItem(TrackListActivity.this, view, isRecording, recordingTrackPaused, - iconId, R.string.icon_track, name, category, totalTime, - totalDistance, startTime, description); + iconId, R.string.icon_track, name, category, totalTime, totalDistance, startTime, + description); } }; listView.setAdapter(sectionResourceCursorAdapter); @@ -607,9 +608,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.menu.list_context_menu, menu); - long trackId = ((AdapterContextMenuInfo) menuInfo).id; - Track track = myTracksProviderUtils.getTrack(trackId); - menu.findItem(R.id.list_context_menu_edit).setVisible(!track.isSharedWithMe()); + contextualActionModeCallback.onPrepare(menu, 0, ((AdapterContextMenuInfo) menuInfo).id); } @Override @@ -630,6 +629,17 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac return super.onKeyUp(keyCode, event); } + @Override + public void onConfirmed(int confirmId, long trackId) { + switch (confirmId) { + case R.string.confirm_share_drive_key: + AddPeopleDialogFragment.newInstance(trackId) + .show(getSupportFragmentManager(), AddPeopleDialogFragment.ADD_PEOPLE_DIALOG_TAG); + break; + default: + } + } + @Override public TrackRecordingServiceConnection getTrackRecordingServiceConnection() { return trackRecordingServiceConnection; @@ -763,6 +773,12 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac private boolean handleContextItem(int itemId, long trackId) { Intent intent; switch (itemId) { + case R.id.list_context_menu_share_drive: + ConfirmDialogFragment.newInstance(R.string.confirm_share_drive_key, + PreferencesUtils.CONFIRM_SHARE_DRIVE_DEFAULT, + getString(R.string.share_track_drive_confirm_message), trackId) + .show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG); + return true; case R.id.list_context_menu_show_on_map: intent = IntentUtils.newIntent(this, TrackDetailActivity.class) .putExtra(TrackDetailActivity.EXTRA_TRACK_ID, trackId); diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/ConfirmDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/ConfirmDialogFragment.java index 95a1d1999..204229db2 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/ConfirmDialogFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/ConfirmDialogFragment.java @@ -16,10 +16,10 @@ package com.google.android.apps.mytracks.fragments; -import com.google.android.apps.mytracks.TrackDetailActivity; import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.maps.mytracks.R; +import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; @@ -36,35 +36,62 @@ import android.widget.TextView; */ public class ConfirmDialogFragment extends DialogFragment { + /** + * Interface for caller of this dialog fragment. + * + * @author Jimmy Shih + */ + public interface ConfirmCaller { + + /** + * Called when confirmed. + */ + public void onConfirmed(int confirmId, long trackId); + } + public static final String CONFIRM_DIALOG_TAG = "confirmDialog"; private static final String KEY_CONFIRM_ID = "confirmId"; private static final String KEY_DEFAULT_VALUE = "defaultValue"; private static final String KEY_MESSAGE = "message"; - + private static final String KEY_TRACK_ID = "trackId"; + private CheckBox checkBox; public static ConfirmDialogFragment newInstance( - int confirmId, boolean defaultValue, CharSequence message) { + int confirmId, boolean defaultValue, CharSequence message, long trackId) { Bundle bundle = new Bundle(); bundle.putInt(KEY_CONFIRM_ID, confirmId); bundle.putBoolean(KEY_DEFAULT_VALUE, defaultValue); bundle.putCharSequence(KEY_MESSAGE, message); + bundle.putLong(KEY_TRACK_ID, trackId); ConfirmDialogFragment confirmDialogFragment = new ConfirmDialogFragment(); confirmDialogFragment.setArguments(bundle); return confirmDialogFragment; } + private ConfirmCaller caller; + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + caller = (ConfirmCaller) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + " must implement ConfirmCaller"); + } + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int confirmId = getArguments().getInt(KEY_CONFIRM_ID); boolean defaultValue = getArguments().getBoolean(KEY_DEFAULT_VALUE); if (!PreferencesUtils.getBoolean(getActivity(), confirmId, defaultValue)) { + long trackId = getArguments().getLong(KEY_TRACK_ID); dismiss(); - TrackDetailActivity trackDetailActivity = (TrackDetailActivity) getActivity(); - trackDetailActivity.onConfirmDialogDone(confirmId); + caller.onConfirmed(confirmId, trackId); } } @@ -80,9 +107,9 @@ public class ConfirmDialogFragment extends DialogFragment { @Override public void onClick(DialogInterface dialog, int which) { int confirmId = getArguments().getInt(KEY_CONFIRM_ID); + long trackId = getArguments().getLong(KEY_TRACK_ID); PreferencesUtils.setBoolean(getActivity(), confirmId, !checkBox.isChecked()); - TrackDetailActivity trackDetailActivity = (TrackDetailActivity) getActivity(); - trackDetailActivity.onConfirmDialogDone(confirmId); + caller.onConfirmed(confirmId, trackId); } }).setTitle(R.string.generic_confirm_title).setView(view).create(); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneTrackDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneTrackDialogFragment.java index c049b6f46..2cf26dc4c 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneTrackDialogFragment.java +++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/DeleteOneTrackDialogFragment.java @@ -37,9 +37,6 @@ import android.support.v4.app.FragmentActivity; */ public class DeleteOneTrackDialogFragment extends DialogFragment { - public static final String DELETE_ONE_TRACK_DIALOG_TAG = "deleteOneTrackDialog"; - private static final String KEY_TRACK_ID = "trackId"; - /** * Interface for caller of this dialog fragment. * @@ -57,6 +54,9 @@ public class DeleteOneTrackDialogFragment extends DialogFragment { */ public void onTrackDeleted(); } + + public static final String DELETE_ONE_TRACK_DIALOG_TAG = "deleteOneTrackDialog"; + private static final String KEY_TRACK_ID = "trackId"; public static DeleteOneTrackDialogFragment newInstance(long trackId) { Bundle bundle = new Bundle(); diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/Api11Adapter.java b/MyTracks/src/com/google/android/apps/mytracks/util/Api11Adapter.java index cc1f285e5..1ab8dca50 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/Api11Adapter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/Api11Adapter.java @@ -59,32 +59,33 @@ public class Api11Adapter extends Api10Adapter { final ContextualActionModeCallback contextualActionModeCallback) { listView.setOnItemLongClickListener(new OnItemLongClickListener() { ActionMode actionMode; - @Override + + @Override public boolean onItemLongClick( AdapterView parent, View view, final int position, final long id) { if (actionMode != null) { return false; } actionMode = activity.startActionMode(new ActionMode.Callback() { - @Override + @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { mode.getMenuInflater().inflate(R.menu.list_context_menu, menu); return true; } - @Override + + @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - menu.findItem(R.id.list_context_menu_edit) - .setVisible(contextualActionModeCallback.canEdit(position, id)); - menu.findItem(R.id.list_context_menu_delete) - .setVisible(contextualActionModeCallback.canDelete(position, id)); + contextualActionModeCallback.onPrepare(menu, position, id); // Return true to indicate change return true; } - @Override + + @Override public void onDestroyActionMode(ActionMode mode) { actionMode = null; } - @Override + + @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { mode.finish(); return contextualActionModeCallback.onClick(item.getItemId(), position, id);