Merge pull request #11260 from osmandapp/master

update test branch
This commit is contained in:
Hardy 2021-03-26 07:17:50 +01:00 committed by GitHub
commit b0f73d75d9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
43 changed files with 814 additions and 332 deletions

View file

@ -6,7 +6,6 @@ import net.osmand.NativeLibrary;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.ResultMatcher; import net.osmand.ResultMatcher;
import net.osmand.binary.BinaryMapIndexReader; import net.osmand.binary.BinaryMapIndexReader;
import net.osmand.binary.BinaryMapRouteReaderAdapter;
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion; import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion;
import net.osmand.binary.RouteDataObject; import net.osmand.binary.RouteDataObject;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
@ -689,15 +688,15 @@ public class RoutePlannerFrontEnd {
} }
} }
if (ctx.calculationMode == RouteCalculationMode.COMPLEX && routeDirection == null if (ctx.calculationMode == RouteCalculationMode.COMPLEX && routeDirection == null
&& maxDistance > ctx.config.DEVIATION_RADIUS * 6) { && maxDistance > RoutingConfiguration.DEVIATION_RADIUS * 6) {
ctx.calculationProgress.totalIterations++; ctx.calculationProgress.totalIterations++;
RoutingContext nctx = buildRoutingContext(ctx.config, ctx.nativeLib, ctx.getMaps(), RouteCalculationMode.BASE); RoutingContext nctx = buildRoutingContext(ctx.config, ctx.nativeLib, ctx.getMaps(), RouteCalculationMode.BASE);
nctx.calculationProgress = ctx.calculationProgress; nctx.calculationProgress = ctx.calculationProgress;
List<RouteSegmentResult> ls = searchRoute(nctx, start, end, intermediates); List<RouteSegmentResult> ls = searchRoute(nctx, start, end, intermediates);
if(ls == null) { if (ls == null) {
return null; return null;
} }
routeDirection = PrecalculatedRouteDirection.build(ls, ctx.config.DEVIATION_RADIUS, ctx.getRouter().getMaxSpeed()); routeDirection = PrecalculatedRouteDirection.build(ls, RoutingConfiguration.DEVIATION_RADIUS, ctx.getRouter().getMaxSpeed());
} }
List<RouteSegmentResult> res ; List<RouteSegmentResult> res ;
if (intermediatesEmpty && ctx.nativeLib != null) { if (intermediatesEmpty && ctx.nativeLib != null) {

View file

@ -20,7 +20,7 @@ import java.util.Stack;
public class RoutingConfiguration { public class RoutingConfiguration {
public static final int DEFAULT_MEMORY_LIMIT = 30; public static final int DEFAULT_MEMORY_LIMIT = 30;
public final float DEVIATION_RADIUS = 3000; public static final float DEVIATION_RADIUS = 3000;
public Map<String, String> attributes = new LinkedHashMap<String, String>(); public Map<String, String> attributes = new LinkedHashMap<String, String>();
// 1. parameters of routing and different tweaks // 1. parameters of routing and different tweaks

View file

@ -22,7 +22,7 @@
<string name="mile_per_hour">mph</string> <string name="mile_per_hour">mph</string>
<string name="km_h">km/h</string> <string name="km_h">km/h</string>
<string name="m_s">m/s</string> <string name="m_s">m/s</string>
<string name="nm_h">di/h</string> <string name="nm_h">M/h</string>
<string name="min_km">min/km</string> <string name="min_km">min/km</string>
<string name="min_mile">min/mi</string> <string name="min_mile">min/mi</string>
<string name="nm">di</string> <string name="nm">di</string>
@ -43,7 +43,7 @@
<string name="sharing_location">Delar plats</string> <string name="sharing_location">Delar plats</string>
<string name="share_location">Dela plats</string> <string name="share_location">Dela plats</string>
<string name="shared_string_distance">Avstånd</string> <string name="shared_string_distance">Avstånd</string>
<string name="osmand_service_descr">OsmAnd Tracker körs i bakgrunden med skärmen av.</string> <string name="osmand_service_descr">OsmAnd Tracker körs i bakgrunden medan skärmen är avstängd.</string>
<string name="osmand_service">Bakgrundsläge</string> <string name="osmand_service">Bakgrundsläge</string>
<string name="location_service_no_gps_available">Välj en av platsleverantörerna för att dela din plats.</string> <string name="location_service_no_gps_available">Välj en av platsleverantörerna för att dela din plats.</string>
<string name="gps_not_available">Aktivera \"Plats\" i systeminställningarna</string> <string name="gps_not_available">Aktivera \"Plats\" i systeminställningarna</string>

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="8dp"
android:layout_marginRight="-8dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="-8dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:scaleType="centerInside"
android:duplicateParentState="true"/>

View file

@ -16,13 +16,12 @@
android:id="@+id/folderIconImageView" android:id="@+id/folderIconImageView"
android:layout_width="56dp" android:layout_width="56dp"
android:layout_height="56dp" android:layout_height="56dp"
android:layout_marginRight="@dimen/content_padding"
android:layout_marginTop="4dp" android:layout_marginTop="4dp"
android:layout_row="0" android:layout_marginEnd="@dimen/content_padding"
android:layout_marginRight="@dimen/content_padding"
android:scaleType="center" android:scaleType="center"
tools:background="@color/color_warning" tools:background="@color/color_warning"
tools:src="@drawable/ic_action_folder" tools:src="@drawable/ic_action_folder" />
android:layout_marginEnd="@dimen/content_padding" />
</LinearLayout> </LinearLayout>
@ -46,16 +45,16 @@
android:paddingTop="22dp" android:paddingTop="22dp"
android:text="@string/application_dir" android:text="@string/application_dir"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textSize="@dimen/dialog_header_text_size"/> android:textSize="@dimen/dialog_header_text_size" />
<ImageButton <ImageButton
android:id="@+id/closeImageButton" android:id="@+id/closeImageButton"
android:contentDescription="@string/shared_string_close"
style="@style/Widget.AppCompat.Button.Borderless" style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="44dp" android:layout_width="44dp"
android:layout_height="44dp" android:layout_height="44dp"
android:contentDescription="@string/shared_string_close"
osmand:srcCompat="@drawable/ic_action_remove_dark" osmand:srcCompat="@drawable/ic_action_remove_dark"
tools:background="@color/color_warning"/> tools:background="@color/color_warning" />
</LinearLayout> </LinearLayout>
@ -64,11 +63,11 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="fill_horizontal" android:layout_gravity="fill_horizontal"
android:layout_marginBottom="24dp"
android:layout_marginTop="4dp" android:layout_marginTop="4dp"
android:textColor="?android:textColorSecondary" android:layout_marginBottom="24dp"
android:text="@string/application_dir_description" android:text="@string/application_dir_description"
android:textSize="16sp"/> android:textColor="?android:textColorSecondary"
android:textSize="16sp" />
<ScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -90,11 +89,13 @@
android:id="@+id/deviceMemoryImageView" android:id="@+id/deviceMemoryImageView"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="56dp" android:layout_height="56dp"
android:paddingStart="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding" android:paddingRight="@dimen/content_padding"
android:scaleType="center" android:scaleType="center"
osmand:srcCompat="@drawable/ic_action_phone" osmand:srcCompat="@drawable/ic_action_phone"
tools:background="@color/color_warning" tools:background="@color/color_warning" />
android:paddingEnd="@dimen/content_padding" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -106,19 +107,16 @@
android:id="@+id/deviceMemoryTitle" android:id="@+id/deviceMemoryTitle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="fill_horizontal"
android:gravity="center_vertical" android:gravity="center_vertical"
android:text="@string/storage_directory_external" android:text="@string/storage_directory_external"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary" />
/>
<TextView <TextView
android:id="@+id/deviceMemoryDescription" android:id="@+id/deviceMemoryDescription"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="fill_horizontal"
android:textColor="?android:attr/textColorSecondary" android:textColor="?android:attr/textColorSecondary"
tools:text="Free: 568 Mb"/> tools:text="Free: 568 Mb" />
</LinearLayout> </LinearLayout>
@ -129,7 +127,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
android:layout_gravity="fill_horizontal" android:layout_gravity="fill_horizontal"
android:background="@color/divider_color"/> android:background="@color/divider_color" />
<LinearLayout <LinearLayout
android:id="@+id/sharedMemoryRow" android:id="@+id/sharedMemoryRow"
@ -142,11 +140,13 @@
android:id="@+id/sharedMemoryImageView" android:id="@+id/sharedMemoryImageView"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="56dp" android:layout_height="56dp"
android:paddingStart="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding" android:paddingRight="@dimen/content_padding"
android:scaleType="center" android:scaleType="center"
osmand:srcCompat="@drawable/ic_action_phone" osmand:srcCompat="@drawable/ic_action_phone"
tools:background="@color/color_warning" tools:background="@color/color_warning" />
android:paddingEnd="@dimen/content_padding" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -158,17 +158,15 @@
android:id="@+id/sharedMemoryTitle" android:id="@+id/sharedMemoryTitle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="fill_horizontal"
android:text="@string/storage_directory_shared" android:text="@string/storage_directory_shared"
android:textColor="?android:attr/textColorPrimary"/> android:textColor="?android:attr/textColorPrimary" />
<TextView <TextView
android:id="@+id/sharedMemoryDescription" android:id="@+id/sharedMemoryDescription"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="fill_horizontal"
android:textColor="?android:attr/textColorSecondary" android:textColor="?android:attr/textColorSecondary"
tools:text="Free: 9 Gb"/> tools:text="Free: 9 Gb" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
@ -178,7 +176,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
android:layout_gravity="fill_horizontal" android:layout_gravity="fill_horizontal"
android:background="@color/divider_color"/> android:background="@color/divider_color" />
<LinearLayout <LinearLayout
android:id="@+id/memoryStickRow" android:id="@+id/memoryStickRow"
@ -191,11 +189,13 @@
android:id="@+id/memoryStickImageView" android:id="@+id/memoryStickImageView"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="56dp" android:layout_height="56dp"
android:paddingStart="@dimen/content_padding"
android:paddingLeft="@dimen/content_padding"
android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding" android:paddingRight="@dimen/content_padding"
android:scaleType="center" android:scaleType="center"
osmand:srcCompat="@drawable/ic_sdcard" osmand:srcCompat="@drawable/ic_sdcard"
tools:background="@color/color_warning" tools:background="@color/color_warning" />
android:paddingEnd="@dimen/content_padding" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -207,17 +207,15 @@
android:id="@+id/memoryStickTitle" android:id="@+id/memoryStickTitle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="fill_horizontal"
android:text="@string/storage_directory_card" android:text="@string/storage_directory_card"
android:textColor="?android:attr/textColorPrimary"/> android:textColor="?android:attr/textColorPrimary" />
<TextView <TextView
android:id="@+id/memoryStickDescription" android:id="@+id/memoryStickDescription"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="fill_horizontal"
android:textColor="?android:attr/textColorSecondary" android:textColor="?android:attr/textColorSecondary"
tools:text="Free: 9 Gb"/> tools:text="Free: 9 Gb" />
</LinearLayout> </LinearLayout>

View file

@ -18,6 +18,7 @@
android:paddingEnd="@dimen/content_padding" android:paddingEnd="@dimen/content_padding"
android:paddingRight="@dimen/content_padding" android:paddingRight="@dimen/content_padding"
android:paddingBottom="@dimen/content_padding" android:paddingBottom="@dimen/content_padding"
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
android:weightSum="2"> android:weightSum="2">
<net.osmand.plus.widgets.TextViewEx <net.osmand.plus.widgets.TextViewEx

View file

@ -4074,7 +4074,7 @@
<string name="activity_type_motorbike_name">دراجة نارية</string> <string name="activity_type_motorbike_name">دراجة نارية</string>
<string name="activity_type_car_name">سيارة</string> <string name="activity_type_car_name">سيارة</string>
<string name="copy_poi_name">نسخ اسم POI</string> <string name="copy_poi_name">نسخ اسم POI</string>
<string name="select_another_colorization">الرجاء اختيار أنواع أخرى من التلوين</string> <string name="select_another_colorization">الرجاء اختيار أنواع أخرى من التلوين.</string>
<string name="snap_to_road_descr">سيتم التقاط الرمز إلى مسار التنقل الحالي</string> <string name="snap_to_road_descr">سيتم التقاط الرمز إلى مسار التنقل الحالي</string>
<string name="select_segments">حدد الجزء</string> <string name="select_segments">حدد الجزء</string>
<string name="select_segments_description">%1$s يحتوي على أكثر من مقطع ، تحتاج إلى تحديد الجزء المطلوب للتنقل.</string> <string name="select_segments_description">%1$s يحتوي على أكثر من مقطع ، تحتاج إلى تحديد الجزء المطلوب للتنقل.</string>
@ -4114,4 +4114,9 @@
<string name="track_has_no_speed">لا يحتوي المسار على بيانات السرعة.</string> <string name="track_has_no_speed">لا يحتوي المسار على بيانات السرعة.</string>
<string name="rendering_attr_noNatureReserveBoundaries_description">إخفاء المحميات الطبيعية والمناطق المحمية وحدود المتنزهات الوطنية</string> <string name="rendering_attr_noNatureReserveBoundaries_description">إخفاء المحميات الطبيعية والمناطق المحمية وحدود المتنزهات الوطنية</string>
<string name="rendering_attr_noNatureReserveBoundaries_name">حدود الطبيعة</string> <string name="rendering_attr_noNatureReserveBoundaries_name">حدود الطبيعة</string>
<string name="trip_recording_show_start_dialog_setting">إذا تم تعطيله، فسيبدأ التسجيل مباشرة بعد النقر على الويدجيت أو عنصر القائمة ، متخطيا لمربع حوار التأكيد.</string>
<string name="trip_recording_logging_interval_info">الفاصل الزمني للتسجيل يحدد الفترة الزمنية التي سيسأل فيها OsmAnd عن بيانات الموقع الحالي.</string>
<string name="lost_data_warning">سيتم فقدان كافة البيانات غير المحفوظة.</string>
<string name="show_start_dialog">إظهار مربع حوار البدء</string>
<string name="trip_recording_save_and_continue">حفظ ومتابعة</string>
</resources> </resources>

View file

@ -2258,4 +2258,20 @@
<string name="osm_live_subscription_desc">Абонаментът позволява почасови, ежедневни, седмични актуализации и неограничено изтегляне за всички карти в световен мащаб.</string> <string name="osm_live_subscription_desc">Абонаментът позволява почасови, ежедневни, седмични актуализации и неограничено изтегляне за всички карти в световен мащаб.</string>
<string name="select_wikipedia_article_langs">Изберете езиците на които Уикипедия публикациите ще се появяват на картата. Можете да превключвате между наличните езици докато четете публикацията.</string> <string name="select_wikipedia_article_langs">Изберете езиците на които Уикипедия публикациите ще се появяват на картата. Можете да превключвате между наличните езици докато четете публикацията.</string>
<string name="extra_maps_menu_group">Допълнителни карти</string> <string name="extra_maps_menu_group">Допълнителни карти</string>
<string name="opr_use_dev_url">Използване на test.openplacereviews.org</string>
<string name="login_open_place_reviews">Вход в OpenPlaceПрегледи</string>
<string name="open_place_reviews">OpenPlaceReviews</string>
<string name="activity_type_water_name">Вода</string>
<string name="activity_type_winter_name">Зима</string>
<string name="activity_type_snowmobile_name">Моторни шейни</string>
<string name="activity_type_riding_name">Езда</string>
<string name="activity_type_racing_name">Състезание</string>
<string name="activity_type_mountainbike_name">Планинско колоездене</string>
<string name="activity_type_cycling_name">Колоездене</string>
<string name="activity_type_hiking_name">Туризъм</string>
<string name="activity_type_running_name">Бягане</string>
<string name="activity_type_walking_name">Ходене</string>
<string name="activity_type_offroad_name">Офроуд</string>
<string name="activity_type_motorbike_name">Мотор</string>
<string name="activity_type_car_name">Автомобил</string>
</resources> </resources>

View file

@ -1195,7 +1195,7 @@
<string name="share_fav_subject">Oblíbené body sdílené přes OsmAnd</string> <string name="share_fav_subject">Oblíbené body sdílené přes OsmAnd</string>
<string name="navigation_intent_invalid">Neplatný formát: %s</string> <string name="navigation_intent_invalid">Neplatný formát: %s</string>
<string name="gpx_file_is_empty">Prázdný soubor GPX</string> <string name="gpx_file_is_empty">Prázdný soubor GPX</string>
<string name="shared_string_tracks">Všechny trasy</string> <string name="shared_string_tracks">Stopy</string>
<string name="shared_string_my_favorites">Oblíbené</string> <string name="shared_string_my_favorites">Oblíbené</string>
<string name="shared_string_my_places">Moje místa</string> <string name="shared_string_my_places">Moje místa</string>
<string name="loading_smth">Načítání %1$s…</string> <string name="loading_smth">Načítání %1$s…</string>
@ -2174,7 +2174,7 @@
<string name="select_gpx_folder">Vyberte složku pro soubor GPX</string> <string name="select_gpx_folder">Vyberte složku pro soubor GPX</string>
<string name="file_can_not_be_moved">Soubor se nepodařilo přesunout.</string> <string name="file_can_not_be_moved">Soubor se nepodařilo přesunout.</string>
<string name="shared_string_move">Přesunout</string> <string name="shared_string_move">Přesunout</string>
<string name="shared_string_gpx_tracks">Trasy</string> <string name="shared_string_gpx_tracks">Stopy</string>
<string name="shared_string_time_moving">Doba pohybu</string> <string name="shared_string_time_moving">Doba pohybu</string>
<string name="shared_string_time_span">Časový rozsah</string> <string name="shared_string_time_span">Časový rozsah</string>
<string name="shared_string_max">Maximum</string> <string name="shared_string_max">Maximum</string>
@ -2267,7 +2267,7 @@
<string name="private_access_routing_req">Váš cíl se nachází v oblasti se soukromým přístupem. Povolit vstup na soukromé pozemky pro tuto cestu?</string> <string name="private_access_routing_req">Váš cíl se nachází v oblasti se soukromým přístupem. Povolit vstup na soukromé pozemky pro tuto cestu?</string>
<string name="restart_search">Spustit hledání znovu</string> <string name="restart_search">Spustit hledání znovu</string>
<string name="increase_search_radius">Zvětšit okruh hledání</string> <string name="increase_search_radius">Zvětšit okruh hledání</string>
<string name="nothing_found">Nic nalezeno</string> <string name="nothing_found">Nic nebylo nalezeno</string>
<string name="nothing_found_descr">Změňte vyhledávací dotaz nebo zvětšete okruh hledání.</string> <string name="nothing_found_descr">Změňte vyhledávací dotaz nebo zvětšete okruh hledání.</string>
<string name="shared_string_permissions">Oprávnění</string> <string name="shared_string_permissions">Oprávnění</string>
<string name="import_gpx_failed_descr">Nepodařilo se naimportovat soubor. Prosím zkontrolujte, zda má OsmAnd oprávnění ke čtení souboru.</string> <string name="import_gpx_failed_descr">Nepodařilo se naimportovat soubor. Prosím zkontrolujte, zda má OsmAnd oprávnění ke čtení souboru.</string>
@ -2496,8 +2496,8 @@
<string name="map_import_error">Chyba při importu mapy</string> <string name="map_import_error">Chyba při importu mapy</string>
<string name="map_imported_successfully">Mapa byla importována</string> <string name="map_imported_successfully">Mapa byla importována</string>
<string name="shared_string_current">Aktuální</string> <string name="shared_string_current">Aktuální</string>
<string name="last_intermediate_dest_description">Přidá poslední mezizastávku</string> <string name="last_intermediate_dest_description">Přidá poslední mezicíl</string>
<string name="first_intermediate_dest_description">Přidá první mezizastávku</string> <string name="first_intermediate_dest_description">Přidá první mezicíl</string>
<string name="subsequent_dest_description">Přesune cíl nahoru a vytvoří ho</string> <string name="subsequent_dest_description">Přesune cíl nahoru a vytvoří ho</string>
<string name="osmand_extended_description_part1">OsmAnd (OSM Automated Navigation Directions) je mapová a navigační aplikace s přístupem k volným a kvalitním celosvětovým údajům z OpenStreetMap (OSM). <string name="osmand_extended_description_part1">OsmAnd (OSM Automated Navigation Directions) je mapová a navigační aplikace s přístupem k volným a kvalitním celosvětovým údajům z OpenStreetMap (OSM).
\n \n
@ -2829,7 +2829,7 @@
<string name="routeInfo_smoothness_name">Hladkost povrchu</string> <string name="routeInfo_smoothness_name">Hladkost povrchu</string>
<string name="routeInfo_steepness_name">Strmost</string> <string name="routeInfo_steepness_name">Strmost</string>
<string name="show_more">Ukázat více</string> <string name="show_more">Ukázat více</string>
<string name="tracks_on_map">Zobrazené trasy</string> <string name="tracks_on_map">Zobrazené stopy</string>
<string name="time_of_day">Denní doba</string> <string name="time_of_day">Denní doba</string>
<string name="step_by_step">Krok za krokem</string> <string name="step_by_step">Krok za krokem</string>
<string name="routeInfo_road_types_name">Typy silnic</string> <string name="routeInfo_road_types_name">Typy silnic</string>
@ -3853,7 +3853,7 @@
<string name="sunrise_at">Východ slunce v %1$s</string> <string name="sunrise_at">Východ slunce v %1$s</string>
<string name="sunset_at">Západ slunce v %1$s</string> <string name="sunset_at">Západ slunce v %1$s</string>
<string name="ltr_or_rtl_combine_via_slash">%1$s/%2$s</string> <string name="ltr_or_rtl_combine_via_slash">%1$s/%2$s</string>
<string name="profile_prefs_reset_successful">Všechna nastavení profilu obnovena do základního nastavení.</string> <string name="profile_prefs_reset_successful">Všechna nastavení profilu obnovena do výchozího stavu.</string>
<string name="plugin_prefs_reset_successful">Všechna nastavení modulů obnovena do výchozího stavu.</string> <string name="plugin_prefs_reset_successful">Všechna nastavení modulů obnovena do výchozího stavu.</string>
<string name="rendering_attr_streetLightingNight_name">Zobrazit pouze v noci</string> <string name="rendering_attr_streetLightingNight_name">Zobrazit pouze v noci</string>
<string name="add_custom_category">Přidat vlastní kategorii</string> <string name="add_custom_category">Přidat vlastní kategorii</string>
@ -4045,4 +4045,9 @@
<string name="select_another_colorization">Vyberte prosím jiný typ obarvení.</string> <string name="select_another_colorization">Vyberte prosím jiný typ obarvení.</string>
<string name="rendering_attr_noNatureReserveBoundaries_description">Skrýt hranice přírodních rezervací, chráněných území a národních parků</string> <string name="rendering_attr_noNatureReserveBoundaries_description">Skrýt hranice přírodních rezervací, chráněných území a národních parků</string>
<string name="rendering_attr_noNatureReserveBoundaries_name">Hranice přírody</string> <string name="rendering_attr_noNatureReserveBoundaries_name">Hranice přírody</string>
<string name="trip_recording_logging_interval_info">Interval záznamu nastaví, jak často bude OsmAnd zjišťovat aktuální polohu.</string>
<string name="trip_recording_save_and_continue">Uložit a pokračovat</string>
<string name="lost_data_warning">Všechna neuložená data budou ztracena.</string>
<string name="show_start_dialog">Zobrazit úvodní okno</string>
<string name="trip_recording_show_start_dialog_setting">Pokud je vypnuto, záznam začne hned po klepnutí na nástroj nebo položku v menu, přeskočí tedy potvrzovací okno.</string>
</resources> </resources>

View file

@ -4050,4 +4050,8 @@
<string name="select_category_descr">Kategorie auswählen oder neue hinzufügen</string> <string name="select_category_descr">Kategorie auswählen oder neue hinzufügen</string>
<string name="rendering_attr_noNatureReserveBoundaries_description">Grenzen von Naturschutzgebieten, Schutzgebieten und Nationalparks ausblenden</string> <string name="rendering_attr_noNatureReserveBoundaries_description">Grenzen von Naturschutzgebieten, Schutzgebieten und Nationalparks ausblenden</string>
<string name="rendering_attr_noNatureReserveBoundaries_name">Grenzen von Schutzgebieten</string> <string name="rendering_attr_noNatureReserveBoundaries_name">Grenzen von Schutzgebieten</string>
<string name="trip_recording_save_and_continue">Speichern und fortfahren</string>
<string name="lost_data_warning">Alle nicht gespeicherten Daten gehen verloren.</string>
<string name="show_start_dialog">Startdialog anzeigen</string>
<string name="trip_recording_show_start_dialog_setting">Wenn deaktiviert, beginnt die Aufnahme direkt nach dem Tippen auf das Widget oder den Menüpunkt und überspringt den Bestätigungsdialog.</string>
</resources> </resources>

View file

@ -4048,4 +4048,6 @@
<string name="trip_recording_logging_interval_info">Agordita periodo de intertempo de registrado, dum kiu OsmAnd petos la nunajn poziciajn datumojn.</string> <string name="trip_recording_logging_interval_info">Agordita periodo de intertempo de registrado, dum kiu OsmAnd petos la nunajn poziciajn datumojn.</string>
<string name="lost_data_warning">Ĉiuj nekonservitaj datumoj perdiĝos.</string> <string name="lost_data_warning">Ĉiuj nekonservitaj datumoj perdiĝos.</string>
<string name="trip_recording_save_and_continue">Konservi kaj daŭrigi</string> <string name="trip_recording_save_and_continue">Konservi kaj daŭrigi</string>
<string name="trip_recording_show_start_dialog_setting">Se malŝaltita, registrado komenciĝos tuj post frapeto sur la fenestraĵo aŭ menuero, preterlasante la konfirman dialogon.</string>
<string name="show_start_dialog">Montri komencan dialogon</string>
</resources> </resources>

View file

@ -4047,4 +4047,9 @@
<string name="select_another_colorization">Elige otro tipo de color.</string> <string name="select_another_colorization">Elige otro tipo de color.</string>
<string name="rendering_attr_noNatureReserveBoundaries_name">Fronteras naturales</string> <string name="rendering_attr_noNatureReserveBoundaries_name">Fronteras naturales</string>
<string name="rendering_attr_noNatureReserveBoundaries_description">Oculta fronteras de reservas naturales, áreas protegidas y parques nacionales</string> <string name="rendering_attr_noNatureReserveBoundaries_description">Oculta fronteras de reservas naturales, áreas protegidas y parques nacionales</string>
<string name="trip_recording_logging_interval_info">El intervalo de registro define el período de tiempo en el que OsmAnd pedirá los datos de la ubicación actual.</string>
<string name="trip_recording_save_and_continue">Guardar y continuar</string>
<string name="lost_data_warning">Se perderán todos los datos no guardados.</string>
<string name="show_start_dialog">Mostrar el diálogo inicial</string>
<string name="trip_recording_show_start_dialog_setting">Si se desactiva, la grabación será iniciada al pulsar el widget o el elemento del menú, saltándose el diálogo de confirmación.</string>
</resources> </resources>

View file

@ -3145,7 +3145,7 @@
<string name="poi_reservation_no">Reservación: no</string> <string name="poi_reservation_no">Reservación: no</string>
<string name="poi_reservation_members_only">Reservación: sólo miembros</string> <string name="poi_reservation_members_only">Reservación: sólo miembros</string>
<string name="poi_beds">Camas</string> <string name="poi_beds">Camas</string>
<string name="poi_boat_rental_type">Barcos de alquiler</string> <string name="poi_boat_rental_type">Barcos alquilados</string>
<string name="poi_boat_rental">Alquiler de barcos</string> <string name="poi_boat_rental">Alquiler de barcos</string>
<string name="poi_boat_motorboat_rental_yes">Lanchas de motor: sí</string> <string name="poi_boat_motorboat_rental_yes">Lanchas de motor: sí</string>
<string name="poi_boat_motorboat_rental_no">Lanchas de motor: no</string> <string name="poi_boat_motorboat_rental_no">Lanchas de motor: no</string>

View file

@ -4047,4 +4047,9 @@
<string name="track_has_no_altitude">La traza no contiene datos de altitud.</string> <string name="track_has_no_altitude">La traza no contiene datos de altitud.</string>
<string name="track_has_no_speed">La traza no contiene datos de velocidad.</string> <string name="track_has_no_speed">La traza no contiene datos de velocidad.</string>
<string name="select_another_colorization">Elige otro tipo de color.</string> <string name="select_another_colorization">Elige otro tipo de color.</string>
<string name="trip_recording_logging_interval_info">El intervalo de registro define el período de tiempo en el que OsmAnd pedirá los datos de la ubicación actual.</string>
<string name="trip_recording_save_and_continue">Guardar y continuar</string>
<string name="lost_data_warning">Se perderán todos los datos no guardados.</string>
<string name="show_start_dialog">Mostrar el diálogo inicial</string>
<string name="trip_recording_show_start_dialog_setting">Si se desactiva, la grabación será iniciada al pulsar el widget o el elemento del menú, saltándose el diálogo de confirmación.</string>
</resources> </resources>

View file

@ -4069,4 +4069,8 @@
<string name="quick_action_coordinates_widget_descr">دکمه‌ای برای آشکار یا پنهان کردن ابزارک مختصات روی نقشه.</string> <string name="quick_action_coordinates_widget_descr">دکمه‌ای برای آشکار یا پنهان کردن ابزارک مختصات روی نقشه.</string>
<string name="shared_string_interval">بازه</string> <string name="shared_string_interval">بازه</string>
<string name="map_widget_distance_by_tap">مسافت با لمس</string> <string name="map_widget_distance_by_tap">مسافت با لمس</string>
<string name="trip_recording_save_and_continue">ذخیره و ادامه</string>
<string name="show_start_dialog">نمایش کادر آغاز</string>
<string name="trip_recording_show_start_dialog_setting">اگر غیرفعال باشد، بلافاصله پس از لمس ابزارک یا آیتم منو، ضبط آغاز می‌شود و کادر تأیید ظاهر نمی‌شود.</string>
<string name="lost_data_warning">تمام دادهٔ ذخیره‌نشده از دست خواهد رفت.</string>
</resources> </resources>

View file

@ -4030,12 +4030,14 @@
<string name="routing_attr_short_way_description">Itinéraire court optimisé (plus économe en énergie)</string> <string name="routing_attr_short_way_description">Itinéraire court optimisé (plus économe en énergie)</string>
<string name="rendering_attr_noNatureReserveBoundaries_description">Masquer les limites des réserves naturelles, des zones protégées et des parcs nationaux</string> <string name="rendering_attr_noNatureReserveBoundaries_description">Masquer les limites des réserves naturelles, des zones protégées et des parcs nationaux</string>
<string name="rendering_attr_noNatureReserveBoundaries_name">Limites naturelles</string> <string name="rendering_attr_noNatureReserveBoundaries_name">Limites naturelles</string>
<string name="select_segments_description">%1$s contient plus d\'un segment, vous devez sélectionner le tronçon nécessaire à la navigation.</string> <string name="select_segments_description">%1$s contient plusieurs segments, vous devez sélectionner un tronçon pour la navigation.</string>
<string name="routing_attr_driving_style_description">Sélectionnez le mode de conduite pour avoir l\'itinéraire le plus court, le plus rapide, ou le plus sûr</string> <string name="routing_attr_driving_style_description">Sélectionnez un mode de conduite pour calculer l\'itinéraire le plus court, le plus rapide ou le plus sûr.</string>
<string name="quick_action_coordinates_widget_descr">Appuyer pour afficher ou cacher le widget Coordonnées sur la carte.</string> <string name="quick_action_coordinates_widget_descr">Appuyez pour afficher ou masquer le gadget Coordonnées sur la carte.</string>
<string name="snap_to_road_descr">Licône de localisation va se déplacer sur le trajet en cours.</string> <string name="snap_to_road_descr">Licône de positionnement se déplacera sur le trajet en cours.</string>
<string name="select_another_colorization">Veuillez sélectionner un autre type de colorisation.</string> <string name="select_another_colorization">Veuillez sélectionner une autre coloration.</string>
<string name="trip_recording_logging_interval_info">L\'intervalle denregistrement définit la fréquence à laquelle OsmAnd récupérera les données de localisation.</string> <string name="trip_recording_logging_interval_info">L\'intervalle denregistrement définit la fréquence à laquelle OsmAnd récupérera les données de localisation.</string>
<string name="trip_recording_save_and_continue">Enregistrer et continuer</string> <string name="trip_recording_save_and_continue">Enregistrer et continuer</string>
<string name="lost_data_warning">Toutes les données non enregistrées seront perdues.</string> <string name="lost_data_warning">Toutes les données non enregistrées seront perdues.</string>
<string name="show_start_dialog">Afficher la boîte de dialogue de démarrage</string>
<string name="trip_recording_show_start_dialog_setting">Si désactivé, l\'enregistrement débutera dès appui sur le gadget ou dans le menu (sans demande de confirmation).</string>
</resources> </resources>

View file

@ -4042,4 +4042,6 @@
<string name="trip_recording_logging_interval_info">A naplózási intervallum az az időköz, amelyben az OsmAnd lekéri az aktuális helyadatokat.</string> <string name="trip_recording_logging_interval_info">A naplózási intervallum az az időköz, amelyben az OsmAnd lekéri az aktuális helyadatokat.</string>
<string name="trip_recording_save_and_continue">Mentés és folytatás</string> <string name="trip_recording_save_and_continue">Mentés és folytatás</string>
<string name="lost_data_warning">Minden nem mentett adat törlődni fog.</string> <string name="lost_data_warning">Minden nem mentett adat törlődni fog.</string>
<string name="show_start_dialog">Kezdő párbeszéd megjelenítése</string>
<string name="trip_recording_show_start_dialog_setting">Ha le van tiltva, akkor a felvétel közvetlenül a widget vagy a menüelem megérintése után elindul, kihagyva a megerősítő párbeszédpanelt.</string>
</resources> </resources>

View file

@ -2163,7 +2163,6 @@
<string name="shared_string_time">Tempo</string> <string name="shared_string_time">Tempo</string>
<string name="total_distance">Distanza totale</string> <string name="total_distance">Distanza totale</string>
<string name="routing_attr_height_obstacles_name">Utilizza dati altitudine</string> <string name="routing_attr_height_obstacles_name">Utilizza dati altitudine</string>
<string name="shared_string_time_span">Intervallo di tempo</string> <string name="shared_string_time_span">Intervallo di tempo</string>
<string name="shared_string_max">Massimo</string> <string name="shared_string_max">Massimo</string>
<string name="shared_string_start_time">Ora d\'inizio</string> <string name="shared_string_start_time">Ora d\'inizio</string>
@ -3930,4 +3929,112 @@
<string name="open_place_reviews">OpenPlaceReviews</string> <string name="open_place_reviews">OpenPlaceReviews</string>
<string name="opr_use_dev_url">Usa test.openplacereviews.org</string> <string name="opr_use_dev_url">Usa test.openplacereviews.org</string>
<string name="login_open_place_reviews">Accedi a OpenPlaceReviews</string> <string name="login_open_place_reviews">Accedi a OpenPlaceReviews</string>
<string name="reverse_all_points">Inverti tutti i punti</string>
<string name="voice_prompts_timetable">Tempo degli avvisi vocali</string>
<string name="profile_type_osmand_string">Profilo OsmAnd</string>
<string name="profile_type_user_string">Profilo utente</string>
<string name="profile_by_default_description">Seleziona il profilo, sarà utilizzato all\'avvio dell\'app.</string>
<string name="shared_string_last_used">Ultimo utilizzato</string>
<string name="routing_attr_prefer_hiking_routes_description">Preferisci i percorsi escursionistici</string>
<string name="routing_attr_prefer_hiking_routes_name">Preferisci i percorsi escursionistici</string>
<string name="add_online_routing_engine">Aggiungi un motore di navigazione online</string>
<string name="edit_online_routing_engine">Modifica il motore di navigazione online</string>
<string name="shared_string_subtype">Sottocategoria</string>
<string name="shared_string_vehicle">Veicolo</string>
<string name="shared_string_api_key">Chiave API</string>
<string name="shared_string_server_url">URL del server</string>
<string name="shared_string_enter_param">Immetti un parametro</string>
<string name="keep_it_empty_if_not">"Mantienilo vuoto se non lo fosse"</string>
<string name="online_routing_example_hint">URL con tutti i parametri saranno come questo:</string>
<string name="test_route_calculation">Prova il calcolo del percorso</string>
<string name="routing_engine_vehicle_type_driving">Driving</string>
<string name="routing_engine_vehicle_type_foot">A piedi</string>
<string name="routing_engine_vehicle_type_bike">Bici</string>
<string name="routing_engine_vehicle_type_car">Auto</string>
<string name="copy_address">Copia l\'indirizzo</string>
<string name="online_routing_engine">Motori di navigazione online</string>
<string name="online_routing_engines">Motori di navigazione online</string>
<string name="shared_string_folders">Cartelle</string>
<string name="select_folder">Seleziona una cartella</string>
<string name="select_folder_descr">Seleziona una cartella o aggiungine una nuova</string>
<string name="shared_string_empty">Vuoto</string>
<string name="analyze_by_intervals">Analizza per intervalli</string>
<string name="upload_to_openstreetmap">Carica in OpenStreetMap</string>
<string name="edit_track">Modifica la traccia</string>
<string name="rename_track">Rinomina la traccia</string>
<string name="change_folder">Cambia cartella</string>
<string name="shared_string_sec">sec</string>
<string name="announcement_time_passing">Passing</string>
<string name="announcement_time_approach">Approach</string>
<string name="announcement_time_prepare_long">Long prepare</string>
<string name="announcement_time_prepare">Preparazione</string>
<string name="announcement_time_off_route">Fuoristrada</string>
<string name="announcement_time_intervals">Intervalli di tempo e distanza</string>
<string name="announcement_time_descr">Il tempo dell\'annuncio per i diversi avvisi dipende dal tipo di avviso, la velocità attuale e la velocità preimpostata.</string>
<string name="announcement_time_title">Tempo dell\'annuncio</string>
<string name="routing_engine_vehicle_type_cycling_electric">Bici elettrica</string>
<string name="routing_engine_vehicle_type_cycling_mountain">Mountain cycling</string>
<string name="routing_engine_vehicle_type_cycling_road">Bici da corsa</string>
<string name="routing_engine_vehicle_type_cycling_regular">Regular cycling</string>
<string name="routing_engine_vehicle_type_small_truck">Piccolo furgone</string>
<string name="context_menu_read_full">Leggi tutto</string>
<string name="select_segments">Seleziona segmenti</string>
<string name="select_segments_description">%1$s contiene più di un segmento, devi selezionare la parte necessaria per la navigazione.</string>
<string name="segments_count">Segmento %1$d</string>
<string name="activity_type_water_name">Water</string>
<string name="activity_type_winter_name">Winter</string>
<string name="activity_type_snowmobile_name">Gatto delle nevi</string>
<string name="activity_type_riding_name">Riding</string>
<string name="activity_type_racing_name">Racing</string>
<string name="activity_type_mountainbike_name">Mountainbike</string>
<string name="activity_type_cycling_name">Bici</string>
<string name="activity_type_hiking_name">Escursione</string>
<string name="activity_type_running_name">Corsa</string>
<string name="activity_type_walking_name">A piedi</string>
<string name="activity_type_offroad_name">Fuoristrada</string>
<string name="activity_type_motorbike_name">Moto</string>
<string name="activity_type_car_name">Auto</string>
<string name="temporary_conditional_routing_descr">Utilizza le restrizioni stradali che sono attive attualmente sulla mappa</string>
<string name="routing_attr_short_way_description">Percorso più breve ottimizzato (risparmio energia)</string>
<string name="routing_attr_driving_style_description">Scegli il tipo di guida per ottenere percorsi più brevi, veloci e sicuri</string>
<string name="snap_to_road_descr">L\'icona della localizzazione attuale sarà incollata al percorso corrente</string>
<string name="map_orientation_threshold_descr">Non ruotare la visualizzazione della mappa se la velocità è inferiore a un valore</string>
<string name="restart">Riavvia</string>
<string name="shared_strings_all_regions">Tutte le regioni</string>
<string name="delete_number_files_question">Cancellare %1$d file\?</string>
<string name="track_recording_stop_without_saving">Ferma senza salvare</string>
<string name="track_recording_save_and_stop">Salva e ferma la registrazione</string>
<string name="track_recording_title">Registrazione della traccia fermata</string>
<string name="track_recording_description">Confermi di volere fermare la registrazione\?
\nTutti i dati non salvati saranno persi.</string>
<string name="on_pause">In pausa</string>
<string name="app_restart_required">Il riavvio dell\'app è richiesto per applicare alcune impostazioni.</string>
<string name="routing_attr_height_obstacles_description">Il calcolo del percorso può evitare le salite ripide.</string>
<string name="quick_action_coordinates_widget_descr">Un interruttore per mostrare o nascondere il widget delle coordinate sulla mappa.</string>
<string name="map_widget_distance_by_tap">Distanza dal tocco</string>
<string name="latest_openstreetmap_update">Ultimo aggiornamento OpenStreetMap disponibile:</string>
<string name="updated">Aggiornamento: %s</string>
<string name="last_time_checked">Ultimo controllo: %s</string>
<string name="update_frequency">Frequenza di aggiornamento</string>
<string name="live_update_frequency_week_variant">Gli aggiornamenti della mappa saranno controllati ogni settimana. Il prossimo %1$s in %2$s.</string>
<string name="live_update_frequency_day_variant">Gli aggiornamenti della mappa saranno controllati ogni giorno. La prossima volta %1$s in %2$s.</string>
<string name="live_update_frequency_hour_variant">Gli aggiornamenti alla mappa saranno controllati ogni ora. Il prossimo alle %1$s in %2$s.</string>
<string name="delete_updates">Elimina aggiornamenti</string>
<string name="live_update_delete_updates_msg">Confermi di voler eliminare tutti %s gli aggiornamenti live\?</string>
<string name="purchases">Acquisti</string>
<string name="select_category_descr">Seleziona la categoria o aggiungine una nuova</string>
<string name="track_recording_will_be_continued">La registrazione sarà continuata.</string>
<string name="copy_poi_name">Copia il nome del PDI</string>
<string name="quick_action_show_hide_title">Mostra/nascondi</string>
<string name="shared_string_interval">Intervallo</string>
<string name="rendering_attr_noNatureReserveBoundaries_description">Nascondi i confini delle riserve naturali, delle aree protette e dei parchi naturali.</string>
<string name="rendering_attr_noNatureReserveBoundaries_name">Confini naturali</string>
<string name="track_has_no_altitude">La traccia non contiene i dati di altitudine.</string>
<string name="track_has_no_speed">La traccia non contiene i dati di velocità.</string>
<string name="select_another_colorization">Prego selezionare un altro tipo di colorazione.</string>
<string name="trip_recording_logging_interval_info">"L\'intervallo di registrazione imposta la frequenza con cui OsmAnd chiederà i dati della posizione attuale."</string>
<string name="trip_recording_save_and_continue">Salva e continua</string>
<string name="lost_data_warning">Tutti i dati non salvati andranno persi.</string>
<string name="show_start_dialog">Mostra la finestra di avvio</string>
<string name="trip_recording_show_start_dialog_setting">Se disabilitato, la registrazione inizierà appena tappato sul widget o sul menu, saltando la finestra di configurazione.</string>
</resources> </resources>

View file

@ -4051,4 +4051,6 @@
<string name="trip_recording_logging_interval_info">הגדרת הפרש קבוע בין הבקשות של OsmAnd לקבלת נתוני המיקום הנוכחיים.</string> <string name="trip_recording_logging_interval_info">הגדרת הפרש קבוע בין הבקשות של OsmAnd לקבלת נתוני המיקום הנוכחיים.</string>
<string name="trip_recording_save_and_continue">לשמור ולהמשיך</string> <string name="trip_recording_save_and_continue">לשמור ולהמשיך</string>
<string name="lost_data_warning">כל הנתונים שלא נשמרו יאבדו.</string> <string name="lost_data_warning">כל הנתונים שלא נשמרו יאבדו.</string>
<string name="show_start_dialog">להציג חלונית פתיחה</string>
<string name="trip_recording_show_start_dialog_setting">אם האפשרות מושבתת, ההקלטה תתחיל מיד לאחר הנגיעה בווידג׳ט או בפריט שבתפריט תוך דילוג על חלונית האישור.</string>
</resources> </resources>

View file

@ -3953,4 +3953,85 @@ POIの更新は利用できません</string>
<string name="trip_recording_logging_interval_info">ログ記録間隔は、OsmAndが現在の位置データを要求する期間を設定します。</string> <string name="trip_recording_logging_interval_info">ログ記録間隔は、OsmAndが現在の位置データを要求する期間を設定します。</string>
<string name="trip_recording_save_and_continue">保存して続行</string> <string name="trip_recording_save_and_continue">保存して続行</string>
<string name="lost_data_warning">保存されていないデータはすべて失われます。</string> <string name="lost_data_warning">保存されていないデータはすべて失われます。</string>
<string name="osm_edit_close_note">OSMメモを閉じる</string>
<string name="osm_edit_comment_note">OSMメモへのコメント</string>
<string name="osm_login_descr">安全なOAuth方式を使用してログインするか、アプリから直接ログインする方法を選べます。</string>
<string name="shared_string_add_photo">写真の追加</string>
<string name="register_on_openplacereviews">OpenPlaceReviews.orgに登録</string>
<string name="register_on_openplacereviews_desc">写真はOpenPlaceReviews.orgオープンデータプロジェクトを介して提供されています。そのため写真をアップロードするためには前述のウェブサイトにログインする必要があります。</string>
<string name="register_opr_create_new_account">新しいアカウントを作成</string>
<string name="register_opr_have_account">私はすでにアカウントを持っています</string>
<string name="shared_string_search_history">検索履歴</string>
<string name="app_mode_kayak">カヤック</string>
<string name="app_mode_motorboat">モーターボート</string>
<string name="cannot_upload_image">画像をアップロードできません。しばらくしてからもう一度お試しください</string>
<string name="select_picture">写真を選択</string>
<string name="shared_string_resources">リソース</string>
<string name="approximate_file_size">おおよそのファイルサイズ</string>
<string name="select_data_to_export">ファイルとしてエクスポートしたいデータを選択します。</string>
<string name="file_size_needed_for_import">インポートに必要</string>
<string name="export_not_enough_space_descr">お使いの端末には%1$sしか容量がありません。空き容量を確保するか、エクスポートするアイテムの選択を減らしてください。</string>
<string name="export_not_enough_space">十分な空き容量がありません</string>
<string name="select_groups_for_import">インポートするグループを選択します。</string>
<string name="select_items_for_import">インポートするアイテムを選択します。</string>
<string name="add_to_mapillary">Mapillaryに追加</string>
<string name="add_to_opr">OpenPlaceReviewsに追加</string>
<string name="add_photos_descr">OsmAndは、いくつかのソースからの写真を表示します:
\nOpenPlaceReviewsはPOIの写真;
\nMapillaryは投稿されたストリート画像;
\nWeb / WikimediaはOpenStreetMapデータのPOIの写真を利用しています。</string>
<string name="plan_route_split_before">この前で分割</string>
<string name="plan_route_split_after">この後で分割</string>
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
<string name="app_mode_light_aircraft">軽飛行機</string>
<string name="plan_route_join_segments">セグメントの結合</string>
<string name="plan_route_add_new_segment">新規セグメントの追加</string>
<string name="profile_type_osmand_string">OsmAndプロファイル</string>
<string name="profile_type_user_string">ユーザープロファイル</string>
<string name="release_3_9">• 設定、リソース、お気に入りを含むすべてのデータをエクスポートおよびインポートするオプションを追加
\n
\n• ルートの計画:ルートを含むトラックセグメントのグラフ、および複数のトラックセグメントを作成および編集する機能を追加
\n
\n• OpenStreetMapのOAuth認証方法を追加し、OSMダイアログのUIを改善
\n
\n• お気に入りのカスタムカラーのサポート、経由地点の追跡など
\n
\n</string>
<string name="reverse_all_points">すべての地点を逆転</string>
<string name="profile_by_default_description">アプリ起動時に適用されるプロファイルを選択します。</string>
<string name="shared_string_last_used">最後に利用</string>
<string name="routing_attr_prefer_hiking_routes_description">ハイキング向けのルートを選択します</string>
<string name="routing_attr_prefer_hiking_routes_name">ハイキングコースを優先</string>
<string name="routing_attr_allow_streams_description">小川と排水溝も水路とみなします</string>
<string name="routing_attr_allow_streams_name">小川と排水溝も許可</string>
<string name="routing_attr_allow_intermittent_name">常に水が流れているわけではない水路も許可</string>
<string name="routing_attr_allow_intermittent_description">常に水の流れがあるわけではない場所も水路として見なします</string>
<string name="add_online_routing_engine">オンラインルーティングエンジンの追加</string>
<string name="edit_online_routing_engine">オンラインルーティングエンジンの編集</string>
<string name="shared_string_subtype">サブタイプ</string>
<string name="shared_string_vehicle">車両</string>
<string name="shared_string_api_key">APIキー</string>
<string name="shared_string_server_url">サーバーURL</string>
<string name="shared_string_enter_param">パラメーターの入力</string>
<string name="keep_it_empty_if_not">APIキーがない場合は空白のままにします</string>
<string name="online_routing_example_hint">パラメータを含むURLは次のようになります:</string>
<string name="test_route_calculation">ルート計算のテスト</string>
<string name="routing_engine_vehicle_type_driving">ドライブ</string>
<string name="routing_engine_vehicle_type_foot">徒歩</string>
<string name="routing_engine_vehicle_type_bike">自転車</string>
<string name="routing_engine_vehicle_type_car"></string>
<string name="copy_address">住所をコピー</string>
<string name="online_routing_engine">オンラインルーティングエンジン</string>
<string name="online_routing_engines">オンラインルーティングエンジン</string>
<string name="shared_string_folders">フォルダー</string>
<string name="select_folder_descr">フォルダーを選択、または新しいフォルダを追加します</string>
<string name="select_folder">フォルダーの選択</string>
<string name="shared_string_empty"></string>
<string name="analyze_by_intervals">分割間隔を分析評価する</string>
<string name="upload_to_openstreetmap">OpenStreetMapにアップロード</string>
<string name="edit_track">経路の編集</string>
<string name="rename_track">経路名の変更</string>
<string name="change_folder">フォルダーの変更</string>
<string name="show_start_dialog">開始ダイアログを表示</string>
<string name="trip_recording_show_start_dialog_setting">無効にした場合、ウィジェットまたはメニュー項目をタップするとすぐに記録が始まり、確認のダイアログは表示されません。</string>
</resources> </resources>

View file

@ -4032,4 +4032,7 @@
<string name="track_has_no_altitude">De track bevat geen hoogtegegevens.</string> <string name="track_has_no_altitude">De track bevat geen hoogtegegevens.</string>
<string name="track_has_no_speed">De track bevat geen snelheidsgegevens.</string> <string name="track_has_no_speed">De track bevat geen snelheidsgegevens.</string>
<string name="select_another_colorization">Selecteer een ander inkleuring.</string> <string name="select_another_colorization">Selecteer een ander inkleuring.</string>
<string name="trip_recording_show_start_dialog_setting">Indien uitgeschakeld zal de opname starten na een tik op de widget of het menu-item, waarbij er geen bevestiging zal worden gevraagd.</string>
<string name="trip_recording_save_and_continue">Opslaan en doorgaan</string>
<string name="lost_data_warning">Niet-opgeslagen gegevens zullen verloren gaan.</string>
</resources> </resources>

View file

@ -4042,4 +4042,7 @@
<string name="segments_count">Segmento %1$d</string> <string name="segments_count">Segmento %1$d</string>
<string name="trip_recording_save_and_continue">Salvar e continuar</string> <string name="trip_recording_save_and_continue">Salvar e continuar</string>
<string name="lost_data_warning">Todos os dados não salvos serão perdidos.</string> <string name="lost_data_warning">Todos os dados não salvos serão perdidos.</string>
<string name="trip_recording_logging_interval_info">O intervalo de registro define o período de tempo no qual OsmAnd solicitará os dados de posição de localização atual.</string>
<string name="show_start_dialog">Mostrar caixa de diálogo inicial</string>
<string name="trip_recording_show_start_dialog_setting">Se desativado, a gravação começará logo após tocar no widget ou item de menu, pulando a caixa de diálogo de confirmação.</string>
</resources> </resources>

View file

@ -3893,7 +3893,7 @@
<string name="profile_type_user_string">Профиль пользователя</string> <string name="profile_type_user_string">Профиль пользователя</string>
<string name="profile_type_osmand_string">Профиль OsmAnd</string> <string name="profile_type_osmand_string">Профиль OsmAnd</string>
<string name="profile_by_default_description">Выберите профиль, который будет использоваться при запуске приложения.</string> <string name="profile_by_default_description">Выберите профиль, который будет использоваться при запуске приложения.</string>
<string name="shared_string_last_used">Последний раз использовалось</string> <string name="shared_string_last_used">Последний используемый</string>
<string name="routing_attr_allow_intermittent_description">Разрешить прерывистые водные пути</string> <string name="routing_attr_allow_intermittent_description">Разрешить прерывистые водные пути</string>
<string name="routing_attr_allow_intermittent_name">Разрешить прерывистые водные пути</string> <string name="routing_attr_allow_intermittent_name">Разрешить прерывистые водные пути</string>
<string name="release_3_9">• Добавлена возможность экспорта и импорта всех данных, включая настройки, ресурсы, мои места. <string name="release_3_9">• Добавлена возможность экспорта и импорта всех данных, включая настройки, ресурсы, мои места.
@ -4043,4 +4043,9 @@
<string name="gpx_upload_private_visibility_descr">«Частный» означает, что трек не будет виден в любых общедоступных списках, но точки из него будут доступны через public GPS API без отметок времени.</string> <string name="gpx_upload_private_visibility_descr">«Частный» означает, что трек не будет виден в любых общедоступных списках, но точки из него будут доступны через public GPS API без отметок времени.</string>
<string name="routing_attr_driving_style_description">Выберите цель, чтобы проложить к ней короткий, быстрый или безопасный маршрут</string> <string name="routing_attr_driving_style_description">Выберите цель, чтобы проложить к ней короткий, быстрый или безопасный маршрут</string>
<string name="delete_number_files_question">Удалить %1$d файлов\?</string> <string name="delete_number_files_question">Удалить %1$d файлов\?</string>
<string name="trip_recording_save_and_continue">Сохранить и продолжить</string>
<string name="lost_data_warning">Все несохраненные данные будут потеряны.</string>
<string name="show_start_dialog">Показывать начальный диалог</string>
<string name="trip_recording_show_start_dialog_setting">Если выключено, запись начнется сразу после нажатия на виджет или пункт меню, пропуская диалоговое окно подтверждения.</string>
<string name="trip_recording_logging_interval_info">Интервал записи трека указывает период времени, через который OsmAnd будет запрашивать данные о текущем местоположении.</string>
</resources> </resources>

View file

@ -4040,4 +4040,9 @@
<string name="routing_attr_short_way_description">Optimalizovaná kratšia trasa (úspora energie)</string> <string name="routing_attr_short_way_description">Optimalizovaná kratšia trasa (úspora energie)</string>
<string name="snap_to_road_descr">Ikona aktuálnej polohy bude prichytená k navigačnej trase</string> <string name="snap_to_road_descr">Ikona aktuálnej polohy bude prichytená k navigačnej trase</string>
<string name="routing_attr_height_obstacles_description">Výpočet trasy sa môže vyhnúť strmým stúpaniam.</string> <string name="routing_attr_height_obstacles_description">Výpočet trasy sa môže vyhnúť strmým stúpaniam.</string>
<string name="trip_recording_logging_interval_info">Interval zaznamenávania nastaví ako často bude OsmAnd zisťovať aktuálnu polohu.</string>
<string name="trip_recording_save_and_continue">Uložiť a pokračovať</string>
<string name="lost_data_warning">Všetky neuložené údaje budú stratené.</string>
<string name="show_start_dialog">Zobraziť úvodné okno</string>
<string name="trip_recording_show_start_dialog_setting">Ak je vypnuté, záznam začne hneď po stlačení nástroja alebo položky v menu a preskočí okno nastavenia.</string>
</resources> </resources>

View file

@ -2518,7 +2518,7 @@
<string name="poi_protection_object_water">Skyddsobjekt: vatten</string> <string name="poi_protection_object_water">Skyddsobjekt: vatten</string>
<string name="poi_nuclear_explosion_country">Explosion: land</string> <string name="poi_nuclear_explosion_country">Explosion: land</string>
<string name="poi_nuclear_explosion_site">Kärnvapenexplosionplats</string> <string name="poi_nuclear_explosion_site">Kärnvapenexplosionplats</string>
<string name="poi_nuclear_explosion_type_underground_shaft">"Explosionstyp: underjord, schakcft "</string> <string name="poi_nuclear_explosion_type_underground_shaft">Explosionstyp: underjord, schakt</string>
<string name="poi_nuclear_explosion_type_underground_tunnel">Explosionstyp: underjord, tunnel</string> <string name="poi_nuclear_explosion_type_underground_tunnel">Explosionstyp: underjord, tunnel</string>
<string name="poi_nuclear_explosion_type_atmospheric">Explosionstyp: atmosfärisk</string> <string name="poi_nuclear_explosion_type_atmospheric">Explosionstyp: atmosfärisk</string>
<string name="poi_nuclear_explosion_type_atmospheric_airdrop">Explosionstyp: atmosfärisk, airdrop</string> <string name="poi_nuclear_explosion_type_atmospheric_airdrop">Explosionstyp: atmosfärisk, airdrop</string>
@ -2550,8 +2550,8 @@
<string name="poi_nuclear_explosion_height_of_burst">Explosionshöjd</string> <string name="poi_nuclear_explosion_height_of_burst">Explosionshöjd</string>
<string name="poi_nuclear_explosion_ground_zero_altitude">Nollnivå-punkt</string> <string name="poi_nuclear_explosion_ground_zero_altitude">Nollnivå-punkt</string>
<string name="poi_nuclear_explosion_body_wave_magnitude">Kroppsvågsmagnitud</string> <string name="poi_nuclear_explosion_body_wave_magnitude">Kroppsvågsmagnitud</string>
<string name="poi_nuclear_explosion_salvo_first_detonation">"Explosionssalva: första detonationen av ett salvtest"</string> <string name="poi_nuclear_explosion_salvo_first_detonation">Explosionssalva: första detonationen av ett salvtest</string>
<string name="poi_nuclear_explosion_salvo_second_or_later_detonation">"Explosionssalva: andra eller senare detonation av ett salvtest"</string> <string name="poi_nuclear_explosion_salvo_second_or_later_detonation">Explosionssalva: andra eller senare detonation av ett salvtest</string>
<string name="poi_nuclear_explosion_crater_diameter">Explosionssalva: kraterdiameter</string> <string name="poi_nuclear_explosion_crater_diameter">Explosionssalva: kraterdiameter</string>
<string name="poi_nuclear_explosion_warhead">Explosion: stridsspets</string> <string name="poi_nuclear_explosion_warhead">Explosion: stridsspets</string>
<string name="poi_nuclear_explosion_device">Explosion: enhet</string> <string name="poi_nuclear_explosion_device">Explosion: enhet</string>
@ -2938,7 +2938,7 @@
<string name="poi_cuisine_korean">Koreanskt</string> <string name="poi_cuisine_korean">Koreanskt</string>
<string name="poi_cuisine_mediterranean">Medelhavs</string> <string name="poi_cuisine_mediterranean">Medelhavs</string>
<string name="poi_cuisine_bavarian">Bayerskt</string> <string name="poi_cuisine_bavarian">Bayerskt</string>
<string name="poi_cuisine_lebanese">"Libanesiskt "</string> <string name="poi_cuisine_lebanese">Libanesiskt</string>
<string name="poi_cuisine_russian">Ryskt</string> <string name="poi_cuisine_russian">Ryskt</string>
<string name="poi_cuisine_filipino">Filippinskt</string> <string name="poi_cuisine_filipino">Filippinskt</string>
<string name="poi_cuisine_portuguese">Portugisiskt</string> <string name="poi_cuisine_portuguese">Portugisiskt</string>
@ -2977,12 +2977,12 @@
<string name="poi_cuisine_afghan">Afghanskt</string> <string name="poi_cuisine_afghan">Afghanskt</string>
<string name="poi_cuisine_belgian">Belgiskt</string> <string name="poi_cuisine_belgian">Belgiskt</string>
<string name="poi_cuisine_basque">Baskiskt</string> <string name="poi_cuisine_basque">Baskiskt</string>
<string name="poi_cuisine_swiss">"Schweiziskt "</string> <string name="poi_cuisine_swiss">Schweiziskt</string>
<string name="poi_cuisine_cantonese">Kantonesiskt</string> <string name="poi_cuisine_cantonese">Kantonesiskt</string>
<string name="poi_cuisine_swedish">Svenskt</string> <string name="poi_cuisine_swedish">Svenskt</string>
<string name="poi_cuisine_jamaican">Jamaicanskt</string> <string name="poi_cuisine_jamaican">Jamaicanskt</string>
<string name="poi_cuisine_armenian">Armeniskt</string> <string name="poi_cuisine_armenian">Armeniskt</string>
<string name="poi_cuisine_hawaiian">"Hawaiianskt "</string> <string name="poi_cuisine_hawaiian">Hawaiianskt</string>
<string name="poi_cuisine_english">Engelskt</string> <string name="poi_cuisine_english">Engelskt</string>
<string name="poi_cuisine_pakistani">Pakistanskt</string> <string name="poi_cuisine_pakistani">Pakistanskt</string>
<string name="poi_cuisine_taiwanese">Taiwanesiskt</string> <string name="poi_cuisine_taiwanese">Taiwanesiskt</string>
@ -3329,4 +3329,68 @@
<string name="poi_location_outdoor">Plats: ute</string> <string name="poi_location_outdoor">Plats: ute</string>
<string name="poi_location_rooftop">Plats: tak</string> <string name="poi_location_rooftop">Plats: tak</string>
<string name="poi_location_roof">Plats: tak</string> <string name="poi_location_roof">Plats: tak</string>
<string name="poi_socket_nema_5_15">Uttag: NEMA 5-15R</string>
<string name="poi_climbing_mixed_no">Blandad: nej</string>
<string name="poi_climbing_mixed_yes">Blandad: ja</string>
<string name="poi_climbing_ice_no">Is: nej</string>
<string name="poi_climbing_ice_yes">Is: ja</string>
<string name="poi_climbing_multipitch_no">\"Multi-pitch\"-väg: nej</string>
<string name="poi_climbing_multipitch_yes">\"Multi-pitch\"-väg: ja</string>
<string name="poi_climbing_trad_no">Traditionell: nej</string>
<string name="poi_climbing_trad_yes">Traditionell: ja</string>
<string name="poi_climbing_toprope_no">Topprep: nej</string>
<string name="poi_climbing_toprope_yes">Topprep: ja</string>
<string name="poi_climbing_boulder_no">Boldering: nej</string>
<string name="poi_climbing_boulder_yes">Bouldering: ja</string>
<string name="poi_climbing_sport_no">Sport: nej</string>
<string name="poi_climbing_sport_yes">Sport: ja</string>
<string name="poi_ref_post">Postnummer</string>
<string name="poi_money_transfer">Pengaöverföring</string>
<string name="poi_payment_centre">BEtalningscentral</string>
<string name="poi_post_flats">PLatt</string>
<string name="poi_post_housenumber">Husnummer</string>
<string name="poi_post_street">Gata</string>
<string name="poi_letter_box">Brevlåda</string>
<string name="poi_depot">Depå</string>
<string name="poi_charging_station">Laddningsstation</string>
<string name="poi_map_size_region">Kartstorlek: region</string>
<string name="poi_map_size_city">Kartstorlek: stad</string>
<string name="poi_map_size_site">Kartstorlek: plats</string>
<string name="poi_map_type_toposcope">Karttyp: toposkop</string>
<string name="poi_map_type_scheme">Karttyp: schema</string>
<string name="poi_map_type_street">Karttyp: gata</string>
<string name="poi_map_type_topo">Karttyp: topo</string>
<string name="poi_charging_station_output">Laddningsstations utgång</string>
<string name="poi_amperage">Strömstyrka</string>
<string name="poi_parking_fee">Parkeringsavgift</string>
<string name="poi_parking_fee_no">Parkeringsavgift: nej</string>
<string name="poi_parking_fee_yes">Parkeringsavgift: ja</string>
<string name="poi_truck_no">Lastbil: nej</string>
<string name="poi_truck_yes">Lastbil: ja</string>
<string name="poi_scooter_no">Scooter: nej</string>
<string name="poi_scooter_yes">Scooter: ja</string>
<string name="poi_bicycle_no">Cykel: nej</string>
<string name="poi_bicycle_yes">Cykel: ja</string>
<string name="poi_car_no">Bil: nej</string>
<string name="poi_car_yes">Bil: ja</string>
<string name="poi_socket_as3112_output">Uttag: AS/NZS 3112: utgång</string>
<string name="poi_socket_as3112_current">Uttag: AS/NZS 3112: ström</string>
<string name="poi_socket_as3112">Uttag: AS/NZS 3112</string>
<string name="poi_socket_bs1363_output">Uttag: BS 1363: utgång</string>
<string name="poi_socket_bs1363_current">Uttag: BS 1363: ström</string>
<string name="poi_socket_bs1363">Uttag: BS 1363</string>
<string name="poi_socket_schuko_output">Uttag: Schuko: utgång</string>
<string name="poi_socket_schuko_current">Uttag: Schuko: ström</string>
<string name="poi_socket_schuko">Uttag: Schuko</string>
<string name="poi_socket_nema_14_50_output">Uttag: NEMA 14-50: utgång</string>
<string name="poi_socket_nema_14_50_current">Uttag: NEMA 14-50: ström</string>
<string name="poi_socket_nema_14_50">Uttag: NEMA 14-50</string>
<string name="poi_socket_nema_14_30_output">Uttag: NEMA 14-30: ugång</string>
<string name="poi_socket_nema_14_30_current">Uttag: NEMA 14-30: ström</string>
<string name="poi_socket_nema_14_30">Uttag: NEMA 14-30</string>
<string name="poi_socket_nema_5_20_output">Uttag: NEMA 5-20: utgående</string>
<string name="poi_socket_nema_5_20_current">Uttag: NEMA 5-20: ström</string>
<string name="poi_socket_nema_5_20">Uttag: NEMA 5-20</string>
<string name="poi_socket_nema_5_15_output">Uttag: NEMA 5-15R: utgång</string>
<string name="poi_socket_nema_5_15_current">Uttag: NEMA 5-15R: ström</string>
</resources> </resources>

View file

@ -4047,4 +4047,6 @@
<string name="trip_recording_logging_interval_info">Інтервал журналювання встановлює проміжок часу, впродовж якого OsmAnd запитуватиме дані про поточне розташування.</string> <string name="trip_recording_logging_interval_info">Інтервал журналювання встановлює проміжок часу, впродовж якого OsmAnd запитуватиме дані про поточне розташування.</string>
<string name="trip_recording_save_and_continue">Зберегти й продовжити</string> <string name="trip_recording_save_and_continue">Зберегти й продовжити</string>
<string name="lost_data_warning">Усі незбережені дані буде втрачено.</string> <string name="lost_data_warning">Усі незбережені дані буде втрачено.</string>
<string name="show_start_dialog">Показати діалогове вікно запуску</string>
<string name="trip_recording_show_start_dialog_setting">Якщо вимкнено, запис почнеться відразу після торкання до віджета або пункту меню, пропускаючи діалогове вікно підтвердження.</string>
</resources> </resources>

View file

@ -4041,4 +4041,6 @@
<string name="trip_recording_logging_interval_info">紀錄間隔設定的時段OsmAnd 將會要求目前位置的位置資料。</string> <string name="trip_recording_logging_interval_info">紀錄間隔設定的時段OsmAnd 將會要求目前位置的位置資料。</string>
<string name="trip_recording_save_and_continue">儲存並繼續</string> <string name="trip_recording_save_and_continue">儲存並繼續</string>
<string name="lost_data_warning">所有未儲存的資料都將會遺失。</string> <string name="lost_data_warning">所有未儲存的資料都將會遺失。</string>
<string name="show_start_dialog">顯示開始對話框</string>
<string name="trip_recording_show_start_dialog_setting">若停用,則在點擊小工具或選單項目後將跳過確認對話框,立刻開始。</string>
</resources> </resources>

View file

@ -5,11 +5,13 @@ import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
@ -163,7 +165,7 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment impl
ContextCompat.getColor(app, getActiveTextColorId(nightMode))); ContextCompat.getColor(app, getActiveTextColorId(nightMode)));
CardView cardLeft = itemView.findViewById(R.id.button_left); CardView cardLeft = itemView.findViewById(R.id.button_left);
createItem(cardLeft, ItemType.CANCEL); createItem(cardLeft, ItemType.CLOSE);
cardLeft.setOnClickListener(new View.OnClickListener() { cardLeft.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@ -237,15 +239,11 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment impl
} }
} }
public void show() { public void show(String... keys) {
Dialog dialog = getDialog(); Dialog dialog = getDialog();
if (dialog != null) { if (dialog != null) {
dialog.show(); dialog.show();
} }
}
public void show(String... keys) {
show();
for (String key : keys) { for (String key : keys) {
if (key.equals(UPDATE_TRACK_ICON)) { if (key.equals(UPDATE_TRACK_ICON)) {
updateTrackIcon(app, trackAppearanceIcon); updateTrackIcon(app, trackAppearanceIcon);
@ -300,6 +298,9 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment impl
AndroidUiHelper.setVisibility(View.GONE, segmentView.findViewById(R.id.list_item_divider)); AndroidUiHelper.setVisibility(View.GONE, segmentView.findViewById(R.id.list_item_divider));
WrapContentHeightViewPager pager = segmentView.findViewById(R.id.pager); WrapContentHeightViewPager pager = segmentView.findViewById(R.id.pager);
PagerSlidingTabStrip tabLayout = segmentView.findViewById(R.id.sliding_tabs); PagerSlidingTabStrip tabLayout = segmentView.findViewById(R.id.sliding_tabs);
tabLayout.setDividerWidth(AndroidUtils.dpToPx(app, 1));
tabLayout.setDividerColor(ContextCompat.getColor(app, nightMode ?
R.color.stroked_buttons_and_links_outline_dark : R.color.stroked_buttons_and_links_outline_light));
tabLayout.setOnTabReselectedListener(new PagerSlidingTabStrip.OnTabReselectedListener() { tabLayout.setOnTabReselectedListener(new PagerSlidingTabStrip.OnTabReselectedListener() {
@Override @Override
public void onTabSelected(int position) { public void onTabSelected(int position) {
@ -314,6 +315,7 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment impl
graphsAdapter = new GPXItemPagerAdapter(app, GpxUiHelper.makeGpxDisplayItem(app, graphsAdapter = new GPXItemPagerAdapter(app, GpxUiHelper.makeGpxDisplayItem(app,
displayHelper.getGpx()), displayHelper, nightMode, this, true); displayHelper.getGpx()), displayHelper, nightMode, this, true);
graphsAdapter.setChartHMargin(getResources().getDimensionPixelSize(R.dimen.content_padding));
pager.setAdapter(graphsAdapter); pager.setAdapter(graphsAdapter);
tabLayout.setViewPager(pager); tabLayout.setViewPager(pager);
@ -453,6 +455,21 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment impl
setItemBackground(context, nightMode, view, enabled); setItemBackground(context, nightMode, view, enabled);
} }
public static void createItemActive(Context context, boolean nightMode, View view, ItemType type) {
view.setTag(type);
AppCompatImageView icon = view.findViewById(R.id.icon);
if (icon != null) {
setTintedIconActive(context, icon, nightMode, type);
}
TextView title = view.findViewById(R.id.button_text);
Integer titleId = type.getTitleId();
if (title != null && titleId != null) {
title.setText(titleId);
setTextColorActive(context, title, nightMode, type);
}
setItemBackgroundActive(context, nightMode, view);
}
public static void setItemBackground(Context context, boolean nightMode, View view, boolean enabled) { public static void setItemBackground(Context context, boolean nightMode, View view, boolean enabled) {
if (view instanceof CardView) { if (view instanceof CardView) {
int colorId = enabled ? getActiveTransparentColorId(nightMode) : getInactiveButtonColorId(nightMode); int colorId = enabled ? getActiveTransparentColorId(nightMode) : getInactiveButtonColorId(nightMode);
@ -472,6 +489,12 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment impl
view.setBackgroundDrawable(background); view.setBackgroundDrawable(background);
} }
public static void setItemBackgroundActive(Context context, boolean nightMode, View view) {
if (view instanceof CardView) {
((CardView) view).setCardBackgroundColor(ContextCompat.getColor(context, getActiveTextColorId(nightMode)));
}
}
public enum ItemType { public enum ItemType {
SHOW_TRACK(R.string.shared_string_show_on_map, null), SHOW_TRACK(R.string.shared_string_show_on_map, null),
APPEARANCE(null, null), APPEARANCE(null, null),
@ -486,8 +509,10 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment impl
STOP(R.string.shared_string_control_stop, R.drawable.ic_action_rec_stop), STOP(R.string.shared_string_control_stop, R.drawable.ic_action_rec_stop),
STOP_AND_DISCARD(R.string.track_recording_stop_without_saving, R.drawable.ic_action_rec_stop), STOP_AND_DISCARD(R.string.track_recording_stop_without_saving, R.drawable.ic_action_rec_stop),
STOP_AND_SAVE(R.string.track_recording_save_and_stop, R.drawable.ic_action_save_to_file), STOP_AND_SAVE(R.string.track_recording_save_and_stop, R.drawable.ic_action_save_to_file),
STOP_ONLINE(R.string.live_monitoring_stop, R.drawable.ic_world_globe_dark), START_ONLINE(R.string.live_monitoring_start, R.drawable.ic_world_globe_dark),
STOP_ONLINE(R.string.live_monitoring_stop, R.drawable.ic_action_offline),
CANCEL(R.string.shared_string_cancel, R.drawable.ic_action_close), CANCEL(R.string.shared_string_cancel, R.drawable.ic_action_close),
CLOSE(R.string.shared_string_close, R.drawable.ic_action_close),
START_RECORDING(R.string.shared_string_control_start, R.drawable.ic_action_direction_movement), START_RECORDING(R.string.shared_string_control_start, R.drawable.ic_action_direction_movement),
SETTINGS(R.string.shared_string_settings, R.drawable.ic_action_settings), SETTINGS(R.string.shared_string_settings, R.drawable.ic_action_settings),
FINISH(R.string.shared_string_finish, R.drawable.ic_action_point_destination), FINISH(R.string.shared_string_finish, R.drawable.ic_action_point_destination),
@ -497,7 +522,7 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment impl
private final Integer titleId; private final Integer titleId;
@DrawableRes @DrawableRes
private final Integer iconId; private final Integer iconId;
private static final List<ItemType> negative = Arrays.asList(CLEAR_DATA, STOP_AND_DISCARD); private static final List<ItemType> negative = Arrays.asList(CLEAR_DATA, STOP, STOP_AND_DISCARD);
ItemType(@Nullable @StringRes Integer titleId, @Nullable @DrawableRes Integer iconId) { ItemType(@Nullable @StringRes Integer titleId, @Nullable @DrawableRes Integer iconId) {
this.titleId = titleId; this.titleId = titleId;
@ -528,6 +553,12 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment impl
} }
} }
protected static void setTextColorActive(Context context, TextView tv, boolean nightMode, ItemType type) {
if (tv != null) {
tv.setTextColor(ContextCompat.getColor(context, getPressedColorId(nightMode)));
}
}
protected static void setTintedIcon(Context context, AppCompatImageView iv, boolean enabled, boolean nightMode, ItemType type) { protected static void setTintedIcon(Context context, AppCompatImageView iv, boolean enabled, boolean nightMode, ItemType type) {
Integer iconId = type.getIconId(); Integer iconId = type.getIconId();
if (iv != null && iconId != null) { if (iv != null && iconId != null) {
@ -550,6 +581,17 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment impl
} }
} }
protected static void setTintedIconActive(Context context, AppCompatImageView iv, boolean nightMode, ItemType type) {
Integer iconId = type.getIconId();
if (iv != null && iconId != null) {
Drawable icon = AppCompatResources.getDrawable(context, iconId);
if (icon != null) {
DrawableCompat.setTint(icon, ContextCompat.getColor(context, getPressedColorId(nightMode)));
}
iv.setImageDrawable(icon);
}
}
@Override @Override
public void onPointSelected(TrkSegment segment, double lat, double lon) { public void onPointSelected(TrkSegment segment, double lat, double lon) {
if (trackChartPoints == null) { if (trackChartPoints == null) {
@ -649,6 +691,36 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment impl
return nightMode ? R.drawable.btn_background_inactive_dark : R.drawable.btn_background_inactive_light; return nightMode ? R.drawable.btn_background_inactive_dark : R.drawable.btn_background_inactive_light;
} }
@Override
protected void setupHeightAndBackground(final View mainView) {
final Activity activity = getActivity();
if (activity == null) {
return;
}
if (AndroidUiHelper.isOrientationPortrait(activity)) {
super.setupHeightAndBackground(mainView);
return;
}
mainView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewTreeObserver obs = mainView.getViewTreeObserver();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
obs.removeOnGlobalLayoutListener(this);
} else {
obs.removeGlobalOnLayoutListener(this);
}
final View contentView = mainView.findViewById(R.id.scroll_view);
contentView.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
contentView.requestLayout();
boolean showTopShadow = AndroidUtils.getScreenHeight(activity) - AndroidUtils.getStatusBarHeight(activity)
- mainView.getHeight() >= AndroidUtils.dpToPx(activity, 8);
drawTopShadow(showTopShadow);
}
});
}
@Override @Override
protected boolean hideButtonsContainer() { protected boolean hideButtonsContainer() {
return true; return true;

View file

@ -42,13 +42,13 @@ public class TripRecordingDiscardBottomSheet extends MenuBottomSheetDialogFragme
LayoutInflater inflater = UiUtilities.getInflater(app, nightMode); LayoutInflater inflater = UiUtilities.getInflater(app, nightMode);
int verticalBig = getResources().getDimensionPixelSize(R.dimen.dialog_content_margin); int verticalBig = getResources().getDimensionPixelSize(R.dimen.dialog_content_margin);
int verticalNormal = getResources().getDimensionPixelSize(R.dimen.content_padding); int verticalNormal = getResources().getDimensionPixelSize(R.dimen.content_padding);
final View buttonDiscard = createItem(inflater, ItemType.STOP_AND_DISCARD); final View buttonDiscard = createItem(inflater, ItemType.STOP);
final View buttonCancel = createItem(inflater, ItemType.CANCEL); final View buttonCancel = createItem(inflater, ItemType.CANCEL);
items.add(new BottomSheetItemWithDescription.Builder() items.add(new BottomSheetItemWithDescription.Builder()
.setDescription(getString(R.string.track_recording_description)) .setDescription(getString(R.string.track_recording_description))
.setDescriptionColorId(getPrimaryTextColorId(nightMode)) .setDescriptionColorId(getPrimaryTextColorId(nightMode))
.setTitle(app.getString(R.string.track_recording_title)) .setTitle(app.getString(R.string.track_recording_stop_without_saving))
.setLayoutId(R.layout.bottom_sheet_item_title_with_description) .setLayoutId(R.layout.bottom_sheet_item_title_with_description)
.create()); .create());

View file

@ -51,8 +51,6 @@ public class TripRecordingOptionsBottomSheet extends MenuBottomSheetDialogFragme
private SelectedGpxFile selectedGpxFile; private SelectedGpxFile selectedGpxFile;
private final Handler handler = new Handler(); private final Handler handler = new Handler();
private Runnable updatingTimeTrackSaved; private Runnable updatingTimeTrackSaved;
private int indexButtonOnline = -1;
private int indexButtonOnlineDivider = -1;
private GPXFile getGPXFile() { private GPXFile getGPXFile() {
return selectedGpxFile.getGpxFile(); return selectedGpxFile.getGpxFile();
@ -91,7 +89,8 @@ public class TripRecordingOptionsBottomSheet extends MenuBottomSheetDialogFragme
buttonClear = createItem(inflater, ItemType.CLEAR_DATA, hasDataToSave()); buttonClear = createItem(inflater, ItemType.CLEAR_DATA, hasDataToSave());
final View buttonDiscard = createItem(inflater, ItemType.STOP_AND_DISCARD); final View buttonDiscard = createItem(inflater, ItemType.STOP_AND_DISCARD);
final View buttonOnline = createItem(inflater, ItemType.STOP_ONLINE, hasDataToSave()); final View buttonOnline = createItem(inflater, settings.LIVE_MONITORING.get()
? ItemType.STOP_ONLINE : ItemType.START_ONLINE);
buttonSave = createItem(inflater, ItemType.SAVE, hasDataToSave()); buttonSave = createItem(inflater, ItemType.SAVE, hasDataToSave());
final View buttonSegment = createItem(inflater, ItemType.START_NEW_SEGMENT, wasTrackMonitored()); final View buttonSegment = createItem(inflater, ItemType.START_NEW_SEGMENT, wasTrackMonitored());
@ -131,27 +130,19 @@ public class TripRecordingOptionsBottomSheet extends MenuBottomSheetDialogFragme
items.add(new DividerSpaceItem(app, dp36)); items.add(new DividerSpaceItem(app, dp36));
if (app.getLiveMonitoringHelper().isLiveMonitoringEnabled()) {
items.add(new BaseBottomSheetItem.Builder() items.add(new BaseBottomSheetItem.Builder()
.setCustomView(buttonOnline) .setCustomView(buttonOnline)
.setOnClickListener(new View.OnClickListener() { .setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
settings.LIVE_MONITORING.set(false); boolean wasOnlineMonitored = !settings.LIVE_MONITORING.get();
if (indexButtonOnline != -1) { settings.LIVE_MONITORING.set(wasOnlineMonitored);
AndroidUiHelper.updateVisibility(items.get(indexButtonOnline).getView(), false); createItem(buttonOnline, wasOnlineMonitored ? ItemType.STOP_ONLINE : ItemType.START_ONLINE);
}
if (indexButtonOnlineDivider != -1) {
AndroidUiHelper.updateVisibility(items.get(indexButtonOnlineDivider).getView(), false);
}
} }
}) })
.create()); .create());
indexButtonOnline = items.size() - 1;
items.add(new DividerSpaceItem(app, dp36)); items.add(new DividerSpaceItem(app, dp36));
indexButtonOnlineDivider = items.size() - 1;
}
items.add(new BaseBottomSheetItem.Builder() items.add(new BaseBottomSheetItem.Builder()
.setCustomView(buttonSave) .setCustomView(buttonSave)
@ -181,17 +172,12 @@ public class TripRecordingOptionsBottomSheet extends MenuBottomSheetDialogFragme
.create()); .create());
items.add(new DividerSpaceItem(app, getResources().getDimensionPixelSize(R.dimen.content_padding_small))); items.add(new DividerSpaceItem(app, getResources().getDimensionPixelSize(R.dimen.content_padding_small)));
} }
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
runUpdatingTimeTrackSaved(); runUpdatingTimeTrackSaved();
Fragment target = getTargetFragment();
if (target instanceof TripRecordingBottomSheet) {
((TripRecordingBottomSheet) target).hide();
}
} }
@Override @Override
@ -243,6 +229,10 @@ public class TripRecordingOptionsBottomSheet extends MenuBottomSheetDialogFragme
} }
} }
private void createItem(View view, ItemType type) {
TripRecordingBottomSheet.createItem(app, nightMode, view, type, true, null);
}
private View createItem(LayoutInflater inflater, ItemType type, boolean enabled) { private View createItem(LayoutInflater inflater, ItemType type, boolean enabled) {
return TripRecordingBottomSheet.createItem(app, nightMode, inflater, type, enabled, null); return TripRecordingBottomSheet.createItem(app, nightMode, inflater, type, enabled, null);
} }

View file

@ -35,6 +35,7 @@ import net.osmand.plus.settings.fragments.BaseSettingsFragment.SettingsScreenTyp
import static net.osmand.plus.monitoring.OsmandMonitoringPlugin.MINUTES; import static net.osmand.plus.monitoring.OsmandMonitoringPlugin.MINUTES;
import static net.osmand.plus.monitoring.OsmandMonitoringPlugin.SECONDS; import static net.osmand.plus.monitoring.OsmandMonitoringPlugin.SECONDS;
import static net.osmand.plus.monitoring.TripRecordingBottomSheet.createItemActive;
import static net.osmand.plus.monitoring.TripRecordingBottomSheet.createItem; import static net.osmand.plus.monitoring.TripRecordingBottomSheet.createItem;
import static net.osmand.plus.monitoring.TripRecordingBottomSheet.createShowTrackItem; import static net.osmand.plus.monitoring.TripRecordingBottomSheet.createShowTrackItem;
import static net.osmand.plus.monitoring.TripRecordingBottomSheet.updateTrackIcon; import static net.osmand.plus.monitoring.TripRecordingBottomSheet.updateTrackIcon;
@ -123,7 +124,7 @@ public class TripRecordingStartingBottomSheet extends MenuBottomSheetDialogFragm
}); });
CardView cardCenter = itemView.findViewById(R.id.button_center); CardView cardCenter = itemView.findViewById(R.id.button_center);
createItem(app, nightMode, cardCenter, ItemType.START_RECORDING, true, null); createItemActive(app, nightMode, cardCenter, ItemType.START_RECORDING);
cardCenter.setOnClickListener(new View.OnClickListener() { cardCenter.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {

View file

@ -24,6 +24,7 @@ import com.github.mikephil.charting.listener.ChartTouchListener.ChartGesture;
import com.github.mikephil.charting.listener.OnChartGestureListener; import com.github.mikephil.charting.listener.OnChartGestureListener;
import com.github.mikephil.charting.listener.OnChartValueSelectedListener; import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
import net.osmand.AndroidUtils;
import net.osmand.GPXUtilities; import net.osmand.GPXUtilities;
import net.osmand.GPXUtilities.GPXFile; import net.osmand.GPXUtilities.GPXFile;
import net.osmand.GPXUtilities.GPXTrackAnalysis; import net.osmand.GPXUtilities.GPXTrackAnalysis;
@ -82,6 +83,11 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid
private boolean chartClicked; private boolean chartClicked;
private boolean nightMode; private boolean nightMode;
private boolean onlyGraphs; private boolean onlyGraphs;
private int chartHMargin = 0;
public void setChartHMargin(int chartHMargin) {
this.chartHMargin = chartHMargin;
}
public GPXItemPagerAdapter(@NonNull OsmandApplication app, public GPXItemPagerAdapter(@NonNull OsmandApplication app,
@NonNull GpxDisplayItem gpxItem, @NonNull GpxDisplayItem gpxItem,
@ -201,6 +207,8 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid
if (gpxFile != null && gpxItem != null) { if (gpxFile != null && gpxItem != null) {
GPXTrackAnalysis analysis = gpxItem.analysis; GPXTrackAnalysis analysis = gpxItem.analysis;
LineChart chart = view.findViewById(R.id.chart); LineChart chart = view.findViewById(R.id.chart);
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) chart.getLayoutParams();
AndroidUtils.setMargins(lp, chartHMargin, lp.topMargin, chartHMargin, lp.bottomMargin);
setupChart(view, chart); setupChart(view, chart);
switch (tabType) { switch (tabType) {
@ -436,8 +444,8 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid
view.findViewById(R.id.list_divider).setVisibility(View.GONE); view.findViewById(R.id.list_divider).setVisibility(View.GONE);
view.findViewById(R.id.bottom_line_blocks).setVisibility(View.GONE); view.findViewById(R.id.bottom_line_blocks).setVisibility(View.GONE);
} }
updateJoinGapsInfo(view, position);
if (!onlyGraphs) { if (!onlyGraphs) {
updateJoinGapsInfo(view, position);
view.findViewById(R.id.analyze_on_map).setOnClickListener(new View.OnClickListener() { view.findViewById(R.id.analyze_on_map).setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {

View file

@ -6,6 +6,7 @@ import android.view.ViewGroup;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import net.osmand.AndroidUtils; import net.osmand.AndroidUtils;
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem; import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;

View file

@ -222,7 +222,8 @@ public class CreateEditActionDialog extends DialogFragment
if (savedInstanceState == null) { if (savedInstanceState == null) {
String name = action.getName(getContext()); String name = action.getName(getContext());
if (action.getActionNameRes() != 0) { if (!action.isActionEditable() && action.getActionNameRes() != 0
&& !name.contains(getString(action.getActionNameRes()))) {
String actionName = getString(action.getActionNameRes()); String actionName = getString(action.getActionNameRes());
nameEditText.setText(getString(R.string.ltr_or_rtl_combine_via_dash, actionName, name)); nameEditText.setText(getString(R.string.ltr_or_rtl_combine_via_dash, actionName, name));
} else { } else {

View file

@ -10,17 +10,20 @@ import net.osmand.util.Algorithms;
public class RouteLineDrawInfo { public class RouteLineDrawInfo {
private static final String LINE_COLOR = "line_color"; private static final String LINE_COLOR_DAY = "line_color_day";
private static final String LINE_COLOR_NIGHT = "line_color_night";
private static final String LINE_WIDTH = "line_width"; private static final String LINE_WIDTH = "line_width";
private static final String NAVIGATION_ICON_ID = "navigation_icon_id"; private static final String NAVIGATION_ICON_ID = "navigation_icon_id";
private static final String NAVIGATION_ICON_COLOR = "navigation_icon_color"; private static final String NAVIGATION_ICON_COLOR = "navigation_icon_color";
private static final String CENTER_X = "center_x"; private static final String CENTER_X = "center_x";
private static final String CENTER_Y = "center_y"; private static final String CENTER_Y = "center_y";
private static final String SCREEN_HEIGHT = "screen_height"; private static final String SCREEN_HEIGHT = "screen_height";
private static final String USE_DEFAULT_COLOR = "use_default_color";
// parameters to save // parameters to save
@ColorInt @ColorInt
private Integer color; private Integer colorDay;
private Integer colorNight;
private String width; private String width;
// temporally parameters to show in preview // temporally parameters to show in preview
@ -30,10 +33,13 @@ public class RouteLineDrawInfo {
private int centerX; private int centerX;
private int centerY; private int centerY;
private int screenHeight; private int screenHeight;
private boolean useDefaultColor;
public RouteLineDrawInfo(@Nullable @ColorInt Integer color, public RouteLineDrawInfo(@Nullable @ColorInt Integer colorDay,
@Nullable @ColorInt Integer colorNight,
@Nullable String width) { @Nullable String width) {
this.color = color; this.colorDay = colorDay;
this.colorNight = colorNight;
this.width = width; this.width = width;
} }
@ -42,17 +48,27 @@ public class RouteLineDrawInfo {
} }
public RouteLineDrawInfo(@NonNull RouteLineDrawInfo existed) { public RouteLineDrawInfo(@NonNull RouteLineDrawInfo existed) {
this.color = existed.color; this.colorDay = existed.colorDay;
this.colorNight = existed.colorNight;
this.width = existed.width; this.width = existed.width;
this.iconId = existed.iconId; this.iconId = existed.iconId;
this.iconColor = existed.iconColor; this.iconColor = existed.iconColor;
this.centerX = existed.centerX; this.centerX = existed.centerX;
this.centerY = existed.centerY; this.centerY = existed.centerY;
this.screenHeight = existed.screenHeight; this.screenHeight = existed.screenHeight;
this.useDefaultColor = existed.useDefaultColor;
} }
public void setColor(@Nullable Integer color) { public void setColor(@ColorInt int color, boolean nightMode) {
this.color = color; if (nightMode) {
colorNight = color;
} else {
colorDay = color;
}
}
public void setUseDefaultColor(boolean useDefaultColor) {
this.useDefaultColor = useDefaultColor;
} }
public void setWidth(@Nullable String width) { public void setWidth(@Nullable String width) {
@ -80,8 +96,16 @@ public class RouteLineDrawInfo {
} }
@Nullable @Nullable
public Integer getColor() { public Integer getColor(boolean nightMode) {
return color; if (!useDefaultColor) {
return getColorIgnoreDefault(nightMode);
}
return null;
}
@Nullable
public Integer getColorIgnoreDefault(boolean nightMode) {
return nightMode ? colorNight : colorDay;
} }
@Nullable @Nullable
@ -111,8 +135,11 @@ public class RouteLineDrawInfo {
} }
private void readBundle(@NonNull Bundle bundle) { private void readBundle(@NonNull Bundle bundle) {
if (bundle.containsKey(LINE_COLOR)) { if (bundle.containsKey(LINE_COLOR_DAY)) {
color = bundle.getInt(LINE_COLOR); colorDay = bundle.getInt(LINE_COLOR_DAY);
}
if (bundle.containsKey(LINE_COLOR_NIGHT)) {
colorNight = bundle.getInt(LINE_COLOR_NIGHT);
} }
width = bundle.getString(LINE_WIDTH); width = bundle.getString(LINE_WIDTH);
iconId = bundle.getInt(NAVIGATION_ICON_ID); iconId = bundle.getInt(NAVIGATION_ICON_ID);
@ -120,11 +147,15 @@ public class RouteLineDrawInfo {
centerX = bundle.getInt(CENTER_X); centerX = bundle.getInt(CENTER_X);
centerY = bundle.getInt(CENTER_Y); centerY = bundle.getInt(CENTER_Y);
screenHeight = bundle.getInt(SCREEN_HEIGHT); screenHeight = bundle.getInt(SCREEN_HEIGHT);
useDefaultColor = bundle.getBoolean(USE_DEFAULT_COLOR);
} }
public void saveToBundle(@NonNull Bundle bundle) { public void saveToBundle(@NonNull Bundle bundle) {
if (color != null) { if (colorDay != null) {
bundle.putInt(LINE_COLOR, color); bundle.putInt(LINE_COLOR_DAY, colorDay);
}
if (colorNight != null) {
bundle.putInt(LINE_COLOR_NIGHT, colorNight);
} }
if (width != null) { if (width != null) {
bundle.putString(LINE_WIDTH, width); bundle.putString(LINE_WIDTH, width);
@ -134,6 +165,7 @@ public class RouteLineDrawInfo {
bundle.putInt(CENTER_X, centerX); bundle.putInt(CENTER_X, centerX);
bundle.putInt(CENTER_Y, centerY); bundle.putInt(CENTER_Y, centerY);
bundle.putInt(SCREEN_HEIGHT, screenHeight); bundle.putInt(SCREEN_HEIGHT, screenHeight);
bundle.putBoolean(USE_DEFAULT_COLOR, useDefaultColor);
} }
@Override @Override
@ -143,13 +175,15 @@ public class RouteLineDrawInfo {
RouteLineDrawInfo that = (RouteLineDrawInfo) o; RouteLineDrawInfo that = (RouteLineDrawInfo) o;
if (!Algorithms.objectEquals(getColor(), that.getColor())) return false; if (!Algorithms.objectEquals(colorDay, that.colorDay)) return false;
return Algorithms.objectEquals(getWidth(), that.getWidth()); if (!Algorithms.objectEquals(colorNight, that.colorNight)) return false;
return Algorithms.objectEquals(width, that.width);
} }
@Override @Override
public int hashCode() { public int hashCode() {
int result = color != null ? color.hashCode() : 0; int result = colorDay != null ? colorDay.hashCode() : 0;
result = 31 * result + (colorNight != null ? colorNight.hashCode() : 0);
result = 31 * result + (width != null ? width.hashCode() : 0); result = 31 * result + (width != null ? width.hashCode() : 0);
return result; return result;
} }

View file

@ -10,6 +10,7 @@ import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
@ -22,7 +23,6 @@ import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.helpers.ColorDialogs; import net.osmand.plus.helpers.ColorDialogs;
import net.osmand.plus.helpers.enums.DayNightMode; import net.osmand.plus.helpers.enums.DayNightMode;
import net.osmand.plus.render.RendererRegistry;
import net.osmand.plus.routepreparationmenu.cards.BaseCard; import net.osmand.plus.routepreparationmenu.cards.BaseCard;
import net.osmand.plus.routepreparationmenu.cards.BaseCard.CardListener; import net.osmand.plus.routepreparationmenu.cards.BaseCard.CardListener;
import net.osmand.plus.routing.RouteLineDrawInfo; import net.osmand.plus.routing.RouteLineDrawInfo;
@ -110,7 +110,7 @@ public class RouteLineColorCard extends BaseCard implements CardListener, ColorP
} }
private void initSelectedMode() { private void initSelectedMode() {
selectedMode = routeLineDrawInfo.getColor() == null ? ColorMode.DEFAULT : ColorMode.CUSTOM; selectedMode = getRouteLineColor() == null ? ColorMode.DEFAULT : ColorMode.CUSTOM;
modeChanged(); modeChanged();
} }
@ -118,13 +118,15 @@ public class RouteLineColorCard extends BaseCard implements CardListener, ColorP
if (selectedMode == ColorMode.DEFAULT) { if (selectedMode == ColorMode.DEFAULT) {
themeToggleContainer.setVisibility(View.GONE); themeToggleContainer.setVisibility(View.GONE);
cardsContainer.setVisibility(View.GONE); cardsContainer.setVisibility(View.GONE);
routeLineDrawInfo.setUseDefaultColor(true);
changeMapTheme(initMapTheme); changeMapTheme(initMapTheme);
} else { } else {
themeToggleContainer.setVisibility(View.VISIBLE); themeToggleContainer.setVisibility(View.VISIBLE);
cardsContainer.setVisibility(View.VISIBLE); cardsContainer.setVisibility(View.VISIBLE);
routeLineDrawInfo.setUseDefaultColor(false);
changeMapTheme(isNightMap() ? DayNightMode.NIGHT : DayNightMode.DAY); changeMapTheme(isNightMap() ? DayNightMode.NIGHT : DayNightMode.DAY);
} }
updateSelectedColor(); updateColorItems();
updateDescription(); updateDescription();
} }
@ -156,6 +158,12 @@ public class RouteLineColorCard extends BaseCard implements CardListener, ColorP
if (targetFragment instanceof OnMapThemeUpdateListener) { if (targetFragment instanceof OnMapThemeUpdateListener) {
((OnMapThemeUpdateListener) targetFragment).onMapThemeUpdated(mapTheme); ((OnMapThemeUpdateListener) targetFragment).onMapThemeUpdated(mapTheme);
} }
if (selectedMode == ColorMode.CUSTOM) {
Integer color = getRouteLineColor();
if (color != null) {
colorsCard.setSelectedColor(color);
}
}
} }
private void createColorSelector(ViewGroup container) { private void createColorSelector(ViewGroup container) {
@ -165,14 +173,9 @@ public class RouteLineColorCard extends BaseCard implements CardListener, ColorP
for (int color : ColorDialogs.pallette) { for (int color : ColorDialogs.pallette) {
colors.add(color); colors.add(color);
} }
Integer selectedColor = routeLineDrawInfo.getColor(); int selectedColorDay = getSelectedColorForTheme(colors, false);
if (selectedColor != null) { int selectedColorNight = getSelectedColorForTheme(colors, true);
if (!ColorDialogs.isPaletteColor(selectedColor)) { int selectedColor = isNightMap() ? selectedColorNight : selectedColorDay;
colors.add(selectedColor);
}
} else {
selectedColor = colors.get(0);
}
ListStringPreference preference = app.getSettings().CUSTOM_ROUTE_LINE_COLORS; ListStringPreference preference = app.getSettings().CUSTOM_ROUTE_LINE_COLORS;
colorsCard = new ColorsCard(mapActivity, selectedColor, targetFragment, colors, preference, null); colorsCard = new ColorsCard(mapActivity, selectedColor, targetFragment, colors, preference, null);
colorsCard.setListener(this); colorsCard.setListener(this);
@ -180,26 +183,49 @@ public class RouteLineColorCard extends BaseCard implements CardListener, ColorP
} }
} }
private int getSelectedColorForTheme(List<Integer> colors, boolean nightMode) {
Integer color = routeLineDrawInfo.getColorIgnoreDefault(nightMode);
if (color != null) {
if (!ColorDialogs.isPaletteColor(color)) {
colors.add(color);
}
} else {
color = colors.get(0);
routeLineDrawInfo.setUseDefaultColor(true);
routeLineDrawInfo.setColor(color, nightMode);
}
return color;
}
@Override @Override
public void onColorSelected(Integer prevColor, int newColor) { public void onColorSelected(Integer prevColor, int newColor) {
colorsCard.onColorSelected(prevColor, newColor); colorsCard.onColorSelected(prevColor, newColor);
updateSelectedColor(); updateSelectedColor();
} }
@Nullable
private Integer getRouteLineColor() {
return routeLineDrawInfo.getColor(isNightMap());
}
private void updateSelectedColor() { private void updateSelectedColor() {
Integer color = selectedMode == ColorMode.CUSTOM ? colorsCard.getSelectedColor() : null; int selectedColor = colorsCard.getSelectedColor();
routeLineDrawInfo.setColor(color); routeLineDrawInfo.setColor(selectedColor, isNightMap());
updateColorName(); updateColorItems();
}
private void updateColorItems() {
if (targetFragment instanceof OnSelectedColorChangeListener) { if (targetFragment instanceof OnSelectedColorChangeListener) {
((OnSelectedColorChangeListener) targetFragment).onSelectedColorChanged(); ((OnSelectedColorChangeListener) targetFragment).onSelectedColorChanged();
} }
updateColorName();
} }
private void updateColorName() { private void updateColorName() {
if (selectedMode == ColorMode.DEFAULT) { if (selectedMode == ColorMode.DEFAULT) {
tvColorName.setText(app.getString(R.string.map_widget_renderer)); tvColorName.setText(app.getString(R.string.map_widget_renderer));
} else if (routeLineDrawInfo.getColor() != null) { } else if (getRouteLineColor() != null) {
int colorNameId = ColorDialogs.getColorName(routeLineDrawInfo.getColor()); int colorNameId = ColorDialogs.getColorName(getRouteLineColor());
tvColorName.setText(app.getString(colorNameId)); tvColorName.setText(app.getString(colorNameId));
} }
} }

View file

@ -24,7 +24,6 @@ import net.osmand.plus.R;
import net.osmand.plus.UiUtilities; import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.helpers.AndroidUiHelper;
import net.osmand.plus.render.RendererRegistry;
import net.osmand.plus.routepreparationmenu.cards.BaseCard; import net.osmand.plus.routepreparationmenu.cards.BaseCard;
import net.osmand.plus.routing.RouteLineDrawInfo; import net.osmand.plus.routing.RouteLineDrawInfo;
import net.osmand.plus.track.AppearanceViewHolder; import net.osmand.plus.track.AppearanceViewHolder;
@ -201,6 +200,10 @@ public class RouteLineWidthCard extends BaseCard {
return WidthMode.DEFAULT; return WidthMode.DEFAULT;
} }
private boolean isNightMode() {
return app.getDaynightHelper().isNightModeForMapControls();
}
private class WidthAdapter extends RecyclerView.Adapter<AppearanceViewHolder> { private class WidthAdapter extends RecyclerView.Adapter<AppearanceViewHolder> {
private final List<WidthMode> items = Arrays.asList(WidthMode.values()); private final List<WidthMode> items = Arrays.asList(WidthMode.values());
@ -268,13 +271,9 @@ public class RouteLineWidthCard extends BaseCard {
} }
private int getIconColor(@NonNull WidthMode mode, @ColorInt int defaultColor) { private int getIconColor(@NonNull WidthMode mode, @ColorInt int defaultColor) {
return mode.widthKey != null ? getRouteLineColor() : defaultColor; return mode.widthKey != null ?
} mapActivity.getMapLayers().getRouteLayer().getRouteLineColor(isNightMode()) :
defaultColor;
private int getRouteLineColor() {
Integer color = routeLineDrawInfo.getColor();
return color != null ? color :
mapActivity.getMapLayers().getRouteLayer().getRouteLineColor(nightMode);
} }
private void updateButtonBg(AppearanceViewHolder holder, WidthMode item) { private void updateButtonBg(AppearanceViewHolder holder, WidthMode item) {

View file

@ -2691,8 +2691,10 @@ public class OsmandSettings {
public final CommonPreference<Float> ROUTE_RECALCULATION_DISTANCE = new FloatPreference(this, "routing_recalc_distance", 0.f).makeProfile(); public final CommonPreference<Float> ROUTE_RECALCULATION_DISTANCE = new FloatPreference(this, "routing_recalc_distance", 0.f).makeProfile();
public final CommonPreference<Float> ROUTE_STRAIGHT_ANGLE = new FloatPreference(this, "routing_straight_angle", 30.f).makeProfile(); public final CommonPreference<Float> ROUTE_STRAIGHT_ANGLE = new FloatPreference(this, "routing_straight_angle", 30.f).makeProfile();
public final ListStringPreference CUSTOM_ROUTE_LINE_COLORS = (ListStringPreference) new ListStringPreference(this, "custom_route_line_colors", null, ",").makeShared().makeGlobal(); public final ListStringPreference CUSTOM_ROUTE_LINE_COLORS = (ListStringPreference) new ListStringPreference(this, "custom_route_line_colors", null, ",").makeShared().makeGlobal();
public final CommonPreference<Integer> ROUTE_LINE_COLOR = new IntPreference(this, "route_line_color", 0).makeProfile(); public final CommonPreference<Integer> ROUTE_LINE_COLOR_DAY = new IntPreference(this, "route_line_color", 0).cache().makeProfile();
public final CommonPreference<Integer> ROUTE_LINE_COLOR_NIGHT = new IntPreference(this, "route_line_color_night", 0).cache().makeProfile();
public final CommonPreference<String> ROUTE_LINE_WIDTH = new StringPreference(this, "route_line_width", null).makeProfile(); public final CommonPreference<String> ROUTE_LINE_WIDTH = new StringPreference(this, "route_line_width", null).makeProfile();
public final OsmandPreference<Boolean> USE_OSM_LIVE_FOR_ROUTING = new BooleanPreference(this, "enable_osmc_routing", true).makeProfile(); public final OsmandPreference<Boolean> USE_OSM_LIVE_FOR_ROUTING = new BooleanPreference(this, "enable_osmc_routing", true).makeProfile();

View file

@ -1019,23 +1019,35 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
} }
private RouteLineDrawInfo createRouteLineDrawInfo(@NonNull ApplicationMode appMode) { private RouteLineDrawInfo createRouteLineDrawInfo(@NonNull ApplicationMode appMode) {
int storedValue = settings.ROUTE_LINE_COLOR.getModeValue(appMode); Integer colorDay = getRouteLineColor(appMode, settings.ROUTE_LINE_COLOR_DAY);
Integer color = storedValue != 0 ? storedValue : null; Integer colorNight = getRouteLineColor(appMode, settings.ROUTE_LINE_COLOR_NIGHT);
String widthKey = settings.ROUTE_LINE_WIDTH.getModeValue(appMode); String widthKey = settings.ROUTE_LINE_WIDTH.getModeValue(appMode);
return new RouteLineDrawInfo(color, widthKey); return new RouteLineDrawInfo(colorDay, colorNight, widthKey);
}
private Integer getRouteLineColor(@NonNull ApplicationMode appMode,
@NonNull CommonPreference<Integer> preference) {
int storedValue = preference.getModeValue(appMode);
return storedValue != 0 ? storedValue : null;
} }
private void saveRouteLineAppearance(@NonNull ApplicationMode appMode, private void saveRouteLineAppearance(@NonNull ApplicationMode appMode,
@NonNull RouteLineDrawInfo drawInfo) { @NonNull RouteLineDrawInfo drawInfo) {
Integer color = drawInfo.getColor(); saveRouteLineColor(appMode, settings.ROUTE_LINE_COLOR_DAY, drawInfo.getColor(false));
if (color != null) { saveRouteLineColor(appMode, settings.ROUTE_LINE_COLOR_NIGHT, drawInfo.getColor(true));
settings.ROUTE_LINE_COLOR.setModeValue(appMode, color);
} else {
settings.ROUTE_LINE_COLOR.resetModeToDefault(appMode);
}
settings.ROUTE_LINE_WIDTH.setModeValue(appMode, drawInfo.getWidth()); settings.ROUTE_LINE_WIDTH.setModeValue(appMode, drawInfo.getWidth());
} }
private void saveRouteLineColor(@NonNull ApplicationMode appMode,
@NonNull CommonPreference<Integer> preference,
@Nullable @ColorInt Integer color) {
if (color != null) {
preference.setModeValue(appMode, color);
} else {
preference.resetModeToDefault(appMode);
}
}
public static boolean showInstance(FragmentActivity activity, SettingsScreenType screenType, @Nullable String appMode, boolean imported) { public static boolean showInstance(FragmentActivity activity, SettingsScreenType screenType, @Nullable String appMode, boolean imported) {
try { try {
Fragment fragment = Fragment.instantiate(activity, screenType.fragmentName); Fragment fragment = Fragment.instantiate(activity, screenType.fragmentName);

View file

@ -385,6 +385,10 @@ public class RouteLineAppearanceFragment extends ContextMenuScrollFragment imple
@Override @Override
public void onSelectedColorChanged() { public void onSelectedColorChanged() {
updateColorItems();
}
private void updateColorItems() {
if (widthCard != null) { if (widthCard != null) {
widthCard.updateItems(); widthCard.updateItems();
} }
@ -415,6 +419,7 @@ public class RouteLineAppearanceFragment extends ContextMenuScrollFragment imple
@Override @Override
public void onMapThemeUpdated(@NonNull DayNightMode mapTheme) { public void onMapThemeUpdated(@NonNull DayNightMode mapTheme) {
changeMapTheme(mapTheme); changeMapTheme(mapTheme);
updateColorItems();
} }
private void changeMapTheme(@NonNull DayNightMode mapTheme) { private void changeMapTheme(@NonNull DayNightMode mapTheme) {

View file

@ -72,6 +72,7 @@ public class ColorsCard extends BaseCard implements ColorPickerListener {
public void setSelectedColor(int selectedColor) { public void setSelectedColor(int selectedColor) {
this.selectedColor = selectedColor; this.selectedColor = selectedColor;
updateContent();
} }
@Override @Override

View file

@ -129,7 +129,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
private int dividerWidth = 0; private int dividerWidth = 0;
private int dividerPadding = 0;
@ColorInt @ColorInt
private int dividerColor; private int dividerColor;
@ -183,7 +182,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
scrollOffset = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, scrollOffset, dm); scrollOffset = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, scrollOffset, dm);
indicatorHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, indicatorHeight, dm); indicatorHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, indicatorHeight, dm);
underlineHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, underlineHeight, dm); underlineHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, underlineHeight, dm);
dividerPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dividerPadding, dm);
tabPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, tabPadding, dm); tabPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, tabPadding, dm);
dividerWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dividerWidth, dm); dividerWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dividerWidth, dm);
tabTextSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, tabTextSize, dm); tabTextSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, tabTextSize, dm);
@ -214,7 +212,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
dividerWidth = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_pstsDividerWidth, dividerWidth); dividerWidth = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_pstsDividerWidth, dividerWidth);
indicatorHeight = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_pstsIndicatorHeight, indicatorHeight); indicatorHeight = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_pstsIndicatorHeight, indicatorHeight);
underlineHeight = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_pstsUnderlineHeight, underlineHeight); underlineHeight = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_pstsUnderlineHeight, underlineHeight);
dividerPadding = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_pstsDividerPadding, dividerPadding);
tabPadding = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_pstsTabPaddingLeftRight, tabPadding); tabPadding = a.getDimensionPixelSize(R.styleable.PagerSlidingTabStrip_pstsTabPaddingLeftRight, tabPadding);
tabBackgroundResId = a.getResourceId(R.styleable.PagerSlidingTabStrip_pstsTabBackground, tabBackgroundResId); tabBackgroundResId = a.getResourceId(R.styleable.PagerSlidingTabStrip_pstsTabBackground, tabBackgroundResId);
indicatorBgColor = a.getColor(R.styleable.PagerSlidingTabStrip_pstsTabBackground, Color.TRANSPARENT); indicatorBgColor = a.getColor(R.styleable.PagerSlidingTabStrip_pstsTabBackground, Color.TRANSPARENT);
@ -485,7 +482,7 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
dividerPaint.setColor(dividerColor); dividerPaint.setColor(dividerColor);
for (int i = 0; i < tabCount - 1; i++) { for (int i = 0; i < tabCount - 1; i++) {
View tab = tabsContainer.getChildAt(i); View tab = tabsContainer.getChildAt(i);
canvas.drawLine(tab.getRight(), dividerPadding, tab.getRight(), height - dividerPadding, dividerPaint); canvas.drawLine(tab.getRight(), tabsContainer.getTop(), tab.getRight(), tabsContainer.getBottom(), dividerPaint);
} }
} }
} }
@ -720,10 +717,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
return underlineHeight; return underlineHeight;
} }
public int getDividerPadding() {
return dividerPadding;
}
public int getScrollOffset() { public int getScrollOffset() {
return scrollOffset; return scrollOffset;
} }
@ -826,11 +819,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView {
invalidate(); invalidate();
} }
public void setDividerPadding(int dividerPaddingPx) {
this.dividerPadding = dividerPaddingPx;
invalidate();
}
public void setScrollOffset(int scrollOffsetPx) { public void setScrollOffset(int scrollOffsetPx) {
this.scrollOffset = scrollOffsetPx; this.scrollOffset = scrollOffsetPx;
invalidate(); invalidate();

View file

@ -42,6 +42,7 @@ import net.osmand.plus.routing.RouteLineDrawInfo;
import net.osmand.plus.routing.RouteService; import net.osmand.plus.routing.RouteService;
import net.osmand.plus.routing.RoutingHelper; import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.routing.TransportRoutingHelper; import net.osmand.plus.routing.TransportRoutingHelper;
import net.osmand.plus.settings.backend.CommonPreference;
import net.osmand.plus.views.OsmandMapLayer; import net.osmand.plus.views.OsmandMapLayer;
import net.osmand.plus.views.OsmandMapTileView; import net.osmand.plus.views.OsmandMapTileView;
import net.osmand.plus.views.layers.geometry.PublicTransportGeometryWay; import net.osmand.plus.views.layers.geometry.PublicTransportGeometryWay;
@ -315,14 +316,16 @@ public class RouteLayer extends OsmandMapLayer implements ContextMenuLayer.ICont
QuadPoint c = tileBox.getCenterPixelPoint(); QuadPoint c = tileBox.getCenterPixelPoint();
canvas.rotate(-angle, c.x, c.y); canvas.rotate(-angle, c.x, c.y);
drawRouteLinePreview(canvas, tileBox, routeLineDrawInfo); drawRouteLinePreview(canvas, tileBox, settings, routeLineDrawInfo);
canvas.rotate(angle, c.x, c.y); canvas.rotate(angle, c.x, c.y);
} }
} }
private void drawRouteLinePreview(Canvas canvas, private void drawRouteLinePreview(Canvas canvas,
RotatedTileBox tileBox, RotatedTileBox tileBox,
DrawSettings settings,
RouteLineDrawInfo drawInfo) { RouteLineDrawInfo drawInfo) {
updateAttrs(settings, tileBox);
paintRouteLinePreview.setColor(getRouteLineColor(nightMode)); paintRouteLinePreview.setColor(getRouteLineColor(nightMode));
paintRouteLinePreview.setStrokeWidth(getRouteLineWidth(tileBox)); paintRouteLinePreview.setStrokeWidth(getRouteLineWidth(tileBox));
@ -417,12 +420,14 @@ public class RouteLayer extends OsmandMapLayer implements ContextMenuLayer.ICont
public int getRouteLineColor(boolean night) { public int getRouteLineColor(boolean night) {
Integer color; Integer color;
if (routeLineDrawInfo != null) { if (routeLineDrawInfo != null) {
color = routeLineDrawInfo.getColor(); color = routeLineDrawInfo.getColor(night);
} else { } else {
int storedValue = view.getSettings().ROUTE_LINE_COLOR.getModeValue(helper.getAppMode()); CommonPreference<Integer> colorPreference = night ?
view.getSettings().ROUTE_LINE_COLOR_NIGHT :
view.getSettings().ROUTE_LINE_COLOR_DAY;
int storedValue = colorPreference.getModeValue(helper.getAppMode());
color = storedValue != 0 ? storedValue : null; color = storedValue != 0 ? storedValue : null;
} }
if (color == null) { if (color == null) {
updateAttrs(new DrawSettings(night), view.getCurrentRotatedTileBox()); updateAttrs(new DrawSettings(night), view.getCurrentRotatedTileBox());
color = attrs.paint.getColor(); color = attrs.paint.getColor();