Compare commits

..

8 Commits

Author SHA1 Message Date
Jean-Baptiste
b7733786df [android] Remove useless property apply in main TextView style
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-09 13:56:15 +01:00
Henry Sternberg
245646c45d [routing] parking_aisle fixes v2
Signed-off-by: Henry Sternberg <henry@bluelightmaps.com>
2026-01-09 12:23:33 +00:00
Jean-Baptiste
6799f17c1b [android] Rework text style applied on title in app bar
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-09 11:44:18 +01:00
Henry Sternberg
e3abbc712b [routing] Fix crash on 32-bit devices with conditional access
The deserialization of conditional road access data was using
size_t which is 8 bytes on 64-bit (where maps are generated)
but only 4 bytes on 32-bit devices. This caused stream
misalignment and eventual std::length_error when garbage data
was interpreted as a huge vector size.

Fix by using uint64_t to always read 8 bytes, matching what
64-bit build servers write.

Signed-off-by: Henry Sternberg <henry@bluelightmaps.com>
2026-01-09 11:15:38 +01:00
Bastian Greshake Tzovaras
0da7869c5b [translation] manually add lt strings
Signed-off-by: Bastian Greshake Tzovaras <bgreshake@googlemail.com>
Co-authored-by: Bastian Greshake Tzovaras <bgreshake@googlemail.com>
Co-committed-by: Bastian Greshake Tzovaras <bgreshake@googlemail.com>
2026-01-09 09:13:48 +01:00
Yannik Bloscheck
2e3a76fc94 [ios] Increasing base version number to new year
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2026-01-09 09:12:31 +01:00
Dobri Dabar
85d4226eda [android] Add map Local Language
Signed-off-by: Dobri Dabar <dobridabar@noreply.codeberg.org>
2026-01-09 08:41:22 +01:00
Henry Sternberg
3f9dfd6605 [routing] fix/parking-aisle for pedestrian/cycle routing
Signed-off-by: Henry Sternberg <henry@bluelightmaps.com>
Co-authored-by: Henry Sternberg <henry@bluelightmaps.com>
Co-committed-by: Henry Sternberg <henry@bluelightmaps.com>
2026-01-08 21:41:50 +01:00
15 changed files with 583 additions and 42 deletions

View File

@@ -132,7 +132,6 @@ import app.organicmaps.widget.placepage.PlacePageViewModel;
import com.google.android.material.appbar.MaterialToolbar; import com.google.android.material.appbar.MaterialToolbar;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.textview.MaterialTextView;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Objects; import java.util.Objects;
@@ -712,7 +711,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
if (!TextUtils.isEmpty(appName)) if (!TextUtils.isEmpty(appName))
{ {
setTitle(appName); setTitle(appName);
((MaterialTextView) mPointChooser.findViewById(R.id.title)).setText(appName);
} }
} }

View File

@@ -237,6 +237,7 @@ public class EditorHostFragment
for (LocalizedName name : sNames) for (LocalizedName name : sNames)
languages.add(name.lang); languages.add(name.lang);
args.putStringArrayList(LanguagesFragment.EXISTING_LOCALIZED_NAMES, languages); args.putStringArrayList(LanguagesFragment.EXISTING_LOCALIZED_NAMES, languages);
args.putBoolean(LanguagesFragment.INCLUDE_LOCAL_LANGUAGE, false);
editWithFragment(Mode.LANGUAGE, R.string.choose_language, args, LanguagesFragment.class, false); editWithFragment(Mode.LANGUAGE, R.string.choose_language, args, LanguagesFragment.class, false);
} }

View File

