From 4e9bebbee865a4cff8bd6e017fd7cbb9c5621a42 Mon Sep 17 00:00:00 2001 From: Dmitry Donskoy Date: Tue, 18 Feb 2020 09:07:45 +0300 Subject: [PATCH] [android] Added chart lib --- android/build.gradle | 1 + android/res/drawable-hdpi/elevation.png | Bin 0 -> 1991 bytes android/res/drawable-hdpi/ic_chart_pin.png | Bin 0 -> 579 bytes android/res/drawable-hdpi/ic_graph_point.png | Bin 0 -> 1382 bytes android/res/drawable-hdpi/ic_you_marker.png | Bin 0 -> 891 bytes android/res/drawable-hdpi/trang.png | Bin 0 -> 167 bytes android/res/drawable-mdpi/elevation.png | Bin 0 -> 906 bytes android/res/drawable-mdpi/ic_chart_pin.png | Bin 0 -> 403 bytes android/res/drawable-mdpi/ic_graph_point.png | Bin 0 -> 879 bytes android/res/drawable-mdpi/ic_you_marker.png | Bin 0 -> 602 bytes android/res/drawable-mdpi/trang.png | Bin 0 -> 122 bytes android/res/drawable-xhdpi/elevation.png | Bin 0 -> 3385 bytes android/res/drawable-xhdpi/ic_chart_pin.png | Bin 0 -> 713 bytes android/res/drawable-xhdpi/ic_graph_point.png | Bin 0 -> 1728 bytes android/res/drawable-xhdpi/ic_you_marker.png | Bin 0 -> 1141 bytes android/res/drawable-xhdpi/trang.png | Bin 0 -> 172 bytes android/res/drawable-xxhdpi/elevation.png | Bin 0 -> 6091 bytes android/res/drawable-xxhdpi/ic_chart_pin.png | Bin 0 -> 968 bytes .../res/drawable-xxhdpi/ic_graph_point.png | Bin 0 -> 2429 bytes android/res/drawable-xxhdpi/ic_you_marker.png | Bin 0 -> 1617 bytes android/res/drawable-xxhdpi/trang.png | Bin 0 -> 219 bytes android/res/drawable-xxxhdpi/elevation.png | Bin 0 -> 10526 bytes android/res/drawable-xxxhdpi/ic_chart_pin.png | Bin 0 -> 1311 bytes .../res/drawable-xxxhdpi/ic_graph_point.png | Bin 0 -> 3163 bytes .../res/drawable-xxxhdpi/ic_you_marker.png | Bin 0 -> 2083 bytes android/res/drawable-xxxhdpi/trang.png | Bin 0 -> 268 bytes android/res/drawable/bg_altitude.xml | 7 + android/res/drawable/bg_your_location_pin.xml | 7 + android/res/layout/altitude_chart.xml | 52 ++++++ .../res/layout/current_location_marker.xml | 32 ++++ android/res/layout/floating_marker_view.xml | 58 +++++++ android/res/layout/place_page_details.xml | 2 + android/res/values/colors.xml | 2 + android/res/values/dimens.xml | 2 + .../widget/placepage/AxisValueFormatter.java | 29 ++++ .../placepage/CurrentLocationMarkerView.java | 34 ++++ .../widget/placepage/FloatingMarkerView.java | 123 ++++++++++++++ .../maps/widget/placepage/PlacePageView.java | 159 +++++++++++++++++- data/copyright.html | 3 + 39 files changed, 510 insertions(+), 1 deletion(-) create mode 100755 android/res/drawable-hdpi/elevation.png create mode 100755 android/res/drawable-hdpi/ic_chart_pin.png create mode 100755 android/res/drawable-hdpi/ic_graph_point.png create mode 100755 android/res/drawable-hdpi/ic_you_marker.png create mode 100755 android/res/drawable-hdpi/trang.png create mode 100755 android/res/drawable-mdpi/elevation.png create mode 100755 android/res/drawable-mdpi/ic_chart_pin.png create mode 100755 android/res/drawable-mdpi/ic_graph_point.png create mode 100755 android/res/drawable-mdpi/ic_you_marker.png create mode 100755 android/res/drawable-mdpi/trang.png create mode 100755 android/res/drawable-xhdpi/elevation.png create mode 100755 android/res/drawable-xhdpi/ic_chart_pin.png create mode 100755 android/res/drawable-xhdpi/ic_graph_point.png create mode 100755 android/res/drawable-xhdpi/ic_you_marker.png create mode 100755 android/res/drawable-xhdpi/trang.png create mode 100755 android/res/drawable-xxhdpi/elevation.png create mode 100755 android/res/drawable-xxhdpi/ic_chart_pin.png create mode 100755 android/res/drawable-xxhdpi/ic_graph_point.png create mode 100755 android/res/drawable-xxhdpi/ic_you_marker.png create mode 100755 android/res/drawable-xxhdpi/trang.png create mode 100755 android/res/drawable-xxxhdpi/elevation.png create mode 100755 android/res/drawable-xxxhdpi/ic_chart_pin.png create mode 100755 android/res/drawable-xxxhdpi/ic_graph_point.png create mode 100755 android/res/drawable-xxxhdpi/ic_you_marker.png create mode 100755 android/res/drawable-xxxhdpi/trang.png create mode 100644 android/res/drawable/bg_altitude.xml create mode 100644 android/res/drawable/bg_your_location_pin.xml create mode 100644 android/res/layout/altitude_chart.xml create mode 100644 android/res/layout/current_location_marker.xml create mode 100644 android/res/layout/floating_marker_view.xml create mode 100644 android/src/com/mapswithme/maps/widget/placepage/AxisValueFormatter.java create mode 100644 android/src/com/mapswithme/maps/widget/placepage/CurrentLocationMarkerView.java create mode 100644 android/src/com/mapswithme/maps/widget/placepage/FloatingMarkerView.java diff --git a/android/build.gradle b/android/build.gradle index 53e65df19f..da3aaffbbd 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -103,6 +103,7 @@ dependencies { implementation 'com.google.android:flexbox:1.0.0' implementation 'com.trafi:anchor-bottom-sheet-behavior:0.13-alpha' implementation 'com.google.firebase:firebase-messaging:17.0.0' + implementation 'com.github.yoksnod:MPAndroidChart:3.2.0-alpha' } def getDate() { diff --git a/android/res/drawable-hdpi/elevation.png b/android/res/drawable-hdpi/elevation.png new file mode 100755 index 0000000000000000000000000000000000000000..326dac572158a88e5f26e54b5a87c117785a889b GIT binary patch literal 1991 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 RhD-ne002ovPDHLkV1mw}rP=@h literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/trang.png b/android/res/drawable-hdpi/trang.png new file mode 100755 index 0000000000000000000000000000000000000000..ed8b04712d134d9d9c344f8274505690038a199b GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^AT}ol8<6B)wpSQP<$1a|hG+zr_Fv>}FyLTauWZq* z{p00&Z6IaQ==_r7-QxOL?n@N6sw%1!$S8j7=X=p;+!w?;r$O*W!|ms)8n>BNyo;BL zZrY?N8otHN;MSj{Z9r1yOc;A=w08f>)G+q+gp7tX(Hom=6F*ikmh2Y}U$by(KG0?c MPgg&ebxsLQ0Dnd~(*OVf literal 0 HcmV?d00001 diff --git a/android/res/drawable-mdpi/elevation.png b/android/res/drawable-mdpi/elevation.png new file mode 100755 index 0000000000000000000000000000000000000000..c02028703826b774cd37928a96f657fabd6e2316 GIT binary patch literal 906 zcmV;519kj~P)$y0009~Nklod~cGu6h?=VpGD#fS*rFe17-t?*07k-o5+Bpb(T&PXOQp06YhP#bVk6 zjei1wO~%-Xk)N5!`T6LtpyX*;LI{t*Rtw?T5(O(= z9ETktM7wU%)p9RMF2v7PEy+0^6pR*aPpj5&wJfw=0B~KmnFF2ObzfBxa1=#fJEyvGHtsdwX+vdHMA{f}Y;9xW_s` zN;!(6=x49jd%w50_d^KrYcLp$Oy#`QYI)=FxB~#faU2Iv%1bGA`^Wf%H0clchiQ)E z7#@u4G%2Mn6W?ln^GWF(k0Bp{JbI#K=bvWlLP4zW_V$dI;K+x}vMgy`eEAcfN4VGout^9e}z&VG!4$U{G z&S|+O-Q>?@Db(vZhIG2boasw7F6;hWd&i|KQC5pcG$vXUMh9ib-hy`(8q zw(i%y@0T=taB!g0*Vfipzu#BB?*r2Ci2>t55U3ys?(CzOztia`Q(iIuO>lRm&HE6B gp38?HUjsGaAB~bl6Q7Pz;s5{u07*qoM6N<$f|iA^3jhEB literal 0 HcmV?d00001 diff --git a/android/res/drawable-mdpi/ic_chart_pin.png b/android/res/drawable-mdpi/ic_chart_pin.png new file mode 100755 index 0000000000000000000000000000000000000000..e9d323e672fff41f2fefb278455335b90ee738bc GIT binary patch literal 403 zcmV;E0c`$>P)Bb5S=+UhQi1lF^0tE5}~KOlG2i&0ErSx?JW5R+L)YNjQj*kN=iyf6G5*rq4E|& zp~>Ek***5WkKiYd0Cxg0q2jK4qDXGb;1zcQPg5+bxac>&JSXERe6lynVV<^ zBwzF$vRn4tK~G=ykH^X3v@jePEoBgW3r4=urvVxiti8PFIaq3U3fM=@P)S`Xd!DCO xv^uw;OifM~SI#s$v;;8J;#gMR`?g;+;1`tdnc_Ry&vyU-002ovPDHLkV1j%AuuK2| literal 0 HcmV?d00001 diff --git a/android/res/drawable-mdpi/ic_graph_point.png b/android/res/drawable-mdpi/ic_graph_point.png new file mode 100755 index 0000000000000000000000000000000000000000..839b2f0abc5e95bf2e7ff6612dfa4e397c9b7949 GIT binary patch literal 879 zcmV-#1CacQP)ExM1Thbe8ijt2%r@O;rWClWnO5sNc)9BtPj>ck(W2276DifN0=gh4GmL!ydGqBo6WV<_?8dDJiFDfj~le zPO($#?W!_Yo;#iporM>(LAXDm&tA2^SHZ#6;=L-~e%f(2jrqrQgZBRco`|h`A_mY= zo_yk3Nn)*<1tqs(#LsNe#Klw{*^fM11J0S?yjDKqNT$Ozbt&zxHX>MJmB*u#!1?ec~Di0F7mUsTKSc#w;4{xJh zp>0>}!XU11HiclOTvMR3Y(r+zQDX+RUD_a0-|W`M_`s2-VWf--O_9Z;TR7IIqFqt` zZQ)=HZs8_l;i!Z~DnWm>GBF}o7AokFrc(o`fv;nJv_Ey@99`xiv&y7X&&`Z4} zd(0k{Al z*i3x^um&JSL|dwy)J6y~R_3_=K35z3zDvPk#q!FWw_7WQefT;Q)UyEMM3jqwa`^^pbi02zw~O*o*brjbcUEJ&hcaP*;oE`zf!%VD#t?%0gp2?JG@gBSo~OXE}K4W*geLdt^T>n1?e(#Gt98xXa#?l zEyT0@Kk!k)!HU)^u}$u+vyyi&20YrPd9w#fWCIFUt1uem}9x7?K(3kiMsE_E)M!3HGx`C7_=l%uDMV~9j}?3qA81_ch5i%Yv= z-z2GSo^e#~oMCa#DfQFJ70a1Vuig>G%x2KI_OGmH$$|yVU14=oZe2QMxb@L`FL{H- WTv`@!Urd08F?hQAxvX3h47p@2NDd>%A>bKs{2E!qtVZugg|DWnUEOMFM(*xXA3lMQy1TwdeZTtZ z@ztX#IpMFzX%bkak{*cn1dkr48=7L`%R z$6DZbhlhvv&zw1P;K#rh;KRei?DF#R6GF%jK2|Ey>9YW1>|d19A5u!kKpq3QSS%Ww zo14Ei4C5<(Dx##I78s32zh78b_$47^r1EkB4B+0ockjx|%F2I(3PgJS7U*<3pQlo( zG9iSCFHr%8|Hg1Q{Ig*gKi97wN(^d&;c)neL?ZDkLdeh$V1p2n7!HTu7>4ovpu&(| zzXcd$dxl|rj}X$ARWDd*v8I02P-0jXxOC}K`qisfJ;vCOQp#i%4Zn+o zkR)U5Ff3unN52Iqr7*nhNG}Fp>Bh!}Q7V-H;51{bre7_T7?uSnrS|ITYU}08mpy2U zxd#^tg~YRG&z73aX1dX6ybVhj^3iXBOeS+al}fd)U%%cdm&*fLMJEU$DMESWt@b&; z2P>P+ChPV3CycTG=~oLShGhXt>7}!0&o&PZ4%*Psk^n;$og{>05a6&(Js&;*ux;Co zTCD~>>EkvypU*Gu?d>INwHkOZR?+jpCKRcbWv#Z`?QfxqW{e#JEZg8(t%e>Pikauf z1U#4!(og}W`FuX{;>C*;w!!lQCM?MSa5kGgx^m@8yHcqfkAp=N3x-M9$qLKTbK)aB z7<$pr$#QzpavThiENp}41Wp)Y#V`rx6L`2%_28ssS(#?DiNmBYEIlV4(u4E)yi-Lx z6AdC3jUGHFaKaEPhe>N|Yn@7^;)E(q2y}Eh9f)M12Zv$lIq{HHG_Dgz$H9@>UJG;ISTuIBwAfyY5Li{2N~Ie0dL5VS zXtB6vA-7Ou(C2SikoMdLH2@H`2m!F`j1E4V^ybYQIHLmt9Z@3?F@G2)*|vQIM>sgMNixuZRdmGG*T5cn z(aB`;2)3@sbxw22q7>sd4wkb?7^;lY@|t+7JN#W6z+v+l?(o-yLWE-c_9k%;#@&SxT3sXS zX@{_2s8S;kQHjEHvZAtVO!)ftqUCfUo|6?5lme(B=7SsFtt+N&+i)N_9)uRaxN#s= zC;a6(S^V#Id_PHDIlw8^|V>w zh}%bl*)=xQo?+7Q?m{tLi05R*2Bwc!WReGC8~pJ$jTPn8$p*`^()iw_Sm8CZGU|lC zJY`4S;g4HaW;SWO2w>5jWm$Ypmfw;7I82HcUNdXs+sVS+g)`eRwgd{mW9LQVy6D)# zc6!C8g(`7H$LZ}D+mzCSVRxbP_E9{-A+~tUteBilQr|x6M6&Q0rJ3y+I|9Ed8kB@U z2ONZk!=%_jHk(2dPuYRDuAm3cX3RLIo_G)%?rex7T(j%sHxA})uvj*Wp~~598Y>FV zX|o@W^cTkoV;dYRxMo*o;(V}J7mXACv)eRQ6n+5Xnygqs6igYlljUq(!BcjE88uGS zez9oWd=@8!0_rkx`zWlc#AUMqts4V!O6e*gqydZWyk~UaWJ3%93aWxyMLX|J63b@M zgM(T(2J~{WLA?2lpH+#kwu=EUVW}{6HVKb149m>(5$N z#`%X2AKtxo?b=V_EG?}Xqp;IjfIWZyyma^O-9K(`Z@+`Zc9~4(sL^P&2q9hdtt$W^ z-$DvK>EUpg>2|x|%}aOg-1+Y2=H?gKZ1%I|<>k*#D;d*8XMuLR{bp}(@9$5ZJlX#8 z%P+qHFqf8=jts+Sw%cuJf7=k`AcTyhXTtA-*dv@uCX?w-rvm_6i9`Z`HwJ@&Aw4;f zNRYt*==ld|nR*ZY!$+nO&uAi%V1oeJbFUjK!5dD+Do;OlK%3&* zE))vga=AQ&G%CQ(78Wt_0M&JBad9!(@Asklh613bSM%h}p!&=OsHbpvi}_e#kqM+x zlxww+0k|A!Fx({H@sTYJ>LO7JsQTRXUj@~xo1grXoI;_Ig~*i;Pr({dN=NW!vwpwN z0ZymWt!A?cAj38HUZ>8w^Q-1h$Z_&7^_BF(Hjbw%d2wnqHLr?p;GF~0GzYz24?0uug?6_G zpbKz04_D`@SS%VlJ3CZ#xE3>+%+hc;G)JS6+39p7z|=HNqu1*((}dcakX{e?jsfke z3Qg0bBAv{TQ)q#Y@@&ijfL6$H3WTIlXuTalsUMeXnkG|ac<9FXsvac)@hQkMnX8a{ zbmMkV?+%oL1kl670U=trcB`C!J0+sGg6GjsQ&O zyRoq`ER{-7ExW4rNy8snEEeGlRr12>>Zs|9`2`yIOi1VA59vHIe0f6}!!TH_R+~2bbMdxq`&8+t>FdqEENmy) zLDC5w*u{$%N1*@m^761+tpcbL*s=b{v1ZjA0 z+NT%q&wGJs3 zi(@5u62B9wO9FIU;bUF-N4Rq3Yjkg{bOCGA)q{qpjE)=U0@QWuxe P00000NkvXXu0mjfrTL7& literal 0 HcmV?d00001 diff --git a/android/res/drawable-xhdpi/ic_chart_pin.png b/android/res/drawable-xhdpi/ic_chart_pin.png new file mode 100755 index 0000000000000000000000000000000000000000..390857010b32458458c2db9fa342b851cb3d9fd1 GIT binary patch literal 713 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 Hu0mjfuWlgh literal 0 HcmV?d00001 diff --git a/android/res/drawable-xhdpi/trang.png b/android/res/drawable-xhdpi/trang.png new file mode 100755 index 0000000000000000000000000000000000000000..816f2ada0892f2f4fbeb3cf1019c44ca64a3cfe2 GIT binary patch literal 172 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 J)WV#f{U1sQt`YzM literal 0 HcmV?d00001 diff --git a/android/res/drawable-xxhdpi/ic_chart_pin.png b/android/res/drawable-xxhdpi/ic_chart_pin.png new file mode 100755 index 0000000000000000000000000000000000000000..01cac2ac4d192d6d13c99512c9dce89d7bca5ae9 GIT binary patch literal 968 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 VAtpc+LZAQu002ovPDHLkV1lyaT1)@{ literal 0 HcmV?d00001 diff --git a/android/res/drawable-xxxhdpi/elevation.png b/android/res/drawable-xxxhdpi/elevation.png new file mode 100755 index 0000000000000000000000000000000000000000..450cec3f65188fc419c982101f644b0274956594 GIT binary patch literal 10526 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 literal 0 HcmV?d00001 diff --git a/android/res/drawable-xxxhdpi/ic_chart_pin.png b/android/res/drawable-xxxhdpi/ic_chart_pin.png new file mode 100755 index 0000000000000000000000000000000000000000..ea1016b979700a125d1c8c8cfdf244068973e207 GIT binary patch literal 1311 zcmV+)1>pLLP)|0~|yzBXY$H-e+fByV8^XAX{e~e(^^Q*1m+ynSZIZNO`5fPRE zr~rV40rw#hhM?%iMGWpg#y7#Qi(%gBQR=`ycw6wkeX&kNJ|g)NKSUTf5H}w_Kp+Lf z2H^kED!R|yGCH&-2|8^IAvWXpaf1uQ7=T`J_q*q1Bv`i@_^>bP0J!IuyI(a-=P&}` z|Jm|A&)EckqN(GYc42g<&P;Y=A^`v7cHINm$Qh7eICUK5)c)R^zsMS#31Io;eHlQN z1+!Zm;xw`-l?q@sf=|{V9mH4wvlV;~L`13O}YV zXTi@eZw4I>0nj<#`_kEd!fe9@7e?3bj)H^lJITNy0Hx#hrtJ%g8{uSo)wtYU?B5f8 z0H0R>m&p#YEc8W0=TQU!6d(*<^|X#(eOrJ|amk%?R*7KM$$6hdcj_>?Bl-YV{%UWN zl4%+R5GsZBU_#DLp!=29nuAVR3Pj6}tDX6p_SXfFXZ1;`X8c814_-a;(qtF?Diz!~ z+(2?fnku?}_q#p|T>x_K5A)F^@KKxPlU5nP5nPtNxw`lbQ^j99ic?5rQM1XXUs4V zQmKxm%Iy{+ta2ugJauSm_4}DgunUB$iCq5KponfzaDeNVy9?)>9W%8R&^goq z4ooM|c9D8`6YRanEHXI$25na=tu?}K;>#W5>>jgaMXLTbn#VMV;unbvRg5 zaDq&;l?Y0m(nU8hKzwU5$brLWUT*Mz# zolB=~v-q2@x40{x%$o>GD>X3ygh;Aka=|6<3IOpsm$v;y8z`n8yAnBeVSqj%AqH*? z7xz&oglBX8{!Q|NgRXv8;1w>T^cH~*= z++Ou&q|Khy1<8D3nguGQQ74l^vqB}42HFh2Ql>vE4W6Hg0JJf;QsNxYG}}qkF{02T zm0CqF!u`Awz!aDXbyxtpiuDN}yg9vBBMK#GpMpxJ)M4*HcNePDr4olaA^=Z7C3eq= zMWJa@Nm^rz0NAGzbs~?BBySEP08^k6n>yk%Fqq42WF;wetN^e0B3F z{uX6!08*`#bkH1{EqPJApT%oi z)R_tZ?KJzH%N}*620%Ohp%U&pBkyjusWVjoIxD#`l##Ie9}Ggeh+Sw%w9ce7`#&ku V#i|5O;Q0Um002ovPDHLkV1iyjUt|CP literal 0 HcmV?d00001 diff --git a/android/res/drawable-xxxhdpi/ic_graph_point.png b/android/res/drawable-xxxhdpi/ic_graph_point.png new file mode 100755 index 0000000000000000000000000000000000000000..e8f9b067865718a83a96f14bf177034eb81ef5b1 GIT binary patch literal 3163 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 B1VI1* literal 0 HcmV?d00001 diff --git a/android/res/drawable-xxxhdpi/ic_you_marker.png b/android/res/drawable-xxxhdpi/ic_you_marker.png new file mode 100755 index 0000000000000000000000000000000000000000..ab9c5e062e28d9bd9851e8be20bb7ebe623d2758 GIT binary patch literal 2083 zcmV+;2;BFHP)qJLY%nUS{`Z?{;Q)X(wr}xtp1t&;Gu@ z-~47~mw?ZOQn~^F)&W4m_{9J5yJu~e8U=ty0Pq+9ZUaCcAp}2tEyR!B45-}zu+0EN zAen-&H}H=Ta#N-QdmB%Hl+x7z@D>0doGg?R2U_C-q)HT+t5_bI zswstJb!m92d^yY&7(H6?G$917>bkfFG_3X+0KCBKJ(ULK=BS$Jn}pg_hL*S<0aLLu zMw0cGf$Y86)p z^ewVd6ulehuWxTq+Bw!N3h4;w1lRsBllWsqZxS7(*ZOG9oi(A3rpoY$t*?TRTtH)f zLs?pU?&@Hs{??e@;B~NG+HbBTJsim*-tE0 zO(~gX`kw`WL#$NofS(w7Wws5@ap&)@ z@i_{;lRETG=`fS_autC08>4NuIWlL(EFjN%XSy@n$5MKw%%#hs06S~Lkcfv}HSe0x z;O0Y38WhvI*7ZsU&lgR=*Kr;(E1>VmTCcGp1UqZOuq<3O3$(y5XaLs-Gtf1mySgd% zN(Y*vKiPaS8&OR_%e*J+d)unR@Jf|Ct2t5pHuA)pqJ`s&e-lDJCp>u`zoqULjhu;i z2=*i*qT}M$KX+G!p;?R-?n{Y6QU^9E>{<~!*pGm(0syY_vIP_AOa0mo_gw>^&+Xly zz{;qYES;`_ay`+R2K*E$dp9W8n0XNak09VdcI!bVnQmDVhQ@Ml(zJu1Oi`{P<>ji# z?d{c}ex}U@1pIxUSok)S>M`#&vzH`0{-CJb9 zmgggY*-H?`FAFYN9~7M`I6gRw68)Av`8nC8?wXpXakmyhd7?~%D56nxRg5Ix+o-fN zW9dae%wjN`$rjN(6qiIFHYvi%b+H>Vou+W2lU>IaYXR`wiqObA^^xD1n%Q~Kb0&ic zHYVDB7EyWPwK#if2#C>KR5?%U{JHiOnXcQ*qwX|aUcDHp{_9s^CT zeABV;MurlhrGcNmDC&DS@K_k;4sMRNv2$Q{HGyB)^Ux(j0kZn`Qdf2CZXWL@MRE8?2 z?x@Xk8pLD=5M(=yoOo_%^F7NU4DW0L7r?pop&wEW3X*dGgJ%q6TYK|z`Qa-@kr;ZqovIo;`eFi)x{Zl_yBC;y-z9i%x*2svcGW}y>a zi&Q(4TGf>YOXC=gBTdVJ3kzB3jDAT<)vYv5$YM`fEGemqNYgDKJ_BPp_ms-ZI_&*CEs_ao1a!xm64_>;G#-ZMw&u^iz!uE zX$k`_hE%;sQx-69#Svsw^&(9vK*NfbT{!$Mh^WfhAeo0f>2hD~-NtLrZCM8YJ zfI&!gb7iQfxh}#!pN-PQhtH*7`H}KLR`>R^4cVy5*_ppMsj z4^6I!_*tMq#@;zEs-C=)Zk}3zGPbURG}{OvU-<=x{rD1OY`(~is_ny>`oS5!8tc}s z3_aXkr*zsLU@iKZjtsc(fKE~^GB}*jeU)Y)K4`OK-U}uUkO+rc?n28Tx7G~Af=s?z z3=-k+*=qLrGPh%QRWDFLL$3IO7lN9vp5xc(Z}_(LMK>=wx*~C?^gmy0WD7!q(AEF| N002ovPDHLkV1luJ(qRAq literal 0 HcmV?d00001 diff --git a/android/res/drawable-xxxhdpi/trang.png b/android/res/drawable-xxxhdpi/trang.png new file mode 100755 index 0000000000000000000000000000000000000000..7443bcec2bddfedd17e07b91e70dbb645a46665e GIT binary patch literal 268 zcmV+n0rUQeP)H5hpLv) z9XM1%p-K&T8fjN*$kU{dt5QOWCR8aQMH8x`P>aS@MWGgrtMWoUnyShR^=PW9T4;-= zsH%mwXo{**XoM!kUclQ9rO*gX3Vne`DKt{EP_0EHH49Z9+Cwv|^3WcdS@j2T@-4>2 SMQ;ND0000 + + + + diff --git a/android/res/drawable/bg_your_location_pin.xml b/android/res/drawable/bg_your_location_pin.xml new file mode 100644 index 0000000000..4c4f078ef5 --- /dev/null +++ b/android/res/drawable/bg_your_location_pin.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/android/res/layout/altitude_chart.xml b/android/res/layout/altitude_chart.xml new file mode 100644 index 0000000000..f1784437b0 --- /dev/null +++ b/android/res/layout/altitude_chart.xml @@ -0,0 +1,52 @@ + + + + + + + + + + diff --git a/android/res/layout/current_location_marker.xml b/android/res/layout/current_location_marker.xml new file mode 100644 index 0000000000..6e21b2005f --- /dev/null +++ b/android/res/layout/current_location_marker.xml @@ -0,0 +1,32 @@ + + + + + + + diff --git a/android/res/layout/floating_marker_view.xml b/android/res/layout/floating_marker_view.xml new file mode 100644 index 0000000000..cd18973d37 --- /dev/null +++ b/android/res/layout/floating_marker_view.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + diff --git a/android/res/layout/place_page_details.xml b/android/res/layout/place_page_details.xml index 10465c97db..2984e1db5c 100644 --- a/android/res/layout/place_page_details.xml +++ b/android/res/layout/place_page_details.xml @@ -13,6 +13,8 @@ + + #FF4BB9E6 #FF1C85D6 #FF3C9BBE + #1E249CF2 #FFF54137 #F51E30 @@ -217,4 +218,5 @@ #DAF8FF #FF9600 + #1E96F0 diff --git a/android/res/values/dimens.xml b/android/res/values/dimens.xml index 4c33f3d2ff..cc0e7cc9f0 100644 --- a/android/res/values/dimens.xml +++ b/android/res/values/dimens.xml @@ -292,4 +292,6 @@ 328dp @dimen/margin_base_plus 88dp + 144dp + 72dp diff --git a/android/src/com/mapswithme/maps/widget/placepage/AxisValueFormatter.java b/android/src/com/mapswithme/maps/widget/placepage/AxisValueFormatter.java new file mode 100644 index 0000000000..9c7d08012a --- /dev/null +++ b/android/src/com/mapswithme/maps/widget/placepage/AxisValueFormatter.java @@ -0,0 +1,29 @@ +package com.mapswithme.maps.widget.placepage; + +import androidx.annotation.NonNull; +import com.github.mikephil.charting.formatter.DefaultValueFormatter; + +public class AxisValueFormatter extends DefaultValueFormatter +{ + private static final String DEF_DIMEN = "m"; + private static final int DEF_DIGITS = 1; + + @NonNull + private String mDimen = DEF_DIMEN; + + AxisValueFormatter() + { + super(DEF_DIGITS); + } + + @Override + public String getFormattedValue(float value) + { + return super.getFormattedValue(value) + mDimen; + } + + public void setDimen(@NonNull String dimen) + { + mDimen = dimen; + } +} diff --git a/android/src/com/mapswithme/maps/widget/placepage/CurrentLocationMarkerView.java b/android/src/com/mapswithme/maps/widget/placepage/CurrentLocationMarkerView.java new file mode 100644 index 0000000000..8830caacb3 --- /dev/null +++ b/android/src/com/mapswithme/maps/widget/placepage/CurrentLocationMarkerView.java @@ -0,0 +1,34 @@ +package com.mapswithme.maps.widget.placepage; + +import android.annotation.SuppressLint; +import android.content.Context; + +import androidx.annotation.NonNull; +import com.github.mikephil.charting.components.MarkerView; +import com.github.mikephil.charting.utils.MPPointF; +import com.mapswithme.maps.R; + +@SuppressLint("ViewConstructor") +class CurrentLocationMarkerView extends MarkerView +{ + /** + * Constructor. Sets up the MarkerView with a custom layout resource. + * + * @param context + */ + public CurrentLocationMarkerView(@NonNull Context context) + { + super(context, R.layout.current_location_marker); + } + + @Override + public MPPointF getOffset() { + return new MPPointF(-(getWidth() / 2f), -getHeight()); + } + + @Override + public MPPointF getOffsetForDrawingAtPoint(float posX, float posY) + { + return getOffset(); + } +} diff --git a/android/src/com/mapswithme/maps/widget/placepage/FloatingMarkerView.java b/android/src/com/mapswithme/maps/widget/placepage/FloatingMarkerView.java new file mode 100644 index 0000000000..048fc6c96e --- /dev/null +++ b/android/src/com/mapswithme/maps/widget/placepage/FloatingMarkerView.java @@ -0,0 +1,123 @@ + +package com.mapswithme.maps.widget.placepage; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.RectF; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import com.github.mikephil.charting.components.MarkerView; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.highlight.Highlight; +import com.github.mikephil.charting.utils.MPPointF; +import com.mapswithme.maps.R; + +@SuppressLint("ViewConstructor") +public class FloatingMarkerView extends MarkerView +{ + @NonNull + private final View mImage; + @NonNull + private final View mTextContainer; + @NonNull + private final View mSlidingContainer; + @NonNull + private final TextView mAltitudeView; + @NonNull + private final TextView mDistanceView; + private float mOffset; + + public FloatingMarkerView(@NonNull Context context) + { + super(context, R.layout.floating_marker_view); + mTextContainer = findViewById(R.id.text_container); + mImage = findViewById(R.id.image); + mSlidingContainer = findViewById(R.id.sliding_container); + mDistanceView = findViewById(R.id.distance_text); + mAltitudeView = findViewById(R.id.altitude); + } + + // runs every time the MarkerView is redrawn, can be used to update the + // content (user-interface) + @Override + public void refreshContent(Entry e, Highlight highlight) + { + updatePointValues(e); + + super.refreshContent(e, highlight); + } + + @Override + public MPPointF getOffset() + { + return new MPPointF(mOffset, -getHeight() / 2f); + } + + @Override + public MPPointF getOffsetForDrawingAtPoint(float posX, float posY) + { + return getOffset(); + } + + public void updateOffsets(Entry entry, Highlight highlight) + { + updateVertical(entry); + updateHorizontal(highlight); + } + + private void updateVertical(@NonNull Entry entry) + { + LayoutParams layoutParams = (LayoutParams) mTextContainer.getLayoutParams(); + float posY = entry.getY(); + if (posY + mSlidingContainer.getHeight() / 2f >= getChartView().getYChartMax()) + { + layoutParams.addRule(ALIGN_PARENT_BOTTOM); + layoutParams.removeRule(ALIGN_PARENT_TOP); + layoutParams.removeRule(CENTER_VERTICAL); + } + else if (posY - mSlidingContainer.getHeight() / 2f <= getChartView().getYChartMin()) + { + layoutParams.addRule(ALIGN_PARENT_TOP); + layoutParams.removeRule(ALIGN_PARENT_BOTTOM); + layoutParams.removeRule(CENTER_VERTICAL); + } + else + { + layoutParams.addRule(CENTER_VERTICAL); + layoutParams.removeRule(ALIGN_PARENT_TOP); + layoutParams.removeRule(ALIGN_PARENT_BOTTOM); + } + mTextContainer.setLayoutParams(layoutParams); + } + + private void updatePointValues(@NonNull Entry entry) + { + mDistanceView.setText(String.format("Distance : %s km", entry.getX())); + mAltitudeView.setText(String.format("%sm", entry.getY())); + } + + private void updateHorizontal(@NonNull Highlight highlight) + { + final float halfImg = Math.abs(mImage.getWidth()) / 2f; + final int wholeText = Math.abs(mTextContainer.getWidth()); + RectF rect = getChartView().getContentRect(); + + LayoutParams textParams =(LayoutParams) mTextContainer.getLayoutParams(); + LayoutParams imgParams = (LayoutParams) mImage.getLayoutParams(); + + boolean isLeftToRightDirection = highlight.getXPx() + halfImg + wholeText >= rect.right; + mOffset = isLeftToRightDirection ? -getWidth() + halfImg : -halfImg; + int anchorId = isLeftToRightDirection ? R.id.text_container : R.id.image; + LayoutParams toBecomeAnchor = isLeftToRightDirection ? textParams : imgParams; + LayoutParams toBecomeDependent = isLeftToRightDirection ? imgParams : textParams; + + toBecomeAnchor.removeRule(RelativeLayout.END_OF); + toBecomeDependent.addRule(RelativeLayout.END_OF, anchorId); + + mTextContainer.setLayoutParams(textParams); + mImage.setLayoutParams(imgParams); + } +} diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java index 88e98056a1..bb1a89aa50 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java @@ -39,6 +39,17 @@ import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.github.mikephil.charting.charts.LineChart; +import com.github.mikephil.charting.components.Legend; +import com.github.mikephil.charting.components.MarkerView; +import com.github.mikephil.charting.components.XAxis; +import com.github.mikephil.charting.components.YAxis; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.LineData; +import com.github.mikephil.charting.data.LineDataSet; +import com.github.mikephil.charting.formatter.ValueFormatter; +import com.github.mikephil.charting.highlight.Highlight; +import com.github.mikephil.charting.listener.OnChartValueSelectedListener; import com.mapswithme.maps.Framework; import com.mapswithme.maps.MwmActivity; import com.mapswithme.maps.MwmApplication; @@ -122,7 +133,7 @@ public class PlacePageView extends NestedScrollView RecyclerClickListener, NearbyAdapter.OnItemClickListener, EditBookmarkFragment.EditBookmarkListener, - Detachable + Detachable, OnChartValueSelectedListener { private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.MISC); @@ -130,6 +141,11 @@ public class PlacePageView extends NestedScrollView private static final String PREF_USE_DMS = "use_dms"; private static final String DISCOUNT_PREFIX = "-"; private static final String DISCOUNT_SUFFIX = "%"; + private static final int CHART_Y_LABEL_COUNT = 3; + private static final int CHART_X_LABEL_COUNT = 6; + private static final int CHART_ANIMATION_DURATION = 1500; + private static final int CHART_FILL_ALPHA = (int) (0.12 * 255); + private static final float CUBIC_INTENSITY = 0.2f; private boolean mIsDocked; private boolean mIsFloating; @@ -327,6 +343,18 @@ public class PlacePageView extends NestedScrollView @NonNull private View mCatalogPromoTitleView; + @SuppressWarnings("NullableProblems") + @NonNull + private LineChart mChart; + + @SuppressWarnings("NullableProblems") + @NonNull + private FloatingMarkerView mFloatingMarkerView; + + @SuppressWarnings("NullableProblems") + @NonNull + private MarkerView mCurrentLocationMarkerView; + void setScrollable(boolean scrollable) { mScrollable = scrollable; @@ -367,6 +395,30 @@ public class PlacePageView extends NestedScrollView mCatalogPromoController.detach(); } + @Override + public void onValueSelected(Entry e, Highlight h) + { + mFloatingMarkerView.updateOffsets(e, h); + Highlight curPos = getCurrentPosHighlight(); + + mChart.highlightValues(Arrays.asList(curPos, h), + Arrays.asList(mCurrentLocationMarkerView, mFloatingMarkerView)); + } + + @NonNull + private Highlight getCurrentPosHighlight() + { + LineData data = mChart.getData(); + final Entry entryForIndex = data.getDataSetByIndex(0).getEntryForIndex(5); + return new Highlight(entryForIndex.getX(), 0, 5); + } + + @Override + public void onNothingSelected() + { + highlightChartCurrentLocation(); + } + public interface SetMapObjectListener { void onSetMapObjectComplete(@NonNull NetworkPolicy policy, boolean isSameObject); @@ -497,6 +549,111 @@ public class PlacePageView extends NestedScrollView Sponsored.setInfoListener(this); initPlaceDescriptionView(); + + initChart(); + } + + private void initChart() + { + TextView topAlt = findViewById(R.id.highest_altitude); + topAlt.setText("10000m"); + TextView bottomAlt = findViewById(R.id.lowest_altitude); + bottomAlt.setText("100m"); + + + mChart = findViewById(R.id.elevation_profile_chart); + mChart.setBackgroundColor(Color.WHITE); + mChart.setTouchEnabled(true); + mChart.setOnChartValueSelectedListener(this); + mChart.setDrawGridBackground(false); + mChart.setDragEnabled(true); + mChart.setScaleEnabled(true); + mChart.setPinchZoom(true); + int sideOffset = getResources().getDimensionPixelSize(R.dimen.margin_base); + mChart.setExtraTopOffset(0); + int topOffset = getResources().getDimensionPixelSize(R.dimen.margin_base_plus) / 2; + mChart.setViewPortOffsets(sideOffset, topOffset, sideOffset, getResources().getDimensionPixelSize(R.dimen.margin_base_plus_quarter)); + mChart.getDescription().setEnabled(false); + mChart.setDrawBorders(false); + Legend l = mChart.getLegend(); + l.setEnabled(false); + initAxises(); + setData(20, 180); + + mFloatingMarkerView = new FloatingMarkerView(getActivity()); + mCurrentLocationMarkerView = new CurrentLocationMarkerView(getActivity()); + mFloatingMarkerView.setChartView(mChart); + mCurrentLocationMarkerView.setChartView(mChart); + highlightChartCurrentLocation(); + mChart.animateX(CHART_ANIMATION_DURATION); + } + + private void highlightChartCurrentLocation() + { + mChart.highlightValues(Collections.singletonList(getCurrentPosHighlight()), + Collections.singletonList(mCurrentLocationMarkerView)); + } + + private void initAxises() + { + XAxis x = mChart.getXAxis(); + x.setLabelCount(CHART_X_LABEL_COUNT, false); + x.setAvoidFirstLastClipping(true); + x.setDrawGridLines(false); + x.setTextColor(getResources().getColor(R.color.black_50)); + x.setPosition(XAxis.XAxisPosition.BOTTOM); + ValueFormatter xAxisFormatter = new AxisValueFormatter(); + x.setValueFormatter(xAxisFormatter); + + YAxis y = mChart.getAxisLeft(); + y.setLabelCount(CHART_Y_LABEL_COUNT, false); + y.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART); + y.setDrawGridLines(true); + y.setGridColor(getResources().getColor(R.color.black_12)); + y.setEnabled(true); + y.setTextColor(Color.TRANSPARENT); + y.setAxisLineColor(Color.WHITE); + int lineLength = getResources().getDimensionPixelSize(R.dimen.margin_eighth); + y.enableGridDashedLine(lineLength, 2 * lineLength, 0); + + mChart.getAxisRight().setEnabled(false); + } + + private void setData(int count, float range) + { + List values = new ArrayList<>(); + + for (int i = 0; i < count; i++) + { + float val = (float) (Math.random() * (range + 1)) + 20; + values.add(new Entry(i, val)); + } + + LineDataSet set; + + // create a dataset and give it a type + set = new LineDataSet(values, "DataSet 1"); + + set.setMode(LineDataSet.Mode.CUBIC_BEZIER); + set.setCubicIntensity(CUBIC_INTENSITY); + set.setDrawFilled(true); + set.setDrawCircles(false); + int lineThickness = getResources().getDimensionPixelSize(R.dimen.divider_width); + set.setLineWidth(lineThickness); + set.setCircleColor(getResources().getColor(R.color.base_accent)); + set.setColor(getResources().getColor(R.color.base_accent)); + set.setFillAlpha(CHART_FILL_ALPHA); + set.setDrawHorizontalHighlightIndicator(false); + set.setHighlightLineWidth(lineThickness); + set.setHighLightColor(getResources().getColor(R.color.base_accent_transparent)); + set.setFillColor(getResources().getColor(R.color.chart_color)); + + + LineData data = new LineData(set); + data.setValueTextSize(getResources().getDimensionPixelSize(R.dimen.text_size_icon_title)); + data.setDrawValues(false); + + mChart.setData(data); } public void initButtons(@NonNull ViewGroup buttons) diff --git a/data/copyright.html b/data/copyright.html index dc11dffb58..3b18985c78 100644 --- a/data/copyright.html +++ b/data/copyright.html @@ -212,6 +212,9 @@
  • Material Tap Target Prompt
    © 2016-2018 Samuel Wall; Apache License
  • +
  • MPAndroidChart
    + © 2020 Philipp Jahoda; Apache License
  • +
  • Linear Layout Manager
    © 2014 serso aka se.solovyev; Apache License