From db68dad7e18083cff1258207e86bf4eefdb72c78 Mon Sep 17 00:00:00 2001 From: rachytski Date: Thu, 1 Dec 2011 11:33:41 +0400 Subject: [PATCH] [android] new icons and improved locationService logic. closes #443 --- .../mapswithme/location/LocationService.cpp | 48 +++++--- .../mapswithme/location/LocationService.hpp | 8 +- android/res/drawable-hdpi/download_maps.png | Bin 4147 -> 0 bytes .../res/drawable-hdpi/ic_menu_download.png | Bin 0 -> 1793 bytes .../res/drawable-hdpi/ic_menu_location.png | Bin 0 -> 2028 bytes .../drawable-hdpi/ic_menu_location_found.png | Bin 0 -> 2553 bytes .../drawable-hdpi/ic_menu_location_search.png | Bin 0 -> 2391 bytes android/res/drawable-hdpi/ic_menu_search.png | Bin 0 -> 1882 bytes android/res/drawable-hdpi/my_position.png | Bin 4147 -> 0 bytes android/res/drawable-ldpi/download_maps.png | Bin 1723 -> 0 bytes .../res/drawable-ldpi/ic_menu_download.png | Bin 0 -> 521 bytes .../res/drawable-ldpi/ic_menu_location.png | Bin 0 -> 538 bytes .../drawable-ldpi/ic_menu_location_found.png | Bin 0 -> 701 bytes .../drawable-ldpi/ic_menu_location_search.png | Bin 0 -> 746 bytes android/res/drawable-ldpi/ic_menu_search.png | Bin 0 -> 609 bytes android/res/drawable-ldpi/my_position.png | Bin 1723 -> 0 bytes android/res/drawable-mdpi/download_maps.png | Bin 2574 -> 0 bytes .../res/drawable-mdpi/ic_menu_download.png | Bin 0 -> 1855 bytes .../res/drawable-mdpi/ic_menu_location.png | Bin 0 -> 1893 bytes .../drawable-mdpi/ic_menu_location_found.png | Bin 0 -> 2268 bytes .../drawable-mdpi/ic_menu_location_search.png | Bin 0 -> 2085 bytes android/res/drawable-mdpi/ic_menu_search.png | Bin 0 -> 1791 bytes android/res/drawable-mdpi/my_position.png | Bin 2574 -> 0 bytes android/res/menu/main.xml | 4 +- .../src/com/mapswithme/maps/MWMActivity.java | 79 ++++++++++--- .../maps/location/LocationService.java | 106 +++++++++++++++--- 26 files changed, 191 insertions(+), 54 deletions(-) delete mode 100644 android/res/drawable-hdpi/download_maps.png create mode 100644 android/res/drawable-hdpi/ic_menu_download.png create mode 100644 android/res/drawable-hdpi/ic_menu_location.png create mode 100644 android/res/drawable-hdpi/ic_menu_location_found.png create mode 100644 android/res/drawable-hdpi/ic_menu_location_search.png create mode 100644 android/res/drawable-hdpi/ic_menu_search.png delete mode 100644 android/res/drawable-hdpi/my_position.png delete mode 100644 android/res/drawable-ldpi/download_maps.png create mode 100644 android/res/drawable-ldpi/ic_menu_download.png create mode 100644 android/res/drawable-ldpi/ic_menu_location.png create mode 100644 android/res/drawable-ldpi/ic_menu_location_found.png create mode 100644 android/res/drawable-ldpi/ic_menu_location_search.png create mode 100644 android/res/drawable-ldpi/ic_menu_search.png delete mode 100644 android/res/drawable-ldpi/my_position.png delete mode 100644 android/res/drawable-mdpi/download_maps.png create mode 100644 android/res/drawable-mdpi/ic_menu_download.png create mode 100644 android/res/drawable-mdpi/ic_menu_location.png create mode 100644 android/res/drawable-mdpi/ic_menu_location_found.png create mode 100644 android/res/drawable-mdpi/ic_menu_location_search.png create mode 100644 android/res/drawable-mdpi/ic_menu_search.png delete mode 100644 android/res/drawable-mdpi/my_position.png diff --git a/android/jni/com/mapswithme/location/LocationService.cpp b/android/jni/com/mapswithme/location/LocationService.cpp index ec5a9d7534..1da2ff8cf6 100644 --- a/android/jni/com/mapswithme/location/LocationService.cpp +++ b/android/jni/com/mapswithme/location/LocationService.cpp @@ -14,26 +14,32 @@ android::LocationService * g_locationService = 0; namespace android { - LocationService::LocationService(location::LocationObserver & locationObserver, - jobject observer) - : location::LocationService(locationObserver), - m_javaObserver(observer) + LocationService::LocationService(location::LocationObserver & observer, + jobject javaObserver) + : m_observer(observer), + m_javaObserver(javaObserver) { jclass k = jni::GetCurrentThreadJNIEnv()->GetObjectClass(m_javaObserver); m_onLocationChanged.reset(new jni::Method(k, "onLocationChanged", "(JDDF)V")); - m_onStatusChanged.reset(new jni::Method(k, "onStatusChanged", "(J)V")); + m_onStatusChanged.reset(new jni::Method(k, "onStatusChanged", "(I)V")); } - void LocationService::Start() + void LocationService::Start(bool doChangeStatus) { - m_observer.OnLocationStatusChanged(location::EStarted); - m_onStatusChanged->CallVoid(m_javaObserver, location::EStarted); + if (doChangeStatus) + { + m_observer.OnLocationStatusChanged(location::EStarted); + m_onStatusChanged->CallVoid(m_javaObserver, location::EStarted); + } } - void LocationService::Stop() + void LocationService::Stop(bool doChangeStatus) { - m_observer.OnLocationStatusChanged(location::EStopped); - m_onStatusChanged->CallVoid(m_javaObserver, location::EStopped); + if (doChangeStatus) + { + m_observer.OnLocationStatusChanged(location::EStopped); + m_onStatusChanged->CallVoid(m_javaObserver, location::EStopped); + } } void LocationService::Disable() @@ -47,6 +53,12 @@ namespace android m_observer.OnGpsUpdated(info); m_onLocationChanged->CallVoid(m_javaObserver, info.m_timestamp, info.m_latitude, info.m_longitude, info.m_horizontalAccuracy); } + + void LocationService::OnLocationStatusChanged(int status) + { + m_observer.OnLocationStatusChanged((location::TLocationStatus)status); + m_onStatusChanged->CallVoid(m_javaObserver, status); + } } /////////////////////////////////////////////////////////////////////////////////// @@ -57,19 +69,25 @@ namespace android extern "C" { JNIEXPORT void JNICALL - Java_com_mapswithme_maps_location_LocationService_nativeStartUpdate(JNIEnv * env, jobject thiz, jobject observer) + Java_com_mapswithme_maps_location_LocationService_nativeStartUpdate(JNIEnv * env, jobject thiz, jobject observer, jboolean changeStatus) { g_locationService = new android::LocationService(*g_framework, observer); - g_locationService->Start(); + g_locationService->Start(changeStatus); } JNIEXPORT void JNICALL - Java_com_mapswithme_maps_location_LocationService_nativeStopUpdate(JNIEnv * env, jobject thiz) + Java_com_mapswithme_maps_location_LocationService_nativeStopUpdate(JNIEnv * env, jobject thiz, jboolean changeStatus) { - g_locationService->Stop(); + g_locationService->Stop(changeStatus); delete g_locationService; } + JNIEXPORT void JNICALL + Java_com_mapswithme_maps_location_LocationService_nativeLocationStatusChanged(JNIEnv * env, jobject thiz, int status) + { + g_locationService->OnLocationStatusChanged(status); + } + JNIEXPORT void JNICALL Java_com_mapswithme_maps_location_LocationService_nativeLocationChanged(JNIEnv * env, jobject thiz, jlong time, jdouble lat, jdouble lon, jfloat accuracy) diff --git a/android/jni/com/mapswithme/location/LocationService.hpp b/android/jni/com/mapswithme/location/LocationService.hpp index 040cb70687..653594fd7d 100644 --- a/android/jni/com/mapswithme/location/LocationService.hpp +++ b/android/jni/com/mapswithme/location/LocationService.hpp @@ -8,11 +8,12 @@ namespace android { - class LocationService : public location::LocationService + class LocationService { private: jobject m_javaObserver; + location::LocationObserver & m_observer; scoped_ptr m_onLocationChanged; scoped_ptr m_onStatusChanged; @@ -22,10 +23,11 @@ namespace android LocationService(location::LocationObserver & locationObserver, jobject observer); - void Start(); - void Stop(); + void Start(bool doChangeStatus); + void Stop(bool doChangeStatus); void Disable(); void OnLocationUpdate(location::GpsInfo const & info); + void OnLocationStatusChanged(int status); }; } diff --git a/android/res/drawable-hdpi/download_maps.png b/android/res/drawable-hdpi/download_maps.png deleted file mode 100644 index 8074c4c571b8cd19e27f4ee5545df367420686d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4147 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 diff --git a/android/res/drawable-hdpi/ic_menu_download.png b/android/res/drawable-hdpi/ic_menu_download.png new file mode 100644 index 0000000000000000000000000000000000000000..5a4d708f204c71e189c44e2210d32777a534ce54 GIT binary patch literal 1793 zcmV+c2mbhpP)+|CIzMOt7ZNINo*XT)}^y_!ddCz+}?|Glo2HI@40Do?Q z{%(L;v?MT4kpL$SaOV-bg_N%A5P^Tn0IU;(k3TSP*%t<=IRr9J3>_HT&*3@!1%v+g2b=Qt_$ z?%jI^-7iRU#cKoB*Vjq8EEkGxM8I1EG#bs}Lx&FS@-zx^B9JeAarW%l>uR<73xe$9 zPpyszvPp)tucV~p6MQ`9Q4~DMfwi@@2w)bl33&AA(PMNK0-pjoz+s94KgJn^9AFWn zIXV4k{Fp_wqeqXviM}A8L;%|-9Y)&i?;AI6=+HF_bOHAP9XlR9+Cnsz&AH#z)peC0 z6BHB_nv;|BF8adVM!}N^tgNgIt*)-x1nBj8Qv7ou9f$>0HP*qjcUA$WW#wiLIW06q@q>i(YjMmoH3VvKzSlG6k zH*bE7zEH0Wz}akf@+>VaEuTAgt^-{LU=mpJRQXK|pte+9U0n;$FY;q|@7{eJeJ`>o z$u|JXrs5-o7g}Fm-!eQrY!JMUF%};fV7Ywx@^E)|_YeHosHmt!IO}cnZ&73byq_;s z;MA#8zo5&=ylH6U8Y`FG9D&AO41kr_Nr zFe5BJWX6_j*RBnrHSjOv;^Ow5Jb99;e26RqoY98D!or`}(Mj9K^w%(-MS#ATkPBZ+ z=bSikB7d{O=9EsGOr{8?sMtC?JA0Cnk}ByDXvdgF#(#X#bm8IQdzgY-dwYAY@7S?p zKR+NnJ$-*;V`DoVjBX3cIXGbVnl986D7FJ@+D z7C{zO-8V=klN~iMFwh|#d*sLw2YR9Mgf_t2I#&9}Spg%9SBr{@v{$ZNsZr|v^XJds zsi~=1Wz}|(WHQ+ceSLjDO6f&bR+a<3aL56a^dUUQiG&3W6!%L!_5u&s31nqL!hl^k zJxWqjQ`6*Zdd#^8h3?>S44}d|z>Kgl$Ht70kGF@0hDHi=!0`;ojU+q{ldl~j0OcKM z13VwxQLgk7!ETbWL?P!Cv)=}C3g9QZzWm8jAWA2onn3$N%%gd{0b%c~3WHPK$B5?8I zMF)D3n3!lsFGK^7j1IJ+p`oD#g-fIj&I%Xi(K};%d%HFxBO@O+Z_16xAqNj0{C;$F zbc!k7@1h`DYHMqUdwP28=tX2?WMX-FxkxWmu4qGcc6Jj_8#bfkI3Z|18ag^Uw8h26 zgizOjYWE`BDL z)j~o-qMkf?qW6U?MSpPk>pwOB8}QT^;7ucjsbpSEOic9C5&;{#6v-0ei>Uj=0Gg{( zsjUC10p2vT*=&LV7Ba#wlQ=#;{v{v%Mf=}7g;W84-uylS{O>{ga4%t?QV~ic00000NkvXXu0mjf+nz@M literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/ic_menu_location.png b/android/res/drawable-hdpi/ic_menu_location.png new file mode 100644 index 0000000000000000000000000000000000000000..6ff8c131afddee3a877b0d41787d27401f7658c9 GIT binary patch literal 2028 zcmV-P)_yP%=a@ zfJTb~4K}4Qpb^rV*3bksZ8T94P%JhQ>5>?gT9ZN=%MVG6#b^+yM(dwaw6u_#vX~Z0 z5Kv?>2o8%ZR$*9Y*k<}&a)#Vq-YgFW8k64Slkweim+zkQ&T^l^WHLFu%FWs76>t9& z_^+F*_&}jh$eMuOAzvUI*a`#_q*^th1Skfya@U)-Hv5N%%n8DQT+gsZXobzQcUVtW5|nnHuN?Od{^zzh6%q{|fj5 zI0SqIyeG=ySt1b0`bg%`=FOW^D=RDOq~?Yu`Y&9#u+o}I*-M~GoP1zlK!5h^*`I0S zUjnhf`#=!j4R}ZphyymTK9UKdF|q0C=|8eL#WDT;{q^WyVo4J=2|$(S022>Ps*j3_ z${>?Spi>P5nB6MbVvutZ$KiPlix;eqHl(C6Y;5G-y?ayG+~T4o%qeK=s^QC?nNPiDhTek1TYd%@7>Bn31t-~&4O z82arcA;;%sY|f339zCiM*U!w%j7Q%hyW#*&KS?BZ?AWni(bWSyp_3nEqM{sk5IV|x ziV5tu&dNJyq&c-|X=&eza?lKO0_tgANfaC!8uA59Jnr1NQ$^k;lI+#RJRbeCf<$9; zuc)rB{$1S1kt0VUc`Zn40D&YzB!wtyw!aqA!i1#*kPE4x&(_G!&Q6oi0*fK9@ov@G zLWVgth=qRGe+SDH=w%zRra=b~m~?`O4OQ@ZO}y;t)vMn|pF3X$NWBBW{Gi&}+NXHd zM+ExWp67u8>*&|%bY;A(Mx*hi_dscp09@yr{GhV3vL<>Vds%F=l}kB@z+@cl>FFuv zWtT5s&La3yKCmgoNuV~niUPG-J!ywHrCF7Pn8%6cv3K2%@#imQ5t4ySMpfoTZqeX~ z+E&K83;C!#8v?BEt%iKpJQHx?z0hnmpmNm3*i7fKNgyR95+HRn!KE;1-6=r})rYinyKMQW2p4fOW*{wet0 zmAiKBQj4cE*Ba>V?q)^4KQD_CmK`KZVaF^IKoV6Vk%=CnBuX(~fed|Li?aFo`H#^x zzz5W61QHSw8o|DlAGmJax^O%XK)2g`5P+@wqA!M*LygdYoUD`58iTc5Xr!W|B2!!_ zK0f|56&#AWCV=PXM7f-toHD8xbbLZ7MPU5k!Gnd*pFgkRC-Cy}3cY>%_F+DenhOHY zo;_nHzk`=SVXwV<^(w0f|E8R5+!_Hk>p)3K$$4=xc!d*Ju3Xu|7c^EjCpMb|+S}WM zrB46i#fwFB@*VUJm~4F?FyO__uc@iI#ZTno;<7j*BI2jq+}tqpSbI;}+uPd!1Xz8l+rEAKnHMi!vdDd3QN1YO z=H?cO9Oen?=pR7RPe#;b`A!yXY==ZTV@OO)%tkreLv?tQ)agqWG!mbDSZMcMyLN5p z_3PKa@$~duVI}xH!1yBigp|woUA}zz{LY;_7bCL2W#to;6Jk&oH~=ryr(t1XTjt_}9X#K?n3$N~DCc4(Q%hPJ5^Hfe1k9$kh;EhNh>MGR zH#$1{LmwX>KSyj_i+1VKrIH&rZag8IXD9!dNDNDvj$8u#jj{$;&!)O0vEat8KBftQLKuitnxp%<;0000< KMNUMnLSTYU!pSiJ literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/ic_menu_location_found.png b/android/res/drawable-hdpi/ic_menu_location_found.png new file mode 100644 index 0000000000000000000000000000000000000000..5fd6616bcb7e02758c9f9f951dc02e39119fc693 GIT binary patch literal 2553 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 UFB`*=7ytkO07*qoM6N<$g4GIwlmGw# literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/my_position.png b/android/res/drawable-hdpi/my_position.png deleted file mode 100644 index 8074c4c571b8cd19e27f4ee5545df367420686d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4147 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 diff --git a/android/res/drawable-ldpi/download_maps.png b/android/res/drawable-ldpi/download_maps.png deleted file mode 100644 index 1095584ec21f71cd0afc9e0993aa2209671b590c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1723 zcmV;s21NOZP)AReP91Tc8>~sHP8V>Ys(CF=aT`Sk=;|pS}XrJPb~T1dys{sdO&0YpQBSz*~us zcN*3-J_EnE1cxrXiq*F~jZje~rkAe3vf3>;eR)3?Ox=jK*jEU7Do|T`2NqP{56w(* zBAf)rvPB_7rsfeKd0^!CaR%BHUC$tsP9m8a!i@4&TxxzagzsYHJvblx4rRUu#0Jlz zclZJwdC}7S3BvwaIMTiwb!98zRf|zoya>NudJkDGgEYs=q*HmC)>GExofw=92}s;l z_YgKLUT5`<1RBwq{f)K~I%M=gRE6d)b5BP`8{u9x0-wsG%H)w^ zRU7n9FwtlfsZSjiSB(k8~Y5+O>dyoSI477Ly?|FR?m))C!ci%BtY!2Sst8Uri#|SFX&)8{_Ou2 z9r5p3Vz9_GY#%D>%huqp_>U}K45YGy__TE!HZA@bMxX~@{;>cGYRgH~Ih*vd7EgV7h6Pg$#$lH+5=^lj{W80p{{l+;{7_t5cv3xVUy zl_BY4ht1JH*EEeRS{VwTC(QFIVu8zF&P8O$gJsMgsSO35SVvBrX`Vah$Yz2-5T>-`4DJNH;N zlSSY8-mfty+|1~*;BtTwLz_w5 z+lRv)J28~G%ouyvca(@|{2->WsPii&79&nju7ITE6hMX4AQc{|KqZN#)aAvemg3IZ zCr}Y+!r}JU&^>U1C2WyZC<=47itSYQ`?$5{VH?mtFMFFExfYTsfqK%*WzH@Onc#i` zI@a|rm-WbKk{5my{mF}H>Duc$bit&yLAgFfqo2vVbm~?FeG#0F?dSP*kxSo0Ff!o@ z(C}B;r&6pa-NY4;y~5lX8g&*MYQ>yLGd^tDWC4(sGy$Ow-*!eh%xt;>ve|J1q$*w< zh;B#cz!6l2=5bkX#nJ9PJQ`ew8t>7z$bxqf*QB=l2_UB$hK|1EIfloN-jQ=qcwChF zYAkkyp=;FwcnUB3v0=*tMYMA(Hdy%7RHYS89yTmP~+SBhUdyKiE16`E+aq z20Wev!I**y$8iKdoBLJ?v_Sygz{qChWc)1o1gq7my&-^ot0`RYcnwnRULj|V(_8KcOdb8Qgb8*qd{2sUmW7COXDza|A?~kX`Da8sv*HsE~ zRdwtrBBciqVp6OdFc3+SlogVSeZoa6GHQw^ZgK0wPNfBgCHIH?j4_6YqNu7B>BTz( zkJ|hxxZ`WbZ literal 0 HcmV?d00001 diff --git a/android/res/drawable-ldpi/ic_menu_location.png b/android/res/drawable-ldpi/ic_menu_location.png new file mode 100644 index 0000000000000000000000000000000000000000..21e77b94202c91028e8b90489a8f37260c2d2023 GIT binary patch literal 538 zcmV+#0_FXQP)kbpSU(g6!SQ(HfB>Kf3yc~0B3`Or81+G|L7wLlpa_1sSm!Kp-{48B!QpTa07Y0_+M7#2 zj=>i?{(FjGlimRMn*ye7k0Wx3TWD2|DFnxqT)M8CwlzQwa!F%sGZ<1byY-_2?l)-+ zb&Tm&k!4w>XLz2+nh4i%pAC2Cj+tL?6|^+Oq|@mzL{kG@58N-UV>8%La&*T^Jkr?M z4AzwNce@>LD~=rGlE&I*FsCFI${S`ciCbt@47%NJ2#J|qMUo_bSp;GVVTt?3>}RM| zIi`BVag2RlpW`K9+UxaF$`!@%%;=fZouDU!@BT&CTMeQpLek1GNy!L5zz>Q|03#CS zrg*>K|I-DS?M@EEkdxSZ!!4KzA*}t2)m{4A?G~>?Y+PewMUF9JJT3FVU=Uu?VE_JK c#g7030NAjl6!aymDgXcg07*qoM6N<$f^pF8=Kufz literal 0 HcmV?d00001 diff --git a/android/res/drawable-ldpi/ic_menu_location_found.png b/android/res/drawable-ldpi/ic_menu_location_found.png new file mode 100644 index 0000000000000000000000000000000000000000..085d0eb62651ee3ed93193262b2dd17057d3e4b9 GIT binary patch literal 701 zcmV;u0z&`Or#Z{0=(wA5^xsC0j{y5 z!NIP0kXV5AAC_}+To^uoM1o!$I%N$4tfv%@%lIx);0$G5*^Dxdw&RMS!4bqVf z*|IMC_L~l9?_l+dqJ(~pR(}1G%%`aq@RyC9bc0`u?Vuir34o*z6w;O>ahR)pS!H?{ z=u*_Hzk5Z-61DbSba18I0N_Hr0A@xmh$3EpeO4=6c>{KU@Hnyi$<^)sR*S~= z1@{I5$tlwgJ}Mj_Yvo{J+ir*lSEa6&r=P+Dh>nDMce=;vY{xZ@s8PeoBTomd&%YJd z%t16pA6;|a#E$5XT7no)cvy-)uoLZV?qfI$QEYe@AwZSSt{;d6_*EBEoSWO6WJ=~^ zdndZPqpptU;Neyn-91!6-A{TQKTVl}?{XiJ^uRB~`T)`A>6ic)D5vcM;xJeHvaSlR z r+J#P8j{YsciI>DSGG?>p3hq)g4YIqkd_B-fCRRz$EYWd##fZ+b?Ry}`gPdc(8 zTh_gAnwR!|K69z(Y2WYcNlc-51Em6HGki5^%wn2nfk;4hjmo7cUY}R7ebhilWA^ z&cCEu+HrKf>>&+5W~{D%RZn+yx0(>bag*(q!_kk2^g%KP`6{}Nqe8RZXw7D` z%%h}s4$e@PJu1^iqp@=K`~9oYU6c$H;$cAIQd{?@E#$C!!7bo^2=Km;>u- za3tS21vI-mxn8g99PISKoADDC|IDsK+jr@s?&&&w3!=&wIg}AowWI=pKz&yX?Z5w5 c@lSvO0H5#tAJ5_zo&W#<07*qoM6N<$f+h50=>Px# literal 0 HcmV?d00001 diff --git a/android/res/drawable-ldpi/ic_menu_search.png b/android/res/drawable-ldpi/ic_menu_search.png new file mode 100644 index 0000000000000000000000000000000000000000..817cc9460489318e76e088906460d8ae218668f6 GIT binary patch literal 609 zcmV-n0-pVeP)(!5Q^?Tf5!nnBWk60=EmFdzntMuASx9KH8^gntp6G?iOuwOWD$ z;1XY8512G2W77CHn{%K{k!{f`~V74 z;Z+pK-#Z)|sv69&kWPA?3JLB%<0mi#Svt1;EWSzp8qL2{30UBm zP0WK`5K=50qVYU?cO8jDEI$Fg(P(J&72iu2-4oac58#~+LKf_T327a1W3EP{(T*te zdc8i#Z7Peb#A2~)IYnNWO)w3PSWQ%j@pIrvsk^AvYD<42s8*}J{%GTr9+9T9^ha9+ zS0E%u5|77!Bhf9((grk@$Z{f)xX~+>%0R0plSvJmREf+R0dLO^NaP0XW#F)}5IFr8 v0b!|B%1^}kHvwVkbXtfkfOlg3M}PqUlQx)Hk~R$a00000NkvXXu0mjfQOO6i literal 0 HcmV?d00001 diff --git a/android/res/drawable-ldpi/my_position.png b/android/res/drawable-ldpi/my_position.png deleted file mode 100644 index 1095584ec21f71cd0afc9e0993aa2209671b590c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1723 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 literal 0 HcmV?d00001 diff --git a/android/res/drawable-mdpi/ic_menu_location_found.png b/android/res/drawable-mdpi/ic_menu_location_found.png new file mode 100644 index 0000000000000000000000000000000000000000..5cf57f5cd1826c1746efa4af918d98c8e46fc4a7 GIT binary patch literal 2268 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 P00000NkvXXu0mjfJu~qk literal 0 HcmV?d00001 diff --git a/android/res/drawable-mdpi/ic_menu_search.png b/android/res/drawable-mdpi/ic_menu_search.png new file mode 100644 index 0000000000000000000000000000000000000000..8256f79775ad57e921fa4b503287bf3655d5c162 GIT binary patch literal 1791 zcmV2kRg|EEVo|0tEpMHSz? zc@qY`1pG`^tJRSzm1;RIqjWl*mZ_utnpwGPzR*Jop^0Eil63Mugj5Wr*r zj18u6xf7VsK_aIEc4rzI8VaywAc4Y|LM#h>iU9GB1?T({PbyR)vYu0m>$j*gB-=xiZJ$GbuhNkCvl zIX*tV1ApxhmmoHq%~erRQ3ti7kdGm27yy;99(r@a#%OL0oVf&JPSIYD+}zwO%mM-b9`fT9 zh4Jz6QJ7y&OiHDkIY6jO6e-^PVwmeO12RmmLT7sl2<9i_t$_$o5dFCP`BlYggBz9_dkDs64hd5Nt9}MPfa%)wr zc0Hmh%~Km28yiV`vfC(@YBFY?z5F{a?&#_1dBs?Fy7eI>#YQA4Gru@2ENo+DW@a=4 zrCKT=gntyw9?OrR5=^4l_7DfGiIWD@-Q9f$9bX&27-Zf#Fl~{5MsGy+WITG1-PU^6@4FG0mVPWAhs02~_;3=S0t5#)$ zo&Ee6Rr%uL;yWyrSY#P``t<4S;lqc2d-?KZwJ7r{_w3noq^73k6xxgssnQ|R_eQ}y ziF{K;Yx%hc4<0}$%6At)Jprg=Wo2c*vuJb4wy?~3SD+6%vU~ULJTMUazCQ-hLHdG z+_@GpDD~;nrxp46`SUJM)~T+penP1LEkg);qIE*5UrZ>P+S}VZVO|?9vqDNor_%*S zL`1})cW-ZLX?exBHBt=mOi@w{$;!$~IC${j7jVpQ_|0;dQX^{Q9jNdYlgacK{Nrat zWp`p?qIXeI(N{r1L7Ut$H8L{t1p3D=T)6O$`Q!izKIP5&m(|J1$=l-M;&$rw`t>La zzEmg?UDJJieXklD8;z~4ttOUdUQjfpr>Aep&dx3g3=G^XXTD39E@dJ|&6#g8Kzw>2 zV9Qu96Tm)~1*U|~z{+HT)hjJP#em^bFcl%k6uwx_9y)aBnx}wx#?%a)hRa7z28uo- z9AIqDN%5^l`nnS*P8d*z%HWGz+-;0zt_K~)r%MI2;KAXt^8zTaWXQ^C7=k zwr<^;qI%a5UM%W*dwYqkDL8LSNlD33%0p6mR;%?j1<}6_h*kMHP$)mGm6esp0qU^` zbnoTMmwzClREq!T5kOHgL@_T$4`xIO8bkRQz}L+$0NQ~0=kM%8Z}HG!^q&%xY}d0~ hN9LlGVftHu0RUCw+U;uD>&pND002ovPDHLkV1m9KQLF#} literal 0 HcmV?d00001 diff --git a/android/res/drawable-mdpi/my_position.png b/android/res/drawable-mdpi/my_position.png deleted file mode 100644 index a07c69fa5a0f4da5d5efe96eea12a543154dbab6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2574 zcmV+p3i0)cP)Q`Og{P|8RRXpj5bgrSmEzSMfBn+{{vpNxw?;5UX;iv9sYxy_`IQHs$i<61a_iv^L>h8s-`D(`e@|IgS*Fj zNGM876Gf;3D8*1UX9a%v>yJKD*QkCwW2AirU(L{qNA)JghmGItc;(H<$!ABY&gBy1vJIEUj-b8%el*o|VkG)LqNx#TG>Jvj^jIte!!+RY z)T4j$7+PoF1AkRBf}R#^T=-q|PaK1$c<4UH)Hpq3$4WA|xtr!ZQLC=*vNE>O6E9kp+5X0eKB$6>C(lPwI@3#oY zhS_%x7e|j!$yG?ECXmh~EH~^OeuK}+sWoJse3Z3?ha3n`MM9KvA?uqpEnBg4Q46)7 zM$p%a$@l;+O}vfvx%XjH`}a{(-HHth9!JaUwV0*VqGR48^gWNYN<&~7x)y$e!X>e` zZ5!6KZoxbKuV9XUDI%#M1~IVh?pNSdeb~6@$y`v|yk=XK+fHxnDqnUK4&=QRNyIVf zYbDM*cI>~qIy*a7=z7uqkw@agd(<=y-Q7L!ty_23SGdXmahO<;N=wB+j;lNm%=OHC zy zU|>La6h%92y4IPufI$9>Xu!@y`TaNgtg&41@PwMwBdmSm7)xAWDLoqjZ==P2#*k7! z3o1)cVSI3KP_!?d8G^Lg0FtLXC~JYdxi|c%h~lXEixY=%VSFF@!*3&&9>(Rb|iK54Cx5;s~PY5iaV1het%w`dgQFBAJ;aFK zImQC}(|QaCFYUm1JVfzSc)ebv=)ObI)0jwJb``}Zj9J0n0Xgn*Zc(rFM9$xh_makZbm-at_v5^SW zM1y1SW@%+FuIy*WR)i3A2N_q;(YO`O!A|Ts^%z}9ZepCj3ytlw#x%N_fNrKKtPh`< z|1{UqF`4LxHaCQ79+E=uUXCOZ35jAMRz%R%0(P!0FMv=sk>Nr8%+OzY^c-M9@+fz=G`qa@v4sF5u-2289-#$**LWnyNNDwDf1( zkUiMnw|y$tn>pQP=Vn!#|17L^5AGrjtBkN$D@v)Z7LXc5EFhLB4<;7Wehh)CMqX|W zqsiZaO^benJ_hwa&V0ub$-_HUk**?g6fm9|!@kguU6*zhK)$qn-<3*kFrYPIaqR=V zUaUvk>@F_89b@tHs8R!*QKY;INJ<2_U+K6Ca3e9Gsl2{qY0%a7J?uICWgHuLfj+MB z=GkAN1&ifT#2u}B+2S#~$5jA(Qn^;H%CCmIae4AE-Dsng|Hl*Ov!z72k3ZnJs{pp| z+pW`DDueC#mEWOf=ucJ!dTL}hzOeiS-i?m2E;`EKz4<&Lu~NnW?peqVU^@<+T3KKu z{yrI%Qy-Z%HEvLUz}n^~m?7x`xuCtNR#L2En!T>dQtIKdS#V-Hzt3RtwTeYtmQ&dR z6qXZvac*oc@BUYEH%@Ylv_1&tSjkbzzU6*h1(3^C`;1z;g_SmOtclS?KWk2VYE zM*oS<=C483XckW?GN|1jfh3Ro(h diff --git a/android/src/com/mapswithme/maps/MWMActivity.java b/android/src/com/mapswithme/maps/MWMActivity.java index 8416409c41..7d355bec1a 100644 --- a/android/src/com/mapswithme/maps/MWMActivity.java +++ b/android/src/com/mapswithme/maps/MWMActivity.java @@ -20,10 +20,14 @@ import android.util.Log; public class MWMActivity extends NvEventQueueActivity implements LocationService.Observer { VideoTimer m_timer; + private static String TAG = "MWMActivity"; private final static String PACKAGE_NAME = "com.mapswithme.maps"; - private boolean m_locationEnabled = false; + private int m_locationStatus; + private int m_locationIconRes; + private boolean m_isLocationServicePaused = false; + private LocationService m_locationService = null; private String getAppBundlePath() throws NameNotFoundException @@ -43,7 +47,7 @@ public class MWMActivity extends NvEventQueueActivity implements LocationService public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + final String storagePath = getDataStoragePath(); // create folder if it doesn't exist File f = new File(storagePath); @@ -59,36 +63,68 @@ public class MWMActivity extends NvEventQueueActivity implements LocationService } m_timer = new VideoTimer(); + m_locationStatus = (int)LocationService.STOPPED; + m_locationIconRes = R.drawable.ic_menu_location; m_locationService = new LocationService(this); + m_isLocationServicePaused = false; } - public void onStatusChanged(long status) + public void onStatusChanged(int status) { - Log.d(TAG, "onStatusChanged"); + m_locationStatus = status; + + switch (status) + { + case LocationService.FIRST_EVENT: + m_locationIconRes = R.drawable.ic_menu_location_found; + break; + case LocationService.STOPPED: + m_locationIconRes = R.drawable.ic_menu_location; + break; + case LocationService.DISABLED_BY_USER: + m_locationIconRes = R.drawable.ic_menu_location; + break; + case LocationService.STARTED: + m_locationIconRes = R.drawable.ic_menu_location_search; + break; + default: + m_locationIconRes = R.drawable.ic_menu_location; + } + + Log.d(TAG, "StatusChanged: " + status); } public void onLocationChanged(long time, double latitude, double longitude, float accuracy) { - Log.d(TAG, "onLocationChanged"); + } + + public void onLocationNotAvailable() + { + Log.d(TAG, "location services is disabled or not available"); } -/* @Override + @Override protected void onPause() { + if (m_locationService.isActive()) + { + m_locationService.enterBackground(); + m_isLocationServicePaused = true; + } + super.onPause(); - m_view.onPause(); - if (m_locationEnabled) - LocationService.stop(); } @Override protected void onResume() { - super.onResume(); - m_view.onResume(); - if (m_locationEnabled) - LocationService.start(this); - }*/ + if (m_isLocationServicePaused) + { + m_locationService.enterForeground(); + m_isLocationServicePaused = false; + } + super.onResume(); + } @Override public boolean onCreateOptionsMenu(Menu menu) @@ -99,19 +135,28 @@ public class MWMActivity extends NvEventQueueActivity implements LocationService //menu.removeItem(R.id.download_maps); return true; } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) + { + menu.findItem(R.id.my_position).setIcon(m_locationIconRes); + return super.onPrepareOptionsMenu(menu); + } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection + switch (item.getItemId()) { case R.id.my_position: + if (m_locationService.isActive()) - m_locationService.stopUpdate(); + m_locationService.stopUpdate(true); else - m_locationService.startUpdate(this); - m_locationEnabled = !m_locationEnabled; + m_locationService.startUpdate(this, true); + return true; case R.id.download_maps: Intent intent = new Intent(this, DownloadUI.class); diff --git a/android/src/com/mapswithme/maps/location/LocationService.java b/android/src/com/mapswithme/maps/location/LocationService.java index 9c7652295b..f96e25d1cb 100644 --- a/android/src/com/mapswithme/maps/location/LocationService.java +++ b/android/src/com/mapswithme/maps/location/LocationService.java @@ -16,20 +16,36 @@ import android.view.WindowManager; public class LocationService implements LocationListener, SensorEventListener { + private static String TAG = "Location"; + + /// This constants should correspond to values defined in platform/location.hpp + /// @{ + public static final int STOPPED = 0; + public static final int STARTED = 1; + public static final int FIRST_EVENT = 2; + public static final int NOT_SUPPORTED = 3; + public static final int DISABLED_BY_USER = 4; + /// @} public interface Observer { public void onLocationChanged(long time, double lat, double lon, float accuracy); - public void onStatusChanged(long status); + public void onStatusChanged(int status); + public void onLocationNotAvailable(); }; + Observer m_observer; + private boolean m_isActive = false; - private static String TAG = "Location"; + private Location m_location = null; + private LocationManager m_locationManager; private SensorManager m_sensorManager; private Sensor m_compassSensor; // To calculate true north for compass private GeomagneticField m_field; + private boolean m_hasRealProviders; + private boolean m_reportFirstUpdate; public LocationService(Context c) { @@ -45,54 +61,110 @@ public class LocationService implements LocationListener, SensorEventListener return m_isActive; } - public void startUpdate(Observer observer) + public void startUpdate(Observer observer, boolean doChangeState) { + m_observer = observer; m_isActive = false; + m_hasRealProviders = false; + m_reportFirstUpdate = true; - /*if (m_locationManager.isProviderEnabled(LocationManager.PASSIVE_PROVIDER)) - { - m_locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, this); - m_isActive = true; - }*/ - if (m_locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { m_locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this); + m_hasRealProviders = true; m_isActive = true; } if (m_locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { m_locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); + m_hasRealProviders = true; m_isActive = true; } + + if (m_hasRealProviders) + { + if (m_locationManager.isProviderEnabled(LocationManager.PASSIVE_PROVIDER)) + m_locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, this); + } if (m_isActive) { m_sensorManager.registerListener(this, m_compassSensor, SensorManager.SENSOR_DELAY_NORMAL); - nativeStartUpdate(observer); + nativeStartUpdate(m_observer, doChangeState); } else { Log.d(TAG, "no locationProviders are found"); + m_observer.onLocationNotAvailable(); // TODO : callback into gui to show the "providers are not enabled" messagebox } } - public void stopUpdate() + public void stopUpdate(boolean doChangeState) { m_locationManager.removeUpdates(this); m_sensorManager.unregisterListener(this); m_isActive = false; - nativeStopUpdate(); + nativeStopUpdate(doChangeState); + } + + public void enterBackground() + { + stopUpdate(false); + + /// requesting location updates from the low-power location provider + if (m_locationManager.isProviderEnabled(LocationManager.PASSIVE_PROVIDER)) + { + m_locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, this); + nativeStartUpdate(m_observer, false); + } + } + + public void enterForeground() + { + nativeStopUpdate(false); + + m_isActive = false; + m_hasRealProviders = false; + + if (m_locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) + { + m_locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this); + m_hasRealProviders = true; + m_isActive = true; + } + + if (m_locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) + { + m_locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); + m_hasRealProviders = true; + m_isActive = true; + } + + nativeStartUpdate(m_observer, false); + + m_sensorManager.registerListener(this, m_compassSensor, SensorManager.SENSOR_DELAY_NORMAL); + + if (m_location != null) + nativeLocationChanged(m_location.getTime(), + m_location.getLatitude(), + m_location.getLongitude(), + m_location.getAccuracy()); } //@Override public void onLocationChanged(Location l) { + if (m_reportFirstUpdate) + { + nativeLocationStatusChanged(FIRST_EVENT); + m_reportFirstUpdate = false; + } // used for compass updates if (m_field == null) m_field = new GeomagneticField((float)l.getLatitude(), (float)l.getLongitude(), (float)l.getAltitude(), l.getTime()); + m_location = l; nativeLocationChanged(l.getTime(), l.getLatitude(), l.getLongitude(), l.getAccuracy()); Log.d(TAG, l.toString()); } @@ -109,8 +181,7 @@ public class LocationService implements LocationListener, SensorEventListener { Log.d(TAG, "to receive a location data please enable some of the location providers"); nativeDisable(); - stopUpdate(); - /// TODO : callback into GUI to set the button into the "disabled" state + stopUpdate(true); } } } @@ -120,7 +191,7 @@ public class LocationService implements LocationListener, SensorEventListener { Log.d(TAG, "onProviderEnabled " + provider); if (m_isActive) - m_locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); + m_locationManager.requestLocationUpdates(provider, 0, 0, this); } //@Override @@ -145,9 +216,10 @@ public class LocationService implements LocationListener, SensorEventListener nativeCompassChanged(event.timestamp, event.values[0], event.values[0] + m_field.getDeclination(), m_field.getDeclination()); } - private native void nativeStartUpdate(Observer observer); - private native void nativeStopUpdate(); + private native void nativeStartUpdate(Observer observer, boolean changeState); + private native void nativeStopUpdate(boolean changeState); private native void nativeDisable(); private native void nativeLocationChanged(long time, double lat, double lon, float accuracy); + private native void nativeLocationStatusChanged(int status); private native void nativeCompassChanged(long time, double magneticNorth, double trueNorth, float accuracy); }