Compare commits

..

37 Commits

Author SHA1 Message Date
x7z4w
79c128a006 [routing] Fix crash
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2026-01-16 13:43:05 +00:00
x7z4w
0c1b61bc12 Update .git-blame-ignore-revs
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2026-01-16 13:43:00 +00:00
x7z4w
c2367e2da1 [core] Implicit m2::Point hash
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2026-01-16 12:35:56 +00:00
x7z4w
1e302ac804 [generator] Implement hash for OsmElement::Tag
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2026-01-16 12:35:56 +00:00
x7z4w
f6d0132513 [core] Replace SmallMap
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2026-01-16 12:35:56 +00:00
x7z4w
b4e9bbb8d2 [core] Switch to ankerl::unordered_dense
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2026-01-16 12:35:53 +00:00
x7z4w
046fe903d1 [drape] nits
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2026-01-16 12:20:16 +00:00
zyphlar
59bfa64c0f Add poly/bin border editing instructions
Signed-off-by: zyphlar <zyphlar@gmail.com>
2026-01-16 13:10:37 +01:00
Jean-Baptiste
cbc6e23522 [search] Improve french synonyms
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-16 11:44:40 +01:00
x7z4w
d2384ebd8a [indexer] Fix build errors
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2026-01-16 11:37:27 +01:00
x7z4w
7ad09956fb [search] Add Spanish synonyms
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2026-01-15 21:11:11 +01:00
Jean-Baptiste
1238ae3ef5 [android] Use dark background in the editor
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-15 19:56:35 +01:00
Yannik Bloscheck
41919f61a4 [types] Switched to using a constant for the filename
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2026-01-15 19:27:42 +01:00
Yannik Bloscheck
6b0c505bdb [types] Fix opening of subtypes file for Android
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2026-01-15 19:27:42 +01:00
Yannik Bloscheck
fd11533a60 [types] Adding subtypes file to Qt
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2026-01-15 19:27:42 +01:00
x7z4w
66582ba249 [search] Add German synonym
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2026-01-15 19:19:56 +01:00
Jean-Baptiste
62a55abeec [android] Use default background color on bottomsheet
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-15 14:39:18 +01:00
Radek Olsak
393a26e82b [cmake] Fixed issue when lto enabled
Changed the original LTO setup hack using add_compile_options
into cmake way of adding LTO.

This issue made it impossible to compile flatpaks.

Signed-off-by: Radek Olsak <radek@olsak.net>
2026-01-15 12:30:03 +01:00
Yannik Bloscheck
1d10e25761 Adding general support for subtypes (and switching charging stations to using it)
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2026-01-14 23:47:33 +01:00
x7z4w
64e13fde0f [search] nits
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2026-01-14 17:14:23 +00:00
Yannik Bloscheck
6fe4b6e5d0 [types] Add emergency access address for some special use mainly in a Spanish region
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2026-01-14 11:09:59 +01:00
Chris H. Meyer
723ee5b2b6 [desktop] show scale in designer
Signed-off-by: Chris H. Meyer <christian.h.meyer@t-online.de>
2026-01-13 22:14:12 +01:00
ldcuof
2f462456e2 [routing] Fix track is unpaved when in OSM Data it is paved
Signed-off-by: ldcuof <ldcuof@noreply.codeberg.org>
2026-01-13 19:37:38 +01:00
Yannik Bloscheck
d67803fc61 [styles] Show emergency assembly points one zoom level later
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2026-01-13 17:57:31 +01:00
Yannik Bloscheck
ad0f7176d0 [styles] Simplifying defibrillator icon
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2026-01-13 17:55:29 +01:00
Yannik Bloscheck
b28690701c [types] Add emergency disaster help points
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2026-01-13 17:55:15 +01:00
Chris H. Meyer
d6c93f5206 [desktop] Fix designer
Signed-off-by: Chris H. Meyer <christian.h.meyer@t-online.de>
Co-authored-by: Yannik Bloscheck <git@yannikbloscheck.com>
Co-authored-by: Chris H. Meyer <christian.h.meyer@t-online.de>
Co-committed-by: Chris H. Meyer <christian.h.meyer@t-online.de>
2026-01-13 17:51:45 +01:00
x7z4w
239282ec48 [search] Add synonyms
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2026-01-13 17:50:49 +01:00
Yannik Bloscheck
2d2e6eeb69 [styles] Blue public transport label color for subways etc. without custom icon
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2026-01-13 17:39:44 +01:00
Jean-Baptiste
3880c3ec29 [android] Improve color of text in how to edit oph
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-13 17:38:39 +01:00
map-per
0d758c51b0 [editor] Add alt and old name to language selection
Signed-off-by: map-per <map-per@gmx.de>
2026-01-13 10:47:18 +01:00
map-per
5d0e919bdc [edior] Reliably hide existingLanguages
Signed-off-by: map-per <map-per@gmx.de>
2026-01-13 10:47:18 +01:00
Codeberg Translate
ca1d3fdb20 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Edgarsons <edgarsons@noreply.codeberg.org>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: N4ta <codeberg@n4ta.anonaddy.me>
Co-authored-by: NikoM <nikom@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Stephan-P <stephan-p@noreply.codeberg.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: ZeljkoBG <zeljkobg@noreply.codeberg.org>
Co-authored-by: arnyminerz <arnyminerz@noreply.codeberg.org>
Co-authored-by: cirilla <cirilla@noreply.codeberg.org>
Co-authored-by: codebergian42 <codebergian42@noreply.codeberg.org>
Co-authored-by: lazlo <lazlo@noreply.codeberg.org>
Co-authored-by: ldmpub <ldmpub@noreply.codeberg.org>
Co-authored-by: loscati <loscati@noreply.codeberg.org>
Co-authored-by: mcliquid <mcliquid@noreply.codeberg.org>
Co-authored-by: ovl-005 <ovl-005@noreply.codeberg.org>
Co-authored-by: patepelo <patepelo@noreply.codeberg.org>
Co-authored-by: rimas <rimas@noreply.codeberg.org>
Co-authored-by: sunsand <sunsand@noreply.codeberg.org>
Co-authored-by: wirabdillah <wirabdillah@noreply.codeberg.org>
Co-authored-by: x7z4w <x7z4w@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Android UI Strings (SDK)
Translation: CoMaps/Countries and regions names
Translation: CoMaps/F-Droid app description
Translation: CoMaps/Google Play and Huawei AppGallery descriptions
Translation: CoMaps/Search synonyms / aliases
Translation: CoMaps/Voice announcements for navigation (TTS)
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS Plist
Translation: CoMaps/iOS UI Strings
2026-01-12 21:15:55 +00:00
Jean-Baptiste
537776a883 [android] Reduce top margin on layer bottomsheet on tablet
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-11 19:51:41 +01:00
Jean-Baptiste
13fbe72b55 [android] Fix missing elevation on custom dialogs
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-11 19:30:01 +01:00
Jean-Baptiste
b4abd476db [android] Add support of dark mode for how to edit oh html file
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-11 17:37:03 +01:00
Jean-Baptiste
649d947eac [android] Improve colors of buttons in alert dialogs
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2026-01-11 14:41:42 +01:00
475 changed files with 7144 additions and 3356 deletions

View File

@@ -277,7 +277,7 @@ jobs:
run: |
cd /home/planet/planet/
rm -f planet-latest-new.osm.pbf
pyosmium-up-to-date planet-latest.osm.pbf -o planet-latest-new.osm.pbf -vv --size 16384
pyosmium-up-to-date planet-latest.osm.pbf -o planet-latest-new.osm.pbf -v --size 16384
mv planet-latest-new.osm.pbf planet-latest.osm.pbf
- name: Notify Zulip
run: |

View File

@@ -2,3 +2,5 @@
480fa6c2fcf53be296504ac6ba8e6b3d70f92b42
a6ede2b1466f0c9d8a443600ef337ba6b5832e58
1377b81bf1cac72bb6da192da7fed6696d5d5281
b4e9bbb8d2e24a2829defe7753590df4a937dac0
f6d01325136c4d65e20763d0e1e9b32b94571bba

7
.gitignore vendored
View File