@@ -1,11 +1,15 @@
package app.organicmaps.editor; package app.organicmaps.editor;
import static app.organicmaps.sdk.editor.data.Language.DEFAULT_LANG_CODE;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.os.ConfigurationCompat; import androidx.core.os.ConfigurationCompat;
import androidx.core.os.LocaleListCompat; import androidx.core.os.LocaleListCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import app.organicmaps.R;
import app.organicmaps.base.BaseMwmRecyclerFragment; import app.organicmaps.base.BaseMwmRecyclerFragment;
import app.organicmaps.sdk.editor.Editor; import app.organicmaps.sdk.editor.Editor;
import app.organicmaps.sdk.editor.data.Language; import app.organicmaps.sdk.editor.data.Language;
@@ -21,6 +25,7 @@ import java.util.Set;
public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter> public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
{ {
final static String EXISTING_LOCALIZED_NAMES = "ExistingLocalizedNames"; final static String EXISTING_LOCALIZED_NAMES = "ExistingLocalizedNames";
final static String INCLUDE_LOCAL_LANGUAGE = "IncludeLocalLanguage";
public interface Listener public interface Listener
{ {
@@ -34,6 +39,8 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
protected LanguagesAdapter createAdapter() protected LanguagesAdapter createAdapter()
{ {
Bundle args = getArguments(); Bundle args = getArguments();
boolean includeLocalLanguage =
args != null ? args.getBoolean(INCLUDE_LOCAL_LANGUAGE) : true;
Set<String> existingLanguages = Set<String> existingLanguages =
args != null ? new HashSet<>(args.getStringArrayList(EXISTING_LOCALIZED_NAMES)) : new HashSet<>(); args != null ? new HashSet<>(args.getStringArrayList(EXISTING_LOCALIZED_NAMES)) : new HashSet<>();
@@ -68,6 +75,12 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
languages.addAll(0, systemLanguages.stream().filter(Objects::nonNull).toList()); languages.addAll(0, systemLanguages.stream().filter(Objects::nonNull).toList());
if (includeLocalLanguage) {
String localLanguageLabel = getString(R.string.pref_maplanguage_local);
Language localLanguage = new Language(DEFAULT_LANG_CODE, localLanguageLabel);
languages.add(0, localLanguage);
}
return new LanguagesAdapter(this, languages.toArray(new Language[languages.size()])); return new LanguagesAdapter(this, languages.toArray(new Language[languages.size()]));
} }

View File

@@ -1,6 +1,7 @@
package app.organicmaps.settings; package app.organicmaps.settings;
import static app.organicmaps.leftbutton.LeftButtonsHolder.DISABLE_BUTTON_CODE; import static app.organicmaps.leftbutton.LeftButtonsHolder.DISABLE_BUTTON_CODE;
import static app.organicmaps.sdk.editor.data.Language.DEFAULT_LANG_CODE;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Intent; import android.content.Intent;
@@ -140,8 +141,13 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
private void updateMapLanguageCodeSummary() private void updateMapLanguageCodeSummary()
{ {
final Preference pref = getPreference(getString(R.string.pref_map_locale)); final Preference pref = getPreference(getString(R.string.pref_map_locale));
Locale locale = new Locale(MapLanguageCode.getMapLanguageCode()); String mapLanguageCode = MapLanguageCode.getMapLanguageCode();
pref.setSummary(locale.getDisplayLanguage()); if (mapLanguageCode.equals(DEFAULT_LANG_CODE)) {
pref.setSummary(R.string.pref_maplanguage_local);
} else {
Locale locale = new Locale(mapLanguageCode);
pref.setSummary(locale.getDisplayLanguage());
}
} }
private void updateRoutingSettingsPrefsSummary() private void updateRoutingSettingsPrefsSummary()

View File

@@ -20,8 +20,8 @@
android:gravity="center" android:gravity="center"
android:layout_gravity="end|center_vertical" android:layout_gravity="end|center_vertical"
android:background="?selectableItemBackgroundBorderless" android:background="?selectableItemBackgroundBorderless"
android:textSize="@dimen/text_size_toolbar"
android:padding="@dimen/margin_half" android:padding="@dimen/margin_half"
android:textAppearance="@style/MwmTextAppearance.Toolbar.Title"
android:text="@string/editor_report_problem_send_button"/> android:text="@string/editor_report_problem_send_button"/>
</com.google.android.material.appbar.MaterialToolbar> </com.google.android.material.appbar.MaterialToolbar>

View File

@@ -15,15 +15,8 @@
android:theme="@style/MwmWidget.ToolbarTheme" android:theme="@style/MwmWidget.ToolbarTheme"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent"
app:title="@string/editor_add_select_location">
<com.google.android.material.textview.MaterialTextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/margin_half"
android:text="@string/editor_add_select_location"
android:textAppearance="@style/MwmTextAppearance.Toolbar.Title"/>
</com.google.android.material.appbar.MaterialToolbar> </com.google.android.material.appbar.MaterialToolbar>
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView

View File

@@ -797,8 +797,10 @@
<string name="enable_show_on_lock_screen">Show on the lock screen</string> <string name="enable_show_on_lock_screen">Show on the lock screen</string>
<!-- Description in preferences --> <!-- Description in preferences -->
<string name="enable_show_on_lock_screen_description">When enabled, the app will work on the lockscreen even when the device is locked.</string> <string name="enable_show_on_lock_screen_description">When enabled, the app will work on the lockscreen even when the device is locked.</string>
<!-- Current language of the map! --> <!-- Current language of the map -->
<string name="change_map_locale">Map language</string> <string name="change_map_locale">Map language</string>
<!-- Local language -->
<string name="pref_maplanguage_local">Local Language</string>
<!-- OpenStreetMap text on splash screen --> <!-- OpenStreetMap text on splash screen -->
<string name="splash_subtitle">Map data from OpenStreetMap</string> <string name="splash_subtitle">Map data from OpenStreetMap</string>
<!-- Telegram group url for the "?" About page --> <!-- Telegram group url for the "?" About page -->

View File

@@ -98,16 +98,6 @@
<item name="android:textColorHint">@color/text_light_hint</item> <item name="android:textColorHint">@color/text_light_hint</item>
</style> </style>
<style name="MwmTextAppearance.Toolbar.Title" parent="android:TextAppearance.Material.Widget.ActionBar.Title">
<item name="android:textSize">@dimen/text_size_toolbar</item>
<item name="android:textColor">@color/text_light</item>
<item name="android:textColorHint">@color/text_light_hint</item>
</style>
<style name="MwmTextAppearance.Toolbar.Title.Light">
<item name="android:textColor">@color/bg_cards</item>
</style>
<style name="MwmTextAppearance.NavMenu"> <style name="MwmTextAppearance.NavMenu">
<item name="android:textStyle">bold</item> <item name="android:textStyle">bold</item>
</style> </style>

View File

@@ -143,8 +143,7 @@
<item name="android:background">?colorPrimary</item> <item name="android:background">?colorPrimary</item>
<item name="android:displayOptions">homeAsUp|showTitle</item> <item name="android:displayOptions">homeAsUp|showTitle</item>
<item name="contentInsetStart">0dp</item> <item name="contentInsetStart">0dp</item>
<item name="android:titleTextAppearance">@style/MwmTextAppearance.Toolbar.Title</item> <item name="titleTextColor">@color/text_light</item>
<item name="titleTextAppearance">@style/MwmTextAppearance.Toolbar.Title</item>
<item name="buttonGravity">center_vertical</item> <item name="buttonGravity">center_vertical</item>
</style> </style>
@@ -169,9 +168,7 @@
<item name="android:cacheColorHint">@android:color/transparent</item> <item name="android:cacheColorHint">@android:color/transparent</item>
</style> </style>
<style name="MwmWidget.TextView" parent="Widget.MaterialComponents.TextView"> <style name="MwmWidget.TextView" parent="Widget.MaterialComponents.TextView" />
<item name="android:background">@android:color/transparent</item>
</style>
<style name="MwmWidget.TextView.Item"> <style name="MwmWidget.TextView.Item">
<item name="android:layout_width">match_parent</item> <item name="android:layout_width">match_parent</item>

View File

@@ -1 +1,543 @@
{} {
"@category_eat": "",
"@category_food": "",
"@category_transport": "",
"@category_fuel": "",
"@category_parking": "",
"@category_shopping": "",
"@category_hotel": "",
"@category_tourism": "",
"@category_entertainment": "",
"@category_nightlife": "",
"@category_children": "",
"@category_atm": "",
"@category_rv": "",
"amenity-atm|@category_atm": "",
"@category_bank": "",
"@category_secondhand": "",
"amenity-bank|@category_bank": "",
"@category_recycling": "",
"amenity-bureau_de_change": "",
"amenity-studio": "",
"amenity-bar|amenity-pub|@category_eat|@category_nightlife": "",
"amenity-cafe|@category_eat": "",
"amenity-fast_food|@category_eat": "",
"amenity-restaurant|@category_eat": "",
"amenity-fuel|@category_fuel": "",
"@shop": "",
"shop-bakery|shop-pastry|@category_eat|@category_food|@shop": "",
"shop|@shop": "",
"shop-cannabis|@shop": "",
"shop-cosmetics|@category_shopping|@shop": "",
"shop-convenience|@category_food|@shop": "",
"shop-deli|@category_food|@shop": "",
"shop-farm|@category_food|@shop": "",
"shop-garden_centre|@shop": "",
"shop-grocery|@category_food|@shop": "",
"shop-health_food|@category_food|@shop": "",
"shop-hearing_aids|@shop": "",
"shop-mobile_phone|@shop": "",
"shop-florist|@shop": "",
"shop-butcher|@category_food|@shop": "",
"shop-furniture|@shop": "",
"shop-kitchen|@shop": "",
"shop-alcohol|@category_food|@shop": "",
"shop-books|@shop": "",
"shop-shoes|@category_shopping|@shop": "",
"shop-electronics|@shop": "",
"shop-hardware|shop-doityourself|@shop": "",
"shop-houseware|@shop": "",
"shop-jewelry|@category_shopping|@shop": "",
"shop-optician|@shop": "",
"shop-gift|@category_shopping|@shop": "",
"shop-beauty": "",
"shop-beauty-nails": "",
"shop-greengrocer|@category_food|@shop": "",
"shop-sports|@category_shopping|@shop": "",
"shop-supermarket|@category_food|@shop": "",
"shop-mall|@category_shopping|@shop": "",
"shop-department_store|@category_shopping|@shop": "",
"shop-beverages|@category_food|@shop": "",
"shop-computer|@shop": "",
"shop-confectionery|craft-confectionery|@category_food|@shop": "",
"shop-laundry": "",
"shop-toys|@category_children|@shop": "",
"amenity-marketplace|@category_food": "",
"amenity-mobile_money_agent": "",
"amenity-money_transfer": "",
"shop-clothes|@category_shopping|@shop": "",
"shop-caravan|@category_rv|@shop": "",
"shop-car|@shop": "",
"shop-bicycle|@shop": "",
"shop-kiosk": "",
"highway-bus_stop|@category_transport": "",
"railway-tram_stop|@category_transport": "",
"amenity-bus_station|@category_transport": "",
"railway-station|railway-halt|building-train_station|@category_transport": "",
"railway-station-funicular": "",
"railway-station-subway|@category_transport": "",
"amenity-ferry_terminal|@category_transport": "",
"amenity-taxi|@category_transport": "",
"amenity-townhall": "",
"tourism-attraction|@category_tourism": "",
"tourism-artwork": "",
"tourism-artwork-sculpture": "",
"tourism-artwork-statue": "",
"tourism-artwork-painting": "",
"tourism-viewpoint|@category_tourism": "",
"tourism-information": "",
"tourism-picnic_site|amenity-bbq|leisure-picnic_table": "",
"amenity-place_of_worship": "",
"amenity-place_of_worship-christian": "",
"amenity-place_of_worship-muslim": "",
"amenity-place_of_worship-buddhist": "",
"amenity-place_of_worship-hindu": "",
"amenity-place_of_worship-shinto": "",
"amenity-place_of_worship-jewish": "",
"amenity-place_of_worship-taoist": "",
"tourism-museum|@category_tourism": "",
"waterway-waterfall|@category_tourism": "",
"historic-archaeological_site|@category_tourism": "",
"historic-battlefield": "",
"historic-stone": "",
"historic-boundary_stone": "",
"historic-castle|@category_tourism": "",
"historic-city_gate|@category_tourism": "",
"historic-citywalls|@category_tourism": "",
"historic-fort|@category_tourism": "",
"historic-gallows|@category_tourism": "",
"historic-memorial|@category_tourism": "",
"historic-memorial-cross": "",
"historic-memorial-plaque": "",
"historic-memorial-sculpture|@category_tourism": "",
"historic-memorial-statue|@category_tourism": "",
"historic-memorial-stolperstein": "",
"historic-memorial-war_memorial|@category_tourism": "",
"historic-monument|@category_tourism": "",
"historic-pillory|@category_tourism": "",
"historic-cannon": "",
"historic-anchor": "",
"historic-ruins|@category_tourism": "",
"historic-mine": "",
"historic-ship|@category_tourism": "",
"historic-wreck": "",
"historic-locomotive|@category_tourism": "",
"historic-tank|@category_tourism": "",
"historic-aircraft|@category_tourism": "",
"historic-tomb|@category_tourism": "",
"man_made-cross": "",
"historic-wayside_cross": "",
"historic-wayside_shrine": "",
"leisure-dog_park": "",
"leisure-dance|@category_entertainment": "",
"leisure-garden": "",
"leisure-firepit": "",
"amenity-bench|amenity-bench-backless": "",
"amenity-boat_rental": "",
"amenity-bicycle_rental": "",
"amenity-bicycle_repair_station": "",
"amenity-car_sharing": "",
"amenity-car_rental": "",
"amenity-motorcycle_rental": "",
"amenity-cinema|@category_entertainment": "",
"leisure-bowling_alley|@category_entertainment": "",
"amenity-theatre|@category_entertainment": "",
"amenity-nightclub|@category_entertainment|@category_nightlife": "",
"amenity-brothel": "",
"amenity-love_hotel": "",
"@gambling": "",
"amenity-gambling|@gambling": "",
"amenity-casino|@category_entertainment|@category_nightlife|@gambling": "",
"leisure-adult_gaming_centre|@gambling": "",
"leisure-amusement_arcade|@category_entertainment": "",
"amenity-college": "",
"amenity-fire_station": "",
"amenity-fountain": "",
"amenity-grave_yard|landuse-cemetery": "",
"shop-funeral_directors": "",
"@category_hospital": "",
"amenity-hospital|@category_hospital": "",
"amenity-clinic|@category_hospital": "",
"amenity-doctors|@category_hospital": "",
"amenity-dentist": "",
"healthcare-laboratory": "",
"healthcare-physiotherapist": "",
"healthcare-alternative": "",
"healthcare-audiologist": "",
"healthcare-blood_donation": "",
"healthcare-optometrist": "",
"healthcare-podiatrist": "",
"healthcare-psychotherapist": "",
"healthcare-sample_collection": "",
"healthcare-speech_therapist": "",
"amenity-hunting_stand": "",
"amenity-kindergarten": "",
"amenity-library": "",
"amenity-parking|amenity-parking_entrance|@category_parking": "",
"@category_pharmacy": "",
"amenity-pharmacy|@category_pharmacy": "",
"@category_post": "",
"amenity-post_box|@category_post": "",
"amenity-post_office|post_office-post_partner|@category_post": "",
"amenity-vehicle_inspection": "",
"amenity-waste_disposal": "",
"amenity-recycling-centre|@category_recycling": "",
"amenity-recycling-container|amenity-recycling|@category_recycling": "",
"recycling-batteries|@category_recycling": "",
"recycling-clothes|@category_recycling": "",
"recycling-glass_bottles|@category_recycling": "",
"recycling-paper|@category_recycling": "",
"recycling-plastic|@category_recycling": "",
"recycling-plastic_bottles|@category_recycling": "",
"recycling-scrap_metal|@category_recycling": "",
"recycling-small_appliances|@category_recycling": "",
"recycling-cardboard|@category_recycling": "",
"recycling-cans|@category_recycling": "",
"recycling-shoes|@category_recycling": "",
"recycling-green_waste|@category_recycling": "",
"recycling-cartons|@category_recycling": "",
"amenity-sanitary_dump_station|@category_rv": "",
"amenity-school": "",
"amenity-shelter": "",
"amenity-shelter-basic_hut": "",
"amenity-shelter-lean_to": "",
"amenity-stripclub": "",
"amenity-telephone": "",
"@category_toilet": "",
"amenity-toilets|toilets-yes|@category_toilet": "",
"amenity-university": "",
"place-continent": "",
"place-country": "",
"place-city": "",
"place-town": "",
"place-city-capital": "",
"place-county": "",
"place-state": "",
"place-region": "",
"place-island|place-islet": "",
"place-suburb|place-quarter|place-neighbourhood|landuse-residential": "",
"place-hamlet": "",
"place-village": "",
"place-locality": "",
"place-farm": "",
"highway-raceway": "",
"highway-path|highway-footway|highway-steps|highway-cycleway": "",
"highway-pedestrian|highway-primary|highway-primary_link|highway-residential|highway-secondary|highway-secondary_link|highway-tertiary|highway-tertiary_link|highway-service|highway-road|highway-track|highway-trunk|highway-trunk_link|highway-living_street|highway-unclassified|highway-motorway_link|highway-motorway|highway-cycleway": "",
"highway-motorway_junction": "",
"highway-elevator": "",
"@mountain": "",
"natural-peak|@mountain": "",
"natural-saddle|mountain_pass": "",
"natural-strait": "",
"landuse-forest": "",
"leisure-park": "",
"tourism-aquarium|@category_tourism": "",
"tourism-hostel|@category_hotel": "",
"tourism-hotel|@category_hotel": "",
"tourism-guest_house|@category_hotel": "",
"tourism-motel|@category_hotel": "",
"tourism-alpine_hut|@category_hotel": "",
"shop-hairdresser": "",
"aeroway-aerodrome": "",
"leisure-stadium": "",
"leisure-playground|@category_children": "",
"leisure-sports_centre|leisure-sports_centre-sport-american_football|leisure-sports_centre-sport-archery|leisure-sports_centre-sport-athletics|leisure-sports_centre-sport-australian_football|leisure-sports_centre-sport-badminton|leisure-sports_centre-sport-baseball|leisure-sports_centre-sport-basketball|leisure-sports_centre-sport-beachvolleyball|leisure-sports_centre-sport-bowls|leisure-sports_centre-sport-climbing|leisure-sports_centre-sport-cricket|leisure-sports_centre-sport-curling|leisure-sports_centre-sport-equestrian|leisure-sports_centre-sport-field_hockey|leisure-sports_centre-sport-futsal|leisure-sports_centre-sport-golf|leisure-sports_centre-sport-gymnastics|leisure-sports_centre-sport-handball|leisure-sports_centre-sport-ice_hockey|leisure-sports_centre-sport-multi|leisure-sports_centre-sport-padel|leisure-sports_centre-sport-pelota|leisure-sports_centre-sport-scuba_diving|leisure-sports_centre-sport-shooting|leisure-sports_centre-sport-skateboard|leisure-sports_centre-sport-skiing|leisure-sports_centre-sport-soccer|leisure-sports_centre-sport-table_tennis|leisure-sports_centre-sport-tennis|leisure-sports_centre-sport-volleyball|leisure-sports_centre-sport-yoga": "",
"leisure-sports_centre-sport-swimming": "",
"leisure-golf_course": "",
"leisure-miniature_golf": "",
"leisure-escape_game": "",
"leisure-hackerspace": "",
"leisure-pitch": "",
"leisure-swimming_pool": "",
"leisure-swimming_pool-private": "",
"sport-american_football": "",
"sport-archery": "",
"sport-athletics": "",
"sport-australian_football": "",
"sport-baseball": "",
"sport-basketball": "",
"sport-beachvolleyball": "",
"sport-bowls": "",
"sport-chess": "",
"sport-cricket": "",
"sport-curling": "",
"sport-equestrian": "",
"sport-golf": "",
"sport-gymnastics": "",
"sport-handball": "",
"sport-scuba_diving": "",
"sport-shooting": "",
"sport-skateboard": "",
"sport-skiing": "",
"sport-soccer": "",
"sport-swimming": "",
"sport-table_tennis": "",
"sport-tennis": "",
"sport-padel": "",
"sport-volleyball": "",
"sport-9pin": "",
"sport-10pin": "",
"building": "",
"building-address": "",
"@category_police": "",
"amenity-police|@category_police": "",
"office-diplomatic": "",
"natural-bay": "",
"@category_water": "",
"amenity-drinking_water|drinking_water-yes|@category_water": "",
"natural-hot_spring|@category_water": "",
"natural-spring|@category_water": "",
"man_made-water_well|@category_water": "",
"amenity-water_point|@category_water|@category_rv": "",
"man_made-water_tap|@category_water": "",
"@waterbody": "",
"natural-water|@waterbody": "",
"natural-water-basin|landuse-basin|@waterbody": "",
"natural-water-pond|@waterbody": "",
"natural-water-lake|@waterbody": "",
"natural-water-reservoir|landuse-reservoir|@waterbody": "",
"waterway-river|waterway-stream|natural-water-river": "",
"waterway-canal": "",
"shop-car_repair": "",
"tourism-camp_site|@category_hotel": "",
"tourism-caravan_site|@category_rv||@category_hotel": "",
"office": "",
"office-company": "",
"office-government": "",
"office-lawyer": "",
"office-telecommunication": "",
"craft-beekeeper": "",
"craft-blacksmith": "",
"craft-brewery": "",
"craft-caterer": "",
"craft-carpenter": "",
"craft-confectionery": "",
"craft-electrician": "",
"craft-electronics_repair": "",
"craft-gardener": "",
"craft-grinding_mill": "",
"craft-handicraft": "",
"craft-hvac": "",
"craft-metal_construction": "",
"craft-key_cutter": "",
"craft-locksmith": "",
"craft-painter": "",
"craft-photographer": "",
"craft-plumber": "",
"craft-sawmill": "",
"craft-shoemaker": "",
"craft-winery": "",
"craft-tailor": "",
"area:highway-footway|area:highway-pedestrian|area:highway-steps|place-square": "",
"place-sea": "",
"place-ocean": "",
"@category_wifi": "",
"internet_access|internet_access-wlan|@category_wifi": "",
"natural-beach|natural-beach-sand|natural-beach-gravel|leisure-beach_resort": "",
"man_made-lighthouse": "",
"man_made-survey_point": "",
"man_made-flagpole": "",
"man_made-mast": "",
"man_made-communications_tower|man_made-tower-communication": "",
"man_made-petroleum_well": "",
"organic-only|organic-yes": "",
"shop-copyshop": "",
"shop-photo|@shop": "",
"shop-camera|@shop": "",
"shop-travel_agency": "",
"shop-outdoor|@shop": "",
"shop-dry_cleaning": "",
"shop-tyres|@shop": "",
"amenity-car_wash": "",
"man_made-telescope|man_made-telescope-optical|man_made-telescope-radio|man_made-telescope-gamma": "",
"man_made-observatory": "",
"amenity-veterinary": "",
"amenity-animal_shelter": "",
"@charging_station": "",
"amenity-charging_station|@charging_station": "",
"amenity-charging_station-bicycle|@charging_station": "",
"amenity-charging_station-motorcar|amenity-charging_station-motorcar-small|@charging_station": "",
"amenity-childcare": "",
"amenity-bicycle_parking": "",
"amenity-waste_basket": "",
"emergency-phone": "",
"leisure-fitness_centre": "",
"leisure-sauna": "",
"shop-car_repair-tyres|shop-car_repair": "",
"shop-chemist|@shop": "",
"shop-pet|@shop": "",
"tourism-zoo|@category_tourism|@category_children": "",
"attraction-animal": "",
"tourism-information-office|amenity-ranger_station|@category_tourism": "",
"tourism-information-visitor_centre|amenity-ranger_station|@category_tourism": "",
"amenity-community_centre": "",
"amenity-compressed_air": "",
"amenity-courthouse": "",
"amenity-vending_machine": "",
"amenity-vending_machine-cigarettes": "",
"amenity-vending_machine-coffee": "",
"amenity-vending_machine-condoms": "",
"amenity-vending_machine-drinks": "",
"amenity-vending_machine-food|@category_food": "",
"amenity-vending_machine-parking_tickets|@category_parking": "",
"amenity-vending_machine-public_transport_tickets|@category_transport": "",
"amenity-vending_machine-newspapers": "",
"amenity-vending_machine-sweets": "",
"amenity-vending_machine-excrement_bags": "",
"amenity-parcel_locker|@category_post": "",
"shop-outpost": "",
"amenity-vending_machine-fuel|@category_fuel": "",
"building-garage": "",
"highway-rest_area|highway-services": "",
"man_made-chimney": "",
"man_made-crane": "",
"man_made-tower|man_made-flare": "",
"shop-bookmaker|@gambling": "",
"shop-seafood|@category_food|@shop": "",
"shop-second_hand|@category_shopping|@shop|@category_secondhand": "",
"shop-charity|@shop|@category_secondhand": "",
"shop-ticket": "",
"shop-wine|@category_food|@shop": "",
"shop-car_parts|@shop": "",
"tourism-chalet|@category_hotel": "",
"tourism-information-board": "",
"tourism-information-map": "",
"tourism-information-tactile_map": "",
"tourism-information-guidepost": "",
"aerialway-station": "",
"aeroway-helipad": "",
"barrier-border_control": "",
"leisure-water_park|@category_tourism|@category_children": "",
"man_made-water_tower": "",
"man_made-windmill": "",
"natural-cave_entrance": "",
"natural-volcano|@mountain": "",
"office-estate_agent": "",
"waterway-lock_gate": "",
"amenity-public_bookcase": "",
"sport-climbing": "",
"sport-yoga": "",
"leisure-fitness_centre-sport-yoga": "",
"tourism-apartment|@category_hotel": "",
"leisure-resort|@category_hotel": "",
"amenity-biergarten|@category_eat|@category_nightlife": "",
"amenity-driving_school": "",
"amenity-sailing_school": "",
"amenity-flight_school": "",
"amenity-prep_school": "",
"amenity-music_school": "",
"amenity-language_school": "",
"amenity-ice_cream": "",
"amenity-internet_cafe": "",
"amenity-motorcycle_parking": "",
"amenity-parking_space-disabled|@category_parking": "",
"amenity-car_pooling|@category_parking": "",
"amenity-nursing_home": "",
"amenity-payment_terminal": "",
"amenity-payment_centre": "",
"amenity-public_bath": "",
"amenity-shower": "",
"emergency-access_point": "",
"emergency-assembly_point": "",
"emergency-life_ring": "",
"emergency-defibrillator": "",
"emergency-fire_hydrant": "",
"amenity-hydrant": "",
"emergency-lifeguard": "",
"emergency-mountain_rescue": "",
"leisure-fitness_station": "",
"office-insurance": "",
"office-ngo": "",
"shop-erotic|@shop": "",
"shop-beauty-day_spa": "",
"shop-massage": "",
"shop-motorcycle|@shop": "",
"shop-motorcycle_repair": "",
"shop-newsagent": "",
"shop-pawnbroker": "",
"shop-stationery|@shop": "",
"shop-tattoo": "",
"shop-variety_store|@category_shopping|@shop": "",
"shop-video|@shop": "",
"shop-video_games|@shop": "",
"tourism-wilderness_hut|@category_hotel": "",
"tourism-gallery|@category_tourism": "",
"tourism-theme_park|@category_tourism|@category_children": "",
"boundary-national_park|@category_tourism": "",
"leisure-nature_reserve|@category_tourism": "",
"natural-cape": "",
"natural-geyser": "",
"natural-glacier|@category_tourism": "",
"highway-ford": "",
"leisure-marina": "",
"leisure-indoor_play": "",
"piste:type-downhill|piste:type-nordic": "",
"amenity-events_venue": "",
"shop-chocolate|@category_food|@shop": "",
"shop-coffee|@category_food|@shop": "",
"shop-fabric|@shop": "",
"shop-money_lender": "",
"shop-music|@shop": "",
"shop-musical_instrument|@shop": "",
"shop-tea|@shop": "",
"shop-telecommunication|@shop": "",
"shop-antiques|@category_shopping|@shop|@category_secondhand": "",
"shop-art|@category_shopping|@shop": "",
"shop-baby_goods|@category_children|@shop": "",
"shop-bag|@category_shopping|@shop": "",
"shop-cheese|@category_food|@shop": "",
"shop-dairy|@category_food|@shop": "",
"shop-electrical|@shop": "",
"shop-fishing|@shop": "",
"shop-interior_decoration|@shop": "",
"shop-lighting|@shop": "",
"shop-lottery|@gambling": "",
"shop-medical_supply|@shop": "",
"shop-nutrition_supplements|@shop": "",
"shop-paint|@shop": "",
"shop-perfumery|@category_shopping|@shop": "",
"shop-sewing|@shop": "",
"shop-storage_rental": "",
"shop-tobacco|@shop": "",
"shop-trade|@shop": "",
"shop-watches|@category_shopping|@shop": "",
"shop-wholesale|@shop": "",
"leisure-track": "",
"leisure-bandstand": "",
"power-plant": "",
"power-generator-wind": "",
"shop-auction|@category_secondhand": "",
"shop-collector|@category_shopping|@category_secondhand": "",
"man_made-cairn": "",
"wheelchair-yes": "",
"amenity-social_facility": "",
"social_facility-soup_kitchen": "",
"social_facility-food_bank": "",
"amenity-food_sharing": "",
"amenity-give_box": "",
"leisure-sports_hall": "",
"amenity-arts_centre|@category_tourism": "",
"amenity-prison": "",
"amenity-exhibition_centre": "",
"shop-bathroom_furnishing|@shop": "",
"shop-bed|@shop": "",
"shop-boutique|@shop": "",
"amenity-food_court": "",
"shop-curtain|@shop": "",
"shop-gas|@shop": "",
"shop-pet_grooming": "",
"shop-hifi|@shop": "",
"amenity-conference_centre": "",
"shop-herbalist|@shop": "",
"shop-appliance|@shop": "",
"shop-agrarian|@shop": "",
"shop-fashion_accessories|@shop": "",
"amenity-waste_transfer_station": "",
"shop-carpet|@shop": "",
"shop-craft|@shop": "",
"shop-pasta|@shop": "",
"attraction-amusement_ride|attraction-carousel|attraction-roller_coaster|attraction-maze|attraction-historic|attraction-big_wheel|attraction-bumper_car|@category_children": "",
"amenity-luggage_locker": "",
"office-security": "",
"building-guardhouse": ""
}

View File

@@ -57,6 +57,8 @@ TagMapping const kMotorCarTagMapping = {
{OsmElement::Tag("motorcar", "private"), RoadAccess::Type::Private}, {OsmElement::Tag("motorcar", "private"), RoadAccess::Type::Private},
{OsmElement::Tag("motorcar", "destination"), RoadAccess::Type::Destination}, {OsmElement::Tag("motorcar", "destination"), RoadAccess::Type::Destination},
{OsmElement::Tag("motorcar", "permit"), RoadAccess::Type::Permit}, {OsmElement::Tag("motorcar", "permit"), RoadAccess::Type::Permit},
{OsmElement::Tag("service", "parking_aisle"), RoadAccess::Type::Destination},
{OsmElement::Tag("amenity", "parking_entrance"), RoadAccess::Type::Destination},
}; };
TagMapping const kMotorVehicleTagMapping = { TagMapping const kMotorVehicleTagMapping = {
@@ -134,8 +136,6 @@ TagMapping const kDefaultTagMapping = {
{OsmElement::Tag("access", "agricultural"), RoadAccess::Type::Private}, {OsmElement::Tag("access", "agricultural"), RoadAccess::Type::Private},
{OsmElement::Tag("access", "forestry"), RoadAccess::Type::Private}, {OsmElement::Tag("access", "forestry"), RoadAccess::Type::Private},
{OsmElement::Tag("locked", "yes"), RoadAccess::Type::Locked}, {OsmElement::Tag("locked", "yes"), RoadAccess::Type::Locked},
{OsmElement::Tag("service", "parking_aisle"), RoadAccess::Type::Private},
{OsmElement::Tag("amenity", "parking_entrance"), RoadAccess::Type::Private},
}; };
// Removed secondary, tertiary from car list. Example https://www.openstreetmap.org/node/8169922700 // Removed secondary, tertiary from car list. Example https://www.openstreetmap.org/node/8169922700

View File

@@ -41,14 +41,13 @@ final class ThemeManager: NSObject {
} }
}(actualTheme) }(actualTheme)
let isCarPlayActive = CarPlayService.shared.isCarplayActivated if Settings.mapAppearance == .light {
if !isCarPlayActive, Settings.mapAppearance == .light {
if actualTheme == .vehicleDay || actualTheme == .vehicleNight { if actualTheme == .vehicleDay || actualTheme == .vehicleNight {
FrameworkHelper.setTheme(.vehicleDay) FrameworkHelper.setTheme(.vehicleDay)
} else { } else {
FrameworkHelper.setTheme(.day) FrameworkHelper.setTheme(.day)
} }
} else if !isCarPlayActive, Settings.mapAppearance == .dark { } else if Settings.mapAppearance == .dark {
if actualTheme == .vehicleDay || actualTheme == .vehicleNight { if actualTheme == .vehicleDay || actualTheme == .vehicleNight {
FrameworkHelper.setTheme(.vehicleNight) FrameworkHelper.setTheme(.vehicleNight)
} else { } else {

View File

@@ -5120,7 +5120,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 11.0; MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 2025.06.01; MARKETING_VERSION = 2026.01.01;
OTHER_SWIFT_FLAGS = "$(inherited)"; OTHER_SWIFT_FLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = app.comaps.debug; PRODUCT_BUNDLE_IDENTIFIER = app.comaps.debug;
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@@ -5155,7 +5155,7 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 11.0; MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 2025.06.01; MARKETING_VERSION = 2026.01.01;
OTHER_SWIFT_FLAGS = "$(inherited)"; OTHER_SWIFT_FLAGS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = app.comaps; PRODUCT_BUNDLE_IDENTIFIER = app.comaps;
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@@ -5213,7 +5213,7 @@
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 11.0; MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 2025.06.01; MARKETING_VERSION = 2026.01.01;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
PRODUCT_BUNDLE_IDENTIFIER = app.comaps.debug.widgetextension; PRODUCT_BUNDLE_IDENTIFIER = app.comaps.debug.widgetextension;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
@@ -5243,7 +5243,7 @@
"@executable_path/../../Frameworks", "@executable_path/../../Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 11.0; MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = 2025.06.01; MARKETING_VERSION = 2026.01.01;
PRODUCT_BUNDLE_IDENTIFIER = app.comaps.widgetextension; PRODUCT_BUNDLE_IDENTIFIER = app.comaps.widgetextension;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";

View File

@@ -186,7 +186,7 @@ import AVFoundation
return mapAppearance return mapAppearance
} }
return .light return .auto
} }
set { set {
UserDefaults.standard.set(newValue.rawValue, forKey: userDefaultsKeyMapAppearance) UserDefaults.standard.set(newValue.rawValue, forKey: userDefaultsKeyMapAppearance)

View File

@@ -458,7 +458,7 @@ private:
positionsAccessConditional.clear(); positionsAccessConditional.clear();
auto openingHoursDeserializer = GetOpeningHoursSerDesForRouting(); auto openingHoursDeserializer = GetOpeningHoursSerDesForRouting();
auto const size = ReadPrimitiveFromSource<size_t>(src); auto const size = ReadPrimitiveFromSource<uint64_t>(src);
positionsAccessConditional.reserve(size); positionsAccessConditional.reserve(size);
uint32_t prevFeatureId = 0; uint32_t prevFeatureId = 0;