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 5aefb2ac44..663c9ea384 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RoutePlannerFrontEnd.java @@ -243,6 +243,9 @@ public class RoutePlannerFrontEnd { start = gpxPoints.get(0); } while (start != null && !gctx.ctx.calculationProgress.isCancelled) { + if (Thread.currentThread().isInterrupted()) { + return null; + } double routeDist = gctx.MAXIMUM_STEP_APPROXIMATION; GpxPoint next = findNextGpxPointWithin(gctx, gpxPoints, start, routeDist); boolean routeFound = false; @@ -256,7 +259,7 @@ public class RoutePlannerFrontEnd { if (routeFound) { // route is found - cut the end of the route and move to next iteration // start.stepBackRoute = new ArrayList(); -// boolean stepBack = true; +// boolean stepBack = true; boolean stepBack = stepBackAndFindPrevPointInRoute(gctx, gpxPoints, start, next); if (!stepBack) { // not supported case (workaround increase MAXIMUM_STEP_APPROXIMATION) diff --git a/OsmAnd-java/src/main/java/net/osmand/search/core/SearchCoreFactory.java b/OsmAnd-java/src/main/java/net/osmand/search/core/SearchCoreFactory.java index a4916d4187..360fafbdf9 100644 --- a/OsmAnd-java/src/main/java/net/osmand/search/core/SearchCoreFactory.java +++ b/OsmAnd-java/src/main/java/net/osmand/search/core/SearchCoreFactory.java @@ -33,6 +33,7 @@ import net.osmand.util.LocationParser.ParsedOpenLocationCode; import net.osmand.util.MapUtils; import java.io.IOException; +import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -1407,6 +1408,7 @@ public class SearchCoreFactory { private LatLon olcPhraseLocation; private ParsedOpenLocationCode cachedParsedCode; private final List citySubTypes = Arrays.asList("city", "town", "village"); + private final DecimalFormat latLonFormatter = new DecimalFormat("#.0####"); public SearchLocationAndUrlAPI() { super(ObjectType.LOCATION, ObjectType.PARTIAL_LOCATION); @@ -1498,7 +1500,7 @@ public class SearchCoreFactory { sp.priority = SEARCH_LOCATION_PRIORITY; sp.object = sp.location = ll; - sp.localeName = ((float) sp.location.getLatitude()) + ", "; + sp.localeName = formatLatLon(sp.location.getLatitude()) + ", "; sp.objectType = ObjectType.PARTIAL_LOCATION; resultMatcher.publish(sp); } @@ -1510,7 +1512,7 @@ public class SearchCoreFactory { SearchResult sp = new SearchResult(phrase); sp.priority = SEARCH_LOCATION_PRIORITY; sp.object = sp.location = l; - sp.localeName = ((float) sp.location.getLatitude()) + ", " + ((float) sp.location.getLongitude()); + sp.localeName = formatLatLon(sp.location.getLatitude()) + ", " + formatLatLon(sp.location.getLongitude()); sp.objectType = ObjectType.LOCATION; sp.wordsSpan = lw; resultMatcher.publish(sp); @@ -1525,7 +1527,7 @@ public class SearchCoreFactory { sp.object = pnt; sp.wordsSpan = text; sp.location = new LatLon(pnt.getLatitude(), pnt.getLongitude()); - sp.localeName = ((float)pnt.getLatitude()) +", " + ((float) pnt.getLongitude()); + sp.localeName = formatLatLon(pnt.getLatitude()) +", " + formatLatLon(pnt.getLongitude()); if (pnt.getZoom() > 0) { sp.preferredZoom = pnt.getZoom(); } @@ -1555,6 +1557,10 @@ public class SearchCoreFactory { } return cachedParsedCode == null ? SEARCH_LOCATION_PRIORITY : SEARCH_MAX_PRIORITY; } + + private String formatLatLon(double latLon) { + return latLonFormatter.format(latLon); + } } private static String stripBraces(String localeName) { diff --git a/OsmAnd-telegram/res/values-fa/strings.xml b/OsmAnd-telegram/res/values-fa/strings.xml index 824443b2c5..113a944e7c 100644 --- a/OsmAnd-telegram/res/values-fa/strings.xml +++ b/OsmAnd-telegram/res/values-fa/strings.xml @@ -73,4 +73,9 @@ یکاهای طول را تغییر دهید. یکاهای طول ظاهر + آخرین پاسخ: %1$s پیش + آخرین به‌روزرسانی تلگرام: %1$s پیش + آخرین پاسخ: %1$s + آخرین به‌روزرسانی تلگرام: %1$s + خطا \ No newline at end of file diff --git a/OsmAnd-telegram/res/values-ja/strings.xml b/OsmAnd-telegram/res/values-ja/strings.xml index 71c5af7daf..1829c1fcc9 100644 --- a/OsmAnd-telegram/res/values-ja/strings.xml +++ b/OsmAnd-telegram/res/values-ja/strings.xml @@ -219,8 +219,8 @@ 国際形式でTelegramを利用する端末の電話番号を入力してください(日本の場合+81を先頭につけて電話番号最初の0を除いた番号を入力) ようこそ ヤード - フィート - マイル + ft + mi km m 海里 diff --git a/OsmAnd/build.gradle b/OsmAnd/build.gradle index 48f7259353..c67ed0f3b8 100644 --- a/OsmAnd/build.gradle +++ b/OsmAnd/build.gradle @@ -527,7 +527,7 @@ dependencies { implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'com.google.android.material:material:1.2.0-beta01' + implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.browser:browser:1.0.0' implementation 'androidx.preference:preference:1.1.0' implementation fileTree(include: ['gnu-trove-osmand.jar', 'icu4j-49_1_patched.jar'], dir: 'libs') diff --git a/OsmAnd/res/layout/custom_color_picker.xml b/OsmAnd/res/layout/custom_color_picker.xml index db6c3a254c..f2133e410b 100644 --- a/OsmAnd/res/layout/custom_color_picker.xml +++ b/OsmAnd/res/layout/custom_color_picker.xml @@ -46,9 +46,11 @@ android:id="@+id/color_hex_edit_text" android:layout_width="match_parent" android:layout_height="wrap_content" - android:inputType="textMultiLine" - android:maxLines="4" + android:inputType="text" + android:maxLines="1" android:minHeight="@dimen/bottom_sheet_list_item_height" + android:paddingTop="@dimen/content_padding_small" + android:paddingBottom="@dimen/content_padding_small" android:paddingStart="@dimen/content_padding_small" android:paddingLeft="@dimen/content_padding_small" android:paddingEnd="@dimen/content_padding_small" diff --git a/OsmAnd/res/layout/point_editor_fragment_new.xml b/OsmAnd/res/layout/point_editor_fragment_new.xml index 95d1feb56b..21c6396c53 100644 --- a/OsmAnd/res/layout/point_editor_fragment_new.xml +++ b/OsmAnd/res/layout/point_editor_fragment_new.xml @@ -135,6 +135,7 @@ android:id="@+id/address_edit" android:layout_width="match_parent" android:layout_height="wrap_content" + android:gravity="start" android:maxLines="4" android:minHeight="@dimen/favorites_list_item_height" android:paddingStart="@dimen/content_padding_small" @@ -147,24 +148,50 @@ - + + + + + + + + android:orientation="vertical" + android:paddingBottom="@dimen/content_padding"> الإضافات المثبتة تكوين الملاحة ثيم التطبيق ، وحدات ، المنطقة - تكوين ملف التعريف + إعداد الوضع تظهر التنبيهات في أسفل اليسار أثناء التنقل. تبديل الوضع اللغة والإخراج @@ -3291,7 +3291,7 @@ وضع المستخدم ، مشتق من:%s تزلج النوع:%s - ملف التعريف الأساسي + وضع أساسي حدد نوع الملاحة يرجى تحديد نوع الملاحة للوضع الجديد أدخل اسم الوضع @@ -3381,7 +3381,7 @@ لا يمكنك حذف أوضاع أوسماند الافتراضية ، ولكن يمكنك تعطيلها في الشاشة السابقة ، أو نقلها إلى الأسفل. تحرير الأوضاع يؤثر نوع التنقل على قواعد حسابات المسار. - مظهر الملف الشخصي + مظهر الوضع اختر الايقونة واللون والاسم تحرير قائمة الأوضاع الملف الشخصي المحدد @@ -3532,7 +3532,7 @@ حدد البيانات التي سيتم استيرادها. أسلوب التقديم استيراد ملف الrendering - ستتم استعادة كافة إعدادات ملف التعريف إلى حالتها الأصلية بعد إنشاء/استيراد هذا الملف الشخصي. + ستتم استعادة كافة إعدادات الوضع إلى حالتها الأصلية بعد إنشاء/استيراد هذا الوضع. استعادة جميع إعدادات الملف الشخصي؟ حفظ ملف تعريف جديد لا يمكن عمل نسخة احتياطية من الملف الشخصي. @@ -3652,28 +3652,28 @@ مسطرة البوصلة قياس المسافة السفر (Wikivoyage و Wikipedia) - علامات الخريطة + العلامات المفضلة اشتراك أوسماند لايف مشتريات أوسماند دليل رموز الخريطة. الملفات الشخصية للملاحة - • خرائط جديدة للمنحدرات غير المتصلة بالإنترنت -\n -\n • التخصيص الكامل للمفضلات ونقاط الطرق GPX - الألوان المخصصة والأيقونات والأشكال -\n -\n • تخصيص ترتيب العناصر في قائمة السياق ، تكوين الخريطة ، درج -\n -\n • ويكيبيديا كطبقة منفصلة في تكوين الخريطة ، حدد اللغات المطلوبة فقط -\n -\n • إنشاء مرشح / خرائط POI الخاصة بك مع مرونة تامة -\n -\n • تمت إضافة خيارات لاستعادة إعدادات ملفات التعريف المخصصة -\n -\n • مسارات GPX كاملة من الممرات دعم حركة المرور وتعليمات كاملة -\n -\n • إصلاح أحجام واجهة المستخدم على الأجهزة اللوحية -\n + • خرائط جديدة للمنحدرات غير المتصلة بالإنترنت +\n +\n • التخصيص الكامل للمفضلات ونقاط الطرق GPX - الألوان المخصصة والأيقونات والأشكال +\n +\n • تخصيص ترتيب العناصر في قائمة السياق ، تكوين الخريطة ، درج +\n +\n • ويكيبيديا كطبقة منفصلة في تكوين الخريطة ، حدد اللغات المطلوبة فقط +\n +\n • إنشاء مرشح / خرائط POI الخاصة بك مع مرونة تامة +\n +\n • تمت إضافة خيارات لاستعادة إعدادات الأوضاع المخصصة +\n +\n • مسارات GPX كاملة من الممرات دعم حركة المرور وتعليمات كاملة +\n +\n • إصلاح أحجام واجهة المستخدم على الأجهزة اللوحية +\n \n • إصلاح الخلل مع RTL \n \n @@ -3691,7 +3691,7 @@ سيتم تبديل زر الإجراء التسجيل بين التشكيلات الجانبية المحددة. إضافة ملف تعريف تغيير ملف تعريف التطبيق - لم يتم العثور على ملفات التعريف المحددة لهذا الإجراء. + لم يتم العثور على الأوضاع المحددة لهذا الإجراء. خريطة عامة للعالم (تفصيلية) نوع غير معتمد لم يتم تكوين OsmAnd GPX بشكل جيد ، يرجى الاتصال بفريق الدعم لمزيد من التحقيقات. @@ -3813,9 +3813,9 @@ حدد ملف المسار الذي سيتم إضافة مقطع جديد إليه. حفظ كمسار جديد عكس الطريق - سيتم إعادة حساب المقطع التالي فقط باستخدام ملف التعريف المحدد. - سيتم إعادة حساب المقطع التالي فقط باستخدام ملف التعريف المحدد. - حدد كيفية توصيل النقاط، بخط مستقيم، أو حساب مسار بينها مع ملف التعريف المحدد. + سيتم إعادة حساب المقطع التالي فقط باستخدام الوضع المحدد. + سيتم إعادة حساب المقطع التالي فقط باستخدام الوضع المحدد. + حدد كيفية توصيل النقاط، بخط مستقيم، أو حساب مسار بينها على النحو المحدد أدناه. مسار كامل المقطع التالي بعد ذلك ، ألقط مسارك بأقرب طريق مسموح به باستخدام أحد ملفات تعريف التنقل الخاصة بك لاستخدام هذا الخيار. @@ -3863,7 +3863,7 @@ جميع الأجزاء اللاحقة المقطع السابق جميع المقاطع السابقة - سيتم إعادة حساب المقطع المحدد فقط باستخدام ملف التعريف المحدد. + سيتم إعادة حساب المقطع المحدد فقط باستخدام الوضع المحدد. سيتم إعادة حساب كافة الشرائح اللاحقة باستخدام ملف التعريف المحدد. سيتم إعادة حساب كافة الشرائح السابقة باستخدام ملف التعريف المحدد. فتح المسار المحفوظ @@ -3873,19 +3873,19 @@ اسم الملف الرجاء إضافة نقطتين على الأقل. إعادة - • وضع مخطط المسار المحدث يسمح باستخدام أنواع الملاحة المختلفة لكل جزء ويربط أي مسار بالطرق + • ميزة تخطيط المسار المحدثة: تسمح باستخدام أنواع الملاحة المختلفة لكل جزء وكذا اظافة طرق \n -\n• خيارات المظهر الجديدة للمسارات: تحديد اللون، السماكة ستقوم بتفعيل أسهم التوجيه و علامات البداية والنهاية +\n• قائمة مظهر جديدة للمسارات: تحديد اللون، السماكة، اظهار أسهم التوجيه، أيقونات الانطلاق والنهاية \n \n• تحسين رؤية عقد الدراجات \n -\n• قائمة السياق للمسارات بمعلومات أساسية +\n• المسارات قابلة للنقر عليها الان وقائمة سياق بمعلومات أساسية \n -\n• تحسين خوارزميات البحث +\n• خوارزميات بحث محسنة \n -\n• تم تحسين خيارات متابعة المسار أثناء الملاحة +\n• تم تحسين خيارات متابعة المسار خلال الملاحة \n -\n• تم إصلاح المشكلات المتعلقة باستيراد/تصدير إعدادات الملف الشخصي +\n• تم إصلاح المشكلات المتعلقة باستيراد/تصدير الأوضاع الشخصية \n \n \ No newline at end of file diff --git a/OsmAnd/res/values-be/phrases.xml b/OsmAnd/res/values-be/phrases.xml index c1811632b4..b801ecedb5 100644 --- a/OsmAnd/res/values-be/phrases.xml +++ b/OsmAnd/res/values-be/phrases.xml @@ -3842,4 +3842,5 @@ Рэальны час Затрымка Маленькія электрапрыборы + Вулей \ No newline at end of file diff --git a/OsmAnd/res/values-be/strings.xml b/OsmAnd/res/values-be/strings.xml index 47399cfdf0..c80bd4dfe0 100644 --- a/OsmAnd/res/values-be/strings.xml +++ b/OsmAnd/res/values-be/strings.xml @@ -3609,7 +3609,7 @@ Ліміт даўжыні Арыентацыя Выдалена: %1$s - Перазапуск патрабуецца для поўнага выдалення даных камер кантролю хуткасці. + Перазапусціце праграму для поўнага выдалення даных камер кантролю хуткасці. Кіраванне ўзроўнем маштабавання мапы пры дапамозе кнопак рэгулявання гучнасці. Інфармацыя пра славутасці з Вікіпедыі. Гэта ваш кішэнны даведнік - уключыце ўбудову вікіпедыі і чытайце артыкулы пра аб’екты вакол вас. Матацыкл Эндура @@ -3699,22 +3699,20 @@ Зваротны маршрут Увесь след будзе пералічаны з выкарыстаннем абранага профілю. Толькі наступны сегмент будзе пералічаны паводле абранага профілю. - Абярыце спосаб злучэння пунктаў. Варыянты: прамая лінія; разлік маршруту паводле абранага профілю. + Абярыце спосаб злучэння пунктаў. Варыянты: прамая лінія; разлік маршруту як вызначана ніжэй. Увесь след Наступны сегмент - Для выкарыстання гэтага параметру OsmAnd пракладзе ваш след па дарогах. -\n -\n Пасля вам патрэбна абраць профіль навігацыі для вызначэння маршруту з улікам параметраў і абмежаванняў гэтага профілю. + Пасля вам патрэбна абраць профіль навігацыі для вызначэння маршруту з улікам параметраў і абмежаванняў гэтага профілю. Максімальная дыстанцыя Профіль навігацыі Абраць файл следу, да якога будзе дададзены новы сегмент. Выявы на ўзроўні вуліц - Сапраўды закрыць план маршруту без захавання\? Усе змены страцяцца. + Усе змены страцяцца. Закрыць план маршруту\? У выпадку адваротнага кірунку Маршрут следу Кіравацца следу Абярыце файл следу - Абярыце альбо імпартуйце файл следу. + Абярыце альбо імпартуйце файл следу са сваёй прылады. Абраць іншы след Перайдзіце ад маёй пазіцыі да следу Пункт следу для навігацыі diff --git a/OsmAnd/res/values-es-rAR/phrases.xml b/OsmAnd/res/values-es-rAR/phrases.xml index cfe9475d1e..e1839d42f2 100644 --- a/OsmAnd/res/values-es-rAR/phrases.xml +++ b/OsmAnd/res/values-es-rAR/phrases.xml @@ -3849,4 +3849,5 @@ Tablero de partidas Recarga de agua potable Pequeños electrodomésticos + Panal de abejas \ No newline at end of file diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml index 4eed292de2..6b55481e6e 100644 --- a/OsmAnd/res/values-es-rAR/strings.xml +++ b/OsmAnd/res/values-es-rAR/strings.xml @@ -3829,7 +3829,7 @@ Ruta inversa Recalcular sólo el siguiente segmento usando el perfil elegido. Recalcular toda la traza usando el perfil elegido. - Marca cómo conectar los puntos, con una línea recta o calcular una ruta entre ellos con el perfil elegido. + Marca cómo conectar los puntos, con una línea recta o calcular una ruta entre ellos como se detalla a continuación. Traza completa Siguiente segmento A continuación, ajusta la traza al camino permitido más cercano con un perfil de navegación. @@ -3889,13 +3889,13 @@ %s archivo(s) de trazas marcado(s) Añade al menos dos puntos. Rehacer - • Se ha actualizado el modo «Planificar ruta»: ahora permite usar diferentes tipos de navegación para cada segmento y adjunta cualquier traza a los caminos + • Se ha actualizado la función «Planificar ruta»: permite utilizar diferentes tipos de navegación por segmento y la inclusión de trazas \n -\n • Nuevas opciones en el aspecto de las trazas: elegir el color, cambiar el grosor de las flechas de dirección y las marcas de inicio/fin. +\n • Nuevo menú con el aspecto de las trazas: elegir el color, el grosor, mostrar las flechas de dirección y los iconos de inicio/fin. \n -\n • Mejoras en la visibilidad de los nodos de bicicleta +\n • Mejoras en la visibilidad de los nodos de bicicleta. \n -\n • Menú contextual con información básica para las trazas +\n • Las trazas ahora se pueden pulsar, contiene un menú contextual con información básica. \n \n • Algoritmos de búsqueda mejorados \n diff --git a/OsmAnd/res/values-et/phrases.xml b/OsmAnd/res/values-et/phrases.xml index 5ea981e678..dc8cbbac79 100644 --- a/OsmAnd/res/values-et/phrases.xml +++ b/OsmAnd/res/values-et/phrases.xml @@ -3824,4 +3824,6 @@ Väljuvate reiside tabloo Joogivee täitmine Väikesed elektriseadmed + Mesitaru + Pähklipood \ No newline at end of file diff --git a/OsmAnd/res/values-et/strings.xml b/OsmAnd/res/values-et/strings.xml index b8c7fbfd34..2c829dcfd0 100644 --- a/OsmAnd/res/values-et/strings.xml +++ b/OsmAnd/res/values-et/strings.xml @@ -166,7 +166,7 @@ Näita OSM märkmed Peida OSM Notes Täname sind tagasiside eest - Punkti või teed ei leitud. + Sõlme või teed ei leidunud. Otsingutulemused puuduvad\? \nJaga tagasisidet Laienda otsingu raadiust kuni %1$s @@ -3738,4 +3738,19 @@ Kiirtegevusi saad eksportida või importida koos rakenduse profiilidega. Kas sa oled kindel, et soovid pöördumatult kustutada %d kiirtegevust\? Vali kas soovid ühendada punkte sirge joonega või arvutada nendevahelist teekonda vastavalt oma valitud profiilile. + • Uuendatud teekonnaplaneerija: võimaldab kasutada igal segmendil erinevat liikumisviisi ning radade kaasamist +\n +\n • Uus radade kujunduse seadistamise menüü: valida saad värve, joone paksust, suunanoolte kuvamist ning alguse ja lõpu ikoone +\n +\n • Rattasõlmede parandatud nähtavus +\n +\n • Radasid saad nüüd puudutada, misjärel kuvatakse põhiteabega kontekstimenüü +\n +\n • Parandatud on otsingualgoritme +\n +\n • Parandatud raja jälgimise valikud navigeerimisel +\n +\n • Parandatud on profiili seadistuste impordi ja ekspordiga seotud vead +\n +\n \ No newline at end of file diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml index 4cc7cc83c8..e8c4cbb15c 100644 --- a/OsmAnd/res/values-fa/strings.xml +++ b/OsmAnd/res/values-fa/strings.xml @@ -1080,7 +1080,7 @@ انتخاب از موارد موجود… تعریف/ویرایش… منطقهٔ رانندگی - مرکاتور بیضوی + فراتابی مرکاتور بیضوی نشانی اینترنتی ذره‌بین نقشه نقشهٔ جهانی پایه @@ -1411,7 +1411,7 @@ کنترل مرزی عوارضی علامت ایست - سرعتگیر + آرام‌سازی ترافیک دوربین سرعت هشدار ترافیکی فعال‌کردن پروکسی HTTP @@ -1645,7 +1645,7 @@ برای دانلود نقشه‌ها لازم است. در حال جست‌وجوی مکان… فضای خالی - ذخیره‌گاه اطلاعات OsmAnd (برای نقشه‌ها، فایل‌های GPX و...): %1$s. + ذخیره‌گاه دادهٔ OsmAnd (برای نقشه‌ها، فایل‌های رد و...): %1$s. اجازهٔ دسترسی اجازهٔ دسترسی به موقعیتتان را بدهید مسیریابی و کشف جاهای تازه بدون اتصال به اینترنت @@ -2374,8 +2374,8 @@ ذخیرهٔ ردهای ضبط‌شده در پوشه‌های ماهانه ردهای ضبط‌شده در زیرپوشه‌های ماهانه ذخیره می‌شود (مثلاً ‎۲۰۱۸-۰۱). زوم نمایش: %1$s - هنوز فایل GPXای ندارید - همچنین می‌توانید فایل‌های GPX را در این پوشه قرار دهید + هنوز فایل رد (track) ندارید + همچنین می‌توانید فایل‌های رد را در این پوشه قرار دهید استفاده از تقسیمگر ضبط‌کننده ایجاد یادداشت OSM یادداشت OSM بازگشوده @@ -2919,10 +2919,10 @@ نوع جاده‌ها ایستگاه پیاده‌شدن ایستگاه سوارشدن - آشکار/پنهان کردن ردهای GPX - دکمه‌ای برای آشکار/پنهان کردن ردهای GPX انتخابی بر روی نقشه. - پنهان‌کردن ردهای GPX - آشکارکردن ردهای GPX + آشکار/پنهان کردن ردها + دکمه‌ای برای آشکار/پنهان کردن ردهای انتخابی بر روی نقشه. + پنهان‌کردن ردها + آشکارکردن ردها • طراحی جدید برای صفحهٔ «مسیریابی»: اضافه‌شدن دکمه‌های خانه و محل کار برای انتخاب مقصد، میانبر «مسیر قبلی»، لیست نشانه‌ها و ردهای GPX فعال، سابقهٔ جست‌وجو \n \n • اطلاعات بیشتر در قسمت «جزئیات مسیر»: نوع جاده‌ها، سطح، شیب، همواری @@ -3771,7 +3771,7 @@ \nیک هفته ۱۰ ۰۸۰ دقیقه است. \nیک ماه ۴۳ ۸۲۹ دقیقه است. شیوهٔ ذخیره‌سازی کاشی‌های دانلودشده را انتخاب کنید. - زمان خاموشی پیشفرض صفحه + زمان پیشفرض خاموشی صفحه می‌توانید کنش‌های فوری را همراه با پروفایل‌های برنامه برون‌برد یا درون‌برد کنید. همه حذف شود؟ آیا %d کنش فوری را حذف می‌کنید؟ (برگشت‌ناپذیر است) @@ -3804,7 +3804,7 @@ حذف نصب سویه ‏%1$s حذف شد - برای اینکه دادهٔ دوربین سرعت کاملاً حذف شود، یک بار برنامه را ببندید و باز کنید. + برای اینکه دادهٔ دوربین سرعت کاملاً حذف شود، برنامه را ببندید و باز کنید. نقاط توجه دوربین سرعت قانونِ برخی کشورها استفاده از نرم‌افزارهای هشداردهندهٔ دوربین سرعت را ممنوع کرده است. \n @@ -3814,16 +3814,16 @@ \n \nبا انتخاب %2$s تا زمانی که OsmAnd را دوباره نصب کنید، تمام دادهٔ مربوط به دوربین‌های سرعت (هشدارها، اعلان‌ها، نقاط توجه) حذف می‌شود. قانونِ برخی از کشورها استفاده از هشداردهندهٔ دوربین سرعت را ممنوع کرده است. - با این گزینه می‌توانید با استفاده از دکمه‌های کم/زیاد صدای دستگاه سطح زوم را کنترل کنید. + با استفاده از دکمه‌های کم/زیاد صدای دستگاه، سطح زوم را کنترل کنید. زوم با دکمه‌های صدا طول مجاز طول مجاز خودرو در مسیرها را مشخص کنید. این دستگاه دوربین‌های سرعت را ندارد. فعال بماند - حذف مقصد بعدی + حذف نزدیک‌ترین مقصد لطفاً نام نقطه را بنویسید دانلود نقشه‌های ویکی‌پدیا - از ویکی‌پدیا دربارهٔ نقاط توجه اطلاعات کسب کنید. یک راهنمای آفلاین جیبی. کافی است افزونهٔ ویکی‌پدیا را فعال کنید و از مقاله‌ها دربارهٔ چیزهای دوروبرتان لذت ببرید. + از ویکی‌پدیا دربارهٔ نقاط توجه اطلاعات کسب کنید؛ مانند یک راهنمای آفلاین جیبی. کافی است افزونهٔ ویکی‌پدیا را فعال کنید و از مقاله‌های مربوط به چیزهای دوروبرتان لذت ببرید. صندلی چرخ‌دار یادداشت اُاِس‌اِمی بسته نقطهٔ اضافه‌شده روی نقشه دیده نمی‌شود، زیرا گروه انتخاب‌شده پنهان است. آن را در «%s» پیدا می‌کنید. @@ -3843,23 +3843,23 @@ یک فایل رد انتخاب کنید تا باز شود. تمام بَرنویسی رد - آهنگ ذخیره شده را باز کنید - ذخیره شده - لطفا حداقل دو امتیاز اضافه کنید. - آماده - "به روز شده برنامه یک عملکرد مسیر: اجازه می دهد تا از انواع مختلف پیمایش در هر بخش و گنجاندن مسیرها استفاده کنید + بازکردن رد ذخیره‌شده + ذخیره شد + لطفاً حداقل دو نقطه اضافه کنید. + ازنو + • قابلیت «طرح‌ریزی مسیر» روزآمد شد: امکان استفاده از شیوهٔ ناوبری متفاوت برای هر پاره از مسیر و در کار آوردن ردها اضافه شده است. \n -\n • منوی New Appearance برای آهنگ ها، رنگ ، ضخامت ، فلش جهت نمایش ، نمادهای شروع / پایان استفاده می شوئ +\n• منوی جدید «ظاهر» برای ردها: رنگ و ضخامت را مشخص کنید، فلش‌های جهت‌نما و نمادهای آغاز/پایان را نمایش دهید. \n -\n • بهبود دید نود های دوچرخه. +\n• پدیداری گره‌های شبکهٔ دوچرخه بهبود یافته است. \n -\n • آهنگ ها اکنون قابل لمس هستند ، دارای منوی زمینه با اطلاعات اولیه هستند. +\n• اکنون می‌توان ردها را لمس کرد و منوی زمینه با اطلاعات پایه را مشاهده کرد. \n -\n • بهبود الگوریتم های جستجو +\n• الگوریتم «جستجو» بهبود یافته است. \n -\n • گزینه های ردیابی را در پیمایش بهبود بخشید +\n• گزینه‌های «دنبال‌کردن رد» در ناوبری بهبود یافته است. \n -\n • مشکلات مربوط به واردات / صادرات تنظیمات نمایه برطرف شده است +\n• مشکلاتی مربوط به درون‌برد/برون‌برد تنظیمات پروفایل برطرف شده است. \n -\n" +\n \ No newline at end of file diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index bd4408d069..b116563f71 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -3801,7 +3801,7 @@ Sélectionnez un fichier de trace à ouvrir. Terminé Remplacer la trace - Sélectionnez comment relier les points : par une ligne droite ou en calculant un itinéraire avec le profil sélectionné. + Sélectionnez comment relier les points : par une ligne droite ou en calculant un itinéraire reliant les points comme indiqué ci-dessous. Toute la trace sera recalculée en utilisant le profil sélectionné. Seul le prochain segment sera recalculé en utilisant le profil sélectionné. Ensuite, sélectionnez le profil de navigation pour détecter les routes autorisées et le seuil de distance afin de déplacer votre trace. @@ -3836,7 +3836,7 @@ Suivre la trace Sélectionner un fichier de trace à suivre Sélectionner une autre trace - Naviguez de ma position vers la trace + Naviguer de ma position vers la trace Point le plus proche Supprimer l\'adresse Ajouter une adresse diff --git a/OsmAnd/res/values-hu/phrases.xml b/OsmAnd/res/values-hu/phrases.xml index 891959e0b0..4e0cce87d3 100644 --- a/OsmAnd/res/values-hu/phrases.xml +++ b/OsmAnd/res/values-hu/phrases.xml @@ -3833,4 +3833,6 @@ Kis elektronikus készülékek Indulásiidő-kijelző Ivóvíz-utántöltés + Mag- és aszaltgyümölcsbolt + Méhkaptár \ No newline at end of file diff --git a/OsmAnd/res/values-hu/strings.xml b/OsmAnd/res/values-hu/strings.xml index bf5f700fa4..3133035da6 100644 --- a/OsmAnd/res/values-hu/strings.xml +++ b/OsmAnd/res/values-hu/strings.xml @@ -3834,7 +3834,7 @@ Egyszerűsített nyomvonal Kész elmentve - Jelölje ki, hogyan legyenek összekötve a pontok: egyenes vonallal vagy a kiválasztott profilnak megfelelően kiszámított útvonallal. + Jelölje ki, hogyan legyenek összekötve a pontok: egyenes vonallal vagy az alábbiak szerint kiszámított útvonallal. Teljes nyomvonal Megjegyzés: Ha a GPS közvetlenül a felvétel előtt ki volt kapcsolva, akkor rosszabb lehet az első mért pont pontossága. A kódban ezért szeretnénk majd talán várni egy-két másodpercet egy pont rögzítése előtt (vagy a 3 egymást követő pont közül a legjobbat rögzíteni vagy valami hasonló), de ezt még nem programoztuk le. Cím törlése @@ -3878,13 +3878,13 @@ Jelölje ki azt a nyomvonalfájlt, amelyhez az új szakasz hozzáadódjék. Nyomvonalak Mégis - • A Tervezett útvonal mód frissítésével különböző navigációtípusok is használathatók az egyes szakaszokhoz, és bármilyen nyomvonal az utakhoz köthető + • Frissített útvonaltervezési funkció: szakaszonként különböző navigációtípusok használhatók és nyomvonalak is beilleszthetők \n -\n • Új megjelenési lehetőségek a nyomvonalakhoz: válassza ki a színt, a vastagságot, kapcsolja be az iránynyilakat és a kezdő / befejező jeleket +\n • Új megjelenési menü a nyomvonalakhoz: válassza ki a színt, a vastagságot, kapcsolja be az iránynyilakat és a kiindulás / célpont ikonjait \n -\n • A kerékpáros csomópontok jobb láthatósága +\n • Kerékpáros csomópontok jobb láthatósága \n -\n • Helyi menü a nyomvonalak az alapvető adataival +\n • Nyomvonalra koppintással megnyíló helyi menü a nyomvonalak az alapvető adataival \n \n • Továbbfejlesztett keresési algoritmusok \n diff --git a/OsmAnd/res/values-iw/strings.xml b/OsmAnd/res/values-iw/strings.xml index 1e25024941..2971332a22 100644 --- a/OsmAnd/res/values-iw/strings.xml +++ b/OsmAnd/res/values-iw/strings.xml @@ -3837,7 +3837,7 @@ נא לבחור קובץ מסלול שבו יתווסף המקטע החדש. כל המסלול יחושב מחדש באמצעות הפרופיל הנבחר. רק המקטע הבא יחושב מחודש באמצעות הפרופיל הנבחר. - נא לבחור כיצד לחבר נקודות, בקו ישר, או לחבר מסלול ביניהן עם הפרופיל הנבחר. + נא לבחור כיצד לחבר נקודות, בקו ישר, או לחבר מסלול ביניהן כפי שצוין להלן. כדי להשתמש באפשרות זו על OsmAnd להצמיד את המסלול שלך לדרכים שעל המפה. \n \n בשלב הבא יהיה עליך לבחור בפרופיל ניווט כדי לזהות את הדרכים המורשות ואת סף המרחק כדי להעריך את המסלול שלך ביחס לדרכים. diff --git a/OsmAnd/res/values-ja/strings.xml b/OsmAnd/res/values-ja/strings.xml index 843dada170..7193842fe5 100644 --- a/OsmAnd/res/values-ja/strings.xml +++ b/OsmAnd/res/values-ja/strings.xml @@ -50,9 +50,9 @@ マイル/ヤード キロメートル/メートル ヤード - フィート + ft mph - マイル + mi 次の方法で位置を共有 位置 : %1$s\n%2$s 位置を見るには @@ -472,7 +472,7 @@ POIの更新は利用できません POI 変更 他のタグは全て保存されました コミット - 削除する + 削除 フィルタ 名前をつけて保存 選択したフィルタを削除しますか? @@ -2068,7 +2068,7 @@ POIの更新は利用できません 中国語 (香港) オーストラリア フォルダ内に経路データが存在しません - 以下フォルダーにトラックを追加することが可能です + フォルダに経路を追加することも可能です 経路を追加 表示形式 最大速度 @@ -2412,10 +2412,10 @@ POIの更新は利用できません この近辺の写真はありません。 近隣の写真(要オンライン) 情報共有のための路上写真です(要オンライン)。新たな場所の発見に、協力しあい、この世界を写真で保存しましょう。 - Mapillaryにて写真の有効領域を広げましょう - Mapillaryをインストールして、このマップの場所に写真を追加します。 + Mapillaryにて写真によるレポートを強化しましょう + Mapillaryをインストールすれば、このマップの場所にストリート写真を追加できます。 Mapillaryを開く - ストリート写真(Mapillary) + Mapillary Mapillaryウィジェット Mapillary画像 Mapillaryを利用し、あなたが撮影した路上写真を共有します。 @@ -2611,7 +2611,7 @@ POIの更新は利用できません シンプルな運転用スタイルです。おだやかな夜間モード、等高線、対照的なオレンジ色スタイルの道路表示で、セカンダリマップオブジェクトは若干暗くしてあります。 ハイキング、トレッキング、ネイチャーサイクリング向けです。屋外で視認しやすい配色になっています。対照的な道路と自然物、さまざまなルートタイプ、高度な等高線オプション、詳細の追加などがなされています。 路面の素材や質を表示するオプションを使えば、各道路の状態も把握できます。夜間モードはありません。 昔のデフォルトであった『Mapnik』スタイルです。Mapnikそのものではありませんが似た配色になります。 - 地点/座標の編集 + 地点/座標の編集 座標の追加 経路として保存 %1$sヶ所の座標を追加しました。ファイル名を付けて\"保存\"をタップしてください。 @@ -2745,7 +2745,7 @@ POIの更新は利用できません 最後の中間経由地点として追加 最初の中間経由地点として追加 閉じたメモの表示 - マップ上にあるOSMメモの表示/非表示を切り替えます。 + マップ上にあるOSMメモの表示/非表示を切り替えます。 GPX - JOSMまたは他のOSMエディタへ適したエクスポート形式です。 OSC - OSMの利用に適したエクスポート形式です。 GPXファイル @@ -2855,10 +2855,10 @@ POIの更新は利用できません 入れ替え 詳細を見る マップ上の経路 - GPX経路の表示/非表示 - マップ上にある選択したGPX経路の表示/非表示を切り替えるボタンです。 - GPX経路の非表示 - GPX経路の表示 + GPX経路の表示/非表示 + マップ上にある選択したGPX経路の表示/非表示を切り替えるボタンです。 + 経路の非表示 + 経路の表示 最初に目的地を設定して下さい 前回のルート 立方メートル @@ -3338,14 +3338,14 @@ POIの更新は利用できません 停留所標識 オック語 OSMの編集 - マップ上の等高線の表示/非表示を切り替えられるボタンです。 + マップ上の等高線の表示/非表示を切り替えられるボタンです。 等高線を表示 等高線を非表示 - 等高線を表示/非表示 - マップ上の陰影起伏図の表示/非表示を切り替えられるボタンです。 + 等高線を表示/非表示 + マップ上の陰影起伏図の表示/非表示を切り替えられるボタンです。 陰影起伏図を表示 陰影起伏図を非表示 - 陰影起伏図の表示/非表示 + 陰影起伏図の表示/非表示 テキスト読み上げエンジンを起動できません。 プロファイルのエクスポート OsmAndプロファイル:%1$s @@ -3455,7 +3455,7 @@ POIの更新は利用できません カメラシャッター音 認証に成功しました カテゴリーの並べ替え - リストの並び順を変更したり、不要なカテゴリを非表示にします。プロファイルデータのインポート/エクスポートも可能です。 + リストの並び順を変更したり、不要なカテゴリを非表示にします。プロファイルデータのインポート/エクスポートも可能です。 一つあるいは複数のカテゴリーを選択して、新しいカスタムカテゴリーを追加できます。 利用可 カスタムカテゴリーを追加 @@ -3718,7 +3718,7 @@ POIの更新は利用できません 電源ボタン 端末の音量ボタンでマップのズームレベルを変更できるようにします。 音量ボタンでズーム - 出発・目的地アイコンを表示 + 出発地点と目的地アイコンを表示 幅の選択 距離または時間のマーカーが経路に表示される間隔を選択します。 時間または距離で、必要な分割オプションを選択します。 @@ -3735,7 +3735,7 @@ POIの更新は利用できません ルート反転 選択したプロファイルを使用して、次のセグメントのみ再計算します。 選択したプロファイルを使用して、経路全体が再計算されます。 - 直線で地点間をつなげる方法をとるか、選択したプロファイルで地点間のルートを計算します。 + 地点間を直線で結ぶ方法、または地点だけを指定しその後ルートを計算する方法のどちらかを選択します。 全経路 次のセグメント このオプションを使用するには、OsmAndで経路をマップ上の道路にスナップする必要があります。 @@ -3820,11 +3820,11 @@ POIの更新は利用できません 長さ制限 ベアリング %1$sを削除しました - スピードカメラのデータを完全に削除するには、再起動が必要です。 + アプリを再起動し、すべてのスピードカメラデータを削除します。 アンインストールして再起動 このアプリには、スピードカメラに関する情報はありません。 インラインスケート - 次の目的地を削除 + 最も近い目的地を削除 地点の名前を入力してください ルート上の現在の目的地点が削除されます。目的地に着いた場合はナビは停止します。 Wikipediaマップのダウンロード @@ -3835,13 +3835,13 @@ POIの更新は利用できません 経路 経路 経路 - GPX + REC GPXファイルへの経路ログ ルート経路 経路ファイルを追加 経路ファイルを記録、またはインポートします - 経路経由地点を追加 - 経路経由地点を追加 + 経路・経由地点を追加 + 経路・経由地点を追加 道路に貼り付ける 旅程の記録 経路ファイルとして保存 @@ -3875,13 +3875,13 @@ POIの更新は利用できません 保存した経路を開く 少なくとも2つの地点を追加してください。 繰り返し - • アップデートで追加されたルート計画モードは、セグメントごとに異なるナビゲーションタイプを使用でき、おおまかな指定を実際の道路に沿って反映可能に。 + • ルート計画機能を更新 : セグメントごとに異なるナビゲーションタイプを使用し、経路として反映することが可能に \n -\n• 経路の新しい外観オプション : 色、厚さを選択し、方向矢印のオン、マークの開始/終了など +\n• 経路の新しい外観オプション : 色、太さ、表示方向矢印、開始/終了アイコン選択 \n -\n• 自転車ノードの可視性の向上 +\n• 自転車ノードの視認性を向上 \n -\n• 基本情報を含む経路のコンテキストメニュー追加 +\n• 経路のタップで、基本情報を含むコンテキストメニューの表示 \n \n• 検索アルゴリズムの改善 \n @@ -3890,4 +3890,11 @@ POIの更新は利用できません \n• プロファイル設定のインポート/エクスポートに関する問題を修正 \n \n + 簡略化された経路 + ルートライン(経路)のみが保存され、経由地点は削除されます。 + %s個の経路ファイルが選択されました + ファイル名 + (最近使用したアプリを介して) OsmAndを終了すると、GPXの記録が一時停止されます(バックグラウンドサービスインジケーターがAndroid通知バーから消えます。) + 一般的な経路記録の記録間隔を定義します(マップ画面の\'GPX\'ボタンを使用) + 保存されました \ No newline at end of file diff --git a/OsmAnd/res/values-pt-rBR/phrases.xml b/OsmAnd/res/values-pt-rBR/phrases.xml index 27475442c8..dd7c249f87 100644 --- a/OsmAnd/res/values-pt-rBR/phrases.xml +++ b/OsmAnd/res/values-pt-rBR/phrases.xml @@ -3842,4 +3842,6 @@ Quadro de partidas Recarga de água potável Pequenos aparelhos elétricos + Colmeia + Loja de nozes \ No newline at end of file diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index ea83d5b1b6..1182d20a65 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -3819,7 +3819,7 @@ Rota reversa A trilha inteira será recalculada usando o perfil selecionado. Apenas o próximo segmento será recalculado usando o perfil selecionado. - Selecione como conectar pontos, com uma linha reta, ou calcular uma rota entre eles com o perfil selecionado. + Selecione como conectar pontos, por uma linha reta, ou calcular uma rota entre eles conforme especificado abaixo. Trilha inteira Próximo segmento Para usar esta opção, OsmAnd precisa ajustar sua trilha para as estradas do mapa. @@ -3849,7 +3849,7 @@ Escolha o arquivo de trilha a seguir Escolha o arquivo de trilha a seguir ou importe-o de seu dispositivo. Selecionar outra trilha - Navegue de minha localização até a trilha + Navegue da minha posição até a trilha Ponto da trilha para navegar Início da pista Ponto próximo @@ -3881,13 +3881,13 @@ está salvo Adicione pelo menos dois pontos. Refazer - "• O modo de rota de plano atualizado permite o uso de diferentes tipos de navegação para cada segmento e anexa qualquer trilha às estradas + "• Função de planejamento de rota atualizada: permite o uso de diferentes tipos de navegação por segmento e a inclusão de trilhas \n -\n • Novas opções de aparência para trilhas: selecione a cor, a espessura, ative as setas de direção e as marcas de início/fim +\n • Novo menu de aparência para trilhas: selecione cor, espessura, setas de direção de exibição, ícones de início / término \n -\n • Melhor visibilidade dos nós da bicicleta +\n • Melhor visibilidade dos nós da bicicleta. \n -\n • Menu de contexto para trilhas com informações básicas +\n • As trilhas agora podem ser tocadas, têm menu de contexto com informações básicas. \n \n • Algoritmos de pesquisa aprimorados \n diff --git a/OsmAnd/res/values-pt/phrases.xml b/OsmAnd/res/values-pt/phrases.xml index 744b9de0ca..0eb960c2f2 100644 --- a/OsmAnd/res/values-pt/phrases.xml +++ b/OsmAnd/res/values-pt/phrases.xml @@ -3827,4 +3827,5 @@ Quadro de partidas Reabastecimento de água potável Pequenos aparelhos elétricos + Colmeia \ No newline at end of file diff --git a/OsmAnd/res/values-pt/strings.xml b/OsmAnd/res/values-pt/strings.xml index 9b348c9bbe..49f1d72d9e 100644 --- a/OsmAnd/res/values-pt/strings.xml +++ b/OsmAnd/res/values-pt/strings.xml @@ -3829,7 +3829,7 @@ Rota inversa O trilho inteiro será recalculado a usar o perfil selecionado. Somente o próximo segmento será recalculado a usar o perfil selecionado. - Selecione como ligar pontos, com uma linha reta ou calcule uma rota entre eles com o perfil selecionado. + Selecione como ligar pontos, por uma linha reta ou a calcular uma rota entre eles como especificado abaixo. Trilho inteiro Próximo segmento Em seguida, encaixe a sua pista na estrada mais próxima permitida com um dos seus perfis de navegação para usar esta opção. @@ -3840,7 +3840,7 @@ Escolha o ficheiro de trilha a seguir Escolha o ficheiro de trilho a seguir ou importe um do seu aparelho. Selecionar outra trilha - Navegue de minha localização até a trilha + Navegue de minha posição até ao trilho Ponto da trilha para navegar Início da pista Ponto próximo @@ -3888,19 +3888,19 @@ Nome do ficheiro %s ficheiros de faixa selecionados Vai pausar o registo de faixas quando a aplicação for morta (através de aplicações recentes). (indicação de fundo de OsmAnd desaparece da barra de notificação do Android.) - - O modo Rota do Plano Atualizado permite usar diferentes tipos de navegação para cada segmento e anexa qualquer pista às estradas + - Função atualizada de Planear uma rota: permite utilizar diferentes tipos de navegação por segmento e a inclusão de faixas \n -\n - Novas opções de aparência para pistas: selecionar cor, espessura, rodar nas setas de direcção e marcas de início/fim +\n - Novo menu Aparência para trilhos: selecionar cor, espessura, setas de direção de visualização, ícones de início/fim \n -\n - Melhoria da visibilidade dos nós da bicicleta +\n - Melhoria da visibilidade dos nós da bicicleta. \n -\n - Menu de contexto para faixas com informações básicas +\n - Os trilhos agora podem ser tocados, ter menu de contexto com informações básicas. \n \n - Algoritmos de pesquisa melhorados \n -\n - Opções de faixa de acompanhamento melhoradas na navegação +\n - Opções de seguir faixas melhoradas na navegação \n -\n - Problemas fixos com as configurações de importação/exportação de perfis +\n - Problemas com as configurações de importação/exportação de perfis resolvidos \n \n \ No newline at end of file diff --git a/OsmAnd/res/values-ru/phrases.xml b/OsmAnd/res/values-ru/phrases.xml index 2f7dba711d..f67e31fb94 100644 --- a/OsmAnd/res/values-ru/phrases.xml +++ b/OsmAnd/res/values-ru/phrases.xml @@ -3830,4 +3830,6 @@ Задержка Расписание Малые электроприборы + Магазин орехов + Улей \ No newline at end of file diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 61a1b00868..55ff01a9a1 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -181,7 +181,7 @@ Толщина горизонталей Толщина горизонталей Воду - Скрыть воду + Водные объекты Старый поиск Показывать старый поиск Добавить старый поиск в меню. @@ -194,7 +194,7 @@ Построение маршрута У вас пока нет файлов треков Вы также можете добавить файлы треков в папку - Добавь ещё… + Добавить… Внешний вид Включить быструю запись Отображение системного уведомления, позволяющего начать запись поездки. @@ -233,18 +233,18 @@ Сохранить фильтр Удалить фильтр Новый фильтр - Изменить позицию + Изменить положение Текущий путь Навигация OsmAnd Live Уровень заряда батареи - Переместите карту, чтобы изменить положение маркера + Двигайте карту, чтобы изменить позицию маркера Магнитный пеленг Курсовой угол Режим карты Тонко Средне - Толстый + Жирно Выберите маркеры Верхняя панель Правок: %1$s, ранг: %2$s, всего правок: %3$s @@ -317,8 +317,8 @@ Открыть внешний проигрыватель Удалить эту запись? недоступно - Создать аудиозаметку - Создать видеозаметку + Записать аудио + Записать видео Слой аудиозаписей Запись не может быть воспроизведена. Удалить запись @@ -520,7 +520,7 @@ Пройти весь путь Для этого региона доступны локальные векторные карты. \n\t -\n\tДля их использования выберите в «Меню» → «Настройки карты» → «Источник карты…» → «Векторные карты». +\n\tДля их использования выберите в \"Меню\" → \"Настройка карты\" → \"Источник карты…\" → \"Векторные карты\". Голосовые инструкции Выберите канал вывода голосовых подсказок. Канал голосовых звонков (прерывает автомобильную Bluetooth стереосистему) @@ -531,14 +531,14 @@ Прозрачность наложения Отрегулируйте прозрачность основной карты. Прозрачность основной карты - Карта подложки… + Карта подложки Карта подложки Выберите карту подложки - Карта наложения… + Карта наложения Карта наложения Выберите слой наложения поверх основной карты Карта уже установлена, настройки будут обновлены. - Выберите (тайловые) карты для установки или обновления. + Выберите тайловые карты для установки или обновления. Для данной операции требуется подключение к интернету, но оно недоступно. Загрузить ещё… Минимальный масштаб для использования векторных карт. @@ -689,7 +689,7 @@ Маршрут Заметки OSM (онлайн) POI… - Источник карты… + Источник карты Слои Искать POI Использовать трекбол для перемещения по карте. @@ -819,7 +819,7 @@ POI Не удалось сохранить файл GPX. Не удалось рассчитать маршрут. - Не удалось рассчитать маршрут. + Не удалось рассчитать маршрут Невозможно построить маршрут. Проложен новый маршрут, расстояние Вы прибыли. @@ -864,7 +864,7 @@ 3D вид Показать последние использованные POI на карте. Показывать POI - Выберите источник онлайн или кешированных тайлов карты. + Выберите источник онлайн или кешированных тайлов карты Растровые карты Источник карты Использовать интернет @@ -1258,7 +1258,7 @@ Отменить маршрут Очистить пункт назначения Искать улицу в ближайших населённых пунктах - Сортировать от двери до двери + В порядке следования домов Доступно %1$d файлов для скачивания осталось %1$d файлов Подождите, пока завершится текущая операция @@ -1267,7 +1267,7 @@ Имя файла GPX Файл GPX сохранён в {0} Инструмент расчёта дистанции и планирования - Оптимальный порядок точек по пути к месту назначения. + Оптимальный порядок точек маршрута по пути к месту назначения. Не удалось выполнить резервное копирование изменений OSM. Резервное копирование как правка OSM высота @@ -1304,7 +1304,7 @@ К: Через: От: - У вас уже установлены промежуточные пункты. + Промежуточные пункты уже заданы. Названия улиц (TTS) Объявлять… Настройки озвучивания названий улиц, предупреждений о дорожном движении (принудительные остановки, искусственные неровности), камер контроля скорости и ограничений скорости. @@ -1502,7 +1502,7 @@ Строения Текст Леса и кустарники - Более подробно + Повышенная детализация Менее подробно Качество дорог Тип дорожного покрытия @@ -2110,7 +2110,7 @@ Запись удалена элементы удалены Автообновления - Выберите или скачайте голосовые оповещения для вашего языка. + Выберите или скачайте голосовые подсказки для вашего языка. Полный отчёт Пересчёт маршрута Имя пользователя и пароль OSM @@ -2170,7 +2170,7 @@ Не пересчитывать маршрут при обратном направлении движения Предотвращает автоматический пересчёт маршрута при обратном направлении движения. Пункт назначения не задан - Звуковая индикация направления + Озвучивать направление Индицировать звуком направление на целевую точку. Тактильная индикация направления Индицировать вибрацией направление на целевую точку. @@ -2216,7 +2216,7 @@ Скачать {0} файл(ов)\? \nИспользуется {3} МБ временного хранилища и {1} МБ постоянного. (Из {2} МБ) Найти моё местоположение - Прокладывайте маршруты и открывайте новые для себя места без подключения к интернету + Стройте маршруты и открывайте новые места без подключения к интернету Разрешить доступ к местоположению Дать разрешение Хранилище данных OsmAnd (для карт, файлов треков и пр.): %1$s. @@ -2235,7 +2235,7 @@ Получить Получайте неограниченное количество загрузок карт, вдобавок к еженедельным, ежедневным и даже почасовым обновлениям. Неограниченный доступ к картам, обновлениям и плагину «Википедия». - Выберите голосовое сопровождение + Голосовое сопровождение Абонентская плата взимается за выбранный период. Отменить подписку можно в Google Play в любой момент. Пожертвование для сообщества OSM Часть вашего пожертвования будет отправлена участникам OSM. Стоимость подписки при этом остаётся прежней. @@ -2296,7 +2296,7 @@ Фото с улиц онлайн для каждого. Открывайте места, взаимодействуйте, запечатлейте весь мир. Mapillary Уличные фотографии для всех. Открывайте для себя места, сотрудничайте, снимайте мир. - Название содержит слишком много заглавных букв. Вы хотите продолжить? + В названии слишком много заглавных букв. Продолжить\? Кнопка приостановки и возобновления навигации. Показывать диалог завершения навигации Запуск/остановка навигации @@ -2320,12 +2320,12 @@ Макс/Мин Мин/Макс Пауза/возобновление навигации - Перезагрузка тайлов для отображения актуальных данных. + Перезагрузить тайлы для актуализации данных. Введите имя пользователя Сбросить До От - Перезагрузить + Обновить Фильтровать фотографии по отправителю, дате или типу. Фильтры применяются только для больших масштабов. Не удалось импортировать файл. Убедитесь, что OsmAnd имеет разрешение на его чтение. Откорректированное расстояние @@ -2447,7 +2447,7 @@ Неправильный формат Введите новое имя Назад - Внешний вид на карте + Вид на карте Выберите категорию избранных для добавления к маркерам. Категория избранных Добавить группу @@ -2669,8 +2669,8 @@ Место без названия Текущий Добавляет промежуточную остановку - Добавляет первую остановку - Перемещает пункт назначения и создаёт промежуточную точку + Добавляет начальную остановку + Добавляет в конец точку в качестве нового пункта назначения Показать закрытые заметки Показать/скрыть заметки OSM на карте. GPX — подходит для экспорта в JOSM и другие OSM редакторы. @@ -2701,10 +2701,10 @@ З Ю С - Необязательное имя точки + Имя точки (необязательно) Спортивные сплавы Сначала дальние - Удалённость (сначала ближние) + Сначала ближние Группа удалена Очистить все промежуточные точки Использовать двузначную долготу @@ -3721,7 +3721,7 @@ Держать экран отключённым Держать экран включённым Файл SQLiteDB - Укажите имя источника онлайн-карты. + Укажите название источника онлайн-карты. Введите или вставьте URL онлайн-источника. Время устаревания Проекция Меркатора @@ -3786,13 +3786,13 @@ Предельная длина В этом устройстве нет камер контроля скорости. Роликовые коньки - Управляйте уровнем масштабирования карты с помощью кнопок громкости на устройстве. + Изменение масштаба карты кнопками громкости. Масштабирование кнопками громкости Укажите длину автомобиля, для длинных транспортных средств могут применяться ограничения на маршруте. - Удалить ближайшую точку назначения + Удалить следующий пункт Задайте название точки Следующая точка маршрута будет удалена. Если это конечный пункт, навигация завершится. - Получите информацию о достопримечательностях из Википедии. Это ваш карманный автономный путеводитель - просто включите плагин Википедии и наслаждайтесь статьями об объектах вокруг вас. + Информация о достопримечательностях из Википедии. Ваш карманный офлайн-путеводитель — просто включите плагин Википедии и читайте об объектах вокруг вас. Скачать карты Википедии Эндуро мотоцикл Мотороллер @@ -3824,14 +3824,14 @@ Предельная дистанция Сохранить как новый трек Обратный маршрут - Весь трек будет перестроен с использованием выбранного профиля. - Только следующий сегмент будет перестроен с использованием выбранного профиля. + Профиль будет примёнен ко всему маршруту. + Профиль будет применён только к следующему сегменту. Следующий сегмент Весь трек Для использования данной возможности OsmAnd необходимо привязать ваш трек по дорогам. \n \nНа следующем шаге необходимо выбрать профиль навигации для определения разрешенных дорог и пороговое расстояние, чтобы приблизительно привязать маршрут к дорогам. - Выберите способ соединения точек: прямой линией или прокладкой маршрута с выбранным профилем. + Выберите способ соединения точек прямой линией или рассчитайте маршрут между ними, как указано ниже. При обратном направлении Все изменения будут утеряны. Закрыть план маршрута\? Съёмка уличного уровня @@ -3845,8 +3845,8 @@ Маршрут трека Добавить файлы треков Импортируйте или запишите файлы треков - Добавить путевую точку - Добавить к маршруту + Добавить точку + Добавить точку к треку Запись поездки Сохранить как файл трека Следовать по маршруту @@ -3883,7 +3883,7 @@ Открыть сохранённый трек Остановка записи GPX при принудительном закрытии (через последние приложения). (Из панели уведомлений Android исчезнет значок фонового режима.) сохранен - Добавьте как минимум две точки. + Добавьте хотя бы две точки. ПОВТОРИТЬ • Обновленный режим планирования маршрута позволяет использовать разные типы навигации для каждого сегмента и прикрепляет любой трек к дорогам \n diff --git a/OsmAnd/res/values-sc/phrases.xml b/OsmAnd/res/values-sc/phrases.xml index 9c5f4c8384..df52122c1e 100644 --- a/OsmAnd/res/values-sc/phrases.xml +++ b/OsmAnd/res/values-sc/phrases.xml @@ -3811,9 +3811,9 @@ Raportu cun su livellu de s\'abba: in foras de su livellu mèdiu de s\'abba Raportu cun su livellu de s\'abba: in suta de su livellu mèdiu de s\'abba Tapadura - Ricàrica de s\'abba potàbile: eja - Ricàrica de s\'abba potàbile: nono - Retza de ricàrica de s\'abba potàbile + Eja + Ricàrriga de abba potàbile: nono + Retza de ricàrriga de abba potàbile Sutzione Presurizada Abba suta de terra @@ -3830,4 +3830,14 @@ Unidade amministrativa (Borough) Ascensore Fritza: nono + Butega de pilarda (nughes e àteru) + Moju + Oràriu + Tempus reale + Ritardu + Eja + Tabella de sas tzucadas: nono + Eletrodomèsticos minores + Tabellone de sas tzucadas + Ricàrriga de abba potàbile \ No newline at end of file diff --git a/OsmAnd/res/values-sc/strings.xml b/OsmAnd/res/values-sc/strings.xml index facff58683..8dba26d6c3 100644 --- a/OsmAnd/res/values-sc/strings.xml +++ b/OsmAnd/res/values-sc/strings.xml @@ -3783,27 +3783,27 @@ Disinstalla Orientamentu %1$s iscantzelladu - Depes torrare a allùghere pro iscantzellare de su totu sos datos de sos autovelox. + Torra a allùghere s\'aplicatzione pro iscantzellare totu sos datos de sos autovelox. Disinstalla e torra a allùghere Dillinda sa longària de su veìculu permìtida in sas àndalas. Lìmite de longària Custu dispositivu non tenet autovelox. Pàtinos in lìnia - Abìlita pro controllare su livellu de ismanniamentu cun sos butones de su volume de su dispositivu. + Controlla su livellu de ismanniamentu de sa mapa cun sos butones de su volume de su dispositivu. Butones de su volume pro s\'ismanniamentu Inserta sa longària de su veìculu tuo. Bi diant pòdere èssere unas cantas restritziones de sas àndalas pro sos veìculos longos. - Iscantzella su puntu de destinatzione imbeniente + Iscantzella su puntu de destinatzione prus a curtzu Fruni unu nùmene pro su puntu Su puntu de destinatzione atuale in s\'àndala at a èssere iscantzelladu. Si at a èssere sa destinatzione, sa navigatzione s\'at a firmare. Iscàrriga sas mapas de Wikipedia - Otene informatziones a pitzu de puntos de interesse dae Wikipedia. Est sa ghia non in lìnia tua de mantènnere in butzaca - abìlita s\'estensione Wikipedia e ispassia·ti cun sos artìculos a pitzu de sos ogetos a fùrriu de tie. + Otene informatziones a pitzu de puntos de interesse dae Wikipedia. Est sa ghia non in lìnia tua de mantènnere in butzaca - allughe s\'estensione Wikipedia e ispassia·ti cun sos artìculos a pitzu de sos ogetos a fùrriu de tie. Moto enduro Motorinu Cadira a rodas cara a in antis Cadira a rodas Go-kart Nota de OSM serrada - Depes impostare sas dies de traballu pro sighire + Imposta sas dies de traballu pro sighire Àndala intre puntos Pranìfica un\'àndala Annanghe a una rasta @@ -3826,7 +3826,7 @@ Fùrria s\'àndala Sa rasta intrea at a èssere torrada a calculare impreende su profilu ischertadu. Petzi su segmentu imbeniente at a èssere torradu a calculare impreende su profilu ischertadu. - Ischerta comente connètere sos puntos: cun una lìnia reta o calculende un\'àndala intre issos cun su profilu ischertadu. + Ischerta comente connètere sos puntos: cun una lìnia reta o calculende un\'àndala intre issos comente dislindadu inoghe in suta. Rasta intrea Segmentu imbeniente Pro impreare custa optzione OsmAnd tenet bisòngiu de alliniare sa rasta tua a sos caminos de sa mapa. @@ -3836,7 +3836,7 @@ Profilu de navigatzione Ischerta unu documentu de rasta in ue annànghere su segmentu nou. Fotografias a livellu de sas carreras - Ses seguru de chèrrere serrare sa pianificatzione de s\'àndala chene sarvare\? As a pèrdere totu sas modìficas. + Ses seguru de chèrrere serrare sa pianificatzione de s\'àndala e pèrdere totu sas modìficas\? In casu de diretzione furriada Rastas Càrriga sa rasta in unu documentu GPX @@ -3859,7 +3859,7 @@ Àndala de una rasta Sighi sa rasta Issèbera su documentu de sa rasta de sighire - Issèbera su documentu de sa rasta de sighire, o importa·nde unu. + Issèbera su documentu de sa rasta de sighire o importa·lu dae su dispositivu tuo. Ischerta un\'àtera rasta Nàviga dae sa positzione mea a sa rasta Puntu de sa rasta de navigare @@ -3887,4 +3887,19 @@ est sarvadu Pro praghere annanghe a su mancu duos puntos. Torra a fàghere + • Funtzionalidade de pranificatione de un\'àndala agiornada: permitit de impreare castas diferentes de navigatzione pro segmentu e s\'inclusione de rastas +\n +\n • New Appearance menu for tracks: select color, thickness, display direction arrows, start/finish icons +\n +\n • Visibilidade megiorada de sos nodos pro sas bitzicletas. +\n +\n • Como podes incarcare in sas rastas, e faghende gasi as a abèrrere unu menù de cuntestu cun informatziones de base. +\n +\n • Algoritmu de chirca megioradu +\n +\n • Optziones pro sighire una rasta durante sa navigatzione megioradas +\n +\n • Problemas cun s\'importatzione e s\'esportatzione de sas impostatziones de sos profilos risoltos +\n +\n \ No newline at end of file diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index cc7c2f013a..454bf3203b 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -3780,17 +3780,17 @@ Prepínač pre zobrazenie alebo skrytie vrstvy Mapillary na mape. Smerovanie %1$s vymazané - Pre úplné odstránenie údajov o rýchlostných radaroch je potrebný reštart. + Reštartovať aplikáciu pre úplné odstránenie údajov o rýchlostných radaroch. Odinštalovať a reštartovať Odinštalovať Zadajte aká dĺžka vozidla musí byť povolená na trase. Limit dĺžky Toto zariadenie neobsahuje rýchlostné radary. Kolieskové korčule - Umožní ovládať priblíženie mapy tlačidlami hlasitosti zariadenia. + Ovládať priblíženie mapy tlačidlami hlasitosti zariadenia. Tlačidlá hlasitosti na približovanie Zadajte dĺžku vášho vozidla, pretože na trase môžu byť obmedzenia pre dlhé vozidlá. - Vymazať ďalší cieľový bod + Vymazať najbližší cieľový bod Prosím zadajte názov pre bod Aktuálny cieľový bod na trase bude vymazaný. Ak je to posledný cieľ, navigácia sa zastaví. Stiahnuť mapy Wikipédia @@ -3800,8 +3800,8 @@ Invalidný vozík Invalidný vozík dopredu Motokára - Zatvorená OSM poznámka - Pre pokračovanie musíte zadať pracovné dni + OSM poznámka zatvorená + Zadať pracovné dni pre pokračovanie Trasa medzi bodmi Naplánovať trasu Pridať do stopy @@ -3824,23 +3824,21 @@ Otočiť trasu Celá stopa bude prepočítaná pomocou zvoleného profilu. Len nasledujúci úsek bude prepočítaný pomocou zvoleného profilu. - Zvoľte ako spojiť body, priamou čiarou alebo vypočítať trasu medzi nimi pomocou zvoleného profilu. + Zvoľte ako spojiť body, priamou čiarou alebo vypočítať trasu medzi nimi ako je určené ďalej. Celá stopa Ďalší úsek - Pre použitie tejto možnosti musí OsmAnd prichytiť vašu stopu na cesty v mape. -\n -\n V ďalšom kroku budete musieť zvoliť navigačný profil pre detekciu povolených ciest a hraničnú vzdialenosť pre aproximovanie vašej stopy cestami. + Ďalej, pre použitie tejto možnosti pripojte vašu stopu k najbližšej povolenej ceste s niektorým vaším navigačným profilom. Hraničná vzdialenosť Navigačný profil Zvoľte súbor stopy, pre ktorú bude pridaný nový úsek. Snímky z úrovne ulice - Naozaj chcete zatvoriť plánovanie trasy bez uloženia\? Všetky zmeny sa stratia. + Naozaj chcete zahodiť všetky zmeny v plánovanej trasy jej zatvorením\? V prípade opačného smeru Trasa zo stopy Pridať prechodný bod stopy Nasledovať stopu Zvoľte súbor stopy pre nasledovanie - Zvoľte súbor stopy pre nasledovanie, alebo nejaký importujte. + Zvoľte súbor stopy pre nasledovanie alebo nejaký importujte z vášho zariadenia. Zvoliť inú stopu Navigovať z mojej polohy k stope Bod stopy pre navigovanie @@ -3886,4 +3884,19 @@ Pokračovať v nahrávaní výletu Prosím pridajte aspoň dva body. Vykonať znova + • Vylepšená funkcia plánovania trasy: umožňuje použiť rôzne typy navigácie pre úseky trasy a začlenenie stôp +\n +\n • Nové menu pre vzhľad stôp: zvoľte farbu, hrúbku, smerové šípky, ikony štartu a cieľa +\n +\n • Zlepšená viditeľnosť bodov pre bicykle. +\n +\n • Stopy je teraz možné aktivovať, pre kontextové menu sú základnými údajmi. +\n +\n • Zlepšený algoritmus vyhľadávania +\n +\n • Zlepšené možnosti nasledovania stopy v navigácii +\n +\n • Opravené problému s importom a exportom nastavení profilov +\n +\n \ No newline at end of file diff --git a/OsmAnd/res/values-tr/strings.xml b/OsmAnd/res/values-tr/strings.xml index fd9beef585..1498c8591c 100644 --- a/OsmAnd/res/values-tr/strings.xml +++ b/OsmAnd/res/values-tr/strings.xml @@ -3783,7 +3783,7 @@ Ters güzergah Tüm yol, seçilen profil kullanılarak yeniden hesaplanacaktır. Sadece sonraki bölüm, seçilen profil kullanılarak yeniden hesaplanacaktır. - Düz bir çizgi ile noktaları nasıl birleştireceğinizi veya seçili profille aralarında nasıl güzergah hesaplayacağınızı seçin. + Düz bir çizgi ile noktaları nasıl birleştireceğinizi veya aşağıda belirtildiği gibi aralarında nasıl güzergah hesaplayacağınızı seçin. Tüm yol Sonraki bölüm Eşik mesafesi @@ -3814,4 +3814,17 @@ Genel yol kaydı için kayıt aralığını seçin (haritadaki seyahat kayıt widget\'ı aracılığıyla etkin). Seyahat kaydetmeyi duraklat Seyahat kaydetmeyi devam ettir + En yakın nokta + Adres sil + Adres ekle + Adres girin + Sadece güzergah hattı kaydedilecek, ara noktalar silinecektir. + Dosya adı + Sistem öntanımlı değeri + Sonraki tüm bölümler + Önceki bölüm + Önceki tüm bölümler + Sadece seçili bölüm, seçilen profil kullanılarak yeniden hesaplanacaktır. + Sonraki tüm bölümler, seçilen profil kullanılarak yeniden hesaplanacaktır. + Önceki tüm bölümler, seçilen profil kullanılarak yeniden hesaplanacaktır. \ No newline at end of file diff --git a/OsmAnd/res/values-uk/phrases.xml b/OsmAnd/res/values-uk/phrases.xml index 086eba5d78..79fb238aee 100644 --- a/OsmAnd/res/values-uk/phrases.xml +++ b/OsmAnd/res/values-uk/phrases.xml @@ -3830,4 +3830,6 @@ Дошка відправлень Поповнення питної води Невеликі електроприлади + Вулик + Насіннєвий магазин \ No newline at end of file diff --git a/OsmAnd/res/values-uk/strings.xml b/OsmAnd/res/values-uk/strings.xml index 1b1ca18e75..678d5dfc72 100644 --- a/OsmAnd/res/values-uk/strings.xml +++ b/OsmAnd/res/values-uk/strings.xml @@ -3828,7 +3828,7 @@ Зберегти як новий трек Весь трек буде перераховано за допомогою вибраного профілю. Лише наступний сегмент буде перераховано за допомогою обраного профілю. - Виберіть спосіб з\'єднання точок: прямою лінією чи розраховувати маршрут між ними за допомогою вибраного профілю. + Виберіть спосіб з\'єднання точок: прямою лінією чи обчислити маршрут між ними за, як зазначено далі. Зображення вулиць Ви дійсно бажаєте відхилити всі зміни у запланованому маршруті, закривши його\? Для зворотного напрямку @@ -3881,13 +3881,13 @@ Буде збережено лише лінію маршруту, а проміжні точки буде видалено. Назва файлу Повторити - • Оновлений режим планування маршруту дозволяє застосувати різні типи переходів для кожного сегмента і прив\'язує будь-який трек до доріг + • Оновлено функції планування маршруту: дозволено застосувати різні типи переходів для кожного сегмента і прив\'язати будь-який трек до доріг \n -\n• Нові параметри вигляду треків: вибір кольору, товщина стрілки напрямку та позначки початку/завершення +\n• Нове меню вигляду треків: вибір кольору, товщина, вигляд стрілки напрямку, піктограми початку/завершення \n \n• Покращено оглядовість велосипедних вузлів \n -\n• Контекстне меню для треків з основною інформацією +\n• На треки тепер можна натискати, є контекстне меню з основною інформацією. \n \n• Вдосконалено алгоритми пошуку \n diff --git a/OsmAnd/res/values-zh-rTW/phrases.xml b/OsmAnd/res/values-zh-rTW/phrases.xml index c078b2c6e7..352282d071 100644 --- a/OsmAnd/res/values-zh-rTW/phrases.xml +++ b/OsmAnd/res/values-zh-rTW/phrases.xml @@ -3841,4 +3841,5 @@ 時刻表 飲用水補充 小電器 + 蜂箱 \ No newline at end of file diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index 6bed71474e..33b644b362 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -3821,7 +3821,7 @@ 反向路線 整個軌跡都會使用選定的設定檔重新計算。 僅下一個片段會使用選定的設定檔重新計算。 - 選取如何連接點,用直線或以選定的設定檔計算其間的路徑。 + 選取如何連接點,透過直線或以下面選定的方法計算其間的路徑。 整個軌道 下一段 接下來,使用您其中一個導航設定檔來將路線貼齊到最近可用的道路上以使用此選項。 @@ -3881,13 +3881,13 @@ 已儲存 請至少新增兩個點。 重做 - • 更新的規劃路線模式允許對不同路段使用不同的導航類型,並可將任何軌跡附加到道路上 + • 更新「規劃路線」功能:允許每個路段使用不同的導航類型並包含軌跡 \n -\n • 新的軌跡外觀選項:選取顏色、厚度、開啟方向箭頭與開始/結束標記 +\n • 新的軌跡外觀選項:選取顏色、厚度、開啟方向箭頭與開始/結束圖示 \n \n • 改善自行車節點的能見度 \n -\n • 有基本資訊的軌跡情境選單 +\n • 軌跡現在是可點擊的,且有包含基本資訊的內容選單 \n \n • 改進了搜尋演算法 \n diff --git a/OsmAnd/res/values/phrases.xml b/OsmAnd/res/values/phrases.xml index cd482756ec..3f4394578a 100644 --- a/OsmAnd/res/values/phrases.xml +++ b/OsmAnd/res/values/phrases.xml @@ -4255,4 +4255,7 @@ Beehive + Nut store + + diff --git a/OsmAnd/src/net/osmand/plus/UiUtilities.java b/OsmAnd/src/net/osmand/plus/UiUtilities.java index 24ffd9c6f7..a435bd975e 100644 --- a/OsmAnd/src/net/osmand/plus/UiUtilities.java +++ b/OsmAnd/src/net/osmand/plus/UiUtilities.java @@ -42,6 +42,7 @@ import androidx.core.graphics.drawable.DrawableCompat; import androidx.core.view.ViewCompat; import androidx.core.widget.TintableCompoundButton; +import com.google.android.material.slider.LabelFormatter; import com.google.android.material.slider.RangeSlider; import com.google.android.material.slider.Slider; import com.google.android.material.snackbar.BaseTransientBottomBar; @@ -230,8 +231,12 @@ public class UiUtilities { } @ColorInt - public static int mixTwoColors(@ColorInt int color1, @ColorInt int color2, float amount ) - { + public static int removeAlpha(@ColorInt int color) { + return Color.rgb(Color.red(color), Color.green(color), Color.blue(color)); + } + + @ColorInt + public static int mixTwoColors(@ColorInt int color1, @ColorInt int color2, float amount) { final byte ALPHA_CHANNEL = 24; final byte RED_CHANNEL = 16; final byte GREEN_CHANNEL = 8; @@ -606,7 +611,7 @@ public class UiUtilities { slider.setTrackHeight(ctx.getResources().getDimensionPixelSize(R.dimen.slider_track_height)); // label behavior - slider.setLabelBehavior(Slider.LABEL_GONE); + slider.setLabelBehavior(LabelFormatter.LABEL_GONE); } public static void setupSlider(RangeSlider slider, boolean nightMode, @@ -646,7 +651,7 @@ public class UiUtilities { slider.setTrackHeight(ctx.getResources().getDimensionPixelSize(R.dimen.slider_track_height)); // label behavior - slider.setLabelBehavior(Slider.LABEL_GONE); + slider.setLabelBehavior(LabelFormatter.LABEL_GONE); } public static void setupDialogButton(boolean nightMode, View buttonView, DialogButtonType buttonType, @StringRes int buttonTextId) { diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 8e444b7d88..ea597558e1 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -61,6 +61,7 @@ import net.osmand.plus.mapmarkers.MarkersPlanRouteContext; import net.osmand.plus.measurementtool.MeasurementToolFragment; import net.osmand.plus.measurementtool.StartPlanRouteBottomSheet; import net.osmand.plus.monitoring.OsmandMonitoringPlugin; +import net.osmand.plus.profiles.RoutingProfileDataObject; import net.osmand.plus.routepreparationmenu.MapRouteInfoMenu; import net.osmand.plus.routepreparationmenu.WaypointsFragment; import net.osmand.plus.routing.RouteProvider.GPXRouteParamsBuilder; @@ -86,6 +87,7 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; import static net.osmand.IndexConstants.GPX_FILE_EXT; import static net.osmand.aidlapi.OsmAndCustomizationConstants.DRAWER_CONFIGURE_MAP_ID; @@ -115,6 +117,7 @@ import static net.osmand.aidlapi.OsmAndCustomizationConstants.MAP_CONTEXT_MENU_S import static net.osmand.plus.ContextMenuAdapter.PROFILES_CHOSEN_PROFILE_TAG; import static net.osmand.plus.ContextMenuAdapter.PROFILES_CONTROL_BUTTON_TAG; import static net.osmand.plus.ContextMenuAdapter.PROFILES_NORMAL_PROFILE_TAG; +import static net.osmand.plus.settings.fragments.NavigationFragment.getRoutingProfiles; public class MapActivityActions implements DialogProvider { @@ -731,11 +734,11 @@ public class MapActivityActions implements DialogProvider { ApplicationMode currentMode = app.getSettings().APPLICATION_MODE.get(); String modeDescription; - + + Map profilesObjects = getRoutingProfiles(app); for (final ApplicationMode appMode : activeModes) { if (appMode.isCustomProfile()) { - modeDescription = String.format(app.getString(R.string.profile_type_descr_string), - Algorithms.capitalizeFirstLetterAndLowercase(appMode.getParent().toHumanString())); + modeDescription = getCustomProfileDescription(app, appMode, profilesObjects); } else { modeDescription = getString(R.string.profile_type_base_string); } @@ -1045,8 +1048,8 @@ public class MapActivityActions implements DialogProvider { ApplicationMode currentMode = app.getSettings().APPLICATION_MODE.get(); String modeDescription; if (currentMode.isCustomProfile()) { - modeDescription = String.format(app.getString(R.string.profile_type_descr_string), - Algorithms.capitalizeFirstLetterAndLowercase(currentMode.getParent().toHumanString())); + Map profilesObjects = getRoutingProfiles(app); + modeDescription = getCustomProfileDescription(app, currentMode, profilesObjects); } else { modeDescription = getString(R.string.profile_type_base_string); } @@ -1081,6 +1084,21 @@ public class MapActivityActions implements DialogProvider { .createItem()); } + private String getCustomProfileDescription(OsmandApplication app, ApplicationMode mode, + Map profilesObjects){ + String description = getString(R.string.profile_type_custom_string); + + String routingProfileKey = mode.getRoutingProfile(); + if (!Algorithms.isEmpty(routingProfileKey)) { + RoutingProfileDataObject profileDataObject = profilesObjects.get(routingProfileKey); + if (profileDataObject != null) { + description = String.format(app.getString(R.string.profile_type_descr_string), + Algorithms.capitalizeFirstLetterAndLowercase(profileDataObject.getName())); + } + } + return description; + } + public void openIntermediatePointsDialog() { mapActivity.hideContextAndRouteInfoMenues(); WaypointsFragment.showInstance(mapActivity.getSupportFragmentManager()); diff --git a/OsmAnd/src/net/osmand/plus/base/ContextMenuFragment.java b/OsmAnd/src/net/osmand/plus/base/ContextMenuFragment.java index 5cb595f0ff..e1436bb400 100644 --- a/OsmAnd/src/net/osmand/plus/base/ContextMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/base/ContextMenuFragment.java @@ -46,6 +46,7 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.mapcontextmenu.InterceptorLinearLayout; import net.osmand.plus.views.controls.HorizontalSwipeConfirm; +import net.osmand.plus.views.controls.SingleTapConfirm; import static net.osmand.plus.mapcontextmenu.MapContextMenuFragment.CURRENT_Y_UNDEFINED; @@ -315,7 +316,8 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment { processScreenHeight(container); minHalfY = getMinHalfY(mapActivity); - final GestureDetector swipeDetector = new GestureDetector(app, new HorizontalSwipeConfirm(true)); + final GestureDetector singleTapDetector = new GestureDetector(view.getContext(), new SingleTapConfirm()); + final GestureDetector swipeDetector = new GestureDetector(view.getContext(), new HorizontalSwipeConfirm(true)); final OnTouchListener slideTouchListener = new OnTouchListener() { private float dy; @@ -330,6 +332,8 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment { private boolean slidingUp; private boolean slidingDown; + private boolean hasMoved; + { OsmandApplication app = requireMyApplication(); scroller = new OverScroller(app); @@ -340,7 +344,15 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment { @Override public boolean onTouch(View v, MotionEvent event) { + if (!hasMoved && getHeaderViewHeight() > 0 && event.getY() <= getHeaderViewHeight()) { + if (singleTapDetector.onTouchEvent(event)) { + moving = false; + onHeaderClick(); + recycleVelocityTracker(); + return true; + } + } if (!portrait) { if (swipeDetector.onTouchEvent(event)) { dismiss(); @@ -352,6 +364,7 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: + hasMoved = false; mDownY = event.getRawY(); dy = event.getY(); dyMain = getViewY(); @@ -365,6 +378,7 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment { moving = true; } if (moving) { + hasMoved = true; float y = event.getY(); float newY = getViewY() + (y - dy); if (!portrait && newY > topScreenPosY) { @@ -390,6 +404,7 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment { case MotionEvent.ACTION_UP: if (moving) { moving = false; + hasMoved = false; int currentY = getViewY(); int fullScreenTopPosY = getMenuStatePosY(MenuState.FULL_SCREEN); final VelocityTracker velocityTracker = this.velocityTracker; @@ -417,6 +432,7 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment { break; case MotionEvent.ACTION_CANCEL: moving = false; + hasMoved = false; recycleVelocityTracker(); break; @@ -903,6 +919,10 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment { runLayoutListener(); } + protected void onHeaderClick() { + + } + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) protected void runLayoutListener() { if (view != null) { diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/FavoritePointEditorFragmentNew.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/FavoritePointEditorFragmentNew.java index b29d0e7be8..9bfe58324a 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/FavoritePointEditorFragmentNew.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/FavoritePointEditorFragmentNew.java @@ -243,8 +243,8 @@ public class FavoritePointEditorFragmentNew extends PointEditorFragmentNew { if (favorite != null) { final FavouritePoint point = new FavouritePoint(favorite.getLatitude(), favorite.getLongitude(), getNameTextValue(), getCategoryTextValue()); - point.setDescription(getDescriptionTextValue()); - point.setAddress(getAddressTextValue()); + point.setDescription(isDescriptionAvailable() ? getDescriptionTextValue() : null); + point.setAddress(isAddressAvailable() ? getAddressTextValue() : null); point.setColor(color); point.setBackgroundType(backgroundType); point.setIconId(iconId); @@ -259,8 +259,8 @@ public class FavoritePointEditorFragmentNew extends PointEditorFragmentNew { if (favorite != null) { final FavouritePoint point = new FavouritePoint(favorite.getLatitude(), favorite.getLongitude(), getNameTextValue(), getCategoryTextValue()); - point.setDescription(getDescriptionTextValue()); - point.setAddress(getAddressTextValue()); + point.setDescription(isDescriptionAvailable() ? getDescriptionTextValue() : null); + point.setAddress(isAddressAvailable() ? getAddressTextValue() : null); point.setColor(color); point.setBackgroundType(backgroundType); point.setIconId(iconId); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java index cd7a783a7b..3214817780 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java @@ -27,6 +27,7 @@ import android.widget.TextView; import androidx.activity.OnBackPressedCallback; import androidx.annotation.ColorInt; +import androidx.annotation.ColorRes; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -39,7 +40,6 @@ import androidx.fragment.app.FragmentActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputLayout; import net.osmand.AndroidUtils; @@ -81,6 +81,7 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment { private TextView addDelDescription; private TextView addAddressBtn; private TextView addToHiddenGroupInfo; + private ImageView deleteAddressIcon; private boolean cancelled; private boolean nightMode; @DrawableRes @@ -167,7 +168,7 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment { } }); - final int activeColorResId = nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light; + final int activeColorResId = getActiveColorRes(); ImageView toolbarAction = (ImageView) view.findViewById(R.id.toolbar_action); view.findViewById(R.id.background_layout).setBackgroundResource(nightMode ? R.color.app_bar_color_dark : R.color.list_background_color_light); @@ -247,56 +248,69 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment { if (getDescriptionInitValue() != null) { descriptionEdit.setText(getDescriptionInitValue()); } - if (getAddressInitValue() != null){ - addressEdit.setText(getAddressInitValue()); - addressEdit.setSelection(addressEdit.getText().length()); - } descriptionCaption = view.findViewById(R.id.description); addressCaption = view.findViewById(R.id.address); addDelDescription = (TextView) view.findViewById(R.id.description_button); addAddressBtn = view.findViewById(R.id.address_button); + deleteAddressIcon = view.findViewById(R.id.delete_address_icon); + deleteAddressIcon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_trash_basket_16, activeColorResId)); + addDelDescription.setTextColor(getResources().getColor(activeColorResId)); addAddressBtn.setTextColor(getResources().getColor(activeColorResId)); - addAddressBtn.setCompoundDrawablesWithIntrinsicBounds( - app.getUIUtilities().getIcon(R.drawable.ic_action_location_16, activeColorResId),null,null,null); - addDelDescription.setCompoundDrawablesWithIntrinsicBounds( - app.getUIUtilities().getIcon(R.drawable.ic_action_description_16, activeColorResId),null,null,null); + Drawable addressIcon = app.getUIUtilities().getIcon(R.drawable.ic_action_location_16, activeColorResId); + addAddressBtn.setCompoundDrawablesWithIntrinsicBounds(addressIcon, null, null, null); addDelDescription.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (descriptionCaption.getVisibility() != View.VISIBLE) { descriptionCaption.setVisibility(View.VISIBLE); addDelDescription.setText(view.getResources().getString(R.string.delete_description)); - addDelDescription.setCompoundDrawablesWithIntrinsicBounds( - app.getUIUtilities().getIcon(R.drawable.ic_action_trash_basket_16, - activeColorResId),null,null,null); View descriptionEdit = view.findViewById(R.id.description_edit); descriptionEdit.requestFocus(); AndroidUtils.softKeyboardDelayed(getActivity(), descriptionEdit); } else { descriptionCaption.setVisibility(View.GONE); addDelDescription.setText(view.getResources().getString(R.string.add_description)); - addDelDescription.setCompoundDrawablesWithIntrinsicBounds( - app.getUIUtilities().getIcon(R.drawable.ic_action_description_16, - activeColorResId),null,null,null); AndroidUtils.hideSoftKeyboard(requireActivity(), descriptionEdit); descriptionEdit.clearFocus(); } + updateDescriptionIcon(); } }); AndroidUiHelper.updateVisibility(addressCaption, false); - addAddressBtn.setText(getAddressInitValue()); + + String addressInitValue = getAddressInitValue(); + if (!Algorithms.isEmpty(addressInitValue)) { + addressEdit.setText(addressInitValue); + addAddressBtn.setText(addressInitValue); + addressEdit.setSelection(addressInitValue.length()); + AndroidUiHelper.updateVisibility(deleteAddressIcon, true); + } else { + addAddressBtn.setText(getString(R.string.add_address)); + AndroidUiHelper.updateVisibility(deleteAddressIcon, false); + } + + deleteAddressIcon.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + addressEdit.setText(""); + addAddressBtn.setText(view.getResources().getString(R.string.add_address)); + AndroidUiHelper.updateVisibility(addressCaption, false); + AndroidUiHelper.updateVisibility(deleteAddressIcon, false); + } + }); + + final View addressRow = view.findViewById(R.id.address_row); addAddressBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (addressCaption.getVisibility() != View.VISIBLE) { addressCaption.setVisibility(View.VISIBLE); - addAddressBtn.setText(view.getResources().getString(R.string.delete_address)); - TextInputEditText addressEdit = view.findViewById(R.id.address_edit); addressEdit.requestFocus(); addressEdit.setSelection(addressEdit.getText().length()); - AndroidUtils.softKeyboardDelayed(requireActivity(),addressEdit); + AndroidUtils.softKeyboardDelayed(requireActivity(), addressEdit); + AndroidUiHelper.updateVisibility(addressRow, false); } else { addressCaption.setVisibility(View.GONE); addAddressBtn.setText(getAddressTextValue()); @@ -371,6 +385,17 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment { return view; } + private void updateDescriptionIcon() { + int iconId; + if (descriptionCaption.getVisibility() == View.VISIBLE) { + iconId = R.drawable.ic_action_trash_basket_16; + } else { + iconId = R.drawable.ic_action_description_16; + } + Drawable icon = app.getUIUtilities().getIcon(iconId, getActiveColorRes()); + addDelDescription.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null); + } + private void checkEmptyName(Editable name, TextInputLayout nameCaption, View saveButton) { if (name.toString().trim().isEmpty()) { nameCaption.setError(app.getString(R.string.please_provide_point_name_error)); @@ -408,7 +433,20 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment { descriptionCaption.setVisibility(View.GONE); addDelDescription.setText(app.getString(R.string.add_description)); } + updateDescriptionIcon(); + } + boolean isAddressAvailable() { + return addressCaption.getVisibility() == View.VISIBLE; + } + + boolean isDescriptionAvailable() { + return descriptionCaption.getVisibility() == View.VISIBLE; + } + + @ColorRes + private int getActiveColorRes() { + return nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light; } private void createGroupSelector() { diff --git a/OsmAnd/src/net/osmand/plus/routing/GpxApproximator.java b/OsmAnd/src/net/osmand/plus/routing/GpxApproximator.java index 7e6b089620..61d8408fe6 100644 --- a/OsmAnd/src/net/osmand/plus/routing/GpxApproximator.java +++ b/OsmAnd/src/net/osmand/plus/routing/GpxApproximator.java @@ -22,6 +22,7 @@ import org.apache.commons.logging.Log; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Future; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -44,6 +45,7 @@ public class GpxApproximator { private ThreadPoolExecutor singleThreadedExecutor; private GpxApproximationProgressCallback approximationProgress; + private Future currentApproximationTask; public interface GpxApproximationProgressCallback { @@ -152,7 +154,10 @@ public class GpxApproximator { this.gctx = gctx; startProgress(); updateProgress(gctx); - singleThreadedExecutor.submit(new Runnable() { + if (currentApproximationTask != null) { + currentApproximationTask.cancel(true); + } + currentApproximationTask = singleThreadedExecutor.submit(new Runnable() { @Override public void run() { try { diff --git a/OsmAnd/src/net/osmand/plus/track/CustomColorBottomSheet.java b/OsmAnd/src/net/osmand/plus/track/CustomColorBottomSheet.java index a5db15c147..b5ef5e1961 100644 --- a/OsmAnd/src/net/osmand/plus/track/CustomColorBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/track/CustomColorBottomSheet.java @@ -11,6 +11,7 @@ import android.widget.EditText; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -46,7 +47,7 @@ public class CustomColorBottomSheet extends MenuBottomSheetDialogFragment implem private boolean fromEditText; @ColorInt - private int prevColor; + private Integer prevColor; @ColorInt private int newColor; @@ -54,12 +55,18 @@ public class CustomColorBottomSheet extends MenuBottomSheetDialogFragment implem public void createMenuItems(Bundle savedInstanceState) { if (savedInstanceState != null) { newColor = savedInstanceState.getInt(NEW_SELECTED_COLOR); - prevColor = savedInstanceState.getInt(PREV_SELECTED_COLOR); + if (savedInstanceState.containsKey(PREV_SELECTED_COLOR)) { + prevColor = savedInstanceState.getInt(PREV_SELECTED_COLOR); + } } else { Bundle args = getArguments(); if (args != null) { - prevColor = args.getInt(PREV_SELECTED_COLOR); - newColor = prevColor != -1 ? prevColor : Color.RED; + if (args.containsKey(PREV_SELECTED_COLOR)) { + prevColor = args.getInt(PREV_SELECTED_COLOR); + newColor = prevColor; + } else { + newColor = Color.RED; + } } } @@ -74,7 +81,9 @@ public class CustomColorBottomSheet extends MenuBottomSheetDialogFragment implem @Override public void onSaveInstanceState(Bundle outState) { outState.putInt(NEW_SELECTED_COLOR, newColor); - outState.putInt(PREV_SELECTED_COLOR, prevColor); + if (prevColor != null) { + outState.putInt(PREV_SELECTED_COLOR, prevColor); + } super.onSaveInstanceState(outState); } @@ -157,11 +166,13 @@ public class CustomColorBottomSheet extends MenuBottomSheetDialogFragment implem dismiss(); } - public static void showInstance(@NonNull FragmentManager fragmentManager, Fragment target, int prevColor) { + public static void showInstance(@NonNull FragmentManager fragmentManager, Fragment target, @Nullable Integer prevColor) { try { if (!fragmentManager.isStateSaved() && fragmentManager.findFragmentByTag(CustomColorBottomSheet.TAG) == null) { Bundle args = new Bundle(); - args.putInt(PREV_SELECTED_COLOR, prevColor); + if (prevColor != null) { + args.putInt(PREV_SELECTED_COLOR, prevColor); + } CustomColorBottomSheet customColorBottomSheet = new CustomColorBottomSheet(); customColorBottomSheet.setArguments(args); @@ -175,7 +186,7 @@ public class CustomColorBottomSheet extends MenuBottomSheetDialogFragment implem public interface ColorPickerListener { - void onColorSelected(@ColorInt int prevColor, @ColorInt int newColor); + void onColorSelected(@ColorInt Integer prevColor, @ColorInt int newColor); } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java b/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java index 5061323bc5..53d49bd2a7 100644 --- a/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java +++ b/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java @@ -13,6 +13,7 @@ import android.view.ViewTreeObserver; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.ScrollView; import androidx.activity.OnBackPressedCallback; import androidx.annotation.ColorInt; @@ -80,6 +81,9 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement private TrackColoringCard trackColoringCard; private ImageView trackIcon; + private View buttonsShadow; + private View routeMenuTopShadowAll; + private View controlButtons; @Override public int getMainLayoutId() { @@ -109,6 +113,11 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement return trackDrawInfo; } + @Override + public int getSupportedMenuStatesPortrait() { + return MenuState.HEADER_ONLY | MenuState.HALF_SCREEN | MenuState.FULL_SCREEN; + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -182,13 +191,9 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement View view = super.onCreateView(inflater, container, savedInstanceState); if (view != null) { trackIcon = view.findViewById(R.id.track_icon); - - view.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - openMenuHeaderOnly(); - } - }); + buttonsShadow = view.findViewById(R.id.buttons_shadow); + controlButtons = view.findViewById(R.id.control_buttons); + routeMenuTopShadowAll = view.findViewById(R.id.route_menu_top_shadow_all); if (isPortrait()) { updateCardsLayout(); @@ -201,7 +206,7 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement int widthNoShadow = getLandscapeNoShadowWidth(); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(widthNoShadow, ViewGroup.LayoutParams.WRAP_CONTENT); params.gravity = Gravity.BOTTOM | Gravity.START; - view.findViewById(R.id.control_buttons).setLayoutParams(params); + controlButtons.setLayoutParams(params); } enterTrackAppearanceMode(); runLayoutListener(); @@ -211,9 +216,8 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement @Override protected void calculateLayout(View view, boolean initLayout) { - menuTitleHeight = view.findViewById(R.id.route_menu_top_shadow_all).getHeight() - + view.findViewById(R.id.control_buttons).getHeight() - - view.findViewById(R.id.buttons_shadow).getHeight(); + menuTitleHeight = routeMenuTopShadowAll.getHeight() + + controlButtons.getHeight() - buttonsShadow.getHeight(); super.calculateLayout(view, initLayout); } @@ -229,6 +233,11 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement updateStatusBarColor(); } + @Override + public boolean shouldShowMapControls(int menuState) { + return menuState == MenuState.HEADER_ONLY || menuState == MenuState.HALF_SCREEN; + } + @Override public void onResume() { super.onResume(); @@ -325,10 +334,7 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement if (card instanceof SplitIntervalCard) { SplitIntervalBottomSheet.showInstance(mapActivity.getSupportFragmentManager(), trackDrawInfo, this); } else if (card instanceof TrackColoringCard) { - updateAppearanceIcon(); - if (trackWidthCard != null) { - trackWidthCard.updateItems(); - } + updateColorItems(); } else if (card instanceof TrackWidthCard) { updateAppearanceIcon(); } else if (card instanceof DirectionArrowsCard) { @@ -343,8 +349,9 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement } @Override - public void onColorSelected(int prevColor, int newColor) { + public void onColorSelected(Integer prevColor, int newColor) { trackColoringCard.onColorSelected(prevColor, newColor); + updateColorItems(); } @Override @@ -361,6 +368,11 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement trackIcon.setImageDrawable(icon); } + @Override + protected void onHeaderClick() { + adjustMapPosition(getViewY()); + } + private void adjustMapPosition(int y) { MapActivity mapActivity = getMapActivity(); if (mapActivity != null && mapActivity.getMapView() != null) { @@ -391,13 +403,21 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement int strokeColor = UiUtilities.getColorWithAlpha(Color.BLACK, 0.7f); Drawable strokeIcon = app.getUIUtilities().getPaintedIcon(strokeIconId, strokeColor); + Drawable transparencyIcon = getTransparencyIcon(app, widthAttr, color); if (showArrows) { int arrowsIconId = getArrowsIconId(widthAttr); int contrastColor = UiUtilities.getContrastColor(app, color, false); Drawable arrows = app.getUIUtilities().getPaintedIcon(arrowsIconId, contrastColor); - return UiUtilities.getLayeredIcon(widthIcon, strokeIcon, arrows); + return UiUtilities.getLayeredIcon(transparencyIcon, widthIcon, strokeIcon, arrows); } - return UiUtilities.getLayeredIcon(widthIcon, strokeIcon); + return UiUtilities.getLayeredIcon(transparencyIcon, widthIcon, strokeIcon); + } + + private Drawable getTransparencyIcon(OsmandApplication app, String widthAttr, @ColorInt int color) { + int transparencyIconId = getTransparencyIconId(widthAttr); + int colorWithoutAlpha = UiUtilities.removeAlpha(color); + int transparencyColor = UiUtilities.getColorWithAlpha(colorWithoutAlpha, 0.8f); + return app.getUIUtilities().getPaintedIcon(transparencyIconId, transparencyColor); } private void updateCardsLayout() { @@ -465,10 +485,23 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement } else if (scrollY > 0 && bottomContainer.getForeground() == null) { bottomContainer.setForeground(shadowIcon); } + updateButtonsShadow(); } }); } + private void updateButtonsShadow() { + boolean scrollToBottomAvailable = getBottomScrollView().canScrollVertically(1); + AndroidUiHelper.updateVisibility(buttonsShadow, scrollToBottomAvailable); + } + + private void updateColorItems() { + updateAppearanceIcon(); + if (trackWidthCard != null) { + trackWidthCard.updateItems(); + } + } + private void saveTrackInfo() { GPXFile gpxFile = selectedGpxFile.getGpxFile(); @@ -547,19 +580,7 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement } private void saveGpx(final GPXFile gpxFile) { - new SaveGpxAsyncTask(gpxFile, new SaveGpxAsyncTask.SaveGpxListener() { - @Override - public void gpxSavingStarted() { - - } - - @Override - public void gpxSavingFinished(Exception errorMessage) { - if (errorMessage == null) { - app.showShortToastMessage(R.string.shared_string_track_is_saved, Algorithms.getFileWithoutDirs(gpxFile.path)); - } - } - }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + new SaveGpxAsyncTask(gpxFile, null).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } private void setupCards() { @@ -582,7 +603,21 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement trackColoringCard.setListener(this); cardsContainer.addView(trackColoringCard.build(mapActivity)); - trackWidthCard = new TrackWidthCard(mapActivity, trackDrawInfo); + trackWidthCard = new TrackWidthCard(mapActivity, trackDrawInfo, new OnNeedScrollListener() { + + @Override + public void onVerticalScrollNeeded(int y) { + View view = trackWidthCard.getView(); + if (view != null) { + int resultYPosition = view.getTop() + y; + int dialogHeight = getInnerScrollableHeight(); + ScrollView scrollView = (ScrollView) getBottomScrollView(); + if (resultYPosition > (scrollView.getScrollY() + dialogHeight)) { + scrollView.smoothScrollTo(0, resultYPosition - dialogHeight); + } + } + } + }); trackWidthCard.setListener(this); cardsContainer.addView(trackWidthCard.build(mapActivity)); } @@ -625,6 +660,13 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement } } + public int getInnerScrollableHeight() { + int totalScreenHeight = getViewHeight() - getMenuStatePosY(getCurrentMenuState()); + int frameTotalHeight = routeMenuTopShadowAll.getHeight() + + controlButtons.getHeight() + buttonsShadow.getHeight(); + return totalScreenHeight - frameTotalHeight; + } + public static boolean showInstance(@NonNull MapActivity mapActivity, TrackAppearanceFragment fragment) { try { mapActivity.getSupportFragmentManager() @@ -638,6 +680,16 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement } } + public static int getTransparencyIconId(String widthAttr) { + if (TRACK_WIDTH_BOLD.equals(widthAttr)) { + return R.drawable.ic_action_track_line_bold_transparency; + } else if (TRACK_WIDTH_MEDIUM.equals(widthAttr)) { + return R.drawable.ic_action_track_line_medium_transparency; + } else { + return R.drawable.ic_action_track_line_thin_transparency; + } + } + public static int getWidthIconId(String widthAttr) { if (TRACK_WIDTH_BOLD.equals(widthAttr)) { return R.drawable.ic_action_track_line_bold_color; @@ -667,4 +719,8 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement return R.drawable.ic_action_track_line_thin_direction; } } + + public interface OnNeedScrollListener { + void onVerticalScrollNeeded(int y); + } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/track/TrackColoringCard.java b/OsmAnd/src/net/osmand/plus/track/TrackColoringCard.java index 6d6d5ba53b..e8ab755507 100644 --- a/OsmAnd/src/net/osmand/plus/track/TrackColoringCard.java +++ b/OsmAnd/src/net/osmand/plus/track/TrackColoringCard.java @@ -23,9 +23,9 @@ import com.google.android.material.internal.FlowLayout; import net.osmand.AndroidUtils; import net.osmand.PlatformUtil; -import net.osmand.plus.GPXDatabase; import net.osmand.plus.GPXDatabase.GpxDataItem; import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile; +import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.MapActivity; @@ -146,11 +146,15 @@ public class TrackColoringCard extends BaseCard implements ColorPickerListener { View colorItemView = createCircleView(rootView); ImageView backgroundCircle = colorItemView.findViewById(R.id.background); + + Drawable transparencyIcon = getTransparencyIcon(app, color); + Drawable colorIcon = app.getUIUtilities().getPaintedIcon(R.drawable.bg_point_circle, color); + Drawable layeredIcon = UiUtilities.getLayeredIcon(transparencyIcon, colorIcon); double contrastRatio = ColorUtils.calculateContrast(color, ContextCompat.getColor(app, nightMode ? R.color.card_and_list_background_dark : R.color.card_and_list_background_light)); if (contrastRatio < MINIMUM_CONTRAST_RATIO) { backgroundCircle.setBackgroundResource(nightMode ? R.drawable.circle_contour_bg_dark : R.drawable.circle_contour_bg_light); } - backgroundCircle.setImageDrawable(UiUtilities.tintDrawable(AppCompatResources.getDrawable(app, R.drawable.bg_point_circle), color)); + backgroundCircle.setImageDrawable(layeredIcon); backgroundCircle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -180,6 +184,12 @@ public class TrackColoringCard extends BaseCard implements ColorPickerListener { return colorItemView; } + private Drawable getTransparencyIcon(OsmandApplication app, @ColorInt int color) { + int colorWithoutAlpha = UiUtilities.removeAlpha(color); + int transparencyColor = UiUtilities.getColorWithAlpha(colorWithoutAlpha, 0.8f); + return app.getUIUtilities().getPaintedIcon(R.drawable.ic_bg_transparency, transparencyColor); + } + private View createAddCustomColorItemView(FlowLayout rootView) { View colorItemView = createCircleView(rootView); ImageView backgroundCircle = colorItemView.findViewById(R.id.background); @@ -190,7 +200,7 @@ public class TrackColoringCard extends BaseCard implements ColorPickerListener { ImageView icon = colorItemView.findViewById(R.id.icon); icon.setVisibility(View.VISIBLE); int activeColorResId = nightMode ? R.color.icon_color_active_dark : R.color.icon_color_active_light; - icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_add, activeColorResId)); + icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_plus, activeColorResId)); backgroundCircle.setImageDrawable(backgroundIcon); backgroundCircle.setOnClickListener(new View.OnClickListener() { @@ -198,7 +208,7 @@ public class TrackColoringCard extends BaseCard implements ColorPickerListener { public void onClick(View v) { MapActivity mapActivity = getMapActivity(); if (mapActivity != null) { - CustomColorBottomSheet.showInstance(mapActivity.getSupportFragmentManager(), target, TrackColoringCard.INVALID_VALUE); + CustomColorBottomSheet.showInstance(mapActivity.getSupportFragmentManager(), target, null); } } }); @@ -285,23 +295,27 @@ public class TrackColoringCard extends BaseCard implements ColorPickerListener { } @Override - public void onColorSelected(int prevColor, int newColor) { - if (prevColor == INVALID_VALUE && customColors.size() < 6) { - customColors.add(newColor); - } else if (!Algorithms.isEmpty(customColors)) { + public void onColorSelected(Integer prevColor, int newColor) { + if (prevColor != null) { int index = customColors.indexOf(prevColor); if (index != INVALID_VALUE) { customColors.set(index, newColor); + saveCustomColorsToTracks(prevColor, newColor); } + if (trackDrawInfo.getColor() == prevColor) { + trackDrawInfo.setColor(newColor); + } + } else if (customColors.size() < 6) { + customColors.add(newColor); + trackDrawInfo.setColor(newColor); } saveCustomColors(); - saveCustomColorsToTracks(prevColor, newColor); updateContent(); } private void saveCustomColorsToTracks(int prevColor, int newColor) { List gpxDataItems = app.getGpxDbHelper().getItems(); - for (GPXDatabase.GpxDataItem dataItem : gpxDataItems) { + for (GpxDataItem dataItem : gpxDataItems) { if (prevColor == dataItem.getColor()) { app.getGpxDbHelper().updateColor(dataItem, newColor); } diff --git a/OsmAnd/src/net/osmand/plus/track/TrackWidthCard.java b/OsmAnd/src/net/osmand/plus/track/TrackWidthCard.java index 8a86b020a1..2a8f34c024 100644 --- a/OsmAnd/src/net/osmand/plus/track/TrackWidthCard.java +++ b/OsmAnd/src/net/osmand/plus/track/TrackWidthCard.java @@ -14,6 +14,7 @@ import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.github.ksoichiro.android.observablescrollview.ScrollUtils; import com.google.android.material.slider.Slider; import net.osmand.AndroidUtils; @@ -25,6 +26,7 @@ import net.osmand.plus.dialogs.GpxAppearanceAdapter.AppearanceListItem; import net.osmand.plus.dialogs.GpxAppearanceAdapter.GpxAppearanceAdapterType; import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.routepreparationmenu.cards.BaseCard; +import net.osmand.plus.track.TrackAppearanceFragment.OnNeedScrollListener; import net.osmand.util.Algorithms; import java.util.List; @@ -36,15 +38,19 @@ public class TrackWidthCard extends BaseCard { private final static int CUSTOM_WIDTH_MAX = 24; private TrackDrawInfo trackDrawInfo; + private OnNeedScrollListener onNeedScrollListener; private AppearanceListItem selectedItem; private List appearanceItems; private GpxWidthAdapter widthAdapter; + private View sliderContainer; - public TrackWidthCard(MapActivity mapActivity, TrackDrawInfo trackDrawInfo) { + public TrackWidthCard(MapActivity mapActivity, TrackDrawInfo trackDrawInfo, + OnNeedScrollListener onNeedScrollListener) { super(mapActivity); this.trackDrawInfo = trackDrawInfo; + this.onNeedScrollListener = onNeedScrollListener; appearanceItems = getWidthAppearanceItems(); } @@ -115,6 +121,7 @@ public class TrackWidthCard extends BaseCard { } private void updateCustomWidthSlider() { + sliderContainer = view.findViewById(R.id.slider_container); AppearanceListItem item = getSelectedItem(); if (item != null && CUSTOM_WIDTH.equals(item.getAttrName())) { Slider widthSlider = view.findViewById(R.id.width_slider); @@ -149,9 +156,17 @@ public class TrackWidthCard extends BaseCard { } }); UiUtilities.setupSlider(widthSlider, nightMode, null); - AndroidUiHelper.updateVisibility(view.findViewById(R.id.slider_container), true); + ScrollUtils.addOnGlobalLayoutListener(sliderContainer, new Runnable() { + @Override + public void run() { + if (sliderContainer.getVisibility() == View.VISIBLE) { + onNeedScrollListener.onVerticalScrollNeeded(sliderContainer.getBottom()); + } + } + }); + AndroidUiHelper.updateVisibility(sliderContainer, true); } else { - AndroidUiHelper.updateVisibility(view.findViewById(R.id.slider_container), false); + AndroidUiHelper.updateVisibility(sliderContainer, false); } } diff --git a/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java index 4752e180f7..3bb49859be 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/GPXLayer.java @@ -467,12 +467,16 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM int endX = (int) tileBox.getPixXFromLatLon(end.lat, end.lon); int endY = (int) tileBox.getPixYFromLatLon(end.lat, end.lon); - QuadRect startRect = calculateRect(startX, startY, startPointIcon.getIntrinsicWidth(), startPointIcon.getIntrinsicHeight()); - QuadRect endRect = calculateRect(endX, endY, finishPointIcon.getIntrinsicWidth(), finishPointIcon.getIntrinsicHeight()); + int iconSize = AndroidUtils.dpToPx(view.getContext(), 14); + QuadRect startRectWithoutShadow = calculateRect(startX, startY, iconSize, iconSize); + QuadRect endRectWithoutShadow = calculateRect(endX, endY, iconSize, iconSize); - if (QuadRect.intersects(startRect, endRect)) { - drawPoint(canvas, startRect, startAndFinishIcon); + if (QuadRect.intersects(startRectWithoutShadow, endRectWithoutShadow)) { + QuadRect startAndFinishRect = calculateRect(startX, startY, startAndFinishIcon.getIntrinsicWidth(), startAndFinishIcon.getIntrinsicHeight()); + drawPoint(canvas, startAndFinishRect, startAndFinishIcon); } else { + QuadRect startRect = calculateRect(startX, startY, startPointIcon.getIntrinsicWidth(), startPointIcon.getIntrinsicHeight()); + QuadRect endRect = calculateRect(endX, endY, finishPointIcon.getIntrinsicWidth(), finishPointIcon.getIntrinsicHeight()); drawPoint(canvas, startRect, startPointIcon); drawPoint(canvas, endRect, finishPointIcon); } @@ -913,12 +917,12 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM @Override public boolean disableSingleTap() { - return false; + return isInTrackAppearanceMode(); } @Override public boolean disableLongPressOnMap() { - return false; + return isInTrackAppearanceMode(); } @Override