From c5952a1ae23b7830388b4a00ff658a076890c819 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Wed, 10 Jun 2020 13:38:46 +0300 Subject: [PATCH 01/31] Add images for Vessel height option --- .../drawable/img_help_vessel_height_day.xml | 99 +++++++++++++++++++ .../drawable/img_help_vessel_height_night.xml | 99 +++++++++++++++++++ 2 files changed, 198 insertions(+) create mode 100644 OsmAnd/res/drawable/img_help_vessel_height_day.xml create mode 100644 OsmAnd/res/drawable/img_help_vessel_height_night.xml diff --git a/OsmAnd/res/drawable/img_help_vessel_height_day.xml b/OsmAnd/res/drawable/img_help_vessel_height_day.xml new file mode 100644 index 0000000000..e8706295c9 --- /dev/null +++ b/OsmAnd/res/drawable/img_help_vessel_height_day.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OsmAnd/res/drawable/img_help_vessel_height_night.xml b/OsmAnd/res/drawable/img_help_vessel_height_night.xml new file mode 100644 index 0000000000..d0decd17a9 --- /dev/null +++ b/OsmAnd/res/drawable/img_help_vessel_height_night.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 2e167c9a4223e5dfa7405f29021709ec1f08cf11 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Wed, 10 Jun 2020 13:12:06 +0200 Subject: [PATCH 02/31] Add canada speed limit sign --- .../net/osmand/plus/OsmandApplication.java | 5 ++--- .../osmand/plus/helpers/WaypointHelper.java | 9 ++++---- .../plus/settings/backend/OsmandSettings.java | 22 +++++++++++-------- .../fragments/ScreenAlertsFragment.java | 2 +- .../mapwidgets/RouteInfoWidgetsFactory.java | 21 +++++++++++------- 5 files changed, 34 insertions(+), 25 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/OsmandApplication.java b/OsmAnd/src/net/osmand/plus/OsmandApplication.java index 4f1962166c..10d52563d1 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandApplication.java +++ b/OsmAnd/src/net/osmand/plus/OsmandApplication.java @@ -985,15 +985,14 @@ public class OsmandApplication extends MultiDexApplication { public void setupDrivingRegion(WorldRegion reg) { OsmandSettings.DrivingRegion drg = null; WorldRegion.RegionParams params = reg.getParams(); - boolean americanSigns = "american".equals(params.getRegionRoadSigns()); +// boolean americanSigns = "american".equals(params.getRegionRoadSigns()); boolean leftHand = "yes".equals(params.getRegionLeftHandDriving()); OsmandSettings.MetricsConstants mc1 = "miles".equals(params.getRegionMetric()) ? OsmandSettings.MetricsConstants.MILES_AND_FEET : OsmandSettings.MetricsConstants.KILOMETERS_AND_METERS; OsmandSettings.MetricsConstants mc2 = "miles".equals(params.getRegionMetric()) ? OsmandSettings.MetricsConstants.MILES_AND_METERS : OsmandSettings.MetricsConstants.KILOMETERS_AND_METERS; for (OsmandSettings.DrivingRegion r : OsmandSettings.DrivingRegion.values()) { - if (r.americanSigns == americanSigns && r.leftHandDriving == leftHand && - (r.defMetrics == mc1 || r.defMetrics == mc2)) { + if (r.leftHandDriving == leftHand && (r.defMetrics == mc1 || r.defMetrics == mc2)) { drg = r; break; } diff --git a/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java b/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java index 5cd0ce4b39..31dde7f59e 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java @@ -790,18 +790,19 @@ public class WaypointHelper { } else if (type == ALARMS) { //assign alarm list icons manually for now String typeString = ((AlarmInfo) point).getType().toString(); + OsmandSettings.DrivingRegion region = app.getSettings().DRIVING_REGION.get(); if (typeString.equals("SPEED_CAMERA")) { return AppCompatResources.getDrawable(uiCtx, R.drawable.mx_highway_speed_camera); } else if (typeString.equals("BORDER_CONTROL")) { return AppCompatResources.getDrawable(uiCtx, R.drawable.mx_barrier_border_control); } else if (typeString.equals("RAILWAY")) { - if (app.getSettings().DRIVING_REGION.get().americanSigns) { + if (region.isAmericanTypeSigns()) { return AppCompatResources.getDrawable(uiCtx, R.drawable.list_warnings_railways_us); } else { return AppCompatResources.getDrawable(uiCtx, R.drawable.list_warnings_railways); } } else if (typeString.equals("TRAFFIC_CALMING")) { - if (app.getSettings().DRIVING_REGION.get().americanSigns) { + if (region.isAmericanTypeSigns()) { return AppCompatResources.getDrawable(uiCtx, R.drawable.list_warnings_traffic_calming_us); } else { return AppCompatResources.getDrawable(uiCtx, R.drawable.list_warnings_traffic_calming); @@ -811,13 +812,13 @@ public class WaypointHelper { } else if (typeString.equals("STOP")) { return AppCompatResources.getDrawable(uiCtx, R.drawable.list_stop); } else if (typeString.equals("PEDESTRIAN")) { - if (app.getSettings().DRIVING_REGION.get().americanSigns) { + if (region.isAmericanTypeSigns()) { return AppCompatResources.getDrawable(uiCtx, R.drawable.list_warnings_pedestrian_us); } else { return AppCompatResources.getDrawable(uiCtx, R.drawable.list_warnings_pedestrian); } } else if (typeString.equals("TUNNEL")) { - if (app.getSettings().DRIVING_REGION.get().americanSigns) { + if (region.isAmericanTypeSigns()) { return AppCompatResources.getDrawable(uiCtx, R.drawable.list_warnings_tunnel_us); } else { return AppCompatResources.getDrawable(uiCtx, R.drawable.list_warnings_tunnel); diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java index 10037b6d0f..d81b241f53 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java @@ -4135,23 +4135,27 @@ public class OsmandSettings { */ public enum DrivingRegion { - EUROPE_ASIA(R.string.driving_region_europe_asia, MetricsConstants.KILOMETERS_AND_METERS, false, false), - US(R.string.driving_region_us, MetricsConstants.MILES_AND_FEET, false, true), - CANADA(R.string.driving_region_canada, MetricsConstants.KILOMETERS_AND_METERS, false, true), - UK_AND_OTHERS(R.string.driving_region_uk, MetricsConstants.MILES_AND_METERS, true, false), - JAPAN(R.string.driving_region_japan, MetricsConstants.KILOMETERS_AND_METERS, true, false), - AUSTRALIA(R.string.driving_region_australia, MetricsConstants.KILOMETERS_AND_METERS, true, true); + EUROPE_ASIA(R.string.driving_region_europe_asia, MetricsConstants.KILOMETERS_AND_METERS, false), + US(R.string.driving_region_us, MetricsConstants.MILES_AND_FEET, false), + CANADA(R.string.driving_region_canada, MetricsConstants.KILOMETERS_AND_METERS, false), + UK_AND_OTHERS(R.string.driving_region_uk, MetricsConstants.MILES_AND_METERS, true), + JAPAN(R.string.driving_region_japan, MetricsConstants.KILOMETERS_AND_METERS, true), + AUSTRALIA(R.string.driving_region_australia, MetricsConstants.KILOMETERS_AND_METERS, true); public final boolean leftHandDriving; - public final boolean americanSigns; public final MetricsConstants defMetrics; public final int name; - DrivingRegion(int name, MetricsConstants def, boolean leftHandDriving, boolean americanSigns) { + DrivingRegion(int name, MetricsConstants def, boolean leftHandDriving) { this.name = name; defMetrics = def; this.leftHandDriving = leftHandDriving; - this.americanSigns = americanSigns; + } + + public boolean isAmericanTypeSigns() { + return this == OsmandSettings.DrivingRegion.AUSTRALIA || + this == OsmandSettings.DrivingRegion.US || + this == OsmandSettings.DrivingRegion.CANADA; } public String getDescription(Context ctx) { diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ScreenAlertsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ScreenAlertsFragment.java index d2c83917e0..5a952bd074 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ScreenAlertsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ScreenAlertsFragment.java @@ -131,7 +131,7 @@ public class ScreenAlertsFragment extends BaseSettingsFragment { private Drawable getWarningIcon() { ApplicationMode selectedMode = getSelectedAppMode(); - boolean americanSigns = settings.DRIVING_REGION.getModeValue(selectedMode).americanSigns; + boolean americanSigns = settings.DRIVING_REGION.getModeValue(selectedMode).isAmericanTypeSigns(); if (settings.SHOW_TRAFFIC_WARNINGS.getModeValue(selectedMode)) { return getIcon(americanSigns ? R.drawable.warnings_traffic_calming_us : R.drawable.warnings_traffic_calming); } else if (settings.SHOW_PEDESTRIAN.getModeValue(selectedMode)) { diff --git a/OsmAnd/src/net/osmand/plus/views/mapwidgets/RouteInfoWidgetsFactory.java b/OsmAnd/src/net/osmand/plus/views/mapwidgets/RouteInfoWidgetsFactory.java index 66467d6cf7..331e11ea9a 100644 --- a/OsmAnd/src/net/osmand/plus/views/mapwidgets/RouteInfoWidgetsFactory.java +++ b/OsmAnd/src/net/osmand/plus/views/mapwidgets/RouteInfoWidgetsFactory.java @@ -1290,8 +1290,13 @@ public class RouteInfoWidgetsFactory { int locimgId = R.drawable.warnings_limit; String text = ""; String bottomText = ""; + OsmandSettings.DrivingRegion region = settings.DRIVING_REGION.get(); + boolean americanType = region.isAmericanTypeSigns(); if(alarm.getType() == AlarmInfoType.SPEED_LIMIT) { - if(settings.DRIVING_REGION.get().americanSigns){ + if(region == OsmandSettings.DrivingRegion.CANADA) { + // TODO @dmpr0 canada and delete comment + locimgId = R.drawable.warnings_speed_limit_us; + } else if(americanType){ locimgId = R.drawable.warnings_speed_limit_us; //else case is done by drawing red ring } @@ -1301,7 +1306,7 @@ public class RouteInfoWidgetsFactory { } else if(alarm.getType() == AlarmInfoType.BORDER_CONTROL) { locimgId = R.drawable.warnings_border_control; } else if(alarm.getType() == AlarmInfoType.HAZARD) { - if(settings.DRIVING_REGION.get().americanSigns){ + if (americanType) { locimgId = R.drawable.warnings_hazard_us; } else { locimgId = R.drawable.warnings_hazard; @@ -1310,7 +1315,7 @@ public class RouteInfoWidgetsFactory { //image done by drawing red ring text = "$"; } else if(alarm.getType() == AlarmInfoType.TRAFFIC_CALMING) { - if(settings.DRIVING_REGION.get().americanSigns){ + if (americanType) { locimgId = R.drawable.warnings_traffic_calming_us; } else { locimgId = R.drawable.warnings_traffic_calming; @@ -1318,19 +1323,19 @@ public class RouteInfoWidgetsFactory { } else if(alarm.getType() == AlarmInfoType.STOP) { locimgId = R.drawable.warnings_stop; } else if(alarm.getType() == AlarmInfoType.RAILWAY) { - if(settings.DRIVING_REGION.get().americanSigns){ + if (americanType) { locimgId = R.drawable.warnings_railways_us; } else { locimgId = R.drawable.warnings_railways; } } else if(alarm.getType() == AlarmInfoType.PEDESTRIAN) { - if(settings.DRIVING_REGION.get().americanSigns){ + if (americanType) { locimgId = R.drawable.warnings_pedestrian_us; } else { locimgId = R.drawable.warnings_pedestrian; } } else if(alarm.getType() == AlarmInfoType.TUNNEL) { - if(settings.DRIVING_REGION.get().americanSigns){ + if (americanType) { locimgId = R.drawable.warnings_tunnel_us; } else { locimgId = R.drawable.warnings_tunnel; @@ -1360,7 +1365,7 @@ public class RouteInfoWidgetsFactory { if (!Algorithms.objectEquals(text, this.textString)) { textString = text; this.text.setText(this.textString); - if (alarm.getType() == AlarmInfoType.SPEED_LIMIT && settings.DRIVING_REGION.get().americanSigns) { + if (alarm.getType() == AlarmInfoType.SPEED_LIMIT && americanType) { this.text.setPadding(0, AndroidUtils.dpToPx(layout.getContext(), 20f), 0, 0); } else { this.text.setPadding(0, 0, 0, 0); @@ -1370,7 +1375,7 @@ public class RouteInfoWidgetsFactory { bottomTextString = bottomText; this.bottomText.setText(this.bottomTextString); this.bottomText.setTextColor(ContextCompat.getColor(layout.getContext(), - settings.DRIVING_REGION.get().americanSigns ? R.color.color_black : R.color.color_white)); + americanType ? R.color.color_black : R.color.color_white)); } } } From 25218bc9a0117ebcfca04dd76cc850ff32b88475 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Wed, 10 Jun 2020 14:21:05 +0300 Subject: [PATCH 03/31] Add Maximum speed road sign for Canada --- .../drawable-hdpi/warnings_speed_limit_ca.png | Bin 0 -> 7065 bytes .../drawable-mdpi/warnings_speed_limit_ca.png | Bin 0 -> 3730 bytes .../drawable-xhdpi/warnings_speed_limit_ca.png | Bin 0 -> 11044 bytes .../drawable-xxhdpi/warnings_speed_limit_ca.png | Bin 0 -> 22507 bytes .../warnings_speed_limit_ca.png | Bin 0 -> 36581 bytes .../mapwidgets/RouteInfoWidgetsFactory.java | 3 +-- 6 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 OsmAnd/res/drawable-hdpi/warnings_speed_limit_ca.png create mode 100644 OsmAnd/res/drawable-mdpi/warnings_speed_limit_ca.png create mode 100644 OsmAnd/res/drawable-xhdpi/warnings_speed_limit_ca.png create mode 100644 OsmAnd/res/drawable-xxhdpi/warnings_speed_limit_ca.png create mode 100644 OsmAnd/res/drawable-xxxhdpi/warnings_speed_limit_ca.png diff --git a/OsmAnd/res/drawable-hdpi/warnings_speed_limit_ca.png b/OsmAnd/res/drawable-hdpi/warnings_speed_limit_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..add138f90189b1c3fd2d08341bdfa547dd980b1e GIT binary patch literal 7065 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 DToajS literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-mdpi/warnings_speed_limit_ca.png b/OsmAnd/res/drawable-mdpi/warnings_speed_limit_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..95870a1fe3917772290a6e9b9767a45a6893e9e5 GIT binary patch literal 3730 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 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xhdpi/warnings_speed_limit_ca.png b/OsmAnd/res/drawable-xhdpi/warnings_speed_limit_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..ab8c9d20d16ec9cbe12946eadd69a290b5045d96 GIT binary patch literal 11044 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�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%0DST^mq;1u-hNU@`W6z&O*yC17j54smpRx!XV#y? z!jEdLBi)cEItk|8ce&qixj(dWYA004n-yA;Ye!GW02~mlA>Qw3S7N>210s6c!%f>m zd<7PE*_D@(XD&9-YD^}u<3t)x62$T##{1I_vSt5wGGb@6##X4HFN+_iz!MjrxEHlt z;FQ4o!7BdwN0&5S=~I(+Q9fwdDO%{D_wk9K!2iSjfoHl7_b>KwO#QYw%4Hc%K2@CY znq8^hWF7_-0;IkzadR6`OjkntoUe8%L#X*5VCDf@ZFvZNiGc##<@LX+R?gf*josS8 z*mBW6z9=>Dsf%NG^LO|ndynD}($;dULchOOd0E~;vZXZaP~~eT1KSc!#tl%Lh8m5* zFutuO3H)qlN6EChKAC;Loqc~1&GZ2%YxCPq&wj<<`1bH5Tp+-LRKm{S?7Fz5J#4kl zie=#)lA?7NFyo4+qEn;2KiyCp%_=tMPA+OL!QXn#3KT+&!1mp;7BX2Df=OJ(d2y+S zt9c|_<3$HP3z8_c3&{c?mS77P3{zoUy4^-cyI(N7N;bQi1`?I&R^kMtUF{}7J9f-t zJN60w!m-WKW2y3DA^QQn2*%)2lYs*Mtb3xO0C6P_rU-TowunlD%X+(9Hc=AHf^>zj zdtwZ%aahOfWD>)sV2ta_x)gveX-Q$qG?7Yzaf^kOnvz9hL(9*Q{pKaoqt8a18tArG z;6fP~X&YX55kjZw;u7~fULj{)YMv*aJp!Os+c)2wb?Nnxz zSEF4G$Yf&#)Ps-ec!_uP^BOb~;%LI-8eK`h0^L-ZtZJ$74r+b|JluI2yOfm1gir87 zOAyd??jO=gc6cIuc{LJ5RQQ6#WwljKN>-lj!lXna2`(~IUoR_k?83U_r1!en1E3o! z-|=ZdiPU>AnmLt74H~Gw21mZQnD=<-5YD4OhaHRr-Jcr$8{POkplGV!!#y}vWh{=8 zb~M*^H}`-lF(b}%q2>_S>8NFz_77L$>hZ_8V4Y7vI#YNynY=V2g zGl-j8&Av?xI?4XL+M0Y!eqaRLU-LjqH&7xV`O!Y+!FTBxdT*Q(YG6ry55+bvr6W2Elp#y#TlnUW2`><<(2);DM=-FAz=@X zi@c;xjC}M+t2Sr9S&3~}ERDW-7RFF^%F+OBf5wR?IMu+V`I*i23)jK9r);w4d=`aH z4?1)BuzoPfTeZqbwnlU+6!h=#IHy$hm!VPMCzml&A1gk6u4EFAacNI^IDT>8^DvW# zSO(6n`e5&@#`TA8(nAQdY_sS={V4NVE5=3a^dbsduJBL-MSPYI2%D+;A_@5W@8M&) zu|nPHPnKreR%r)THfLp0EK5Pf_FtG#KNL5OkQ;ed!Sr)@Nlx01sP8);j=dia7Vn5j zn==6+V|aBRs3thBf4^IQ&kn;OwNbT06+YPVBF(g$KdfrLzutvtJihbiRVHUg@u#;R z(X@0os=3~{h6S)sPeaGffA#nOGx+jE3i#(}T_4PiS^Zb)uvy1?d7`$G4DazUy1Hw8(l*E@||S}?T+$9c2?DUE#TXX?@YbE*!Rp2H?U#&E)BBXWclyd*)ldO9zOXgUjo^-;a^+IU5PQ@r0V&SoFOWmT>Vi|f%?YS67p}AoQ zJ|rKBHaq1NxdPASZDnfG3pmT%=k$EJ*@QETxOCsEll3nyd(~~n^lit~z6Ez?fM;h9 z1CV2aItOPwG@k#PFbkWeIBepSPPt${3#M&qLbYTvL-e@h+TUqv>b#~byG87yzrju-nxBSJ_hQ**e6649-m61X zgDXLPn}DYyb`k<-bBkP6tLF?qt1^Yo|LN69{c8+teY<-tTXsN|r+H78^5ER`kByum zv^T7+wUQ?TJkVtGVxW2bVJKZ(&E9|tK?t!gniscTT(enxhYU~OzZi>S&*NmXNai2q z%;%=h7Q!mqh1bl4(WBPiF^=_rjhA_P;(xzao@;!j7j zLS}hn!(`Bp7kVwbhIg&m_gOc%HSULgt7JE}BTzE<%=f;TL^!&5;?AlG?6n`SJJ+PS6h`87zNnwh%1wcqC*C!M3WbU}|J zxuk^UJUi2S%ZgpyvT-?^PWT)}cEZh1GsD(Jo7-Q=X$kR~MiPhBs!C=Cp~$-Tau+!D zX*iQO$I?leO#_s>g#vn`sxK!G+Sh4D zW_p~hJAI7Ia53BSZ?0RNq$?ITu4YUN^IWm}SSC?3l3Uxi@W*!Fv3tiz)5Vi-zQOZ) zd*s+^b?)Uqfw+Z6(!$2gIIuV8ljm*ny+!O_=#a>@Wt`y{;eqD!XU3Ox>Eg64`$E5a7SC>+-?iqPl zAlqz^A)0Rdr0DtQ+0E|)Q`;$y{`A-CxuuyYqZf-#^<{1Q?FbQcrzEjyng*fhRfeA2 zvE$v^zx9jk6LTMrx8Oz)qX7TFxst4fmb3kLLly7q&KbhQyt*Ci7|sGt_G`|!S|^{| z*6@A#K5)o>@%~-bX^7vP>Ycnoi|ZV;;;yoh%&AGkBiY-(@+JKa)ymL2OQOv5L|^fK z-+J|TE0oElJ0oH{&8u!-Fq-`Wxzz37o&U2lig? zrT4M0I2v+`+#y$(e=%`>=|0{oR+N~4O5DLmLg=AzlBjIdXnGjLS4^(C=DKnvqFukJ zQJF2)K|BBNm9Jg_?t}6T*{;Y3I!+=9u7l`(_tjDDmiU$%%3Yj0_Mmc2?~G9raNi;E z`fAJ0bN2Ux^Z%@&cgVHTCYSHnBUkOGaxq@F7!NY06)<5|){D_z^g-fDsLd8y z;Ap>?xv&>qLuK5+p=-tY;#5%{qdomv;Qg#Z%g8cO$jQH$nvm}r3j4F)rkEW3o6B+; zw?bV!Bsit6?i<|Lr>1_p@ZuBH4n)c_@Orz@)tCRf=%^o$Z#qobl`mbagwkJ+H&hC( zOxp$ZH{Sa+MA-1%-W8LyE(9|AY#1(TjDRPuH`azS>%#Vhy(Z5qH$UwhM(&MYlq-L$ z?DmhgRcb5qpKna`Was+_l=cyiVZNfJOl{Z9;}+={Ta^~I<%fmFp=a0MRj}AXnnMC5 zZIAi~LxP1cv9YngW~Bd>-t+##<5dkKD0%?;nx=zj%ECuLAfb$#>*X?+a0ZJMF}rUd zDWxAG&xp&D^@cmmG|IH34nn=V{I)LTvWttJG@k34(JA*zIvw5oQc$>8oOq!66FcuY zH(NV;-!38As{Vd#Q_R#NqclxhV5jPO-o{V|ioG)V(Vt~qI@it0+%w6a5qu6lIQ1FA z>$e50ob)!?7ZHLka=&j586Yd*OUeEBXZ{aI{j# zwiSxW>~uPRI`K2}3#{_S-v4O#jm^mUFAY_rxAe!_)`zMQOeC)ji*UzJGKF%I!{GC+ zs-F0TU||od>95rhxQW)*ITXR)*B(2T!$a$4G_1nChkp@j6B!ws9y1HOB?om(R17Xu zTo5P}aM$R=l;rUF9l?AE@)${hOGVi3B~RgvVbI>@i-*R5dpAZ8#OqYh#{91$ZqNI6p|wlElXeZ8axZ^-lmyvGm$c}6G-}uX>pMWjTMC#G z`0dYm!7=|zH&c%P>?YZ^Gxt>IjEHP|XwTYPImfAc1@Run?p50ka5COT zK*)}NX3khN3RLt9DRR#*3y}&Baht(NQuNJOg)M%{-nVjVMf@6uQl{TGJaMT&Kq;k; zVB_jiq8a;t;swP>!tpf))Y{DAI@B5PCv%p}L%bJ3xnit|;M)1DCtM(bH; zckA*@X=~vhbI~{abD;n8)8;Ii71E+e%~buflGyb|YIACbey(uWA)R;Av(?p=L4dB+ zw8Z56#pLQ7^iF_-zR7Sd;7z6%QEX=0Laz_4mJ?*oFEDzFzR7vLp=O4WH<0;95J9aY zpMzeBe+OthF81ZVq+4@}5B3_k?bTLW3_LFU1=E0hnUmQVBLu%Q_Ozop#OHJtioV|9 z=bYlfBG!@8LG9sc$i?KtU%M6p0LNpfJb1z_j0E z1W)JgH|$8fDvxVur$5x_QC)=v?$=HkCP&Z7jKcl~*# z-7-c7ax<}o;##*DQ_R}-$)0(W>0b)-w^lMHURNj??ITQH;U3M;t{cadGEaJMf8FIR zdvncv(~HNxo&KkMAF-Pf>+-6x^)Q>hXEHXrHWwrl$+u~pn|Xivvn10`omPht^!w(w z#K_+%VWL`F9H)xY0D4cgRueCm8nx28;tZE)7lAsV1>N$0Q)M=J*aN$E7yZ`N60u5334%asnkJEt=>Zcu=5F39N zm*W1F?Ot^GFSq`<4g6HMQ#n~bl6}}c5wB%W9PFsyW_j}~kjL}djo{+zDF@AN^u=&( zX;JK-_Pd=-`fO4zT?WQoRf7|&mv=YDO?qoPT(wO0^Ij5Vu;AEK^gN~^6P})D-Y9LW zCyM#Y=5o~EoO@?ubxGbdURkOvBRNRrZ^YwH71~48{XckU9D>`CMy+gvM+;No4Czmq zQzE)KUh#Vti5Eud?I{#i@?-qP3DNNqsTFhdy-Gt-cDb40Y>}7!{=kC#xl$`B5bWPz zliiOZ_3z{E{{^ZERrdB?K6jqU5IgPB7tvo^UQU%e*4owUPi$vs3t3;JqN8!6ST2qq z+G=C0$0%IC(?@?D=OZw5PV4(0`r08dbWC)s?GEcmkb33p9)@zY`&*ktYyGKC(qn7A z=e2qp*Z10elyQjTWo>uwM7(Bia>PE?S4ny^cv)i|`YY$*{dExpJ7WN%ZTd0B9L(K^ zKm6gjPsrfS1PzgJg9CRSm*<9f1Luu^Q;exwOT%VGu?+$qG{jb>*0&DPH9JrXkmZl5 zyc`b*GJZ5ZFQ*;{p_d2AJz(XUc=!UrFZ(bVXz+N_hqTd`v-Yw{U)834jG$XxM0H|X z8;iox*iLhTqT?5+Tn`Fh{KtNS{kQ(Ox=S6tYz>w3N83!5J`eTXu8%Rc$a7=us2m@h zr2PH#_cipVGZxm4$~8I!aiA@wysu;E8L~R;>&;ElZR~gDIyPxEp}fC#wM^}Ku(7v3 zp$x_=zE^mc>ykF^$h$+(%11N1-j{8e{i`j^Bam zJL2z~dzb9J^V{~0`fdLXAK<;#E-(R1&&ZFgRr zd@c{v?T>fLqns~WYg1(`s$*i?So?MkmGRdL?eO(h$35R+7p1Gm>JksC$7u6f@gFiq1uhmhxmMr!T#cK`p{l0W9+~wMJ>G&%lemV5o75Bw*l{Whnc7y%#=lM2ZJJ#v84`TnR|ALll4_(jKS?ho8 zxV5X+Z@UNaUW~QhFX5bn(B6gjXXv>>z4192y5F(A%Uq-OOfC8RULLE6RKJIvwv1e-L##u)4i>cOV4#hoV-d@b5yRNWc-?qx2?F1%*OwW& zm*u^P&&SYv<-e4*jJ%uJZ^YUWZBM*=+;$~zWk)RA_H*?P>Ch4@qQ{Nf4G1@3R$0m{ z9A@V70D!nx9u6Vw{xgl-!$gkYdyx#b^}*{*1Yx_j&vO}_{Xyh&DeSv6P=_y9+UWns zcKh?fi`J>%UwdqVb9MT9de^kJ`0`YL$xB`Si-`s%+i*PgxjK&ioJ!w2UuW@H9GiH2 z=veJK1NWv=eqik5{!5j0RfOorcA$S_$73c{C*^=cAjqo_SyfDubBPNrr!19q!}j9PTzf> zf^xdk?$}=HPP+bH4AtA4#A{`IU6ne=+F$EK=RU=;5A}AQgK!^fW74^&@p&C+NAKCR zds$&h@U%E8M!Cq zHCegs55#?MVCj9X8BzDdJx&VYoc(ZYuQEB*j_p^@?Er?c`v! z8(z3^FE@*(iWTBkeL)wMp)f&=ofA0?>b{tJwHK#WU*+X1{TVC2s6YPG)wQKMPPOaB z^G`A+W995xkr;&Q%xc#rr!R36{=zY?e9hJR1~1}$6Xgv&Q?u9)f2=l+wfhy%9eaLj z_hD#ED&sZQ_s%%ij)(hE6@8Lpv;q@WRYcMeYVUt!_!8$06**RseFZsJ&1|T~rH>MR zqMpKJlWebahYsP6A}gD8YIRk_Th(iM0_xj8G^Uj? zE90Qo+#4#ZW7aI$o?iXbCss?}%UYjm_bn>s<2@g`mnZ1Y=yNdErwU>1Jck2)*{jsy z-^)&Y)VDzEanz2>Hh4W*Vw*7Z`4n#Q&@A40SnT04;$!l63WShGUJmL$kfmNP)2HqO z8z0{IppRa|*B9#^nq(qz_5aQ^R``?W9FWjf4Cb~!{huRRwHrBt0xft8$WzK%=;#k^s2ih|B4lecXhO(5{EevU) zDXtfo7>zz`PTNhjvhGX3@2l1s%qAO0keV>5l%?{?SgW6w=?e|N7&97psltS`)OGFH zqH!PU^H}*4SReGtE$B=2{?+OTHpaa=2jsKW@{!0_6m|>S9`DtHevRF;>a}Ct%RG}> zhHB;fGgcYjv>>_2h$0sEfY`eC5-wW2g$#{9#MTBHsB3h;)jvkq!izye?RD+(<;b|G z1z$8YG9F|7>-41!lUt~xcTcQuOSZ?ZbK(hlnet1uRyz#lTd$fR%Q|SNDy-XxdjKLRSfa9hbXHX#qRC%Fm*QSw&xuN Date: Wed, 10 Jun 2020 15:07:26 +0300 Subject: [PATCH 04/31] native pt by default increase missing stop search radius --- .../java/net/osmand/router/TransportStopsRouteReader.java | 6 +++++- .../net/osmand/plus/settings/backend/OsmandSettings.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java b/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java index 63705e250b..2d0080fe7f 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java @@ -23,7 +23,7 @@ import net.osmand.osm.edit.Way; import net.osmand.util.MapUtils; public class TransportStopsRouteReader { - public static final int MISSING_STOP_SEARCH_RADIUS = 15000; + public static final int MISSING_STOP_SEARCH_RADIUS = 30000; TLongObjectHashMap combinedRoutesCache = new TLongObjectHashMap(); Map> routesFilesCache = new LinkedHashMap>(); @@ -163,6 +163,10 @@ public class TransportStopsRouteReader { if (c == null) { c = combineRoute(route); combinedRoutesCache.put(route.getId(), c); + System.out.println(String.format("\n>> Route name: %s, id:%d", c.getName(), c.getId())); + for (TransportStop s: c.getForwardStops()) { + System.out.println(String.format(">> >> >> Stop name: %s, id:%d", s.getName(), s.getId())); + } } return c; } diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java index d81b241f53..a241f1c40e 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java @@ -3791,7 +3791,7 @@ public class OsmandSettings { // this value string is synchronized with settings_pref.xml preference name public final OsmandPreference SAFE_MODE = new BooleanPreference("safe_mode", false).makeGlobal(); - public final OsmandPreference PT_SAFE_MODE = new BooleanPreference("pt_safe_mode", true).makeGlobal(); + public final OsmandPreference PT_SAFE_MODE = new BooleanPreference("pt_safe_mode", false).makeGlobal(); public final OsmandPreference NATIVE_RENDERING_FAILED = new BooleanPreference("native_rendering_failed_init", false).makeGlobal(); public final OsmandPreference USE_OPENGL_RENDER = new BooleanPreference("use_opengl_render", From 37bd1a5b7af6b7e8673cfa9b4c42a1ed5df938af Mon Sep 17 00:00:00 2001 From: MadWasp79 Date: Wed, 10 Jun 2020 15:55:00 +0300 Subject: [PATCH 05/31] remove logs --- .../java/net/osmand/router/TransportStopsRouteReader.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java b/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java index 2d0080fe7f..616b66aa55 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/TransportStopsRouteReader.java @@ -163,10 +163,6 @@ public class TransportStopsRouteReader { if (c == null) { c = combineRoute(route); combinedRoutesCache.put(route.getId(), c); - System.out.println(String.format("\n>> Route name: %s, id:%d", c.getName(), c.getId())); - for (TransportStop s: c.getForwardStops()) { - System.out.println(String.format(">> >> >> Stop name: %s, id:%d", s.getName(), s.getId())); - } } return c; } From 818ed497fed9c95debaab834c3bbaafd129e82f5 Mon Sep 17 00:00:00 2001 From: Tymofij Lytvynenko Date: Tue, 9 Jun 2020 17:57:02 +0000 Subject: [PATCH 06/31] Translated using Weblate (Ukrainian) Currently translated at 99.8% (3378 of 3382 strings) --- OsmAnd/res/values-uk/strings.xml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index b253f4049f..d868711646 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -3738,7 +3738,7 @@ Час очікування екрану після увімкнення. («%1$s» вимикає вимкнення екрану.) Тримати екран увімкненим Тримати екран вимкненим - Використовується, тільки якщо \"%1$s\" вимкнено. + Якщо функція «%1$s» увімкнена, час роботи буде залежати від неї. Псевдопроєкція Меркатора Один файл зображення на плитку Файл SQLiteDB @@ -3760,9 +3760,14 @@ \nОдин тиждень - 10 080 хвилин. \nОдин місяць - 43 829 хвилин. Виберіть спосіб зберігання завантажених плиток. - Системний час очікування екрану + Усталений час очікування екрану Ви можете експортувати або імпортувати швидкі дії з профілями застосунку. Видалити все\? Ви дійсно бажаєте безповоротно видалити %d швидких дій\? Час очікування екрана + Вкажіть вагу транспортного засобу, для важких транспортних засобів можуть застосовуватися деякі обмеження на маршрути. + тонни + метри + Керування відображенням додаткових деталей на мапі + Нічна мапа \ No newline at end of file From 1a8738823082ef2fab3549cac56b51b700c5370b Mon Sep 17 00:00:00 2001 From: Ldm Public Date: Tue, 9 Jun 2020 07:54:56 +0000 Subject: [PATCH 07/31] Translated using Weblate (French) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-fr/strings.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index b0a88081b8..38a353e94a 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -766,7 +766,7 @@ Arrêter \n l\'exécution de l\'application en arrière-plan L\'écran est verrouillé - Positionner l\'intervalle d\'activation : + Définir l\'intervalle d\'activation : Configurer l\'écran Voies de circulation Éviter les voies non revêtues @@ -3715,7 +3715,7 @@ \n \n%2$s : Niveaux de zoom auxquels les tuiles originales seront visibles. En dehors de ces valeurs, il y aura une augmentation ou une diminution d\'échelle. L\'écran s\'allumera pour afficher les instructions de navigation. - Sélectionnez le temps d\'affichage de l\'écran après allumage (\"%1$s\" signifie pas d\'extinction). + Sélectionnez la durée d\'affichage de l\'écran après allumage (\"%1$s\" signifie pas d\'extinction). Si l\'option \"%1$s\" est activée, le temps d\'activité en dépendra. Délai d\'expiration en minutes. Les tuiles en cache seront rechargées après ce délai. Laissez ce champ vide pour ne jamais rafraîchir les tuiles pour cette source. \n @@ -3726,7 +3726,7 @@ Contrôle de l\'écran Utiliser le délai système pour l’extinction de l\'écran Options de réveil de l\'écran : - Sélectionnez les options de réveil de l’écran (assurez-vous qu’OsmAnd est au premier plan au moment du verrouillage de l’appareil) : + Sélectionnez les options d\'allumage de l’écran (assurez-vous qu’OsmAnd est au premier plan au moment du verrouillage de l’appareil) : Instructions de navigation Appuyez sur le bouton d\'alimentation de l\'appareil pour allumer l\'écran avec OsmAnd par dessus l’écran de verrouillage. Bouton marche / arrêt @@ -3757,4 +3757,5 @@ Contrôler la visibilité des autres détails affichés sur la carte Carte nocturne Tout le temps + Désactivé. Nécessite l\'option « Garder l\'écran allumé » sous « Délai d\'affichage de l\'écran ». \ No newline at end of file From b5560fda8783004bf11404bc17ad285e02dbb845 Mon Sep 17 00:00:00 2001 From: solokot Date: Tue, 9 Jun 2020 17:50:14 +0000 Subject: [PATCH 08/31] Translated using Weblate (Russian) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-ru/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 519310fe54..c563959468 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -3774,4 +3774,5 @@ Управление отображением дополнительных деталей на карте Всё время Ночная карта + Отключено. Необходимо включить «Держать экран включённым» в разделе «Время работы после пробуждения». \ No newline at end of file From d0b6bf395d62169cc884e8120a5e837cc3c85639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=C4=9Fuz=20Ersen?= Date: Tue, 9 Jun 2020 04:43:44 +0000 Subject: [PATCH 09/31] Translated using Weblate (Turkish) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-tr/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-tr/strings.xml b/OsmAnd/res/values-tr/strings.xml index a5ff6e6f75..cc8c066cc7 100644 --- a/OsmAnd/res/values-tr/strings.xml +++ b/OsmAnd/res/values-tr/strings.xml @@ -3730,4 +3730,5 @@ Gece haritası Her zaman ton + Devre dışı. \'Uyandıktan sonra zaman aşımı\' altındaki \'Ekranı açık tut\' seçeneği gerekir. \ No newline at end of file From d60c3c6d2ec00f848dca7742aeb96b96abb48d66 Mon Sep 17 00:00:00 2001 From: ihor_ck Date: Wed, 10 Jun 2020 13:45:27 +0000 Subject: [PATCH 10/31] Translated using Weblate (Ukrainian) Currently translated at 99.8% (3378 of 3382 strings) --- OsmAnd/res/values-uk/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index d868711646..a718b832ab 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -3738,7 +3738,7 @@ Час очікування екрану після увімкнення. («%1$s» вимикає вимкнення екрану.) Тримати екран увімкненим Тримати екран вимкненим - Якщо функція «%1$s» увімкнена, час роботи буде залежати від неї. + Якщо функцію \"%1$s\" увімкнено, час роботи залежатиме від неї. Псевдопроєкція Меркатора Один файл зображення на плитку Файл SQLiteDB From 010a0988bd06a981c1b590bc065282a18cb09a77 Mon Sep 17 00:00:00 2001 From: ace shadow Date: Tue, 9 Jun 2020 17:42:41 +0000 Subject: [PATCH 11/31] Translated using Weblate (Slovak) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-sk/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index 84f6528fa6..ba762b9aa4 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -3773,4 +3773,5 @@ Ovládajte viditeľnosť ďalších detailov zobrazených na mape Nočná mapa Vždy + Vypnuté. Vyžaduje \"Nechať obrazovku zapnutú\" pod \"Časový limit obrazovky po prebudení\". \ No newline at end of file From 4c3a66b678df0b87584bb36d6cd219f893cb5bce Mon Sep 17 00:00:00 2001 From: Ahmad Alfrhood Date: Tue, 9 Jun 2020 13:29:05 +0000 Subject: [PATCH 12/31] Translated using Weblate (Arabic) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-ar/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index f88942fbf9..ef68e86faa 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -3765,4 +3765,5 @@ التحكم في رؤية التفاصيل الإضافية الظاهرة على الخريطة خريطة ليلية كل الوقت + ذوي الاحتياجات الخاصه. يتطلب \"إبقاء الشاشة قيد تشغيل\" تحت \"المهلة بعد الاستيقاظ\". \ No newline at end of file From 6d3a428c86dbeab26a88410b4c491019d178065f Mon Sep 17 00:00:00 2001 From: iman Date: Tue, 9 Jun 2020 13:44:58 +0000 Subject: [PATCH 13/31] Translated using Weblate (Persian) Currently translated at 99.9% (3379 of 3382 strings) --- OsmAnd/res/values-fa/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml index 03a1324459..98bfcbb8c9 100644 --- a/OsmAnd/res/values-fa/strings.xml +++ b/OsmAnd/res/values-fa/strings.xml @@ -3770,7 +3770,7 @@ فشردن دکمهٔ خاموش/روشن دستگاه، صفحه را روشن می‌کند و OsmAnd را روی صفحهٔ قفل نمایش می‌دهد. دکمهٔ خاموش/روشن حسگر مجاورتی - صفحه را روشن نگه دار + روشن نگه داشتن صفحه صفحه را خاموش نگه دار یک فایل تصویر برای هر کاشی @@ -3805,4 +3805,5 @@ نمایانی جزئیات اضافه‌تر روی نقشه را کنترل کنید نقشهٔ شب همیشه + غیرفعال است. به گزینهٔ «روشن نگه داشتن صفحه» در قسمت «زمان خاموشی پس از بیدارباش» نیاز دارد. \ No newline at end of file From db8a27c3c35c3c11c7743f9b948df6ca252a0936 Mon Sep 17 00:00:00 2001 From: Mostafa Ahangarha Date: Tue, 9 Jun 2020 17:42:44 +0000 Subject: [PATCH 14/31] Translated using Weblate (Persian) Currently translated at 99.9% (3379 of 3382 strings) --- OsmAnd/res/values-fa/strings.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml index 98bfcbb8c9..9079d3c8d1 100644 --- a/OsmAnd/res/values-fa/strings.xml +++ b/OsmAnd/res/values-fa/strings.xml @@ -3772,7 +3772,7 @@ حسگر مجاورتی روشن نگه داشتن صفحه صفحه را خاموش نگه دار - + فراتابی مرکاتور یک فایل تصویر برای هر کاشی این پارامترها هنگام استفاده از منبع به‌عنوان نقشه یا رولایه/زیرلایه، بر نمایش آن اثر می‌گذارند. \n @@ -3806,4 +3806,7 @@ نقشهٔ شب همیشه غیرفعال است. به گزینهٔ «روشن نگه داشتن صفحه» در قسمت «زمان خاموشی پس از بیدارباش» نیاز دارد. + فراتابی شبه مرکاتور + اتصال + اتصال \ No newline at end of file From a8f31d0d81bf6b26562d67f3179d53d6420fa8a6 Mon Sep 17 00:00:00 2001 From: Osoitz Date: Tue, 9 Jun 2020 17:35:47 +0000 Subject: [PATCH 15/31] Translated using Weblate (Basque) Currently translated at 99.9% (3381 of 3382 strings) --- OsmAnd/res/values-eu/strings.xml | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/OsmAnd/res/values-eu/strings.xml b/OsmAnd/res/values-eu/strings.xml index d53feac5cd..ed61fc2439 100644 --- a/OsmAnd/res/values-eu/strings.xml +++ b/OsmAnd/res/values-eu/strings.xml @@ -1390,7 +1390,7 @@ Lorratza %2$s Editatu GPX bide-puntua Kokapena Irakurri gehiago - Zer berri + Zer da berria Proposatuko objektuak Eguneratu Igo @@ -3233,7 +3233,7 @@ Area honi dagokio: %1$s x %2$s Analitikak Erakutsi mapa blokeo pantailan nabigazioan zehar. Ibilbide ezarpenak hautatutako \"%1$s.\" profilean. - Pantaila denbora-muga pertsonalizatua + Esnatu ondorengo denbora-muga Unitate eta formatuak Itxura Maparen itxura @@ -3520,7 +3520,7 @@ Area honi dagokio: %1$s x %2$s Angelua Nire kokapenaren eta kalkulatutako ibilbidearen artean segmentu zuzen bat agertuko da ibilbidea berriz kalkulatu arte Nire kokapena eta ibilbidearen arteko angelu minimoa - Tasa + Baloratu %1$s %2$s %1$s: %2$s Zure grabatutako lorratzak, %1$s, edo OsmAnd karpetan daude. @@ -3750,7 +3750,7 @@ Area honi dagokio: %1$s x %2$s Hautatu pantailaren denbora-muga esnatu ondoren. (\"%1$s\" ez da aplikatzen denbora-muga.) Mantendu pantaila piztuta Mantendu pantaila itzalita - Hau eraginkorra izateko \"%1$s\" desgaitu behar da. + \"%1$s\" gaituta badago, jarduera denbora bere menpekoa izango da. Sasi-Mercator proiekzioa Irudi fitxategi bat lauzako SQLiteDB fitxategia @@ -3772,9 +3772,16 @@ Area honi dagokio: %1$s x %2$s \nAste bat 10080 minutu dira. \nHilabete bat 43829 minutu dira. Aukeratu nola gorde deskargatutako lauzak. - Sistemako pantailaren denbora-muga + Pantailaren denbora-muga lehenetsia Ekintza azkarrak esportatu edo inportatu ditzakezu aplikazio-profilekin. Ezabatu denak\? Ziur behin betiko ezabatu nahi dituzula %d ekintza azkar\? Pantailaren denbora-muga + Eman ibilgailuaren zabalera, ibilgailu zabalentzako zenbait ibilbide murriztu daitezke. + Eman zure ibilgailuaren altuera, ibilgailu altuetarako zenbait ibilbide murriztu daitezke. + Eman zure ibilgailuaren pisua, ibilgailu astunentzako zenbait ibilbide murriztu daitezke. + Desgaituta. \"Mantendu pantaila piztuta\" behar da \"Esnatu ondorengo denbora-muga\" atalean. + metro + Kontrolatu mapan agertzen diren xehetasun gehigarrien ikusgaitasuna + Gauerako mapa \ No newline at end of file From a86c7cc2f2c63845a4239cdc72c88ffbc27aa594 Mon Sep 17 00:00:00 2001 From: Mostafa Ahangarha Date: Wed, 10 Jun 2020 11:00:57 +0000 Subject: [PATCH 16/31] Translated using Weblate (Persian) Currently translated at 36.5% (1391 of 3804 strings) --- OsmAnd/res/values-fa/phrases.xml | 99 ++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/OsmAnd/res/values-fa/phrases.xml b/OsmAnd/res/values-fa/phrases.xml index 187f8db1c8..21fa180479 100644 --- a/OsmAnd/res/values-fa/phrases.xml +++ b/OsmAnd/res/values-fa/phrases.xml @@ -1352,4 +1352,103 @@ لوازم لوله‌کشی لوازم چوب کاشی و موزاییک + خبره + تازه‌کار + پیشرفته + متوسط + آسان + شن‌زار + چمن‌زار + چمن + باغ + دفتر + نقشه + دستی + منبع انرژی: گاز + انار + قهوه + خرما + انبه + کیوی + چای + هلو + گردو + گیلاس + نارگیل + موز + بادام + پرتغال + غیررسمی + ساختمان ویژه + ممنوع + مجاز + محتوا: نمک + محتوا: آب‌جو + محتوا: گاز + پاییز + تابستان + فصل مرطوب + فصل خشک + برند + رها شده + عرض + ارتفاع + بیشیه وزن + بیشینه ارتفاع + همراه + گوگل‌پلاس + اینستاگرام + یوتیوب + اسکایپ + رایانامه + وب‌گاه + تلفن + ساعت باز شد + خروج + ورودی اصلی + محدودکننده ارتفاع + منطقه نظامی + خودپرداز + فضای سیگار کشیدن + فضای بازی + فضای مذهبی + کاتولیک یونان + کلیسای انگلیس + پروتستان + سنی + بهایی + آکواریوم + تانک تاریخی + هواپیمای تاریخی + هاکی روی یخ + دفتر مشاور مالیات + دفتر بنیاد + دفتر حزب سیاسی + سیلو + رادار + کانال + علفزار + جنگل با مدیریت انسانی + خرده‌فروشی + درختان کریسمس + لامپ‌های کم‌مصرف + بسته‌بندی کاغذی + بسته‌بندی پلاستیکی + زباله سبز + زباله (کیسه‌های سیاه) + برجک برق + تیر برق + گاز مایع (ال‌پی‌جی) + دیزل + فشار + ویدئو + وضعیت + نوع + نوع + برداشت وجه + دسترسی معلولان + دسترسی موتور سیکلت + دسترسی کاروان + دسترسی اتوبوس + بله \ No newline at end of file From 6f8329ea40b32ffe6e5cb273113158b1741b0f56 Mon Sep 17 00:00:00 2001 From: Eduardo Addad de Oliveira Date: Tue, 9 Jun 2020 16:37:09 +0000 Subject: [PATCH 17/31] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-pt-rBR/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index 965c1cc574..152001e041 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -3762,4 +3762,5 @@ Pôr do Sol: %2$s Controlar a visibilidade dos detalhes adicionais mostrados no mapa Mapa noturno Tempo todo + Desativado. Requer \'manter a tela ligada\' em \'tempo limite após a ativação\'. \ No newline at end of file From 6872a6615873685ea463153d61c23fd38b795622 Mon Sep 17 00:00:00 2001 From: Verdulo Date: Tue, 9 Jun 2020 12:27:04 +0000 Subject: [PATCH 18/31] Translated using Weblate (Esperanto) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-eo/strings.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index c4e4e9f45b..2cd18b210d 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -1305,7 +1305,14 @@ Intervalo de enreta kurs-registrado Difini intervalon de enreta kurs-registrado. Adreso de enreta kurs-registrado - Difini la retadreson uzante la jenajn argumentojn: latitudo={0}, longitudo={1}, tempomarko={2}, hdop(horizontala diluo de precizo)={3}, altitudo={4}, rapido={5}, birado={6}. + Difini la retadreson uzante la jenajn argumentojn: +\n lat={0} (latitudo), +\n lon={1} (longitudo), +\n timestamp={2} (tempmarko), +\n hdop={3} (horizontala diluo de precizo), +\n altitude={4} (altitudo), +\n speed={5} (rapido), +\n bearing={6} (birado). Ŝanĝi pozicion de marko Nuna spuro Konservu kurson uzante GPX-fenestraĵon aŭ per \'Registrado de kurso\' agordoj. @@ -3768,4 +3775,5 @@ Alĝustigi videblon de pliaj detaloj montrataj sur la mapo Nokta mapo Ĉiam + Malŝaltita. Postulas “teni ekranon aktiva” en la sekcio “aktiveca periodo de ekrano”. \ No newline at end of file From cdbe0594aed087f6cd7bec542cef38748e6ef7b3 Mon Sep 17 00:00:00 2001 From: Verdulo Date: Tue, 9 Jun 2020 17:33:46 +0000 Subject: [PATCH 19/31] Translated using Weblate (Esperanto) Currently translated at 100.0% (3804 of 3804 strings) --- OsmAnd/res/values-eo/phrases.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-eo/phrases.xml b/OsmAnd/res/values-eo/phrases.xml index 3e2abd6b28..baa3f8cb74 100644 --- a/OsmAnd/res/values-eo/phrases.xml +++ b/OsmAnd/res/values-eo/phrases.xml @@ -253,7 +253,7 @@ Fajrobrigada balailo Fajrobrigada tubo Fajrobrigada akvorezervujo - Salujego + Ujo kun sablo/salo Ambulanca stacio Stacio de civila defendo Vivsava rekonebla signo @@ -2924,7 +2924,7 @@ suki (taja varmega poto) udonoj (japanaj nudeloj) brasserie (steko kun terpomfingroj) - bubble tea/boba (tajvana teo-trinnkaĵo) + bobelteo/boba (tajvana teo-trinnkaĵo) jakitorio (rostita birdaĵo) cidroj (pomvinoj) viando From be4e18c210e4854c04f5cdad26fcf06d43e9d262 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sveinn=20=C3=AD=20Felli?= Date: Tue, 9 Jun 2020 12:36:42 +0000 Subject: [PATCH 20/31] Translated using Weblate (Icelandic) Currently translated at 99.6% (3370 of 3382 strings) --- OsmAnd/res/values-is/strings.xml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-is/strings.xml b/OsmAnd/res/values-is/strings.xml index e15cf86006..6b0602d089 100644 --- a/OsmAnd/res/values-is/strings.xml +++ b/OsmAnd/res/values-is/strings.xml @@ -3257,7 +3257,7 @@ Greiningar Birta kort á læsiskjá á meðan leiðsögn stendur. Stillingar leiðarvals í valda sniðinu \"%1$s\". - Vökutími + Tímamörk eftir vöknun Einingar og snið þeirra Útlit Útlit landakorts @@ -3724,13 +3724,13 @@ Óstudd tegund Leiðsagnarleiðbeiningar Eftirlæti - Takmarkað af \"%1$s\", ef það er virkt. + Ef \"%1$s\" valkosturinn er virkur, mun tími virkni vera háður honum. Leiðsagnarsnið Halda áfram OsmAnd + Mapillary Bæta við / breyta eftirlæti Birta almenningssamgöngur - Tímamörk kerfis fyrir skjá + Sjálfgefin tímamörk fyrir skjá Hnappur til að birta eða fela almenningssamgöngur á kortinu. Nálægðarskynjari Ferðalög (Wikipedia og Wikivoyage) @@ -3746,4 +3746,13 @@ \nEin vika er 10.080 mínútur. \nEinn mánuður er 43 829 mínútur. Til baka í breytingar + Slekkur á skjánum eftir að tímamörkum kerfis fyrir skjá er náð. + Ertu viss um að þú viljir eyða %d flýtiaðgerðum\? + Ef ýtt er á þennan aðgerðahnapp verður skipt á milli valinna notkunarsniða. + Eyða öllu\? + Tímamörk skjás + tónar + metrar + Stýra sýnileika viðbótaratriða sem birtast á kortinu + Næturkort \ No newline at end of file From 763edb186115c744d89e4464a7e9cc3d52e1ff64 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Tue, 9 Jun 2020 00:55:58 +0000 Subject: [PATCH 21/31] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-zh-rTW/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index a99010cf29..c8f65f5731 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -3770,4 +3770,5 @@ 控制地圖上顯示的額外詳細資訊可見程度 夜晚地圖 全部時間 + 已停用。需要「喚醒後逾時」的「保持螢幕開啟」。 \ No newline at end of file From 2223d9918ec07e9e72180f1c8f275ffa6a44ee22 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Wed, 10 Jun 2020 18:25:43 +0200 Subject: [PATCH 22/31] Fix #6439 #6417 --- .../osmand/router/RouteResultPreparation.java | 183 +++++++++--------- .../net/osmand/router/RouteSegmentResult.java | 8 +- .../router/RouteResultPreparationTest.java | 4 +- 3 files changed, 98 insertions(+), 97 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java b/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java index 9628dff602..0634602f3b 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java @@ -1,6 +1,24 @@ package net.osmand.router; -import net.osmand.NativeLibrary; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import gnu.trove.iterator.TIntIterator; +import gnu.trove.list.array.TIntArrayList; +import gnu.trove.set.hash.TIntHashSet; import net.osmand.PlatformUtil; import net.osmand.binary.BinaryMapIndexReader; import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule; @@ -19,26 +37,6 @@ import net.osmand.util.Algorithms; import net.osmand.util.MapAlgorithms; import net.osmand.util.MapUtils; -import org.apache.commons.logging.Log; -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import gnu.trove.iterator.TIntIterator; -import gnu.trove.list.array.TIntArrayList; -import gnu.trove.set.hash.TIntHashSet; - public class RouteResultPreparation { public static boolean PRINT_TO_CONSOLE_ROUTE_INFORMATION_TO_TEST = false; @@ -623,7 +621,7 @@ public class RouteResultPreparation { // calculateStatistics(result); } - private void calculateStatistics(List result) { + protected void calculateStatistics(List result) { InputStream is = RenderingRulesStorage.class.getResourceAsStream("default.render.xml"); final Map renderingConstants = new LinkedHashMap(); try { @@ -800,13 +798,22 @@ public class RouteResultPreparation { } if (dist < mergeDistance) { mergeTurnLanes(leftside, currentSegment, nextSegment); - inferCommonActiveLane(currentSegment.getTurnType(), nextSegment.getTurnType()); + TurnType turnType = currentSegment.getTurnType(); + TIntHashSet possibleTurn = getPossibleTurnsFromActiveLanes(turnType.getLanes(), true); + if (possibleTurn.size() == 1) { + TurnType tt = TurnType.valueOf(possibleTurn.iterator().next(), currentSegment.getTurnType().isLeftSide()); + tt.setLanes(turnType.getLanes()); + tt.setSkipToSpeak(turnType.isSkipToSpeak()); + currentSegment.setTurnType(tt); + turnType = tt; + } + inferCommonActiveLane(turnType, nextSegment.getTurnType()); merged = true; } } if (!merged) { TurnType tt = currentSegment.getTurnType(); - inferActiveTurnLanesFromTurn(tt, TurnType.C); + inferActiveTurnLanesFromTurn(tt, tt.getValue()); } nextSegment = currentSegment; dist = 0; @@ -984,11 +991,9 @@ public class RouteResultPreparation { if(turnSet.size() == 1) { singleTurn = turnSet.iterator().next(); } else if(currentTurn.goAhead() && turnSet.contains(nextTurn.getValue())) { - if(currentTurn.isPossibleLeftTurn() && - TurnType.isLeftTurn(nextTurn.getValue())) { - singleTurn = nextTurn.getValue(); - } else if(currentTurn.isPossibleLeftTurn() && - TurnType.isLeftTurn(nextTurn.getActiveCommonLaneTurn())) { + if (currentTurn.isPossibleLeftTurn() && TurnType.isLeftTurn(nextTurn.getValue())) { + singleTurn = nextTurn.getValue(); + } else if (currentTurn.isPossibleLeftTurn() && TurnType.isLeftTurn(nextTurn.getActiveCommonLaneTurn())) { singleTurn = nextTurn.getActiveCommonLaneTurn(); } else if(currentTurn.isPossibleRightTurn() && TurnType.isRightTurn(nextTurn.getValue())) { @@ -1054,7 +1059,7 @@ public class RouteResultPreparation { // add description about turn double mpi = MapUtils.degreesDiff(prev.getBearingEnd(), rr.getBearingBegin()); if(noAttachedRoads){ - // TODO VICTOR : look at the comment inside direction route + // VICTOR : look at the comment inside direction route // ? avoid small zigzags is covered at (search for "zigzags") // double begin = rr.getObject().directionRoute(rr.getStartPointIndex(), rr.getStartPointIndex() < // rr.getEndPointIndex(), 25); @@ -1269,17 +1274,8 @@ public class RouteResultPreparation { String[] splitLaneOptions = turnLanes.split("\\|", -1); int activeBeginIndex = findActiveIndex(rawLanes, splitLaneOptions, rs.leftLanes, true, rs.leftLanesInfo, rs.roadsOnLeft, rs.addRoadsOnLeft); - - if(!rs.keepLeft && activeBeginIndex != -1 && - splitLaneOptions.length > 0 && !splitLaneOptions[splitLaneOptions.length - 1].contains(";")) { - activeBeginIndex = Math.max(activeBeginIndex, 1); - } int activeEndIndex = findActiveIndex(rawLanes, splitLaneOptions, rs.rightLanes, false, rs.rightLanesInfo, rs.roadsOnRight, rs.addRoadsOnRight); - if(!rs.keepRight && activeEndIndex != -1 && - splitLaneOptions.length > 0 && !splitLaneOptions[0].contains(";") ) { - activeEndIndex = Math.min(activeEndIndex, rawLanes.length - 1); - } if (activeBeginIndex == -1 || activeEndIndex == -1 || activeBeginIndex > activeEndIndex) { // something went wrong return createSimpleKeepLeftRightTurn(leftSide, prevSegm, currentSegm, rs); @@ -1292,6 +1288,12 @@ public class RouteResultPreparation { int tp = inferSlightTurnFromLanes(rawLanes, rs); if (tp != t.getValue() && tp != 0) { t = TurnType.valueOf(tp, leftSide); + } else { + if (rs.keepRight && TurnType.getSecondaryTurn(rawLanes[activeEndIndex]) == 0) { + t = TurnType.valueOf(TurnType.getPrimaryTurn(rawLanes[activeEndIndex]), leftSide); + } else if (rs.keepLeft && TurnType.getSecondaryTurn(rawLanes[activeBeginIndex]) == 0) { + t = TurnType.valueOf(TurnType.getPrimaryTurn(rawLanes[activeBeginIndex]), leftSide); + } } } else { for (int k = 0; k < rawLanes.length; k++) { @@ -1597,59 +1599,11 @@ public class RouteResultPreparation { } private int inferSlightTurnFromLanes(int[] oLanes, RoadSplitStructure rs) { - TIntHashSet possibleTurns = new TIntHashSet(); - for (int i = 0; i < oLanes.length; i++) { - if ((oLanes[i] & 1) == 0) { - continue; - } - if (possibleTurns.isEmpty()) { - // Nothing is in the list to compare to, so add the first elements - possibleTurns.add(TurnType.getPrimaryTurn(oLanes[i])); - if (TurnType.getSecondaryTurn(oLanes[i]) != 0) { - possibleTurns.add(TurnType.getSecondaryTurn(oLanes[i])); - } - if (TurnType.getTertiaryTurn(oLanes[i]) != 0) { - possibleTurns.add(TurnType.getTertiaryTurn(oLanes[i])); - } - } else { - TIntArrayList laneTurns = new TIntArrayList(); - laneTurns.add(TurnType.getPrimaryTurn(oLanes[i])); - if (TurnType.getSecondaryTurn(oLanes[i]) != 0) { - laneTurns.add(TurnType.getSecondaryTurn(oLanes[i])); - } - if (TurnType.getTertiaryTurn(oLanes[i]) != 0) { - laneTurns.add(TurnType.getTertiaryTurn(oLanes[i])); - } - possibleTurns.retainAll(laneTurns); - if (possibleTurns.isEmpty()) { - // No common turns, so can't determine anything. - return 0; - } - } + TIntHashSet possibleTurns = getPossibleTurnsFromActiveLanes(oLanes, false); + if (possibleTurns.isEmpty()) { + // No common turns, so can't determine anything. + return 0; } - - // Remove all turns from lanes not selected...because those aren't it - for (int i = 0; i < oLanes.length; i++) { - if ((oLanes[i] & 1) == 0 && !possibleTurns.isEmpty()) { - possibleTurns.remove((Integer) TurnType.getPrimaryTurn(oLanes[i])); - if (TurnType.getSecondaryTurn(oLanes[i]) != 0) { - possibleTurns.remove((Integer) TurnType.getSecondaryTurn(oLanes[i])); - } - if (TurnType.getTertiaryTurn(oLanes[i]) != 0) { - possibleTurns.remove((Integer) TurnType.getTertiaryTurn(oLanes[i])); - } - } - } - // remove all non-slight turns // TEST don't pass -// if(possibleTurns.size() > 1) { -// TIntIterator it = possibleTurns.iterator(); -// while(it.hasNext()) { -// int nxt = it.next(); -// if(!TurnType.isSlightTurn(nxt)) { -// it.remove(); -// } -// } -// } int infer = 0; if (possibleTurns.size() == 1) { infer = possibleTurns.iterator().next(); @@ -1688,6 +1642,53 @@ public class RouteResultPreparation { return infer; } + private TIntHashSet getPossibleTurnsFromActiveLanes(int[] oLanes, boolean onlyPrimary) { + TIntHashSet possibleTurns = new TIntHashSet(); + for (int i = 0; i < oLanes.length; i++) { + if ((oLanes[i] & 1) == 0) { + continue; + } + if (possibleTurns.isEmpty()) { + // Nothing is in the list to compare to, so add the first elements + possibleTurns.add(TurnType.getPrimaryTurn(oLanes[i])); + if (!onlyPrimary && TurnType.getSecondaryTurn(oLanes[i]) != 0) { + possibleTurns.add(TurnType.getSecondaryTurn(oLanes[i])); + } + if (!onlyPrimary && TurnType.getTertiaryTurn(oLanes[i]) != 0) { + possibleTurns.add(TurnType.getTertiaryTurn(oLanes[i])); + } + } else { + TIntArrayList laneTurns = new TIntArrayList(); + laneTurns.add(TurnType.getPrimaryTurn(oLanes[i])); + if (!onlyPrimary && TurnType.getSecondaryTurn(oLanes[i]) != 0) { + laneTurns.add(TurnType.getSecondaryTurn(oLanes[i])); + } + if (!onlyPrimary && TurnType.getTertiaryTurn(oLanes[i]) != 0) { + laneTurns.add(TurnType.getTertiaryTurn(oLanes[i])); + } + possibleTurns.retainAll(laneTurns); + if (possibleTurns.isEmpty()) { + // No common turns, so can't determine anything. + return possibleTurns; + } + } + } + + // Remove all turns from lanes not selected...because those aren't it + for (int i = 0; i < oLanes.length; i++) { + if ((oLanes[i] & 1) == 0 && !possibleTurns.isEmpty()) { + possibleTurns.remove((Integer) TurnType.getPrimaryTurn(oLanes[i])); + if (TurnType.getSecondaryTurn(oLanes[i]) != 0) { + possibleTurns.remove((Integer) TurnType.getSecondaryTurn(oLanes[i])); + } + if (TurnType.getTertiaryTurn(oLanes[i]) != 0) { + possibleTurns.remove((Integer) TurnType.getTertiaryTurn(oLanes[i])); + } + } + } + return possibleTurns; + } + private boolean isMotorway(RouteSegmentResult s){ String h = s.getObject().getHighway(); return "motorway".equals(h) || "motorway_link".equals(h) || diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RouteSegmentResult.java b/OsmAnd-java/src/main/java/net/osmand/router/RouteSegmentResult.java index 9b8e72435e..36d5d0260b 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RouteSegmentResult.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RouteSegmentResult.java @@ -21,6 +21,8 @@ import gnu.trove.map.hash.TIntObjectHashMap; public class RouteSegmentResult implements StringExternalizable { + // this should be bigger (50-80m) but tests need to be fixed first + private static final float DIST_BEARING_DETECT = 5; private final RouteDataObject object; private int startPointIndex; private int endPointIndex; @@ -444,11 +446,11 @@ public class RouteSegmentResult implements StringExternalizable } public float getBearingBegin() { - return (float) (object.directionRoute(startPointIndex, startPointIndex < endPointIndex) / Math.PI * 180); + return (float) (object.directionRoute(startPointIndex, startPointIndex < endPointIndex, DIST_BEARING_DETECT) / Math.PI * 180); } public float getBearing(int point, boolean plus) { - return (float) (object.directionRoute(point, plus) / Math.PI * 180); + return (float) (object.directionRoute(point, plus, DIST_BEARING_DETECT) / Math.PI * 180); } public float getDistance(int point, boolean plus) { @@ -456,7 +458,7 @@ public class RouteSegmentResult implements StringExternalizable } public float getBearingEnd() { - return (float) (MapUtils.alignAngleDifference(object.directionRoute(endPointIndex, startPointIndex > endPointIndex) - Math.PI) / Math.PI * 180); + return (float) (MapUtils.alignAngleDifference(object.directionRoute(endPointIndex, startPointIndex > endPointIndex, DIST_BEARING_DETECT) - Math.PI) / Math.PI * 180); } public void setSegmentTime(float segmentTime) { diff --git a/OsmAnd-java/src/test/java/net/osmand/router/RouteResultPreparationTest.java b/OsmAnd-java/src/test/java/net/osmand/router/RouteResultPreparationTest.java index 31f4b3b4fa..d745a73327 100644 --- a/OsmAnd-java/src/test/java/net/osmand/router/RouteResultPreparationTest.java +++ b/OsmAnd-java/src/test/java/net/osmand/router/RouteResultPreparationTest.java @@ -38,15 +38,13 @@ public class RouteResultPreparationTest { private static RoutePlannerFrontEnd fe; private static RoutingContext ctx; - private String testName; private LatLon startPoint; private LatLon endPoint; private Map expectedResults; - private Log log = PlatformUtil.getLog(RouteResultPreparationTest.class); + protected Log log = PlatformUtil.getLog(RouteResultPreparationTest.class); public RouteResultPreparationTest(String testName, LatLon startPoint, LatLon endPoint, Map expectedResults) { - this.testName = testName; this.startPoint = startPoint; this.endPoint = endPoint; this.expectedResults = expectedResults; From 5b7fea4d8237b2711f0ec0c3ca3990cf60ac695f Mon Sep 17 00:00:00 2001 From: Tymofij Lytvynenko Date: Wed, 10 Jun 2020 17:43:05 +0000 Subject: [PATCH 23/31] Translated using Weblate (Ukrainian) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-uk/strings.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index a718b832ab..4992900277 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -3269,7 +3269,7 @@ Це налаштування вибране як усталене для профілів: %s Показати мапу на екрані блокування під час навігації. Налаштування для маршрутизації у вибраному профілі: %1$s. - Час очікування екрана + Час очікування після пробудження Попередження відображаються внизу зліва під час навігації. Мова та вивід Впливає на весь застосунок @@ -3770,4 +3770,7 @@ метри Керування відображенням додаткових деталей на мапі Нічна мапа + Вкажіть ширину автомобіля, для великих транспортних засобів можуть застосовуватися обмеження на деяких маршрутах. + Вкажіть висоту автомобіля, для великих транспортних засобів можуть застосовуватися обмеження на деяких маршрутах. + Вимкнено. Потребує \"Тримати екран увімкненим\" у розділі \"Час очікування після пробудження\". \ No newline at end of file From 64715552a46ea646acc43e68e28f63abd8b81484 Mon Sep 17 00:00:00 2001 From: ihor_ck Date: Wed, 10 Jun 2020 19:31:08 +0000 Subject: [PATCH 24/31] Translated using Weblate (Ukrainian) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-uk/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index 4992900277..751ebdfae2 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -3772,5 +3772,5 @@ Нічна мапа Вкажіть ширину автомобіля, для великих транспортних засобів можуть застосовуватися обмеження на деяких маршрутах. Вкажіть висоту автомобіля, для великих транспортних засобів можуть застосовуватися обмеження на деяких маршрутах. - Вимкнено. Потребує \"Тримати екран увімкненим\" у розділі \"Час очікування після пробудження\". + Вимкнено. Потребує \'Тримати екран увімкненим\' у розділі \'Час очікування після пробудження\'. \ No newline at end of file From 904aad19d84394d9a7cb7e3986952976cfc8fb73 Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Wed, 10 Jun 2020 18:06:19 +0000 Subject: [PATCH 25/31] Translated using Weblate (Hebrew) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-he/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-he/strings.xml b/OsmAnd/res/values-he/strings.xml index b0ff9c5495..fc67204fef 100644 --- a/OsmAnd/res/values-he/strings.xml +++ b/OsmAnd/res/values-he/strings.xml @@ -3783,4 +3783,5 @@ שליטה בהופעה של פירוט נוסף על המפה מפת לילה כל הזמן + מושבת. נדרשת ההגדרה ‚להשאיר את המסך פעיל’ תחת ‚תפוגת זמן לאחר התעוררות’. \ No newline at end of file From 5052cf132915da643047426ac1376ab00172d3b3 Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Wed, 10 Jun 2020 19:16:45 +0000 Subject: [PATCH 26/31] Translated using Weblate (Sardinian) Currently translated at 98.5% (3333 of 3382 strings) --- OsmAnd/res/values-sc/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index 122f3b87d3..f39c94f73a 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -3733,4 +3733,7 @@ Iscantzellare totu\? Ses seguru de chèrrere iscantzellare definitivamente %d atziones lestras\? Totu su tempus + metros + Controlla sa visibilidade de delàllios additzionales ammustrados in sa mapa + Mapa noturna \ No newline at end of file From 0e458bc97707f4402382d158b411214997badc4b Mon Sep 17 00:00:00 2001 From: Hardy Date: Wed, 10 Jun 2020 22:03:31 +0200 Subject: [PATCH 27/31] some cosmetics --- OsmAnd/src/net/osmand/plus/development/TestVoiceActivity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/development/TestVoiceActivity.java b/OsmAnd/src/net/osmand/plus/development/TestVoiceActivity.java index b22717e079..3d29541be4 100644 --- a/OsmAnd/src/net/osmand/plus/development/TestVoiceActivity.java +++ b/OsmAnd/src/net/osmand/plus/development/TestVoiceActivity.java @@ -239,7 +239,7 @@ public class TestVoiceActivity extends OsmandActionBarActivity { addButton(ll, "\u25BA (11.1) (TAP TO FULLY POPULATE)\n" + getVoiceSystemInfo(), builder(p).attention("")); addButton(ll, "\u25BA (11.2) (TAP TO CHANGE)\n \u25CF Voice prompt delay for selected output: " + ((OsmandApplication) getApplication()).getSettings().VOICE_PROMPT_DELAY[((OsmandApplication) getApplication()).getSettings().AUDIO_MANAGER_STREAM.get()].get() + - "\u00A0ms.\nAvoids car stereo cutting off prompts. Default is 1500\u00A0ms for Phone call audio, or else 0\u00A0ms.", builder(p).attention("")); + "\u00A0ms\n (Avoids car stereo cutting off prompts. Default is 1500\u00A0ms for Phone call audio, or else 0\u00A0ms.)", builder(p).attention("")); addButton(ll, "\u25BA (11.3) (TAP TO TOGGLE)\n \u25CF Display each TTS utterance on screen: " + ((OsmandApplication) getApplication()).getSettings().DISPLAY_TTS_UTTERANCE.get().toString(), builder(p).attention("")); ll.forceLayout(); @@ -310,7 +310,7 @@ public class TestVoiceActivity extends OsmandActionBarActivity { } buttonDelay.setText("\u25BA (11.2) (TAP TO CHANGE)\n \u25CF Voice prompt delay for selected output: " + ((OsmandApplication) getApplication()).getSettings().VOICE_PROMPT_DELAY[((OsmandApplication) getApplication()).getSettings().AUDIO_MANAGER_STREAM.get()].get() + - "\u00A0ms.\nAvoids car stereo cutting off prompts. Default is 1500\u00A0ms for Phone call audio, or else 0\u00A0ms."); + "\u00A0ms\n (Avoids car stereo cutting off prompts. Default is 1500\u00A0ms for Phone call audio, or else 0\u00A0ms.)"); } if (description.startsWith("\u25BA (11.3)")) { if (((OsmandApplication) getApplication()).getSettings().DISPLAY_TTS_UTTERANCE.get() == false) { From 933bc1dddb56cadb29a0f22b27a7b68bdd968029 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Wed, 10 Jun 2020 22:58:18 +0200 Subject: [PATCH 28/31] Fix #3582 --- .../net/osmand/router/RoutePlannerFrontEnd.java | 7 ++++++- .../main/java/net/osmand/router/RoutingContext.java | 13 +++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java b/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java index 6dd110fc22..9ebdb906ad 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java @@ -234,6 +234,7 @@ public class RoutePlannerFrontEnd { if (intermediates != null) { for (LatLon l : intermediates) { if (!addSegment(l, ctx, indexNotFound++, points, false)) { + System.out.println(points.get(points.size() - 1).getRoad().toString()); return null; } } @@ -364,7 +365,7 @@ public class RoutePlannerFrontEnd { ctx.calculationProgress.segmentNotFound = indexNotFound; return false; } else { - log.info("Route segment found " + f.getRoad().id + " " + f.getRoad().getName()); + log.info("Route segment found " + f.road); res.add(f); return true; } @@ -383,6 +384,10 @@ public class RoutePlannerFrontEnd { ctx.precalculatedRouteDirection = routeDirection.adopt(ctx); } if (ctx.nativeLib != null) { + ctx.startX = start.preciseX; + ctx.startY = start.preciseY; + ctx.targetX = end.preciseX; + ctx.targetY = end.preciseY; return runNativeRouting(ctx, recalculationEnd); } else { refreshProgressDistance(ctx); diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RoutingContext.java b/OsmAnd-java/src/main/java/net/osmand/router/RoutingContext.java index 77e08443db..2e657a8c5c 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RoutingContext.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RoutingContext.java @@ -436,7 +436,7 @@ public class RoutingContext { } TLongIterator it = ts.iterator(); TLongObjectHashMap excludeDuplications = new TLongObjectHashMap(); - while(it.hasNext()){ + while (it.hasNext()) { getAllObjects(it.next(), toFillIn, excludeDuplications); } timeToFindInitialSegments += (System.nanoTime() - now); @@ -467,15 +467,14 @@ public class RoutingContext { long h2 = runGCUsedMemory(); float mb = (1 << 20); log.warn("Unload tiles : estimated " + (sz1 - sz2) / mb + " ?= " + (h1 - h2) / mb + " actual"); - log.warn("Used after " + h2 / mb + " of " + Runtime.getRuntime().totalMemory() / mb + " max " - + maxMemory() / mb); + log.warn("Used after " + h2 / mb + " of " + Runtime.getRuntime().totalMemory() / mb ); } else { float mb = (1 << 20); int sz2 = getCurrentEstimatedSize(); log.warn("Unload tiles : occupied before " + sz1 / mb + " Mb - now " + sz2 / mb + "MB " + memoryLimit / mb + " limit MB " + config.memoryLimitation / mb); long us2 = (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()); - log.warn("Used memory before " + us1 / mb + "after " + us1 / mb + " of max " + maxMemory() / mb); + log.warn("Used memory before " + us1 / mb + "after " + us1 / mb ); } } if (!indexedSubregions.containsKey(tileId)) { @@ -507,12 +506,6 @@ public class RoutingContext { return tileId; } - private long maxMemory() { - // AVIAN FIXME -// return Runtime.getRuntime().maxMemory(); - return 0; - } - public boolean checkIfMemoryLimitCritical(long memoryLimit) { From 41cc9fcd3f407f18d4317a3e61e1d2a774c84011 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Thu, 11 Jun 2020 00:44:51 +0200 Subject: [PATCH 29/31] Fix #5097 --- .../net/osmand/router/BinaryRoutePlanner.java | 53 ++++++++++--------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/BinaryRoutePlanner.java b/OsmAnd-java/src/main/java/net/osmand/router/BinaryRoutePlanner.java index de2da50d79..78966e4b5d 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/BinaryRoutePlanner.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/BinaryRoutePlanner.java @@ -138,7 +138,7 @@ public class BinaryRoutePlanner { checkIfGraphIsEmpty(ctx, ctx.getPlanRoadDirection() >= 0, graphDirectSegments, start, visitedDirectSegments, "Route is not found from selected start point."); if (ctx.planRouteIn2Directions()) { - forwardSearch = (nonHeuristicSegmentsComparator.compare(graphDirectSegments.peek(), graphReverseSegments.peek()) < 0); + forwardSearch = nonHeuristicSegmentsComparator.compare(graphDirectSegments.peek(), graphReverseSegments.peek()) <= 0; // if (graphDirectSegments.size() * 2 > graphReverseSegments.size()) { // forwardSearch = false; // } else if (graphDirectSegments.size() < 2 * graphReverseSegments.size()) { @@ -798,40 +798,41 @@ public class BinaryRoutePlanner { " distToEnd=" + distanceToEnd + " segmentPoint=" + segmentPoint + " -- ", next, true); } - if (!visitedSegments.containsKey(calculateRoutePointId(next, next.isPositive()))) { - if (next.getParentRoute() == null - || ctx.roadPriorityComparator(next.distanceFromStart, next.distanceToEnd, - distFromStart, distanceToEnd) > 0) { - next.distanceFromStart = distFromStart; - next.distanceToEnd = distanceToEnd; - if (TRACE_ROUTING) { - printRoad(" "+segmentPoint+">>" , next, null); - } - // put additional information to recover whole route after - next.setParentRoute(segment); - next.setParentSegmentEnd(segmentPoint); - graphSegments.add(next); - } - } else { + RouteSegment visIt = visitedSegments.get(calculateRoutePointId(next, next.isPositive())); + boolean toAdd = true; + if (visIt != null) { // the segment was already visited! We need to follow better route if it exists - // that is very exceptional situation and almost exception, it can happen + // that is very exceptional situation and almost exception, it can happen // 1. when we underestimate distnceToEnd - wrong h() - // 2. because we process not small segments but the whole road, it could be that + // 2. because we process not small segments but the whole road, it could be that // deviation from the road is faster than following the whole road itself! + if (TRACE_ROUTING) { + printRoad(">?", visitedSegments.get(calculateRoutePointId(next, next.isPositive())), + next.isPositive()); + } if (distFromStart < next.distanceFromStart) { if (ctx.config.heuristicCoefficient <= 1) { System.err.println("! Alert distance from start " + distFromStart + " < " + next.distanceFromStart + " id=" + next.road.id); } - // A: we can't change parent route just here, because we need to update visitedSegments - // presumably we can do visitedSegments.put(calculateRoutePointId(next), next); -// next.distanceFromStart = distFromStart; -// next.setParentRoute(segment); -// next.setParentSegmentEnd(segmentPoint); - if (ctx.visitor != null) { - // ctx.visitor.visitSegment(next, false); - } } + if (distFromStart < visIt.distanceFromStart && next.getParentRoute() == null) { + toAdd = true; + } else { + toAdd = false; + } + } + if (toAdd && (next.getParentRoute() == null || ctx.roadPriorityComparator(next.distanceFromStart, + next.distanceToEnd, distFromStart, distanceToEnd) > 0)) { + next.distanceFromStart = distFromStart; + next.distanceToEnd = distanceToEnd; + if (TRACE_ROUTING) { + printRoad(" " + segmentPoint + ">>", next, null); + } + // put additional information to recover whole route after + next.setParentRoute(segment); + next.setParentSegmentEnd(segmentPoint); + graphSegments.add(next); } } } From d3ef4fb292b00eb59563d8419a64d21f39e6337e Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Thu, 11 Jun 2020 01:29:59 +0200 Subject: [PATCH 30/31] Fix #5175 --- .../main/java/net/osmand/router/RoutePlannerFrontEnd.java | 3 ++- .../java/net/osmand/router/RouteResultPreparation.java | 1 - .../main/java/net/osmand/router/RouteSegmentResult.java | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java b/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java index 9ebdb906ad..3df6b65125 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java @@ -301,7 +301,8 @@ public class RoutePlannerFrontEnd { int py = MapUtils.get31TileNumberY(point.getLatitude()); int pind = st ? routeSegmentResult.getStartPointIndex() : routeSegmentResult.getEndPointIndex(); - RouteDataObject r = routeSegmentResult.getObject(); + RouteDataObject r = new RouteDataObject(routeSegmentResult.getObject()); + routeSegmentResult.setObject(r); QuadPoint before = null; QuadPoint after = null; if (pind > 0) { diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java b/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java index 0634602f3b..14363c39af 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RouteResultPreparation.java @@ -394,7 +394,6 @@ public class RouteResultPreparation { } // reverse it just to attach good direction roads Collections.reverse(result); - segment = finalSegment.reverseWaySearch ? finalSegment.opposite.getParentRoute() : finalSegment; int parentSegmentEnd = finalSegment.reverseWaySearch ? finalSegment.opposite.getParentSegmentEnd() : finalSegment.opposite.getSegmentStart(); parentRoutingTime = -1; diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RouteSegmentResult.java b/OsmAnd-java/src/main/java/net/osmand/router/RouteSegmentResult.java index 36d5d0260b..40257c474b 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RouteSegmentResult.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RouteSegmentResult.java @@ -23,7 +23,7 @@ import gnu.trove.map.hash.TIntObjectHashMap; public class RouteSegmentResult implements StringExternalizable { // this should be bigger (50-80m) but tests need to be fixed first private static final float DIST_BEARING_DETECT = 5; - private final RouteDataObject object; + private RouteDataObject object; private int startPointIndex; private int endPointIndex; private List[] attachedRoutes; @@ -535,10 +535,16 @@ public class RouteSegmentResult implements StringExternalizable public void setDescription(String description) { this.description = description; } + + public void setObject(RouteDataObject r) { + this.object = r; + } @Override public String toString() { return object.toString() + ": " + startPointIndex + "-" + endPointIndex; } + + } \ No newline at end of file From 222723e40ccb3e5ff164a84478fabfc314b6ca61 Mon Sep 17 00:00:00 2001 From: Ajeje Brazorf Date: Wed, 10 Jun 2020 19:51:09 +0000 Subject: [PATCH 31/31] Translated using Weblate (Sardinian) Currently translated at 98.5% (3334 of 3382 strings) --- OsmAnd/res/values-sc/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index f39c94f73a..2be4a3bbb3 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -3736,4 +3736,5 @@ metros Controlla sa visibilidade de delàllios additzionales ammustrados in sa mapa Mapa noturna + sonerias \ No newline at end of file