Compare commits

..

1 Commits

Author SHA1 Message Date
Konstantin Pastbin
5b6b424f83 [generator] Make PBF planet update job more verbose
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2026-01-11 16:21:03 +07:00
475 changed files with 3363 additions and 7151 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 -v --size 16384
pyosmium-up-to-date planet-latest.osm.pbf -o planet-latest-new.osm.pbf -vv --size 16384
mv planet-latest-new.osm.pbf planet-latest.osm.pbf
- name: Notify Zulip
run: |

View File

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

7
.gitignore vendored
View File

@@ -31,9 +31,10 @@ data/types.txt*
data/visibility.txt*
data/colors.txt*
data/patterns.txt*
data/symbols/*/design/
data/colors_design.txt
data/patterns_design.txt
# TODO: designer is not used at the moment
# 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

View File

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

View File

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

View File

@@ -1,36 +1,36 @@
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.
Besplatna aplikacija otvorenog koda koju vodi zajednica i temelji se na podacima OpenStreetMap-a, usmjerana transparentnosti, privatnosti i neprofitnosti.
Pridružite se zajednici i pomozite u izradi najbolje aplikacije za karte
• Koristite aplikaciju i širite vijest o njoj
Pridružite se otvorenoj zajednici i pomozite izraditi najbolju aplikaciju za karte
• Koristite aplikaciju i proširite glas o njoj
• Dajte povratne informacije i prijavite probleme
• Ažurirajte podatke karte u aplikaciji ili na web stranici OpenStreetMap
• Ažurirajte podatke na karti u aplikaciji ili na web stranici OpenStreetMap-a
<i>Vaše povratne informacije i recenzije s 5 zvjezdica najbolja su nam podrška!</i>
‣ <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>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>Glavne značajke</b>:
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.
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.
• Pješačke i biciklističke staze
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
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
• Tamni način rada za korištenje tijekom noći
• Poboljšajte podatke karte za sve pomoću osnovnog ugrađenog uređivača
Podrška za Android Auto
• Poboljšajte kartu za sve korisnike, koristeći osnovni ugrađeni uređivač karte
• Android Auto podrška
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, snađite se u svijetu s privatnošću i zajednicom u prvom planu!
Otkrijte svoje putovanje, navigirajte svijetom s privatnošću i zajednicom na prvom mjestu!

View File

@@ -28,6 +28,7 @@ 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,6 +18,7 @@ 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;
@@ -25,6 +26,13 @@ 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;
@@ -39,11 +47,7 @@ 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;
@@ -255,7 +259,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);
@@ -271,8 +275,11 @@ 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];
@@ -387,7 +394,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);
@@ -439,18 +446,21 @@ 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,9 +38,8 @@ 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,6 +17,7 @@ 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,6 +10,7 @@ import androidx.fragment.app.DialogFragment;
public class BaseMwmDialogFragment extends DialogFragment
{
protected int getStyle()
{
return STYLE_NORMAL;

View File

@@ -282,13 +282,11 @@ 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,6 +23,7 @@ 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;
@@ -457,12 +458,10 @@ 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,8 +85,7 @@ 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,7 +39,8 @@ 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();
@@ -58,13 +59,15 @@ 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);
}
@@ -78,7 +81,8 @@ 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();
@@ -119,7 +123,8 @@ 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,16 +6,19 @@ 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
@@ -25,22 +28,26 @@ 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 -> {
@@ -48,7 +55,9 @@ 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;
@@ -58,7 +67,9 @@ 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,8 +125,7 @@ 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,6 +4,7 @@ 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;
@@ -48,8 +49,7 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
@Override
public void onStatusChanged(List<MapManager.StorageCallbackData> data)
{
if (mCurrentCountry == null)
{
if (mCurrentCountry == null) {
updateOfflineExplanationVisibility();
return;
}
@@ -109,13 +109,10 @@ 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,6 +15,7 @@ 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;
@@ -195,9 +196,8 @@ 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,16 +461,13 @@ 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);
}
});
@@ -485,16 +482,13 @@ 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);
}
});
@@ -502,82 +496,74 @@ 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;
}
else
{
layout.setError(null);
return true;
}
}
catch (NumberFormatException e)
{
} catch (NumberFormatException e) {
layout.setError(getString(R.string.error_invalid_number));
return false;
}
@@ -597,8 +583,7 @@ 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]);
@@ -616,8 +601,7 @@ 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];
@@ -628,30 +612,27 @@ 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);
}
@@ -660,8 +641,7 @@ 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);
}
@@ -807,8 +787,9 @@ 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);
@@ -1040,15 +1021,14 @@ 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.IS_MAP_LANGUAGE_SELECTION, false);
args.putBoolean(LanguagesFragment.INCLUDE_LOCAL_LANGUAGE, false);
editWithFragment(Mode.LANGUAGE, R.string.choose_language, args, LanguagesFragment.class, false);
}

View File

@@ -13,6 +13,7 @@ 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;
@@ -68,7 +69,8 @@ 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);
}
@@ -132,21 +134,26 @@ 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,16 +2,19 @@ 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
{
@@ -29,11 +32,18 @@ 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();
@@ -41,8 +51,11 @@ 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();
@@ -87,12 +100,15 @@ 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;
@@ -106,10 +122,13 @@ 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)
@@ -118,7 +137,8 @@ public class FromToTimePicker
finishTimePicking(false);
});
timePicker.addOnPositiveButtonClickListener(view -> {
timePicker.addOnPositiveButtonClickListener(view ->
{
saveState(timePicker, false);
finishTimePicking(true);
});
@@ -129,18 +149,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,6 +8,7 @@ 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;
@@ -24,7 +25,7 @@ import java.util.Set;
public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
{
final static String EXISTING_LOCALIZED_NAMES = "ExistingLocalizedNames";
final static String IS_MAP_LANGUAGE_SELECTION = "IsMapLanguageSelection";
final static String INCLUDE_LOCAL_LANGUAGE = "IncludeLocalLanguage";
public interface Listener
{
@@ -38,7 +39,8 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
protected LanguagesAdapter createAdapter()
{
Bundle args = getArguments();
boolean isMapLanguageSelection = args != null ? args.getBoolean(IS_MAP_LANGUAGE_SELECTION) : true;
boolean includeLocalLanguage =
args != null ? args.getBoolean(INCLUDE_LOCAL_LANGUAGE) : true;
Set<String> existingLanguages =
args != null ? new HashSet<>(args.getStringArrayList(EXISTING_LOCALIZED_NAMES)) : new HashSet<>();
@@ -50,14 +52,8 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
for (int i = 0; i < systemLocales.size(); i++)
systemLanguages.add(null);
// service languages are old_name, alt_name, ...
boolean includeServiceLangs = !isMapLanguageSelection;
for (Language lang : Editor.nativeGetSupportedLanguages(includeServiceLangs))
for (Language lang : Editor.nativeGetSupportedLanguages(false))
{
if (existingLanguages.contains(lang.code))
continue;
// Separately extract system languages
for (int i = 0; i < systemLocales.size(); i++)
{
@@ -69,7 +65,7 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
}
}
if (systemLanguages.contains(lang))
if (existingLanguages.contains(lang.code) || systemLanguages.contains(lang))
continue;
languages.add(lang);
@@ -79,8 +75,7 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
languages.addAll(0, systemLanguages.stream().filter(Objects::nonNull).toList());
if (isMapLanguageSelection)
{
if (includeLocalLanguage) {
String localLanguageLabel = getString(R.string.pref_maplanguage_local);
Language localLanguage = new Language(DEFAULT_LANG_CODE, localLanguageLabel);
languages.add(0, localLanguage);

View File

@@ -7,6 +7,7 @@ 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;
@@ -121,14 +122,20 @@ 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
@@ -377,21 +384,26 @@ 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,30 +35,25 @@ 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,9 +5,11 @@ 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,6 +43,7 @@ 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;
@@ -122,9 +123,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,6 +12,9 @@ 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;
@@ -26,7 +29,6 @@ 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
{
@@ -262,7 +264,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,10 +14,12 @@ 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,12 +10,14 @@ 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>
{
@@ -150,8 +152,7 @@ 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);
@@ -168,18 +169,15 @@ 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,8 +273,7 @@ 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,13 +5,15 @@ 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,12 +8,14 @@ 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,6 +8,7 @@ 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;
@@ -15,6 +16,9 @@ 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;
@@ -39,7 +43,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;
@@ -138,12 +142,9 @@ 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());
}
@@ -558,8 +559,9 @@ 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);
@@ -567,7 +569,9 @@ 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 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;
// 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;
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)
{
mBorderPaint.setStrokeWidth(mBorderWidth);
mBorderPaint.setColor(mBorderColor);
canvas.drawCircle(cx, cy, mBorderRadius, mBorderPaint);
private float mBorderWidthRatio = 0.1f;
protected void setBorderWidthRatio(float ratio) {
mBorderWidthRatio = ratio;
}
// 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))
{
performClick();
return true;
private float mBorderInsetRatio = 0f;
protected void setBorderInsetRatio(float ratio) {
mBorderInsetRatio = ratio;
}
return false;
}
@Override
public boolean performClick()
{
super.performClick();
return false;
}
// colors
protected int mBackgroundColor;
protected int mBorderColor;
protected int mAlertColor;
protected int mTextColor;
protected int mTextAlertColor;
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);
}
// paints
protected final Paint mBackgroundPaint;
protected final Paint mBorderPaint;
protected final Paint 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)
// geometry
protected float mWidth;
protected float mHeight;
protected float mRadius;
protected float mBorderWidth;
protected float mBorderRadius;
public BaseSignView(Context ctx, @Nullable AttributeSet attrs)
{
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;
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));
}
mTextPaint.setTextSize(Math.max(1f, sz));
}
/** child must return the string to draw, or null if nothing */
@Nullable
protected abstract String getValueString();
protected void setColors(int backgroundColor,
int borderColor,
int alertColor,
int textColor,
int textAlertColor)
{
mBackgroundColor = backgroundColor;
mBorderColor = borderColor;
mAlertColor = alertColor;
mTextColor = textColor;
mTextAlertColor = textAlertColor;
/** child decides if this is in “alert” state */
protected abstract boolean isAlert();
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)
{
mBorderPaint.setStrokeWidth(mBorderWidth);
mBorderPaint.setColor(mBorderColor);
canvas.drawCircle(cx, cy, mBorderRadius, mBorderPaint);
}
// 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))
{
performClick();
return true;
}
return false;
}
@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();
}

