From 32ead7416e430d7c09676c975d3512125a5323ac Mon Sep 17 00:00:00 2001 From: Alexey Kulish Date: Wed, 15 Jun 2016 22:05:12 +0300 Subject: [PATCH] Added OsmAndCore-sample --- OsmAndCore-sample/.gitignore | 13 + OsmAndCore-sample/AndroidManifest.xml | 24 + OsmAndCore-sample/build.gradle | 92 +++ .../drawable-hdpi/bg_contextmenu_shadow.9.png | Bin 0 -> 1105 bytes .../drawable-hdpi/ic_action_remove_dark.png | Bin 0 -> 1284 bytes .../drawable-hdpi/map_bt_round_1_shadow.png | Bin 0 -> 2513 bytes .../res/drawable-hdpi/map_compass_niu.png | Bin 0 -> 1315 bytes .../res/drawable-hdpi/map_zoom_in.png | Bin 0 -> 1091 bytes .../res/drawable-hdpi/map_zoom_out.png | Bin 0 -> 1067 bytes .../drawable-mdpi/bg_contextmenu_shadow.9.png | Bin 0 -> 1072 bytes .../drawable-mdpi/ic_action_remove_dark.png | Bin 0 -> 1160 bytes .../drawable-mdpi/map_bt_round_1_shadow.png | Bin 0 -> 1916 bytes .../res/drawable-mdpi/map_compass_niu.png | Bin 0 -> 1225 bytes .../res/drawable-mdpi/map_zoom_in.png | Bin 0 -> 1069 bytes .../res/drawable-mdpi/map_zoom_out.png | Bin 0 -> 1051 bytes .../bg_contextmenu_shadow.9.png | Bin 0 -> 1114 bytes .../drawable-xhdpi/ic_action_remove_dark.png | Bin 0 -> 1281 bytes .../drawable-xhdpi/map_bt_round_1_shadow.png | Bin 0 -> 3377 bytes .../res/drawable-xhdpi/map_compass_niu.png | Bin 0 -> 1421 bytes .../res/drawable-xhdpi/map_zoom_in.png | Bin 0 -> 1108 bytes .../res/drawable-xhdpi/map_zoom_out.png | Bin 0 -> 1083 bytes .../bg_contextmenu_shadow.9.png | Bin 0 -> 1158 bytes .../drawable-xxhdpi/ic_action_remove_dark.png | Bin 0 -> 1468 bytes .../drawable-xxhdpi/map_bt_round_1_shadow.png | Bin 0 -> 4861 bytes .../res/drawable-xxhdpi/map_compass_niu.png | Bin 0 -> 1655 bytes .../res/drawable-xxhdpi/map_zoom_in.png | Bin 0 -> 1156 bytes .../res/drawable-xxhdpi/map_zoom_out.png | Bin 0 -> 1128 bytes OsmAndCore-sample/res/drawable/btn_circle.xml | 5 + .../res/drawable/btn_circle_n.xml | 22 + .../res/drawable/btn_circle_p.xml | 21 + .../res/layout/activity_main.xml | 120 ++++ .../res/layout/search_list_item.xml | 58 ++ .../res/mipmap-hdpi/sample_app.png | Bin 0 -> 8157 bytes .../res/mipmap-mdpi/sample_app.png | Bin 0 -> 4886 bytes .../res/mipmap-xhdpi/sample_app.png | Bin 0 -> 11234 bytes .../res/mipmap-xxhdpi/sample_app.png | Bin 0 -> 21401 bytes .../res/mipmap-xxxhdpi/sample_app.png | Bin 0 -> 42438 bytes .../res/values-w820dp/dimens.xml | 6 + OsmAndCore-sample/res/values/colors.xml | 17 + OsmAndCore-sample/res/values/dimens.xml | 6 + OsmAndCore-sample/res/values/strings.xml | 10 + OsmAndCore-sample/res/values/styles.xml | 11 + .../samples/android/sample1/MainActivity.java | 546 ++++++++++++++++++ .../samples/android/sample1/MapUtils.java | 30 + .../android/sample1/MultiTouchSupport.java | 202 +++++++ .../samples/android/sample1/SearchAPI.java | 306 ++++++++++ .../android/sample1/SearchUIHelper.java | 139 +++++ settings.gradle | 2 +- 48 files changed, 1629 insertions(+), 1 deletion(-) create mode 100644 OsmAndCore-sample/.gitignore create mode 100644 OsmAndCore-sample/AndroidManifest.xml create mode 100644 OsmAndCore-sample/build.gradle create mode 100644 OsmAndCore-sample/res/drawable-hdpi/bg_contextmenu_shadow.9.png create mode 100644 OsmAndCore-sample/res/drawable-hdpi/ic_action_remove_dark.png create mode 100644 OsmAndCore-sample/res/drawable-hdpi/map_bt_round_1_shadow.png create mode 100644 OsmAndCore-sample/res/drawable-hdpi/map_compass_niu.png create mode 100644 OsmAndCore-sample/res/drawable-hdpi/map_zoom_in.png create mode 100644 OsmAndCore-sample/res/drawable-hdpi/map_zoom_out.png create mode 100644 OsmAndCore-sample/res/drawable-mdpi/bg_contextmenu_shadow.9.png create mode 100644 OsmAndCore-sample/res/drawable-mdpi/ic_action_remove_dark.png create mode 100644 OsmAndCore-sample/res/drawable-mdpi/map_bt_round_1_shadow.png create mode 100644 OsmAndCore-sample/res/drawable-mdpi/map_compass_niu.png create mode 100644 OsmAndCore-sample/res/drawable-mdpi/map_zoom_in.png create mode 100644 OsmAndCore-sample/res/drawable-mdpi/map_zoom_out.png create mode 100644 OsmAndCore-sample/res/drawable-xhdpi/bg_contextmenu_shadow.9.png create mode 100644 OsmAndCore-sample/res/drawable-xhdpi/ic_action_remove_dark.png create mode 100644 OsmAndCore-sample/res/drawable-xhdpi/map_bt_round_1_shadow.png create mode 100644 OsmAndCore-sample/res/drawable-xhdpi/map_compass_niu.png create mode 100644 OsmAndCore-sample/res/drawable-xhdpi/map_zoom_in.png create mode 100644 OsmAndCore-sample/res/drawable-xhdpi/map_zoom_out.png create mode 100644 OsmAndCore-sample/res/drawable-xxhdpi/bg_contextmenu_shadow.9.png create mode 100644 OsmAndCore-sample/res/drawable-xxhdpi/ic_action_remove_dark.png create mode 100644 OsmAndCore-sample/res/drawable-xxhdpi/map_bt_round_1_shadow.png create mode 100644 OsmAndCore-sample/res/drawable-xxhdpi/map_compass_niu.png create mode 100644 OsmAndCore-sample/res/drawable-xxhdpi/map_zoom_in.png create mode 100644 OsmAndCore-sample/res/drawable-xxhdpi/map_zoom_out.png create mode 100644 OsmAndCore-sample/res/drawable/btn_circle.xml create mode 100644 OsmAndCore-sample/res/drawable/btn_circle_n.xml create mode 100644 OsmAndCore-sample/res/drawable/btn_circle_p.xml create mode 100755 OsmAndCore-sample/res/layout/activity_main.xml create mode 100644 OsmAndCore-sample/res/layout/search_list_item.xml create mode 100755 OsmAndCore-sample/res/mipmap-hdpi/sample_app.png create mode 100755 OsmAndCore-sample/res/mipmap-mdpi/sample_app.png create mode 100755 OsmAndCore-sample/res/mipmap-xhdpi/sample_app.png create mode 100755 OsmAndCore-sample/res/mipmap-xxhdpi/sample_app.png create mode 100755 OsmAndCore-sample/res/mipmap-xxxhdpi/sample_app.png create mode 100644 OsmAndCore-sample/res/values-w820dp/dimens.xml create mode 100644 OsmAndCore-sample/res/values/colors.xml create mode 100644 OsmAndCore-sample/res/values/dimens.xml create mode 100644 OsmAndCore-sample/res/values/strings.xml create mode 100644 OsmAndCore-sample/res/values/styles.xml create mode 100644 OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/MainActivity.java create mode 100644 OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/MapUtils.java create mode 100644 OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/MultiTouchSupport.java create mode 100644 OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SearchAPI.java create mode 100644 OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SearchUIHelper.java diff --git a/OsmAndCore-sample/.gitignore b/OsmAndCore-sample/.gitignore new file mode 100644 index 0000000000..9d3ed1dd63 --- /dev/null +++ b/OsmAndCore-sample/.gitignore @@ -0,0 +1,13 @@ +# Android Studio +/.idea +*.iml + +# Gradle +.gradle +/local.properties + +# MacOSX +.DS_Store + +# Output +/build diff --git a/OsmAndCore-sample/AndroidManifest.xml b/OsmAndCore-sample/AndroidManifest.xml new file mode 100644 index 0000000000..da3ce99223 --- /dev/null +++ b/OsmAndCore-sample/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + diff --git a/OsmAndCore-sample/build.gradle b/OsmAndCore-sample/build.gradle new file mode 100644 index 0000000000..8e537e3355 --- /dev/null +++ b/OsmAndCore-sample/build.gradle @@ -0,0 +1,92 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 23 + buildToolsVersion "23.0.3" + + defaultConfig { + minSdkVersion 14 + targetSdkVersion 23 + versionCode 1 + versionName "1.0" + } + + lintOptions { + abortOnError false + } + + // This is from OsmAndCore_android.aar - for some reason it's not inherited + aaptOptions { + // Don't compress any embedded resources + noCompress "qz" + } + + sourceSets { + main { + manifest.srcFile "AndroidManifest.xml" + jni.srcDirs = [] + jniLibs.srcDirs = ["libs"] + java.srcDirs = ["src"] + resources.srcDirs = ["src"] + renderscript.srcDirs = ["src"] + res.srcDirs = ["res"] + assets.srcDirs = ["assets"] + } + } + + productFlavors { + x86 { + ndk { + abiFilter "x86" + } + } + mips { + ndk { + abiFilter "mips" + } + } + armv7 { + ndk { + abiFilter "armeabi-v7a" + } + } + armv5 { + ndk { + abiFilter "armeabi" + } + } + fat + } + + buildTypes { + debug { + signingConfig android.signingConfigs.debug + } + nativeDebug { + signingConfig android.signingConfigs.debug + } + release { + signingConfig android.signingConfigs.debug + } + } +} + +repositories { + ivy { + name = "OsmAndBinariesIvy" + url = "http://builder.osmand.net" + layout "pattern" , { + artifact "ivy/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" + } + } +} + +dependencies { + compile project(path: ':OsmAnd-java', configuration: 'android') + compile 'com.android.support:appcompat-v7:23.3.0' + compile fileTree(dir: "libs", include: ["*.jar"]) + compile "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar" + debugCompile "net.osmand:OsmAndCore_androidNativeRelease:0.1-SNAPSHOT@aar" + nativeDebugCompile "net.osmand:OsmAndCore_androidNativeDebug:0.1-SNAPSHOT@aar" + releaseCompile "net.osmand:OsmAndCore_androidNativeRelease:0.1-SNAPSHOT@aar" +} diff --git a/OsmAndCore-sample/res/drawable-hdpi/bg_contextmenu_shadow.9.png b/OsmAndCore-sample/res/drawable-hdpi/bg_contextmenu_shadow.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0356c4a541459fdfe0b6d541f3585b3351646c5d GIT binary patch literal 1105 zcmbVLO=#3W6pmG7TdXIw>ctQ}R4~7rq)F&1ZL-xBcP-mRdnnr3WYUH=Ec z)RRaN@upq{ucB5hLJ#6WdQwEudax*%+?*|z<#xCeslj4DZK4R$3a7HR zAj))?&WVcJrFZS4C8G0!#!CV#=!TLt1c`2Z42c#wu2Hu78nK9$V@5F!4W6&nYFsVL zp=g8`bzSELiI*gnSg`SAfI-3r@$RMv3&wWjh1f#@oq7aSG=Xyr$#kUzKP(nk9S3oP zC_)*ZfRGnCf%pBiuDW%M%kWPcYg)&Z$q@2o7^8{ECjD@CH^GFve+NnpNjApO$RkYw z;})_fd>G(@m1D>Y=Xj0*RH(R`rm&h~tE{5RI;%rbWnD*db*ZZAk}Ed-tc4dWS+x{1 zuUTS`DCU)3-IUF&)+^@)$;^s7~EF$iqfjO~%w4XpJ~tYJnFU=&pl8gEWP|0u#J z9z`K-n)R;JoyWbvLA7{q+NPDNEf{&Hq0<*3pRV(4cx&XK0$BrkR%TV;I;^J4gb7!6 zSQ%7BM|QQWD@jZP@BA-+JV}aAhvl!~X~_)eg^}eYEi9SljJ~ fWAcXAAAe*7YUb_Mq2YVqf^^9X`I2>~clg|I6c=c1 literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/drawable-hdpi/ic_action_remove_dark.png b/OsmAndCore-sample/res/drawable-hdpi/ic_action_remove_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..718053c4114132155bdeed5166b4ec9a9c3ebef6 GIT binary patch literal 1284 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFqdV9M3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWnQpRyp^1XIrJkXw znYpF8j)D=8uWw+XZ)BirU}P;hnz$GU<>cxGNoetEGbD4HO?c1bPDEK5ysE6UGR0Ee?xCKflOm>HNE zrX-o@8d{nq>82!`00SY>)Kb?XF)7v1(!{{nEX`C2sy~I?@Y4r6N*|P1kP;6}2$&*4 zOn6oRa^RUMH4m7Bihx-~y*KS50|TRqr;B4q#jQ6p{&O`e2pl*5X4L$5zA$>u#PYjYb#Z8ngnqg*wj*TJ7)q z7II7?kagBmb*l*uPi_cV`M)ZB6;SWfx-KkLDru=ts?_S*hhZLj6ZQ8mb`LqVuBTIR zn!Bbos}^S)lS`vl+d`(q1rY|C4vH%#aZl!Y(p*)TXyIU|aY`#@O2Ryesr|N&?yv8$ zST#Od``swDh@XAgg}3gX%ntvEdB-wuPTBUWGM{wc7A5+XX0P8g1Fe2D@{S=lBcVm%Q~loCIA3dxDo&W literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/drawable-hdpi/map_bt_round_1_shadow.png b/OsmAndCore-sample/res/drawable-hdpi/map_bt_round_1_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..159d4c08b5db90d5d581ce6a80148f6f9e633d4f GIT binary patch literal 2513 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 literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/drawable-mdpi/map_compass_niu.png b/OsmAndCore-sample/res/drawable-mdpi/map_compass_niu.png new file mode 100644 index 0000000000000000000000000000000000000000..5207161498d702be60ecbe7068518b5430ffdcfc GIT binary patch literal 1225 zcmbVMTWs4@7%<(ObW2;$7?UV&IZAdc~5TN;T+?durp6xbn z-`XP44bY%GAkctKLqec|xCt>3AhCd$gc!;mV7!2)3B+D_9TH+3r%BmEwFfNO=ltjV z-+%f3|M!vd_ydERw{0c}Vz9Vht>ATQ{NCJ$zrQweSMhRJSg3`Q$O;>p4~e{qbO?%$ zHU%qCGv^PVgF^(-GiO(8VXZVK8^}p%u}&&-Jd7rYq2b8WjA-PQyA5JceSB-^fLo&(XePAe(u>l8$8i<@3H;|(o*|sa=eSA!lpsf;4 z=g767YNawzkPm^7%1{QwrhzD>SRo@y;$FaEnP##y$54zU3%ty5p!1N}n{QfjMIG(< z!cvZ`hoL9abfeKoHTV?rr)XA^B%0x9j-#*!70kP#7Ex}nqiaEhf#KU;Xd@TI7BwBs zhB*>Px|V|Dl}hV|-JnAhri_j>k7iR0?Kp8>ZS5ee!2iP7P&=s3dyuZc0L}Uau7|aw z3&z~t*io#Aqmd_k8y7{JQIRq0KsPL^ITGKbOxu(>OE;iyX_Uc=kdoN6NM#v`p)59= zH7#iJBExj;Y=mc3K@|(5f|AYWS+tc&;5NfUgyS{DgyMs;N z5GyM_)I#J}5t`|CLAj1X6x5Li6s28tut;p}c!3kh4&MB~{LwflI&PNhnx}h&J2Kv`j{+9f zhY7lPf_ywG=DA;5c+CDNs`+a4v;OzBYr{QMVoT3+iGjO&&!7J8`7@{QAG&>oU%X0> zm9PA?`|ZC@+`2Nkm_2q!{*At-P@dzH_dRrB(7FNR;Fjj&*~_2i50Aao`{H7ac=|X8-Gp(B<4<0Cd^xmO6lj6w5S8IOe zz^XlvME$x2o+u0q{G%*iNhF`Su;L literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/drawable-mdpi/map_zoom_in.png b/OsmAndCore-sample/res/drawable-mdpi/map_zoom_in.png new file mode 100644 index 0000000000000000000000000000000000000000..938a4d480553a726e883cb3d0a1c7e85c6e15cb7 GIT binary patch literal 1069 zcmbVL&ui0A9M2qzPIi!ibSfCLivyFqq)pR=Wut96TQGBUg%uI;C3#unmb{p}EnS@= z9t2_DJb0gnf#AiHC~O|R_y>6M4-mY15avtQP7h-T1Ihc5&*%I7e1E-IT(~(tc4>@Z znDIv4Y|=HCy=TwR@AuUBMVCoZYm+7Hkrc*=DZAK4Y$JdxsEMGv`S1&xVVKbkzttvf z>z3}|K!6!W=mrsGGtA6fH-gS8BCL&8{LtWje%#|&-!-^p#R67TMIFE1i_ubVq2=^e z9nIzDX4#ppP7MTzK(-sKg^AuZxV~MT?z3x=WBU-YYH)|5+SVdl#W7+Pp~yQxDzK_1 zNJ>%F)Elf!&mt&^GT?!xD|sEr?BL<3x7hXcra3?GMNbCTAtcg8F-=n;%?mhQ5hYF2 zL?DZ@%u@uPY=#7O`7oIpS};-K#C}A49I}~3XybKaa8&7G2tj07M~1^>kSLlmu?r(n z5`Y*4SzLW|LYnBWjAPMBYcoP(6D4>(c4$4ksUex>?qo+9kgCyd$386zTr;t=9-xpk zOoO9;1lMQ27$j0PjhqlItNiuL3Z%a~xkOD{8qSnP#z4lcZWf zs};*y0pwM=m@lbHWyo!W34x)5hQ593d%&%p$knScf&|AcjMs);u-L%_CmkHI)oQ=$ z?Db_oba9$YXJtB!+C;Ixf!z5R2W&sjx_^v@QbF&B(LE<5>6&}cnYHO|} z+ftDm@ZJB-pGZZCS+o4pJi{y6k=gcW6zJh-m{3S3D5j%w`OVi)bj+-VS#EW|*}o4C z=0^FEiP4uM=eIB9a`o-r>vZzm^xeHD#^WvU;PdY3>h#Vv#5LtBv-|b*Drmmn%~`db ki`#dezWVTd>+LCapKla^USiQs6sL%R1AwtEY4grl2cS(z2Z|Bh`GA9UQ+d;d-I?X$# zOG6pw7&!}L&K88Z`7Fln24TP<-5|2W9|s>q5O|h&Uu(iBB)v&4a3lkf9mMFax~+pxrAr#j75P@@R}np~1xh>AcrWTcgJ zL%#`BE-SFCs8E82sTEA9g5e`_Yl-KZEqifji%XW+V=OimrQh$%{en!Bu7V81P@t-) zs>Bgex)U*+Nl`jG(qNO+O@f#OGy=Is?9eS{iQLoU5W=|GJW(8_!$k3vDH)CxBts<( z^SB1+l(ooTH%>*T?VXq?Et1l$#O3wyXGdh7yR!}DK<gL1cN-A!6`nJi^wl}JYa-%T`J)sk}z~M396dz7#>m`R1$}L z?|<{BaHo{KS^jCB(Gl;+e0wqqTsRpf67dO2_^50LKfm!YyVbBO?d*&5`{-zXOgeXY z?D@yn=U-mgd$4eEva`N-c)0N9#mx85``uU1E=?~@9^9K;l&0T5hQc@$x(_FAyp#9y P-+<7luh?&^>regw0Lez% literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/drawable-xhdpi/bg_contextmenu_shadow.9.png b/OsmAndCore-sample/res/drawable-xhdpi/bg_contextmenu_shadow.9.png new file mode 100644 index 0000000000000000000000000000000000000000..b40ce9b5b7829e4bd1902298790da897e0318074 GIT binary patch literal 1114 zcmbVLO=#3W6pj`|#iA&pR)m-y{A)Hpn`Aekv2-_EyWrNcU9f_Jv&p0zw#md~>Za>K zDPAggPz3*aQ4e}5h~Pz05ky2pJ^2Ivf+8r0AReTklkINxP&^n&X5Qp|-+S}k`z8km zcC;_;SV~b;d%oW&lC@6W6^j>&g!-buiiQEK;eG-xD6EsD2_e4H0s}R#=IO2FZ^YzAUhITBS*)13Nf}e#I zr@tP+q543{tXECdVtTgI-H}EJT!;Z3xuagFMLN^q)yO_R<`}x+f~z_+o78Y&kj|n2 z(sDv!Ok_-M<6HjwBmx zSKyGQfKdaPV=nY?-q0EHCt*331{5gU>9owIWm92gMN(N63JPmmqOFQ$MHOwK#WNqC zPYD^pNGWMU=oN&V+?$g6vXYcbW>Qj8$t7FZycc5NnXnbxA+eiS`JY%V8$f_jP(o<5 zH3fqegi%;QKAp`rx=wH2?RXZdg`*6t}e%ZY;zwhD@{`KhRq2m|!yx*gJ=z6#RzD3EtIj|CaqiRl4f?c~S=BL>>A6BnXO2!^zS_R} vR{t^iDW}!IPpZ+4li6r9qC$I`TlLP8mm2@8!)Cb`zL+_A?0di literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/drawable-xhdpi/ic_action_remove_dark.png b/OsmAndCore-sample/res/drawable-xhdpi/ic_action_remove_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7f2de6194e61adef02f9dbf880ac10973bd43423 GIT binary patch literal 1281 zcmbVMU2NM_6n0oQm9CpQsG#j0=DDD?(j42V?Zj3>*ThMi(UdNYXx0aqe{LG9wH<7C zaZ8cH5Xz=LbQ4TSLqL~;5R6UR!+2<^TET>d*!QAx%P?=o_8(0M}_!c&PS( zCHvlU@A=Npch2#t{=V*AbuD!Wg6xX-2uZk-?pwP9eg_|WP=rgf9ZlNRkYJ~i6Xg+LqY@Za^$_;w z{33>`N(dWd5@aG50a>+Y!UO{oeJOcjMCKH%^Eou=@X&w;Y!P*|QQhL55LUL!!@YY< zU}#yz9tmL^L8TM@Xv8o9%6M5^CMg>Ab6$#J{ha?G>Vq;t1_&RClN`@<@T3o|JQ(z5 zDj7a0#45g^6vDE$o#P22pU->q9bUs6CMb^M2+~LRd^ps=t#REJ9bC6ss}=-c$)=jK zRYONzi=t$V*&z%@x{-pGOC&Z8>sEy*NEzXXIfC+%gr>Q9m9;H93H}XZOKmGPo&!V@ zSjLzs!+K;|t6<38qaC@5FdF^^Q-wtlM+HM3(|~Trg%AdByo##uG@~ez#Im@LWoeuv zX%6Q&#fP(i0*oxtAR{SNJ6qwyG#d#BEEk}n5sHe^;TRo_MkC>vpJ8HM{%92&*DYJr zWl;64Lf;i^;E`B9Vgk`N%#>k_R=c1-YuJXBHF9VqQm#7MHmK@~k+<62GHqln08>2< zl$dE~XqjhT-695sC0R<5Xq@6$30Gtqk{~i19uOr!aWvV%W*Dr3SN<=51PqFBo8>>v zQ$2zm>25bi0ScSL1avq-CLEQzqw$Xs#Irvxbfui1?%nL#{RY~wz5o7+hhtyNj{f19 zZ$I1k%o%F(>AEYs7k~H$so%Tv2Br*u_qyj$>!)As z^UO4yUhDQ;txd1DEFGz#C-Fm5g<>~yc+cBwZA(NA9(>|-~cK0;CEOC3$zXmvR&%L#8F9vF69=ugT=Q{Vr?wow;Kzmzh znQAzdHR}az=*{AOdTRXo&zYUSHW!?m^cglYa_!pO>QKY`S1$Bg6N&ZJg@upk!bW~G c;==YO1fP8G@Yz-4L-(f?kM;?d!pBbh1G#Uo!vFvP literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/drawable-xhdpi/map_bt_round_1_shadow.png b/OsmAndCore-sample/res/drawable-xhdpi/map_bt_round_1_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..2459bd66ee898896103b7be1f4cf06d5eacd302f GIT binary patch literal 3377 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 literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/drawable-xhdpi/map_compass_niu.png b/OsmAndCore-sample/res/drawable-xhdpi/map_compass_niu.png new file mode 100644 index 0000000000000000000000000000000000000000..05f8351357ebd657d2ecf06776ffceb57782ccd5 GIT binary patch literal 1421 zcmbVMeM}o=7(ZyFj?XTlfvN0G$FePWy^qqbqm`Dnj1r0+G=j@wxa+;89kf@jM_Za0 z=*WN>w&{pVwh%-Y6EsYt!D!;*$ZVD{$7GY3WzndZ7(#{!bMqrOd0lQY_h9t<-vlXBfIgZ8Oo zLJ8JYq&AasBdBJl3s?ma0*y+Gdq}Dr=nN`KqtzL7&jA|A1gR%z5+@CeM$M2k*nE`8 zo5*{a23z%}FC>|iK1m8O1QCr!RZ+D{5L*e#U@#CQP0%!sH1Kd&P-0_vFuW&i!3M(~ z(I1lhLJ*`ZvYgN5^}HAIY8^?Y?QDm)>n&Dm6-`?876V1u%k@?YQAp8Ms3sOW ztxIDa!LY;zJuvOtk9==nsp>~!8LJ3cNf6zF(4OuBmrsy{uulj9t98BVV1JW8$P3Z% zfmE3`vbI6dAAx+eCZ-1qkL1En zGCy2#tzcz}uPn7A-ncH-U8A(lwXnG z_447;y+`9fK7j8S>*zgO*Ly=&J9DeAXeK8~_fE-1OR1d0cNDTe-dd2Kl$#w_&e=>O z=3%nP2p&tC_=QCoH@Hn>V!&B5d#`)c)RTL=C-&sT+q*t`g|mYZ-E75u%S_*Qua&$pe>_swKQ5m? zyL)Ug@x9M^*I=ENee7FRfEy*XCG(kci_I&&H(kq<-M)&o;xk1R_&pg;FPDK+S#y_b zxNEa_kKepd$Y4p_$Fb&NjoXN2PPuv8>wH*5gFMjYp literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/drawable-xhdpi/map_zoom_in.png b/OsmAndCore-sample/res/drawable-xhdpi/map_zoom_in.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb0b1a9cccd5b3ff546f4b1585856ed321c388e GIT binary patch literal 1108 zcmbVLO=#0l9FHG}P9{70ff_Ox3QO{mexwPjvu)a~VCU!xEdxJZlb1DY$&1O`n(nBG z3M!&_9bN=4dYA|@L3b5IJh+1eMZ}{ZhzA7^zI5&8VeDWa@9Y2j{lEV=CMU-F`wsUp z4AWm6*UNMV(Z6>OU8_5PU!&V0lCO~|Y>_7P5tA`-9kE3R&Y&`aX6w>xG{P{u7VJum z)JkVG13LnYFhb~fl+7?BqoD_lSwz@6nz7w9_x;5yjM{Gh!@&=IN ztfC51BB`j#Fe}r$2vVX9c%W*DmprgR>ZI9U4Wh0HSj^|05qn@sZ;CQ9dhGIA9CW@v^ z4524V0uUW1imQVTNEvOqu_ZdFv^*r1QGn-tgVw_u?2&2iwl@?3sW;kL-=;-@b2>KW z9psXtp5~}TFl|$lt-68g7UT^{LA)x(6+Q)2z*|x(Wm?FLDFF2JY{idd3VB`6e;rb?JhUFEmzC=2omg9FrMpm!DIsy95k@U z=5n2?vnQ&yYvN{bGAh%0)H?F*1!NX{?693YYxWjCq~eklH)+5UR1`i5;}Q=+J;4Jx zq107VlIv2E>+;S2&7Vk}5~F7Mr+Io$v?HVA#wgIs#xNn5PLNMWWo<{SO~;H@E>j8H z-`Y~&Dm$?IwD|SP%b!b+oI91wzM-cNuY#~TeDLwJ<>2;mi~00cJ@$Tj=3`o@zIh&x z-5TgjYG+v;JMy7)Z+h+B($LL;)h|b{=VQmuZ;Bb_bNlX}`^+!(!G6HNAN?0r4y>Gu Nzj6f0iqL5B386_ZS|KiPz?Wp}e{7u>aM7rM}klVs8jZ8B*x?WR2{ zqM{V>r{JXsih>70FCHqiH|fE%;ze&>L{B|<5S(mxR}ZBJ1DSd6&HLW}yFF9CG&*v6 zgyXo;>a@{dH%$KH$JjYH^y?- z*7~BQ+5FT+Fd6I2fQKmpvA5($dYtFGc6CN4Vu=S`6}p(`4}xmdWG@(@o^Mkc=#tdwbi__dB;kT2 zYnmoOMN$-jX$aApPf;xR(Rkm2fg>w)1L_hVBo>iLR%o7QkshSr1-071upjjb#Y!f{ zD3D|kN}iYG)zyw@1OE-7GSA?BeD`&tRK#JAIxfZw4+3kMWbH{UDgz|WDsk` z!#=GVd7iz9wrlH(V_MjBkYLFw7Bo4n3OT4j!I5)0+rf59g|KhuFnp>|DH}!+8rfo5 zmdoj4u?V$nAyY7vidM|YeQec_DDo}b_w6#@2iQX8NUUB8F`^`F60+2vf|)j1BDllfSOxR}|6tY#het+x?TeJD9QE0}W zzkhl?x(iN}3wPfF{`_WQjL%W-!n2glo?t>5<^?`%!HJpb<0 k?wuR>u4efgM(s^z-zs(AIqyZzuWF1^X zpybeRLlUG0ZEoUUh;@l-@OM?DH_u;hTO)(F`+muo*&o3K394lU|TvSH8c^ z0?)~?<7!DPg*jCB3Ud)UI#;gRb5pkAum^|1P}8Iad_*8<`qM#dHZyG7u1WXFvA}}1 z3Yp5VYe7wv#y}272&lZq*`lO?w82ZNmNwGw0GY~ys0*^liH51BOi>1%ho#;k$2BWf zzT=BZ8MaPHXbM83(cl{?9!HacWEh4Z%7QF&RD+9K0f9{}hzGhBEEL<37ZMK#Ah8H* zc!p$H8tGaJepo848xGdL-_8>jpHJAHS5HjbS7 z;pEw!C%*ams~aEm|5^Wc|KCr;Tbl>}gPFH}`PeAPOY@f(?k-+^)U)g9p2zb8QHtJi zpY~t*Yy8r!!L3@)uK72goap_0{!n@K+k3xld$sk+qHq)3i-*hqT;~e!y}$b9spBil z7q>o@1x;FCR!vAWo BdxQW0 literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/drawable-xxhdpi/ic_action_remove_dark.png b/OsmAndCore-sample/res/drawable-xxhdpi/ic_action_remove_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..ea01fe05e204f00fed40b5be7a020bf523be0e1c GIT binary patch literal 1468 zcmbVMeM}o=7(cK~#IP+yhFi!yk8KX)^{(x;^iB%&ld@Tcd~Bd|a_zmPmvX)K?w|$# z7>sOF78GXok%)6c$g;S(IX7oA@r$o8VF8q>h&qs&MTLzB6QU+wfuetq{oy6|zVGwi z^Lsvi&-2_XdAZr~aU0?w2#U|KTk_@I9)4q2$!pQ%``PlgUa}TT1-x4d(gJ{t4DSSR z4o8=Pd_Xf*fnJafK@U{2g~d{_;~C1ub4og_qYQC=84W?{nIS*z@&XBVf-=@;K<-@q z1c6z`fb7ybaEIRvJgmK100q^#g|2F^i)4_@3^+YR$p$ze(Qt?>_lZ=Jw8U7A!z? z39MgYc^@3MNIUro$$-d_E~dcw9gbzgK5>aCnKCRy`!SUg$2cyW*Mhbv<%562SW#On ztnvdaABcQ~;F9a%PKkhJ?(Xj>tSCoA?GRYGD0I1ncU5q}C*@cSi2Oy#una|L8OG_< z=}@&!N1!B5kSIwqYE%bQKe0%^IzmH0$*$t68P868bc&)~GRRNgHlb z6Qm`A&GCs6?Q?;MZ&vobgiX6ImNE-~mUy9%=gT8qkmungUi9#O*lb>?I=pok>tpz! zm>MqAV%8QQu$6$Z2|Ncc@Jz8Q#K7oqor-Z1sEX7%QN~5cB+yzC)zeO(A_-ihb8C?$ zJoA6~!{nf_aI^fUc_LSGM~08fqaX{*!vuWt1PSt}R3u!OgrKO=9E-6qH1gYb2H|sj zZA__u?9Z+PNYVA9-7Nk`ovrB!XZQZS_@4GFaeUba`W8Kc( z-sUXRhMyGMTa)#k*3@K8YrA)#itcBlyhE;jHfc|$=IfJVU;f%5OjI8}dZIad=B4wT z_E{o9(GwTjpy+r{VS3ycI9n^Ed=?O(Tc(zq6VVrKEn^dki>8+GiB%(qEImf3y?!G4 z!I(>lz46x@vu{oxqhFkP{TG`!_}aaI7-*PZ|NE=QiG}C#2+q8PO|?HxNYBjxh~b-HhXQ%-Zgt|(B3xoY16jOT4eG~ zCVMI)z3wa3j^ncrAIY$6_McN%Jyx;J^Tu%Hcr$XAzkGMo_d}z*|Eh0j8qgQmx9D#) zbe!5L*3Wl6dEqoQ80`CE>ioJhfw>!dt!o==9$8?2u^MsVlDs^ZSPHdmtXxz6^fyfS Of0|>>wY+O8-S-buG87yD literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/drawable-xxhdpi/map_bt_round_1_shadow.png b/OsmAndCore-sample/res/drawable-xxhdpi/map_bt_round_1_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..04833b06d290450a2829cef486561832a514d9e9 GIT binary patch literal 4861 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 literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/drawable-xxhdpi/map_compass_niu.png b/OsmAndCore-sample/res/drawable-xxhdpi/map_compass_niu.png new file mode 100644 index 0000000000000000000000000000000000000000..1e039c7f47d6fd0c5089c08b52ed4fa115c9ac27 GIT binary patch literal 1655 zcmbVNX;2eq7!GOxqo|{Z;Iy(Xj`bkf&7F+|8aJb zBZp4af*PcZIHF_GQLIw6t&Rs(R634!R4f)-#Q`a$f`oR%Vf(}BkM4ZC-}OH4`@Gle zwq*%%LA>ca4u=z@kJlR6Io|gM`m^8UmnY-cDU8vjFo~3zaiBE8QR9?}0Q4l9K^O@X z&->&W5yjz*&b1_^Fe!#5N{k`}s82@VByB93!--nxw4qoQ!2l*A!(vr|9p^59fCX29 zE2Re5VABwpmUtIUB)SrkFjp3a;NZe&Aj+v^6_5mj0!}j9YF9c{;GkY5yY?MJATTJx zWU0U*QYnUIfQF(8Kq`>&F<2-8h}%3)L>%XG*E(q=HcRcy5n2Z{|DGNw)+Rhk>e`vf@+MbkW zBOoJTr*deF&4)Q+1kA?nzYX~WSvJb0w1rIynysa<9FnjydaVj%Zv?mnSBlIgj4+u| zJ|>hCd_*Xb^A#`x^UXqq0yh)5SPsJ@dftWC#>nI%g&Ni<)QC{1lOP&IipX_Rp;{6v zg@wWqtlny8P%B1^*tW2?hpD&HyXi}Jpng+KDOh7$-dpO) z*KdEbRJ&cKAG@Mp!>OB#QVq9msMJNz8uwScdW1a7YdK@P*?9If*4AK;w$2V5b$M@M zEH_xIW=C~-*Q^BxDRP_Z8Uc@cq&r(P;N8mbiuOKiiGDrdi;H0RSHI+qI=#W$G9jy} zt0Lg=U%hYqGb=rxp57QYe<#Ul^_01Hy8?4->3*R8D-H7BiU zrY$Sz-bA10aK2mM?itgk3KK2SZ}uoVflCA78`CTylJRRNw-=NT?D)Q{8|d7zC{L8?52TGs@twcwq~8!}2#OtU_?--lZLt$5t$^ z?f$6g(DAr&TXOe>gmrnd2993uIC177vHzP30S(5sYWzstl=OogP*L5R)?Jmyrl0>K zt)#i?WXs{ohWifn=H`eFt{#7m?RJ0r;&uj4^vn^j>RMCsbX ztlCrJ>fY{d+?RNJegEXu_1`s?E+}-*862U!LjdoP=g#$TKYz}u1E@4%ofq`|3iP@J J?eUm&_uo!6d}jav literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/drawable-xxhdpi/map_zoom_in.png b/OsmAndCore-sample/res/drawable-xxhdpi/map_zoom_in.png new file mode 100644 index 0000000000000000000000000000000000000000..363037676d3869f88ef27172521d578f89211318 GIT binary patch literal 1156 zcmbVMJ8aWH7&Z_=K?K1F2y`;4c&Lu=94C%VL)*kH4UkeoO3Q-k*q6qn_8I$1(!x-c z1r}gJY)HU>7?27=Ac54Wh?kf^LWmW?0D^^yg>xRIL)8IGzVmxx zaU2)T4eAB94~B2YdbW=IcyyR;+iCw8JxR*6X84%vvq%YpoMTMj0yeDabFXkW$E`bW z7su#W{+MPGCuW2?vAW|iG{<%K)IGzjVhT!l!gkaA&u0rfu&p#dn#jYvm&Fx(aK^_c zXNHRAOx08^zUL6=u4|0I!PEeCXVML{dYW(WYV12a7J1N6q180sbZRU=46?+>AQ4Ln zCPXq&)EG)66;>;|nw zv6P8*!xK>qijEV;)zA)T0snJjMeU$C?P0Ni12W~CtRCe(Z7|E->V`r^=8bmTw^>n) zNu8Ke4t8lyPxI_1X4#e|l}jcrl?}l}3Kmo(D?$pYP$;8R$|_?ku0Yu4SqUG9s87-* zT~B8E5$cySa$h1NAz95LMb0FpHa6!5)NoDQwrw-pEo^pGtd{k$L5W`^WU}1_!xchF zP$3@3W*b!p`$lcoBDG+DSf*ywI`-}J*c$MO0~&eO>=k@S$*3$_EMR0PijXv9Bp9%i z5TKM$N~(pV5=!zdy!F5N6PZ(D*euJMr+vgaGW=W`1tu&F6L#4I`D|2#&bilY%f>DUUIYws+#aVubJC|>7wCCw>Iy*M>7mFx?$HF zq*1-5n%GI{kxnXfJc?$RnYqx@%?={KKrP$Nv-@w}vcR_T>}sYeRJ{^v+lyO1TG?8v zn_C@IvDmp;FcYejz(GU@q0@B(HO#YpUX`AsYn}yt71GJG1E(6*Wl+LC0-02nGX*FC zSxLc6R#xOIK%_D+ggZ^$E#KkiQQnBD4H@p z)IA=i1m1C?xcb@wsiD7a9H|}DH$BAHP=MEclh&g-9fN7^jyDu3Qg77jzDSt@457+Y}zqPr%FZQIoL5Gx#uRZBk73HIw4cjGQtZexOjHugZN z)UP_YxN5r=?gf{kG7X~EkZ*4wYu?8W=;v9rkMJQU!KP%9hAm}Q4}>wojdQ>XZ-S^jCB_=2`T z_i~Z}Ne2G9wOg5*yx=jJFQ2|Xo_>Az+h>hQo&s05nZ(HX{yIj*#7MMK@#OI7p!;2V z_u<9tv!|E4yJtqnk{{6ndF|X#D{*>2FqYh{rT5 J+VkSt{XZd0RfPZm literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/drawable/btn_circle.xml b/OsmAndCore-sample/res/drawable/btn_circle.xml new file mode 100644 index 0000000000..96603af448 --- /dev/null +++ b/OsmAndCore-sample/res/drawable/btn_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/OsmAndCore-sample/res/drawable/btn_circle_n.xml b/OsmAndCore-sample/res/drawable/btn_circle_n.xml new file mode 100644 index 0000000000..dfbe7a2326 --- /dev/null +++ b/OsmAndCore-sample/res/drawable/btn_circle_n.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAndCore-sample/res/drawable/btn_circle_p.xml b/OsmAndCore-sample/res/drawable/btn_circle_p.xml new file mode 100644 index 0000000000..9574b2cbd5 --- /dev/null +++ b/OsmAndCore-sample/res/drawable/btn_circle_p.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAndCore-sample/res/layout/activity_main.xml b/OsmAndCore-sample/res/layout/activity_main.xml new file mode 100755 index 0000000000..5fb4343512 --- /dev/null +++ b/OsmAndCore-sample/res/layout/activity_main.xml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OsmAndCore-sample/res/layout/search_list_item.xml b/OsmAndCore-sample/res/layout/search_list_item.xml new file mode 100644 index 0000000000..81d63628f9 --- /dev/null +++ b/OsmAndCore-sample/res/layout/search_list_item.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAndCore-sample/res/mipmap-hdpi/sample_app.png b/OsmAndCore-sample/res/mipmap-hdpi/sample_app.png new file mode 100755 index 0000000000000000000000000000000000000000..80663eef1501b59dc02a14c08ce2438bfdd15dbc GIT binary patch literal 8157 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 OT}??#u}0oH{Qm$qT^05K literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/mipmap-mdpi/sample_app.png b/OsmAndCore-sample/res/mipmap-mdpi/sample_app.png new file mode 100755 index 0000000000000000000000000000000000000000..0d1df6420265e70a6fa727352cbf9a3ba17e2704 GIT binary patch literal 4886 zcmbVQXE>Yv+qTuJO>K>p(ukOe+G3@sRim|nm?dcv#4KvhR@G{aqEw9ds6ATR zqBcd zvNSLf)I?)Zf^w4bAV&xUBB%h9gvdc+37&Do02@-URi(GXA4A&dd*k0-K<4Xm70Jc|M$l{(#S8_un1;Hau6OcmwNpo)qLAINH(M z6Xk{1gDV5hPb8h(oD@+Ilr&1(83}TbmW6?wk+LWd5`~fi$tXxGI6J_cP%=)?KRo{l zFAax6Alfi3Z8<0m0@0F#YN^9Dw57B)<<+HSpmMT*uzFrNJkrY%^~bl{x$l3l@c)Wc z)Wo8Ycr?}wjlT1z3XELQcr?xxjS*j-U(#E1a z1^C=4r9oQ;7`8!bXe9J(GC5z9MJi##HQ&` zJ-hCVvfG)=nA|4Kd%3;7&~{jM;iIeT!N=rS=b^z()^9UQ@tqa-5M+UC&70|8W6<0D zF3PbdA+IiMJYr%M?HH#b(@4ay`3py`w`LJ=vpNX4X9ZaHO`*rhO8|f1O31zl`A-+U z5XQ!k#)8eFLz8>T;)w4T6V#`fu0J5sH5Cv}2)LCTjQ^T3ptdXHg8V~5;qlr4W7F=F z=7*|uWVHuzgimwT_vo&dbb;9fFOiu5I6jGDgb%<__7i>?S`KFa4&1FHn3mz`K__)1 zb^NnaS26*W(5jlAjm+xakx<0&5rHXM>}M&Q?5@fdQ?T+04_*Dlg6X%uoU_fMT_rlF zL?^8CS@T)$n$co;sPf$Xu&X`8Ss~*$f=M6rKS~M+4P~w>s|C*H&9)WgfVwol1`qO165LdO ziG+_nuV&Bjwe)`GMyW|U^M;`atc}@sUo7{MAXU#wlIKg@RG4nqRWh=rr@sLb->7PF z9q$=Zjgk)_cu9ul1m--^boMFT*`c%inrWY&Vc{ebp64V`AH1H>kR~54KrK$*GX7d5 zoL0b;Mj>%eVfxF9Xy$$lHD7ilXmC+4ou9L>EEC?mo1~a6!g4VzRi8aL*lCzlk9J|A zo{2P;I_2?4`@m(zTa#(iTTF9IeYw3qiF#Yx-=@|zZUi#Om)gaZt+HcQtYp#jbKin* zK6WAX=pV0)Np44tc%E)Y@fzBZ`3yIHJGuOgK}JXRvKkwXE2)m9iEcy#!mg_ z+Ww*=WN0*)lq>P^%-g0Dpw+QK;Pxwi_1hjoAFf}o#IDX=5@?7c>7g(hh()q%uE}S$ zUM)|IuFu@2;0i`B(A+K%bHxY)oEcVswgh2#{*v+wui9N{YCsEmKOMU!0+KPAg6RD@MFsAGbxG=AVOsE2z^hP%- z{*ee}uVA_Pl2&1s^VFnUyNs%7dTPSlDs`WJ(;b?q<^W=1T}(*cqE4WmaY||KWH%X$ zlU_K}ik!u@8q6sj!ghm!vAwJ3;rA0SExY4Ce50m*oTRebi>KV`(8_;JXBHM z6Af9f7VK0OdTo6lL`)s3^xL z?tRrXddIr0EYub{X^Z7!SSYuhXp!&AR6Rc8^!>6S(44G$d`QuBl>WBrmFxWGnBCp! z@$bBnbwUw^&t(cm^CD<~vHHb`aKpNtbP7W$@0QK#*wSHx=wAKH4|SbdT{@&wTE3#3 z)wA_2R~2JV$D2y!(FyJcGj&;Xh4b4MW^uK!*L6D@6}XB$sqI^8slty!-iP$ka#(B) z+Oy8fgRJVli~g`9?tz0d43x%w*)OI=*$x@ctZPBNSss~C2khIONjwI1(Q;xBRaPGc zN2NX|9lz7mKv*bKf68onpUsFWG~Q@Y+M32)G6=z)6j_tCcDO2F2mkglX&S>hGk^P4 z?#puK$JbXL>JwcVjF3gxfS6TJwkzl%v@(brkBF;|cz*q(epv^ObUlcz2i*D{->(PV zE*y%dLs{UI8*|5T`KyY0zALU5Eo@*YiVmN~2x_e_Y;DP2VGw0- z_!(p|q%e_y%URRWDDSs>UdoT)06yzF3_E39o)L#|F+fUsCH-hwrLGEgi-yu;dbs8h z)|GUp-E(j7PdZy_BEPN&J=_{2uokq89Nc5#8qS-HN4tcmCs!tzu zv2~O-{G<5Ztq>kf2FYgz_xOHHAP*=%M0*ZA%X^vf_PKn?u!OF?`yICHtGDmUna9cx z;5pt5S#S7%iC80RXh+W+!C}0HoOHj!66g(pqG*TX6Yj<~mq(}b4Tb*LRl56Ps;MUT3;Y&uUgDYW%93ScH-!l@Kg?DiH3=<&Yq=WA zbhw^Syvp3>0vZ^{+V#n(_HZvp#CQ`+C;QhHgd z++Y} z`-SE8b?w~&pLVc8wc^yqJ)s2Wfk-nGxO`d|4-G5u!=%T4>!&wdv6BN+mEFv)IKwz82L`n(5rX1VG-%C~5 zmnz}oV8Ya(De~ikWwRHbZSgU;5960S8?)B#-W^ncR`Wp(ssejHRXG<-=!s| z%d5%R`dYxKm9>zzo@ol1#k6J^sw%xcBt4 zn~XvOP?u|?M00Qs>t!(1D?^^$uhwx~bjSDE`jm2d3U!x#O*;SO)oXc_J&9oyEbtKA zy9XLk2hjdb}%V7Xg ziv#W*^h8{uJ2-Ea4X%=i2!<6#bx!YslhsV(TO^-^0svH>Q;A;|xdWw6_@*bST|4AP zC|~IGKd=uUcF`t&iCTV(b=v#TZ{5)mx=p*h_;Mq7yK(u;CtBk~)RIEVa!L^0?H2z6 zB9J$g%GPW)p14xW@pO(~XMT3uwJt{igpAIn>RaePx=QwWal)N)?p{*M#G;Mom3{?J zow22{io-4Wju%A+B059SSSOR zLUv2hg}~(cGT}slLbyo-t$eG&m5;3jcWuNBv7pf%XzOFeyR@LS?9KST@2x*hJ?`-5 zn^`qg(J_3Wx)m>x&aTw3goE{&EA31_HbY~xDEFK$c=&EaPs zo@S+(su&cykWyCYQar-KYqgn{;!x@>FfXn;ze1vYd#@@0kl|rvDv>Hb6*1SWOjMN9 z&MPA?3l#fRj*x$KxvGuz;FYP8`4DCv=2kXHIda@@xd+lAp9x9MW76seRndZOrx<9HACenSw}XP~zj1v@Y1XMa=vt z!JNsRFRj$?lNyAQ8xy*5xS|Fo_|^`7qb|uHLla$X$IJ z7N{anqFqe^c&MA&5;K;qwv^4aWyLOZLPqgYUzuVG=r-{5r7+2=UOtP*Ravs0S_9t2 z)TpR>SlyUM<`||(tvEyb`xo^A=p_H%yV8au)1dUdXDzBe*C`YE*VoFy>trJq!j$--cMpRtoV zUmUJ)5{bm+!NEb@qu`xxv7EImO403NxZ$@E&{)ROs8!BQHuJf@w1~DDOtY{aJqhLh zB{#?TU78s9>!P9}g+||E0Vrl#!(T&Ax!9YmhQw&K#*4J{_WJkKyUyQo6zI5)r@T8l zEJ;bKTf0)b+37CyZSm=VNT{kqf>zp(p4;l)^JQPpP569PoWq{3n%Z)9L5hTx;YSc- ThX~*AKUI2KhVXI?`>_83iapjc literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/mipmap-xhdpi/sample_app.png b/OsmAndCore-sample/res/mipmap-xhdpi/sample_app.png new file mode 100755 index 0000000000000000000000000000000000000000..614165ae1895ba02266ab4cdd573029299643106 GIT binary patch literal 11234 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 Z1dqx%f8c{p@js_-<)u}mY9-9V{tq~?5TgJ9 literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/mipmap-xxhdpi/sample_app.png b/OsmAndCore-sample/res/mipmap-xxhdpi/sample_app.png new file mode 100755 index 0000000000000000000000000000000000000000..21e771e448de992143ad030e825da2dba36ee3bd GIT binary patch literal 21401 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 JPDHLkV1k|CZy5jp literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/mipmap-xxxhdpi/sample_app.png b/OsmAndCore-sample/res/mipmap-xxxhdpi/sample_app.png new file mode 100755 index 0000000000000000000000000000000000000000..20e83f11d8101d19e101285d44ce7a811ba13ff0 GIT binary patch literal 42438 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 Rp?&#WvXV*?)ndkh{{vurn?nEq literal 0 HcmV?d00001 diff --git a/OsmAndCore-sample/res/values-w820dp/dimens.xml b/OsmAndCore-sample/res/values-w820dp/dimens.xml new file mode 100644 index 0000000000..63fc816444 --- /dev/null +++ b/OsmAndCore-sample/res/values-w820dp/dimens.xml @@ -0,0 +1,6 @@ + + + 64dp + diff --git a/OsmAndCore-sample/res/values/colors.xml b/OsmAndCore-sample/res/values/colors.xml new file mode 100644 index 0000000000..695c2bbee3 --- /dev/null +++ b/OsmAndCore-sample/res/values/colors.xml @@ -0,0 +1,17 @@ + + + #ff8f00 + #e68200 + #FF4081 + + #F0F0F0 + #EAEAEA + #FFF + #727272 + #2f7af5 + + #EAEAEA + #FFF + #000 + + diff --git a/OsmAndCore-sample/res/values/dimens.xml b/OsmAndCore-sample/res/values/dimens.xml new file mode 100644 index 0000000000..91dec05887 --- /dev/null +++ b/OsmAndCore-sample/res/values/dimens.xml @@ -0,0 +1,6 @@ + + + 16dp + 16dp + 16dp + diff --git a/OsmAndCore-sample/res/values/strings.xml b/OsmAndCore-sample/res/values/strings.xml new file mode 100644 index 0000000000..0586d71b0e --- /dev/null +++ b/OsmAndCore-sample/res/values/strings.xml @@ -0,0 +1,10 @@ + + + OsmAnd Core API sample 1 for Android OS + OsmAnd Core Sample 1 + Zoom in + Zoom out + Azimuth to North + Type and Search + Close + diff --git a/OsmAndCore-sample/res/values/styles.xml b/OsmAndCore-sample/res/values/styles.xml new file mode 100644 index 0000000000..26dd38c319 --- /dev/null +++ b/OsmAndCore-sample/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + diff --git a/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/MainActivity.java b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/MainActivity.java new file mode 100644 index 0000000000..a845426429 --- /dev/null +++ b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/MainActivity.java @@ -0,0 +1,546 @@ +package net.osmand.core.samples.android.sample1; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; +import android.graphics.PointF; +import android.os.Bundle; +import android.os.Environment; +import android.support.v4.view.ViewCompat; +import android.support.v4.view.ViewPropertyAnimatorListener; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.GestureDetector; +import android.view.GestureDetector.SimpleOnGestureListener; +import android.view.MotionEvent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.ImageButton; +import android.widget.ListView; +import android.widget.TextView; + +import net.osmand.core.android.AtlasMapRendererView; +import net.osmand.core.android.CoreResourcesFromAndroidAssets; +import net.osmand.core.android.NativeCore; +import net.osmand.core.jni.AreaI; +import net.osmand.core.jni.IMapLayerProvider; +import net.osmand.core.jni.IMapStylesCollection; +import net.osmand.core.jni.LatLon; +import net.osmand.core.jni.LogSeverityLevel; +import net.osmand.core.jni.Logger; +import net.osmand.core.jni.MapObjectsSymbolsProvider; +import net.osmand.core.jni.MapPresentationEnvironment; +import net.osmand.core.jni.MapPrimitivesProvider; +import net.osmand.core.jni.MapPrimitiviser; +import net.osmand.core.jni.MapRasterLayerProvider_Software; +import net.osmand.core.jni.MapStylesCollection; +import net.osmand.core.jni.ObfMapObjectsProvider; +import net.osmand.core.jni.ObfsCollection; +import net.osmand.core.jni.PointI; +import net.osmand.core.jni.QIODeviceLogSink; +import net.osmand.core.jni.ResolvedMapStyle; +import net.osmand.core.jni.Utilities; +import net.osmand.core.samples.android.sample1.MultiTouchSupport.MultiTouchZoomListener; +import net.osmand.core.samples.android.sample1.SearchAPI.SearchAPICallback; +import net.osmand.core.samples.android.sample1.SearchAPI.SearchItem; +import net.osmand.core.samples.android.sample1.SearchUIHelper.SearchListAdapter; +import net.osmand.core.samples.android.sample1.SearchUIHelper.SearchRow; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +public class MainActivity extends Activity { + private static final String TAG = "OsmAndCoreSample"; + + private float displayDensityFactor; + private int referenceTileSize; + private int rasterTileSize; + private IMapStylesCollection mapStylesCollection; + private ResolvedMapStyle mapStyle; + private ObfsCollection obfsCollection; + private MapPresentationEnvironment mapPresentationEnvironment; + private MapPrimitiviser mapPrimitiviser; + private ObfMapObjectsProvider obfMapObjectsProvider; + private MapPrimitivesProvider mapPrimitivesProvider; + private MapObjectsSymbolsProvider mapObjectsSymbolsProvider; + private IMapLayerProvider mapLayerProvider0; + private IMapLayerProvider mapLayerProvider1; + private QIODeviceLogSink fileLogSink; + + private AtlasMapRendererView mapView; + private TextView textZoom; + private ImageButton azimuthNorthButton; + + private GestureDetector gestureDetector; + private PointI target31; + private float zoom; + private float azimuth; + private float elevationAngle; + private MultiTouchSupport multiTouchSupport; + + private SearchAPI searchAPI; + private ListView searchListView; + private SearchListAdapter adapter; + private final static int MAX_SEARCH_RESULTS = 50; + + // Germany + private final static float INIT_LAT = 49.353953f; + private final static float INIT_LON = 11.214384f; + // Kyiv + //private final static float INIT_LAT = 50.450117f; + //private final static float INIT_LON = 30.524142f; + private final static float INIT_ZOOM = 6.0f; + private final static float INIT_AZIMUTH = 0.0f; + private final static float INIT_ELEVATION_ANGLE = 90.0f; + private final static int MIN_ZOOM_LEVEL = 2; + private final static int MAX_ZOOM_LEVEL = 22; + + private static final String PREF_MAP_CENTER_LAT = "MAP_CENTER_LAT"; + private static final String PREF_MAP_CENTER_LON = "MAP_CENTER_LON"; + private static final String PREF_MAP_AZIMUTH = "MAP_AZIMUTH"; + private static final String PREF_MAP_ZOOM = "MAP_ZOOM"; + private static final String PREF_MAP_ELEVATION_ANGLE = "MAP_ELEVATION_ANGLE"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + gestureDetector = new GestureDetector(this, new MapViewOnGestureListener()); + multiTouchSupport = new MultiTouchSupport(this, new MapViewMultiTouchZoomListener()); + + long startTime = System.currentTimeMillis(); + + // Initialize native core prior (if needed) + if (NativeCore.isAvailable() && !NativeCore.isLoaded()) + NativeCore.load(CoreResourcesFromAndroidAssets.loadFromCurrentApplication(this)); + + Logger.get().setSeverityLevelThreshold(LogSeverityLevel.Debug); + + // Inflate views + setContentView(R.layout.activity_main); + + // Get map view + mapView = (AtlasMapRendererView) findViewById(R.id.mapRendererView); + + textZoom = (TextView) findViewById(R.id.text_zoom); + azimuthNorthButton = (ImageButton) findViewById(R.id.map_azimuth_north_button); + + azimuthNorthButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + setAzimuth(0f); + } + }); + + findViewById(R.id.map_zoom_in_button).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + setZoom(zoom + 1f); + } + }); + + findViewById(R.id.map_zoom_out_button).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + setZoom(zoom - 1f); + } + }); + + // Additional log sink + fileLogSink = QIODeviceLogSink.createFileLogSink( + Environment.getExternalStorageDirectory() + "/osmand/osmandcore.log"); + Logger.get().addLogSink(fileLogSink); + + // Get device display density factor + DisplayMetrics displayMetrics = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + displayDensityFactor = displayMetrics.densityDpi / 160.0f; + referenceTileSize = (int)(256 * displayDensityFactor); + rasterTileSize = Integer.highestOneBit(referenceTileSize - 1) * 2; + Log.i(TAG, "displayDensityFactor = " + displayDensityFactor); + Log.i(TAG, "referenceTileSize = " + referenceTileSize); + Log.i(TAG, "rasterTileSize = " + rasterTileSize); + + Log.i(TAG, "Going to resolve default embedded style..."); + mapStylesCollection = new MapStylesCollection(); + mapStyle = mapStylesCollection.getResolvedStyleByName("default"); + if (mapStyle == null) + { + Log.e(TAG, "Failed to resolve style 'default'"); + System.exit(0); + } + + Log.i(TAG, "Going to prepare OBFs collection"); + obfsCollection = new ObfsCollection(); + Log.i(TAG, "Will load OBFs from " + Environment.getExternalStorageDirectory() + "/osmand"); + obfsCollection.addDirectory(Environment.getExternalStorageDirectory() + "/osmand", false); + + Log.i(TAG, "Going to prepare all resources for renderer"); + mapPresentationEnvironment = new MapPresentationEnvironment( + mapStyle, + displayDensityFactor, + 1.0f, + 1.0f, + MapUtils.LANGUAGE); + //mapPresentationEnvironment->setSettings(configuration.styleSettings); + mapPrimitiviser = new MapPrimitiviser( + mapPresentationEnvironment); + obfMapObjectsProvider = new ObfMapObjectsProvider( + obfsCollection); + mapPrimitivesProvider = new MapPrimitivesProvider( + obfMapObjectsProvider, + mapPrimitiviser, + rasterTileSize); + mapObjectsSymbolsProvider = new MapObjectsSymbolsProvider( + mapPrimitivesProvider, + rasterTileSize); + + mapView.setReferenceTileSizeOnScreenInPixels(referenceTileSize); + mapView.addSymbolsProvider(mapObjectsSymbolsProvider); + + restoreMapState(); + + mapLayerProvider0 = new MapRasterLayerProvider_Software(mapPrimitivesProvider); + mapView.setMapLayerProvider(0, mapLayerProvider0); + + System.out.println("NATIVE_INITIALIZED = " + (System.currentTimeMillis() - startTime) / 1000f); + + //Setup search + + searchAPI = new SearchAPI(obfsCollection); + + final EditText searchEditText = (EditText) findViewById(R.id.searchEditText); + searchEditText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void afterTextChanged(Editable s) { + if (s.length() > 2) { + runSearch(getScreenBounds31(), s.toString()); + } + } + }); + searchEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (hasFocus && adapter.getCount() > 0 && isSearchListHidden()) { + showSearchList(); + LatLon latLon = Utilities.convert31ToLatLon(target31); + adapter.updateDistance(latLon.getLatitude(), latLon.getLongitude()); + adapter.notifyDataSetChanged(); + } + } + }); + + ImageButton clearButton = (ImageButton) findViewById(R.id.clearButton); + clearButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + searchEditText.setText(""); + adapter.clear(); + adapter.notifyDataSetChanged(); + hideSearchList(); + } + }); + + searchListView = (ListView) findViewById(android.R.id.list); + adapter = new SearchListAdapter(this); + searchListView.setAdapter(adapter); + searchListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + hideSearchList(); + mapView.requestFocus(); + SearchRow item = adapter.getItem(position); + PointI target = Utilities.convertLatLonTo31(new LatLon(item.getLatitude(), item.getLongitude())); + setTarget(target); + setZoom(17f); + } + }); + + } + + @Override + protected void onResume() { + super.onResume(); + + mapView.handleOnResume(); + } + + @Override + protected void onPause() { + saveMapState(); + mapView.handleOnPause(); + + super.onPause(); + } + + @Override + protected void onDestroy() { + mapView.handleOnDestroy(); + + super.onDestroy(); + } + + private AreaI getScreenBounds31() { + PointI topLeftPoint = new PointI(); + PointI bottomRightPoint = new PointI(); + mapView.getLocationFromScreenPoint(new PointI(0, 0), topLeftPoint); + mapView.getLocationFromScreenPoint(new PointI(mapView.getWidth(), mapView.getHeight()), bottomRightPoint); + return new AreaI(topLeftPoint, bottomRightPoint); + } + + private boolean isSearchListHidden() { + return searchListView.getVisibility() != View.VISIBLE; + } + + private void showSearchList() { + if (isSearchListHidden()) { + ViewCompat.setAlpha(searchListView, 0f); + searchListView.setVisibility(View.VISIBLE); + ViewCompat.animate(searchListView).alpha(1f).setListener(null); + } + } + + private void hideSearchList() { + ViewCompat.animate(searchListView).alpha(0f).setListener(new ViewPropertyAnimatorListener() { + @Override + public void onAnimationStart(View view) { + + } + + @Override + public void onAnimationEnd(View view) { + searchListView.setVisibility(View.GONE); + } + + @Override + public void onAnimationCancel(View view) { + searchListView.setVisibility(View.GONE); + } + }); + } + + public void saveMapState() { + SharedPreferences prefs = getPreferences(MODE_PRIVATE); + Editor edit = prefs.edit(); + LatLon latLon = Utilities.convert31ToLatLon(target31); + edit.putFloat(PREF_MAP_CENTER_LAT, (float)latLon.getLatitude()); + edit.putFloat(PREF_MAP_CENTER_LON, (float)latLon.getLongitude()); + edit.putFloat(PREF_MAP_AZIMUTH, azimuth); + edit.putFloat(PREF_MAP_ZOOM, zoom); + edit.putFloat(PREF_MAP_ELEVATION_ANGLE, elevationAngle); + edit.commit(); + } + + public void restoreMapState() { + SharedPreferences prefs = getPreferences(MODE_PRIVATE); + float prefLat = prefs.getFloat(PREF_MAP_CENTER_LAT, INIT_LAT); + float prefLon = prefs.getFloat(PREF_MAP_CENTER_LON, INIT_LON); + float prefAzimuth = prefs.getFloat(PREF_MAP_AZIMUTH, INIT_AZIMUTH); + float prefZoom = prefs.getFloat(PREF_MAP_ZOOM, INIT_ZOOM); + float prefElevationAngle = prefs.getFloat(PREF_MAP_ELEVATION_ANGLE, INIT_ELEVATION_ANGLE); + + setAzimuth(prefAzimuth); + setElevationAngle(prefElevationAngle); + setTarget(Utilities.convertLatLonTo31(new LatLon(prefLat, prefLon))); + setZoom(prefZoom); + } + + public boolean setTarget(PointI pointI) { + target31 = pointI; + return mapView.setTarget(pointI); + } + + @SuppressLint("DefaultLocale") + public boolean setZoom(float zoom) { + if (zoom < MIN_ZOOM_LEVEL) { + zoom = MIN_ZOOM_LEVEL; + } else if (zoom > MAX_ZOOM_LEVEL) { + zoom = MAX_ZOOM_LEVEL; + } + this.zoom = zoom; + textZoom.setText(String.format("%.0f", zoom)); + return mapView.setZoom(zoom); + } + + public void setAzimuth(float angle) { + angle = MapUtils.unifyRotationTo360(angle); + this.azimuth = angle; + mapView.setAzimuth(angle); + + if (angle == 0f && azimuthNorthButton.getVisibility() == View.VISIBLE) { + azimuthNorthButton.setVisibility(View.INVISIBLE); + } else if (angle != 0f && azimuthNorthButton.getVisibility() == View.INVISIBLE) { + azimuthNorthButton.setVisibility(View.VISIBLE); + } + } + + public void setElevationAngle(float angle) { + if (angle < 35f) { + angle = 35f; + } else if (angle > 90f) { + angle = 90f; + } + this.elevationAngle = angle; + mapView.setElevationAngle(angle); + } + + public boolean onTouchEvent(MotionEvent event) { + return multiTouchSupport.onTouchEvent(event) + || gestureDetector.onTouchEvent(event); + } + + private void runSearch(AreaI bounds31, String keyword) { + + searchAPI.setObfAreaFilter(bounds31); + searchAPI.startSearch(keyword, MAX_SEARCH_RESULTS, new SearchAPICallback() { + @Override + public void onSearchFinished(List searchItems, boolean cancelled) { + if (searchItems != null && !cancelled) { + LatLon latLon = Utilities.convert31ToLatLon(target31); + List rows = new ArrayList<>(); + for (SearchItem item : searchItems) { + SearchRow row = new SearchRow(item); + rows.add(row); + } + + adapter.clear(); + adapter.addAll(rows); + adapter.updateDistance(latLon.getLatitude(), latLon.getLongitude()); + adapter.sort(new Comparator() { + @Override + public int compare(SearchRow lhs, SearchRow rhs) { + int res = Double.compare(lhs.getDistance(), rhs.getDistance()); + if (res == 0) { + return lhs.getSearchItem().getLocalizedName().compareToIgnoreCase(rhs.getSearchItem().getLocalizedName()); + } else { + return res; + } + } + }); + adapter.notifyDataSetChanged(); + if (adapter.getCount() > 0) { + searchListView.setSelection(0); + } + + showSearchList(); + } + } + }); + } + + private class MapViewOnGestureListener extends SimpleOnGestureListener { + + @Override + public boolean onSingleTapUp(MotionEvent e) { + mapView.requestFocus(); + return true; + } + + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { + float fromX = e2.getX() + distanceX; + float fromY = e2.getY() + distanceY; + float toX = e2.getX(); + float toY = e2.getY(); + + float dx = (fromX - toX); + float dy = (fromY - toY); + + PointI newTarget = new PointI(); + mapView.getLocationFromScreenPoint(new PointI(mapView.getWidth() / 2 + (int)dx, mapView.getHeight() / 2 + (int)dy), newTarget); + + setTarget(newTarget); + + mapView.requestFocus(); + return true; + } + } + + private class MapViewMultiTouchZoomListener implements MultiTouchZoomListener { + + private float initialZoom; + private float initialAzimuth; + private float initialElevation; + private PointF centerPoint; + + @Override + public void onGestureFinished(float scale, float rotation) { + } + + @Override + public void onGestureInit(float x1, float y1, float x2, float y2) { + } + + @Override + public void onZoomStarted(PointF centerPoint) { + initialZoom = zoom; + initialAzimuth = azimuth; + this.centerPoint = centerPoint; + } + + @Override + public void onZoomingOrRotating(float scale, float rotation) { + + PointI centerLocationBefore = new PointI(); + mapView.getLocationFromScreenPoint( + new PointI((int)centerPoint.x, (int)centerPoint.y), centerLocationBefore); + + // Change zoom + setZoom(initialZoom + (float)(Math.log(scale) / Math.log(2))); + + // Adjust current target position to keep touch center the same + PointI centerLocationAfter = new PointI(); + mapView.getLocationFromScreenPoint( + new PointI((int)centerPoint.x, (int)centerPoint.y), centerLocationAfter); + PointI centerLocationDelta = new PointI( + centerLocationAfter.getX() - centerLocationBefore.getX(), + centerLocationAfter.getY() - centerLocationBefore.getY()); + + setTarget(new PointI(target31.getX() - centerLocationDelta.getX(), target31.getY() - centerLocationDelta.getY())); + + /* + // Convert point from screen to location + PointI centerLocation = new PointI(); + mapView.getLocationFromScreenPoint( + new PointI((int)centerPoint.x, (int)centerPoint.y), centerLocation); + + // Rotate current target around center location + PointI target = new PointI(xI - centerLocation.getX(), yI - centerLocation.getY()); + double cosAngle = Math.cos(-Math.toRadians(rotation)); + double sinAngle = Math.sin(-Math.toRadians(rotation)); + + PointI newTarget = new PointI( + (int)(target.getX() * cosAngle - target.getY() * sinAngle + centerLocation.getX()), + (int)(target.getX() * sinAngle + target.getY() * cosAngle + centerLocation.getY())); + + setTarget(newTarget); + */ + + // Set rotation + setAzimuth(initialAzimuth - rotation); + } + + @Override + public void onChangeViewAngleStarted() { + initialElevation = elevationAngle; + } + + @Override + public void onChangingViewAngle(float angle) { + setElevationAngle(initialElevation - angle); + } + } +} diff --git a/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/MapUtils.java b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/MapUtils.java new file mode 100644 index 0000000000..eac4454d46 --- /dev/null +++ b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/MapUtils.java @@ -0,0 +1,30 @@ +package net.osmand.core.samples.android.sample1; + +import java.util.Locale; + +public class MapUtils { + + public static final String LANGUAGE; + + static { + LANGUAGE = getLanguage(); + } + + public static float unifyRotationTo360(float rotate) { + while (rotate < -180) { + rotate += 360; + } + while (rotate > +180) { + rotate -= 360; + } + return rotate; + } + + private static String getLanguage() { + String langCode = Locale.getDefault().getLanguage(); + if (langCode.isEmpty()) { + langCode = "en"; + } + return langCode; + } +} diff --git a/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/MultiTouchSupport.java b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/MultiTouchSupport.java new file mode 100644 index 0000000000..9f0dbd350b --- /dev/null +++ b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/MultiTouchSupport.java @@ -0,0 +1,202 @@ +package net.osmand.core.samples.android.sample1; + +import android.content.Context; +import android.graphics.PointF; +import android.util.Log; +import android.view.MotionEvent; + +import java.lang.reflect.Method; + +public class MultiTouchSupport { + + private static final String TAG = "MultiTouchSupport"; + + public static final int ACTION_MASK = 255; + protected final Context ctx; + private final MultiTouchZoomListener listener; + protected Method getPointerCount; + protected Method getX; + protected Method getY; + protected Method getPointerId; + + private float initialAngle; + private float rotation; + private static final float ROTATION_THRESHOLD_DEG = 15.0f; + private boolean isRotating; + + private boolean multiTouchAPISupported = false; + + private boolean inTiltMode = false; + private PointF firstFingerStart = new PointF(); + private PointF secondFingerStart = new PointF(); + private static final int TILT_X_THRESHOLD_PX = 40; + private static final int TILT_Y_THRESHOLD_PX = 40; + private static final int TILT_DY_THRESHOLD_PX = 40; + + private boolean inZoomMode = false; + private float initialDistance = 100; + private float scale = 1; + private PointF centerPoint = new PointF(); + + private boolean multiTouch; + + public MultiTouchSupport(Context ctx, MultiTouchZoomListener listener) { + this.ctx = ctx; + this.listener = listener; + initMethods(); + } + + public boolean isMultiTouchSupported(){ + return multiTouchAPISupported; + } + + public boolean isInZoomMode(){ + return inZoomMode; + } + + public boolean isInTiltMode() { + return inTiltMode; + } + + private void initMethods() { + try { + getPointerCount = MotionEvent.class.getMethod("getPointerCount"); //$NON-NLS-1$ + getPointerId = MotionEvent.class.getMethod("getPointerId", Integer.TYPE); //$NON-NLS-1$ + getX = MotionEvent.class.getMethod("getX", Integer.TYPE); //$NON-NLS-1$ + getY = MotionEvent.class.getMethod("getY", Integer.TYPE); //$NON-NLS-1$ + multiTouchAPISupported = true; + } catch (Exception e) { + multiTouchAPISupported = false; + } + } + + public boolean onTouchEvent(MotionEvent event){ + if(!isMultiTouchSupported()){ + return false; + } + int actionCode = event.getAction() & ACTION_MASK; + try { + if (actionCode == MotionEvent.ACTION_UP || actionCode == MotionEvent.ACTION_CANCEL) { + multiTouch = false; + } + Integer pointCount = (Integer) getPointerCount.invoke(event); + if (pointCount < 2) { + if (inZoomMode || inTiltMode) { + listener.onGestureFinished(scale, rotation); + inZoomMode = false; + inTiltMode = false; + } + return multiTouch; + } else { + multiTouch = true; + } + + Float x1 = (Float) getX.invoke(event, 0); + Float x2 = (Float) getX.invoke(event, 1); + Float y1 = (Float) getY.invoke(event, 0); + Float y2 = (Float) getY.invoke(event, 1); + float distance = (float) Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); + float angle = 0; + boolean angleDefined = false; + if (x1.floatValue() != x2.floatValue() || y1.floatValue() != y2.floatValue()) { + angleDefined = true; + angle = (float) (Math.atan2(y2 - y1, x2 -x1) * 180 / Math.PI); + } + + switch (actionCode) { + + case MotionEvent.ACTION_POINTER_DOWN: { + + centerPoint = new PointF((x1 + x2) / 2, (y1 + y2) / 2); + firstFingerStart = new PointF(x1, y1); + secondFingerStart = new PointF(x2, y2); + listener.onGestureInit(x1, y1, x2, y2); + return true; + } + case MotionEvent.ACTION_POINTER_UP: { + + if (inZoomMode || inTiltMode) { + listener.onGestureFinished(scale, rotation); + inZoomMode = false; + inTiltMode = false; + } + return true; + } + case MotionEvent.ACTION_MOVE: { + + if (inZoomMode) { + if (angleDefined) { + float a = MapUtils.unifyRotationTo360(angle - initialAngle); + if (!isRotating && Math.abs(a) > ROTATION_THRESHOLD_DEG) { + isRotating = true; + initialAngle = angle; + } else if (isRotating) { + rotation = a; + } + } + scale = distance / initialDistance; + + listener.onZoomingOrRotating(scale, rotation); + return true; + + } else if (inTiltMode) { + float dy2 = secondFingerStart.y - y2; + float viewAngle = dy2 / 8f; + listener.onChangingViewAngle(viewAngle); + + } else { + float dx1 = Math.abs(firstFingerStart.x - x1); + float dx2 = Math.abs(secondFingerStart.x - x2); + float dy1 = Math.abs(firstFingerStart.y - y1); + float dy2 = Math.abs(secondFingerStart.y - y2); + float startDy = Math.abs(secondFingerStart.y - firstFingerStart.y); + if (dx1 < TILT_X_THRESHOLD_PX && dx2 < TILT_X_THRESHOLD_PX + && dy1 > TILT_Y_THRESHOLD_PX && dy2 > TILT_Y_THRESHOLD_PX + && startDy < TILT_Y_THRESHOLD_PX * 6 + && Math.abs(dy2 - dy1) < TILT_DY_THRESHOLD_PX) { + listener.onChangeViewAngleStarted(); + inTiltMode = true; + + } else if (dx1 > TILT_X_THRESHOLD_PX || dx2 > TILT_X_THRESHOLD_PX + || Math.abs(dy2 - dy1) > TILT_DY_THRESHOLD_PX + || Math.abs(dy1 - dy2) > TILT_DY_THRESHOLD_PX) { + listener.onZoomStarted(centerPoint); + initialDistance = distance; + initialAngle = angle; + rotation = 0; + scale = 0; + isRotating = false; + inZoomMode = true; + } + } + } + default: + break; + } + + } catch (Exception e) { + Log.e(TAG, "Multi touch exception" , e); //$NON-NLS-1$ + } + return true; + } + + public PointF getCenterPoint() { + return centerPoint; + } + + public interface MultiTouchZoomListener { + + void onZoomStarted(PointF centerPoint); + + void onZoomingOrRotating(float scale, float rotation); + + void onChangeViewAngleStarted(); + + void onChangingViewAngle(float angle); + + void onGestureFinished(float scale, float rotation); + + void onGestureInit(float x1, float y1, float x2, float y2); + + } +} diff --git a/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SearchAPI.java b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SearchAPI.java new file mode 100644 index 0000000000..b00b677a90 --- /dev/null +++ b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SearchAPI.java @@ -0,0 +1,306 @@ +package net.osmand.core.samples.android.sample1; + +import android.os.AsyncTask; + +import net.osmand.core.jni.AmenitiesByNameSearch; +import net.osmand.core.jni.Amenity; +import net.osmand.core.jni.Amenity.DecodedCategory; +import net.osmand.core.jni.AreaI; +import net.osmand.core.jni.DecodedCategoryList; +import net.osmand.core.jni.IObfsCollection; +import net.osmand.core.jni.IQueryController; +import net.osmand.core.jni.ISearch; +import net.osmand.core.jni.LatLon; +import net.osmand.core.jni.NullableAreaI; +import net.osmand.core.jni.ObfInfo; +import net.osmand.core.jni.ObfsCollection; +import net.osmand.core.jni.PointI; +import net.osmand.core.jni.QStringStringHash; +import net.osmand.core.jni.Utilities; + +import java.util.ArrayList; +import java.util.List; + +public class SearchAPI { + + private ObfsCollection obfsCollection; + private AreaI searchableArea; + private AreaI obfAreaFilter; + private SearchRequestExecutor executor; + + interface SearchAPICallback { + void onSearchFinished(List searchItems, boolean cancelled); + } + + public SearchAPI(ObfsCollection obfsCollection) { + this.obfsCollection = obfsCollection; + executor = new SearchRequestExecutor(); + } + + public AreaI getSearchableArea() { + return searchableArea; + } + + public void setSearchableArea(AreaI searchableArea) { + this.searchableArea = searchableArea; + } + + public AreaI getObfAreaFilter() { + return obfAreaFilter; + } + + public void setObfAreaFilter(AreaI obfAreaFilter) { + this.obfAreaFilter = obfAreaFilter; + } + + public void startSearch(String keyword, int maxSearchResults, SearchAPICallback apiCallback) { + executor.run(new SearchRequest(keyword, maxSearchResults, apiCallback), true); + } + + public void cancelSearch() { + executor.cancel(); + } + + + public class SearchRequestExecutor { + + private SearchRequest ongoingSearchRequest; + private SearchRequest nextSearchRequest; + + public void run(SearchRequest searchRequest, boolean cancelCurrentRequest) { + if (ongoingSearchRequest != null) { + nextSearchRequest = searchRequest; + if (cancelCurrentRequest) { + ongoingSearchRequest.cancel(); + } + } else { + ongoingSearchRequest = searchRequest; + nextSearchRequest = null; + searchRequest.setOnFinishedCallback(new Runnable() { + @Override + public void run() { + operationFinished(); + } + }); + searchRequest.run(); + } + } + + public void cancel() { + if (nextSearchRequest != null) { + nextSearchRequest = null; + } + if (ongoingSearchRequest != null) { + ongoingSearchRequest.cancel(); + } + } + + private void operationFinished() { + ongoingSearchRequest = null; + if (nextSearchRequest != null) { + run(nextSearchRequest, false); + } + } + } + + public class SearchRequest { + private String keyword; + private int maxSearchResults; + private Runnable onFinished; + private SearchAPICallback apiCallback; + + private boolean cancelled; + private int resCount; + + public SearchRequest(String keyword, int maxSearchResults, SearchAPICallback apiCallback) { + this.keyword = keyword; + this.maxSearchResults = maxSearchResults; + this.apiCallback = apiCallback; + } + + public void run() { + + new AsyncTask>() { + @Override + protected List doInBackground(String... params) { + return doSearch(params[0]); + } + + @Override + protected void onPostExecute(List searchItems) { + + if (onFinished != null) { + onFinished.run(); + } + + if (apiCallback != null) { + apiCallback.onSearchFinished(searchItems, cancelled); + } + } + }.execute(keyword); + } + + private List doSearch(String keyword) { + System.out.println("=== Start search"); + resCount = 0; + + final List searchItems = new ArrayList<>(); + + AmenitiesByNameSearch byNameSearch = new AmenitiesByNameSearch(obfsCollection); + AmenitiesByNameSearch.Criteria criteria = new AmenitiesByNameSearch.Criteria(); + criteria.setName(keyword); + if (obfAreaFilter != null) { + criteria.setObfInfoAreaFilter(new NullableAreaI(new AreaI(obfAreaFilter))); + } + + ISearch.INewResultEntryCallback newResultEntryCallback = new ISearch.INewResultEntryCallback() { + @Override + public void method(ISearch.Criteria criteria, ISearch.IResultEntry resultEntry) { + Amenity amenity = new ResultEntry(resultEntry).getAmenity(); + searchItems.add(new AmenitySearchItem(amenity)); + System.out.println("Poi found === " + amenity.getNativeName()); + resCount++; + /* + QStringStringHash locNames = amenity.getLocalizedNames(); + if (locNames.size() > 0) { + QStringList keys = locNames.keys(); + StringBuilder sb = new StringBuilder("=== Localized names: "); + for (int i = 0; i < keys.size(); i++) { + String key = keys.get(i); + sb.append(key).append("=").append(locNames.get(key)).append(" | "); + } + System.out.println(sb.toString()); + } + */ + } + }; + + byNameSearch.performSearch(criteria, newResultEntryCallback.getBinding(), new IQueryController() { + @Override + public boolean isAborted() { + return resCount >= maxSearchResults || cancelled; + } + }); + + System.out.println("=== Finish search"); + + return searchItems; + } + + public void cancel() { + cancelled = true; + } + + public void setOnFinishedCallback(Runnable onFinished) { + this.onFinished = onFinished; + } + } + + private static class ResultEntry extends AmenitiesByNameSearch.ResultEntry { + protected ResultEntry(ISearch.IResultEntry resultEntry) { + super(ISearch.IResultEntry.getCPtr(resultEntry), false); + } + } + + public static abstract class SearchItem { + + protected double latitude; + protected double longitude; + + public SearchItem(double latitude, double longitude) { + this.latitude = latitude; + this.longitude = longitude; + } + + public SearchItem(PointI location31) { + LatLon latLon = Utilities.convert31ToLatLon(location31); + latitude = latLon.getLatitude(); + longitude = latLon.getLongitude(); + } + + public abstract String getNativeName(); + + public abstract String getLocalizedName(); + + public abstract String getTypeName(); + + public abstract String getSubTypeName(); + + public double getLatitude() { + return latitude; + } + + public double getLongitude() { + return longitude; + } + + @Override + public String toString() { + return getNativeName() + " {lat:" + getLatitude() + " lon: " + getLongitude() + "}"; + } + } + + public static class AmenitySearchItem extends SearchItem { + + private String nativeName; + private String localizedName; + private String category; + private String subcategory; + + public AmenitySearchItem(Amenity amenity) { + super(amenity.getPosition31()); + + nativeName = amenity.getNativeName(); + QStringStringHash locNames = amenity.getLocalizedNames(); + if (locNames.has_key(MapUtils.LANGUAGE)) { + localizedName = locNames.get(MapUtils.LANGUAGE); + } + /* + if (locNames.size() > 0) { + QStringList keys = locNames.keys(); + for (int i = 0; i < keys.size(); i++) { + String key = keys.get(i); + localizedNamesMap.put(key, locNames.get(key)); + } + } + */ + + DecodedCategoryList catList = amenity.getDecodedCategories(); + if (catList.size() > 0) { + DecodedCategory decodedCategory = catList.get(0); + category = decodedCategory.getCategory(); + subcategory = decodedCategory.getSubcategory(); + } + } + + @Override + public String getNativeName() { + return nativeName; + } + + @Override + public String getLocalizedName() { + return localizedName != null ? localizedName : nativeName; + } + + @Override + public String getTypeName() { + return category; + } + + @Override + public String getSubTypeName() { + return subcategory; + } + + @Override + public double getLatitude() { + return latitude; + } + + @Override + public double getLongitude() { + return longitude; + } + } +} diff --git a/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SearchUIHelper.java b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SearchUIHelper.java new file mode 100644 index 0000000000..ff82491271 --- /dev/null +++ b/OsmAndCore-sample/src/net/osmand/core/samples/android/sample1/SearchUIHelper.java @@ -0,0 +1,139 @@ +package net.osmand.core.samples.android.sample1; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.LinearLayout; +import android.widget.TextView; + +import net.osmand.core.jni.Utilities; +import net.osmand.core.samples.android.sample1.SearchAPI.SearchItem; + +import java.text.MessageFormat; + +public class SearchUIHelper { + + public static Drawable getIcon(Context ctx, SearchItem item) { + return null; + } + + public static class SearchRow { + + private SearchItem searchItem; + private double distance; + + public SearchRow(SearchItem searchItem) { + this.searchItem = searchItem; + } + + public SearchItem getSearchItem() { + return searchItem; + } + + public double getLatitude() { + return searchItem.getLatitude(); + } + + public double getLongitude() { + return searchItem.getLongitude(); + } + + public double getDistance() { + return distance; + } + + public void setDistance(double distance) { + this.distance = distance; + } + } + + public static class SearchListAdapter extends ArrayAdapter { + + private Context ctx; + + public SearchListAdapter(Context ctx) { + super(ctx, R.layout.search_list_item); + this.ctx = ctx; + } + + public void updateDistance(double latitude, double longitude) { + for (int i = 0; i < getCount(); i++) { + SearchRow item = getItem(i); + item.setDistance(Utilities.distance( + longitude, latitude, + item.getLongitude(), item.getLatitude())); + } + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + SearchRow item = getItem(position); + + LinearLayout view; + if (convertView == null) { + LayoutInflater inflater = (LayoutInflater) ctx + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + view = (LinearLayout) inflater.inflate( + R.layout.search_list_item, null); + } else { + view = (LinearLayout) convertView; + } + + TextView title = (TextView) view.findViewById(R.id.title); + TextView subtitle = (TextView) view.findViewById(R.id.subtitle); + TextView distance = (TextView) view.findViewById(R.id.distance); + title.setText(item.searchItem.getLocalizedName()); + StringBuilder sb = new StringBuilder(); + if (!item.searchItem.getSubTypeName().isEmpty()) { + sb.append(getNiceString(item.searchItem.getSubTypeName())); + } + if (!item.searchItem.getTypeName().isEmpty()) { + if (sb.length() > 0) { + sb.append(" — "); + } + sb.append(getNiceString(item.searchItem.getTypeName())); + } + subtitle.setText(sb.toString()); + if (item.getDistance() == 0) { + distance.setText(""); + } else { + distance.setText(getFormattedDistance(item.getDistance())); + } + + //text1.setTextColor(ctx.getResources().getColor(R.color.listTextColor)); + //view.setCompoundDrawablesWithIntrinsicBounds(getIcon(ctx, item), null, null, null); + //view.setCompoundDrawablePadding(ctx.getResources().getDimensionPixelSize(R.dimen.list_content_padding)); + return view; + } + } + + public static String capitalizeFirstLetterAndLowercase(String s) { + if (s != null && s.length() > 1) { + // not very efficient algorithm + return Character.toUpperCase(s.charAt(0)) + s.substring(1).toLowerCase(); + } else { + return s; + } + } + + public static String getNiceString(String s) { + return capitalizeFirstLetterAndLowercase(s.replaceAll("_", " ")); + } + + public static String getFormattedDistance(double meters) { + double mainUnitInMeters = 1000; + String mainUnitStr = "km"; + if (meters >= 100 * mainUnitInMeters) { + return (int) (meters / mainUnitInMeters + 0.5) + " " + mainUnitStr; + } else if (meters > 9.99f * mainUnitInMeters) { + return MessageFormat.format("{0,number,#.#} " + mainUnitStr, ((float) meters) / mainUnitInMeters).replace('\n', ' '); + } else if (meters > 0.999f * mainUnitInMeters) { + return MessageFormat.format("{0,number,#.##} " + mainUnitStr, ((float) meters) / mainUnitInMeters).replace('\n', ' '); + } else { + return ((int) (meters + 0.5)) + " m"; + } + } +} diff --git a/settings.gradle b/settings.gradle index 4c604d0ff3..234ab0eb96 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,4 @@ -include ':OsmAnd-java' +include ':OsmAnd-java', ':OsmAndCore-sample' include ':OsmAnd' include ':plugins:OsmAnd-AddressPlugin' include ':plugins:Osmand-ParkingPlugin'