@@ -31,10 +31,9 @@ data/types.txt*
data/visibility.txt*
data/colors.txt*
data/patterns.txt*
# TODO: designer is not used at the moment
# data/symbols/*/design/
# data/colors_design.txt
# data/patterns_design.txt
data/symbols/*/design/
data/colors_design.txt
data/patterns_design.txt
# Auto-generated from data/categories-strings/* by tools/unix/generate_categories.sh
data/categories.txt

83
3party/ankerl/stl.h Normal file
View File

@@ -0,0 +1,83 @@
///////////////////////// ankerl::unordered_dense::{map, set} /////////////////////////
// A fast & densely stored hashmap and hashset based on robin-hood backward shift deletion.
// Version 4.8.1
// https://github.com/martinus/unordered_dense
//
// Licensed under the MIT License <http://opensource.org/licenses/MIT>.
// SPDX-License-Identifier: MIT
// Copyright (c) 2022 Martin Leitner-Ankerl <martin.ankerl@gmail.com>
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
#ifndef ANKERL_STL_H
#define ANKERL_STL_H
#include <array> // for array
#include <cstdint> // for uint64_t, uint32_t, std::uint8_t, UINT64_C
#include <cstring> // for size_t, memcpy, memset
#include <functional> // for equal_to, hash
#include <initializer_list> // for initializer_list
#include <iterator> // for pair, distance
#include <limits> // for numeric_limits
#include <memory> // for allocator, allocator_traits, shared_ptr
#include <optional> // for optional
#include <stdexcept> // for out_of_range
#include <string> // for basic_string
#include <string_view> // for basic_string_view, hash
#include <tuple> // for forward_as_tuple
#include <type_traits> // for enable_if_t, declval, conditional_t, ena...
#include <utility> // for forward, exchange, pair, as_const, piece...
#include <vector> // for vector
// <memory_resource> includes <mutex>, which fails to compile if
// targeting GCC >= 13 with the (rewritten) win32 thread model, and
// targeting Windows earlier than Vista (0x600). GCC predefines
// _REENTRANT when using the 'posix' model, and doesn't when using the
// 'win32' model.
#if defined __MINGW64__ && defined __GNUC__ && __GNUC__ >= 13 && !defined _REENTRANT
// _WIN32_WINNT is guaranteed to be defined here because of the
// <cstdint> inclusion above.
# ifndef _WIN32_WINNT
# error "_WIN32_WINNT not defined"
# endif
# if _WIN32_WINNT < 0x600
# define ANKERL_MEMORY_RESOURCE_IS_BAD() 1 // NOLINT(cppcoreguidelines-macro-usage)
# endif
#endif
#ifndef ANKERL_MEMORY_RESOURCE_IS_BAD
# define ANKERL_MEMORY_RESOURCE_IS_BAD() 0 // NOLINT(cppcoreguidelines-macro-usage)
#endif
#if defined(__has_include) && !defined(ANKERL_UNORDERED_DENSE_DISABLE_PMR)
# if __has_include(<memory_resource>) && !ANKERL_MEMORY_RESOURCE_IS_BAD()
# define ANKERL_UNORDERED_DENSE_PMR std::pmr // NOLINT(cppcoreguidelines-macro-usage)
# include <memory_resource> // for polymorphic_allocator
# elif __has_include(<experimental/memory_resource>)
# define ANKERL_UNORDERED_DENSE_PMR std::experimental::pmr // NOLINT(cppcoreguidelines-macro-usage)
# include <experimental/memory_resource> // for polymorphic_allocator
# endif
#endif
#if defined(_MSC_VER) && defined(_M_X64)
# include <intrin.h>
# pragma intrinsic(_umul128)
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -104,7 +104,8 @@ if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
elseif (${CMAKE_BUILD_TYPE} MATCHES "Rel")
add_definitions(-DRELEASE)
if (NOT MSVC)
add_compile_options(-O3 $<$<CXX_COMPILER_ID:GNU>:-flto=auto>)
add_compile_options(-O3)
set (CMAKE_INTERPROCEDURAL_OPTIMIZATION True)
endif()
else()
message(FATAL_ERROR "Unknown build type: " ${CMAKE_BUILD_TYPE})

View File

@@ -0,0 +1 @@
CoMaps- Navigasi Offline dengan Privasi

View File

@@ -1,36 +1,36 @@
Besplatna aplikacija otvorenog koda koju vodi zajednica i temelji se na podacima OpenStreetMap-a, usmjerana transparentnosti, privatnosti i neprofitnosti.
Besplatna aplikacija za karte otvorenog koda koju vodi zajednica, a temelji se na podacima OpenStreetMapa, a pojačana je predanošću transparentnosti, privatnosti i neprofitnosti.
Pridružite se otvorenoj zajednici i pomozite izraditi najbolju aplikaciju za karte
• Koristite aplikaciju i proširite glas o njoj
Pridružite se zajednici i pomozite u izradi najbolje aplikacije za karte
• Koristite aplikaciju i širite vijest o njoj
• Dajte povratne informacije i prijavite probleme
• Ažurirajte podatke na karti u aplikaciji ili na web stranici OpenStreetMap-a
• Ažurirajte podatke karte u aplikaciji ili na web stranici OpenStreetMap
<i>Vaše povratne informacije i recenzije s 5 zvjezdica najbolja su nam podrška!</i>
‣ <b>Jednostavna i dotjerana</b>: aplikacija je trivijalna za korištenje i jednostavno radi.
‣ <b>Fokusirana na Offline rad</b>: Planirajte i upravljajte svojim putovanjem u inozemstvo bez potrebe za mobilnom uslugom, tražite putne točke dok ste na udaljenom pješačenju itd. Sve funkcije aplikacije dizajnirane su za offline rad.
‣ <b>Poštivanje privatnosti</b>: Aplikacija je dizajnirana imajući na umu privatnost - ne identificira ljude, ne prati i ne prikuplja osobne podatke. Bez reklama.
‣ <b>Štedi vašu bateriju i prostor</b>: Ne troši bateriju kao druge navigacijske aplikacije. Kompaktne karte štede dragocjeni prostor na vašem telefonu.
‣ <b>Otvorena i izrađena od strane zajednice</b>: Ljudi poput vas pomogli su izraditi aplikaciju dodavanjem lokacija na OpenStreetMap-u, testiranjem i davanjem povratnih informacija o aplikaciji te doprinoseći svojim razvojnim vještinama i novcem.
‣ <b>Otvoreno i transparentno donošenje odluka i korištenja financija, Neprofitna i potpuno Otvorenog koda.</b>
‣ <b>Jednostavno i dotjerano</b>: bitne značajke koje su jednostavne za korištenje i jednostavno rade.
‣ <b>Usmjereno na rad izvan mreže</b>: Planirajte i upravljajte svojim putovanjem u inozemstvo bez potrebe za mobilnom mrežom, pretražujte točke puta tijekom udaljenog planinarenja itd. Sve funkcije aplikacije dizajnirane su za rad izvan mreže.
‣ <b>Poštivanje privatnosti</b>: Aplikacija je dizajnirana imajući na umu privatnost - ne identificira ljude, ne prati i ne prikuplja osobne podatke. Bez oglasa.
‣ <b>Štedi bateriju i prostor</b>: Ne prazni bateriju kao druge navigacijske aplikacije. Kompaktne karte štede dragocjeni prostor na vašem telefonu.
‣ <b>Besplatno i izrađeno od strane zajednice</b>: Ljudi poput vas pomogli su u izgradnji aplikacije dodavanjem mjesta u OpenStreetMap, testiranjem i davanjem povratnih informacija o značajkama te doprinosom svojim razvojnim vještinama i novcem.
‣ <b>Otvoreno i transparentno donošenje odluka i financije, neprofitno i potpuno otvorenog koda.</b>
<b>Glavne značajke</b>:
Preuzimanje detaljnih karti s lokacijama koje nisu dostupne s Google kartama
Karte za izlete s istaknutim pješačkim stazama, kampovima, izvorima vode, planinskim vrhovima, konturnim linijama itd.
Detaljne karte za preuzimanje s mjestima koja nisu dostupna na Google kartama
Vanjski način rada s označenim planinarskim stazama, kampovima, izvorima vode, vrhovima, konturnim linijama itd.
• Pješačke i biciklističke staze
Točke interesa kao što su restorani, benzinske crpke, hoteli, trgovine, vidikovci i još mnogo toga
• Pretražujte po nazivu ili adresi ili po kategoriji interesa
• Navigacija s glasovnim najavama za hodanje, vožnju biciklom ili automobilom
• Obilježite svoja omiljena mjesta jednim dodirom
Offline članci Wikipedije
Tranzitni sloj podzemne željeznice sa navigacijom
• Snimanje GPS tragova
• Izvoz i uvoz oznaka i staza u KML, KMZ, i GPX formatima
Znamenitosti poput restorana, benzinskih postaja, hotela, trgovina, znamenitosti i mnogih drugih
• Pretraživanje po imenu ili adresi ili po kategoriji znamenitosti
• Navigacija s glasovnim najavama za hodanje, vožnju biciklom ili vožnju
• Označavanje omiljenih mjesta jednim dodirom
Članci na Wikipediji izvan mreže
Sloj i upute za podzemnu željeznicu
• Snimanje tragova
• Izvoz i uvoz oznaka i tragova u KML, KMZ, GPX formatima
• Tamni način rada za korištenje tijekom noći
• Poboljšajte kartu za sve korisnike, koristeći osnovni ugrađeni uređivač karte
• Android Auto podrška
• Poboljšajte podatke karte za sve pomoću osnovnog ugrađenog uređivača
Podrška za Android Auto
Prijavite probleme s aplikacijom, predložite ideje i pridružite se našoj zajednici na web stranici <b><i>comaps.app</i></b>.
<b>Sloboda je ovdje</b>
Otkrijte svoje putovanje, navigirajte svijetom s privatnošću i zajednicom na prvom mjestu!
Otkrijte svoje putovanje, snađite se u svijetu s privatnošću i zajednicom u prvom planu!

View File

@@ -28,7 +28,6 @@ import com.github.mikephil.charting.formatter.IAxisValueFormatter;
import com.github.mikephil.charting.highlight.Highlight;
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
import com.google.android.material.textview.MaterialTextView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

View File

@@ -18,7 +18,6 @@ import android.location.Location;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.CallSuper;
@@ -26,13 +25,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.core.view.ViewCompat;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.checkbox.MaterialCheckBox;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.progressindicator.LinearProgressIndicator;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.base.BaseMwmFragmentActivity;
import app.organicmaps.dialog.CustomMapServerDialog;
import app.organicmaps.downloader.MapManagerHelper;
@@ -47,7 +39,11 @@ import app.organicmaps.sdk.util.StringUtils;
import app.organicmaps.util.UiUtils;
import app.organicmaps.util.Utils;
import app.organicmaps.util.WindowInsetUtils.PaddingInsetsListener;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.checkbox.MaterialCheckBox;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.progressindicator.LinearProgressIndicator;
import com.google.android.material.textview.MaterialTextView;
import java.util.List;
import java.util.Objects;
@@ -259,7 +255,7 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
mProgress.setMax(bytes);
// Start progress at 1% according to M3 guidelines
mProgress.setProgressCompat(bytes/100, true);
mProgress.setProgressCompat(bytes / 100, true);
}
else
finishFilesDownload(bytes);
@@ -275,11 +271,8 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
mChbDownloadCountry = findViewById(R.id.chb_download_country);
mBtnAdvanced = findViewById(R.id.btn_advanced);
mBtnAdvanced.setOnClickListener(v -> {
CustomMapServerDialog.show(this, url -> {
prepareFilesDownload(false);
});
});
mBtnAdvanced.setOnClickListener(
v -> { CustomMapServerDialog.show(this, url -> { prepareFilesDownload(false); }); });
mBtnAdvanced.setEnabled(true);
mBtnListeners = new View.OnClickListener[BTN_COUNT];
@@ -394,7 +387,7 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
mTvMessage.setText(getString(R.string.downloading_country_can_proceed, item.name, fileSizeString));
mProgress.setMax((int) item.totalSize);
// Start progress at 1% according to M3 guidelines
mProgress.setProgressCompat((int) (item.totalSize/100), true);
mProgress.setProgressCompat((int) (item.totalSize / 100), true);
mCountryDownloadListenerSlot = MapManager.nativeSubscribe(mCountryDownloadListener);
MapManagerHelper.startDownload(mCurrentCountry);
@@ -446,21 +439,18 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
default -> throw new AssertionError("Unexpected result code = " + result);
};
mAlertDialog = new MaterialAlertDialogBuilder(this)
.setTitle(titleId)
.setMessage(messageId)
.setCancelable(true)
.setOnCancelListener((dialog) -> setAction(RESUME))
.setPositiveButton(R.string.try_again,
(dialog, which) -> {
setAction(TRY_AGAIN);
onTryAgainClicked();
})
.setNegativeButton(R.string.cancel,
(dialog, which) -> {
setAction(RESUME);
})
.setOnDismissListener(dialog -> mAlertDialog = null)
.show();
mAlertDialog = new MaterialAlertDialogBuilder(this)
.setTitle(titleId)
.setMessage(messageId)
.setCancelable(true)
.setOnCancelListener((dialog) -> setAction(RESUME))
.setPositiveButton(R.string.try_again,
(dialog, which) -> {
setAction(TRY_AGAIN);
onTryAgainClicked();
})
.setNegativeButton(R.string.cancel, (dialog, which) -> { setAction(RESUME); })
.setOnDismissListener(dialog -> mAlertDialog = null)
.show();
}
}

View File

@@ -38,8 +38,9 @@ public class OsmUploadWork extends Worker
{
final Constraints c = new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build();
OneTimeWorkRequest.Builder builder = new OneTimeWorkRequest.Builder(OsmUploadWork.class).setConstraints(c);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
builder.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
{
builder.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST);
}
final OneTimeWorkRequest wr = builder.build();
WorkManager.getInstance(context).beginUniqueWork("UploadOsmChanges", ExistingWorkPolicy.KEEP, wr).enqueue();

View File

@@ -17,7 +17,6 @@ import androidx.annotation.NonNull;
import androidx.documentfile.provider.DocumentFile;
import app.organicmaps.R;
import app.organicmaps.sdk.util.log.Logger;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;

View File

@@ -10,7 +10,6 @@ import androidx.fragment.app.DialogFragment;
public class BaseMwmDialogFragment extends DialogFragment
{
protected int getStyle()
{
return STYLE_NORMAL;

View File

@@ -282,11 +282,13 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<ConcatAdapter
{
if (isEmptySearchResults())
{
requirePlaceholder().setContent(R.string.search_not_found, R.string.search_not_found_query, R.drawable.ic_search_fail);
requirePlaceholder().setContent(R.string.search_not_found, R.string.search_not_found_query,
R.drawable.ic_search_fail);
}
else if (isEmpty())
{
requirePlaceholder().setContent(R.string.bookmarks_empty_list_title, R.string.bookmarks_empty_list_message, R.drawable.ic_bookmarks);
requirePlaceholder().setContent(R.string.bookmarks_empty_list_title, R.string.bookmarks_empty_list_message,
R.drawable.ic_bookmarks);
}
boolean isEmptyRecycler = isEmpty() || isEmptySearchResults();

View File

@@ -23,7 +23,6 @@ import app.organicmaps.util.UiUtils;
import app.organicmaps.util.Utils;
import app.organicmaps.widget.recycler.RecyclerClickListener;
import app.organicmaps.widget.recycler.RecyclerLongClickListener;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.checkbox.MaterialCheckBox;
import com.google.android.material.imageview.ShapeableImageView;
@@ -458,10 +457,12 @@ public class Holders
String formattedDesc = desc.replace("\n", "<br>");
Spanned spannedDesc = Utils.fromHtml(formattedDesc);
if (!TextUtils.isEmpty(spannedDesc)) {
if (!TextUtils.isEmpty(spannedDesc))
{
mDescText.setText(spannedDesc);
}
else {
else
{
mDescText.setText(R.string.list_description_empty);
}
}

View File

@@ -50,8 +50,8 @@ public final class IntentUtils
}
// https://developer.android.com/reference/androidx/car/app/CarContext#startCarApp(android.content.Intent)
private static void processNavigationIntent(@NonNull CarContext carContext,
@NonNull Renderer surfaceRenderer, @NonNull Intent intent)
private static void processNavigationIntent(@NonNull CarContext carContext, @NonNull Renderer surfaceRenderer,
@NonNull Intent intent)
{
// TODO (AndrewShkrob): This logic will need to be revised when we introduce support for adding stops during
// navigation or route planning. Skip navigation intents during navigation

View File

@@ -31,7 +31,7 @@ public final class RoutingHelpers
default -> Distance.UNIT_METERS;
};
return Distance.create(distance.mDistance, displayUnit);
return Distance.create(distance.mDistance, displayUnit);
}
@NonNull
@@ -52,7 +52,7 @@ public final class RoutingHelpers
default -> LaneDirection.SHAPE_UNKNOWN;
};
return LaneDirection.create(shape, isRecommended);
return LaneDirection.create(shape, isRecommended);
}
@NonNull
@@ -77,7 +77,7 @@ public final class RoutingHelpers
case EXIT_HIGHWAY_TO_LEFT -> Maneuver.TYPE_OFF_RAMP_SLIGHT_LEFT;
case EXIT_HIGHWAY_TO_RIGHT -> Maneuver.TYPE_OFF_RAMP_SLIGHT_RIGHT;
};
final Maneuver.Builder builder = new Maneuver.Builder(maneuverType);
final Maneuver.Builder builder = new Maneuver.Builder(maneuverType);
if (maneuverType == Maneuver.TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW)
builder.setRoundaboutExitNumber(roundaboutExitNum > 0 ? roundaboutExitNum : 1);
builder.setIcon(new CarIcon.Builder(createManeuverIcon(context, carDirection, roundaboutExitNum)).build());
@@ -85,7 +85,8 @@ public final class RoutingHelpers
}
@NonNull
private static IconCompat createManeuverIcon(@NonNull final CarContext context, @NonNull CarDirection carDirection, int roundaboutExitNum)
private static IconCompat createManeuverIcon(@NonNull final CarContext context, @NonNull CarDirection carDirection,
int roundaboutExitNum)
{
if (!CarDirection.isRoundAbout(carDirection) || roundaboutExitNum == 0)
{

View File

@@ -39,8 +39,7 @@ public final class UiHelpers
}
@NonNull
public static ActionStrip createMapActionStrip(@NonNull CarContext context,
@NonNull Renderer surfaceRenderer)
public static ActionStrip createMapActionStrip(@NonNull CarContext context, @NonNull Renderer surfaceRenderer)
{
final CarIcon iconPlus = new CarIcon.Builder(IconCompat.createWithResource(context, R.drawable.ic_plus)).build();
final CarIcon iconMinus = new CarIcon.Builder(IconCompat.createWithResource(context, R.drawable.ic_minus)).build();
@@ -59,15 +58,13 @@ public final class UiHelpers
}
@NonNull
public static MapController createMapController(@NonNull CarContext context,
@NonNull Renderer surfaceRenderer)
public static MapController createMapController(@NonNull CarContext context, @NonNull Renderer surfaceRenderer)
{
return new MapController.Builder().setMapActionStrip(createMapActionStrip(context, surfaceRenderer)).build();
}
@NonNull
public static Action createSettingsAction(@NonNull BaseMapScreen mapScreen,
@NonNull Renderer surfaceRenderer)
public static Action createSettingsAction(@NonNull BaseMapScreen mapScreen, @NonNull Renderer surfaceRenderer)
{
return createSettingsAction(mapScreen, surfaceRenderer, null);
}
@@ -81,8 +78,7 @@ public final class UiHelpers
}
@NonNull
private static Action createSettingsAction(@NonNull BaseMapScreen mapScreen,
@NonNull Renderer surfaceRenderer,
private static Action createSettingsAction(@NonNull BaseMapScreen mapScreen, @NonNull Renderer surfaceRenderer,
@Nullable OnScreenResultListener onScreenResultListener)
{
final CarContext context = mapScreen.getCarContext();
@@ -123,8 +119,7 @@ public final class UiHelpers
return null;
final Row.Builder builder = new Row.Builder();
builder.setImage(
new CarIcon.Builder(IconCompat.createWithResource(context, R.drawable.ic_opening_hours)).build());
builder.setImage(new CarIcon.Builder(IconCompat.createWithResource(context, R.drawable.ic_opening_hours)).build());
if (isEmptyTT)
builder.setTitle(ohStr);

View File

@@ -6,19 +6,16 @@ import android.content.SharedPreferences;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.preference.PreferenceManager;
import app.organicmaps.R;
import app.organicmaps.sdk.Framework;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;
import app.organicmaps.R;
import app.organicmaps.sdk.Framework;
public final class CustomMapServerDialog
{
public interface OnUrlAppliedListener
@@ -28,26 +25,22 @@ public final class CustomMapServerDialog
private CustomMapServerDialog() {}
public static void show(@NonNull Context context,
@Nullable OnUrlAppliedListener listener)
public static void show(@NonNull Context context, @Nullable OnUrlAppliedListener listener)
{
View dialogView = LayoutInflater.from(context)
.inflate(R.layout.dialog_custom_map_server, null);
View dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_custom_map_server, null);
TextInputLayout til = dialogView.findViewById(R.id.til_custom_map_server);
TextInputEditText edit = dialogView.findViewById(R.id.edit_custom_map_server);
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String current = prefs.getString(context.getString(R.string.pref_custom_map_download_url), "");
edit.setText(current);
MaterialAlertDialogBuilder builder =
new MaterialAlertDialogBuilder(context)
.setTitle(R.string.download_resources_custom_url_title)
.setMessage(R.string.download_resources_custom_url_message)
.setView(dialogView)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.save, null);
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(context)
.setTitle(R.string.download_resources_custom_url_title)
.setMessage(R.string.download_resources_custom_url_message)
.setView(dialogView)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.save, null);
AlertDialog dialog = builder.create();
dialog.setOnShowListener(dlg -> {
@@ -55,9 +48,7 @@ public final class CustomMapServerDialog
ok.setOnClickListener(v -> {
String url = edit.getText() != null ? edit.getText().toString().trim() : "";
if (!url.isEmpty()
&& !url.startsWith("http://")
&& !url.startsWith("https://"))
if (!url.isEmpty() && !url.startsWith("http://") && !url.startsWith("https://"))
{
til.setError(context.getString(R.string.download_resources_custom_url_error_scheme));
return;
@@ -67,9 +58,7 @@ public final class CustomMapServerDialog
String normalizedUrl = Framework.normalizeServerUrl(url);
prefs.edit()
.putString(context.getString(R.string.pref_custom_map_download_url), normalizedUrl)
.apply();
prefs.edit().putString(context.getString(R.string.pref_custom_map_download_url), normalizedUrl).apply();
// Apply to native
Framework.applyCustomMapDownloadUrl(context, normalizedUrl);

View File

@@ -125,7 +125,8 @@ public class EditTextDialogFragment extends BaseMwmDialogFragment
positiveButton.setOnClickListener(view -> {
final String result = mEtInput.getText().toString();
if (validateInput(requireActivity(), result)) {
if (validateInput(requireActivity(), result))
{
processInput(result);
editTextDialog.dismiss();
}

View File

@@ -4,7 +4,6 @@ import android.location.Location;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.Nullable;
import androidx.core.view.ViewCompat;
import app.organicmaps.MwmActivity;
@@ -49,7 +48,8 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
@Override
public void onStatusChanged(List<MapManager.StorageCallbackData> data)
{
if (mCurrentCountry == null) {
if (mCurrentCountry == null)
{
updateOfflineExplanationVisibility();
return;
}
@@ -109,10 +109,13 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
return enqueued || progress || applying;
}
private void updateOfflineExplanationVisibility() {
if (mOfflineExplanation == null) return;
private void updateOfflineExplanationVisibility()
{
if (mOfflineExplanation == null)
return;
// hide once threshold reached; safe to call repeatedly.
app.organicmaps.util.UiUtils.showIf(MapManager.nativeGetDownloadedCount() < (DEFAULT_MAP_BASELINE + HIDE_THRESHOLD), mOfflineExplanation);
app.organicmaps.util.UiUtils.showIf(MapManager.nativeGetDownloadedCount() < (DEFAULT_MAP_BASELINE + HIDE_THRESHOLD),
mOfflineExplanation);
}
private void updateProgressState(boolean shouldAutoDownload)

View File

@@ -15,7 +15,6 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.AutoCompleteTextView;
import android.widget.GridLayout;
import androidx.annotation.CallSuper;
import androidx.annotation.DrawableRes;
import androidx.annotation.IdRes;
@@ -196,8 +195,9 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
{
final Context context = mInputBuildingLevels.getContext();
final boolean isValid = Editor.nativeIsLevelValid(s.toString());
mInputBuildingLevels.setError(isValid ? null : context.getString(R.string.error_enter_correct_storey_number,
Editor.nativeGetMaxEditableBuildingLevels()));
mInputBuildingLevels.setError(isValid ? null
: context.getString(R.string.error_enter_correct_storey_number,
Editor.nativeGetMaxEditableBuildingLevels()));
}
});
@@ -396,7 +396,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
List<String> SOCKET_TYPES = Arrays.stream(getResources().getStringArray(R.array.charge_socket_types)).toList();
for (String socketType : SOCKET_TYPES)
{
ChargeSocketDescriptor socket = new ChargeSocketDescriptor(socketType,0,0);
ChargeSocketDescriptor socket = new ChargeSocketDescriptor(socketType, 0, 0);
MaterialButton btn = (MaterialButton) inflater.inflate(R.layout.button_socket_type, typeBtns, false);
@@ -404,16 +404,16 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
// load SVG icon converted into VectorDrawable in res/drawable
@SuppressLint("DiscouragedApi")
int resIconId =
getResources().getIdentifier("ic_charge_socket_" + socket.visualType(), "drawable", requireContext().getPackageName());
int resIconId = getResources().getIdentifier("ic_charge_socket_" + socket.visualType(), "drawable",
requireContext().getPackageName());
if (resIconId != 0)
{
btn.setIcon(getResources().getDrawable(resIconId));
}
@SuppressLint("DiscouragedApi")
int resTypeId =
getResources().getIdentifier("charge_socket_" + socket.visualType(), "string", requireContext().getPackageName());
int resTypeId = getResources().getIdentifier("charge_socket_" + socket.visualType(), "string",
requireContext().getPackageName());
if (resTypeId != 0)
{
btn.setText(getResources().getString(resTypeId));
@@ -461,13 +461,16 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
// Add a TextWatcher to validate on text change
countView.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
public void onTextChanged(CharSequence s, int start, int before, int count)
{}
@Override
public void afterTextChanged(Editable s) {
public void afterTextChanged(Editable s)
{
validatePositiveField(s.toString(), countInputLayout);
}
});
@@ -482,13 +485,16 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
// Add a TextWatcher to validate on text change
powerView.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
public void onTextChanged(CharSequence s, int start, int before, int count)
{}
@Override
public void afterTextChanged(Editable s) {
public void afterTextChanged(Editable s)
{
validatePositiveField(s.toString(), powerInputLayout);
}
});
@@ -496,74 +502,82 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
return new MaterialAlertDialogBuilder(requireActivity())
.setTitle(R.string.editor_socket)
.setView(dialogView)
.setPositiveButton(R.string.save,
(dialog, which) -> {
String socketType = "";
for (MaterialButton b : buttonList)
{
if (b.isChecked())
{
socketType = b.getTag(R.id.socket_type).toString();
break;
}
}
.setPositiveButton(
R.string.save,
(dialog, which) -> {
String socketType = "";
for (MaterialButton b : buttonList)
{
if (b.isChecked())
{
socketType = b.getTag(R.id.socket_type).toString();
break;
}
}
int countValue = 0; // 0 means 'unknown count'
try
{
countValue = Integer.parseInt(countView.getText().toString());
}
catch (NumberFormatException ignored)
{
Logger.w(CHARGE_SOCKETS_TAG, "Invalid count value for socket:" + countView.getText().toString());
}
int countValue = 0; // 0 means 'unknown count'
try
{
countValue = Integer.parseInt(countView.getText().toString());
}
catch (NumberFormatException ignored)
{
Logger.w(CHARGE_SOCKETS_TAG, "Invalid count value for socket:" + countView.getText().toString());
}
if (countValue < 0)
{
countValue = 0;
Logger.w(CHARGE_SOCKETS_TAG, "Invalid count value for socket:" + countView.getText().toString());
}
if (countValue < 0)
{
countValue = 0;
Logger.w(CHARGE_SOCKETS_TAG, "Invalid count value for socket:" + countView.getText().toString());
}
double powerValue = 0; // 0 means 'unknown power'
try
{
powerValue = Double.parseDouble(powerView.getText().toString());
}
catch (NumberFormatException ignored)
{
Logger.w(CHARGE_SOCKETS_TAG, "Invalid power value for socket:" + powerView.getText().toString());
}
double powerValue = 0; // 0 means 'unknown power'
try
{
powerValue = Double.parseDouble(powerView.getText().toString());
}
catch (NumberFormatException ignored)
{
Logger.w(CHARGE_SOCKETS_TAG, "Invalid power value for socket:" + powerView.getText().toString());
}
if (powerValue < 0)
{
powerValue = 0;
Logger.w(CHARGE_SOCKETS_TAG, "Invalid power value for socket:" + powerView.getText().toString());
}
if (powerValue < 0)
{
powerValue = 0;
Logger.w(CHARGE_SOCKETS_TAG, "Invalid power value for socket:" + powerView.getText().toString());
}
ChargeSocketDescriptor socket =
new ChargeSocketDescriptor(socketType, countValue, powerValue);
ChargeSocketDescriptor socket = new ChargeSocketDescriptor(socketType, countValue, powerValue);
updateChargeSockets(socketIndex, socket);
})
updateChargeSockets(socketIndex, socket);
})
.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
}
// Helper method for validation logic
private boolean validatePositiveField(String text, TextInputLayout layout) {
if (text.isEmpty()) {
private boolean validatePositiveField(String text, TextInputLayout layout)
{
if (text.isEmpty())
{
layout.setError(null); // No error if empty (assuming 0 is the default)
return true;
}
try {
try
{
double value = Double.parseDouble(text);
if (value < 0) {
if (value < 0)
{
layout.setError(getString(R.string.error_value_must_be_positive));
return false;
} else {
layout.setError(null);
return true;
}
} catch (NumberFormatException e) {
else
{
layout.setError(null);
return true;
}
}
catch (NumberFormatException e)
{
layout.setError(getString(R.string.error_invalid_number));
return false;
}
@@ -583,7 +597,8 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
{
sockets[socketIndex] = socket;
}
else {
else
{
List<ChargeSocketDescriptor> list = new ArrayList<>(Arrays.asList(sockets));
list.add(socket);
sockets = list.toArray(new ChargeSocketDescriptor[0]);
@@ -601,7 +616,8 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
GridLayout socketsGrid = mChargeSockets.findViewById(R.id.socket_grid_editor);
socketsGrid.removeAllViews();
for (int i = 0; i < sockets.length; i++) {
for (int i = 0; i < sockets.length; i++)
{
final int currentIndex = i;
ChargeSocketDescriptor socket = sockets[i];
@@ -612,27 +628,30 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
MaterialTextView power = itemView.findViewById(R.id.socket_power);
MaterialTextView count = itemView.findViewById(R.id.socket_count);
// load SVG icon converted into VectorDrawable in res/drawable
@SuppressLint("DiscouragedApi")
int resIconId = getResources().getIdentifier("ic_charge_socket_" + socket.visualType(), "drawable",
requireContext().getPackageName());
if (resIconId != 0) {
requireContext().getPackageName());
if (resIconId != 0)
{
icon.setImageResource(resIconId);
}
@SuppressLint("DiscouragedApi")
int resTypeId =
getResources().getIdentifier("charge_socket_" + socket.visualType(), "string", requireContext().getPackageName());
if (resTypeId != 0) {
int resTypeId = getResources().getIdentifier("charge_socket_" + socket.visualType(), "string",
requireContext().getPackageName());
if (resTypeId != 0)
{
type.setText(resTypeId);
}
if (socket.power() != 0) {
if (socket.power() != 0)
{
DecimalFormat df = new DecimalFormat("#.##");
power.setText(getString(R.string.kw_label, df.format(socket.power())));
}
else if (socket.ignorePower()) {
else if (socket.ignorePower())
{
power.setVisibility(INVISIBLE);
}
@@ -641,7 +660,8 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
count.setText(getString(R.string.count_label, socket.count()));
}
itemView.setOnClickListener(v -> buildChargeSocketDialog(currentIndex, socket.type(), socket.count(), socket.power()).show());
itemView.setOnClickListener(
v -> buildChargeSocketDialog(currentIndex, socket.type(), socket.count(), socket.power()).show());
socketsGrid.addView(itemView);
}
@@ -787,9 +807,8 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
View lineContactBlock =
initBlock(view, Metadata.MetadataType.FMD_CONTACT_LINE, R.id.block_line, R.drawable.ic_line_white,
R.string.editor_line_social_network, InputType.TYPE_TEXT_VARIATION_URI);
View blueskyContactBlock =
initBlock(view, Metadata.MetadataType.FMD_CONTACT_BLUESKY, R.id.block_bluesky, R.drawable.ic_bluesky,
R.string.bluesky, InputType.TYPE_TEXT_VARIATION_URI);
View blueskyContactBlock = initBlock(view, Metadata.MetadataType.FMD_CONTACT_BLUESKY, R.id.block_bluesky,
R.drawable.ic_bluesky, R.string.bluesky, InputType.TYPE_TEXT_VARIATION_URI);
View operatorBlock = initBlock(view, Metadata.MetadataType.FMD_OPERATOR, R.id.block_operator,
R.drawable.ic_operator, R.string.editor_operator, 0);
@@ -1021,14 +1040,15 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
private void placeDisused()
{
new MaterialAlertDialogBuilder(requireActivity())
.setTitle(R.string.editor_mark_business_vacant_title)
.setMessage(R.string.editor_mark_business_vacant_description)
.setPositiveButton(R.string.editor_submit, (dlg, which) -> {
Editor.nativeMarkPlaceAsDisused();
mParent.processEditedFeatures();
})
.setNegativeButton(android.R.string.cancel, null)
.show();
.setTitle(R.string.editor_mark_business_vacant_title)
.setMessage(R.string.editor_mark_business_vacant_description)
.setPositiveButton(R.string.editor_submit,
(dlg, which) -> {
Editor.nativeMarkPlaceAsDisused();
mParent.processEditedFeatures();
})
.setNegativeButton(android.R.string.cancel, null)
.show();
}
private void commitPlaceDoesntExists(@NonNull String text)

View File

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

View File

@@ -13,7 +13,6 @@ import app.organicmaps.R;
import app.organicmaps.sdk.editor.data.FeatureCategory;
import app.organicmaps.sdk.util.StringUtils;
import app.organicmaps.util.UiUtils;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textview.MaterialTextView;
@@ -69,8 +68,7 @@ public class FeatureCategoryAdapter extends RecyclerView.Adapter<RecyclerView.Vi
}
case TYPE_FOOTER ->
{
return new FooterViewHolder(inflater.inflate(R.layout.item_feature_category_footer, parent, false),
mFragment);
return new FooterViewHolder(inflater.inflate(R.layout.item_feature_category_footer, parent, false), mFragment);
}
default -> throw new IllegalArgumentException("Unsupported viewType: " + viewType);
}
@@ -134,26 +132,21 @@ public class FeatureCategoryAdapter extends RecyclerView.Adapter<RecyclerView.Vi
mSendNoteButton = itemView.findViewById(R.id.send_note_button);
mSendNoteButton.setOnClickListener(v -> listener.onSendNoteClicked());
final ColorStateList bgButtonColor = new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_enabled}, // enabled
new int[]{-android.R.attr.state_enabled} // disabled
},
new int[]{
ContextCompat.getColor(
mSendNoteButton.getContext(), R.color.base_accent),
ContextCompat.getColor(mSendNoteButton.getContext(), R.color.button_accent_disabled)
});
new int[][] {
new int[] {android.R.attr.state_enabled}, // enabled
new int[] {-android.R.attr.state_enabled} // disabled
},
new int[] {ContextCompat.getColor(mSendNoteButton.getContext(), R.color.base_accent),
ContextCompat.getColor(mSendNoteButton.getContext(), R.color.button_accent_disabled)});
final ColorStateList textButtonColor = new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_enabled}, // enabled
new int[]{-android.R.attr.state_enabled} // disabled
},
new int[]{
ContextCompat.getColor(
mSendNoteButton.getContext(),
UiUtils.getStyledResourceId(mSendNoteButton.getContext(), android.R.attr.textColorPrimaryInverse)),
ContextCompat.getColor(mSendNoteButton.getContext(), R.color.button_accent_text_disabled)
});
new int[][] {
new int[] {android.R.attr.state_enabled}, // enabled
new int[] {-android.R.attr.state_enabled} // disabled
},
new int[] {ContextCompat.getColor(mSendNoteButton.getContext(),
UiUtils.getStyledResourceId(mSendNoteButton.getContext(),
android.R.attr.textColorPrimaryInverse)),
ContextCompat.getColor(mSendNoteButton.getContext(), R.color.button_accent_text_disabled)});
mSendNoteButton.setBackgroundTintList(bgButtonColor);
mSendNoteButton.setTextColor(textButtonColor);
mNoteEditText.addTextChangedListener(new StringUtils.SimpleTextWatcher() {

View File

@@ -2,19 +2,16 @@ package app.organicmaps.editor;
import android.content.res.Configuration;
import android.content.res.Resources;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.google.android.material.timepicker.MaterialTimePicker;
import com.google.android.material.timepicker.TimeFormat;
import app.organicmaps.R;
import app.organicmaps.sdk.editor.data.HoursMinutes;
import app.organicmaps.sdk.util.DateUtils;
import com.google.android.material.timepicker.MaterialTimePicker;
import com.google.android.material.timepicker.TimeFormat;
public class FromToTimePicker
{
@@ -32,18 +29,11 @@ public class FromToTimePicker
private boolean mIsFromTimePicked;
private int mInputMode;
public static void pickTime(@NonNull Fragment fragment,
@NonNull FromToTimePicker.OnPickListener listener,
@NonNull HoursMinutes fromTime,
@NonNull HoursMinutes toTime,
int id,
public static void pickTime(@NonNull Fragment fragment, @NonNull FromToTimePicker.OnPickListener listener,
@NonNull HoursMinutes fromTime, @NonNull HoursMinutes toTime, int id,
boolean startWithToTime)
{
FromToTimePicker timePicker = new FromToTimePicker(fragment,
listener,
fromTime,
toTime,
id);
FromToTimePicker timePicker = new FromToTimePicker(fragment, listener, fromTime, toTime, id);
if (startWithToTime)
timePicker.showToTimePicker();
@@ -51,11 +41,8 @@ public class FromToTimePicker
timePicker.showFromTimePicker();
}
private FromToTimePicker(@NonNull Fragment fragment,
@NonNull FromToTimePicker.OnPickListener listener,
@NonNull HoursMinutes fromTime,
@NonNull HoursMinutes toTime,
int id)
private FromToTimePicker(@NonNull Fragment fragment, @NonNull FromToTimePicker.OnPickListener listener,
@NonNull HoursMinutes fromTime, @NonNull HoursMinutes toTime, int id)
{
mActivity = fragment.requireActivity();
mFragmentManager = fragment.getChildFragmentManager();
@@ -100,15 +87,12 @@ public class FromToTimePicker
private MaterialTimePicker buildFromTimePicker()
{
MaterialTimePicker timePicker = buildTimePicker(mFromTime,
mResources.getString(R.string.editor_time_from),
mResources.getString(R.string.next_button),
null);
MaterialTimePicker timePicker = buildTimePicker(mFromTime, mResources.getString(R.string.editor_time_from),
mResources.getString(R.string.next_button), null);
timePicker.addOnNegativeButtonClickListener(view -> finishTimePicking(false));
timePicker.addOnPositiveButtonClickListener(view ->
{
timePicker.addOnPositiveButtonClickListener(view -> {
mIsFromTimePicked = true;
saveState(timePicker, true);
mFromTimePicker = null;
@@ -122,13 +106,10 @@ public class FromToTimePicker
private MaterialTimePicker buildToTimePicker()
{
MaterialTimePicker timePicker = buildTimePicker(mToTime,
mResources.getString(R.string.editor_time_to),
null,
MaterialTimePicker timePicker = buildTimePicker(mToTime, mResources.getString(R.string.editor_time_to), null,
mResources.getString(R.string.back));
timePicker.addOnNegativeButtonClickListener(view ->
{
timePicker.addOnNegativeButtonClickListener(view -> {
saveState(timePicker, false);
mToTimePicker = null;
if (mIsFromTimePicked)
@@ -137,8 +118,7 @@ public class FromToTimePicker
finishTimePicking(false);
});
timePicker.addOnPositiveButtonClickListener(view ->
{
timePicker.addOnPositiveButtonClickListener(view -> {
saveState(timePicker, false);
finishTimePicking(true);
});
@@ -149,18 +129,18 @@ public class FromToTimePicker
}
@NonNull
private MaterialTimePicker buildTimePicker(@NonNull HoursMinutes time,
@NonNull String title,
private MaterialTimePicker buildTimePicker(@NonNull HoursMinutes time, @NonNull String title,
@Nullable String positiveButtonTextOverride,
@Nullable String negativeButtonTextOverride)
{
MaterialTimePicker.Builder builder = new MaterialTimePicker.Builder()
.setTitleText(title)
.setTimeFormat(mIs24HourFormat ? TimeFormat.CLOCK_24H : TimeFormat.CLOCK_12H)
.setInputMode(mInputMode)
.setTheme(R.style.MwmTheme_MaterialTimePicker)
.setHour((int) time.hours)
.setMinute((int) time.minutes);
MaterialTimePicker.Builder builder =
new MaterialTimePicker.Builder()
.setTitleText(title)
.setTimeFormat(mIs24HourFormat ? TimeFormat.CLOCK_24H : TimeFormat.CLOCK_12H)
.setInputMode(mInputMode)
.setTheme(R.style.MwmTheme_MaterialTimePicker)
.setHour((int) time.hours)
.setMinute((int) time.minutes);
if (positiveButtonTextOverride != null)
builder.setPositiveButtonText(positiveButtonTextOverride);

View File

@@ -8,7 +8,6 @@ import androidx.annotation.NonNull;
import androidx.core.os.ConfigurationCompat;
import androidx.core.os.LocaleListCompat;
import androidx.fragment.app.Fragment;
import app.organicmaps.R;
import app.organicmaps.base.BaseMwmRecyclerFragment;
import app.organicmaps.sdk.editor.Editor;
@@ -25,7 +24,7 @@ import java.util.Set;
public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
{
final static String EXISTING_LOCALIZED_NAMES = "ExistingLocalizedNames";
final static String INCLUDE_LOCAL_LANGUAGE = "IncludeLocalLanguage";
final static String IS_MAP_LANGUAGE_SELECTION = "IsMapLanguageSelection";
public interface Listener
{
@@ -39,8 +38,7 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
protected LanguagesAdapter createAdapter()
{
Bundle args = getArguments();
boolean includeLocalLanguage =
args != null ? args.getBoolean(INCLUDE_LOCAL_LANGUAGE) : true;
boolean isMapLanguageSelection = args != null ? args.getBoolean(IS_MAP_LANGUAGE_SELECTION) : true;
Set<String> existingLanguages =
args != null ? new HashSet<>(args.getStringArrayList(EXISTING_LOCALIZED_NAMES)) : new HashSet<>();
@@ -52,8 +50,14 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
for (int i = 0; i < systemLocales.size(); i++)
systemLanguages.add(null);
for (Language lang : Editor.nativeGetSupportedLanguages(false))
// service languages are old_name, alt_name, ...
boolean includeServiceLangs = !isMapLanguageSelection;
for (Language lang : Editor.nativeGetSupportedLanguages(includeServiceLangs))
{
if (existingLanguages.contains(lang.code))
continue;
// Separately extract system languages
for (int i = 0; i < systemLocales.size(); i++)
{
@@ -65,7 +69,7 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
}
}
if (existingLanguages.contains(lang.code) || systemLanguages.contains(lang))
if (systemLanguages.contains(lang))
continue;
languages.add(lang);
@@ -75,7 +79,8 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
languages.addAll(0, systemLanguages.stream().filter(Objects::nonNull).toList());
if (includeLocalLanguage) {
if (isMapLanguageSelection)
{
String localLanguageLabel = getString(R.string.pref_maplanguage_local);
Language localLanguage = new Language(DEFAULT_LANG_CODE, localLanguageLabel);
languages.add(0, localLanguage);

View File

@@ -7,7 +7,6 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import androidx.annotation.IdRes;
import androidx.annotation.IntRange;
import androidx.annotation.Nullable;
@@ -122,20 +121,14 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter<SimpleTimetableAdapter
notifyItemChanged(getItemCount() - 1);
}
private void pickTime(int position,
@IntRange(from = ID_OPENING_TIME, to = ID_CLOSED_SPAN) int id,
private void pickTime(int position, @IntRange(from = ID_OPENING_TIME, to = ID_CLOSED_SPAN) int id,
boolean startWithToTime)
{
final Timetable data = mItems.get(position);
mPickingPosition = position;
FromToTimePicker.pickTime(mFragment,
this,
data.workingTimespan.start,
data.workingTimespan.end,
id,
startWithToTime);
FromToTimePicker.pickTime(mFragment, this, data.workingTimespan.start, data.workingTimespan.end, id,
startWithToTime);
}
@Override
@@ -384,26 +377,21 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter<SimpleTimetableAdapter
final String text = mFragment.getString(R.string.editor_time_add);
mAdd.setEnabled(enable);
final ColorStateList bgButtonColor = new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_enabled}, // enabled
new int[]{-android.R.attr.state_enabled} // disabled
},
new int[]{
ContextCompat.getColor(
mAdd.getContext(), R.color.base_accent),
ContextCompat.getColor(mAdd.getContext(), R.color.button_accent_disabled)
});
new int[][] {
new int[] {android.R.attr.state_enabled}, // enabled
new int[] {-android.R.attr.state_enabled} // disabled
},
new int[] {ContextCompat.getColor(mAdd.getContext(), R.color.base_accent),
ContextCompat.getColor(mAdd.getContext(), R.color.button_accent_disabled)});
final ColorStateList textButtonColor = new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_enabled}, // enabled
new int[]{-android.R.attr.state_enabled} // disabled
},
new int[]{
ContextCompat.getColor(
mAdd.getContext(),
UiUtils.getStyledResourceId(mAdd.getContext(), android.R.attr.textColorPrimaryInverse)),
ContextCompat.getColor(mAdd.getContext(), R.color.button_accent_text_disabled)
});
new int[][] {
new int[] {android.R.attr.state_enabled}, // enabled
new int[] {-android.R.attr.state_enabled} // disabled
},
new int[] {
ContextCompat.getColor(mAdd.getContext(), UiUtils.getStyledResourceId(
mAdd.getContext(), android.R.attr.textColorPrimaryInverse)),
ContextCompat.getColor(mAdd.getContext(), R.color.button_accent_text_disabled)});
mAdd.setBackgroundTintList(bgButtonColor);
mAdd.setTextColor(textButtonColor);
mAdd.setText(enable ? text + " (" + TimeFormatUtils.formatWeekdays(mComplementItem) + ")" : text);

View File

@@ -9,8 +9,8 @@ import androidx.annotation.Nullable;
import app.organicmaps.R;
import app.organicmaps.base.BaseMwmRecyclerFragment;
public class SimpleTimetableFragment extends BaseMwmRecyclerFragment<SimpleTimetableAdapter>
implements TimetableProvider
public class SimpleTimetableFragment
extends BaseMwmRecyclerFragment<SimpleTimetableAdapter> implements TimetableProvider
{
private SimpleTimetableAdapter mAdapter;
@Nullable

View File

@@ -35,25 +35,30 @@ public class LayerBottomSheetItem
@DrawableRes
int drawableResId = 0;
@StringRes
int buttonTextResource = switch (mode) {
case OUTDOORS -> {
drawableResId = R.drawable.ic_layers_outdoors;
yield R.string.button_layer_outdoor;
}
case SUBWAY -> {
drawableResId = R.drawable.ic_layers_subway;
yield R.string.subway;
}
case ISOLINES -> {
drawableResId = R.drawable.ic_layers_isoline;
yield R.string.button_layer_isolines;
}
case TRAFFIC -> {
drawableResId = R.drawable.ic_layers_traffic;
yield R.string.button_layer_traffic;
}
int buttonTextResource = switch (mode)
{
case OUTDOORS ->
{
drawableResId = R.drawable.ic_layers_outdoors;
yield R.string.button_layer_outdoor;
}
case SUBWAY ->
{
drawableResId = R.drawable.ic_layers_subway;
yield R.string.subway;
}
case ISOLINES ->
{
drawableResId = R.drawable.ic_layers_isoline;
yield R.string.button_layer_isolines;
}
case TRAFFIC ->
{
drawableResId = R.drawable.ic_layers_traffic;
yield R.string.button_layer_traffic;
}
};
return new LayerBottomSheetItem(drawableResId, buttonTextResource, mode, layerItemClickListener);
return new LayerBottomSheetItem(drawableResId, buttonTextResource, mode, layerItemClickListener);
}
@NonNull

View File

@@ -5,11 +5,9 @@ import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.adapter.OnItemClickListener;
import com.google.android.material.textview.MaterialTextView;
class LayerHolder extends RecyclerView.ViewHolder
{

View File

@@ -395,7 +395,7 @@ public class MapButtonsController extends Fragment
0;
// Allow offset tolerance for zoom buttons
};
showButton(getViewTopOffset(translation, button) >= toleranceOffset, entry.getKey());
showButton(getViewTopOffset(translation, button) >= toleranceOffset, entry.getKey());
}
}
}

View File

@@ -99,9 +99,9 @@ public class NavigationController implements TrafficManager.TrafficCallback, Nav
mCurrentSpeed = topFrame.findViewById(R.id.nav_current_speed);
View mTopbar = topFrame.findViewById(R.id.statutbar);
ViewCompat.setOnApplyWindowInsetsListener(mTopbar,(v, windowInsets) -> {
UiUtils.setViewNavigationTopInsetsMargin(v, windowInsets);
return windowInsets;
ViewCompat.setOnApplyWindowInsetsListener(mTopbar, (v, windowInsets) -> {
UiUtils.setViewNavigationTopInsetsMargin(v, windowInsets);
return windowInsets;
});
// Show a blank view below the navbar to hide the menu content
final View navigationBarBackground = mFrame.findViewById(R.id.nav_bottom_sheet_nav_bar);

View File

@@ -43,7 +43,6 @@ import app.organicmaps.util.UiUtils;
import app.organicmaps.util.Utils;
import app.organicmaps.widget.recycler.DotDividerItemDecoration;
import app.organicmaps.widget.recycler.MultilineLayoutManager;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.textview.MaterialTextView;
@@ -123,9 +122,9 @@ final class RoutingBottomMenuController implements View.OnClickListener
@NonNull View timeElevationLine, @NonNull View transitFrame,
@NonNull MaterialTextView error, @NonNull MaterialButton start,
@NonNull ShapeableImageView altitudeChart, @NonNull MaterialTextView time,
@NonNull MaterialTextView altitudeDifference, @NonNull MaterialTextView timeVehicle,
@Nullable MaterialTextView arrival, @NonNull View actionFrame,
@Nullable RoutingBottomMenuListener listener)
@NonNull MaterialTextView altitudeDifference,
@NonNull MaterialTextView timeVehicle, @Nullable MaterialTextView arrival,
@NonNull View actionFrame, @Nullable RoutingBottomMenuListener listener)
{
mContext = context;
mAltitudeChartFrame = altitudeChartFrame;

View File

@@ -12,9 +12,6 @@ import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.MwmApplication;
import app.organicmaps.R;
import app.organicmaps.sdk.Framework;
@@ -29,6 +26,7 @@ import app.organicmaps.util.WindowInsetUtils.PaddingInsetsListener;
import app.organicmaps.widget.RoutingToolbarButton;
import app.organicmaps.widget.ToolbarController;
import app.organicmaps.widget.WheelProgressView;
import com.google.android.material.textview.MaterialTextView;
public class RoutingPlanController extends ToolbarController
{
@@ -264,7 +262,7 @@ public class RoutingPlanController extends ToolbarController
default -> throw new IllegalArgumentException("unknown router: " + router);
};
RoutingToolbarButton button = mRouterTypes.findViewById(mRouterTypes.getCheckedRadioButtonId());
RoutingToolbarButton button = mRouterTypes.findViewById(mRouterTypes.getCheckedRadioButtonId());
button.progress();
updateProgressLabels();

View File

@@ -14,12 +14,10 @@ import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.sdk.search.DisplayedCategories;
import app.organicmaps.sdk.util.Language;
import com.google.android.material.textview.MaterialTextView;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Locale;

View File

@@ -10,14 +10,12 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.sdk.search.SearchResult;
import app.organicmaps.util.Graphics;
import app.organicmaps.util.ThemeUtils;
import app.organicmaps.util.UiUtils;
import com.google.android.material.textview.MaterialTextView;
class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.SearchDataViewHolder>
{
@@ -152,7 +150,8 @@ class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.SearchDataViewHol
{
final Resources resources = mSearchFragment.getResources();
if (result.description.openNow != SearchResult.OPEN_NOW_YES && result.description.openNow != SearchResult.OPEN_NOW_NO)
if (result.description.openNow != SearchResult.OPEN_NOW_YES
&& result.description.openNow != SearchResult.OPEN_NOW_NO)
{
// Hide if unknown opening hours state
UiUtils.hide(mOpen);
@@ -169,15 +168,18 @@ class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.SearchDataViewHol
{
final String minsToChangeStr = resources.getQuantityString(
R.plurals.minutes_short, Math.max(minsToNextState, 1), Math.max(minsToNextState, 1));
final String nextChangeFormatted = resources.getString(isOpen ? R.string.closes_in : R.string.opens_in, minsToChangeStr);
final String nextChangeFormatted =
resources.getString(isOpen ? R.string.closes_in : R.string.opens_in, minsToChangeStr);
UiUtils.setTextAndShow(mOpen, nextChangeFormatted);
mOpen.setTextColor(ContextCompat.getColor(mSearchFragment.getContext(), R.color.base_yellow));
}
else
{
UiUtils.setTextAndShow(mOpen, isOpen ? resources.getString(R.string.editor_time_open) : resources.getString(R.string.closed));
mOpen.setTextColor(ContextCompat.getColor(mSearchFragment.getContext(), isOpen ? R.color.base_green : R.color.base_red));
UiUtils.setTextAndShow(
mOpen, isOpen ? resources.getString(R.string.editor_time_open) : resources.getString(R.string.closed));
mOpen.setTextColor(
ContextCompat.getColor(mSearchFragment.getContext(), isOpen ? R.color.base_green : R.color.base_red));
}
}

View File

@@ -273,7 +273,8 @@ public class SearchFragment extends BaseMwmFragment implements SearchListener, C
RecyclerView mResults = mResultsFrame.findViewById(R.id.recycler);
setRecyclerScrollListener(mResults);
mResultsPlaceholder = mResultsFrame.findViewById(R.id.placeholder);
mResultsPlaceholder.setContent(R.string.search_not_found, R.string.search_not_found_query, R.drawable.ic_search_fail);
mResultsPlaceholder.setContent(R.string.search_not_found, R.string.search_not_found_query,
R.drawable.ic_search_fail);
mSearchAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver()
{

View File

@@ -5,15 +5,13 @@ import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.MwmApplication;
import app.organicmaps.R;
import app.organicmaps.sdk.routing.RoutingController;
import app.organicmaps.sdk.search.SearchRecents;
import app.organicmaps.util.Graphics;
import app.organicmaps.widget.SearchToolbarController;
import com.google.android.material.textview.MaterialTextView;
class SearchHistoryAdapter extends RecyclerView.Adapter<SearchHistoryAdapter.ViewHolder>
{

View File

@@ -8,14 +8,12 @@ import android.view.ViewGroup;
import android.widget.CompoundButton;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.materialswitch.MaterialSwitch;
import app.organicmaps.R;
import app.organicmaps.base.BaseMwmToolbarFragment;
import app.organicmaps.sdk.routing.RoutingController;
import app.organicmaps.sdk.routing.RoutingOptions;
import app.organicmaps.sdk.settings.RoadType;
import com.google.android.material.materialswitch.MaterialSwitch;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;

View File

@@ -8,7 +8,6 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.preference.ListPreference;
@@ -16,9 +15,6 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceManager;
import androidx.preference.TwoStatePreference;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import app.organicmaps.MwmApplication;
import app.organicmaps.R;
import app.organicmaps.dialog.CustomMapServerDialog;
@@ -43,7 +39,7 @@ import app.organicmaps.sdk.util.SharedPropertiesUtils;
import app.organicmaps.sdk.util.log.LogsManager;
import app.organicmaps.util.ThemeSwitcher;
import app.organicmaps.util.Utils;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -142,9 +138,12 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
{
final Preference pref = getPreference(getString(R.string.pref_map_locale));
String mapLanguageCode = MapLanguageCode.getMapLanguageCode();
if (mapLanguageCode.equals(DEFAULT_LANG_CODE)) {
if (mapLanguageCode.equals(DEFAULT_LANG_CODE))
{
pref.setSummary(R.string.pref_maplanguage_local);
} else {
}
else
{
Locale locale = new Locale(mapLanguageCode);
pref.setSummary(locale.getDisplayLanguage());
}
@@ -559,9 +558,8 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
String normalizedUrl = Framework.normalizeServerUrl(current);
// Initial summary
customUrlPref.setSummary(normalizedUrl.isEmpty()
? getString(R.string.download_resources_custom_url_summary_none)
: normalizedUrl);
customUrlPref.setSummary(normalizedUrl.isEmpty() ? getString(R.string.download_resources_custom_url_summary_none)
: normalizedUrl);
// Sync native
Framework.applyCustomMapDownloadUrl(requireContext(), normalizedUrl);
@@ -569,9 +567,7 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
// Show dialog
customUrlPref.setOnPreferenceClickListener(preference -> {
CustomMapServerDialog.show(requireContext(), url -> {
preference.setSummary(url.isEmpty()
? getString(R.string.download_resources_custom_url_summary_none)
: url);
preference.setSummary(url.isEmpty() ? getString(R.string.download_resources_custom_url_summary_none) : url);
});
return true;
});

View File

@@ -274,10 +274,10 @@ public final class UiUtils
public static void setViewNavigationTopInsetsMargin(View view, WindowInsetsCompat windowInsets)
{
final Insets systemInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
lp.topMargin = systemInsets.top;
view.setLayoutParams(lp);
final Insets systemInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
lp.topMargin = systemInsets.top;
view.setLayoutParams(lp);
}
public static void setupNavigationIcon(@NonNull MaterialToolbar toolbar, @NonNull View.OnClickListener listener)

View File

@@ -8,165 +8,165 @@ import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public abstract class BaseSignView extends View
{
private float mBorderWidthRatio = 0.1f;
protected void setBorderWidthRatio(float ratio) {
mBorderWidthRatio = ratio;
}
private float mBorderWidthRatio = 0.1f;
protected void setBorderWidthRatio(float ratio)
{
mBorderWidthRatio = ratio;
}
private float mBorderInsetRatio = 0f;
protected void setBorderInsetRatio(float ratio) {
mBorderInsetRatio = ratio;
}
private float mBorderInsetRatio = 0f;
protected void setBorderInsetRatio(float ratio)
{
mBorderInsetRatio = ratio;
}
// colors
protected int mBackgroundColor;
protected int mBorderColor;
protected int mAlertColor;
protected int mTextColor;
protected int mTextAlertColor;
// colors
protected int mBackgroundColor;
protected int mBorderColor;
protected int mAlertColor;
protected int mTextColor;
protected int mTextAlertColor;
// paints
protected final Paint mBackgroundPaint;
protected final Paint mBorderPaint;
protected final Paint mTextPaint;
// paints
protected final Paint mBackgroundPaint;
protected final Paint mBorderPaint;
protected final Paint mTextPaint;
// geometry
protected float mWidth;
protected float mHeight;
protected float mRadius;
protected float mBorderWidth;
protected float mBorderRadius;
// geometry
protected float mWidth;
protected float mHeight;
protected float mRadius;
protected float mBorderWidth;
protected float mBorderRadius;
public BaseSignView(Context ctx, @Nullable AttributeSet attrs)
public BaseSignView(Context ctx, @Nullable AttributeSet attrs)
{
super(ctx, attrs);
mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mBorderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mBorderPaint.setStyle(Paint.Style.STROKE);
mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mTextPaint.setTextAlign(Paint.Align.CENTER);
mTextPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD));
}
protected void setColors(int backgroundColor, int borderColor, int alertColor, int textColor, int textAlertColor)
{
mBackgroundColor = backgroundColor;
mBorderColor = borderColor;
mAlertColor = alertColor;
mTextColor = textColor;
mTextAlertColor = textAlertColor;
mBackgroundPaint.setColor(mBackgroundColor);
mBorderPaint.setColor(mBorderColor);
mTextPaint.setColor(mTextColor);
}
@Override
protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight)
{
super.onSizeChanged(width, height, oldWidth, oldHeight);
final float paddingX = getPaddingLeft() + getPaddingRight();
final float paddingY = getPaddingTop() + getPaddingBottom();
mWidth = width - paddingX;
mHeight = height - paddingY;
mRadius = Math.min(mWidth, mHeight) / 2f;
mBorderWidth = mRadius * mBorderWidthRatio;
// subtract half the stroke PLUS the extra inset
final float gap = mRadius * mBorderInsetRatio;
mBorderRadius = mRadius - (mBorderWidth / 2f) - gap;
configureTextSize();
}
@Override
protected void onDraw(@NonNull Canvas canvas)
{
super.onDraw(canvas);
final String str = getValueString();
if (str == null)
return;
final float cx = mWidth / 2f;
final float cy = mHeight / 2f;
// background & border
boolean alert = isAlert();
mBackgroundPaint.setColor(alert ? mAlertColor : mBackgroundColor);
canvas.drawCircle(cx, cy, mRadius, mBackgroundPaint);
if (!alert)
{
super(ctx, attrs);
mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mBorderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mBorderPaint.setStyle(Paint.Style.STROKE);
mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mTextPaint.setTextAlign(Paint.Align.CENTER);
mTextPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD));
mBorderPaint.setStrokeWidth(mBorderWidth);
mBorderPaint.setColor(mBorderColor);
canvas.drawCircle(cx, cy, mBorderRadius, mBorderPaint);
}
protected void setColors(int backgroundColor,
int borderColor,
int alertColor,
int textColor,
int textAlertColor)
// text
mTextPaint.setColor(alert ? mTextAlertColor : mTextColor);
drawValueString(canvas, cx, cy, str);
}
@Override
public boolean onTouchEvent(@NonNull MotionEvent e)
{
final float cx = mWidth / 2f, cy = mHeight / 2f;
final float dx = e.getX() - cx, dy = e.getY() - cy;
if ((dx * dx) + (dy * dy) <= (mRadius * mRadius))
{
mBackgroundColor = backgroundColor;
mBorderColor = borderColor;
mAlertColor = alertColor;
mTextColor = textColor;
mTextAlertColor = textAlertColor;
mBackgroundPaint.setColor(mBackgroundColor);
mBorderPaint.setColor(mBorderColor);
mTextPaint.setColor(mTextColor);
performClick();
return true;
}
return false;
}
@Override
protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight) {
super.onSizeChanged(width, height, oldWidth, oldHeight);
final float paddingX = getPaddingLeft() + getPaddingRight();
final float paddingY = getPaddingTop() + getPaddingBottom();
mWidth = width - paddingX;
mHeight = height - paddingY;
mRadius = Math.min(mWidth, mHeight) / 2f;
mBorderWidth = mRadius * mBorderWidthRatio;
// subtract half the stroke PLUS the extra inset
final float gap = mRadius * mBorderInsetRatio;
mBorderRadius = mRadius - (mBorderWidth / 2f) - gap;
configureTextSize();
}
@Override
public boolean performClick()
{
super.performClick();
return false;
}
@Override
protected void onDraw(@NonNull Canvas canvas)
private void drawValueString(Canvas c, float cx, float cy, String str)
{
Rect b = new Rect();
mTextPaint.getTextBounds(str, 0, str.length(), b);
final float y = cy - b.exactCenterY();
c.drawText(str, cx, y, mTextPaint);
}
void configureTextSize()
{
String text = getValueString();
if (text == null)
return;
final float textRadius = mBorderRadius - mBorderWidth;
final float maxTextSize = 2f * textRadius;
final float maxTextSize2 = maxTextSize * maxTextSize;
float lo = 0f, hi = maxTextSize, sz = maxTextSize;
Rect b = new Rect();
while (lo <= hi)
{
super.onDraw(canvas);
final String str = getValueString();
if (str == null) return;
final float cx = mWidth / 2f;
final float cy = mHeight / 2f;
// background & border
boolean alert = isAlert();
mBackgroundPaint.setColor(alert ? mAlertColor : mBackgroundColor);
canvas.drawCircle(cx, cy, mRadius, mBackgroundPaint);
if (!alert)
{
mBorderPaint.setStrokeWidth(mBorderWidth);
mBorderPaint.setColor(mBorderColor);
canvas.drawCircle(cx, cy, mBorderRadius, mBorderPaint);
}
// text
mTextPaint.setColor(alert ? mTextAlertColor : mTextColor);
drawValueString(canvas, cx, cy, str);
sz = (lo + hi) / 2f;
mTextPaint.setTextSize(sz);
mTextPaint.getTextBounds(text, 0, text.length(), b);
float area = b.width() * b.width() + b.height() * b.height();
if (area <= maxTextSize2)
lo = sz + 1f;
else
hi = sz - 1f;
}
mTextPaint.setTextSize(Math.max(1f, sz));
}
@Override
public boolean onTouchEvent(@NonNull MotionEvent e)
{
final float cx = mWidth / 2f, cy = mHeight / 2f;
final float dx = e.getX() - cx, dy = e.getY() - cy;
if ((dx * dx) + (dy * dy) <= (mRadius * mRadius))
{
performClick();
return true;
}
return false;
}
/** child must return the string to draw, or null if nothing */
@Nullable
protected abstract String getValueString();
@Override
public boolean performClick()
{
super.performClick();
return false;
}
private void drawValueString(Canvas c, float cx, float cy, String str)
{
Rect b = new Rect();
mTextPaint.getTextBounds(str, 0, str.length(), b);
final float y = cy - b.exactCenterY();
c.drawText(str, cx, y, mTextPaint);
}
void configureTextSize()
{
String text = getValueString();
if (text == null) return;
final float textRadius = mBorderRadius - mBorderWidth;
final float maxTextSize = 2f * textRadius;
final float maxTextSize2 = maxTextSize * maxTextSize;
float lo = 0f, hi = maxTextSize, sz = maxTextSize;
Rect b = new Rect();
while (lo <= hi)
{
sz = (lo + hi) / 2f;
mTextPaint.setTextSize(sz);
mTextPaint.getTextBounds(text, 0, text.length(), b);
float area = b.width()*b.width() + b.height()*b.height();
if (area <= maxTextSize2)
lo = sz + 1f;
else
hi = sz - 1f;
}
mTextPaint.setTextSize(Math.max(1f, sz));
}
/** child must return the string to draw, or null if nothing */
@Nullable
protected abstract String getValueString();
/** child decides if this is in “alert” state */
protected abstract boolean isAlert();
/** child decides if this is in “alert” state */
protected abstract boolean isAlert();
}