View File

@@ -4,7 +4,9 @@ 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;
@@ -20,18 +22,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);
}
}
}
@@ -45,7 +47,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();
@@ -68,8 +70,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,11 +12,13 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.core.content.ContextCompat;
import app.organicmaps.R;
import app.organicmaps.util.UiUtils;
import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.util.UiUtils;
public class PlaceholderView extends LinearLayout
{
@SuppressWarnings("NullableProblems")

View File

@@ -5,14 +5,16 @@ 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;
@@ -25,22 +27,15 @@ 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())
{
@@ -56,7 +51,7 @@ public class SpeedLimitView extends BaseSignView
if (mSpeedLimit != limit)
{
mSpeedLimit = limit;
mSpeedStr = Integer.toString(limit);
mSpeedStr = Integer.toString(limit);
requestLayout();
}
mAlert = alert;
@@ -80,7 +75,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)
{
@@ -110,7 +105,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
@@ -127,13 +122,14 @@ 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,8 +105,7 @@ 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);
}
@@ -185,9 +184,10 @@ 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,6 +6,9 @@ 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;
@@ -14,7 +17,6 @@ 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,8 +14,7 @@ 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);
}
@@ -30,13 +29,21 @@ 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,6 +31,7 @@ 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;
@@ -427,7 +428,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);
}
@@ -714,10 +715,12 @@ 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);
@@ -762,7 +765,9 @@ 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();
@@ -863,9 +868,10 @@ 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
@@ -891,12 +897,13 @@ 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
@@ -911,7 +918,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;
@@ -919,12 +926,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
{
@@ -934,16 +941,18 @@ 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);
@@ -952,8 +961,9 @@ 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,7 +3,9 @@ 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,8 +32,7 @@ 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;
@@ -91,15 +90,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);
@@ -133,13 +132,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,13 +13,15 @@ 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>
@@ -94,8 +96,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);
@@ -106,8 +108,7 @@ 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,9 +191,8 @@ 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,13 +3,12 @@
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.Elevated"
style="@style/Widget.Material3.CardView.Filled"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/margin_half"
app:cardBackgroundColor="?attr/colorSurfaceContainerHigh"
app:cardCornerRadius="28dp"
app:cardElevation="@dimen/m3_sys_elevation_level3">
app:cardCornerRadius="28dp">
<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="?appBackground"/>
android:background="?colorSurfaceContainerLow"/>
</FrameLayout>

