From 9ff1af221bd8f8d69bed00ff93678b75184e2f10 Mon Sep 17 00:00:00 2001 From: Jimmy Shih Date: Thu, 29 Mar 2012 18:02:28 -0700 Subject: [PATCH] Move the track context menu to the main menu. Use sharedPreferenceChangeListener to listen when a new recording has started to update the view like the action items. --- .../res/drawable-hdpi/menu_insert_marker.png | Bin 0 -> 1625 bytes MyTracks/res/drawable-hdpi/menu_play.png | Bin 0 -> 1410 bytes MyTracks/res/drawable-hdpi/menu_share.png | Bin 0 -> 1606 bytes .../res/drawable-mdpi/menu_insert_marker.png | Bin 0 -> 1379 bytes MyTracks/res/drawable-mdpi/menu_play.png | Bin 0 -> 1248 bytes MyTracks/res/drawable-mdpi/menu_share.png | Bin 0 -> 1341 bytes .../res/drawable-xhdpi/menu_insert_marker.png | Bin 0 -> 1903 bytes MyTracks/res/drawable-xhdpi/menu_play.png | Bin 0 -> 1620 bytes MyTracks/res/drawable-xhdpi/menu_share.png | Bin 0 -> 1780 bytes MyTracks/res/layout/mytracks_layout.xml | 19 - MyTracks/res/menu/track_detail.xml | 74 ++- MyTracks/res/values/strings.xml | 243 ++++----- .../android/apps/mytracks/Constants.java | 22 +- .../android/apps/mytracks/MapActivity.java | 198 -------- .../android/apps/mytracks/SearchActivity.java | 2 +- .../apps/mytracks/TrackDetailActivity.java | 463 +++++++++++------- .../apps/mytracks/TrackListActivity.java | 184 +++---- .../mytracks/io/backup/RestoreActivity.java | 4 +- .../services/TrackRecordingService.java | 5 +- .../apps/mytracks/util/PlayTrackUtils.java | 2 +- .../mytracks/widgets/TrackWidgetProvider.java | 3 + .../mytracks/TrackDetailActivityTest.java | 59 --- 22 files changed, 543 insertions(+), 735 deletions(-) create mode 100644 MyTracks/res/drawable-hdpi/menu_insert_marker.png create mode 100644 MyTracks/res/drawable-hdpi/menu_play.png create mode 100644 MyTracks/res/drawable-hdpi/menu_share.png create mode 100644 MyTracks/res/drawable-mdpi/menu_insert_marker.png create mode 100644 MyTracks/res/drawable-mdpi/menu_play.png create mode 100644 MyTracks/res/drawable-mdpi/menu_share.png create mode 100644 MyTracks/res/drawable-xhdpi/menu_insert_marker.png create mode 100644 MyTracks/res/drawable-xhdpi/menu_play.png create mode 100644 MyTracks/res/drawable-xhdpi/menu_share.png diff --git a/MyTracks/res/drawable-hdpi/menu_insert_marker.png b/MyTracks/res/drawable-hdpi/menu_insert_marker.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c7bf317dfb6cb495dad48743713543189260ad GIT binary patch literal 1625 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(#^lGsVil*vQb*(aFu!$G&eP`1g19yuGiTBr(RHE$SnZc?2=lPS(cjOR+OKs0QR(1CT_R5 z;4}}aHwC9#oLq70)dxC89~8AnQ4JFUrXLU!o^XL2c+yYJ1E%*PV8V`&OTEj$z;xQv z#WAGf)|;8$8Nz`gZL^Qr1=WN`i>&In62^LQYX8&+Zc83HIf}3}FUn>8xG}&*Abgj= z5%CDoni6G=CT{U{Q&vfrK6N^prQPwv!Bs&1>qM(M_J0Qi+|)1oOyWG(+TZfT@7e$7 z^QzD7RC#FO7pmItlA~ZIAl<=xgiY({0j3vijyqVGr=~1mSsVR$B+sajY)WksY)&pCc;5hw|nzD$w6>EMO2JkSyUA5-2$~t+y z!=~5g%-vwg|8d$>x0QMp>(0NLTE*Xzd!VRty-&^MvsqieY=6k2)2RF5uzSr`m;Eha zXU|^iRNKKRec0^6I`zqCIA^~J{>`Gv`B^ysv;V=$2;R)rWlQh;E?{}rnwzlbQ|01m zw&g0ScTPJ0k+gXAtA?w@VYAW2+ex{Pnm2Im>)G)ClTiGnxQxElrV@J7e>hbsYX1xm z{dZbz-vz4+D=g;Dbie6;;(%r9$`dl0&o#SEDz=>5DSbQWm6fcfa;aL}s-($ZJZDdf zdcWfKnU++Ap3essRQ-~ge}8k=9*JqKJDFOgGJ<`!uTVd=LidAIU&QBrOI6c^NBxI$ z);fv53174PUr}$ZId|HW+YYOb%$}j1Rl8Psub%SXSFb0_UB9;S(zIORXzfC&XRDvy zRr~nP(DCdYFNwFWJc6TiUkBZva@b*R*9EQ}+|@O|O1(E{Co1+_eOM=M!<#EUyOH5d z^YshNXBpRJH1S`P4;bIf_TkE->~l(AGNCEa7pOH$u+zqnq7qi?!G9 qt>WnW!QXeo0i2qC?C1R>n81*6z}`%G*~8hO!rs%>&t;ucLK6VTUTf9> literal 0 HcmV?d00001 diff --git a/MyTracks/res/drawable-hdpi/menu_play.png b/MyTracks/res/drawable-hdpi/menu_play.png new file mode 100644 index 0000000000000000000000000000000000000000..df8a2ca28e1e3978a59dbe9cf415a59429357084 GIT binary patch literal 1410 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 Wl3^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(#^lGsVil*vZt`*}%Zm$G&eP`1g19yq1O?*YRb4+)~5jLR@ zJ=R+iyjDG|V!h%qJ#_g)-@cU(swMuc6PlRiWFI7WrSI+nsl|Eso9q_0?VPhc!%aJ> zev$)cRp8RR*_svoQzGK`hL_Dyti8xO|8j0bhh@qmPWMX*qGAW_#Y$UsW=`&w%CYiX z;LsF*^62S}8pZE@Q~M{rwdgf1S-{C2QMQZw)0UHtx)TxwYs8Fi6;AzQ8aLqTuA$rvWHQ%R(tl_eD`gZ2Fw3CD zY)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(#^lGsVil%*epP$->gq$G&eP`1g19yq1O?oUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnv1@ zG!Lpb1-Dx)aO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z_LS;2W?*0p@^oU1PZ9MzCuS-Z@1@eQA(D8tnc61wVVaLqcBX29V# zIWsfCC{pB#;hbN;Y=1mG{NVSVChH#?3JPqh|LrZGSga@d$!j@N{9T4gOd3khts8O< z?X^rPXb9`z;YkuzpTR45fIZHj&o?BH>tajpOh?&liEZx)I}SJ}I5=yUdI zwcx(@vCZ>MBKP9@Zw9BTD$?TGZ|G+IGUZf=3##35+)i(c`JQwIC;NGYYfAs7gf=z( zd%E<}-7T*g=REtzXT4)%)}bwz{w}bZpZ#W!zhlhvxU=Q4`JVk@$q@kz*H;xE&f-7v zoz3Lf+=R;*m_w)X*Ww_78!_em8^&}%-Jpxqbc)I$z JtaD0e0syqNvA+NS literal 0 HcmV?d00001 diff --git a/MyTracks/res/drawable-mdpi/menu_share.png b/MyTracks/res/drawable-mdpi/menu_share.png new file mode 100644 index 0000000000000000000000000000000000000000..056deb57b92875e9361c4ee2a769023e55aec274 GIT binary patch literal 1341 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(#^lGsViy+1$*~)y&z{$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OecUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dHn%vr z8k-scF;2HY^rm2Q3q-F8PQCg-$LNEi7AdM>LcsI`V!{(HkONQpsd>QkUIa|oY=Ude z85kJXd%8G=RNQ)V-Cn~rQR4W=>Iwg!+|Ni*WNYr69dv4uOJs^bv(n~+4rZxFnoD?6 zl6HFG>y>EV?T>6lD9{=aW!tiT&*Nv0Zd_AabLq(3ibHBr0Sz_)S7gB_S8S&CY@E#&-=7Qv+6>((cSq+1C{(AiaT&F`>J(+ z%d+he?%Jz1F7DjEe^Xr@V^4wr|2)~ePk($~O9mB$c@+lie7)~X%K8~c?yY~{R(&e= zeZH?(?;_jCgTHwi(z6vN-rT zr3rcnEsPWt6)EuvBxF;`l!s|(ikf1Y(kL={bhJAXt8=1z&b|Nt_nq(e``+iSOG=F6 zc}?(Qu~@wLS&C%ljCQ_UcjjA#XLd5jE3{HWrw|4@2c`+7y+I?e8wB4H;9uJ zvCn-ml9X?xX;KV9IXO9CP8di~X%He3i6A%>3Jn!776OaSOrutT*)nCAL4jFx6i(7O zVFsLxsFuj0rFk}(UBMd_Hv8KyX0kzzT8p)^6M2_j>-ib+O-CM-sR1mr2SPzfk(sM;Ax=WV_=WHs~qrcI|+T3 zeZKG6x#hsB-OY2-UJtwU41Xf`F*l5pPu1TC=b}`E- z23-->j8Zi5NRL16hj2EsJ)#5e@8ZsF^lbH^*=q`lQl}cjes>>ebGewGBJ)iZ9_MHQ zo80a0qz<<)+~?(M$??T2E~*E2N7l1uG=|hY&HOm-=V$MbJf8|%b#K_6Mj0GXC?f&K zz}{7FZdo>d1@zmhIN9u#hh+k8*reTysEJW4dAktf>ej%MxoK-!nzL-)RZR~8?&u1o zU(ofzkGD%4-la`%@4wnKo0GvgZ|pBw_avclNfP#}w1o?7zscRcGW(^qaPr-N5c^g? z*P3PhceQVPy}z}1HhZd)cMpvcW%R2*yv^?5yw??ze>?TnhyB^H_Xlr9Z14}7UY0jr z-;K?GP{pG9#PGV0cA}{0`m5xG>zo@6wRwe(oJ!jvAIYAYYENLtHII9hq*Qkr{r$<= zro}bw1zo)*14}=*O^dJc@45=~yf&Rm$>)CR_)1u9&R81tWYdX7$4ILu{bM5v7qJg* zUHYxPulM~k*83H#{@O>ylU!#VEjRz#vs#iT^$tnrmU#H~cpc5ZV3?t-(?*BiIC7j3cx=-werg1%WNtLGPHeVjL>u*9{0)H?qxHeVDr1p4N|j(`Gm@xl6LkelYQyeP%M$ zL5w-SAdGiGm88=}G%uV{pR~antW)_!#o9He+pqr8byrirbFFtEz3jsU8yyGABm3H2 z#@02Anl!C!>6Y%S!q#`I2isiqH7APaNxt;T^zJ)bvZZ@f+8WQ62iuP9tjY7UZ_`$+ zXxWo^^Wvk{?E&Dq!6_X*wF7pSv4Y8ls6%tDPfK`3c{@_(gj6mPr?2OnTD&5#HgDtd z-sv4>&XX05)ny$@M;ucVInO(Qx|{nj3a%U{d2$P97_km z{hZ?VYd<{QB*{B`?=&_)|3>O+-?DzbxXJv{?ZBdhq#x_~>mUsKLsV7xL>Q5}<7@F$C5=dAz$ literal 0 HcmV?d00001 diff --git a/MyTracks/res/drawable-xhdpi/menu_play.png b/MyTracks/res/drawable-xhdpi/menu_play.png new file mode 100644 index 0000000000000000000000000000000000000000..51124993df109972aa504c796b17e788a3ed0efd GIT binary patch literal 1620 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=8sgs4Ho0GGtlc9m3p{t>#iJ_&diIcOV zo2j9>iIX8ruSMv>2~2MaNUxcZfrXQW5l+3J#E@G6wAm%KD6=dz#jPkmR{`v4 zt4!Q(al~mJRBsA4w?O>igj26R&@uX;s6~oum=G}ifSB-v3*^9)erg^ty%zx!_J7lB zJq!#?$2?seLn>~)neFc(k|=R3y~IRxAy0_LE)F>!F0O^mac8{6Tbo`8$hrvHlxTc; zbd;}@OFt>C-t=oiy@J4QmaD4#K@|axUzVx4$wejIUVHb>+scoU5iEzN6_%&nd*3X7 zT2Aa)^|!zGzE|F#x$*MLElVp!BTh{hJiw8_V!$N9*u&t~@IUIfLudp`!KNR+?5+~b zn-ij=S*A1>KaktO>z5&{!1`!`Kn%;{1;R2Hr?IGhS^U6Y2d7-KSVHz{rgZ|P5BMb5 z(htvJ`5skRXV!E%LCS_Xe#=h=!9^l5sY^4MQ*ZTLkQZQfcQmiynq_L`DELU+g7w!y zh2mB%?K#gjPDr_VBl)D*C6Wqc0;w!k+|(f_IFM!UHk2{jYG>1&uHD+qZ&I{_%fwCR5V?9cO2amDSu7o z!}_TS!Kx=e@>CrDvq9_|$BkN@q&>$@C$N-M=B{ow5cUb|@G6-5xt%*Mwt7O_B2KPA z?srX$)BH`DQn(aPezKXpCaxf6GQ-T{PV4?l%}BUi8`RCPP`~;2&&OU8tdm4iKW$m) z+K^P$^8JD0jO#*-NB7)Q{m^kX*z2%h!QoorJxM!`n>=CQ{2Y|`?WtpA;_>4T^|IM) z80K#cX;jLqyLn4;rMK{xXlKbSH=pD*UeBpflB#Jq%cB0R?9{2l9y;@xEO@^AuX%19 zHD|$`V#(6An`TZdmb;qJdbgl|L*+!q7v;Qr8+I3FCfY|>e`lPw#l)Ge`{PEb+uj5(S zW_r*6*i}r_{yi(7k;~{%Y|U?hi0w?fHVHb!++HI($vyS0&ONEg&s(0}`)97ra@uVD nSgTe~DWM4ftV38} literal 0 HcmV?d00001 diff --git a/MyTracks/res/drawable-xhdpi/menu_share.png b/MyTracks/res/drawable-xhdpi/menu_share.png new file mode 100644 index 0000000000000000000000000000000000000000..15549b04eff0aaf80ecd4f5989785bd8bcb1d5fa GIT binary patch literal 1780 zcmaJ?c~BE)9NmO+j!-OM6)g=xDM*ve2__~8Bmq(h#c+s%l8|g*3&}3YB0-=6K}56+ z9z{hIv#Rb$5CMW6Di5eYO&nHjma`Cxw8zhsaAXoyQ z{648jNeD@RXdx1tN~0)fo^+BYi%MtFI4sVWBnFL61L+Kq=0%~?xNI*jjZT_=$aplZ zQpJ@D{ikE$D?T|M!%!{=rlh1$QH8AY=&Y1zcw`}@g*QP;e=VXWO%=_B=g!4%PQ7Waa_(FNb88x?_#jN!q4eoa>ZtMo1*Z};#sKi3wFn#Z{;;1~ynuXUUII4mh zc}K(wSFJ~V&S+*{qs5+G=Enm4oLWs%C(6osqtC_%zTL9t1*5%A$a91D2OcOP?+apf zKpo@no-`fo8(DI$yYSp^y-!cXgm(R|8=r{jU*8W!{4$XNwijuMD+nb(Fz`jDU9+X^ z=G$yo#;7t~Hab5Y$PnAg=siHOdv4FCcWg$8{Skz#Stc_6LUBMwexaG^sQnVcbG4n! zeuY(cwo`6KeT{Qzn)x^y73tFK{a2`S>$S|Zfx;&TY*Pr1SHij7r}cq0m9pXGF@*)M zpMWMW9e%!C(*8|%=CSG+9HL_MJ-V45&%Vf^F z#*PJrl(D-HSu4yFO%sNKyzP4p>&((kR{HLPi8q0RSNuo*j;^{pcED`4K{#fCE-7KV z6R#SE%N&A$re<0NlVcLhtbJ~tY+uo|^TFWtMX2yeDGrV8=BL-qsqsmFOstp(p|@Ih2)-~-1pv5@G2TQ{_?cpp2PSV-pYNcmk)Q2nl;8A zpX|SPKQ|H~Vrol6+mHH%d=mk>^fm&g9#eo0mN6dt_f-Q|;m^Aw*=` z9dT|g9e*8{n_=?V?U0h%0bX58e_DkFtq4|m4uzk*p8n^EEYjKI+m^+Hlc#!#=e3Nk z$~DCmsXwm%ddrSD;mMQ!56<1Vl(nv8cirUMPev*Sd(k15;5**0Snu6=UFC5GAfmVc zSa*wJXV2}sXmQ84QtB90cAXdx?q3){h<3!b7J6*mzI}cDI>{ZjKjP3)+4t>e;eWNa-2df%z48>gJU&FD*_dZp_K|2;bwV zI7}HvnI8)d(I`oqj|9tMM-E5~`vQN>N zf!pR*IByi-G3#ye)(?VT<(saBq8hUrfbI3m7kk#ftEI9GwyRsA$Ia#9Vk_5F%S%+G n&8O9J;3M?C*E9F`AOthOrR959nu@X4_#YCBf`zC2WZC}!HVLh* literal 0 HcmV?d00001 diff --git a/MyTracks/res/layout/mytracks_layout.xml b/MyTracks/res/layout/mytracks_layout.xml index 203d0636a..20fec4b55 100644 --- a/MyTracks/res/layout/mytracks_layout.xml +++ b/MyTracks/res/layout/mytracks_layout.xml @@ -59,23 +59,4 @@ limitations under the License. android:minHeight="80dp" android:layout_gravity="center"/> - - - - diff --git a/MyTracks/res/menu/track_detail.xml b/MyTracks/res/menu/track_detail.xml index 95d8bbca8..f318173c9 100644 --- a/MyTracks/res/menu/track_detail.xml +++ b/MyTracks/res/menu/track_detail.xml @@ -15,43 +15,74 @@ See the License for the specific language governing permissions and limitations under the License. --> - + + + + + + + + + + + + + android:id="@+id/menu_send_google" + android:title="@string/menu_send_google"/> + + + + + + + + + + + android:title="@string/menu_my_location"/> + android:title="@string/menu_satellite_mode"/> + android:icon="@drawable/ic_menu_chartsettings" + android:id="@+id/menu_chart_settings" + android:title="@string/menu_chart_settings"/> - Delete all + + Delete + + + Edit + Export all + + Export as %1$s + Help @@ -989,6 +1004,10 @@ limitations under the License. translation_description="In the menu, to import all the tracks from the SD card."> Import all + + Insert marker + Map mode @@ -1001,6 +1020,10 @@ limitations under the License. translation_description="In the menu, to display the user's current location."> My location + + Play + Record track @@ -1009,10 +1032,25 @@ limitations under the License. translation_description="In the menu, to switch the display to the satellite mode."> Satellite mode + + Save to SD card... + + + As a %1$s file + Search + + Send to Google... + Sensor state @@ -1025,7 +1063,31 @@ limitations under the License. translation_description="In the menu, to stop recording a track."> Stop recording + + Share with friends... + + + A %1$s file + + + Fusion Table + + + Map + + No tracks or waypoints matched your search. + + In track \'%1$s\'. + @@ -2233,7 +2302,22 @@ limitations under the License. Total time - + + + The track and its markers will be permanently deleted from the phone. + + + You need Google Earth to play the track. Do you want to install from the Market? + + + Track + @@ -2258,165 +2342,32 @@ limitations under the License. track name."> Track name - - - - Track - - - Clear map - - - This track - + translation_description="When deleting all the tracks, the confirmation dialog message informing + the user that all tracks and markers will be permanently deleted from the phone."> All tracks and markers will be permanently deleted from the phone. - - Delete from phone... + + Unable to start recording. No GPS location. Try again. - - The track and its markers will be permanently deleted from the phone. - - - Edit - - - Export as %1$s - - - Play - - - You need Google Earth to play the track. Do you want to install from the Market? - - - As a %1$s file - - - Save to SD card... - - - Send to Google... - - - A %1$s file - - - Fusion Table - - - Map - - - Share with friends... - - - Show on map - - - In track \'%1$s\'. + + Now recording a new track. + %1$d: track number. E.g., '1'."> Track %1$d - - Unable to start recording. No GPS location. Try again. - + informing the user that My Tracks is actively recording his track."> Recording your track... - - Now recording a new track. - = 0) { - Toast.makeText(this, R.string.marker_insert_success, Toast.LENGTH_LONG).show(); - } - return waypointId; - } catch (RemoteException e) { - Toast.makeText(this, R.string.marker_insert_error, Toast.LENGTH_LONG).show(); - throw e; - } - } - - private void startRecordingNewTrack( - ITrackRecordingService trackRecordingService) { - try { - long recordingTrackId = trackRecordingService.startNewTrack(); - // Select the recording track. - trackDataHub.loadTrack(recordingTrackId); - Toast.makeText(this, getString(R.string.track_record_success), Toast.LENGTH_SHORT).show(); - // TODO: We catch Exception, because after eliminating the service process - // all exceptions it may throw are no longer wrapped in a RemoteException. - } catch (Exception e) { - Toast.makeText(this, getString(R.string.track_record_error), Toast.LENGTH_SHORT).show(); - Log.w(TAG, "Unable to start recording.", e); - } + private void startSaveActivity( + long trackId, TrackFileFormat trackFileFormat, boolean shareTrack) { + Intent intent = new Intent(this, SaveActivity.class) + .putExtra(SaveActivity.EXTRA_TRACK_ID, trackId) + .putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) trackFileFormat) + .putExtra(SaveActivity.EXTRA_SHARE_TRACK, shareTrack); + startActivity(intent); } /** - * Starts the track recording service (if not already running) and binds to - * it. Starts recording a new track. + * Returns true if recording. */ - @VisibleForTesting - void startRecording() { - synchronized (trackRecordingServiceConnection) { - startNewTrackRequested = true; - trackRecordingServiceConnection.startAndBind(); - - // Binding was already requested before, it either already happened - // (in which case running the callback manually triggers the actual recording start) - // or it will happen in the future - // (in which case running the callback now will have no effect). - serviceBindCallback.run(); - } + private boolean isRecording() { + return ServiceUtils.isRecording( + this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences); } /** - * Stops the track recording service and unbinds from it. Will display a toast - * "Stopped recording" and pop up the Track Details activity. + * Stops the recording and the track recording service connection and shows + * {@link TrackEditActivity}. */ - @VisibleForTesting - void stopRecording() { - // Save the track id as the shared preference will overwrite the recording track id. - long currentTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1L); - - ITrackRecordingService trackRecordingService = trackRecordingServiceConnection.getServiceIfBound(); + private void stopRecording() { + ITrackRecordingService trackRecordingService = trackRecordingServiceConnection + .getServiceIfBound(); if (trackRecordingService != null) { try { trackRecordingService.endCurrentTrack(); @@ -423,14 +518,28 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener Log.e(TAG, "Unable to stop recording.", e); } } - trackRecordingServiceConnection.stop(); - if (currentTrackId > 0) { + long recordingTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1L); + if (recordingTrackId != -1L) { Intent intent = new Intent(this, TrackEditActivity.class) .putExtra(TrackEditActivity.SHOW_CANCEL, false) - .putExtra(TrackEditActivity.TRACK_ID, currentTrackId); + .putExtra(TrackEditActivity.TRACK_ID, recordingTrackId); startActivity(intent); } } + + /** + * Gets the map activity, can be null. + */ + private MapActivity getMapActivity() { + return (MapActivity) getLocalActivityManager().getActivity(MAP_TAB_TAG); + } + + /** + * Gets the chart activity, can be null. + */ + private ChartActivity getChartActivity() { + return (ChartActivity) getLocalActivityManager().getActivity(CHART_TAB_TAG); + } } \ No newline at end of file diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java index 5c7a34251..da4e9f464 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java @@ -35,6 +35,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; +import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.database.Cursor; import android.os.Bundle; import android.os.Parcelable; @@ -67,11 +68,11 @@ public class TrackListActivity extends FragmentActivity { private static final String TAG = TrackListActivity.class.getSimpleName(); private static final String CHECK_UNITS_DIALOG_TAG = "checkUnitsDialog"; private static final String DELETE_ALL_DIALOG_TAG = "deleteAllDialog"; - private static final String EULA_DIALOG_TAG = "eulaDialog"; + private static final String EULA_DIALOG_TAG = "eulaDialog"; private static final String EXPORT_ALL_DIALOG_TAG = "exportAllDialog"; - + private static final int WELCOME_ACTIVITY_REQUEST_CODE = 0; - + private static final String[] PROJECTION = new String[] { TracksColumns._ID, TracksColumns.NAME, @@ -81,21 +82,57 @@ public class TrackListActivity extends FragmentActivity { TracksColumns.STARTTIME, TracksColumns.DESCRIPTION }; - // Callback when the trackRecordingServiceConnection binding changes + // Callback when the trackRecordingServiceConnection binding changes. private final Runnable bindChangedCallback = new Runnable() { @Override public void run() { - synchronized (trackRecordingServiceConnection) { - if (startNewRecording) { - startRecording(); + if (startNewRecording) { + ITrackRecordingService service = trackRecordingServiceConnection.getServiceIfBound(); + if (service != null) { + try { + recordingTrackId = service.startNewTrack(); + startNewRecording = false; + Toast.makeText( + TrackListActivity.this, R.string.track_list_record_success, Toast.LENGTH_SHORT) + .show(); + Log.d(TAG, "Started a new recording"); + } catch (Exception e) { + Toast.makeText( + TrackListActivity.this, R.string.track_list_record_error, Toast.LENGTH_LONG).show(); + Log.d(TAG, "Unable to start a new recording.", e); + } } else { - updateMenu(); - adapter.notifyDataSetChanged(); + Log.d(TAG, "service not available to start a new recording"); } } } }; + /* + * Note that sharedPreferenceChangeListenr cannot be an anonymous inner class. + * Anonymous inner class will get garbage collected. + */ + private final OnSharedPreferenceChangeListener sharedPreferenceChangeListener = + new OnSharedPreferenceChangeListener() { + @Override + public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { + if (key == null) { + return; + } + if (key.equals(getString(R.string.metric_units_key))) { + metricUnits = preferences.getBoolean(getString(R.string.metric_units_key), true); + } + if (key.equals(getString(R.string.recording_track_key))) { + recordingTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1L); + if (isRecording()) { + trackRecordingServiceConnection.startAndBind(); + } + updateMenu(); + } + adapter.notifyDataSetChanged(); + } + }; + private TrackRecordingServiceConnection trackRecordingServiceConnection; private SharedPreferences sharedPreferences; private boolean metricUnits; @@ -103,7 +140,7 @@ public class TrackListActivity extends FragmentActivity { private ListView listView; private ResourceCursorAdapter adapter; - // True to start a new recording + // True to start a new recording. private boolean startNewRecording = false; private MenuItem recordTrack; @@ -119,28 +156,12 @@ public class TrackListActivity extends FragmentActivity { setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM); setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); setContentView(R.layout.track_list); - + trackRecordingServiceConnection = new TrackRecordingServiceConnection( this, bindChangedCallback); sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE); - sharedPreferences.registerOnSharedPreferenceChangeListener( - new SharedPreferences.OnSharedPreferenceChangeListener() { - @Override - public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { - if (key == null) { - return; - } - if (key.equals(getString(R.string.metric_units_key))) { - metricUnits = preferences.getBoolean(getString(R.string.metric_units_key), true); - } - if (key.equals(getString(R.string.recording_track_key))) { - recordingTrackId = sharedPreferences.getLong( - getString(R.string.recording_track_key), -1L); - } - adapter.notifyDataSetChanged(); - } - }); + sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); metricUnits = sharedPreferences.getBoolean(getString(R.string.metric_units_key), true); recordingTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1L); @@ -216,7 +237,7 @@ public class TrackListActivity extends FragmentActivity { adapter.swapCursor(null); } }); - + if (!EulaUtils.getEulaValue(this)) { new EulaDialogFragment().show(getSupportFragmentManager(), EULA_DIALOG_TAG); } @@ -225,18 +246,16 @@ public class TrackListActivity extends FragmentActivity { @Override protected void onStart() { super.onStart(); - if (ServiceUtils.isRecording( - this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences)) { + if (isRecording()) { trackRecordingServiceConnection.startAndBind(); } } - + @Override protected void onResume() { super.onResume(); trackRecordingServiceConnection.bindIfRunning(); } - @Override protected void onDestroy() { @@ -250,9 +269,10 @@ public class TrackListActivity extends FragmentActivity { if (!CheckUnitsUtils.getCheckUnitsValue(this)) { /* * See bug http://code.google.com/p/android/issues/detail?id=23761. - * Instead of - * new CheckUnitsDialogFragment().show(getSupportFragmentManager(), CHECK_UNITS_DIALOG_TAG) - * Need to use commitAllowingStateLoss with the support package. + * Cannot use + * CheckUnitsDialogFragment().show(getSupportFragmentManager(), + * CHECK_UNITS_DIALOG_TAG). Need to use commitAllowingStateLoss with the + * support package. */ FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(new CheckUnitsDialogFragment(), CHECK_UNITS_DIALOG_TAG); @@ -260,7 +280,7 @@ public class TrackListActivity extends FragmentActivity { } } } - + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.track_list, menu); @@ -281,8 +301,7 @@ public class TrackListActivity extends FragmentActivity { * Updates the menu based on whether My Tracks is recording or not. */ private void updateMenu() { - boolean isRecording = ServiceUtils.isRecording( - this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences); + boolean isRecording = isRecording(); updateMenuItems(isRecording); } @@ -314,23 +333,11 @@ public class TrackListActivity extends FragmentActivity { switch (item.getItemId()) { case R.id.menu_record_track: updateMenuItems(true); - synchronized (trackRecordingServiceConnection) { - startNewRecording = true; - trackRecordingServiceConnection.startAndBind(); - - /* - * If the binding has happened, then invoke the callback to start a - * new recording. If the binding hasn't happened, then invoking the - * callback will have no effect. But when the binding occurs, the - * callback will get invoked. - */ - bindChangedCallback.run(); - } + startRecording(); return true; case R.id.menu_stop_recording: updateMenuItems(false); stopRecording(); - trackRecordingServiceConnection.stop(); return true; case R.id.menu_search: return ApiAdapterFactory.getApiAdapter().handleSearchMenuSelection(this); @@ -358,27 +365,28 @@ public class TrackListActivity extends FragmentActivity { } } + /** + * Returns true if recording. + */ + private boolean isRecording() { + return ServiceUtils.isRecording( + this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences); + } + /** * Starts a new recording. */ private void startRecording() { - ITrackRecordingService service = trackRecordingServiceConnection.getServiceIfBound(); - if (service != null) { - try { - recordingTrackId = service.startNewTrack(); - startNewRecording = false; - adapter.notifyDataSetChanged(); - Toast.makeText(TrackListActivity.this, R.string.track_record_success, Toast.LENGTH_SHORT) - .show(); - Log.d(TAG, "Started a new recording"); - } catch (Exception e) { - Toast.makeText(TrackListActivity.this, R.string.track_record_error, Toast.LENGTH_LONG) - .show(); - Log.d(TAG, "Unable to start a new recording.", e); - } - } else { - Log.d(TAG, "service not available to start a new recording"); - } + startNewRecording = true; + trackRecordingServiceConnection.startAndBind(); + + /* + * If the binding has happened, then invoke the callback to start a new + * recording. If the binding hasn't happened, then invoking the callback + * will have no effect. But when the binding occurs, the callback will get + * invoked. + */ + bindChangedCallback.run(); } /** @@ -396,17 +404,27 @@ public class TrackListActivity extends FragmentActivity { startActivity(intent); } recordingTrackId = -1L; - adapter.notifyDataSetChanged(); } catch (Exception e) { Log.d(TAG, "Unable to stop recording.", e); } } + trackRecordingServiceConnection.stop(); + } + + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_SEARCH) { + if (ApiAdapterFactory.getApiAdapter().handleSearchKey(search)) { + return true; + } + } + return super.onKeyUp(keyCode, event); } /** * Check Units DialogFragment. */ - private static class CheckUnitsDialogFragment extends DialogFragment { + public static class CheckUnitsDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -438,7 +456,7 @@ public class TrackListActivity extends FragmentActivity { /** * Delete All DialogFragment. */ - private static class DeleteAllDialogFragment extends DialogFragment { + public static class DeleteAllDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -446,7 +464,7 @@ public class TrackListActivity extends FragmentActivity { R.string.track_list_delete_all_confirm_message, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - MyTracksProviderUtils.Factory.get(getActivity()).deleteAllTracks(); + MyTracksProviderUtils.Factory.get(getActivity()).deleteAllTracks(); } }); } @@ -455,14 +473,13 @@ public class TrackListActivity extends FragmentActivity { /** * Eula DialogFragment. */ - private static class EulaDialogFragment extends DialogFragment { + public static class EulaDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { return new AlertDialog.Builder(getActivity()) .setCancelable(true) - .setMessage( - EulaUtils.getEulaMessage(getActivity())) + .setMessage(EulaUtils.getEulaMessage(getActivity())) .setNegativeButton(R.string.eula_decline, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { @@ -491,15 +508,14 @@ public class TrackListActivity extends FragmentActivity { /** * Export All DialogFragment. */ - private static class ExportAllDialogFragment extends DialogFragment { + public static class ExportAllDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - String exportFileFormat = getString(R.string.track_list_export_file); String fileTypes[] = getResources().getStringArray(R.array.file_types); String[] choices = new String[fileTypes.length]; for (int i = 0; i < fileTypes.length; i++) { - choices[i] = String.format(exportFileFormat, fileTypes[i]); + choices[i] = getString(R.string.menu_export_all_format, fileTypes[i]); } return new AlertDialog.Builder(getActivity()).setNegativeButton(R.string.generic_cancel, null) .setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { @@ -516,15 +532,5 @@ public class TrackListActivity extends FragmentActivity { .setTitle(R.string.menu_export_all) .create(); } - }; - - @Override - public boolean onKeyUp(int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_SEARCH) { - if (ApiAdapterFactory.getApiAdapter().handleSearchKey(search)) { - return true; - } - } - return super.onKeyUp(keyCode, event); } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/backup/RestoreActivity.java b/MyTracks/src/com/google/android/apps/mytracks/io/backup/RestoreActivity.java index a95edb6a1..92cd7fb58 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/backup/RestoreActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/backup/RestoreActivity.java @@ -16,7 +16,7 @@ package com.google.android.apps.mytracks.io.backup; -import com.google.android.apps.mytracks.TrackDetailActivity; +import com.google.android.apps.mytracks.TrackListActivity; import com.google.android.apps.mytracks.util.DialogUtils; import com.google.android.maps.mytracks.R; @@ -93,7 +93,7 @@ public class RestoreActivity extends Activity { removeDialog(DIALOG_PROGRESS_ID); Toast.makeText(this, messageId, success ? Toast.LENGTH_SHORT : Toast.LENGTH_LONG).show(); startActivity( - new Intent(this, TrackDetailActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); + new Intent(this, TrackListActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); finish(); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java index 7af00130c..c72c1a19d 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java +++ b/MyTracks/src/com/google/android/apps/mytracks/services/TrackRecordingService.java @@ -484,9 +484,10 @@ public class TrackRecordingService extends Service { Notification notification = new Notification( R.drawable.arrow_320, null /* tickerText */, System.currentTimeMillis()); + Intent intent = new Intent(this, TrackDetailActivity.class) + .putExtra(TrackDetailActivity.TRACK_ID, recordingTrackId); PendingIntent contentIntent = PendingIntent.getActivity( - this, 0 /* requestCode */, new Intent(this, TrackDetailActivity.class), - 0 /* flags */); + this, 0 /* requestCode */, intent, 0 /* flags */); notification.setLatestEventInfo(this, getString(R.string.my_tracks_app_name), getString(R.string.track_record_notification), contentIntent); notification.flags += Notification.FLAG_NO_CLEAR; diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/PlayTrackUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/PlayTrackUtils.java index 2605904a5..28cdf39e3 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/util/PlayTrackUtils.java +++ b/MyTracks/src/com/google/android/apps/mytracks/util/PlayTrackUtils.java @@ -93,7 +93,7 @@ public class PlayTrackUtils { public static Dialog createInstallEarthDialog(final Context context) { return new AlertDialog.Builder(context) .setCancelable(true) - .setMessage(R.string.track_list_play_install_earth_message) + .setMessage(R.string.track_detail_install_earth_message) .setNegativeButton(android.R.string.cancel, null) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java b/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java index 9908c3ec5..40546740f 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java +++ b/MyTracks/src/com/google/android/apps/mytracks/widgets/TrackWidgetProvider.java @@ -146,6 +146,9 @@ public class TrackWidgetProvider // Make all of the stats open the mytracks activity. Intent intent = new Intent(context, TrackDetailActivity.class); + if (track != null) { + intent.putExtra(TrackDetailActivity.TRACK_ID, track.getId()); + } PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); views.setOnClickPendingIntent(R.id.appwidget_track_statistics, pendingIntent); diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/TrackDetailActivityTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/TrackDetailActivityTest.java index 7b412de1e..697e63ea9 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/TrackDetailActivityTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/TrackDetailActivityTest.java @@ -19,15 +19,12 @@ import com.google.android.apps.mytracks.services.ServiceUtils; import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection; import com.google.android.maps.mytracks.R; -import android.app.Activity; -import android.app.Instrumentation.ActivityMonitor; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.net.Uri; import android.test.ActivityInstrumentationTestCase2; -import android.widget.Button; import java.io.File; import java.util.concurrent.TimeoutException; @@ -112,62 +109,6 @@ public class TrackDetailActivityTest extends ActivityInstrumentationTestCase2= 0); - - // Wait until we are done and make sure that selectedTrack = recordingTrack. - waitForIdle(); - assertEquals(recordingTrackId, getSharedPreferences().getLong( - getActivity().getString(R.string.recording_track_key), -1)); - long selectedTrackId = getSharedPreferences().getLong( - getActivity().getString(R.string.selected_track_key), -1); - assertEquals(recordingTrackId, selectedTrackId); - - // Watch for MyTracksDetails activity. - ActivityMonitor monitor = getInstrumentation().addMonitor( - TrackEditActivity.class.getName(), null, false); - - // Now, stop the track and make sure that it is still selected, but - // no longer recording. - getActivity().stopRecording(); - - // Check if we got back MyTracksDetails activity. - Activity activity = getInstrumentation().waitForMonitor(monitor); - assertTrue(activity instanceof TrackEditActivity); - - // TODO: Update track name and other properties and test if they were - // properly saved. - - // Simulate a click on Save button. - final Button save = (Button) activity.findViewById(R.id.track_edit_save); - getActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - save.performClick(); - } - }); - - // Check the remaining properties. - recordingTrackId = awaitRecordingStatus(5000, false); - assertEquals(-1, recordingTrackId); - assertEquals(recordingTrackId, getRecordingTrackId()); - assertEquals(recordingTrackId, getSharedPreferences().getLong( - getActivity().getString(R.string.recording_track_key), -1)); - } - private void assertInitialized() { assertNotNull(getActivity());