View File

@@ -4,9 +4,7 @@ import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.Pair;
import androidx.annotation.Nullable;
import app.organicmaps.R;
import app.organicmaps.sdk.util.StringUtils;
@@ -22,18 +20,18 @@ public class CurrentSpeedView extends BaseSignView
setBorderWidthRatio(0.1f);
setBorderInsetRatio(0.05f);
try (TypedArray a = ctx.getTheme()
.obtainStyledAttributes(attrs, R.styleable.CurrentSpeedView /* reuse same attrs or define new */ , 0, 0))
try (TypedArray a = ctx.getTheme().obtainStyledAttributes(
attrs, R.styleable.CurrentSpeedView /* reuse same attrs or define new */, 0, 0))
{
int bg = a.getColor(R.styleable.CurrentSpeedView_currentSpeedBackgroundColor, DefaultValues.BACKGROUND_COLOR);
int bd = a.getColor(R.styleable.CurrentSpeedView_currentSpeedBorderColor, DefaultValues.BORDER_COLOR);
int tc = a.getColor(R.styleable.CurrentSpeedView_currentSpeedTextColor, DefaultValues.TEXT_COLOR);
int bg = a.getColor(R.styleable.CurrentSpeedView_currentSpeedBackgroundColor, DefaultValues.BACKGROUND_COLOR);
int bd = a.getColor(R.styleable.CurrentSpeedView_currentSpeedBorderColor, DefaultValues.BORDER_COLOR);
int tc = a.getColor(R.styleable.CurrentSpeedView_currentSpeedTextColor, DefaultValues.TEXT_COLOR);
setColors(bg, bd, 0, tc, 0);
if (isInEditMode())
{
mSpeedMps = a.getInt(R.styleable.CurrentSpeedView_currentSpeedEditModeCurrentSpeed, 50);
mSpeedStr = Integer.toString((int)mSpeedMps);
mSpeedMps = a.getInt(R.styleable.CurrentSpeedView_currentSpeedEditModeCurrentSpeed, 50);
mSpeedStr = Integer.toString((int) mSpeedMps);
}
}
}
@@ -47,7 +45,7 @@ public class CurrentSpeedView extends BaseSignView
}
else
{
Pair<String,String> su = StringUtils.nativeFormatSpeedAndUnits(mps);
Pair<String, String> su = StringUtils.nativeFormatSpeedAndUnits(mps);
mSpeedStr = su.first;
}
requestLayout();
@@ -70,8 +68,8 @@ public class CurrentSpeedView extends BaseSignView
private interface DefaultValues
{
int BACKGROUND_COLOR = 0xFFFFFFFF;
int BORDER_COLOR = 0xFF000000;
int TEXT_COLOR = 0xFF000000;
int BACKGROUND_COLOR = 0xFFFFFFFF;
int BORDER_COLOR = 0xFF000000;
int TEXT_COLOR = 0xFF000000;
}
}