View File

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

View File

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

View File

@@ -2,15 +2,14 @@
<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.Elevated"
style="@style/Widget.Material3.CardView.Filled"
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:cardElevation="@dimen/m3_sys_elevation_level3">
app:cardCornerRadius="28dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"

View File

@@ -3,13 +3,12 @@
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.Elevated"
style="@style/Widget.Material3.CardView.Filled"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/margin_half"
app:cardBackgroundColor="?attr/colorSurfaceContainerHigh"
app:cardCornerRadius="28dp"
app:cardElevation="@dimen/m3_sys_elevation_level3">
app:cardCornerRadius="28dp">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"

View File

@@ -6,7 +6,6 @@
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"
@@ -431,6 +430,7 @@
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,6 +441,7 @@
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,9 +2,10 @@
<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="@color/bg_editor"
android:layout_marginBottom="@dimen/margin_quarter">
android:background="?windowBackgroundForced">
<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="@color/bg_editor"
android:background="?windowBackgroundForced"
android:layout_above="@+id/tv__mode_switch"
android:layout_below="@id/toolbar"/>
@@ -19,13 +19,14 @@
android:layout_height="wrap_content"
android:layout_alignTop="@+id/tv__mode_switch"
android:layout_alignParentBottom="true"
android:background="@color/bg_editor"/>
android:background="?cardBackground"/>
<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"
@@ -34,7 +35,7 @@
android:textColor="?colorSecondary" />
<include
layout="@layout/item_divider"
layout="@layout/shadow_bottom"
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="@color/bg_editor">
android:background="?windowBackgroundForced">
<LinearLayout
android:layout_width="match_parent"
@@ -17,7 +17,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_half"
style="@style/MwmWidget.M3.Editor.CardView">
style="@style/MwmWidget.M3.Editor.CardView"
app:cardBackgroundColor="?cardBackground">
<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="@color/bg_editor"
android:background="?windowBackgroundForced"
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="?appBackground"
app:cardBackgroundColor="?cardBackground"
app:cardCornerRadius="12dp"
app:cardElevation="2dp">

View File

@@ -21,6 +21,5 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/edit_socket_info_tooltip"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_marginBottom="@dimen/margin_quarter"/>
android:textAppearance="?android:attr/textAppearanceSmall" />
</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_base_plus_quarter"
android:layout_marginTop="@dimen/margin_direction_big"
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="?appBackground"/>
android:background="?colorSurfaceContainerLow"/>
</FrameLayout>

View File

@@ -7,7 +7,6 @@
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
@@ -21,12 +20,7 @@
android:textAppearance="@style/MwmTextAppearance.Body3"
tools:drawableEnd="@drawable/ic_expand_more" />
<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"/>
<include layout="@layout/recycler_default" />
<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="?appBackground"
android:background="?cardBackground"
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</string>
<string name="bookmark_set_name">Nom de la llista de marcadors</string>
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
<string name="bookmarks">Llocs</string>
<string name="bookmarks">Marcadors</string>
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
<string name="bookmarks_and_tracks">Preferits</string>
<string name="bookmarks_and_tracks">Marcadors i recorreguts</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">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>
<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>
<!-- message title of loading file -->
<string name="load_kmz_title">Carregant Preferits</string>
<string name="load_kmz_title">S\'estan carregant els marcadors</string>
<!-- Kmz file successful loading -->
<string name="load_kmz_successful">Els preferits shan carregat correctament. Els trobareu al mapa i a la pantalla de gestió de preferits.</string>
<string name="load_kmz_successful">Els marcadors shan carregat correctament. Els trobareu al mapa i a la pantalla de gestió de marcadors.</string>
<!-- Kml file loading failed -->
<string name="load_kmz_failed">No s\'han pogut carregar els preferits. El fitxer pot estar corromput o ser defectuós.</string>
<string name="load_kmz_failed">No s\'ha pogut carregar els marcadors. El fitxer pot ser malmès o 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 Lloc Desat</string>
<string name="placepage_edit_bookmark_button">Edita el marcador</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">Llista de Preferits</string>
<string name="bookmark_lists">Llistes</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 lloc desat</item>
<item quantity="many">%d llocs desats</item>
<item quantity="other">%d llocs desats</item>
<item quantity="one">%d marcador</item>
<item quantity="many">%d marcadors</item>
<item quantity="other">%d marcadors</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">Importar preferits</string>
<string name="bookmarks_import">Importa marcadors i recorreguts</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 desar un lloc, toqueu-ne un en el mapa i després toqueu la icona d\'estrella</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="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">Ordenar preferits</string>
<string name="sort_bookmarks">Ordena els marcadors</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 llocs i recorreguts</string>
<string name="bookmarks_export">Exporta tots els marcadors 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">Desar en preferits?</string>
<string name="track_recording_alert_title">Voleu desar lenregistrament a Marcadors i recorreguts?</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 preferits</string>
<string name="pref_backup_title">Còpia de seguretat de marcadors i recorreguts</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 llocs o recorreguts per a fer una còpia de seguretat</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_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 preferit</string>
<string name="bookmark_color">Color del marcador</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,5 +925,4 @@
<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á v %1$s v %2$s</string>
<string name="opens_day_at">Otevírá %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 diese auf deiner Karte oder im Lesezeichen-Manager anzeigen lassen.</string>
<string name="load_kmz_successful">Lesezeichen erfolgreich geladen! Du kannst dieses nun 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">Alles abbrechen</string>
<string name="downloader_cancel_all">Alle 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-Standortverknüpfungsdienst</string>
<string name="google_play_services">Google Fused-Standortdienste</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">Deine letzten Suchanfragen anzeigen</string>
<string name="search_history_text">Ihre 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 deinem aktuellen Standort aus möglich</string>
<string name="p2p_only_from_current">Die Navigation ist nur von Ihrem 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">Anmelden</string>
<string name="login">Bei OpenStreetMap 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">Innerortsstraße</string>
<string name="street">Straß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">Ort existiert nicht</string>
<string name="editor_place_doesnt_exist">Dieser 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 für ein Backup vorhanden</string>
<string name="pref_backup_now_summary_empty_lists">Keine Orte und Tracks zum Sichern</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