View File

@@ -12,12 +12,10 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.core.content.ContextCompat;
import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.util.UiUtils;
import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.textview.MaterialTextView;
public class PlaceholderView extends LinearLayout
{

View File

@@ -5,16 +5,14 @@ import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import androidx.annotation.Nullable;
import app.organicmaps.R;
public class SpeedLimitView extends BaseSignView
{
private int mSpeedLimit = -1;
private boolean mAlert = false;
private String mSpeedStr = "-1";
private int mSpeedLimit = -1;
private boolean mAlert = false;
private String mSpeedStr = "-1";
private final int unlimitedBorderColor;
private final int unlimitedStripeColor;
@@ -27,15 +25,22 @@ public class SpeedLimitView extends BaseSignView
try (TypedArray styleAttrs = ctx.getTheme().obtainStyledAttributes(attrs, R.styleable.SpeedLimitView, 0, 0))
{
final int bgColor = styleAttrs.getColor(R.styleable.SpeedLimitView_speedLimitBackgroundColor, DefaultValues.BACKGROUND_COLOR);
final int borderColor = styleAttrs.getColor(R.styleable.SpeedLimitView_speedLimitBorderColor, DefaultValues.BORDER_COLOR);
final int alertColor = styleAttrs.getColor(R.styleable.SpeedLimitView_speedLimitAlertColor, DefaultValues.ALERT_COLOR);
final int textColor = styleAttrs.getColor(R.styleable.SpeedLimitView_speedLimitTextColor, DefaultValues.TEXT_COLOR);
final int txtAlertColor = styleAttrs.getColor(R.styleable.SpeedLimitView_speedLimitTextAlertColor, DefaultValues.TEXT_ALERT_COLOR);
final int bgColor =
styleAttrs.getColor(R.styleable.SpeedLimitView_speedLimitBackgroundColor, DefaultValues.BACKGROUND_COLOR);
final int borderColor =
styleAttrs.getColor(R.styleable.SpeedLimitView_speedLimitBorderColor, DefaultValues.BORDER_COLOR);
final int alertColor =
styleAttrs.getColor(R.styleable.SpeedLimitView_speedLimitAlertColor, DefaultValues.ALERT_COLOR);
final int textColor =
styleAttrs.getColor(R.styleable.SpeedLimitView_speedLimitTextColor, DefaultValues.TEXT_COLOR);
final int txtAlertColor =
styleAttrs.getColor(R.styleable.SpeedLimitView_speedLimitTextAlertColor, DefaultValues.TEXT_ALERT_COLOR);
setColors(bgColor, borderColor, alertColor, textColor, txtAlertColor);
unlimitedBorderColor = styleAttrs.getColor(R.styleable.SpeedLimitView_speedLimitUnlimitedBorderColor, DefaultValues.UNLIMITED_BORDER_COLOR);
unlimitedStripeColor = styleAttrs.getColor(R.styleable.SpeedLimitView_speedLimitUnlimitedStripeColor, DefaultValues.UNLIMITED_STRIPE_COLOR);
unlimitedBorderColor = styleAttrs.getColor(R.styleable.SpeedLimitView_speedLimitUnlimitedBorderColor,
DefaultValues.UNLIMITED_BORDER_COLOR);
unlimitedStripeColor = styleAttrs.getColor(R.styleable.SpeedLimitView_speedLimitUnlimitedStripeColor,
DefaultValues.UNLIMITED_STRIPE_COLOR);
if (isInEditMode())
{
@@ -51,7 +56,7 @@ public class SpeedLimitView extends BaseSignView
if (mSpeedLimit != limit)
{
mSpeedLimit = limit;
mSpeedStr = Integer.toString(limit);
mSpeedStr = Integer.toString(limit);
requestLayout();
}
mAlert = alert;
@@ -75,7 +80,7 @@ public class SpeedLimitView extends BaseSignView
@Override
protected void onDraw(Canvas canvas)
{
final float cx = mWidth/2f, cy = mHeight/2f;
final float cx = mWidth / 2f, cy = mHeight / 2f;
if (mSpeedLimit == 0) // 0 means unlimited speed (maxspeed=none)
{
@@ -105,7 +110,7 @@ public class SpeedLimitView extends BaseSignView
stripe.setStrokeWidth(mBorderWidth * 0.4f);
final float radius = mRadius * 0.8f; // Shorten to 80% of full radius
final float diag = (float) (1/Math.sqrt(2)); // 45 degrees
final float diag = (float) (1 / Math.sqrt(2)); // 45 degrees
final float dx = -diag, dy = +diag;
final float px = -dy, py = +dx; // Perpendicular
final float step = radius * 0.15f; // Spacing
@@ -122,14 +127,13 @@ public class SpeedLimitView extends BaseSignView
}
}
private interface DefaultValues
{
int BACKGROUND_COLOR = 0xFFFFFFFF;
int BORDER_COLOR = 0xFFFF0000;
int ALERT_COLOR = 0xFFFF0000;
int TEXT_COLOR = 0xFF000000;
int TEXT_ALERT_COLOR = 0xFFFFFFFF;
int BACKGROUND_COLOR = 0xFFFFFFFF;
int BORDER_COLOR = 0xFFFF0000;
int ALERT_COLOR = 0xFFFF0000;
int TEXT_COLOR = 0xFF000000;
int TEXT_ALERT_COLOR = 0xFFFFFFFF;
int UNLIMITED_BORDER_COLOR = 0xFF000000;
int UNLIMITED_STRIPE_COLOR = 0xFF000000;
}

View File

@@ -72,7 +72,7 @@ public class MyPositionButton
case LocationState.FOLLOW_AND_ROTATE -> R.drawable.ic_follow_and_rotate;
default -> throw new IllegalArgumentException("Invalid button mode: " + mode);
};
image = ResourcesCompat.getDrawable(resources, drawableRes, context.getTheme());
image = ResourcesCompat.getDrawable(resources, drawableRes, context.getTheme());
mIcons.put(mode, image);
}

View File

@@ -1,9 +1,9 @@
package app.organicmaps.widget.placepage;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import app.organicmaps.sdk.util.StringUtils;
import com.github.mikephil.charting.charts.BarLineChartBase;
import androidx.annotation.Nullable;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;

View File

@@ -105,7 +105,8 @@ public class EditBookmarkFragment extends BaseMwmDialogFragment implements View.
public EditBookmarkFragment() {}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
public void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.MwmTheme_FullScreenDialog);
}
@@ -184,10 +185,9 @@ public class EditBookmarkFragment extends BaseMwmDialogFragment implements View.
{
super.onStart();
Dialog dialog = getDialog();
if (dialog != null) {
dialog.getWindow().setLayout(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
if (dialog != null)
{
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
// Focus name and show keyboard for "Unknown Place" bookmarks

View File

@@ -6,9 +6,6 @@ import android.widget.RelativeLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.widget.NestedScrollView;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.ChartController;
import app.organicmaps.R;
import app.organicmaps.sdk.Framework;
@@ -17,6 +14,7 @@ import app.organicmaps.sdk.bookmarks.data.Track;
import app.organicmaps.sdk.bookmarks.data.TrackStatistics;
import app.organicmaps.util.UiUtils;
import app.organicmaps.util.Utils;
import com.google.android.material.textview.MaterialTextView;
import java.util.Objects;
public class ElevationProfileViewRenderer implements PlacePageStateListener

View File

@@ -14,7 +14,8 @@ public class OpenStateTextFormatter
return String.format(Locale.ROOT, "%02d:%02d", hour, minute);
int h = hour % 12;
if (h == 0) h = 12;
if (h == 0)
h = 12;
String ampm = (hour < 12) ? "AM" : "PM";
return String.format(Locale.ROOT, "%d:%02d %s", h, minute, ampm);
}
@@ -29,21 +30,13 @@ public class OpenStateTextFormatter
return t.getDayOfWeek().getDisplayName(TextStyle.SHORT, locale);
}
static String buildAtLabel(
boolean opens,
boolean isToday,
String dayShort,
String time,
String opensAtLocalized,
String closesAtLocalized,
String opensDayAtLocalized,
String closesDayAtLocalized
)
static String buildAtLabel(boolean opens, boolean isToday, String dayShort, String time, String opensAtLocalized,
String closesAtLocalized, String opensDayAtLocalized, String closesDayAtLocalized)
{
if (isToday)
return opens ? String.format(Locale.ROOT, opensAtLocalized, time) // Opens at %s
: String.format(Locale.ROOT, closesAtLocalized, time); // Closes at %s
: String.format(Locale.ROOT, closesAtLocalized, time); // Closes at %s
return opens ? String.format(Locale.ROOT, opensDayAtLocalized, dayShort, time) // Opens %s at %s
: String.format(Locale.ROOT, closesDayAtLocalized, dayShort, time); // Closes %s at %s
: String.format(Locale.ROOT, closesDayAtLocalized, dayShort, time); // Closes %s at %s
}
}

View File

@@ -80,6 +80,6 @@ public class PlacePageButtonFactory
yield R.drawable.ic_more;
}
};
return new PlacePageButton(titleId, iconId, buttonType);
return new PlacePageButton(titleId, iconId, buttonType);
}
}

View File