@@ -1,3 +0,0 @@
<?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</string>
<string name="bookmark_set_name">Nombre de la lista de marcadores</string>
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
<string name="bookmarks">Lugares</string>
<string name="bookmarks">Marcadores</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 favoritos</string>
<string name="bookmarks_import">Importar marcadores y trazas</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">Exportar favoritos</string>
<string name="sort_bookmarks">Ordenar marcadores</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 Favoritos?</string>
<string name="track_recording_alert_title">¿Guardar en Marcadores y trayectos?</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 favorito</string>
<string name="pref_backup_title">Respaldar favoritos</string>
<string name="bookmark_color">Color del marcador</string>
<string name="pref_backup_title">Copia de seguridad de marcadores y trayectos</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 un respaldo</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_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,5 +927,4 @@
<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">Lieux</string>
<string name="bookmarks">Signets</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">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>
<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>
<!-- message title of loading file -->
<string name="load_kmz_title">Chargement des Favoris</string>
<string name="load_kmz_title">Chargement des signets</string>
<!-- Kmz file successful loading -->
<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>
<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>
<!-- Kml file loading failed -->
<string name="load_kmz_failed">Erreur lors du chargement des Favoris. Le fichier pourrait être corrompu ou défectueux.</string>
<string name="load_kmz_failed">Échec lors du chargement des signets. 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 de favoris</string>
<string name="bookmark_lists">Listes</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 des Favoris</string>
<string name="bookmark_color">Couleur du marque-page</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,5 +926,4 @@
<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">Usmjereno na privatnost i bez oglasa</string>
<string name="about_proposition_2">Fokusiran na privatnost i bez reklama</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štanski ured</string>
<string name="category_post">Pošta</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">Kreiraj</string>
<string name="create">Napravi</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 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="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="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">Benzin</string>
<string name="category_fuel">Benzinske stanice</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 Mjesta i Ruta</string>
<string name="bookmarks_export">Izvoz svih Oznaka 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 favorite?</string>
<string name="track_recording_alert_title">Spremi u Oznake i Rute?</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 favorita</string>
<string name="pref_backup_now_summary_empty_lists">Nema Mjesta i Ruta za izradu sigurnosne kopije</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="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 spremljeno mjesto</item>
<item quantity="few">%d spremljena mjesta</item>
<item quantity="other">%d spremljenih mjesta</item>
<item quantity="one">%d Oznaka</item>
<item quantity="few">%d Oznake</item>
<item quantity="other">%d Oznaka</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 favorite</string>
<string name="bookmark_color">Boja Favorita</string>
<string name="sort_bookmarks">Sortiraj Oznake</string>
<string name="bookmark_color">Boja Oznake</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">Predaj</string>
<string name="editor_submit">Pošalji</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. \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">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_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,111 +552,4 @@
<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">Preferiti</string>
<string name="bookmarks_and_tracks">Luoghi preferiti e tracce</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">I miei luoghi preferiti su CoMaps</string>
<string name="share_bookmarks_email_subject">Questi sono 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 Preferiti?</string>
<string name="track_recording_alert_title">Salvare in Luoghi preferiti e tracce?</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">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>
<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>
<!-- message title of loading file -->
<string name="load_kmz_title">Žymės įkeliamos</string>
<string name="load_kmz_title">Žymių sąrašas įkeliamas</string>
<!-- Kmz file successful loading -->
<string name="load_kmz_successful">Žymės įkeltos! Galite jas rasti žemėlapyje arba žymių tvarkytuvės ekrane.</string>
<string name="load_kmz_successful">Žymių sąrašas įkeltas! Galite rasti žemėlapyje arba žymių tvarkytuvės ekrane.</string>
<!-- Kml file loading failed -->
<string name="load_kmz_failed">Žymių įkelti nepavyko. Gali būti, kad failas sugadintas.</string>
<string name="load_kmz_failed">Žymių sąrašo nepavyko įkelti. 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">Žymių sąrašai</string>
<string name="bookmark_lists">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</string>
<string name="bookmarks_import">Importuoti žymes ir trasas</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 pasižymėti, bakstelėkite ją žemėlapyje, o tada bakstelėkite žvaigždutės piktogramą</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="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 pasižymėtas žymes ir trasas</string>
<string name="bookmarks_export">Eksportuoti visas ž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">Pridėti žymę?</string>
<string name="track_recording_alert_title">Įrašyti į žymių ir trasų sąrašą?</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</string>
<string name="bookmarks_and_tracks">Žymės ir trasos</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,10 +780,9 @@
<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 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>
<item quantity="one">%d žymė</item>
<item quantity="few">%d žymės</item>
<item quantity="other">%d žymių</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>
@@ -808,12 +807,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">Nėra pasižymėtų vietų ar trasų atsarginei kopijai sudaryti</string>
<string name="pref_backup_now_summary_empty_lists">Neturite jokių žymių 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ų atsarginis kopijavimas</string>
<string name="pref_backup_title">Žymių ir trasų 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>
@@ -902,5 +901,4 @@
<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 nosūtīt to visiem lietotājiem?</string>
<string name="editor_share_to_all_dialog_title">Vai vēlaties to nosūtīt 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 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="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="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,25 +862,4 @@
<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,8 +16,6 @@
<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">@color/bg_app</item>
<item name="appBackground">?android:attr/colorBackground</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 kaart</string>
<string name="search_map">Zoeken op de kaart</string>
<!-- Location services are disabled by user alert - message -->
<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>
<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>
<!-- 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 in de instellingen</string>
<string name="precise_location_is_disabled_long_text">Voor nauwkeurige navigatie moet Nauwkeurige Locatie worden ingesteld bij Instellingen</string>
<!-- View and button titles for accessibility -->
<string name="zoom_to_country">Weergeven op kaart</string>
<string name="zoom_to_country">Weergeven op de 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 gedreven door de community</string>
<string name="about_headline">Open project, gemaakt door de community</string>
<!-- Text in About screen -->
<string name="about_proposition_1">• Gebruiksvriendelijk en afgewerkt</string>
<string name="about_proposition_1">• Gebruiksvriendelijk en gestroomlijnd</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">Volledige open source, non-profit, transparante besluitvorming en financiering.</string>
<string name="about_developed_by_enthusiasts">Volledig 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 kaart</string>
<string name="download_resources_continue">Ga naar de 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 lijst toevoegen</string>
<string name="add_new_set">Nieuwe groep 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">Eenheid van afstand</string>
<string name="measurement_units">Afstandseenheid</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">Camperfaciliteiten</string>
<string name="category_rv">Caravanfaciliteiten</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 is mislukt %1$s \n \n%2$s</string>
<string name="failed_to_open_file">Bestand openen 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 maken van favorieten</string>
<string name="pref_backup_title">Back-up 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-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_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_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-uplocatie</string>
<string name="pref_backup_now_summary_failed">Backup is mislukt</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_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-upmap is niet beschikbaar</string>
<string name="pref_backup_now_summary_folder_unavailable">De back-up map 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 da Lista</string>
<string name="bookmark_set_name">Nome do conjunto de favoritos</string>
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
<string name="bookmarks">Lugares</string>
<string name="bookmarks">Favoritos</string>
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
<string name="bookmarks_and_tracks">Favoritos</string>
<string name="bookmarks_and_tracks">Favoritos e trajetos</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 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>
<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>
<!-- message title of loading file -->
<string name="load_kmz_title">Carregando Favoritos</string>
<string name="load_kmz_title">A carregar 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. \nPočakajte …</string>
<string name="wait_several_minutes">To lahko traja nekaj minut. \nProsimo, poč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">Prevoz</string>
<string name="category_transport">Javni 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">Moji zaznamki na CoMaps</string>
<string name="share_bookmarks_email_subject">Nekdo je z vami delil zaznamke 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">Podrobno opišite težavo, da jo lahko skupnost OpenStreetMap odpravi.</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_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">Vnesite ime ulice</string>
<string name="empty_street_name_error">Prosimo, 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">Izbrišite vse nepotrebne podatke</string>
<string name="downloader_no_space_message">Prosimo, 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>. Ne dodajajte 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>. Prosimo, da ne dodajate 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">Posodobite CoMaps</string>
<string name="traffic_update_app">Prosimo, 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">Seznam priljubljenih</string>
<string name="bookmark_lists">Seznami</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</string>
<string name="bookmarks_import">Uvozi zaznamke in poti</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 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="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="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?</string>
<string name="track_recording_alert_title">Shrani med Zaznamke in sledi?</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 priljubljenih</string>
<string name="pref_backup_title">Varnostno kopiranje zaznamkov in sledi</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">Najprej izberite mapo in dodelite dovoljenja</string>
<string name="pref_backup_location_summary_initial">Prosimo, najprej izberite mapo in podelite 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">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="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="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, 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_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_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,6 +661,5 @@
<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">Vnesite polni URL, ki se začne z http:// ali https://</string>
<string name="pref_maplanguage_local">Krajevni jezik</string>
<string name="download_resources_custom_url_error_scheme">Prosimo, vnesite polni URL, ki se začne z https:// in konča z /</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">Listans namn</string>
<string name="bookmark_set_name">Bokmärkessamlingens namn</string>
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
<string name="bookmarks">Platser</string>
<string name="bookmarks">Bokmärken</string>
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
<string name="bookmarks_and_tracks">Favoriter</string>
<string name="bookmarks_and_tracks">Bokmärken och rutter</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">Mina CoMaps-favoriter</string>
<string name="share_bookmarks_email_subject">CoMaps bokmärken har delats med dig</string>
<!-- message title of loading file -->
<string name="load_kmz_title">Läser in favoriter</string>
<string name="load_kmz_title">Läser in bokmärken</string>
<!-- Kmz file successful loading -->
<string name="load_kmz_successful">Favoriterna lästes in! Du kan hitta dem på kartan eller i favorithanteraren.</string>
<string name="load_kmz_successful">Bokmärkena lästes in! Du kan hitta dem på kartan eller i Bokmärkeshanteraren.</string>
<!-- Kml file loading failed -->
<string name="load_kmz_failed">Inläsningen av favoriterna misslyckades. Filen kan vara skadad eller defekt.</string>
<string name="load_kmz_failed">Inläsningen av bokmärkena 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</string>
<string name="pref_tts_test_voice_title">Testa röstinstruktioner (TTS, Text-To-Speech)</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 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="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="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,5 +850,4 @@
<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,8 +65,6 @@
<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,16 +89,8 @@
<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">@color/fg_editor</item>
<item name="cardBackgroundColor">?cardBackground</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,6 +239,10 @@
<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>
@@ -283,13 +287,13 @@
</style>
<style name="MwmWidget.BottomSheetDialog" parent="Widget.Material3.BottomSheet.Modal">
<item name="backgroundTint">?appBackground</item>
<item name="backgroundTint">?colorSurfaceContainerLow</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">?appBackground</item>
<item name="android:background">?colorSurfaceContainerLow</item>
<item name="behavior_hideable">false</item>
</style>

View File

@@ -278,21 +278,15 @@
<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,10 +4,11 @@ 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
{
@@ -35,10 +36,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);
}
@@ -46,10 +47,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,12 +131,6 @@ 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

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

View File

@@ -182,7 +182,8 @@ 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,16 +1505,20 @@ 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