@@ -31,7 +31,6 @@ import androidx.fragment.app.FragmentFactory;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import app.organicmaps.MwmActivity;
import app.organicmaps.MwmApplication;
import app.organicmaps.R;
@@ -428,7 +427,7 @@ public class PlacePageView extends Fragment
private void updateBookmarkView()
{
boolean enabled = mMapObject.isBookmark() || mMapObject.isTrack();
boolean enabled = mMapObject.isBookmark() || mMapObject.isTrack();
updateViewFragment(PlacePageBookmarkFragment.class, BOOKMARK_FRAGMENT_TAG, R.id.place_page_bookmark_fragment,
enabled);
}
@@ -715,12 +714,10 @@ public class PlacePageView extends Fragment
// map editing is disabled because the map is too old
mTvEditPlace.setEnabled(true);
mTvAddPlace.setEnabled(true);
mTvEditPlace.setOnClickListener((v) -> {
Utils.showSnackbar(v.getContext(), v.getRootView(), R.string.place_page_too_old_to_edit);
});
mTvAddPlace.setOnClickListener((v) -> {
Utils.showSnackbar(v.getContext(), v.getRootView(), R.string.place_page_too_old_to_edit);
});
mTvEditPlace.setOnClickListener(
(v) -> { Utils.showSnackbar(v.getContext(), v.getRootView(), R.string.place_page_too_old_to_edit); });
mTvAddPlace.setOnClickListener(
(v) -> { Utils.showSnackbar(v.getContext(), v.getRootView(), R.string.place_page_too_old_to_edit); });
CountryItem map = CountryItem.fill(countryId);
@@ -765,9 +762,7 @@ public class PlacePageView extends Fragment
mTvAddPlace.setTextColor(editButtonColor);
mTvEditPlace.setStrokeColor(ColorStateList.valueOf(editButtonColor));
mTvAddPlace.setStrokeColor(ColorStateList.valueOf(editButtonColor));
UiUtils.showIf(
UiUtils.isVisible(mEditPlace) || UiUtils.isVisible(mAddPlace),
mEditTopSpace);
UiUtils.showIf(UiUtils.isVisible(mEditPlace) || UiUtils.isVisible(mAddPlace), mEditTopSpace);
}
updateLinksView();
updateOpeningHoursView();
@@ -868,10 +863,9 @@ public class PlacePageView extends Fragment
}
// Get colours
final ForegroundColorSpan colorGreen =
new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_green));
final ForegroundColorSpan colorGreen = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_green));
final ForegroundColorSpan colorYellow =
new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_yellow));
new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_yellow));
final ForegroundColorSpan colorRed = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_red));
// Get next state info
@@ -897,13 +891,12 @@ public class PlacePageView extends Fragment
if (nextStateTime > 0 && nextStateTime < Long.MAX_VALUE / 2)
{
// NOTE: Timezone is currently device timezone. TODO: use feature-specific timezone.
nextChangeLocal = ZonedDateTime.ofInstant(
Instant.ofEpochSecond(nextStateTime), ZoneId.systemDefault()
);
nextChangeLocal = ZonedDateTime.ofInstant(Instant.ofEpochSecond(nextStateTime), ZoneId.systemDefault());
hasFiniteNextChange = true;
}
}
catch (Throwable ignored) {}
catch (Throwable ignored)
{}
}
if (!hasFiniteNextChange) // No valid next change
@@ -918,7 +911,7 @@ public class PlacePageView extends Fragment
}
String localizedTimeString = OpenStateTextFormatter.formatHoursMinutes(
nextChangeLocal.getHour(), nextChangeLocal.getMinute(), DateUtils.is24HourFormat(context));
nextChangeLocal.getHour(), nextChangeLocal.getMinute(), DateUtils.is24HourFormat(context));
final boolean shortHorizonClosing = isOpen && minsToNextState >= 0 && minsToNextState <= SHORT_HORIZON_CLOSE_MIN;
final boolean shortHorizonOpening = !isOpen && minsToNextState >= 0 && minsToNextState <= SHORT_HORIZON_OPEN_MIN;
@@ -926,12 +919,12 @@ public class PlacePageView extends Fragment
if (shortHorizonClosing || shortHorizonOpening) // POI Opens/Closes in 60 mins • at 18:00
{
final String minsToChangeStr = getResources().getQuantityString(
R.plurals.minutes_short, Math.max(minsToNextState, 1), Math.max(minsToNextState, 1));
R.plurals.minutes_short, Math.max(minsToNextState, 1), Math.max(minsToNextState, 1));
final String nextChangeFormatted = getString(isOpen ? R.string.closes_in : R.string.opens_in, minsToChangeStr);
openStateString.append(nextChangeFormatted, colorYellow, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
.append("") // Add spacer
.append(getString(R.string.at, localizedTimeString));
.append("") // Add spacer
.append(getString(R.string.at, localizedTimeString));
}
else
{
@@ -941,18 +934,16 @@ public class PlacePageView extends Fragment
final String closesDayAtStr = getString(R.string.closes_day_at); // "Closes %1$s at %2$s"
final boolean isToday =
OpenStateTextFormatter.isSameLocalDate(nextChangeLocal, ZonedDateTime.now(nextChangeLocal.getZone()));
OpenStateTextFormatter.isSameLocalDate(nextChangeLocal, ZonedDateTime.now(nextChangeLocal.getZone()));
// Full weekday name per design feedback.
final String dayName =
nextChangeLocal.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.getDefault());
final String dayName = nextChangeLocal.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.getDefault());
if (isOpen) // > 60 minutes OR negative (safety). Show “Open now • Closes at 18:00”
{
openStateString.append(getString(R.string.open_now), colorGreen, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
final String atLabel =
OpenStateTextFormatter.buildAtLabel(false, isToday, dayName, localizedTimeString,
opensAtStr, closesAtStr, opensDayAtStr, closesDayAtStr);
final String atLabel = OpenStateTextFormatter.buildAtLabel(
false, isToday, dayName, localizedTimeString, opensAtStr, closesAtStr, opensDayAtStr, closesDayAtStr);
if (!TextUtils.isEmpty(atLabel))
openStateString.append("").append(atLabel);
@@ -961,9 +952,8 @@ public class PlacePageView extends Fragment
{
openStateString.append(getString(R.string.closed_now), colorRed, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
final String atLabel =
OpenStateTextFormatter.buildAtLabel(true, isToday, dayName, localizedTimeString,
opensAtStr, closesAtStr, opensDayAtStr, closesDayAtStr);
final String atLabel = OpenStateTextFormatter.buildAtLabel(
true, isToday, dayName, localizedTimeString, opensAtStr, closesAtStr, opensDayAtStr, closesDayAtStr);
if (!TextUtils.isEmpty(atLabel))
openStateString.append("").append(atLabel);

View File

@@ -3,9 +3,7 @@ package app.organicmaps.widget.placepage;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import app.organicmaps.sdk.bookmarks.data.MapObject;
import java.util.List;
public class PlacePageViewModel extends ViewModel

View File

@@ -32,7 +32,8 @@ import app.organicmaps.widget.placepage.PlacePageViewModel;
import com.google.android.material.textview.MaterialTextView;
public class PlacePageBookmarkFragment extends Fragment implements View.OnClickListener, View.OnLongClickListener,
Observer<MapObject>, EditBookmarkFragment.EditBookmarkListener
Observer<MapObject>,
EditBookmarkFragment.EditBookmarkListener
{
private View mFrame;
private MaterialTextView mTvBookmarkNote;
@@ -90,15 +91,15 @@ public class PlacePageBookmarkFragment extends Fragment implements View.OnClickL
private void updateBookmarkDetails()
{
String notes = null;
if (currentBookmark != null)
{
notes = currentBookmark.getBookmarkDescription();
}
if (currentTrack != null)
{
notes = currentTrack.getTrackDescription();
}
String notes = null;
if (currentBookmark != null)
{
notes = currentBookmark.getBookmarkDescription();
}
if (currentTrack != null)
{
notes = currentTrack.getTrackDescription();
}
if (TextUtils.isEmpty(notes))
{
UiUtils.hide(mTvBookmarkNote);
@@ -132,13 +133,13 @@ public class PlacePageBookmarkFragment extends Fragment implements View.OnClickL
final FragmentActivity activity = requireActivity();
if (currentBookmark != null)
{
EditBookmarkFragment.editBookmark(currentBookmark.getCategoryId(), currentBookmark.getBookmarkId(), activity,
getChildFragmentManager(), PlacePageBookmarkFragment.this);
EditBookmarkFragment.editBookmark(currentBookmark.getCategoryId(), currentBookmark.getBookmarkId(), activity,
getChildFragmentManager(), PlacePageBookmarkFragment.this);
}
else if (currentTrack != null)
{
EditBookmarkFragment.editBookmark(currentTrack.getCategoryId(), currentTrack.getTrackId(), activity,
getChildFragmentManager(), PlacePageBookmarkFragment.this);
EditBookmarkFragment.editBookmark(currentTrack.getCategoryId(), currentTrack.getTrackId(), activity,
getChildFragmentManager(), PlacePageBookmarkFragment.this);
}
}

View File

@@ -13,15 +13,13 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.sdk.Framework;
import app.organicmaps.sdk.bookmarks.data.ChargeSocketDescriptor;
import app.organicmaps.sdk.bookmarks.data.MapObject;
import app.organicmaps.widget.placepage.PlacePageViewModel;
import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.textview.MaterialTextView;
import java.text.DecimalFormat;
public class PlacePageChargeSocketsFragment extends Fragment implements Observer<MapObject>
@@ -96,8 +94,8 @@ public class PlacePageChargeSocketsFragment extends Fragment implements Observer
}
@SuppressLint("DiscouragedApi")
int resTypeId =
getResources().getIdentifier("charge_socket_" + socket.visualType(), "string", requireContext().getPackageName());
int resTypeId = getResources().getIdentifier("charge_socket_" + socket.visualType(), "string",
requireContext().getPackageName());
if (resTypeId != 0)
{
type.setText(resTypeId);
@@ -108,7 +106,8 @@ public class PlacePageChargeSocketsFragment extends Fragment implements Observer
DecimalFormat df = new DecimalFormat("#.##");
power.setText(getString(R.string.kw_label, df.format(socket.power())));
}
else if (socket.ignorePower()) {
else if (socket.ignorePower())
{
power.setVisibility(INVISIBLE);
}

View File

@@ -191,8 +191,9 @@ public class PlacePageLinksFragment extends Fragment implements Observer<MapObje
case FMD_PANORAMAX -> null; // Don't add raw ID to list, as it's useless for users.
default -> mMapObject.getMetadata(type);
};
// Add user names for social media if available
if (!TextUtils.isEmpty(title) && !title.equals(url) && !title.contains("/")) items.add(title);
// Add user names for social media if available
if (!TextUtils.isEmpty(title) && !title.equals(url) && !title.contains("/"))
items.add(title);
if (items.size() == 1)
PlacePageUtils.copyToClipboard(requireContext(), mFrame, items.get(0));

View File

@@ -3,12 +3,13 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
style="@style/Widget.Material3.CardView.Filled"
style="@style/Widget.Material3.CardView.Elevated"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/margin_half"
app:cardBackgroundColor="?attr/colorSurfaceContainerHigh"
app:cardCornerRadius="28dp">
app:cardCornerRadius="28dp"
app:cardElevation="@dimen/m3_sys_elevation_level3">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"

View File

@@ -41,5 +41,5 @@
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_gravity="bottom|start"
android:background="?colorSurfaceContainerLow"/>
android:background="?appBackground"/>
</FrameLayout>

View File

@@ -8,7 +8,7 @@
android:layout_margin="4dp"
android:clickable="true"
android:focusable="true"
app:cardBackgroundColor="?cardBackground"
app:cardBackgroundColor="?appBackground"
app:cardCornerRadius="12dp"
app:cardElevation="2dp"
tools:showIn="@layout/item_charging_sockets">

View File

@@ -5,9 +5,10 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.Material3.CardView.Filled"
style="@style/Widget.Material3.CardView.Elevated"
app:cardBackgroundColor="?attr/colorSurfaceContainerHigh"
app:cardCornerRadius="28dp">
app:cardCornerRadius="28dp"
app:cardElevation="@dimen/m3_sys_elevation_level3">
<LinearLayout
android:orientation="vertical"
android:minWidth="@dimen/bookmark_purchase_img_width"

View File

@@ -2,14 +2,15 @@
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/Widget.Material3.CardView.Filled"
style="@style/Widget.Material3.CardView.Elevated"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_double_and_half"
android:minWidth="@dimen/dialog_min_width"
android:minHeight="@dimen/dialog_min_height"
app:cardBackgroundColor="?attr/colorSurfaceContainerHigh"
app:cardCornerRadius="28dp">
app:cardCornerRadius="28dp"
app:cardElevation="@dimen/m3_sys_elevation_level3">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"

View File

@@ -3,12 +3,13 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
style="@style/Widget.Material3.CardView.Filled"
style="@style/Widget.Material3.CardView.Elevated"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/margin_half"
app:cardBackgroundColor="?attr/colorSurfaceContainerHigh"
app:cardCornerRadius="28dp">
app:cardCornerRadius="28dp"
app:cardElevation="@dimen/m3_sys_elevation_level3">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"

View File

@@ -6,6 +6,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:background="@color/bg_editor"
tools:context=".editor.EditorActivity">
<LinearLayout
android:layout_width="match_parent"
@@ -430,7 +431,6 @@
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginBottom="@dimen/margin_quarter"
app:backgroundTint="?cardBackground"
android:textColor="@color/base_red"
app:strokeColor="@color/base_red"
android:text="@string/editor_business_vacant_button"/>
@@ -441,7 +441,6 @@
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginBottom="@dimen/margin_base"
app:backgroundTint="?cardBackground"
android:textColor="@color/base_red"
app:strokeColor="@color/base_red"
tools:text="Reset my changes"/>

View File

@@ -2,10 +2,9 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="?windowBackgroundForced"
android:orientation="vertical">
<com.google.android.material.appbar.MaterialToolbar

View File

@@ -10,13 +10,13 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frameLayout"
android:background="?windowBackgroundForced">
android:background="@color/bg_editor"
android:layout_marginBottom="@dimen/margin_quarter">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/phones_recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?cardBackground"
android:scrollbars="vertical" />
</FrameLayout>

View File

@@ -9,7 +9,7 @@
style="@style/MwmWidget.FrameLayout.Elevation"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?windowBackgroundForced"
android:background="@color/bg_editor"
android:layout_above="@+id/tv__mode_switch"
android:layout_below="@id/toolbar"/>
@@ -19,14 +19,13 @@
android:layout_height="wrap_content"
android:layout_alignTop="@+id/tv__mode_switch"
android:layout_alignParentBottom="true"
android:background="?cardBackground"/>
android:background="@color/bg_editor"/>
<com.google.android.material.textview.MaterialTextView
android:id="@+id/tv__mode_switch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="?clickableBackground"
android:gravity="center_vertical"
android:padding="@dimen/margin_base"
android:text="@string/editor_time_advanced"
@@ -35,7 +34,7 @@
android:textColor="?colorSecondary" />
<include
layout="@layout/shadow_bottom"
layout="@layout/item_divider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/tv__mode_switch"/>

View File

@@ -5,7 +5,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?windowBackgroundForced">
android:background="@color/bg_editor">
<LinearLayout
android:layout_width="match_parent"
@@ -17,8 +17,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_half"
style="@style/MwmWidget.M3.Editor.CardView"
app:cardBackgroundColor="?cardBackground">
style="@style/MwmWidget.M3.Editor.CardView">
<LinearLayout
android:id="@+id/examples"

View File

@@ -4,7 +4,7 @@
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?windowBackgroundForced"
android:background="@color/bg_editor"
android:paddingStart="@dimen/margin_half"
android:paddingEnd="@dimen/margin_half"
android:scrollbars="vertical"/>

View File

@@ -6,7 +6,7 @@
android:layout_margin="4dp"
android:clickable="true"
android:focusable="true"
app:cardBackgroundColor="?cardBackground"
app:cardBackgroundColor="?appBackground"
app:cardCornerRadius="12dp"
app:cardElevation="2dp">

View File

@@ -21,5 +21,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/edit_socket_info_tooltip"
android:textAppearance="?android:attr/textAppearanceSmall" />
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_marginBottom="@dimen/margin_quarter"/>
</LinearLayout>

View File

@@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/margin_direction_big"
android:layout_marginTop="@dimen/margin_base_plus_quarter"
android:orientation="vertical">
<FrameLayout

View File

@@ -40,5 +40,5 @@
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_gravity="bottom|center"
android:background="?colorSurfaceContainerLow"/>
android:background="?appBackground"/>
</FrameLayout>

View File

@@ -7,6 +7,7 @@
android:orientation="vertical"
android:paddingEnd="@dimen/margin_base"
android:paddingStart="@dimen/margin_base"
android:background="@color/fg_editor"
android:animateLayoutChanges="true">
<com.google.android.material.textview.MaterialTextView
@@ -20,7 +21,12 @@
android:textAppearance="@style/MwmTextAppearance.Body3"
tools:drawableEnd="@drawable/ic_expand_more" />
<include layout="@layout/recycler_default" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/fg_editor"
android:scrollbars="vertical"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/more_names"

View File

@@ -4,5 +4,5 @@
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?cardBackground"
android:background="?appBackground"
android:scrollbars="vertical"/>

View File

@@ -9,7 +9,7 @@
<string name="delete">Изтриване</string>
<string name="download_maps">Изтегляне на карти</string>
<!-- Settings/Downloader - info for country when download fails -->
<string name="download_has_failed">Изтеглянето се провали. Натиснете, за да опитате отново.</string>
<string name="download_has_failed">Изтеглянето се провали, затиснете, за да опитате отново</string>
<!-- Settings/Downloader - info for country which started downloading -->
<string name="downloading">Теглене…</string>
<!-- Choose measurement on first launch alert - choose metric system button -->
@@ -27,7 +27,7 @@
<!-- A dialog title, that warns a user that Precise Location is disabled and suggests to turn it on -->
<string name="limited_accuracy">Ограничена точност</string>
<!-- A dialog text, that warns a user that Precise Location is disabled and suggests to turn it on -->
<string name="precise_location_is_disabled_long_text">За да осигурите точна навигация, активирайте функцията \"Точно местоположение\" в настройките.</string>
<string name="precise_location_is_disabled_long_text">За да осигурите точна навигация, активирайте функцията \"Точно местоположение\" в настройките</string>
<!-- View and button titles for accessibility -->
<string name="zoom_to_country">Показване на картата</string>
<!-- Message to display at the center of the screen when the country download has failed -->
@@ -66,11 +66,11 @@
<!-- "Add new bookmark list" dialog title -->
<string name="add_new_set">Добавяне на нова група</string>
<!-- Add Bookmark list dialog - hint when the list name is empty -->
<string name="bookmark_set_name">Име на група</string>
<string name="bookmark_set_name">Име на списък</string>
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
<string name="bookmarks">Отметки</string>
<string name="bookmarks">Места</string>
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
<string name="bookmarks_and_tracks">Отметки и пътеки</string>
<string name="bookmarks_and_tracks">Любими</string>
<!-- Add bookmark dialog - bookmark name -->
<string name="name">Име</string>
<!-- Editor title above street and house number, duplicates [type.building.address] in types_strings.txt -->

View File

@@ -66,11 +66,11 @@
<!-- "Add new bookmark list" dialog title -->
<string name="add_new_set">Afegeix una llista nova</string>
<!-- Add Bookmark list dialog - hint when the list name is empty -->
<string name="bookmark_set_name">Nom de la llista de marcadors</string>
<string name="bookmark_set_name">Nom de la llista</string>
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
<string name="bookmarks">Marcadors</string>
<string name="bookmarks">Llocs</string>
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
<string name="bookmarks_and_tracks">Marcadors i recorreguts</string>
<string name="bookmarks_and_tracks">Preferits</string>
<!-- Add bookmark dialog - bookmark name -->
<string name="name">Nom</string>
<!-- Editor title above street and house number, duplicates [type.building.address] in types_strings.txt -->
@@ -146,14 +146,14 @@
<!-- Notes field in Bookmarks view -->
<string name="description">Notes</string>
<!-- Email Subject when sharing bookmark list -->
<string name="share_bookmarks_email_subject">Marcadors d\'CoMaps compartits</string>
<string name="share_bookmarks_email_body">Hola! \n \nAdjunto els meus marcadors de l\'aplicació CoMaps. Obriu-los si teniu l\'CoMaps instal·lat. O, si no teniu l\'aplicació, baixeu-la per al vostre aparell iOS o Android seguint aquest enllaç: https://www.comaps.app/download/ \n \nGaudiu viatjant amb l\'CoMaps!</string>
<string name="share_bookmarks_email_subject">Els meus preferits de CoMaps</string>
<string name="share_bookmarks_email_body">Hola! \n \nAdjunto els meus marcadors de l\'aplicació CoMaps. Obriu-los si teniu l\'CoMaps instal·lat. O, si no teniu l\'aplicació, baixeu-la per al vostre dispositiu iOS o Android seguint aquest enllaç: https://www.comaps.app/download/ \n \nGaudiu viatjant amb l\'CoMaps!</string>
<!-- message title of loading file -->
<string name="load_kmz_title">S\'estan carregant els marcadors</string>
<string name="load_kmz_title">Carregant Preferits</string>
<!-- Kmz file successful loading -->
<string name="load_kmz_successful">Els marcadors shan carregat correctament. Els trobareu al mapa i a la pantalla de gestió de marcadors.</string>
<string name="load_kmz_successful">Els preferits shan carregat correctament. Els trobareu al mapa i a la pantalla de gestió de preferits.</string>
<!-- Kml file loading failed -->
<string name="load_kmz_failed">No s\'ha pogut carregar els marcadors. El fitxer pot ser malmès o defectuós.</string>
<string name="load_kmz_failed">No s\'han pogut carregar els preferits. El fitxer pot estar corromput o ser defectuós.</string>
<!-- Failed to recognize the format of a bookmarks or tracks file. -->
<string name="unknown_file_type">L\'aplicació no reconeix el tipus de fitxer: \n%1$s</string>
<!-- Failed to open a bookmarks or tracks file in CoMaps. -->
@@ -499,7 +499,7 @@
<string name="minute">min</string>
<string name="day">d</string>
<string name="placepage_more_button">Més</string>
<string name="placepage_edit_bookmark_button">Edita el marcador</string>
<string name="placepage_edit_bookmark_button">Edita el Lloc Desat</string>
<string name="placepage_personal_notes_hint">Notes personals (text o html)</string>
<string name="editor_reset_edits_message">Voleu descartar tots els canvis locals?</string>
<string name="editor_reset_edits_button">Descartar canvis</string>
@@ -564,18 +564,18 @@
<string name="dialog_error_storage_message">L\'emmagatzematg extern no és accessible. La targeta SD potser s\'ha retirat, malmès, o el sistema de fitxer és de només lectura. Comproveu la targeta SD o contacteu amb nosaltres a support@comaps.app</string>
<string name="setting_emulate_bad_storage">Emula un emmagatzematge malmès</string>
<string name="error_enter_correct_name">Introduïu un nom correcte</string>
<string name="bookmark_lists">Llistes</string>
<string name="bookmark_lists">Llista de Preferits</string>
<!-- Do not display all bookmark lists on the map -->
<string name="bookmark_lists_hide_all">Amaga-ho tot</string>
<string name="bookmark_lists_show_all">Mostra-ho tot</string>
<plurals name="bookmarks_places">
<item quantity="one">%d marcador</item>
<item quantity="many">%d marcadors</item>
<item quantity="other">%d marcadors</item>
<item quantity="one">%d lloc desat</item>
<item quantity="many">%d llocs desats</item>
<item quantity="other">%d llocs desats</item>
</plurals>
<string name="bookmarks_create_new_group">Crea una llista</string>
<!-- Bookmark categories screen, button that opens folder selection dialog to import KML/KMZ/GPX/KMB files -->
<string name="bookmarks_import">Importa marcadors i recorreguts</string>
<string name="bookmarks_import">Importar preferits</string>
<string name="bookmarks_error_message_share_general">No s\'ha pogut compartir a causa d\'un error de l\'aplicació</string>
<string name="bookmarks_error_title_share_empty">Error al compartir</string>
<string name="bookmarks_error_message_share_empty">No es pot compartir una llista buida</string>
@@ -606,7 +606,7 @@
<string name="subway">Metro</string>
<string name="layers_title">Estils i capes del mapa</string>
<string name="bookmarks_empty_list_title">Aquesta llista és buida</string>
<string name="bookmarks_empty_list_message">Per a afegir un marcador, toqueu un lloc en el mapa i després toqueu la icona d\'estrella</string>
<string name="bookmarks_empty_list_message">Per a desar un lloc, toqueu-ne un en el mapa i després toqueu la icona d\'estrella</string>
<string name="category_desc_more">…més</string>
<string name="export_file">Exporta KMZ</string>
<string name="export_file_gpx">Exporta GPX</string>
@@ -659,7 +659,7 @@
<!-- max. 10 symbols, both iOS and Android -->
<string name="sort">Ordena…</string>
<!-- Android, title, max 20-22 symbols -->
<string name="sort_bookmarks">Ordena els marcadors</string>
<string name="sort_bookmarks">Ordenar preferits</string>
<!-- Android -->
<string name="by_default">Per defecte</string>
<!-- Android -->
@@ -777,7 +777,7 @@
<string name="browser_not_available">El navegador web no està disponible</string>
<string name="volume">Volum</string>
<!-- Bookmark categories screen, button that opens share dialog to export all bookmarks and tracks -->
<string name="bookmarks_export">Exporta tots els marcadors i recorreguts</string>
<string name="bookmarks_export">Exporta tots els llocs i recorreguts</string>
<!-- button in (app) TTS settings, to open the system TTS settings. -->
<string name="pref_tts_open_system_settings">Paràmetres de la síntesi de veu del sistema</string>
<!-- toast displayed when pressing the "Speech synthesis system settings" button, and the system settings aren't found. -->
@@ -809,7 +809,7 @@
<!-- Title for the "Stop Without Saving" action for the alert when saving a track recording. -->
<string name="continue_recording">Continuar enregistrant</string>
<!-- Title for the alert when saving a track recording. -->
<string name="track_recording_alert_title">Voleu desar lenregistrament a Marcadors i recorreguts?</string>
<string name="track_recording_alert_title">Desar en preferits?</string>
<!-- Message for the toast when saving the track recording is finished but nothing to save. -->
<string name="track_recording_toast_nothing_to_save">El recorregut està buit; no hi ha res a desar</string>
<!-- Error message when there are no File Manager apps installed to select a folder when importing Bookmarks and Tracks -->
@@ -839,11 +839,11 @@
<string name="pref_left_button_disable">Desactivar</string>
<string name="editor_level">Pis (0 és la planta baixa)</string>
<string name="error_enter_correct_bluesky_page">Introdueix un nom d\'usuari o una adreça web de Bluesky vàlids</string>
<string name="pref_backup_title">Còpia de seguretat de marcadors i recorreguts</string>
<string name="pref_backup_title">Còpia de seguretat de preferits</string>
<string name="pref_left_button_title">Configuració del botó esquerre</string>
<string name="pref_backup_summary">Còpia de seguretat automàtica a un directori del teu dispositiu</string>
<string name="pref_backup_now_summary_ok">Còpia de seguretat completada amb èxit</string>
<string name="pref_backup_now_summary_empty_lists">No hi ha marcadors o recorreguts per a fer una còpia de seguretat</string>
<string name="pref_backup_now_summary_empty_lists">No hi ha llocs o recorreguts per a fer una còpia de seguretat</string>
<string name="pref_backup_now_summary_failed">Còpia de seguretat fallida</string>
<string name="pref_backup_now_summary_folder_unavailable">El directori de la còpia de seguretat no està disponible</string>
<string name="pref_backup_status_summary_success">Última còpia de seguretat amb èxit</string>
@@ -860,7 +860,7 @@
<string name="pedestrian">A peu</string>
<string name="bicycle">Bicicleta</string>
<string name="ruler">Regle</string>
<string name="bookmark_color">Color del marcador</string>
<string name="bookmark_color">Color del preferit</string>
<string name="about_help">Quant a i Ajuda</string>
<string name="open_now">Obert ara</string>
<string name="closed_now">Tancat ara</string>
@@ -925,4 +925,5 @@
<string name="download_resources_custom_url_message">Sobreescriu el servidor de descàrrega de mapes per defecte. Deixa en blanc per a emprar el servidor per defecte de CoMaps.</string>
<string name="download_resources_custom_url_summary_none">No establert</string>
<string name="download_resources_custom_url_error_scheme">Per favor introdueix una URL que comence amb http:// o https://</string>
<string name="pref_maplanguage_local">Idioma Local</string>
</resources>

View File

@@ -892,7 +892,7 @@
<string name="avoid_paved">Vyhnout se zpevněným cestám</string>
<string name="opens_at">Otevírá v %s</string>
<string name="closes_at">Zavírá v %s</string>
<string name="opens_day_at">Otevírá %1$s v %2$s</string>
<string name="opens_day_at">Otevírá v %1$s v %2$s</string>
<string name="closes_day_at">Zavírá %1$s v %2$s</string>
<string name="editor_business_vacant_button">Podnik je volný</string>
<string name="editor_mark_business_vacant_title">Označit podnik jako volný</string>

View File

@@ -153,7 +153,7 @@
<!-- message title of loading file -->
<string name="load_kmz_title">Favoriten laden</string>
<!-- Kmz file successful loading -->
<string name="load_kmz_successful">Lesezeichen erfolgreich geladen! Du kannst dieses nun auf deiner Karte oder im Lesezeichen-Manager anzeigen lassen.</string>
<string name="load_kmz_successful">Lesezeichen erfolgreich geladen! Du kannst diese auf deiner Karte oder im Lesezeichen-Manager anzeigen lassen.</string>
<!-- Kml file loading failed -->
<string name="load_kmz_failed">Laden der Lesezeichen fehlgeschlagen. Die Datei könnte beschädigt oder defekt sein.</string>
<!-- Failed to recognize the format of a bookmarks or tracks file. -->
@@ -258,7 +258,7 @@
<!-- Update all button text -->
<string name="downloader_update_all_button">Alle Karten aktualisieren</string>
<!-- Cancel all button text -->
<string name="downloader_cancel_all">Alle abbrechen</string>
<string name="downloader_cancel_all">Alles abbrechen</string>
<!-- Downloaded maps list header -->
<string name="downloader_downloaded_subtitle">Heruntergeladen</string>
<!-- Country queued for download -->
@@ -281,7 +281,7 @@
<!-- Item in context menu. -->
<string name="downloader_update_map">Karte aktualisieren</string>
<!-- Preference title -->
<string name="google_play_services">Google Fused-Standortdienste</string>
<string name="google_play_services">Google-Standortverknüpfungsdienst</string>
<!-- Preference text -->
<string name="pref_use_google_play">Ein proprietärer Dienst, der GPS, Wi-Fi, Mobilfunknetzwerke etc. kombiniert, um den Standort genauer zu bestimmen. Er kann sich mit Google-Servern verbinden.</string>
<!-- Preference title -->
@@ -370,13 +370,13 @@
<!-- The message when user did not find anything in the search. -->
<string name="search_not_found_query">Lade die Region herunter, in der du suchst, oder füge den Namen einer nahe gelegenen Stadt oder eines Dorfes hinzu.</string>
<string name="search_history_title">Suchverlauf</string>
<string name="search_history_text">Ihre letzten Suchanfragen anzeigen</string>
<string name="search_history_text">Deine letzten Suchanfragen anzeigen</string>
<string name="clear_search">Suchverlauf löschen</string>
<string name="p2p_your_location">Dein Standort</string>
<string name="p2p_start">Start</string>
<string name="p2p_from_here">Route von</string>
<string name="p2p_to_here">Route nach</string>
<string name="p2p_only_from_current">Die Navigation ist nur von Ihrem aktuellen Standort aus möglich</string>
<string name="p2p_only_from_current">Die Navigation ist nur von deinem aktuellen Standort aus möglich</string>
<string name="p2p_reroute_from_current">Soll eine Route von deinem aktuellen Standort aus berechnet werden?</string>
<!-- Edit open hours/set time and minutes dialog -->
<string name="next_button">Weiter</string>
@@ -417,14 +417,14 @@
<string name="edit_opening_hours">Öffnungszeiten bearbeiten</string>
<string name="no_osm_account">Kein Konto bei OpenStreetMap?</string>
<string name="register_at_openstreetmap">Bei OpenStreetMap registrieren</string>
<string name="login">Bei OpenStreetMap anmelden</string>
<string name="login">Anmelden</string>
<!-- Status message indicating that user did not login to OSM profile yet. -->
<string name="not_signed_in">Nicht angemeldet</string>
<string name="login_osm">Bei OpenStreetMap anmelden</string>
<string name="logout">Abmelden</string>
<string name="edit_place">Eintrag bearbeiten</string>
<string name="add_language">Eine Sprache hinzufügen</string>
<string name="street">Straße</string>
<string name="street">Innerortsstraße</string>
<!-- Editable House Number text field (in address block). -->
<string name="house_number">Hausnummer</string>
<string name="details">Einzelheiten</string>
@@ -505,7 +505,7 @@
<string name="editor_reset_edits_button">Änderungen verwerfen</string>
<string name="editor_remove_place_message">Hinzugefügtes Objekt löschen?</string>
<string name="editor_remove_place_button">Löschen</string>
<string name="editor_place_doesnt_exist">Dieser Ort existiert nicht</string>
<string name="editor_place_doesnt_exist">Ort existiert nicht</string>
<!-- Error message for "Place doesn't exist" dialog when comment is empty -->
<string name="delete_place_empty_comment_error">Gebe bitte den Grund für die Löschung an</string>
<!-- Phone number error message -->
@@ -844,7 +844,7 @@
<string name="pref_backup_summary">Backup automatisch in einem Ordner auf deinem Gerät erstellen</string>
<string name="pref_backup_now_summary">Backup sofort erstellen</string>
<string name="pref_backup_now_summary_ok">Backup erfolgreich abgeschlossen</string>
<string name="pref_backup_now_summary_empty_lists">Keine Orte und Tracks zum Sichern</string>
<string name="pref_backup_now_summary_empty_lists">Keine Orte und Tracks für ein Backup vorhanden</string>
<string name="pref_backup_now_summary_failed">Backup fehlgeschlagen</string>
<string name="pref_backup_now_summary_folder_unavailable">Der Backup-Ordner ist nicht verfügbar</string>
<string name="pref_backup_location_summary_initial">Bitte wähle zuerst einen Ordner und erteile die Berechtigung</string>

View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>

View File

@@ -68,9 +68,9 @@
<!-- "Add new bookmark list" dialog title -->
<string name="add_new_set">Agregar una lista nueva</string>
<!-- Add Bookmark list dialog - hint when the list name is empty -->
<string name="bookmark_set_name">Nombre de la lista de marcadores</string>
<string name="bookmark_set_name">Nombre de la lista</string>
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
<string name="bookmarks">Marcadores</string>
<string name="bookmarks">Lugares</string>
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
<string name="bookmarks_and_tracks">Favoritos</string>
<!-- Add bookmark dialog - bookmark name -->
@@ -107,7 +107,7 @@
<!-- Search category for public transport; any changes should be duplicated in categories.txt @category_transport! -->
<string name="category_transport">Transporte</string>
<!-- Search category for fuel stations; any changes should be duplicated in categories.txt @category_fuel! -->
<string name="category_fuel">Estación de Servicio</string>
<string name="category_fuel">Estación de servicio</string>
<!-- Search category for parking lots; any changes should be duplicated in categories.txt @category_parking! -->
<string name="category_parking">Aparcamiento</string>
<!-- Search category for malls/clothes/shoes/gifts/jewellery/sport shops; any changes should be duplicated in categories.txt @category_shopping! -->
@@ -524,7 +524,7 @@
<!-- Displayed when saving some edits to the map to warn against publishing personal data -->
<string name="editor_share_to_all_dialog_title">¿Quieres enviarlo a todos los usuarios?</string>
<!-- Dialog before publishing the modifications to the public map. -->
<string name="editor_share_to_all_dialog_message_1">Asegúrate de que no has introducido ningún dato privado o personal</string>
<string name="editor_share_to_all_dialog_message_1">Asegúrate de que no has introducido ningún dato privado o personal.</string>
<string name="editor_share_to_all_dialog_message_2">Los editores de OpenStreetMap comprobarán los cambios y se pondrán en contacto contigo si tienen alguna pregunta.</string>
<string name="navigation_stop_button">Detener</string>
<!-- Shown as toast when starting the recent track recording -->
@@ -578,7 +578,7 @@
</plurals>
<string name="bookmarks_create_new_group">Crear nueva lista</string>
<!-- Bookmark categories screen, button that opens folder selection dialog to import KML/KMZ/GPX/KMB files -->
<string name="bookmarks_import">Importar marcadores y trazas</string>
<string name="bookmarks_import">Importar favoritos</string>
<string name="bookmarks_error_message_share_general">No se puede compartir debido a un error de la aplicación</string>
<string name="bookmarks_error_title_share_empty">Error al compartir</string>
<string name="bookmarks_error_message_share_empty">No se puede compartir una lista vacía</string>
@@ -662,7 +662,7 @@
<!-- max. 10 symbols, both iOS and Android -->
<string name="sort">Ordenar…</string>
<!-- Android, title, max 20-22 symbols -->
<string name="sort_bookmarks">Ordenar marcadores</string>
<string name="sort_bookmarks">Exportar favoritos</string>
<!-- Android -->
<string name="by_default">Por defecto</string>
<!-- Android -->
@@ -814,7 +814,7 @@
<!-- Title for the "Stop Without Saving" action for the alert when saving a track recording. -->
<string name="continue_recording">Continuar grabación</string>
<!-- Title for the alert when saving a track recording. -->
<string name="track_recording_alert_title">¿Guardar en Marcadores y trayectos?</string>
<string name="track_recording_alert_title">¿Guardar en Favoritos?</string>
<!-- Message for the toast when saving the track recording is finished but nothing to save. -->
<string name="track_recording_toast_nothing_to_save">El trayecto está vacío; no hay nada que guardar</string>
<!-- Error message when there are no File Manager apps installed to select a folder when importing Bookmarks and Tracks -->
@@ -845,14 +845,14 @@
<string name="about_help">Acerca de y Ayuda</string>
<string name="clear">Limpiar</string>
<string name="ruler">Regla</string>
<string name="bookmark_color">Color del marcador</string>
<string name="pref_backup_title">Copia de seguridad de marcadores y trayectos</string>
<string name="bookmark_color">Color del favorito</string>
<string name="pref_backup_title">Respaldar favoritos</string>
<string name="pref_backup_summary">Copia de seguridad automática a una carpeta de tu dispositivo</string>
<string name="pref_backup_now_title">Realizar copia de seguridad ahora</string>
<string name="pref_backup_now_summary">Crear copia de seguridad inmediatamente</string>
<string name="pref_backup_now_summary_progress">Copia de seguridad en progreso…</string>
<string name="pref_backup_now_summary_ok">Copia de seguridad completada con éxito</string>
<string name="pref_backup_now_summary_empty_lists">No hay marcadores ni trayectos para hacer una copia de seguridad</string>
<string name="pref_backup_now_summary_empty_lists">No hay marcadores ni trayectos para hacer un respaldo</string>
<string name="pref_backup_now_summary_failed">Copia de seguridad fallida</string>
<string name="pref_backup_now_summary_folder_unavailable">La carpeta de copia de seguridad no está disponible</string>
<string name="pref_backup_location_summary_initial">Selecciona por favor primero una carpeta y concede permiso</string>
@@ -927,4 +927,5 @@
<string name="download_resources_custom_url_message">Sobreescribe el servidor de mapas por defecto. Déjalo en blanco para usar el servidor de CoMaps por defecto.</string>
<string name="download_resources_custom_url_summary_none">No establecido</string>
<string name="download_resources_custom_url_error_scheme">Por favor introduce un URL empezando con http:// o https://</string>
<string name="pref_maplanguage_local">Idioma local</string>
</resources>

View File

@@ -70,7 +70,7 @@
<!-- Add Bookmark list dialog - hint when the list name is empty -->
<string name="bookmark_set_name">Nom du groupe de signets</string>
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
<string name="bookmarks">Signets</string>
<string name="bookmarks">Lieux</string>
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
<string name="bookmarks_and_tracks">Signets et traces</string>
<!-- Add bookmark dialog - bookmark name -->
@@ -148,14 +148,14 @@
<!-- Notes field in Bookmarks view -->
<string name="description">Notes</string>
<!-- Email Subject when sharing bookmark list -->
<string name="share_bookmarks_email_subject">Signets CoMaps partagés avec vous</string>
<string name="share_bookmarks_email_body">Bonjour !\n \nVous trouverez ci-joint mes signets de lappli CoMaps, à ouvrir dans lapplication CoMaps. Si vous ne lavez pas, téléchargez-la en suivant ce lien : https://www.comaps.app/download/ \n \nBon voyage avec CoMaps !</string>
<string name="share_bookmarks_email_subject">Mes favoris CoMaps.</string>
<string name="share_bookmarks_email_body">Bonjour,\n \nVous trouverez ci-joint mes favoris, veuillez les ouvrir dans lapplication CoMaps. Si vous ne lavez pas encore installée, téléchargez l\'application depuis : https://www.comaps.app/download/ \n \nBon voyage avec CoMaps !</string>
<!-- message title of loading file -->
<string name="load_kmz_title">Chargement des signets</string>
<string name="load_kmz_title">Chargement des Favoris</string>
<!-- Kmz file successful loading -->
<string name="load_kmz_successful">Les signets ont été chargés avec succès ! Vous pouvez les trouver sur la carte ou sur lécran du Gestionnaire de signets.</string>
<string name="load_kmz_successful">Les favoris ont été chargés avec succès ! Vous pouvez les trouver sur la carte ou sur lécran du Gestionnaire des Favoris.</string>
<!-- Kml file loading failed -->
<string name="load_kmz_failed">Échec lors du chargement des signets. Le fichier pourrait être corrompu ou défectueux.</string>
<string name="load_kmz_failed">Erreur lors du chargement des Favoris. Le fichier pourrait être corrompu ou défectueux.</string>
<!-- Failed to recognize the format of a bookmarks or tracks file. -->
<string name="unknown_file_type">Le type de fichier nest pas reconnu par lappli :\n%1$s</string>
<!-- Failed to open a bookmarks or tracks file in CoMaps. -->
@@ -567,7 +567,7 @@
<string name="dialog_error_storage_message">Le stockage externe nest pas disponible. La carte SD a probablement été enlevée, endommagée ou le système est en lecture seule. Veuillez vérifier votre carte SD ou nous contacter via support@comaps.app</string>
<string name="setting_emulate_bad_storage">Émuler le mauvais stockage</string>
<string name="error_enter_correct_name">Veuillez saisir un nom correct</string>
<string name="bookmark_lists">Listes</string>
<string name="bookmark_lists">Listes de favoris</string>
<!-- Do not display all bookmark lists on the map -->
<string name="bookmark_lists_hide_all">Tout masquer</string>
<string name="bookmark_lists_show_all">Tout afficher</string>
@@ -843,7 +843,7 @@
<string name="pedestrian">À pied</string>
<string name="bicycle">À vélo</string>
<string name="ruler">Règle</string>
<string name="bookmark_color">Couleur du marque-page</string>
<string name="bookmark_color">Couleur des Favoris</string>
<string name="panoramax">Image Panoramax</string>
<string name="pref_backup_now_title">Enregistrer maintenant</string>
<string name="backup_interval_every_day">Quotidien</string>
@@ -926,4 +926,5 @@
<string name="download_resources_custom_url_title">Serveur de cartes personnalisé</string>
<string name="download_resources_custom_url_error_scheme">Veuillez saisir une URL complète commençant par http:// ou https://</string>
<string name="download_resources_custom_url_message">Serveur pour télécharger les cartes. Laissez vide pour utiliser le serveur par défaut CoMaps.</string>
<string name="pref_maplanguage_local">Langue locale</string>
</resources>

View File

@@ -15,7 +15,7 @@
<string name="zoom_to_country">Prikaži na karti</string>
<string name="country_status_download_failed">Preuzimanje neuspješno</string>
<string name="try_again">Pokušaj ponovo</string>
<string name="about_proposition_2">Fokusiran na privatnost i bez reklama</string>
<string name="about_proposition_2">Usmjereno na privatnost i bez oglasa</string>
<string name="close">Zatvori</string>
<string name="download">Preuzmi</string>
<string name="download_resources_continue">Prikaži kartu</string>
@@ -65,7 +65,7 @@
<string name="downloader_retry">Pokušaj ponovno</string>
<string name="red">Crvena</string>
<string name="name">Naziv</string>
<string name="category_post">Pošta</string>
<string name="category_post">Poštanski ured</string>
<string name="email">E-mail</string>
<string name="done">Gotovo</string>
<string name="rate_the_app">Ocijeni aplikaciju</string>
@@ -73,7 +73,7 @@
<string name="search_history_title">Povijest pretraživanja</string>
<string name="not_now">Ne sada</string>
<string name="pref_map_style_title">Noćni način</string>
<string name="create">Napravi</string>
<string name="create">Kreiraj</string>
<string name="editor_time_close">Zatvoreno</string>
<string name="p2p_start">Početak</string>
<string name="editor_time_to">Do</string>
@@ -115,9 +115,9 @@
<string name="sort">Sortiraj…</string>
<string name="money">Novac</string>
<string name="app_site_url">https://comaps.app/hr/</string>
<string name="location_is_disabled_long_text">Trenutno su vam onemogućene sve usluge lokacije za ovaj uređaj ili aplikaciju. Molim omogućite ih u Postavkama.</string>
<string name="precise_location_is_disabled_long_text">Za točnu navigaciju omogućite Preciznu lokaciju u postavkama</string>
<string name="about_menu_title">O CoMaps aplikaciji</string>
<string name="location_is_disabled_long_text">Trenutno su vam sve lokacijske usluge onemogućene za ovaj uređaj ili aplikaciju. Omogućite ih u Postavkama.</string>
<string name="precise_location_is_disabled_long_text">Kako biste osigurali točnu navigaciju, uključite Preciznu lokaciju u postavkama</string>
<string name="about_menu_title">O CoMapsu</string>
<string name="about_headline">Otvoreni projekt kojeg pokreće zajednica</string>
<string name="about_proposition_1">• Jednostavan za korištenje i dotjeran</string>
<string name="about_proposition_3">• Izvanmrežno, brz i kompaktan</string>
@@ -160,7 +160,7 @@
<string name="category_eat">Gdje jesti</string>
<string name="category_food">Namirnice</string>
<string name="category_transport">Prijevoz</string>
<string name="category_fuel">Benzinske stanice</string>
<string name="category_fuel">Benzin</string>
<string name="category_shopping">Kupovina</string>
<string name="category_secondhand">Rabljena roba</string>
<string name="category_tourism">Znamenitosti</string>
@@ -199,21 +199,21 @@
<item quantity="few">%d rute</item>
<item quantity="other">%d ruta</item>
</plurals>
<string name="bookmarks_export">Izvoz svih Oznaka i Ruta</string>
<string name="bookmarks_export">Izvoz svih Mjesta i Ruta</string>
<string name="start_track_recording">Snimi Rutu</string>
<string name="stop_track_recording">Zaustavi snimanje Rute</string>
<string name="track_recording_alert_title">Spremi u Oznake i Rute?</string>
<string name="track_recording_alert_title">Spremi u favorite?</string>
<string name="track_recording_toast_nothing_to_save">Ruta je prazna - nema ništa za spremiti</string>
<string name="edit_track">Izmijeni Rutu</string>
<string name="pref_backup_title">Sigurnosna kopija Oznaka i Ruta</string>
<string name="pref_backup_now_summary_empty_lists">Nema Oznaka i Ruta za izradu sigurnosne kopije</string>
<string name="pref_backup_title">Sigurnosna kopija favorita</string>
<string name="pref_backup_now_summary_empty_lists">Nema Mjesta i Ruta za izradu sigurnosne kopije</string>
<string name="share_track">Podijeli Rutu</string>
<string name="placepage_edit_bookmark_button">Uredi spremljeno mjesto</string>
<string name="bookmark_lists_hide_all">Sakrij sve</string>
<plurals name="bookmarks_places">
<item quantity="one">%d Oznaka</item>
<item quantity="few">%d Oznake</item>
<item quantity="other">%d Oznaka</item>
<item quantity="one">%d spremljeno mjesto</item>
<item quantity="few">%d spremljena mjesta</item>
<item quantity="other">%d spremljenih mjesta</item>
</plurals>
<string name="bookmarks_create_new_group">Kreiraj novu Listu</string>
<string name="bookmarks_error_message_share_general">Nije moguće podijeliti zbog greške u aplikaciji</string>
@@ -225,8 +225,8 @@
<string name="bookmarks_error_message_list_name_already_taken">Molimo odaberite drugi naziv</string>
<string name="bookmarks_empty_list_title">Ova Lista je prazna</string>
<string name="bookmarks_empty_list_message">Za spremanje mjesta dodirnite mjesto na karti, a zatim dodirnite ikonu zvjezdice</string>
<string name="sort_bookmarks">Sortiraj Oznake</string>
<string name="bookmark_color">Boja Oznake</string>
<string name="sort_bookmarks">Sortiraj favorite</string>
<string name="bookmark_color">Boja Favorita</string>
<string name="share_my_location">Podijeli moju lokaciju</string>
<string name="pref_zoom_title">Gumbi za zumiranje</string>
<string name="pref_map_3d_title">Pogled iz perspektive</string>
@@ -361,7 +361,7 @@
<string name="editor_business_vacant_button">Objekt više ne posluje</string>
<string name="editor_mark_business_vacant_title">Označi da nema aktivnog poslovanja</string>
<string name="editor_mark_business_vacant_description">Koristite ovo ako se tvrtka iselila, a prostor je prazan i spreman za novog najmoprimca.</string>
<string name="editor_submit">Pošalji</string>
<string name="editor_submit">Predaj</string>
<string name="error_enter_correct_phone">Unesite važeći telefonski broj</string>
<string name="error_enter_correct_web">Unesite valjanu web-adresu</string>
<string name="error_enter_correct_email">Unesite važeću e-adresu</string>
@@ -401,7 +401,7 @@
<string name="enable_logging">Omogući zapisivanje</string>
<string name="feedback_general">Opće povratne informacije</string>
<string name="prefs_languages_information">Za glasovne upute koristimo sistemski TTS. Mnogi Android uređaji koriste Google TTS, možete ga preuzeti ili ažurirati s Google Playa (https://play.google.com/store/apps/details?id=com.google.android.tts)</string>
<string name="prefs_languages_information_off">Za neke jezike morat ćete instalirati sintetizator govora ili dodatni jezični paket iz trgovine aplikacija (Google Play, Galaxy Store, App Gallery, FDroid). \nOtvorite postavke uređaja → Jezik i unos → Govor → Izlaz teksta u govor. Ovdje možete upravljati postavkama za sintezu govora (na primjer, preuzeti jezični paket za izvanmrežnu upotrebu) i odabrati drugi program za pretvaranje teksta u govor.</string>
<string name="prefs_languages_information_off">Za neke jezike morat ćete instalirati sintetizator govora ili dodatni jezični paket iz trgovine aplikacija (Google Play, Galaxy Store, App Gallery, FDroid). . \nOtvorite postavke uređaja → Jezik i unos → Govor → Izlaz teksta u govor. \nOvdje možete upravljati postavkama za sintezu govora (na primjer, preuzeti jezični paket za izvanmrežnu upotrebu) i odabrati drugi program za pretvaranje teksta u govor.</string>
<string name="prefs_languages_information_off_link">Za više informacija molimo provjerite ovaj vodič</string>
<string name="prefs_speed_cameras_information">Upozorenja na kamere za nadzor brzine onemogućena su u državama u kojima su takva upozorenja zabranjena lokalnim zakonima.</string>
<string name="transliteration_title">Prikaži u latinici</string>
@@ -552,4 +552,111 @@
<string name="aa_grant_permissions">Dodijeli dopuštenja</string>
<string name="button_layer_outdoor">Na otvorenom</string>
<string name="browser_not_available">Web preglednik nije dostupan</string>
<string name="hours_confirmed_time_ago">Potvrđeno %s</string>
<string name="existence_confirmed_time_ago">Postojanje potvrđeno %s</string>
<string name="edit_opening_hours">Uredi radno vrijeme</string>
<string name="no_osm_account">Nemate OpenStreetMap račun?</string>
<string name="register_at_openstreetmap">Registrirajte se na OpenStreetMap-u</string>
<string name="not_signed_in">Niste prijavljeni</string>
<string name="login_osm">Prijava na OpenStreetMap</string>
<string name="edit_place">Uredi mjesto</string>
<string name="add_language">Dodaj jezik</string>
<string name="street">Ulica</string>
<string name="house_number">Broj zgrade</string>
<string name="building">Zgrada</string>
<string name="add_street">Dodaj ulicu</string>
<string name="empty_street_name_error">Unesite naziv ulice</string>
<string name="choose_language">Odaberite jezik</string>
<string name="choose_street">Odaberite ulicu</string>
<string name="cuisine">Kuhinja</string>
<string name="select_cuisine">Odaberite kuhinju</string>
<string name="editor_add_phone">Dodaj telefon</string>
<string name="level">Kat</string>
<string name="level_value_generic">Razina: %s</string>
<string name="volume">Volumen</string>
<string name="pref_tts_open_system_settings">Postavke sustava za sintezu govora</string>
<string name="pref_tts_no_system_tts">Postavke sinteze govora nisu pronađene, jeste li sigurni da vaš uređaj to podržava?</string>
<string name="drive_through">Prolaz za automobile</string>
<string name="clear_the_search">Obriši pretragu</string>
<string name="website_menu">Poveznica na Jelovnik</string>
<string name="view_menu">Pogledaj Jelovnik</string>
<string name="open_in_app">Otvori u drugoj aplikaciji</string>
<string name="select_option">Odaberite opciju</string>
<string name="outdoor_seating">Vanjski prostor za sjedenje</string>
<string name="power_save_dialog_summary">Za najtočniju navigaciju preporučujemo isključivanje načina uštede energije u postavkama baterije telefona.</string>
<string name="stop_without_saving">Zaustavi bez spremanja</string>
<string name="continue_recording">Nastavi snimanje</string>
<string name="error_no_file_manager_app">Dijalog za odabir mape nije moguće prikazati jer na vašem uređaju nije instalirana odgovarajuća aplikacija. Instalirajte aplikaciju za upravljanje datotekama i pokušajte ponovno.</string>
<string name="choose_color">Odaberi boju</string>
<string name="uri_open_location_failed">Nije instalirana aplikacija koja može otvoriti lokaciju</string>
<string name="nav_auto">Automatska tema u navigaciji</string>
<string name="pref_left_button_title">Postavke lijevog gumba</string>
<string name="pref_left_button_disable">Onemogući</string>
<string name="pref_backup_summary">Automatsko sigurnosno kopiranje u mapu na vašem uređaju</string>
<string name="pref_backup_now_title">Sigurnosno kopiraj sada</string>
<string name="pref_backup_now_summary">Odmah stvorite sigurnosnu kopiju</string>
<string name="pref_backup_now_summary_progress">Sigurnosno kopiranje u tijeku…</string>
<string name="pref_backup_now_summary_ok">Sigurnosna kopija uspješno dovršena</string>
<string name="pref_backup_now_summary_failed">Sigurnosna kopija nije uspjela</string>
<string name="pref_backup_now_summary_folder_unavailable">Mapa za sigurnosnu kopiju nije dostupna</string>
<string name="pref_backup_status_summary_success">Posljednja uspješna sigurnosna kopija</string>
<string name="pref_backup_location_title">Lokacija sigurnosne kopije</string>
<string name="pref_backup_location_summary_initial">Najprije odaberite mapu i dodijelite dopuštenje</string>
<string name="pref_backup_history_title">Broj sigurnosnih kopija koje treba čuvati</string>
<string name="pref_backup_interval_title">Automatsko sigurnosno kopiranje</string>
<string name="backup_interval_every_day">Dnevno</string>
<string name="backup_interval_every_week">Tjedno</string>
<string name="backup_interval_manual_only">Isključeno (samo ručno)</string>
<string name="dialog_report_error_missing_folder">Odabrana lokacija za sigurnosnu kopiju nije dostupna ili na nju nije moguće zapisivati. Odaberite drugu lokaciju.</string>
<string name="dialog_report_error_with_logs">Molimo vas da nam pošaljete izvješće o pogrešci:\n- \"Omogući zapisivanje\" u postavkama\n- reproducirajte problem\n- na zaslonu \"O nama i pomoć\" pritisnite gumb \"Prijavi grešku\" i pošaljite putem e-pošte ili chata\n- onemogućite zapisivanje</string>
<string name="clear">Očisti</string>
<string name="route_type">Vrsta rute</string>
<string name="vehicle">Vozilo</string>
<string name="pedestrian">Pješak</string>
<string name="bicycle">Bicikla</string>
<string name="ruler">Ravnalo</string>
<string name="about_help">O nama &amp; Pomoć</string>
<string name="open_now">Otvoreno sada</string>
<string name="closed_now">Zatvoreno sada</string>
<string name="at">u %s</string>
<string name="delete_track_dialog_title">Izbrisati %s?</string>
<string name="pref_tts_no_system_tts_short">Nije pronađen program za pretvaranje teksta u govor, provjerite postavke aplikacije</string>
<string name="navigation_start_tts_message">"Pokretanje navigacije, jezik glasovnih uputa: "</string>
<string name="navigation_start_tts_disabled_message">Glasovne upute onemogućene: TTS mehanizam nije dostupan</string>
<string name="unknown_power_output">nepoznato</string>
<string name="charge_socket_type2">Tip 2 (bez kabela)</string>
<string name="charge_socket_type2_cable">Tip 2 (s kabelom)</string>
<string name="charge_socket_type2_combo">Tip 2 kombinacija</string>
<string name="charge_socket_type1">Tip 1</string>
<string name="charge_socket_nacs">NACS</string>
<string name="charge_socket_chademo">CHAdeMO priključak</string>
<string name="charge_socket_schuko">Domaći EU</string>
<string name="unknown_socket_type">nepoznata utičnica</string>
<string name="edit_socket_info_tooltip">Izradite nove utičnice ili uredite postojeće.</string>
<string name="charging_station_available_sockets">Dostupne utičnice</string>
<string name="charge_socket_unknown_other">Drugo ili nepoznato</string>
<string name="charge_socket_count">Broj</string>
<string name="charge_socket_power">Snaga (kW)</string>
<string name="editor_socket">Uredi utičnicu</string>
<string name="unknown_count">nepoznato</string>
<string name="error_value_must_be_positive">Vrijednost mora biti pozitivna</string>
<string name="error_invalid_number">Nevažeći broj</string>
<string name="offline_explanation_title">Izvanmrežne karte</string>
<string name="offline_explanation_text">Za prikaz i navigaciju područjem potrebno je preuzeti kartu.\nPreuzmite karte za područja u koja želite putovati.</string>
<string name="list_description_empty">Uredite popis kako biste dodali opis</string>
<string name="advanced">Napredno</string>
<string name="download_resources_custom_url_title">Prilagođeni poslužitelj karata</string>
<string name="download_resources_custom_url_message">Zamijenite zadani poslužitelj za preuzimanje karata. Ostavite prazno za korištenje CoMaps zadanog poslužitelja.</string>
<string name="download_resources_custom_url_summary_none">Nije postavljeno</string>
<string name="download_resources_custom_url_error_scheme">Molimo unesite URL koji počinje s http:// ili https://</string>
<plurals name="minutes_short">
<item quantity="one">%d minuta</item>
<item quantity="few">%d minute</item>
<item quantity="other">%d minuta</item>
</plurals>
<plurals name="bookmarks_detect_message">
<item quantity="one">Pronađena je %d datoteka. Možete je vidjeti nakon pretvorbe.</item>
<item quantity="few">Pronađeno je %d datoteka. Možete ih vidjeti nakon pretvorbe.</item>
<item quantity="other">Pronađeno je %d datoteka. Možete ih vidjeti nakon pretvorbe.</item>
</plurals>
</resources>

View File

@@ -72,7 +72,7 @@
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
<string name="bookmarks">Luoghi preferiti</string>
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
<string name="bookmarks_and_tracks">Luoghi preferiti e tracce</string>
<string name="bookmarks_and_tracks">Preferiti</string>
<!-- Add bookmark dialog - bookmark name -->
<string name="name">Nome</string>
<!-- Editor title above street and house number, duplicates [type.building.address] in types_strings.txt -->
@@ -144,7 +144,7 @@
<!-- Notes field in Bookmarks view -->
<string name="description">Informazioni</string>
<!-- Email Subject when sharing bookmark list -->
<string name="share_bookmarks_email_subject">Questi sono i miei luoghi preferiti su CoMaps</string>
<string name="share_bookmarks_email_subject">I miei luoghi preferiti su CoMaps</string>
<string name="share_bookmarks_email_body">Ciao!\n\nIn allegato ci sono i miei luoghi preferiti. Aprili se hai installato CoMaps. Oppure, se non ce l\'hai, scarica l\'app per iOS o Android seguendo questo link: https://www.comaps.app/\n\nDivertiti a viaggiare con CoMaps!</string>
<!-- message title of loading file -->
<string name="load_kmz_title">Caricamento luoghi preferiti</string>
@@ -803,7 +803,7 @@
<!-- Title for the "Stop Without Saving" action for the alert when saving a track recording. -->
<string name="continue_recording">Continua a registrare</string>
<!-- Title for the alert when saving a track recording. -->
<string name="track_recording_alert_title">Salvare in Luoghi preferiti e tracce?</string>
<string name="track_recording_alert_title">Salvare in Preferiti?</string>
<!-- Message for the toast when saving the track recording is finished but nothing to save. -->
<string name="track_recording_toast_nothing_to_save">La traccia è vuota - non c\'è nulla da salvare</string>
<!-- Error message when there are no File Manager apps installed to select a folder when importing Bookmarks and Tracks -->

View File

@@ -140,14 +140,14 @@
<!-- Notes field in Bookmarks view -->
<string name="description">Pastabos</string>
<!-- Email Subject when sharing bookmark list -->
<string name="share_bookmarks_email_subject">Su jumis bendrinamas „CoMaps“ žymių sąrašas</string>
<string name="share_bookmarks_email_body">Labas! \n \nČia prisegtas mano žymių sąrašas iš „CoMaps“ programėlės. Jei jos neturi, gali ją parsisiųsti iš https://www.comaps.app/download/ \n \nSmagių kelionių su „CoMaps“!</string>
<string name="share_bookmarks_email_subject">Mano „CoMaps“ žymės</string>
<string name="share_bookmarks_email_body">Labas! \n \nČia prisegtas mano „CoMaps“ programėlės žymių failas. Jei jos neturi, gali ją parsisiųsti iš https://www.comaps.app/download/ \n \nSmagių kelionių su „CoMaps“!</string>
<!-- message title of loading file -->
<string name="load_kmz_title">Žymių sąrašas įkeliamas</string>
<string name="load_kmz_title">Žymės įkeliamos</string>
<!-- Kmz file successful loading -->
<string name="load_kmz_successful">Žymių sąrašas įkeltas! Galite rasti žemėlapyje arba žymių tvarkytuvės ekrane.</string>
<string name="load_kmz_successful">Žymės įkeltos! Galite jas rasti žemėlapyje arba žymių tvarkytuvės ekrane.</string>
<!-- Kml file loading failed -->
<string name="load_kmz_failed">Žymių sąrašo nepavyko įkelti. Gali būti, kad failas sugadintas.</string>
<string name="load_kmz_failed">Žymių įkelti nepavyko. Gali būti, kad failas sugadintas.</string>
<!-- Failed to recognize the format of a bookmarks or tracks file. -->
<string name="unknown_file_type">Programėlė neatpažįsta failo tipo: \n%1$s</string>
<!-- Failed to open a bookmarks or tracks file in CoMaps. -->
@@ -553,13 +553,13 @@
<string name="dialog_error_storage_message">Išorinė saugykla yra nepasiekiama. SD kortelė galimai yra pašalinta, pažeista, arba failų sistema joje yra nustatyta tik skaitymui. Patikrinkite SD kortelę arba susisiekite su mumis adresu support@comaps.app</string>
<string name="setting_emulate_bad_storage">Emuliuoti blogą saugyklą</string>
<string name="error_enter_correct_name">Įveskite teisingą pavadinimą</string>
<string name="bookmark_lists">Sąrašai</string>
<string name="bookmark_lists">Žymių sąrašai</string>
<!-- Do not display all bookmark lists on the map -->
<string name="bookmark_lists_hide_all">Nerodyti visų</string>
<string name="bookmark_lists_show_all">Rodyti visus</string>
<string name="bookmarks_create_new_group">Kurti naują sąrašą</string>
<!-- Bookmark categories screen, button that opens folder selection dialog to import KML/KMZ/GPX/KMB files -->
<string name="bookmarks_import">Importuoti žymes ir trasas</string>
<string name="bookmarks_import">Importuoti žymes</string>
<string name="bookmarks_error_message_share_general">Nepavyko bendrinti dėl programinės klaidos</string>
<string name="bookmarks_error_title_share_empty">Klaida bendrinant</string>
<string name="bookmarks_error_message_share_empty">Negalima bendrinti tuščio sąrašo</string>
@@ -580,7 +580,7 @@
<string name="subway">Metro</string>
<string name="layers_title">Žemėlapio stiliai ir sluoksniai</string>
<string name="bookmarks_empty_list_title">Sąrašas tuščias</string>
<string name="bookmarks_empty_list_message">Jeigu norite pridėti žymę, bakstelėkite vietą žemėlapyje, o tada žvaigždutės piktogramą</string>
<string name="bookmarks_empty_list_message">Jeigu norite pasižymėti, bakstelėkite ją žemėlapyje, o tada bakstelėkite žvaigždutės piktogramą</string>
<string name="category_desc_more">…daugiau</string>
<string name="export_file">Eksportuoti KMZ</string>
<string name="export_file_gpx">Eksportuoti GPX</string>
@@ -711,7 +711,7 @@
<string name="browser_not_available">Saityno naršyklė nepasiekiama</string>
<string name="volume">Garsumas</string>
<!-- Bookmark categories screen, button that opens share dialog to export all bookmarks and tracks -->
<string name="bookmarks_export">Eksportuoti visas žymes ir trasas</string>
<string name="bookmarks_export">Eksportuoti pasižymėtas žymes ir trasas</string>
<!-- button in (app) TTS settings, to open the system TTS settings. -->
<string name="pref_tts_open_system_settings">Šnekos sintezės sistemos nustatymai</string>
<!-- toast displayed when pressing the "Speech synthesis system settings" button, and the system settings aren't found. -->
@@ -743,7 +743,7 @@
<!-- Title for the "Stop Without Saving" action for the alert when saving a track recording. -->
<string name="continue_recording">Tęsti įrašymą</string>
<!-- Title for the alert when saving a track recording. -->
<string name="track_recording_alert_title">Įrašyti į žymių ir trasų sąrašą?</string>
<string name="track_recording_alert_title">Pridėti žymę?</string>
<!-- Message for the toast when saving the track recording is finished but nothing to save. -->
<string name="track_recording_toast_nothing_to_save">Trasa tuščia nėra ką įrašyti</string>
<!-- Error message when there are no File Manager apps installed to select a folder when importing Bookmarks and Tracks -->
@@ -753,7 +753,7 @@
<string name="uri_open_location_failed">Neįdiegta programėlė, galinti atverti vietą</string>
<!-- preference string for using auto theme only in navigation mode -->
<string name="nav_auto">Automatinė naviguojant</string>
<string name="bookmarks_and_tracks">Žymės ir trasos</string>
<string name="bookmarks_and_tracks">Žymės</string>
<string name="location_settings">Vietos nustatymai</string>
<string name="maps_storage_summary">Pasirinkite aplanką atsiųstiems žemėlapiams įrašyti</string>
<string name="category_secondhand">Naudotos prekės</string>
@@ -780,9 +780,10 @@
<string name="car_used_on_the_phone_screen">Dabar naudojatės „CoMaps“ telefono ekrane</string>
<string name="car_used_on_the_car_screen">Dabar naudojatės „CoMaps“ automobilio ekrane</string>
<plurals name="bookmarks_places">
<item quantity="one">%d žymė</item>
<item quantity="few">%d žymės</item>
<item quantity="other">%d žymių</item>
<item quantity="one">%d pasižymėta vieta</item>
<item quantity="few">%d pasižymėtos vietos</item>
<item quantity="many">%d pasižymėtų vietų</item>
<item quantity="other">%d pasižymėtų vietų</item>
</plurals>
<string name="app_tip_01">Su jūsų parama ir palaikymu mes galime sukurti geriausius žemėlapius pasaulyje!</string>
<string name="enable_keep_screen_on_description">Įgalinus šią parinktį, ekranas visada liks įjungtas, kol rodomas žemėlapis.</string>
@@ -807,12 +808,12 @@
<string name="saved">Įrašyta</string>
<string name="ruler">Liniuotė</string>
<string name="pref_left_button_title">Kairiojo mygtuko funkcija</string>
<string name="pref_backup_now_summary_empty_lists">Neturite jokių žymių ar trasų atsarginei kopijai sudaryti</string>
<string name="pref_backup_now_summary_empty_lists">Nėra pasižymėtų vietų ar trasų atsarginei kopijai sudaryti</string>
<string name="pref_backup_interval_title">Automatinis atsarginis kopijavimas</string>
<string name="dialog_report_error_missing_folder">Pasirinktas atsarginių kopijų aplankas nepasiekiamas, bent jau rašymui. Pasirinkite kitą aplanką.</string>
<string name="dialog_report_error_with_logs">Būsime dėkingi, jei atsiųsti klaidos pranešimą:\n - programos nustatymuose pažymėkite „Įgalinti derinimo žurnalą“\n - atkartokite problemą\n - „Žinyno ir pagalbos“ ekrane bakstelėkite mygtuką „Pranešti apie klaidą“ ir išsiųskite pranešimą el. paštu ar per pokalbių programėlę\n - išjunkite derinimo žurnalą</string>
<string name="bicycle">Dviračiu</string>
<string name="pref_backup_title">Žymių ir trasų atsarginis kopijavimas</string>
<string name="pref_backup_title">Žymių atsarginis kopijavimas</string>
<string name="editor_building_levels">Aukštų skaičius (skaičiuojant pirmą aukštą, neskaičiuojant stogo)</string>
<string name="editor_level">Aukštas (0 reiškia pirmą aukštą)</string>
<string name="error_enter_correct_level">Įveskite leistiną aukšto numerį</string>
@@ -901,4 +902,5 @@
<string name="download_resources_custom_url_message">Žemėlapiams parsisiųsti galite nurodyti kitą, nei numatytasis, serverį. Palikite lauką tuščią, jei norite naudoti numatytąjį „CoMaps“ serverį.</string>
<string name="download_resources_custom_url_summary_none">Nenurodytas</string>
<string name="download_resources_custom_url_error_scheme">Įveskite URL adresą, prasidedantį „http://“ arba „https://“</string>
<string name="pref_maplanguage_local">Vietos kalba</string>
</resources>

View File

@@ -516,10 +516,10 @@
<string name="error_enter_correct_line_page">Ierakstiet LINE vietnes adresi vai LINE ID</string>
<string name="placepage_add_place_button">Pievienot vietu „OpenStreetMap“</string>
<!-- Displayed when saving some edits to the map to warn against publishing personal data -->
<string name="editor_share_to_all_dialog_title">Vai vēlaties to nosūtīt visiem lietotājiem?</string>
<string name="editor_share_to_all_dialog_title">Vai nosūtīt to visiem lietotājiem?</string>
<!-- Dialog before publishing the modifications to the public map. -->
<string name="editor_share_to_all_dialog_message_1">Jāpārliecinās, ka neievadīji nekādus privātus vai personīgus datus.</string>
<string name="editor_share_to_all_dialog_message_2">OpenStreetMap redaktori pārbaudīs veiktās izmaiņas, un sazināsies ar Tevi, ja viņiem būs kādi jautājumi.</string>
<string name="editor_share_to_all_dialog_message_1">Jāpārliecinās, ka nav ievadīti nekādi privāti vai personīgi dati.</string>
<string name="editor_share_to_all_dialog_message_2">OpenStreetMap redaktori pārbaudīs veiktās izmaiņas un sazināsies ar Tevi, ja viņiem būs kādi jautājumi.</string>
<string name="navigation_stop_button">Apturēt</string>
<!-- Shown as toast when starting the recent track recording -->
<string name="track_recording">Maršruta reģistrēšana</string>
@@ -862,4 +862,25 @@
<item quantity="other">%d min.</item>
</plurals>
<string name="pref_maplanguage_local">Vietējā valoda</string>
<string name="opens_day_at">Atver %1$s plkst. %2$s</string>
<string name="closes_at">Slēdz %s</string>
<string name="opens_at">Atver %s</string>
<string name="closes_day_at">Slēdz %1$s plkst. %2$s</string>
<string name="osm_note_toast">Piezīme tiks nosūtīta “OpenStreetMap”</string>
<string name="pref_backup_now_summary_ok">Rezerves kopēšana sekmīgi pabeigta</string>
<string name="pref_backup_now_summary_empty_lists">Nav vietu un ceļu, kam veikt rezerves kopēšanu</string>
<string name="pref_backup_now_summary_failed">Rezerves kopēšana neizdevās</string>
<string name="pref_backup_now_summary_folder_unavailable">Rezerves kopiju mape nav pieejama</string>
<string name="pref_backup_status_summary_success">Pēdējā sekmīgā rezerves kopēšana</string>
<string name="pref_backup_location_title">Rezerves kopiju atrašanās vieta</string>
<string name="pref_backup_location_summary_initial">Lūgums vispirms atlasīt mapi un nodrošināt atļauju</string>
<string name="pref_backup_history_title">Paturamo rezerves kopiju daudzums</string>
<string name="pref_backup_interval_title">Automātiskā rezerves kopēšana</string>
<string name="pref_backup_title">Izveidot izlases rezerves kopiju</string>
<string name="pref_backup_summary">Automātiski veikt rezerves kopēšanu ierīces mapē</string>
<string name="pref_backup_now_title">Veikt rezerves kopēšanu tagad</string>
<string name="pref_backup_now_summary">Nekavējoties izveidot rezerves kopiju</string>
<string name="pref_backup_now_summary_progress">Notiek rezerves kopēšana…</string>
<string name="pedestrian">Kājāmgājēju</string>
<string name="bicycle">Divriteņu</string>
</resources>

View File

@@ -16,6 +16,8 @@
<color name="bg_panel">@color/bg_window</color>
<color name="bg_primary_dark">#FF588157</color>
<color name="bg_app">#10140F</color>
<color name="bg_editor">#161b14</color>
<color name="fg_editor">#282e25</color>
<color name="bg_menu">#CC2D3237</color>

View File

@@ -151,7 +151,7 @@
<item name="colorSurfaceContainerHigh">@color/md_theme_surfaceContainerHigh</item>
<item name="colorSurfaceContainerHighest">@color/md_theme_surfaceContainerHighest</item>
<item name="appBackground">?android:attr/colorBackground</item>
<item name="appBackground">@color/bg_app</item>
</style>
<style name="MwmTheme" parent="MwmTheme.Base"/>

View File

@@ -21,30 +21,30 @@
<!-- View and button titles for accessibility, please also edit it in iphone/plist.txt -->
<string name="search">Zoeken</string>
<!-- Search box placeholder text; Used when searching on the map itself, not when searching for a map -->
<string name="search_map">Zoeken op de kaart</string>
<string name="search_map">Zoeken op kaart</string>
<!-- Location services are disabled by user alert - message -->
<string name="location_is_disabled_long_text">U heeft momenteel alle locatieservices voor dit apparaat of deze app uitgeschakeld. Schakel ze in bij Instellingen.</string>
<string name="location_is_disabled_long_text">U heeft momenteel alle locatiediensten voor dit apparaat of deze app uitgeschakeld. Schakel ze in bij Instellingen.</string>
<!-- A dialog title, that warns a user that Precise Location is disabled and suggests to turn it on -->
<string name="limited_accuracy">Beperkte nauwkeurigheid</string>
<!-- A dialog text, that warns a user that Precise Location is disabled and suggests to turn it on -->
<string name="precise_location_is_disabled_long_text">Voor nauwkeurige navigatie moet Nauwkeurige Locatie worden ingesteld bij Instellingen</string>
<string name="precise_location_is_disabled_long_text">Voor nauwkeurige navigatie moet Nauwkeurige Locatie worden ingesteld in de instellingen</string>
<!-- View and button titles for accessibility -->
<string name="zoom_to_country">Weergeven op de kaart</string>
<string name="zoom_to_country">Weergeven op kaart</string>
<!-- Message to display at the center of the screen when the country download has failed -->
<string name="country_status_download_failed">Downloaden is mislukt</string>
<!-- Button text for the button under the country_status_download_failed message -->
<string name="try_again">Opnieuw proberen</string>
<string name="about_menu_title">Over CoMaps</string>
<!-- Text in About screen -->
<string name="about_headline">Open project, gemaakt door de community</string>
<string name="about_headline">Open project gedreven door de community</string>
<!-- Text in About screen -->
<string name="about_proposition_1">• Gebruiksvriendelijk en gestroomlijnd</string>
<string name="about_proposition_1">• Gebruiksvriendelijk en afgewerkt</string>
<!-- Text in About screen -->
<string name="about_proposition_2">• Privacygericht en vrij van advertenties</string>
<!-- Text in About screen -->
<string name="about_proposition_3">• Offline, snel en compact</string>
<!-- Text in About screen -->
<string name="about_developed_by_enthusiasts">Volledig open source, non-profit, transparante besluitvorming en financiering.</string>
<string name="about_developed_by_enthusiasts">Volledige open source, non-profit, transparante besluitvorming en financiering.</string>
<!-- The button that opens system location settings -->
<string name="location_settings">Locatie-instellingen</string>
<string name="close">Sluiten</string>
@@ -55,7 +55,7 @@
<!-- Used in DownloadResources startup screen -->
<string name="not_enough_free_space_on_sdcard">Maak eerst ruimte vrij op de SD-kaart/USB-opslag om de app te gebruiken</string>
<string name="download_resources">Laten we, voor de eerste start, de algemene wereldkaart downloaden. \nDeze gebruikt %s aan opslag.</string>
<string name="download_resources_continue">Ga naar de kaart</string>
<string name="download_resources_continue">Ga naar kaart</string>
<string name="downloading_country_can_proceed">%1$s (%2$s) downloaden. U kunt nu \ndoorgaan naar de kaart.</string>
<string name="download_country_ask">%1$s downloaden? (%2$s)</string>
<string name="update_country_ask">%1$s bijwerken? (%2$s)</string>
@@ -66,7 +66,7 @@
<!-- Show popup notification on top of the map when country download has failed. -->
<string name="download_country_failed">%s download is mislukt</string>
<!-- "Add new bookmark list" dialog title -->
<string name="add_new_set">Nieuwe groep toevoegen</string>
<string name="add_new_set">Nieuwe lijst toevoegen</string>
<!-- Add Bookmark list dialog - hint when the list name is empty -->
<string name="bookmark_set_name">Naam van lijst</string>
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
@@ -96,7 +96,7 @@
<!-- Ask user to wait several minutes (some long process in modal dialog). -->
<string name="wait_several_minutes">Dit kan enkele minuten duren. \nEven geduld…</string>
<!-- Measurement units title in settings activity -->
<string name="measurement_units">Afstandseenheid</string>
<string name="measurement_units">Eenheid van afstand</string>
<!-- Detailed description of Measurement Units settings button -->
<string name="measurement_units_summary">Kies tussen mijlen en kilometers</string>
<!-- SECTION: Search categories -->
@@ -143,7 +143,7 @@
<!-- Search category for water; any changes should be duplicated in categories.txt @category_water! also used to sort bookmarks by type -->
<string name="category_water">Water</string>
<!-- Search category for RV facilities; any changes should be duplicated in categories.txt @category_rv! -->
<string name="category_rv">Caravanfaciliteiten</string>
<string name="category_rv">Camperfaciliteiten</string>
<!-- SECTION: Other translations -->
<!-- Notes field in Bookmarks view -->
<string name="description">Notities</string>
@@ -159,7 +159,7 @@
<!-- Failed to recognize the format of a bookmarks or tracks file. -->
<string name="unknown_file_type">Het bestandstype wordt niet herkend door de app: \n%1$s</string>
<!-- Failed to open a bookmarks or tracks file in CoMaps. -->
<string name="failed_to_open_file">Bestand openen mislukt %1$s \n \n%2$s</string>
<string name="failed_to_open_file">Bestand openen is mislukt %1$s \n \n%2$s</string>
<!-- resource for context menu -->
<string name="edit">Bewerken</string>
<!-- Warning message when doing search around current position -->
@@ -841,21 +841,21 @@
<string name="bookmark_color">Kleur voor favoriet</string>
<string name="backup_interval_every_day">Dagelijks</string>
<string name="backup_interval_manual_only">Uit (alleen handmatig)</string>
<string name="pref_backup_title">Back-up van favorieten</string>
<string name="pref_backup_title">Back-up maken van favorieten</string>
<string name="pref_backup_summary">Automatisch back-up maken naar een map op je apparaat</string>
<string name="pref_backup_now_title">Nu back-uppen</string>
<string name="pref_backup_now_summary">Maak onmiddellijk een back-up</string>
<string name="pref_backup_now_summary_progress">Bezig met het maken van back-up…</string>
<string name="pref_backup_now_summary_ok">Back-up succesvol voltooid</string>
<string name="pref_backup_now_title">Nu back-up maken</string>
<string name="pref_backup_now_summary">Onmiddellijk een back-up maken</string>
<string name="pref_backup_now_summary_progress">Bezig met back-up maken</string>
<string name="pref_backup_now_summary_ok">Back-up met succes voltooid</string>
<string name="pref_backup_now_summary_empty_lists">Geen plaatsen en sporen voor een back-up</string>
<string name="pref_backup_status_summary_success">Laatste succesvolle back-up</string>
<string name="pref_backup_interval_title">Automatische back-up</string>
<string name="pref_backup_location_title">Back-up locatie</string>
<string name="pref_backup_now_summary_failed">Backup mislukt</string>
<string name="pref_backup_location_title">Back-uplocatie</string>
<string name="pref_backup_now_summary_failed">Backup is mislukt</string>
<string name="pref_backup_history_title">Aantal back-ups om te bewaren</string>
<string name="dialog_report_error_missing_folder">De geselecteerde back-uplocatie is niet beschikbaar of niet beschrijfbaar. Kies een andere locatie.</string>
<string name="backup_interval_every_week">Wekelijks</string>
<string name="pref_backup_now_summary_folder_unavailable">De back-up map is niet beschikbaar</string>
<string name="pref_backup_now_summary_folder_unavailable">De back-upmap is niet beschikbaar</string>
<string name="panoramax">Panoramax-afbeelding</string>
<string name="pref_backup_location_summary_initial">Selecteer eerst een map en geef toestemming</string>
<string name="pref_left_button_title">Linkerknop configuratie</string>

View File

@@ -68,11 +68,11 @@
<!-- "Add new bookmark list" dialog title -->
<string name="add_new_set">Adicionar conjunto novo</string>
<!-- Add Bookmark list dialog - hint when the list name is empty -->
<string name="bookmark_set_name">Nome do conjunto de favoritos</string>
<string name="bookmark_set_name">Nome da Lista</string>
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
<string name="bookmarks">Favoritos</string>
<string name="bookmarks">Lugares</string>
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
<string name="bookmarks_and_tracks">Favoritos e trajetos</string>
<string name="bookmarks_and_tracks">Favoritos</string>
<!-- Add bookmark dialog - bookmark name -->
<string name="name">Nome</string>
<!-- Editor title above street and house number, duplicates [type.building.address] in types_strings.txt -->
@@ -144,10 +144,10 @@
<!-- Notes field in Bookmarks view -->
<string name="description">Notas</string>
<!-- Email Subject when sharing bookmark list -->
<string name="share_bookmarks_email_subject">Os favoritos do CoMaps foram partilhados consigo</string>
<string name="share_bookmarks_email_body">Olá! \n \nSegue em anexo os meus favoritos da aplicação CoMaps. Por favor abra-os se tiver o CoMaps instalado. Caso não tenha, descarregue a aplicação para o seu dispositivo iOS ou Android com a hiperligação https://www.comaps.app/download/ \n \nDivirta-se a viajar com o CoMaps!</string>
<string name="share_bookmarks_email_subject">Os meus Favoritos do CoMaps</string>
<string name="share_bookmarks_email_body">Olá! \n \nSegue em anexo os meus favoritos; por favor abra-os com o CoMaps. Caso não tenha, descarregue a aplicação aqui: https://www.comaps.app/download/ \n \nDivirta-se a viajar com o CoMaps!</string>
<!-- message title of loading file -->
<string name="load_kmz_title">A carregar favoritos</string>
<string name="load_kmz_title">Carregando Favoritos</string>
<!-- Kmz file successful loading -->
<string name="load_kmz_successful">Os favoritos foram carregados com sucesso! Pode encontrá-los no mapa ou no ecrã de gestão dos favoritos.</string>
<!-- Kml file loading failed -->

View File

@@ -54,12 +54,12 @@
<string name="maps_storage_free_size">%1$s prosto od %2$s</string>
<string name="move_maps">Premaknem zemljevide?</string>
<string name="move_maps_error">Napaka med premikanjem datotek zemljevidov</string>
<string name="wait_several_minutes">To lahko traja nekaj minut. \nProsimo, počakajte …</string>
<string name="wait_several_minutes">To lahko traja nekaj minut. \nPočakajte …</string>
<string name="measurement_units">Merske enote</string>
<string name="measurement_units_summary">Izberite med miljami in kilometri</string>
<string name="category_eat">Kje jesti</string>
<string name="category_food">Špecerija</string>
<string name="category_transport">Javni prevoz</string>
<string name="category_transport">Prevoz</string>
<string name="category_fuel">Gorivo</string>
<string name="category_parking">Parkiranje</string>
<string name="category_shopping">Nakupovanje</string>
@@ -80,7 +80,7 @@
<string name="category_water">Voda</string>
<string name="category_rv">Prostori za avtodome</string>
<string name="description">Pripis</string>
<string name="share_bookmarks_email_subject">Nekdo je z vami delil zaznamke CoMaps</string>
<string name="share_bookmarks_email_subject">Moji zaznamki na CoMaps</string>
<string name="share_bookmarks_email_body">Živjo! \n \nV priponki so moji zaznamki. Prosim, odpri jih v orodju CoMaps. Če ga še nisi namestil, ga lahko preneseš tukaj: https://www.comaps.app/download/ \n \nUživaj v potovanju s CoMaps!</string>
<string name="load_kmz_title">Nalagam zaznamke</string>
<string name="load_kmz_successful">Zaznamki so uspešno naloženi! Najdete jih lahko na zemljevidu ali v upravitelju zaznamkov.</string>
@@ -239,7 +239,7 @@
<string name="editor_example_values">Primeri vrednosti</string>
<string name="editor_correct_mistake">Popravi napako</string>
<string name="editor_add_select_location">Izberi lokacijo</string>
<string name="editor_report_problem_desription_1">Prosimo, podrobno opišite težavo, da jo lahko skupnost OpenStreetMap odpravi.</string>
<string name="editor_report_problem_desription_1">Podrobno opišite težavo, da jo lahko skupnost OpenStreetMap odpravi.</string>
<string name="editor_report_problem_desription_2">Ali pa jo popravite sami na https://www.openstreetmap.org/</string>
<string name="editor_report_problem_send_button">Pošlji</string>
<string name="editor_report_problem_title">Težava</string>
@@ -271,7 +271,7 @@
<string name="social_media">Družbena omrežja</string>
<string name="building">Stavba</string>
<string name="add_street">Dodaj ulico</string>
<string name="empty_street_name_error">Prosimo, vnesite ime ulice</string>
<string name="empty_street_name_error">Vnesite ime ulice</string>
<string name="choose_language">Izberite jezik</string>
<string name="choose_street">Izberite ulico</string>
<string name="cuisine">Kuhinja</string>
@@ -285,7 +285,7 @@
<string name="downloader_search_field_hint">Najdi zemljevid</string>
<string name="common_check_internet_connection_dialog">Preverite, da je vaša naprava povezana na internet</string>
<string name="downloader_no_space_title">Ni dovolj prostora</string>
<string name="downloader_no_space_message">Prosimo, izbrišite vse nepotrebne podatke</string>
<string name="downloader_no_space_message">Izbrišite vse nepotrebne podatke</string>
<string name="editor_login_error_dialog">Napaka pri prijavi</string>
<string name="editor_profile_changes">Potrjene spremembe</string>
<string name="editor_focus_map_on_location">Povlecite zemljevid tako, da bo križ na lokaciji kraja ali podjetja.</string>
@@ -308,7 +308,7 @@
<string name="error_enter_correct_zip_code">Vnesite veljavno poštno številko</string>
<string name="editor_other_info">Komentar za prostovoljce na OpenStreetMap (neobvezno)</string>
<string name="editor_note_hint">Opišite napake na zemljevidu ali stvari, ki jih ni mogoče urediti prek CoMaps</string>
<string name="editor_about_osm">Vaša urejanja se naložijo v javno podatkovno bazo <a href="https://wiki.openstreetmap.org/wiki/About_OpenStreetMap">OpenStreetMap</a>. Prosimo, da ne dodajate osebnih ali avtorsko zaščitenih podatkov.</string>
<string name="editor_about_osm">Vaša urejanja se naložijo v javno podatkovno bazo <a href="https://wiki.openstreetmap.org/wiki/About_OpenStreetMap">OpenStreetMap</a>. Ne dodajajte osebnih ali avtorsko zaščitenih podatkov.</string>
<string name="editor_more_about_osm">Več o OpenStreetMap</string>
<string name="editor_osm_history">Vaša zgodovina urejanja</string>
<string name="editor_osm_notes">Vaši komentarji za zemljevid</string>
@@ -365,7 +365,7 @@
<string name="mobile_data_option_ask">Vedno vprašaj</string>
<string name="traffic_update_maps_text">Za prikazovanje podatkov o prometu je treba posodobiti zemljevide</string>
<string name="big_font">Povečajte velikost oznak na zemljevidu</string>
<string name="traffic_update_app">Prosimo, posodobite CoMaps</string>
<string name="traffic_update_app">Posodobite CoMaps</string>
<string name="traffic_data_unavailable">Prometni podatki niso na voljo</string>
<string name="enable_logging">Omogoči dnevniške zapise</string>
<string name="feedback_general">Splošne povratne informacije</string>
@@ -384,7 +384,7 @@
<string name="dialog_error_storage_message">Zunanja shramba ni dostopna. SD kartica je bila morda odstranjena, je poškodovana ali pa datotečni sistem ne podpira zapisovanja. Preverite svojo SD kartico ali stopite v stik z nami prek support@comaps.app</string>
<string name="setting_emulate_bad_storage">Emuliraj pokvarjeno shrambo</string>
<string name="error_enter_correct_name">Vnesite pravilno ime</string>
<string name="bookmark_lists">Seznami</string>
<string name="bookmark_lists">Seznam priljubljenih</string>
<string name="bookmark_lists_hide_all">Skrij vse</string>
<string name="bookmark_lists_show_all">Pokaži vse</string>
<plurals name="bookmarks_places">
@@ -394,7 +394,7 @@
<item quantity="other">%d zaznamkov</item>
</plurals>
<string name="bookmarks_create_new_group">Ustvarite nov seznam</string>
<string name="bookmarks_import">Uvozi zaznamke in poti</string>
<string name="bookmarks_import">Uvozi zaznamke</string>
<string name="bookmarks_error_message_share_general">Ni bilo mogoče deliti zaradi aplikacijske napake</string>
<string name="bookmarks_error_title_share_empty">Napaka pri deljenju</string>
<string name="bookmarks_error_message_share_empty">Ni mogoče deliti praznega seznama</string>
@@ -448,7 +448,7 @@
<string name="avoid_ferry">Brez trajektov</string>
<string name="avoid_motorways">Brez avtocest</string>
<string name="unable_to_calc_alert_title">Ne morem izračunati poti</string>
<string name="unable_to_calc_alert_subtitle">Ni bilo mogoče najti relacije. Mogoče so krive vaše zahteve za pot ali pa nepopolni podatki OpenStreetMap. Prosimo, spremenite možnosti relacije in poskusite ponovno.</string>
<string name="unable_to_calc_alert_subtitle">Ni bilo mogoče najti povezave. Mogoče so krive vaše zahteve za pot ali pa nepopolni podatki OpenStreetMapa. Spremenite možnosti iskanja povezave in poskusite ponovno.</string>
<string name="define_to_avoid_btn">Definirajte, katerim cestam naj se izognemo</string>
<string name="change_driving_options_btn">Možnosti relacije so omogočene</string>
<string name="toll_road">Cesta s cestnino</string>
@@ -524,7 +524,7 @@
<string name="comma_separated_pair">%1$s, %2$s</string>
<string name="app_tip_00">Hvala, ker uporabljate naše javno narejene zemljevide!</string>
<string name="app_tip_01">Z vašo podporo lahko ustvarimo najboljše zemljevide na svetu!</string>
<string name="app_tip_02">Ali vam je naša aplikacija všeč? Vabimo vas, da finančno podprete njen razvoj! Ali niste zadovoljni z njo? Prosimo, da nam sporočite, zakaj, in jo bomo popravili!</string>
<string name="app_tip_02">Ali vam je naša aplikacija všeč? Vabimo vas, da finančno podprete njen razvoj! Ali niste zadovoljni z njo? Prosimo, da nam sporočite zakaj, in jo bomo popravili!</string>
<string name="app_tip_03">Če poznate kakega_o razvijalca_ko programske opreme, ga_jo lahko prosite, da implementira funkcionalnost, ki jo potrebujete.</string>
<string name="app_tip_04">S kratkim pritiskom na zemljevid lahko izberete kateri koli element. Z dolgim pritiskom lahko skrijete ali pokažete vmesnik.</string>
<string name="app_tip_05">Ali ste vedeli, da lahko na zemljevidu izberete svojo trenutno lokacijo?</string>
@@ -571,7 +571,7 @@
<string name="stop_track_recording">Ustavi snemanje sledi</string>
<string name="stop_without_saving">Ustavi brez shranjevanja</string>
<string name="continue_recording">Nadaljuj snemanje</string>
<string name="track_recording_alert_title">Shrani med Zaznamke in sledi?</string>
<string name="track_recording_alert_title">Shrani med zaznamke?</string>
<string name="track_recording_toast_nothing_to_save">Sled je prazna ničesar ni za shraniti</string>
<string name="error_no_file_manager_app">Pogovornega okna za izbiro mape ni mogoče prikazati, ker na vaši napravi ni nameščenega ustreznega orodja. Namestite upravitelja datotek in poskusite znova.</string>
<string name="choose_color">Izberi barvo</string>
@@ -581,7 +581,7 @@
<string name="zoom_in">Približaj</string>
<string name="zoom_out">Oddalji</string>
<string name="pref_left_button_title">Nastavitev levega gumba</string>
<string name="pref_backup_title">Varnostno kopiranje zaznamkov in sledi</string>
<string name="pref_backup_title">Varnostno kopiranje priljubljenih</string>
<string name="pref_backup_summary">Samodejno varnostno kopiraj v mapo na vaši napravi</string>
<string name="pref_backup_now_title">Ustvari varnostno kopijo zdaj</string>
<string name="pref_left_button_disable">Onemogoči</string>
@@ -593,14 +593,14 @@
<string name="pref_backup_now_summary_folder_unavailable">Mapa za varnostno kopijo ni na voljo</string>
<string name="pref_backup_status_summary_success">Zadnje uspešno kopiranje</string>
<string name="pref_backup_location_title">Mesto varnostne kopije</string>
<string name="pref_backup_location_summary_initial">Prosimo, najprej izberite mapo in podelite dovoljenja</string>
<string name="pref_backup_location_summary_initial">Najprej izberite mapo in dodelite dovoljenja</string>
<string name="pref_backup_history_title">Število varnostnih kopij, ki jih je treba hraniti</string>
<string name="pref_backup_interval_title">Samodejno varnostno kopiranje</string>
<string name="backup_interval_manual_only">Izklopljeno (samo ročno)</string>
<string name="dialog_report_error_missing_folder">Izbrano mesto za varnostno kopijo ni na voljo ali vanjo ni mogoče pisati. Izberite drugo mesto.</string>
<string name="backup_interval_every_day">Dnevno</string>
<string name="backup_interval_every_week">Tedensko</string>
<string name="dialog_report_error_with_logs">Prosimo, pošljite nam poročilo o napaki:\n - \"Omogoči beleženje\" v nastavitvah\n - poustvarite težavo\n - na zaslonu »O programu in Pomoč« pritisnite gumb »Prijavi napako« in jo pošljite po e-pošti ali klepetu\n - onemogoči beleženje</string>
<string name="dialog_report_error_with_logs">Pošljite nam poročilo o napaki:\n - \"Omogoči beleženje\" v nastavitvah\n - poustvarite težavo\n - na zaslonu »O programu in Pomoč« pritisnite gumb »Prijavi napako« in jo pošljite po e-pošti ali klepetu\n - onemogočite beleženje</string>
<string name="route_type">Vrsta poti</string>
<string name="vehicle">Vozilo</string>
<string name="pedestrian">Za pešce</string>
@@ -646,8 +646,8 @@
<string name="editor_mark_business_vacant_description">To uporabite, če se je podjetje izselilo in so prostori prazni in pripravljeni za novega zakupnika.</string>
<string name="editor_submit">Potrdi</string>
<string name="place_page_map_too_old_title">Podatki zemljevida so zastareli</string>
<string name="place_page_map_too_old_description">Vaši trenutni podatki zemljevida so zelo stari; prosimo, posodobite zemljevid.</string>
<string name="place_page_app_too_old_description">Vaši trenutni podatki zemljevida so zelo stari; prosimo, posodobite orodje CoMaps.</string>
<string name="place_page_map_too_old_description">Vaši trenutni podatki zemljevida so zelo stari, posodobite zemljevid.</string>
<string name="place_page_app_too_old_description">Vaši trenutni podatki zemljevida so zelo stari, posodobite orodje CoMaps.</string>
<string name="place_page_update_too_old_map">Posodobi področje zemljevida</string>
<string name="place_page_too_old_to_edit">Urejanje OpenStreetMap je onemogočeno, ker so podatki zemljevida prestari.</string>
<string name="prefs_speed_cameras_information">Opozorila o merilnikih hitrosti so onemogočena v državah, kjer so prepovedana s tamkajšnjimi zakoni.</string>
@@ -661,5 +661,6 @@
<string name="download_resources_custom_url_title">Strežnik zemljevida po meri</string>
<string name="download_resources_custom_url_message">Prepiši privzeti strežnik za prenos zemljevidov, ki se uporablja za prenos zemljevidov. Pustite prazno, če želite uporabiti privzeti strežnik CoMaps.</string>
<string name="download_resources_custom_url_summary_none">Ni nastavljeno</string>
<string name="download_resources_custom_url_error_scheme">Prosimo, vnesite polni URL, ki se začne z https:// in konča z /</string>
<string name="download_resources_custom_url_error_scheme">Vnesite polni URL, ki se začne z http:// ali https://</string>
<string name="pref_maplanguage_local">Krajevni jezik</string>
</resources>

View File

@@ -66,11 +66,11 @@
<!-- "Add new bookmark list" dialog title -->
<string name="add_new_set">Lägg till ny samling</string>
<!-- Add Bookmark list dialog - hint when the list name is empty -->
<string name="bookmark_set_name">Bokmärkessamlingens namn</string>
<string name="bookmark_set_name">Listans namn</string>
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
<string name="bookmarks">Bokmärken</string>
<string name="bookmarks">Platser</string>
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
<string name="bookmarks_and_tracks">Bokmärken och rutter</string>
<string name="bookmarks_and_tracks">Favoriter</string>
<!-- Add bookmark dialog - bookmark name -->
<string name="name">Namn</string>
<!-- Editor title above street and house number, duplicates [type.building.address] in types_strings.txt -->
@@ -142,13 +142,13 @@
<!-- Notes field in Bookmarks view -->
<string name="description">Anteckningar</string>
<!-- Email Subject when sharing bookmark list -->
<string name="share_bookmarks_email_subject">CoMaps bokmärken har delats med dig</string>
<string name="share_bookmarks_email_subject">Mina CoMaps-favoriter</string>
<!-- message title of loading file -->
<string name="load_kmz_title">Läser in bokmärken</string>
<string name="load_kmz_title">Läser in favoriter</string>
<!-- Kmz file successful loading -->
<string name="load_kmz_successful">Bokmärkena lästes in! Du kan hitta dem på kartan eller i Bokmärkeshanteraren.</string>
<string name="load_kmz_successful">Favoriterna lästes in! Du kan hitta dem på kartan eller i favorithanteraren.</string>
<!-- Kml file loading failed -->
<string name="load_kmz_failed">Inläsningen av bokmärkena misslyckades. Filen kan vara skadad eller defekt.</string>
<string name="load_kmz_failed">Inläsningen av favoriterna misslyckades. Filen kan vara skadad eller defekt.</string>
<!-- Failed to recognize the format of a bookmarks or tracks file. -->
<string name="unknown_file_type">Filtypen känns inte igen av appen: \n%1$s</string>
<!-- Failed to open a bookmarks or tracks file in CoMaps. -->
@@ -210,7 +210,7 @@
<!-- Settings «Route» category: «Tts language» title -->
<string name="pref_tts_language_title">Röstspråk</string>
<!-- Settings «Route» category: «Test Voice Directions» title -->
<string name="pref_tts_test_voice_title">Testa röstinstruktioner (TTS, Text-To-Speech)</string>
<string name="pref_tts_test_voice_title">Testa röstinstruktioner</string>
<!-- Settings «Route» category: Pop-up message when clicking «Test Voice Directions» -->
<string name="pref_tts_playing_test_voice">Kontrollera volymen eller systemets text-till-tal-inställningar om du inte hör rösten nu</string>
<!-- Settings «Route» category: «Tts unavailable» subtitle -->
@@ -793,7 +793,7 @@
<string name="connection_failure">Anslutningen bröts</string>
<string name="disk_error_title">Diskfel</string>
<string name="enable_show_on_lock_screen">Visa på låsskärmen</string>
<string name="share_bookmarks_email_body">Hej! \n \nJag bifogar mina bokmärken, öppna gärna dem med CoMaps. Om du inte redan har appen installerad, kan du ladda ner den här: https://www.comaps.app/download/ \n \nTrevlig resa med CoMaps!</string>
<string name="share_bookmarks_email_body">Hej! \n \nJag bifogar mina favoriter, öppna gärna dem med CoMaps. Om du inte redan har appen installerad, kan du ladda ner den här: https://www.comaps.app/download/ \n \nTrevlig resa med CoMaps!</string>
<string name="instagram_url">https://www.instagram.com/comaps.app/</string>
<string name="telegram_url">https://t.me/CoMapsApp/</string>
<string name="osm_wiki_about_url">https://wiki.openstreetmap.org/wiki/Sv:Om_OpenStreetMap</string>
@@ -850,4 +850,5 @@
<string name="bicycle">Cykel</string>
<string name="pedestrian">Gående</string>
<string name="error_enter_correct_line_page">Ange en giltig webbadress</string>
<string name="move_maps_error">Kunde inte flytta kartfiler</string>
</resources>

View File

@@ -65,6 +65,8 @@
<color name="bg_panel">@color/bg_window</color>
<color name="bg_primary_dark">#37653F</color> <!-- secondary dark -->
<color name="bg_app">@android:color/white</color>
<color name="bg_editor">#ebefe4</color>
<color name="fg_editor">#f9faf2</color>
<color name="bg_dialog_translucent">#BB000000</color>
<color name="bg_text_translucent">#99FFFFFF</color>

View File

@@ -89,8 +89,16 @@
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginBottom">@dimen/margin_half</item>
<item name="cardBackgroundColor">?cardBackground</item>
<item name="cardBackgroundColor">@color/fg_editor</item>
<item name="android:padding">@dimen/margin_base</item>
<item name="cardPreventCornerOverlap">false</item>
</style>
<style name="MwmWidget.M3.CardView" parent="Widget.Material3.CardView.Elevated">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginBottom">@dimen/margin_half</item>
<item name="cardBackgroundColor">?appBackground</item>
<item name="android:padding">@dimen/margin_base</item>
<item name="cardPreventCornerOverlap">false</item>
</style>
</resources>

View File

@@ -239,10 +239,6 @@
<item name="android:foreground">@drawable/shadow_top</item>
</style>
<style name="MwmWidget.FrameLayout.BookmarkCategories">
<item name="android:background">?windowBackgroundForced</item>
</style>
<style name="MwmWidget.Counter">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
@@ -287,13 +283,13 @@
</style>
<style name="MwmWidget.BottomSheetDialog" parent="Widget.Material3.BottomSheet.Modal">
<item name="backgroundTint">?colorSurfaceContainerLow</item>
<item name="backgroundTint">?appBackground</item>
<item name="elevationOverlayEnabled">false</item>
<item name="shapeAppearance">@style/ShapeAppearance.Material3.LargeComponent</item>
</style>
<style name="MwmWidget.BottomSheet" parent="MwmWidget.BottomSheetDialog">
<item name="android:background">?colorSurfaceContainerLow</item>
<item name="android:background">?appBackground</item>
<item name="behavior_hideable">false</item>
</style>

View File

@@ -278,15 +278,21 @@
<style name="MwmTheme.Navigation">
<item name="iconTint">@color/white_primary</item>
</style>
<style name="PopupMenu" parent="ThemeOverlay.Material3">
<item name="android:popupBackground">?windowBackgroundForced</item>
</style>
<!-- Theme required to apply M3 dialog style on preference screen -->
<style name="MwmTheme.M3.AlertDialog" parent="ThemeOverlay.Material3.MaterialAlertDialog">
<item name="dialogCornerRadius">28dp</item>
<item name="cornerFamily">rounded</item>
<item name="android:colorBackground">?attr/colorSurfaceContainerHigh</item>
<item name="android:layout">@layout/m3_alert_dialog</item>
<item name="buttonBarPositiveButtonStyle">@style/MwmTheme.M3.AlertDialog.Button</item>
<item name="buttonBarNegativeButtonStyle">@style/MwmTheme.M3.AlertDialog.Button</item>
<item name="buttonBarNeutralButtonStyle">@style/MwmTheme.M3.AlertDialog.Button.Neutral</item>
</style>
<style name="MwmTheme.M3.AlertDialog.Button" parent="@style/Widget.Material3.Button.TextButton.Dialog">
<item name="android:textColor">?colorSecondary</item>
</style>
<style name="MwmTheme.M3.AlertDialog.Button.Neutral" parent="@style/Widget.Material3.Button.TextButton.Dialog.Flush">
<item name="android:textColor">?colorSecondary</item>
</style>
</resources>

View File

@@ -4,11 +4,10 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Locale;
import org.junit.Test;
public class OpenStateTextFormatterTest
{
@@ -36,10 +35,10 @@ public class OpenStateTextFormatterTest
@Test
public void buildAtLabel_today_open_close()
{
String open = OpenStateTextFormatter.buildAtLabel(true, true, "Sat", "09:00",
OPENS_AT, CLOSES_AT, OPENS_DAY_AT, CLOSES_DAY_AT);
String close = OpenStateTextFormatter.buildAtLabel(false, true, "Sat", "18:00",
OPENS_AT, CLOSES_AT, OPENS_DAY_AT, CLOSES_DAY_AT);
String open = OpenStateTextFormatter.buildAtLabel(true, true, "Sat", "09:00", OPENS_AT, CLOSES_AT, OPENS_DAY_AT,
CLOSES_DAY_AT);
String close = OpenStateTextFormatter.buildAtLabel(false, true, "Sat", "18:00", OPENS_AT, CLOSES_AT, OPENS_DAY_AT,
CLOSES_DAY_AT);
assertEquals("Opens at 09:00", open);
assertEquals("Closes at 18:00", close);
}
@@ -47,10 +46,10 @@ public class OpenStateTextFormatterTest
@Test
public void buildAtLabel_other_day()
{
String open = OpenStateTextFormatter.buildAtLabel(true, false, "Sat", "09:00",
OPENS_AT, CLOSES_AT, OPENS_DAY_AT, CLOSES_DAY_AT);
String close = OpenStateTextFormatter.buildAtLabel(false, false, "Tue", "18:00",
OPENS_AT, CLOSES_AT, OPENS_DAY_AT, CLOSES_DAY_AT);
String open = OpenStateTextFormatter.buildAtLabel(true, false, "Sat", "09:00", OPENS_AT, CLOSES_AT, OPENS_DAY_AT,
CLOSES_DAY_AT);
String close = OpenStateTextFormatter.buildAtLabel(false, false, "Tue", "18:00", OPENS_AT, CLOSES_AT, OPENS_DAY_AT,
CLOSES_DAY_AT);
assertEquals("Opens Sat at 09:00", open);
assertEquals("Closes Tue at 18:00", close);
}

View File

@@ -131,6 +131,12 @@ dependencies {
testImplementation libs.junit
}
android {
androidResources {
ignoreAssetsPatterns.add("!design")
}
}
// TODO: Running lint task triggers native build. Find a better solution.
project.afterEvaluate {
boolean isLintRun = project.gradle.startParameter.taskNames.any { it.toLowerCase().contains('lint') }

View File

@@ -0,0 +1 @@
../../../../../data/subtypes.csv
1 ../../../../../data/subtypes.csv

View File

@@ -182,8 +182,7 @@ JNIEXPORT void JNICALL Java_app_organicmaps_sdk_DownloadResourcesLegacyActivity_
g_currentRequest.reset();
}
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_DownloadResourcesLegacyActivity_nativeResetMetaConfig(JNIEnv *,
jclass)
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_DownloadResourcesLegacyActivity_nativeResetMetaConfig(JNIEnv *, jclass)
{
auto & downloader = LegacyDownloader();
if (downloader)

View File

@@ -1505,20 +1505,16 @@ JNIEXPORT void JNICALL Java_app_organicmaps_sdk_Framework_nativeGet3dMode(JNIEnv
env->SetBooleanField(result, buildingsField, buildings);
}
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_Framework_nativeSetCustomMapDownloadUrl(JNIEnv * env, jclass,
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_Framework_nativeSetCustomMapDownloadUrl(JNIEnv * env, jclass,
jstring url)
{
std::string nativeUrl = jni::ToNativeString(env, url);
GetPlatform().SetCustomMapServerUrl(nativeUrl);
if (g_framework)
{
frm()->GetStorage().ResetMapDownloadMetaConfig();
}
else
{
LOG(LINFO, ("nativeSetCustomMapDownloadUrl: framework not created yet, skipping ResetMapDownloadMetaConfig"));
}
}
JNIEXPORT void JNICALL Java_app_organicmaps_sdk_Framework_nativeSetAutoZoomEnabled(JNIEnv * env, jclass,

Some files were not shown because too many files have changed in this diff Show More