mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 13:03:36 +00:00
Compare commits
16 Commits
x7z4w-map
...
map-per-co
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
21c9a58173 | ||
|
|
8007c0df53 | ||
|
|
02ac1d8977 | ||
|
|
3c2e77f59e | ||
|
|
c1760bbc37 | ||
|
|
3511dbb692 | ||
|
|
e238a317f1 | ||
|
|
2e85899fcb | ||
|
|
ce978d8ede | ||
|
|
d56f9700f5 | ||
|
|
cc042c3d1c | ||
|
|
4f739d98b0 | ||
|
|
4691de7a66 | ||
|
|
3c082b0629 | ||
|
|
a468bd3fab | ||
|
|
fc87316184 |
@@ -1,69 +1,55 @@
|
||||
# All non-assigned.
|
||||
* @organicmaps/mergers
|
||||
# Visual design.
|
||||
/android/app/src/main/res/drawable*/ @organicmaps/design
|
||||
/android/app/src/main/res/font/ @organicmaps/design
|
||||
/android/app/src/main/res/mipmap*/ @organicmaps/design
|
||||
/data/*.ttf @organicmaps/design
|
||||
/data/resources-svg/ @organicmaps/design
|
||||
/data/search-icons/ @organicmaps/design
|
||||
/iphone/Maps/Images.xcassets/ @organicmaps/design
|
||||
/android/app/src/main/res/drawable*/ @comaps/design
|
||||
/android/app/src/main/res/font/ @comaps/design
|
||||
/android/app/src/main/res/mipmap*/ @comaps/design
|
||||
/data/*.ttf @comaps/design
|
||||
/data/resources-svg/ @comaps/design
|
||||
/data/search-icons/ @comaps/design
|
||||
/iphone/Maps/Images.xcassets/ @comaps/design
|
||||
# Android.
|
||||
/android/ @organicmaps/android
|
||||
/android/app/src/main/java/app/organicmaps/car/ @organicmaps/android-auto
|
||||
/docs/ANDROID_LOCATION_TEST.md @organicmaps/android
|
||||
/docs/JAVA_STYLE.md @organicmaps/android
|
||||
/android/ @comaps/android
|
||||
/android/app/src/main/java/app/comaps/car/ @comaps/android-auto
|
||||
/docs/ANDROID_LOCATION_TEST.md @comaps/android
|
||||
/docs/JAVA_STYLE.md @comaps/android
|
||||
# no owner for translation changes
|
||||
/android/app/src/main/res/values*/strings.xml
|
||||
# iOS.
|
||||
/iphone/ @organicmaps/ios
|
||||
/xcode/ @organicmaps/ios
|
||||
/docs/OBJC_STYLE.md @organicmaps/ios
|
||||
/iphone/ @comaps/ios
|
||||
/xcode/ @comaps/ios
|
||||
/docs/OBJC_STYLE.md @comaps/ios
|
||||
# no owner for translation changes
|
||||
/iphone/plist.txt
|
||||
/iphone/Maps/LocalizedStrings/
|
||||
# Qt
|
||||
/qt/ @organicmaps/qt
|
||||
# Rendering
|
||||
/drape/ @organicmaps/rendering
|
||||
/drape_frontend/ @organicmaps/rendering
|
||||
# Map Data.
|
||||
/tools/python/maps_generator/ @organicmaps/data
|
||||
/generator/ @organicmaps/data
|
||||
/topography_generator/ @organicmaps/data
|
||||
/data/borders/ @organicmaps/data
|
||||
/data/conf/isolines/ @organicmaps/data
|
||||
/docs/SUBWAY_GENERATION.md @organicmaps/data
|
||||
/docs/MAPS.md @organicmaps/data
|
||||
/docs/EXPERIMENTAL_PUBLIC_TRANSPORT_SUPPORT.md @organicmaps/data
|
||||
# no owner (changed often to add a new POI)
|
||||
/generator/generator_tests/osm_type_test.cpp
|
||||
# Map Styles.
|
||||
/data/styles/ @organicmaps/styles
|
||||
/data/types.txt @organicmaps/styles
|
||||
/data/visibility.txt @organicmaps/styles
|
||||
/data/mapcss-mapping.csv @organicmaps/styles
|
||||
/data/replaced_tags.txt @organicmaps/styles
|
||||
/data/classificator.txt @organicmaps/styles
|
||||
/data/drules_* @organicmaps/styles
|
||||
/data/styles/ @comaps/styles
|
||||
/data/types.txt @comaps/styles
|
||||
/data/visibility.txt @comaps/styles
|
||||
/data/mapcss-mapping.csv @comaps/styles
|
||||
/data/replaced_tags.txt @comaps/styles
|
||||
/data/classificator.txt @comaps/styles
|
||||
/data/drules_* @comaps/styles
|
||||
/docs/STYLES.md
|
||||
/tools/kothic/ @organicmaps/styles
|
||||
/tools/kothic/ @comaps/styles
|
||||
# DevOps.
|
||||
/.forgejo/workflows @organicmaps/devops
|
||||
/android/*gradle* @organicmaps/devops
|
||||
/docs/RELEASE_MANAGEMENT.md @organicmaps/devops
|
||||
/xcode/fastlane/ @organicmaps/devops
|
||||
# Growth.
|
||||
README.md @organicmaps/growth
|
||||
/.forgejo/FUNDING.yml @organicmaps/growth
|
||||
/android/app/src/fdroid/play/ @organicmaps/growth
|
||||
/android/app/src/google/play/ @organicmaps/growth
|
||||
/iphone/metadata/ @organicmaps/growth
|
||||
/.forgejo/workflows @comaps/devops
|
||||
/android/*gradle* @comaps/devops
|
||||
/docs/RELEASE_MANAGEMENT.md @comaps/devops
|
||||
/xcode/fastlane/ @comaps/devops
|
||||
/tools/python/maps_generator/ @comaps/devops
|
||||
/generator/ @comaps/devops
|
||||
/topography_generator/ @comaps/devops
|
||||
/data/borders/ @comaps/devops
|
||||
/data/conf/isolines/ @comaps/devops
|
||||
/docs/SUBWAY_GENERATION.md @comaps/devops
|
||||
/docs/MAPS.md @comaps/devops
|
||||
/docs/EXPERIMENTAL_PUBLIC_TRANSPORT_SUPPORT.md @comaps/devops
|
||||
# Legal.
|
||||
LEGAL @organicmaps/legal
|
||||
LICENSE @organicmaps/legal
|
||||
NOTICE @organicmaps/legal
|
||||
CONTRIBUTORS @organicmaps/legal
|
||||
/docs/CODE_OF_CONDUCT.md @organicmaps/legal
|
||||
/docs/DCO.md @organicmaps/legal
|
||||
/docs/GOVERNANCE.md @organicmaps/legal
|
||||
LEGAL @comaps/admins
|
||||
LICENSE @comaps/admins
|
||||
NOTICE @comaps/admins
|
||||
CONTRIBUTORS @comaps/admins
|
||||
/docs/CODE_OF_CONDUCT.md @comaps/admins
|
||||
/docs/DCO.md @comaps/admins
|
||||
/docs/GOVERNANCE.md @comaps/admins
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
open_collective: comaps
|
||||
liberapay: comaps
|
||||
custom: ["https://comaps.app/donate/"]
|
||||
|
||||
@@ -2,5 +2,3 @@
|
||||
480fa6c2fcf53be296504ac6ba8e6b3d70f92b42
|
||||
a6ede2b1466f0c9d8a443600ef337ba6b5832e58
|
||||
1377b81bf1cac72bb6da192da7fed6696d5d5281
|
||||
0288b97b1367bb971eded1018f560598ea274e6c
|
||||
bf30165b5f5de0907c3c64524a3bf8121624b0b7
|
||||
|
||||
3
.github/FUNDING.yml
vendored
Normal file
3
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
open_collective: comaps
|
||||
liberapay: comaps
|
||||
custom: ["https://comaps.app/donate/"]
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -155,6 +155,8 @@ android/huawei-appgallery.json
|
||||
android/res/xml/network_security_config.xml
|
||||
./server/
|
||||
iphone/Maps/app.omaps/
|
||||
# Generated file
|
||||
libs/indexer/localized_types_map.cpp
|
||||
|
||||
*.li
|
||||
|
||||
|
||||
@@ -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
@@ -1 +1 @@
|
||||
Paprasta ir patogi navigacija – Turiningos kelionės – Vystoma bendruomenės
|
||||
Paprasta ir patogi navigacija – Turiningesnės kelionės – Vystoma bendruomenės
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
Brezplačno in odprtokodno zemljevidno orodje, ki ga vodi skupnost, temelji na podatkih OpenStreetMap in je okrepljena s predanostjo transparentnosti, zasebnosti in nedobičkonosnosti. CoMaps je izpeljanka OrganicMaps, ta pa je izpeljanka Maps.ME.
|
||||
Brezplačno in odprtokodno zemljevidno orodje, ki ga vodi skupnost, temelji na podatkih OpenStreetMap in je okrepljena s predanostjo transparentnosti, zasebnosti in nepridobitnosti. CoMaps je izpeljanka OrganicMaps, ta pa je izpeljanka Maps.ME.
|
||||
|
||||
Preverite si o razlogih za ta projekt in njegovi usmerjenosti na <b><i>codeberg.org/comaps</i></b>.
|
||||
Preberite si o razlogih za ta projekt in njegovi usmerjenosti na <b><i>codeberg.org/comaps</i></b>.
|
||||
Pridružite se skupnosti in pomagajte narediti najboljše zemljevidno orodje
|
||||
• Uporabljajte orodje in širite glas o njem
|
||||
• Dajajte povratne informacije in poročajte o napakah
|
||||
• Posodabljajte podatke zemljevida v tem orodju ali na spletni strani OpenStreetMap
|
||||
|
||||
‣ <b>Osredotočeno na uporabo brez povezave</b>: Načrtujte in se usmerjajte na vašem potovanju v tujini vrez potrebe po mobilnih podatkih, iščite vmesne točke potocanja ko ste na daljšem pohodu ipd. Vse zmogljivosti orodja so zasnovane za delo brez povezave.
|
||||
‣ <b>Osredotočeno na uporabo brez povezave</b>: Načrtujte in se usmerjajte na vašem potovanju v tujini vrez potrebe po mobilnih podatkih, iščite vmesne točke potovanja ko ste na daljšem pohodu ipd. Vse zmogljivosti orodja so zasnovane za delo brez povezave.
|
||||
‣ <b>Spoštovanje zasebnosti</b>: orodje je zasnovano z mislijo na zasebnost – ne prepoznava oseb, ne sledi in ne zbira osebnih podatkov. Brez oglasov.
|
||||
‣ <b>Preprosto in dodelano</b>: nujne zmogljivosti, enostavne za uporabo, ki preprosto delujejo.
|
||||
‣ <b>Prihrani vašo baterijo in prostor.</b>: ne izčrpava vaše baterije kakor druga usmerjevalna orodja. Strnjeni zemljevidi prihranijo dragocen prostor na vašem telefonu.
|
||||
‣ <b>Brezplačno in ustvarjeno v skupnosti</b>: ljudje kot ste vi pomagajo ustvarjati to orodje, tako da dodajajo kraje na OpenStreetMap, preizkušajo in dajejo povratne informacije o zmogljivostih in prispevajo svoje razvijalske sposobnosti in sredstva.
|
||||
‣ <b>Odprto in transparentno odločanje in finance, nedobičkonosno in popolnoma odprtokodno.</b>
|
||||
‣ <b>Odprto in transparentno odločanje in finance, nepridobitno in popolnoma odprtokodno.</b>
|
||||
|
||||
<b>Glavne zmogljivosti</b>:
|
||||
• Prenosljivi podrobni zemljevidi s kraji, ki na Googlovoh zemljevidih niso na voljo.
|
||||
• Prenosljivi podrobni zemljevidi s kraji, ki na Googlovih zemljevidih niso na voljo.
|
||||
• Prikaz za dejavnosti na prostem s poudarjenimi pohodniškimi potmi, tabornimi prostori, vodnimi viri, vrhovi, plastnicami itd.
|
||||
• Pešpoti in kolesarke poti
|
||||
• Kraji zanimanja, npr. restavracije, bencinske črpalke, hoteli, trgovine, znamenitosti in mnogo več
|
||||
|
||||
@@ -1 +1 @@
|
||||
Paprasta ir patogi navigacija – Turiningos kelionės – Vystoma bendruomenės
|
||||
Paprasta ir patogi navigacija – Turiningesnės kelionės – Vystoma bendruomenės
|
||||
|
||||
@@ -1 +1 @@
|
||||
CoMaps - Usmerjajte zasebno
|
||||
CoMaps - Usmerjajte se zasebno
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -253,7 +253,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);
|
||||
@@ -372,7 +372,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);
|
||||
@@ -424,17 +424,17 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity
|
||||
default -> throw new AssertionError("Unexpected result code = " + result);
|
||||
};
|
||||
|
||||
mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(titleId)
|
||||
.setMessage(messageId)
|
||||
.setCancelable(true)
|
||||
.setOnCancelListener((dialog) -> setAction(PAUSE))
|
||||
.setPositiveButton(R.string.try_again,
|
||||
(dialog, which) -> {
|
||||
setAction(TRY_AGAIN);
|
||||
onTryAgainClicked();
|
||||
})
|
||||
.setOnDismissListener(dialog -> mAlertDialog = null)
|
||||
.show();
|
||||
mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog)
|
||||
.setTitle(titleId)
|
||||
.setMessage(messageId)
|
||||
.setCancelable(true)
|
||||
.setOnCancelListener((dialog) -> setAction(PAUSE))
|
||||
.setPositiveButton(R.string.try_again,
|
||||
(dialog, which) -> {
|
||||
setAction(TRY_AGAIN);
|
||||
onTryAgainClicked();
|
||||
})
|
||||
.setOnDismissListener(dialog -> mAlertDialog = null)
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -10,6 +10,7 @@ import androidx.fragment.app.DialogFragment;
|
||||
|
||||
public class BaseMwmDialogFragment extends DialogFragment
|
||||
{
|
||||
|
||||
protected int getStyle()
|
||||
{
|
||||
return STYLE_NORMAL;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
@@ -397,7 +398,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);
|
||||
|
||||
@@ -405,16 +406,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));
|
||||
@@ -462,16 +463,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);
|
||||
}
|
||||
});
|
||||
@@ -486,16 +484,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);
|
||||
}
|
||||
});
|
||||
@@ -503,82 +498,74 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
return new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.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;
|
||||
}
|
||||
@@ -598,8 +585,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]);
|
||||
@@ -617,8 +603,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];
|
||||
|
||||
@@ -629,30 +614,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);
|
||||
}
|
||||
|
||||
@@ -661,8 +643,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);
|
||||
}
|
||||
|
||||
@@ -808,8 +789,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);
|
||||
|
||||
@@ -1041,15 +1023,14 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
private void placeDisused()
|
||||
{
|
||||
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
|
||||
.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)
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
{
|
||||
|
||||
@@ -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>
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,6 +80,6 @@ public class PlacePageButtonFactory
|
||||
yield R.drawable.ic_more;
|
||||
}
|
||||
};
|
||||
return new PlacePageButton(titleId, iconId, buttonType);
|
||||
return new PlacePageButton(titleId, iconId, buttonType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -704,10 +705,12 @@ public class PlacePageView extends Fragment
|
||||
}
|
||||
else
|
||||
{
|
||||
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);
|
||||
});
|
||||
|
||||
String countryId = MapManager.nativeGetSelectedCountry();
|
||||
|
||||
@@ -750,7 +753,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();
|
||||
@@ -851,9 +856,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
|
||||
@@ -879,12 +885,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
|
||||
@@ -899,7 +906,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;
|
||||
@@ -907,12 +914,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
|
||||
{
|
||||
@@ -922,16 +929,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);
|
||||
@@ -940,8 +949,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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -31,8 +31,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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960">
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M240,520q-17,0 -28.5,-11.5T200,480q0,-17 11.5,-28.5T240,440h480q17,0 28.5,11.5T760,480q0,17 -11.5,28.5T720,520L240,520Z"
|
||||
android:pathData="M19,13H5v-2h14v2z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="960"
|
||||
android:viewportHeight="960">
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M440,520L240,520q-17,0 -28.5,-11.5T200,480q0,-17 11.5,-28.5T240,440h200v-200q0,-17 11.5,-28.5T480,200q17,0 28.5,11.5T520,240v200h200q17,0 28.5,11.5T760,480q0,17 -11.5,28.5T720,520L520,520v200q0,17 -11.5,28.5T480,760q-17,0 -28.5,-11.5T440,720v-200Z"
|
||||
android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"
|
||||
android:fillColor="@android:color/white"/>
|
||||
</vector>
|
||||
|
||||
@@ -402,11 +402,13 @@
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/margin_half"
|
||||
android:fontFamily="@string/robotoMedium"
|
||||
android:text="@string/editor_other_info"
|
||||
android:textAppearance="@style/MwmTextAppearance.Body3"/>
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/custom_input"
|
||||
android:layout_marginBottom="@dimen/margin_quarter"
|
||||
style="@style/MwmWidget.Editor.CustomTextInput"
|
||||
android:gravity="center_vertical"
|
||||
android:minHeight="74dp"
|
||||
@@ -416,6 +418,7 @@
|
||||
android:id="@+id/input"
|
||||
style="@style/MwmWidget.Editor.FieldLayout.EditText"
|
||||
android:inputType="textMultiLine"
|
||||
android:gravity="top"
|
||||
android:hint="@string/editor_note_hint"/>
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
</LinearLayout>
|
||||
|
||||
@@ -11,14 +11,14 @@
|
||||
style="@style/MwmWidget.M3.FAB.MapButton.Zoom"
|
||||
android:tint="?iconTint"
|
||||
app:srcCompat="@drawable/ic_plus"
|
||||
app:shapeAppearance="@style/Widget.MaterialComponents.FloatingActionButton"
|
||||
android:layout_marginBottom="@dimen/margin_half"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearance.MapButton.Zoom.Minus"
|
||||
android:layout_marginBottom="@dimen/margin_eighth"
|
||||
android:contentDescription="@string/zoom_in"/>
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/nav_zoom_out"
|
||||
style="@style/MwmWidget.M3.FAB.MapButton.Zoom"
|
||||
android:tint="?iconTint"
|
||||
app:srcCompat="@drawable/ic_minus"
|
||||
app:shapeAppearance="@style/Widget.MaterialComponents.FloatingActionButton"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearance.MapButton.Zoom.Plus"
|
||||
android:contentDescription="@string/zoom_out"/>
|
||||
</LinearLayout>
|
||||
@@ -912,4 +912,12 @@
|
||||
<string name="charge_socket_type1">Tipus 1</string>
|
||||
<string name="charge_socket_nacs">NACS</string>
|
||||
<string name="charge_socket_chademo">CHAdeMO</string>
|
||||
<string name="place_page_too_old_to_edit">L\'edició de dades d\'OpenStreetMap està deshabilitada perquè les dades del mapa són massa antigues.</string>
|
||||
<string name="place_page_map_too_old_title">Dades del mapa desactualitzades</string>
|
||||
<string name="place_page_map_too_old_description">Les teves dades de mapa son molt antigues, per favor actualitza el mapa.</string>
|
||||
<string name="place_page_app_too_old_description">Les teues dades del mapa son molt antigues, per favor actualitza l\'app de CoMaps.</string>
|
||||
<string name="place_page_update_too_old_map">Actualitzar regió del mapa</string>
|
||||
<string name="prefs_speed_cameras_information">Les advertències de càmeres radar estan deshabilitades als països on estan prohibides per llei.</string>
|
||||
<string name="navigation_start_tts_message">"Iniciant Navegació, idioma d\'instruccions de veu: "</string>
|
||||
<string name="navigation_start_tts_disabled_message">Instruccions de veu desactivades: motor TTS no disponible</string>
|
||||
</resources>
|
||||
|
||||
@@ -907,4 +907,10 @@
|
||||
<string name="charge_socket_schuko">Domovní EU</string>
|
||||
<string name="prefs_speed_cameras_information">Upozornění na radary jsou vypnuty v zemích, kde je tato funkcionalita zakázána místními zákony.</string>
|
||||
<string name="navigation_start_tts_message">"Spouštím navigaci, jazyk hlasových instrukcí: "</string>
|
||||
<string name="place_page_map_too_old_title">Mapová data jsou zastaralá</string>
|
||||
<string name="place_page_map_too_old_description">Vaše mapová data jsou velmi stará, doporučujeme je aktualizovat.</string>
|
||||
<string name="place_page_app_too_old_description">Vaše aktuální mapová data jsou velmi stará, aktualizujte prosím aplikaci CoMaps.</string>
|
||||
<string name="place_page_update_too_old_map">Aktualizovat oblast mapy</string>
|
||||
<string name="place_page_too_old_to_edit">Úprava OpenStreetMap je zakázaná, protože mapová data jsou příliš stará.</string>
|
||||
<string name="navigation_start_tts_disabled_message">Hlasové pokyny vypnuty: služba TTS není dostupná</string>
|
||||
</resources>
|
||||
|
||||
@@ -896,4 +896,10 @@
|
||||
<string name="charge_socket_schuko">Europæisk</string>
|
||||
<string name="prefs_speed_cameras_information">Advarsler om hastighedskameraer er deaktiveret i lande, hvor advarsler er forbudt i henhold til lokal lovgivning.</string>
|
||||
<string name="navigation_start_tts_message">"Starter navigation, sprog for stemmeinstruktioner: "</string>
|
||||
<string name="place_page_map_too_old_title">Kortdata forældet</string>
|
||||
<string name="place_page_map_too_old_description">Dine nuværende kortdata er meget gamle. Opdater kortet.</string>
|
||||
<string name="place_page_app_too_old_description">Dine nuværende kortdata er meget gamle. Opdater CoMaps-appen.</string>
|
||||
<string name="place_page_update_too_old_map">Opdater kortregion</string>
|
||||
<string name="place_page_too_old_to_edit">Redigering af OpenStreetMap er deaktiveret, fordi kortdataene er for gamle.</string>
|
||||
<string name="navigation_start_tts_disabled_message">Stemmeinstruktioner deaktiveret: TTS-motor ikke tilgængelig</string>
|
||||
</resources>
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
<!-- "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 del grupo de marcadores</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">Marcadores</string>
|
||||
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
|
||||
@@ -246,7 +246,7 @@
|
||||
<!-- Button in the main menu -->
|
||||
<string name="donate">Donar</string>
|
||||
<!-- Button in the main Help dialog -->
|
||||
<string name="how_to_support_us">Apoya el proyecto</string>
|
||||
<string name="how_to_support_us">Apoya y mejora el proyecto CoMaps</string>
|
||||
<!-- Button in the main Help dialog -->
|
||||
<string name="copyright">Derechos de autor</string>
|
||||
<!-- Text in menu + Button in the main Help dialog -->
|
||||
@@ -914,4 +914,12 @@
|
||||
<string name="editor_mark_business_vacant_description">Usa esto si el negocio ya no existe y el local ha quedado vacío para un nuevo inquilino.</string>
|
||||
<string name="editor_submit">Enviar</string>
|
||||
<string name="power_management">Gestión de energía</string>
|
||||
<string name="place_page_map_too_old_title">Datos del mapa anticuados</string>
|
||||
<string name="place_page_map_too_old_description">Tus datos del mapa están muy anticuados, por favor actualiza el mapa.</string>
|
||||
<string name="place_page_app_too_old_description">Tus datos del mapa están muy anticuados, por favor actualiza la aplicación CoMaps.</string>
|
||||
<string name="place_page_update_too_old_map">Actualizar mapa de la región</string>
|
||||
<string name="place_page_too_old_to_edit">La edición de OpenStreetMap está deshabilitada porque los datos del mapa están muy anticuados.</string>
|
||||
<string name="prefs_speed_cameras_information">Las advertencias de radares de velocidad están deshabilitadas en países donde las alertas están prohibidas por ley.</string>
|
||||
<string name="navigation_start_tts_message">"Iniciando Navegación, idioma de las instrucciones por voz: "</string>
|
||||
<string name="navigation_start_tts_disabled_message">Instrucciones por voz deshabilitadas: Motor de TTS no disponible</string>
|
||||
</resources>
|
||||
|
||||
@@ -905,4 +905,10 @@
|
||||
<string name="charge_socket_schuko">EU-sisene</string>
|
||||
<string name="prefs_speed_cameras_information">Kiiruskaamerate teavitused on nendes riikides lülitatud välja, kus seda keelab kohalik seadusandlus.</string>
|
||||
<string name="navigation_start_tts_message">"Alustan tee juhatamist, hääljuhiste keel: "</string>
|
||||
<string name="place_page_map_too_old_title">Kaardiandmed on aegunud</string>
|
||||
<string name="place_page_map_too_old_description">Sinu kasutatavad kaardiandmed on väga vanad. Palun uuenda andmeid.</string>
|
||||
<string name="place_page_app_too_old_description">Sinu kasutatavad kaardiandmed on väga vanad. Palun uuenda CoMapsi rakendust.</string>
|
||||
<string name="place_page_update_too_old_map">Uuenda piirkonna kaardiandmeid</string>
|
||||
<string name="place_page_too_old_to_edit">Kuna kaardiandmed on liiga vanad, siis OpenStreetMapi muutmise võimalus on lülitatud välja.</string>
|
||||
<string name="navigation_start_tts_disabled_message">Hääljuhiste kasutamine on lülitatud välja: kõnesünteesimootorit pole saadaval</string>
|
||||
</resources>
|
||||
|
||||
@@ -25,44 +25,44 @@
|
||||
<!-- Location services are disabled by user alert - message -->
|
||||
<string name="location_is_disabled_long_text">هماینک، شما همهی سامانههای گیاگیابی را برای این دستگاه یا این برنامه ناکارا کردهاید. خواهشمند است آن را در پیکربندیها کارا کنید.</string>
|
||||
<!-- A dialog title, that warns a user that Precise Location is disabled and suggests to turn it on -->
|
||||
<string name="limited_accuracy">دقت محدود</string>
|
||||
<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 -->
|
||||
<string name="country_status_download_failed">دانلود با شکست مواجه شد</string>
|
||||
<string name="country_status_download_failed">بارگیری ناکام بود</string>
|
||||
<!-- Button text for the button under the country_status_download_failed message -->
|
||||
<string name="try_again">تلاش مجدد</string>
|
||||
<string name="about_menu_title">CoMaps دربارهی</string>
|
||||
<string name="try_again">تلاش دوباره</string>
|
||||
<string name="about_menu_title">درباره CoMaps</string>
|
||||
<!-- Text in About screen -->
|
||||
<string name="about_proposition_1">• آسان برای استفاده و جلا</string>
|
||||
<string name="about_proposition_1">• بکارگیری آسان اود پیراسته</string>
|
||||
<!-- Text in About screen -->
|
||||
<string name="about_proposition_2">• حریم خصوصی متمرکز و بدون تبلیغات</string>
|
||||
<string name="about_proposition_2">• حریم خصوصی متمرکز اود بیآگهی</string>
|
||||
<!-- Text in About screen -->
|
||||
<string name="about_proposition_3">• آفلاین، سریع و جمع و جور</string>
|
||||
<string name="about_proposition_3">• آفلاین، چابک و جمع و جور</string>
|
||||
<!-- Text in About screen -->
|
||||
<string name="about_developed_by_enthusiasts">منبع کاملا باز، نه برای سود، تصمیم گیری شفاف و امور مالی شفاف.</string>
|
||||
<!-- The button that opens system location settings -->
|
||||
<string name="location_settings">تنظیمات مکان</string>
|
||||
<string name="location_settings">پیکربندیهای گیاگ</string>
|
||||
<string name="close">بستن</string>
|
||||
<string name="unsupported_phone">متأسفانه دستگاه شما از آن پشتیبانی نمیکندبرنامه برای اجرا به OpenGL نیازمند است.</string>
|
||||
<string name="download">دانلود</string>
|
||||
<string name="download">بارگیری</string>
|
||||
<!-- Used in DownloadResources startup screen -->
|
||||
<string name="not_enough_free_space_on_sdcard">لطفا مقداری از فضای ذخیرهسازی را آزاد نمایید</string>
|
||||
<string name="download_resources">قبل از استفاده از اپلیکیشن, اجازه دهید تا ما نقشه جهانی را بر روی موبایل شما دانلود کنیم. \nمقدار %s از حافظه شما اشغال می شود.</string>
|
||||
<string name="download_resources_continue">برو به نقشه</string>
|
||||
<string name="downloading_country_can_proceed">درحال دانلود %1$s (%2$s). شما اکنون می توانید \nبه نقشه بروید.</string>
|
||||
<string name="download_country_ask">دانلود %1$s؟ (%2$s)</string>
|
||||
<string name="downloading_country_can_proceed">بارگیری میشود %1$s (%2$s). شما اکنون میتوانید\nبه نقشه بروید.</string>
|
||||
<string name="download_country_ask">بارگیری %1$s؟ (%2$s)</string>
|
||||
<string name="update_country_ask">بروزرسانی %1$s؟ (%2$s)</string>
|
||||
<!-- REMOVE THIS STRING AFTER REFACTORING -->
|
||||
<string name="pause">درنگ</string>
|
||||
<!-- REMOVE THIS STRING AFTER REFACTORING -->
|
||||
<string name="continue_button">ادامه</string>
|
||||
<!-- Show popup notification on top of the map when country download has failed. -->
|
||||
<string name="download_country_failed">%s دانلود با شکست مواجه شد</string>
|
||||
<string name="download_country_failed">%s بارگیری ناکام بود</string>
|
||||
<!-- "Add new bookmark list" dialog title -->
|
||||
<string name="add_new_set">اضافه کردن مجموعه جدید</string>
|
||||
<string name="add_new_set">افزودن پهرستی نو</string>
|
||||
<!-- Should be used in the bookmarks-only context, see bookmarks_and_tracks if tracks are also implied. -->
|
||||
<string name="bookmarks">نشانهها</string>
|
||||
<!-- "Bookmarks and Tracks" dialog title, also sync it with iphone/plist.txt -->
|
||||
@@ -778,7 +778,7 @@
|
||||
<string name="panoramax">تصویر Panoramax</string>
|
||||
<string name="app_site_url">https://comaps.app</string>
|
||||
<string name="saved">ذخیره شد</string>
|
||||
<string name="about_headline">رایگان برای همه، ساخته شده با عشق</string>
|
||||
<string name="about_headline">پروژهای باز نیرو گرفته از انجمن</string>
|
||||
<string name="pedestrian">پیاده</string>
|
||||
<string name="bicycle">دوچرخه</string>
|
||||
<string name="backup_interval_every_week">هفتگی</string>
|
||||
|
||||
@@ -524,7 +524,7 @@
|
||||
<string name="editor_share_to_all_dialog_title">Haluatko lähettää sen kaikille käyttäjille?</string>
|
||||
<!-- Dialog before publishing the modifications to the public map. -->
|
||||
<string name="editor_share_to_all_dialog_message_1">Varmista, ettet syöttänyt henkilökohtaisia tietojasi.</string>
|
||||
<string name="editor_share_to_all_dialog_message_2">OpenStreetMap-muokkaimet tarkistavat muutokset ja ottavat sinuun yhteyttä, jos niillä on kysyttävää</string>
|
||||
<string name="editor_share_to_all_dialog_message_2">OpenStreetMap-muokkaajat tarkistavat muutokset ja ottavat sinuun yhteyttä, jos heillä on kysyttävää.</string>
|
||||
<string name="navigation_stop_button">Lopeta</string>
|
||||
<!-- Shown as toast when starting the recent track recording -->
|
||||
<string name="track_recording">Reitin kirjaaminen</string>
|
||||
@@ -903,4 +903,12 @@
|
||||
<string name="editor_submit">Lähetä</string>
|
||||
<string name="list_description_empty">Muokkaa listaa lisätäksesi kuvauksen</string>
|
||||
<string name="editor_business_vacant_button">Liike on tyhjillään</string>
|
||||
<string name="place_page_map_too_old_title">Karttatiedot vanhentuneet</string>
|
||||
<string name="place_page_map_too_old_description">Nykyinen karttadata on hyvin vanhaa, päivitä kartta.</string>
|
||||
<string name="place_page_app_too_old_description">Nykyinen karttadata on hyvin vanhaa, päivitä CoMaps-sovellus.</string>
|
||||
<string name="place_page_update_too_old_map">Päivitä kartta-alue</string>
|
||||
<string name="place_page_too_old_to_edit">OpenStreetMap-muokkaus on poistettu käytöstä, koska karttadata on liian vanhaa.</string>
|
||||
<string name="prefs_speed_cameras_information">Nopeuskameravaroitukset on poistettu käytöstä niissä maissa, missä varoitukset on kielletty lain nojalla.</string>
|
||||
<string name="power_management">Virranhallinta</string>
|
||||
<string name="navigation_start_tts_message">"Käynnistetään navigointi, ääniohjeistuksen kieli: "</string>
|
||||
</resources>
|
||||
|
||||
@@ -897,7 +897,7 @@
|
||||
<string name="editor_place_doesnt_exist_description">Décrivez le lieu afin de signaler l\'erreur à la communauté OpenStreetMap</string>
|
||||
<string name="offline_explanation_text">Une carte doit être téléchargée pour visualiser et vous déplacer dans une zone.\nTéléchargez les cartes des zones que vous souhaitez visiter.</string>
|
||||
<string name="list_description_empty">Modifier la liste pour ajouter une description</string>
|
||||
<string name="avoid_paved">Éviter les routes goudronnées</string>
|
||||
<string name="avoid_paved">Éviter les routes pavées</string>
|
||||
<string name="opens_at">Ouvre à %s</string>
|
||||
<string name="closes_at">Ferme à %s</string>
|
||||
<string name="opens_day_at">Ouverture le %1$s à %2$s</string>
|
||||
@@ -913,4 +913,12 @@
|
||||
<string name="editor_submit">Soumettre</string>
|
||||
<string name="power_management">Gestion de l\'énergie</string>
|
||||
<string name="charge_socket_schuko">Europe</string>
|
||||
<string name="place_page_map_too_old_title">Carte obsolète</string>
|
||||
<string name="place_page_map_too_old_description">Les données de la carte actuelle sont anciennes, pensez à les mettre à jour.</string>
|
||||
<string name="place_page_update_too_old_map">Mettre à jour la carte</string>
|
||||
<string name="place_page_too_old_to_edit">Les modifications OpenStreetMap sont désactivées car les données de la carte sont trop anciennes.</string>
|
||||
<string name="place_page_app_too_old_description">Vos données cartographiques actuelles sont très anciennes, veuillez mettre à jour l\'application CoMaps.</string>
|
||||
<string name="prefs_speed_cameras_information">Les avertissements relatifs aux radars de vitesse sont désactivés dans les pays où les alertes sont interdites par la législation locale.</string>
|
||||
<string name="navigation_start_tts_message">"Navigation de démarrage, langue des instructions vocales : "</string>
|
||||
<string name="navigation_start_tts_disabled_message">Instructions vocales désactivées : moteur de synthèse vocale non disponible</string>
|
||||
</resources>
|
||||
|
||||
@@ -261,4 +261,13 @@
|
||||
<string name="dialog_routing_system_error">Sistemska greška</string>
|
||||
<string name="dialog_routing_application_error">Nije moguće napraviti rutu zbog greške u aplikaciji</string>
|
||||
<string name="dialog_routing_try_again">Pokušajte ponovno</string>
|
||||
<string name="search_not_found_query">Preuzmite regiju u kojoj pretražujete ili pokušajte dodati naziv obližnjeg grada/sela.</string>
|
||||
<string name="search_history_text">Pogledajte svoja nedavna pretraživanja</string>
|
||||
<string name="read_in_wikipedia">Wikipedija</string>
|
||||
<string name="p2p_your_location">Vaša lokacija</string>
|
||||
<string name="p2p_only_from_current">Navigacija je dostupna samo od vaše trenutne lokacije</string>
|
||||
<string name="p2p_reroute_from_current">Želite li isplanirati rutu od vaše trenutne lokacije?</string>
|
||||
<string name="editor_time_add">Dodaj Raspored</string>
|
||||
<string name="editor_time_delete">Izbriši Raspored</string>
|
||||
<string name="editor_time_allday">Cijeli dan (24 sata)</string>
|
||||
</resources>
|
||||
|
||||
@@ -898,4 +898,12 @@
|
||||
<string name="avoid_paved">Evita le strade asfaltate</string>
|
||||
<string name="charge_socket_schuko">Domestico EU</string>
|
||||
<string name="power_management">Risparmio energetico</string>
|
||||
<string name="place_page_too_old_to_edit">La modifica di OpenStreetMap è disabilitata perché le mappe sono troppo vecchie.</string>
|
||||
<string name="place_page_update_too_old_map">Aggiorna questa mappa</string>
|
||||
<string name="place_page_app_too_old_description">Le mappe correnti sono molto vecchie, si suggerisce di aggiornare CoMaps.</string>
|
||||
<string name="place_page_map_too_old_description">La mappa corrente è molto vecchia, si suggerisce di aggiornarla.</string>
|
||||
<string name="place_page_map_too_old_title">Mappa obsoleta</string>
|
||||
<string name="navigation_start_tts_disabled_message">Istruzioni vocali disabilitate: TTS non disponibile</string>
|
||||
<string name="prefs_speed_cameras_information">Gli avvisi di Autovelox sono disabilitati dove proibito dalla legge locale.</string>
|
||||
<string name="navigation_start_tts_message">"Inizio Navigazione, lingua per istruzioni vocali: "</string>
|
||||
</resources>
|
||||
|
||||
@@ -371,4 +371,6 @@
|
||||
<string name="error_value_must_be_positive">Res an niver positiv</string>
|
||||
<string name="error_invalid_number">Niver anewn</string>
|
||||
<string name="offline_explanation_title">Mappys Dhywarlinen</string>
|
||||
<string name="category_shopping">Gwerthjiow</string>
|
||||
<string name="edit">Golegi</string>
|
||||
</resources>
|
||||
|
||||
@@ -845,4 +845,10 @@
|
||||
<string name="closed_now">Šobrīd slēgts</string>
|
||||
<string name="avoid_paved">Izvairīties no ceļiem ar cietu mākslīgo segumu</string>
|
||||
<string name="editor_submit">Iesniegt</string>
|
||||
<string name="place_page_map_too_old_title">Novecojuši kartes dati</string>
|
||||
<string name="place_page_map_too_old_description">Pašreizējie kartes dati ir ļoti veci, lūgums atjaunināt karti.</string>
|
||||
<string name="place_page_app_too_old_description">Pašreizējie kartes dati ir ļoti veci, lūgums atjaunināt CoMaps lietotni.</string>
|
||||
<string name="place_page_update_too_old_map">Atjaunināt karšu apgabalu</string>
|
||||
<string name="place_page_too_old_to_edit">OpenStreetMap labošana ir atspējota, jo kartes dati ir pārāk veci.</string>
|
||||
<string name="navigation_start_tts_disabled_message">Balss norādes atspējotas: nav pieejams teksta pārveidošanas runā dzinējs</string>
|
||||
</resources>
|
||||
|
||||
@@ -899,4 +899,11 @@
|
||||
<string name="navigation_start_tts_disabled_message">Taleveiledninger deaktivert: TTS-motor ikke tilgjengelig</string>
|
||||
<string name="navigation_start_tts_message">"Starter navigering, taleveiledningsspråk: "</string>
|
||||
<string name="prefs_speed_cameras_information">Fotoboksvarsler er deaktivert i land hvor varsler er forbudt i henhold til lokal lovgivning.</string>
|
||||
<string name="place_page_map_too_old_title">Kartdata utdatert</string>
|
||||
<string name="place_page_map_too_old_description">Gjeldende kartdata er gamle, oppdater kartet.</string>
|
||||
<string name="place_page_app_too_old_description">Gjeldende kartdata er gamle, oppdater CoMaps-appen.</string>
|
||||
<string name="place_page_update_too_old_map">Oppdater kartregion</string>
|
||||
<string name="place_page_too_old_to_edit">OpenStreetMap-redigering er deaktivert fordi kartdataene er for gamle.</string>
|
||||
<string name="osm_note_hint">Alternativt, så kan du legge til et notat i OpenStreetMap, slik at noen andre kan redigere eller legge til stedet.</string>
|
||||
<string name="osm_note_toast">Notatet vil bli sendt til OpenStreetMap</string>
|
||||
</resources>
|
||||
|
||||
@@ -910,4 +910,9 @@
|
||||
<string name="navigation_start_tts_message">"Navigatie starten, taal voor steminstructie: "</string>
|
||||
<string name="prefs_speed_cameras_information">Waarschuwingen voor flitsers zijn uitgeschakeld in landen waar deze wettelijk zijn verboden.</string>
|
||||
<string name="navigation_start_tts_disabled_message">Spraakinstructies uitgeschakeld: TTS-engine niet beschikbaar</string>
|
||||
<string name="place_page_map_too_old_title">Kaartgegevens verouderd</string>
|
||||
<string name="place_page_map_too_old_description">Uw huidige kaartgegevens zijn erg oud. Werk de kaart bij.</string>
|
||||
<string name="place_page_app_too_old_description">Uw huidige kaartgegevens zijn erg oud. Update de CoMaps-app.</string>
|
||||
<string name="place_page_update_too_old_map">Kaart regio bijwerken</string>
|
||||
<string name="place_page_too_old_to_edit">Het bewerken van OpenStreetMap is uitgeschakeld omdat de kaartgegevens te oud zijn.</string>
|
||||
</resources>
|
||||
|
||||
@@ -885,4 +885,12 @@
|
||||
<string name="editor_submit">Enviar</string>
|
||||
<string name="power_management">Gerenciamento de energia</string>
|
||||
<string name="charge_socket_schuko">Doméstica UE</string>
|
||||
<string name="place_page_map_too_old_title">Dados do mapa desatualizados</string>
|
||||
<string name="place_page_map_too_old_description">Os seus dados do mapa atuais são muito antigos, por favor atualize o mapa.</string>
|
||||
<string name="place_page_app_too_old_description">Seus dados do mapa atuais são muito antigos, por favor atualize o aplicativo CoMaps.</string>
|
||||
<string name="place_page_update_too_old_map">Atualizar região do mapa</string>
|
||||
<string name="place_page_too_old_to_edit">A edição do OpenStreetMap está desativada porque os dados do mapa são antigos demais.</string>
|
||||
<string name="prefs_speed_cameras_information">Alertas de radar fotográfico de velocidade estão desativados em países onde os alertas são proibidos pelas leis locais.</string>
|
||||
<string name="navigation_start_tts_message">"Iniciando navegação, idioma da instrução por voz: "</string>
|
||||
<string name="navigation_start_tts_disabled_message">Instrução por voz desativada: nenhum motor de texto para voz disponível</string>
|
||||
</resources>
|
||||
|
||||
@@ -901,4 +901,12 @@
|
||||
<string name="list_description_empty">Edite a lista para adicionar uma descrição</string>
|
||||
<string name="power_management">Gestão de Energia</string>
|
||||
<string name="charge_socket_schuko">Doméstica UE</string>
|
||||
<string name="place_page_map_too_old_title">Dados do mapa desatualizados</string>
|
||||
<string name="place_page_map_too_old_description">O seu mapa atual tem dados demasiado antigos, por favor atualize-o.</string>
|
||||
<string name="place_page_app_too_old_description">O seu mapa atual tem dados demasiado antigos, por favor atualize a aplicação do CoMaps.</string>
|
||||
<string name="place_page_update_too_old_map">Atualizar região do mapa</string>
|
||||
<string name="place_page_too_old_to_edit">Edição OpenStreetMap está desativada, pois os dados do mapa são demasiado antigos.</string>
|
||||
<string name="prefs_speed_cameras_information">Avisos de câmaras de velocidade estão desativados em países onde alertas estão proibidos por lei.</string>
|
||||
<string name="navigation_start_tts_message">"Iniciando Navegação, idioma das instruções por voz: "</string>
|
||||
<string name="navigation_start_tts_disabled_message">Instruções por voz desativadas: nenhum motor de TTS disponível</string>
|
||||
</resources>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<!-- Choose measurement on first launch alert - choose imperial system button -->
|
||||
<string name="miles">Мили</string>
|
||||
<!-- Update maps later button text -->
|
||||
<string name="later">Не сейчас</string>
|
||||
<string name="later">Позже</string>
|
||||
<!-- View and button titles for accessibility, please also edit it in iphone/plist.txt -->
|
||||
<string name="search">Поиск</string>
|
||||
<!-- Search box placeholder text; Used when searching on the map itself, not when searching for a map -->
|
||||
@@ -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 -->
|
||||
@@ -297,7 +297,7 @@
|
||||
<!-- location service disabled -->
|
||||
<string name="enable_location_services">Пожалуйста, включите геолокацию</string>
|
||||
<string name="save">Сохранить</string>
|
||||
<string name="create">создать</string>
|
||||
<string name="create">Создать</string>
|
||||
<!-- red color -->
|
||||
<string name="red">Красный</string>
|
||||
<!-- yellow color -->
|
||||
@@ -526,8 +526,8 @@
|
||||
<!-- Displayed when saving some edits to the map to warn against publishing personal data -->
|
||||
<string name="editor_share_to_all_dialog_title">Отправить всем пользователям?</string>
|
||||
<!-- Dialog before publishing the modifications to the public map. -->
|
||||
<string name="editor_share_to_all_dialog_message_1">Убедитесь, что вы не указали никаких личных данных</string>
|
||||
<string name="editor_share_to_all_dialog_message_2">Редакторы OpenStreetMap проверят изменения и свяжутся с вами, если у них возникнут вопросы</string>
|
||||
<string name="editor_share_to_all_dialog_message_1">Убедитесь, что вы не указали никаких личных данных.</string>
|
||||
<string name="editor_share_to_all_dialog_message_2">Редакторы OpenStreetMap проверят изменения и свяжутся с вами, если у них возникнут вопросы.</string>
|
||||
<string name="navigation_stop_button">Cтоп</string>
|
||||
<!-- Shown as toast when starting the recent track recording -->
|
||||
<string name="track_recording">Запись трека</string>
|
||||
@@ -918,4 +918,9 @@
|
||||
<string name="list_description_empty">Отредактируйте список, чтобы добавить описание</string>
|
||||
<string name="pref_tts_no_system_tts_short">Не найден движок синтезатора речи, проверьте настройки приложения</string>
|
||||
<string name="unknown_power_output">неизвестно</string>
|
||||
<string name="opens_day_at">Откроется %1$s на %2$s</string>
|
||||
<string name="closes_day_at">Закроется %1$s на %2$s</string>
|
||||
<string name="place_page_map_too_old_title">Данные карты устарели</string>
|
||||
<string name="place_page_update_too_old_map">Обновить регион карты</string>
|
||||
<string name="place_page_too_old_to_edit">Редактирование OpenStreetMap отключено, так как данные карты слишком старые.</string>
|
||||
</resources>
|
||||
|
||||
@@ -349,8 +349,8 @@
|
||||
<string name="osm_note_hint">Ali pa pusti sporočilo skupnosti OpenStreetMap, da bo nekdo drug dodal ali popravil ta kraj.</string>
|
||||
<string name="osm_note_toast">Sporočilo bo poslano na OpenStreetMap</string>
|
||||
<string name="editor_share_to_all_dialog_title">Ali to želite poslati vsem uporabnikom?</string>
|
||||
<string name="editor_share_to_all_dialog_message_1">Poskrbite, da niste vnesli nobenih zasebnih podatkov</string>
|
||||
<string name="editor_share_to_all_dialog_message_2">Uredniki na OpenStreetMap bodo preverili spremembe in stopili v stik z vami, če kaj ne bo jasno</string>
|
||||
<string name="editor_share_to_all_dialog_message_1">Poskrbite, da niste vnesli nobenih zasebnih ali osebnih podatkov</string>
|
||||
<string name="editor_share_to_all_dialog_message_2">Uredniki na OpenStreetMap bodo preverili spremembe in stopili v stik z vami, če kaj ne bo jasno.</string>
|
||||
<string name="navigation_stop_button">Ustavi</string>
|
||||
<string name="track_recording">Snemam pot</string>
|
||||
<string name="accept">Potrdi</string>
|
||||
@@ -639,4 +639,22 @@
|
||||
<item quantity="few">%d min</item>
|
||||
<item quantity="other">%d min</item>
|
||||
</plurals>
|
||||
<string name="opens_day_at">Odpre se %1$s, ob %2$s</string>
|
||||
<string name="closes_day_at">Zapre se %1$s, ob %2$s</string>
|
||||
<string name="editor_business_vacant_button">Podjetje ni zakupljeno</string>
|
||||
<string name="editor_mark_business_vacant_title">Označi, da je podjetje nezakupljeno</string>
|
||||
<string name="editor_mark_business_vacant_description">To uporabite, če se je podjetje izselilo in so prostori prazni in pripravljeni za novega zakupnika.</string>
|
||||
<string name="editor_submit">Potrdi</string>
|
||||
<string name="place_page_map_too_old_title">Podatki zemljevida so zastareli</string>
|
||||
<string name="place_page_map_too_old_description">Vaši trenutni podatki zemljevida so zelo stari; prosimo, posodobite zemljevid.</string>
|
||||
<string name="place_page_app_too_old_description">Vaši trenutni podatki zemljevida so zelo stari; prosimo, posodobite orodje CoMaps.</string>
|
||||
<string name="place_page_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>
|
||||
<string name="power_management">Energetsko upravljanje</string>
|
||||
<string name="avoid_paved">Izogni se neasfaltiranim cestam</string>
|
||||
<string name="navigation_start_tts_message">"Začenjanje potnega usmerjanja, jezik glasovnih napotkov: "</string>
|
||||
<string name="navigation_start_tts_disabled_message">Glasovni napotki so onemogočeni: ustvarjalec glasu (TTS) ni na voljo</string>
|
||||
<string name="charge_socket_schuko">standardna evropska vtičnica (Schuko)</string>
|
||||
<string name="list_description_empty">Uredite seznam, da dodate opis</string>
|
||||
</resources>
|
||||
|
||||
@@ -912,4 +912,9 @@
|
||||
<string name="navigation_start_tts_message">"启动导航,语音指令语言: "</string>
|
||||
<string name="prefs_speed_cameras_information">在当地法律禁止发出警报的国家/地区,测速摄像头警告功能将被禁用。</string>
|
||||
<string name="navigation_start_tts_disabled_message">语音指令已禁用:TTS 引擎不可用</string>
|
||||
<string name="place_page_map_too_old_title">地图数据已过时</string>
|
||||
<string name="place_page_map_too_old_description">您当前的地图数据非常旧,请更新地图。</string>
|
||||
<string name="place_page_app_too_old_description">您当前的地图数据非常旧,请更新 CoMaps 应用。</string>
|
||||
<string name="place_page_update_too_old_map">更新地图区域</string>
|
||||
<string name="place_page_too_old_to_edit">由于地图数据太旧,OpenStreetMap 编辑被禁用。</string>
|
||||
</resources>
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
<dimen name="nav_menu_landscape_width">360dp</dimen>
|
||||
|
||||
<dimen name="nav_frame_padding">@dimen/margin_half</dimen>
|
||||
<dimen name="zoom_buttons_margin">64dp</dimen>
|
||||
<dimen name="zoom_buttons_margin">58dp</dimen>
|
||||
<dimen name="map_buttons_bottom_margin">136dp</dimen>
|
||||
<dimen name="map_buttons_bottom_max_width">300dp</dimen>
|
||||
|
||||
|
||||
@@ -425,4 +425,17 @@
|
||||
<item name="android:maxWidth">@dimen/map_buttons_bottom_max_width</item>
|
||||
<item name="android:padding">@dimen/nav_frame_padding</item>
|
||||
</style>
|
||||
|
||||
<style name="ShapeAppearance.MapButton.Zoom.Plus" parent="">
|
||||
<item name="cornerSizeTopLeft">10%</item>
|
||||
<item name="cornerSizeTopRight">10%</item>
|
||||
<item name="cornerSizeBottomRight">50%</item>
|
||||
<item name="cornerSizeBottomLeft">50%</item>
|
||||
</style>
|
||||
<style name="ShapeAppearance.MapButton.Zoom.Minus" parent="">
|
||||
<item name="cornerSizeBottomLeft">10%</item>
|
||||
<item name="cornerSizeBottomRight">10%</item>
|
||||
<item name="cornerSizeTopLeft">50%</item>
|
||||
<item name="cornerSizeTopRight">50%</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
1
android/sdk/src/main/assets/mapcss-mapping.csv
Symbolic link
1
android/sdk/src/main/assets/mapcss-mapping.csv
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../../data/mapcss-mapping.csv
|
||||
|
@@ -18,6 +18,7 @@
|
||||
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
namespace
|
||||
@@ -52,7 +53,7 @@ struct TBatchedData
|
||||
jobject g_countryChangedListener = nullptr;
|
||||
|
||||
DECLARE_THREAD_CHECKER(g_batchingThreadChecker);
|
||||
ankerl::unordered_dense::map<jobject, std::vector<TBatchedData>> g_batchedCallbackData;
|
||||
std::unordered_map<jobject, std::vector<TBatchedData>> g_batchedCallbackData;
|
||||
bool g_isBatched;
|
||||
|
||||
storage::Storage & GetStorage()
|
||||
|
||||
@@ -320,7 +320,7 @@ JNIEXPORT jobject JNICALL Java_app_organicmaps_sdk_editor_OpeningHours_nativeCur
|
||||
jclass ohStateClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/editor/OhState");
|
||||
jclass ruleStateClass = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/editor/OhState$State");
|
||||
|
||||
static ankerl::unordered_dense::map<RuleState, char const *> const ruleState = {
|
||||
static std::unordered_map<RuleState, char const *> const ruleState = {
|
||||
{RuleState::Open, "Open"}, {RuleState::Closed, "Closed"}, {RuleState::Unknown, "Unknown"}};
|
||||
|
||||
jfieldID stateField =
|
||||
|
||||
@@ -35,8 +35,7 @@ SOFTWARE.
|
||||
|
||||
#include <iterator>
|
||||
#include <string>
|
||||
|
||||
#include "3party/ankerl/unordered_dense.h"
|
||||
#include <unordered_map>
|
||||
|
||||
DECLARE_EXCEPTION(JniException, RootException);
|
||||
|
||||
@@ -152,7 +151,7 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
ankerl::unordered_dense::map<std::string, jfieldID> m_fieldIds;
|
||||
std::unordered_map<std::string, jfieldID> m_fieldIds;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
|
||||
@@ -4,30 +4,28 @@ package app.organicmaps.sdk.bookmarks.data;
|
||||
* represents the details of the socket available on a particular charging station
|
||||
*
|
||||
*/
|
||||
public record ChargeSocketDescriptor(String type, int count, double power)
|
||||
{
|
||||
/**
|
||||
* Some charge sockets have the same visuals as other sockets, even though they are different and are tagged
|
||||
* differently in OSM. This method returns the 'visual' type that should be used for the socket.
|
||||
*
|
||||
* @return the 'equivalent' visual style that should be used for this socket
|
||||
*/
|
||||
public String visualType()
|
||||
{
|
||||
if (type.equals("typee"))
|
||||
{
|
||||
return "schuko";
|
||||
}
|
||||
return type;
|
||||
}
|
||||
public record ChargeSocketDescriptor(String type, int count, double power) {
|
||||
|
||||
/**
|
||||
* Some charge sockets have the same visuals as other sockets, even though they are different and are tagged
|
||||
* differently in OSM. This method returns the 'visual' type that should be used for the socket.
|
||||
*
|
||||
* @return the 'equivalent' visual style that should be used for this socket
|
||||
*/
|
||||
public String visualType() {
|
||||
if (type.equals("typee")) {
|
||||
return "schuko";
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* For some sockets (eg, domestic sockets), the power is usually not provided, as it is 'implicit'
|
||||
*
|
||||
* @return true if this socket type does not require displaying the power
|
||||
*/
|
||||
public Boolean ignorePower() {
|
||||
return type.equals("typee") || type.equals("schuko");
|
||||
}
|
||||
|
||||
/**
|
||||
* For some sockets (eg, domestic sockets), the power is usually not provided, as it is 'implicit'
|
||||
*
|
||||
* @return true if this socket type does not require displaying the power
|
||||
*/
|
||||
public Boolean ignorePower()
|
||||
{
|
||||
return type.equals("typee") || type.equals("schuko");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package app.organicmaps.sdk.editor;
|
||||
import androidx.annotation.IntRange;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import app.organicmaps.sdk.editor.data.Timespan;
|
||||
import app.organicmaps.sdk.editor.data.Timetable;
|
||||
|
||||
|
||||
@@ -2,14 +2,16 @@ package app.organicmaps.sdk.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
|
||||
import androidx.annotation.Keep;
|
||||
import androidx.annotation.NonNull;
|
||||
import app.organicmaps.sdk.R;
|
||||
import java.text.DateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Locale;
|
||||
|
||||
import app.organicmaps.sdk.R;
|
||||
|
||||
public final class DateUtils
|
||||
{
|
||||
private DateUtils() {}
|
||||
@@ -42,7 +44,7 @@ public final class DateUtils
|
||||
if (days == 1)
|
||||
return resources.getString(R.string.yesterday).toLowerCase();
|
||||
if (days < 7)
|
||||
return resources.getString(R.string.days_ago, Integer.toString(days));
|
||||
return resources.getString(R.string.days_ago, Integer.toString(days));
|
||||
if (days < 30)
|
||||
return resources.getString(days < 14 ? R.string.week_ago : R.string.weeks_ago, Integer.toString(days / 7));
|
||||
if (days < 365)
|
||||
|
||||
@@ -1497,4 +1497,5 @@
|
||||
<string name="type.shop.beauty.nails">Nehtový salón</string>
|
||||
<string name="type.xmas.tree">Vánoční strom</string>
|
||||
<string name="type.man_made.mast.communication">Komunikační stožár</string>
|
||||
<string name="type.amenity.hydrant">Hydrant na zavlažování</string>
|
||||
</resources>
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
<string name="type.amenity.public_bath">Baños públicos</string>
|
||||
<string name="type.amenity.shower">Ducha</string>
|
||||
<string name="type.amenity.stripclub">Club de estriptis</string>
|
||||
<string name="type.amenity.taxi">Sitio de taxis</string>
|
||||
<string name="type.amenity.taxi">Parada de taxis</string>
|
||||
<string name="type.amenity.telephone">Teléfono</string>
|
||||
<string name="type.amenity.theatre">Teatro</string>
|
||||
<string name="type.amenity.toilets">WC</string>
|
||||
@@ -351,6 +351,7 @@
|
||||
<string name="type.emergency.assembly_point">Punto de reunión de emergencia</string>
|
||||
<string name="type.emergency.defibrillator">Desfibrilador</string>
|
||||
<string name="type.emergency.fire_hydrant">Boca de incendio</string>
|
||||
<string name="type.amenity.hydrant">Boca de riego</string>
|
||||
<string name="type.emergency.phone">Teléfono de emergencias</string>
|
||||
<!-- A place where a lifeguard is on duty. -->
|
||||
<string name="type.emergency.lifeguard">Socorrista</string>
|
||||
@@ -454,7 +455,7 @@
|
||||
<!-- These translations are used for all type.highway.*.bridge. -->
|
||||
<string name="type.highway.residential.bridge">Puente</string>
|
||||
<!-- These translations are used for all type.highway.*.tunnel. -->
|
||||
<string name="type.highway.residential.tunnel">Túnel de calle residencial</string>
|
||||
<string name="type.highway.residential.tunnel">Túnel</string>
|
||||
<string name="type.highway.rest_area">Área de descanso</string>
|
||||
<string name="type.highway.road">Carretera</string>
|
||||
<!-- These translations are used for all type.highway.*.bridge. -->
|
||||
@@ -467,7 +468,7 @@
|
||||
<!-- These translations are used for all type.highway.*.bridge. -->
|
||||
<string name="type.highway.secondary.bridge">Puente</string>
|
||||
<!-- These translations are used for all type.highway.*.tunnel. -->
|
||||
<string name="type.highway.secondary.tunnel">Túnel de carretera secundaria</string>
|
||||
<string name="type.highway.secondary.tunnel">Túnel</string>
|
||||
<string name="type.highway.secondary_link">Enlace de carretera secundaria</string>
|
||||
<!-- These translations are used for all type.highway.*.bridge. -->
|
||||
<string name="type.highway.secondary_link.bridge">Puente</string>
|
||||
|
||||
@@ -337,6 +337,7 @@
|
||||
<string name="type.emergency.assembly_point">Point de rassemblement d’urgence</string>
|
||||
<string name="type.emergency.defibrillator">Défibrillateur</string>
|
||||
<string name="type.emergency.fire_hydrant">Point d’eau incendie</string>
|
||||
<string name="type.amenity.hydrant">Borne d’puisage</string>
|
||||
<string name="type.emergency.phone">Téléphone d’urgence</string>
|
||||
<!-- A place where a lifeguard is on duty. -->
|
||||
<string name="type.emergency.lifeguard">Sauveteur</string>
|
||||
|
||||
@@ -179,34 +179,686 @@
|
||||
<string name="type.craft.shoemaker">Ewnans Eskis</string>
|
||||
<string name="type.craft.winery">Gwinyer</string>
|
||||
<string name="type.craft.tailor">Tregher</string>
|
||||
<string name="type.cuisine.african">afrikan</string>
|
||||
<string name="type.cuisine.american">amerikanek</string>
|
||||
<string name="type.cuisine.arab">arabek</string>
|
||||
<string name="type.cuisine.argentinian">arghantinek</string>
|
||||
<string name="type.cuisine.asian">asiek</string>
|
||||
<string name="type.cuisine.austrian">ostrian</string>
|
||||
<string name="type.cuisine.african">Afrikan</string>
|
||||
<string name="type.cuisine.american">Amerikanek</string>
|
||||
<string name="type.cuisine.arab">Arabek</string>
|
||||
<string name="type.cuisine.argentinian">Arghantinek</string>
|
||||
<string name="type.cuisine.asian">Asiek</string>
|
||||
<string name="type.cuisine.austrian">Ostrian</string>
|
||||
<string name="type.cuisine.barbecue">Barbakoa</string>
|
||||
<string name="type.cuisine.beef_bowl">Bolla Bewin</string>
|
||||
<string name="type.cuisine.brazilian">brasiliek</string>
|
||||
<string name="type.cuisine.brazilian">Brasiliek</string>
|
||||
<string name="type.cuisine.breakfast">Hansel</string>
|
||||
<string name="type.cuisine.bubble_tea">Te Hwethen</string>
|
||||
<string name="type.cuisine.burger">Borger</string>
|
||||
<string name="type.cuisine.cake">Tesen</string>
|
||||
<string name="type.cuisine.chicken">Kig Yar</string>
|
||||
<string name="type.cuisine.chinese">chinek</string>
|
||||
<string name="type.cuisine.chinese">Chinek</string>
|
||||
<string name="type.cuisine.coffee_shop">Koffi</string>
|
||||
<string name="type.cuisine.croatian">kroatek</string>
|
||||
<string name="type.cuisine.croatian">Kroatek</string>
|
||||
<string name="type.cuisine.curry">Kurri</string>
|
||||
<string name="type.cuisine.donut">Knowen Doos</string>
|
||||
<string name="type.cuisine.ethiopian">ethiopek</string>
|
||||
<string name="type.cuisine.ethiopian">Ethiopek</string>
|
||||
<string name="type.cuisine.fine_dining">Dybri Brav</string>
|
||||
<string name="type.cuisine.fish">Pysk</string>
|
||||
<string name="type.cuisine.fish_and_chips">Asklotti</string>
|
||||
<string name="type.cuisine.french">frynkek</string>
|
||||
<string name="type.cuisine.georgian">jorjiek</string>
|
||||
<string name="type.cuisine.german">almaynek</string>
|
||||
<string name="type.cuisine.greek">grek</string>
|
||||
<string name="type.cuisine.french">Frynkek</string>
|
||||
<string name="type.cuisine.georgian">Jorjiek</string>
|
||||
<string name="type.cuisine.german">Almaynek</string>
|
||||
<string name="type.cuisine.greek">Grek</string>
|
||||
<string name="type.cuisine.grill">Rastell</string>
|
||||
<string name="type.cuisine.hungarian">hungarek</string>
|
||||
<string name="type.cuisine.hungarian">Hungarek</string>
|
||||
<string name="type.cuisine.ice_cream">Dehen Rew</string>
|
||||
<string name="type.cuisine.indian">Eyndek</string>
|
||||
<string name="type.cuisine.indonesian">Indonesek</string>
|
||||
<string name="type.cuisine.international">Keswlasek</string>
|
||||
<string name="type.cuisine.irish">Iwerdhonek</string>
|
||||
<string name="type.cuisine.italian">Italek</string>
|
||||
<string name="type.cuisine.italian_pizza">Italek, Pitsa</string>
|
||||
<string name="type.cuisine.japanese">Japanek</string>
|
||||
<string name="type.cuisine.korean">Koreek</string>
|
||||
<string name="type.cuisine.lao">Laosek</string>
|
||||
<string name="type.cuisine.lebanese">Lebanek</string>
|
||||
<string name="type.cuisine.local">Leel</string>
|
||||
<string name="type.cuisine.malaysian">Malaysiek</string>
|
||||
<string name="type.cuisine.mediterranean">Kresvorek</string>
|
||||
<string name="type.cuisine.mexican">Meksikan</string>
|
||||
<string name="type.cuisine.moroccan">Morockek</string>
|
||||
<string name="type.cuisine.noodles">Noudlys</string>
|
||||
<string name="type.cuisine.oriental">Asiek Est</string>
|
||||
<string name="type.cuisine.pancake">Krampothennow</string>
|
||||
<string name="type.cuisine.pasta">Pasta</string>
|
||||
<string name="type.cuisine.persian">Persi</string>
|
||||
<string name="type.cuisine.peruvian">Peruvianek</string>
|
||||
<string name="type.cuisine.pizza">Pitsa</string>
|
||||
<string name="type.cuisine.polish">Polonek</string>
|
||||
<string name="type.cuisine.portuguese">Portyngalek</string>
|
||||
<string name="type.cuisine.regional">Ranndirek</string>
|
||||
<string name="type.cuisine.russian">Russek</string>
|
||||
<string name="type.cuisine.sandwich">Baramanyn</string>
|
||||
<string name="type.cuisine.sausage">Selsigen</string>
|
||||
<string name="type.cuisine.spanish">Spaynek</string>
|
||||
<string name="type.cuisine.steak_house">Bosti Tregh Kig</string>
|
||||
<string name="type.cuisine.sushi">Sushi</string>
|
||||
<string name="type.cuisine.tea">Te</string>
|
||||
<string name="type.cuisine.thai">Tai</string>
|
||||
<string name="type.cuisine.turkish">Turkek</string>
|
||||
<string name="type.cuisine.vegan">Vegan</string>
|
||||
<string name="type.cuisine.vegetarian">Losowek</string>
|
||||
<string name="type.cuisine.vietnamese">Vietnamek</string>
|
||||
<string name="type.emergency">Goredhom</string>
|
||||
<string name="type.emergency.access_point">Tyller Sawyans Goredhom</string>
|
||||
<string name="type.emergency.assembly_point">Tyller Kuntelles Goredhom</string>
|
||||
<string name="type.emergency.life_ring">Grugys-Sawya</string>
|
||||
<string name="type.emergency.phone">Fon Goredhom</string>
|
||||
<string name="type.emergency.lifeguard">Tyller Gwithyades-Sawya</string>
|
||||
<string name="type.lateral.port">Porth</string>
|
||||
<string name="type.lateral.starboard">Lew</string>
|
||||
<string name="type.cardinal.east">Est</string>
|
||||
<string name="type.cardinal.north">North</string>
|
||||
<string name="type.cardinal.south">Soth</string>
|
||||
<string name="type.cardinal.west">West</string>
|
||||
<string name="type.emergency.mountain_rescue">Sawyansva Menydh</string>
|
||||
<string name="type.entrance">Entrans</string>
|
||||
<string name="type.entrance.main">Entrans Chif</string>
|
||||
<string name="type.entrance.house">Entrans Chi</string>
|
||||
<string name="type.entrance.garage">Entrans Karrji</string>
|
||||
<string name="type.entrance.service">Entrans Gonis</string>
|
||||
<string name="type.entrance.entry">Entrans (Unsel)</string>
|
||||
<string name="type.entrance.exit">Fordh \'Mes (Unsel)</string>
|
||||
<string name="type.entrance.emergency">Daras Goredhom</string>
|
||||
<string name="type.fee.yes">£</string>
|
||||
<string name="type.fee.no">Heb Kost</string>
|
||||
<string name="type.healthcare.laboratory">Arbrovji Medhegel</string>
|
||||
<string name="type.healthcare.physiotherapist">Yaghheans Fisio</string>
|
||||
<string name="type.healthcare.alternative">Medhegneth Euvergryjyk</string>
|
||||
<string name="type.healthcare.audiologist">Medhek Klew</string>
|
||||
<string name="type.healthcare.blood_donation">Kres Argevrians Goos</string>
|
||||
<string name="type.healthcare.optometrist">Medhek Golok</string>
|
||||
<string name="type.healthcare.podiatrist">Medhek Troos</string>
|
||||
<string name="type.healthcare.psychotherapist">Yaghheans Brysoniethel</string>
|
||||
<string name="type.healthcare.sample_collection">Kres Kuntel Sampel</string>
|
||||
<string name="type.healthcare.speech_therapist">Pathologydh Kows ha Tavas</string>
|
||||
<string name="type.highway">Fordh Veur</string>
|
||||
<string name="type.highway.bridleway">Marghlergh</string>
|
||||
<string name="type.highway.bridleway.bridge">Pons</string>
|
||||
<string name="type.highway.bridleway.permissive">Marghlergh</string>
|
||||
<string name="type.highway.bridleway.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.busway">Fordh rag Kyttrinyow yn Unsel</string>
|
||||
<string name="type.highway.busway.bridge">Pons</string>
|
||||
<string name="type.highway.busway.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.bus_stop">Kyttrinva</string>
|
||||
<string name="type.highway.construction">Fordh y\'n Drehevyans</string>
|
||||
<string name="type.highway.cycleway">Hyns rag Diwrosow</string>
|
||||
<string name="type.highway.cycleway.bridge">Pons</string>
|
||||
<string name="type.highway.cycleway.permissive">Hyns rag Diwrosow</string>
|
||||
<string name="type.highway.cycleway.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.elevator">Yskynnell</string>
|
||||
<string name="type.highway.footway">Kerdhva</string>
|
||||
<string name="type.highway.footway.sidewalk">Kons</string>
|
||||
<string name="type.highway.footway.crossing">Treusva Gerdhoryon</string>
|
||||
<string name="type.highway.footway.area">Arenebedh Gerdhoryon</string>
|
||||
<string name="type.highway.footway.bridge">Pons Gerdhoryon</string>
|
||||
<string name="type.highway.footway.tunnel">Kowfordh Gerdhoryon</string>
|
||||
<string name="type.highway.ford">Res</string>
|
||||
<string name="type.highway.living_street">Stret Pur Byghan</string>
|
||||
<string name="type.highway.living_street.bridge">Pons</string>
|
||||
<string name="type.highway.living_street.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.motorway">Gorfordh</string>
|
||||
<string name="type.highway.motorway.bridge">Pons Gorfordh</string>
|
||||
<string name="type.highway.motorway.tunnel">Kowfordh Gorfordh</string>
|
||||
<string name="type.highway.motorway_junction">Fordh \'Mes</string>
|
||||
<string name="type.highway.motorway_link">Rybfordh</string>
|
||||
<string name="type.highway.motorway_link.bridge">Pons</string>
|
||||
<string name="type.highway.motorway_link.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.path">Hyns</string>
|
||||
<string name="type.highway.path.difficult">Ol Kales bo Andhiblans</string>
|
||||
<string name="type.highway.path.expert">Ol Anweladow</string>
|
||||
<string name="type.highway.path.bicycle">Hyns rag Kerdhoryon ha Diwrosow</string>
|
||||
<string name="type.highway.footway.bicycle">Hyns rag Kerdhoryon ha Diwrosow</string>
|
||||
<string name="type.highway.path.bridge">Pons</string>
|
||||
<string name="type.highway.path.horse">Marghlergh</string>
|
||||
<string name="type.highway.path.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.pedestrian">Stret Gerdhoryon yn Unsel</string>
|
||||
<string name="type.highway.pedestrian.area">Arenebedh Gerdhoryon</string>
|
||||
<string name="type.highway.pedestrian.bridge">Pons Gerdhoryon</string>
|
||||
<string name="type.highway.pedestrian.square">Plen</string>
|
||||
<string name="type.highway.pedestrian.tunnel">Kowfordh Gerdhoryon</string>
|
||||
<string name="type.highway.primary">Fordh Kynsa</string>
|
||||
<string name="type.highway.primary.bridge">Pons</string>
|
||||
<string name="type.highway.primary.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.primary_link">Rybfordh Kynsa</string>
|
||||
<string name="type.highway.primary_link.bridge">Pons</string>
|
||||
<string name="type.highway.primary_link.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.residential">Stret Anedhel</string>
|
||||
<string name="type.highway.residential.area">Stret Anedhel</string>
|
||||
<string name="type.highway.residential.bridge">Pons</string>
|
||||
<string name="type.highway.residential.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.rest_area">Powesva</string>
|
||||
<string name="type.highway.road">Fordh</string>
|
||||
<string name="type.highway.road.bridge">Pons</string>
|
||||
<string name="type.man_made.bridge">Pons</string>
|
||||
<string name="type.highway.road.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.secondary">Fordh Nessa</string>
|
||||
<string name="type.highway.secondary.bridge">Pons</string>
|
||||
<string name="type.highway.secondary.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.secondary_link">Rybfordh Nessa</string>
|
||||
<string name="type.highway.secondary_link.bridge">Pons</string>
|
||||
<string name="type.highway.secondary_link.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.service">Fordh Gonis</string>
|
||||
<string name="type.highway.service.area">Fordh Gonis</string>
|
||||
<string name="type.highway.service.bridge">Pons</string>
|
||||
<string name="type.highway.service.driveway">Fordh dhe Chi</string>
|
||||
<string name="type.highway.service.parking_aisle">Fordh Parkyans</string>
|
||||
<string name="type.highway.service.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.services">Edhommva</string>
|
||||
<string name="type.highway.speed_camera">Kamera Skavder</string>
|
||||
<string name="type.highway.steps">Grisyow</string>
|
||||
<string name="type.highway.ladder">Skeul</string>
|
||||
<string name="type.highway.steps.bridge">Pons</string>
|
||||
<string name="type.highway.steps.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.tertiary">Fordh Tryja</string>
|
||||
<string name="type.highway.tertiary.bridge">Pons</string>
|
||||
<string name="type.highway.tertiary.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.tertiary_link">Rybfordh Tryja</string>
|
||||
<string name="type.highway.tertiary_link.bridge">Pons</string>
|
||||
<string name="type.highway.tertiary_link.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.track">Ol</string>
|
||||
<string name="type.highway.track.area">Ol</string>
|
||||
<string name="type.highway.track.bridge">Pons</string>
|
||||
<string name="type.highway.track.grade1">Ol</string>
|
||||
<string name="type.highway.track.no.access">Ol</string>
|
||||
<string name="type.highway.track.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.traffic_signals">Sinell Traffik</string>
|
||||
<string name="type.highway.trunk">Fordh Chif</string>
|
||||
<string name="type.highway.trunk.bridge">Pons</string>
|
||||
<string name="type.highway.trunk.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.trunk_link">Rybfordh Chif</string>
|
||||
<string name="type.highway.trunk_link.bridge">Pons</string>
|
||||
<string name="type.highway.trunk_link.tunnel">Kowfordh</string>
|
||||
<string name="type.highway.unclassified">Fordh Le</string>
|
||||
<string name="type.highway.unclassified.area">Fordh Le</string>
|
||||
<string name="type.highway.unclassified.bridge">Pons</string>
|
||||
<string name="type.highway.unclassified.tunnel">Kowfordh</string>
|
||||
<string name="type.area_highway.cycleway">Hyns rag Diwrosow</string>
|
||||
<string name="type.area_highway.footway">Kerdhva</string>
|
||||
<string name="type.area_highway.living_street">Stret pur Byghan</string>
|
||||
<string name="type.area_highway.motorway">Gorfordh</string>
|
||||
<string name="type.area_highway.path">Hyns</string>
|
||||
<string name="type.area_highway.pedestrian">Stret Gerdhoryon yn Unsel</string>
|
||||
<string name="type.area_highway.primary">Fordh Kynsa</string>
|
||||
<string name="type.area_highway.residential">Stret Anedhel</string>
|
||||
<string name="type.area_highway.secondary">Fordh Nessa</string>
|
||||
<string name="type.area_highway.service">Fordh Gonis</string>
|
||||
<string name="type.area_highway.tertiary">Fordh Tryja</string>
|
||||
<string name="type.area_highway.steps">Grisyow</string>
|
||||
<string name="type.area_highway.track">Ol</string>
|
||||
<string name="type.area_highway.trunk">Fordh Chif</string>
|
||||
<string name="type.area_highway.unclassified">Fordh Le</string>
|
||||
<string name="type.historic">Taklen Istorek</string>
|
||||
<string name="type.historic.aircraft">Ayren Istorek</string>
|
||||
<string name="type.historic.anchor">Ankor Istorek</string>
|
||||
<string name="type.historic.archaeological_site">Tyller Hendhyskoniethel</string>
|
||||
<string name="type.historic.battlefield">Tyller Batel Istorek</string>
|
||||
<string name="type.historic.boundary_stone">Men Or</string>
|
||||
<string name="type.historic.cannon">Kanon</string>
|
||||
<string name="type.historic.castle">Kastel</string>
|
||||
<string name="type.historic.castle.castrum">Dinas Romanek</string>
|
||||
<string name="type.historic.castle.defensive">Kastel Krev</string>
|
||||
<string name="type.historic.castle.fortified_church">Eglos rag Skons</string>
|
||||
<string name="type.historic.castle.fortress">Skons</string>
|
||||
<string name="type.historic.castle.hillfort">Ker</string>
|
||||
<string name="type.historic.castle.kremlin">Kastel Europek a\'n Est</string>
|
||||
<string name="type.historic.castle.manor">Manerji</string>
|
||||
<string name="type.historic.castle.palace">Palys</string>
|
||||
<string name="type.historic.castle.shiro">Kastel Japanek</string>
|
||||
<string name="type.historic.castle.stately">Kastel Maner</string>
|
||||
<string name="type.historic.city_gate">Porth Cita</string>
|
||||
<string name="type.historic.citywalls">Fos Cita</string>
|
||||
<string name="type.historic.fort">Dinas</string>
|
||||
<string name="type.historic.gallows">Krogbren</string>
|
||||
<string name="type.historic.locomotive">Tren Istorek</string>
|
||||
<string name="type.historic.memorial">Men Kov</string>
|
||||
<string name="type.historic.memorial.cross">Krows Men Kov</string>
|
||||
<string name="type.historic.memorial.plaque">Leghen Men Kov</string>
|
||||
<string name="type.historic.memorial.sculpture">Gravyans</string>
|
||||
<string name="type.historic.memorial.statue">Delow</string>
|
||||
<string name="type.historic.memorial.stolperstein">Men Kov rag Fethesigow a an Naziow</string>
|
||||
<string name="type.historic.stone">Men Istorek</string>
|
||||
<string name="type.historic.memorial.war_memorial">Men Kov Bell</string>
|
||||
<string name="type.historic.mine">Hwel Istorek</string>
|
||||
<string name="type.historic.monument">Men Kov Bras</string>
|
||||
<string name="type.historic.pillory">Karghar Prenn</string>
|
||||
<string name="type.historic.ruins">Kryllasow Istorek</string>
|
||||
<string name="type.historic.ship">Gorhel</string>
|
||||
<string name="type.historic.tank">Tank Istorek</string>
|
||||
<string name="type.historic.tomb">Bedh</string>
|
||||
<string name="type.man_made.cross">Krows</string>
|
||||
<string name="type.historic.wayside_cross">Krows amal an Fordh</string>
|
||||
<string name="type.historic.wayside_shrine">Krerva amal an Fordh</string>
|
||||
<string name="type.historic.wreck">Gwreck</string>
|
||||
<string name="type.internet_access">Kesrosweyth</string>
|
||||
<string name="type.internet_access.wlan">Kesrosweyth</string>
|
||||
<string name="type.junction">Fordh Dhibarth</string>
|
||||
<string name="type.junction.circular">Fordh A-Dro</string>
|
||||
<string name="type.junction.roundabout">Fordh A-Dro</string>
|
||||
<string name="type.landuse">Devnydh Tir</string>
|
||||
<string name="type.landuse.allotments">Pastellow Tir</string>
|
||||
<string name="type.landuse.basin">Bason</string>
|
||||
<string name="type.landuse.brownfield">Tir Ragdevnydhys</string>
|
||||
<string name="type.landuse.cemetery">Korflan</string>
|
||||
<string name="type.landuse.cemetery.christian">Korflan Kristyon</string>
|
||||
<string name="type.landuse.religious">Tir Kryjyk</string>
|
||||
<string name="type.landuse.commercial">Tir Kenwerthel</string>
|
||||
<string name="type.landuse.construction">Tir Drehevyans</string>
|
||||
<string name="type.landuse.education">Komodyta Adhyskansel</string>
|
||||
<string name="type.landuse.farmland">Tir Ammeth</string>
|
||||
<string name="type.landuse.farmyard">Garth an Dre</string>
|
||||
<string name="type.landuse.flowerbed">Bleujyowek</string>
|
||||
<string name="type.landuse.forest">Koos</string>
|
||||
<string name="type.landuse.forest.coniferous">Koos Bydhlas</string>
|
||||
<string name="type.landuse.forest.deciduous">Koos Kolldhel</string>
|
||||
<string name="type.landuse.forest.mixed">Koos Gemyskys</string>
|
||||
<string name="type.landuse.garages">Karrjiow</string>
|
||||
<string name="type.landuse.grass">Gwels</string>
|
||||
<string name="type.landuse.greenfield">Tir Gwyrgh</string>
|
||||
<string name="type.landuse.greenhouse_horticulture">Chi Gweder</string>
|
||||
<string name="type.landuse.industrial">Hwelbark</string>
|
||||
<string name="type.landuse.landfill">Tirlanow</string>
|
||||
<string name="type.landuse.meadow">Pras</string>
|
||||
<string name="type.landuse.military">Selva</string>
|
||||
<string name="type.landuse.orchard">Avalennek</string>
|
||||
<string name="type.landuse.quarry">Mengleudh</string>
|
||||
<string name="type.landuse.railway">Yyns Horn</string>
|
||||
<string name="type.landuse.recreation_ground">Park</string>
|
||||
<string name="type.landuse.reservoir">Kreun</string>
|
||||
<string name="type.landuse.residential">Tir Anedhel</string>
|
||||
<string name="type.landuse.retail">Tir Daskwerthans</string>
|
||||
<string name="type.landuse.salt_pond">Poll Holan</string>
|
||||
<string name="type.landuse.village_green">Plen Glas Gwig</string>
|
||||
<string name="type.landuse.vineyard">Gwinlan</string>
|
||||
<string name="type.leisure">Tir rag Termyn Syger</string>
|
||||
<string name="type.leisure.bandstand">Gwariva Poblek</string>
|
||||
<string name="type.leisure.common">Tir Poblek</string>
|
||||
<string name="type.leisure.dog_park">Park rag Keun</string>
|
||||
<string name="type.leisure.fitness_centre">Hel Sport</string>
|
||||
<string name="type.leisure.dance">Hel Donsya</string>
|
||||
<string name="type.leisure.garden">Jardin</string>
|
||||
<string name="type.leisure.garden.residential">Jardin Anedhel</string>
|
||||
<string name="type.leisure.golf_course">Gwel Golf</string>
|
||||
<string name="type.leisure.miniature_golf">Gwel Golf Munys</string>
|
||||
<string name="type.leisure.indoor_play">Garth-Gwari Pervedhek</string>
|
||||
<string name="type.leisure.marina">Porth</string>
|
||||
<string name="type.leisure.nature_reserve">Gwithva Natur</string>
|
||||
<string name="type.leisure.outdoor_seating">Esedhow yn-mes</string>
|
||||
<string name="type.leisure.firepit">Oles</string>
|
||||
<string name="type.leisure.park">Park</string>
|
||||
<string name="type.leisure.park.no.access">Park Privedh</string>
|
||||
<string name="type.leisure.park.permissive">Park</string>
|
||||
<string name="type.leisure.park.private">Park Privedh</string>
|
||||
<string name="type.leisure.picnic_table">Bordh Kroust</string>
|
||||
<string name="type.leisure.pitch">Len Sportys</string>
|
||||
<string name="type.leisure.playground">Garth-Gwari</string>
|
||||
<string name="type.leisure.recreation_ground">Park</string>
|
||||
<string name="type.leisure.sauna">Sawna</string>
|
||||
<string name="type.leisure.sports_centre">Kres Sportya</string>
|
||||
<string name="type.leisure.sports_centre.sport.multi">Kres Sportya Liesek</string>
|
||||
<string name="type.leisure.sports_centre.sport.american_football">Kres Pel Droos Amerikanek</string>
|
||||
<string name="type.leisure.sports_centre.sport.archery">Kres Gwaregieth</string>
|
||||
<string name="type.leisure.sports_centre.sport.athletics">Kres Athletek</string>
|
||||
<string name="type.leisure.sports_centre.sport.australian_football">Kres Pel Droos Ostralek</string>
|
||||
<string name="type.leisure.sports_centre.sport.badminton">Kres Badminton</string>
|
||||
<string name="type.leisure.sports_centre.sport.baseball">Kres Pel Vas</string>
|
||||
<string name="type.leisure.sports_centre.sport.basketball">Kres Pel Ganstel</string>
|
||||
<string name="type.leisure.sports_centre.sport.beachvolleyball">Kres Pel Volli war an Treth</string>
|
||||
<string name="type.leisure.sports_centre.sport.bowls">Kres Gwari Pelyow</string>
|
||||
<string name="type.leisure.sports_centre.sport.climbing">Kres Krambla</string>
|
||||
<string name="type.leisure.sports_centre.sport.cricket">Kres Krycket</string>
|
||||
<string name="type.leisure.sports_centre.sport.curling">Kres Hurlya</string>
|
||||
<string name="type.leisure.sports_centre.sport.equestrian">Kres Marghek</string>
|
||||
<string name="type.leisure.sports_centre.sport.field_hockey">Kres Hocki</string>
|
||||
<string name="type.leisure.sports_centre.sport.futsal">Kres Futsal</string>
|
||||
<string name="type.leisure.sports_centre.sport.golf">Kres Golf</string>
|
||||
<string name="type.leisure.sports_centre.sport.gymnastics">Kres Gymnastek</string>
|
||||
<string name="type.leisure.sports_centre.sport.handball">Kres Pel Dhorn</string>
|
||||
<string name="type.leisure.sports_centre.sport.ice_hockey">Kres Hocki Rew</string>
|
||||
<string name="type.leisure.sports_centre.sport.skateboard">Kres Rostell</string>
|
||||
<string name="type.leisure.sports_centre.sport.skiing">Kres Skia</string>
|
||||
<string name="type.leisure.sports_centre.sport.soccer">Kres Pel Droos</string>
|
||||
<string name="type.leisure.sports_centre.sport.swimming">Kres Poll-Neuvya</string>
|
||||
<string name="type.leisure.sports_centre.sport.table_tennis">Kres Tennis Moos</string>
|
||||
<string name="type.leisure.sports_centre.sport.tennis">Kres Tennis</string>
|
||||
<string name="type.leisure.sports_centre.sport.volleyball">Kres Pel Volli</string>
|
||||
<string name="type.leisure.stadium">Sportva</string>
|
||||
<string name="type.leisure.swimming_pool">Poll-Neuvya</string>
|
||||
<string name="type.leisure.swimming_pool.private">Poll-Neuvya Privedh</string>
|
||||
<string name="type.leisure.track">Ol Athletek</string>
|
||||
<string name="type.leisure.track.area">Ol Athletek</string>
|
||||
<string name="type.leisure.beach_resort">Tyller-Havi war an Treth</string>
|
||||
<string name="type.man_made">Dornwrys</string>
|
||||
<string name="type.man_made.cairn">Karnedh</string>
|
||||
<string name="type.man_made.chimney">Chymbla</string>
|
||||
<string name="type.man_made.survey_point">Bleyn Arhwithra</string>
|
||||
<string name="type.man_made.flagpole">Gwelen Baner</string>
|
||||
<string name="type.man_made.lighthouse">Golowji</string>
|
||||
<string name="type.man_made.mast">Gwern</string>
|
||||
<string name="type.man_made.pier">Kay</string>
|
||||
<string name="type.man_made.pipeline">Gooth</string>
|
||||
<string name="type.man_made.pipeline.overground">Gooth a-ugh dhe Leur</string>
|
||||
<string name="type.man_made.surveillance">Kamera Aspians</string>
|
||||
<string name="type.man_made.tower">Tour</string>
|
||||
<string name="type.man_made.communications_tower">Tour Keskomunyans</string>
|
||||
<string name="type.man_made.tower.communication">Tour Keskomunyans</string>
|
||||
<string name="type.man_made.mast.communication">Tour Keskomunyans</string>
|
||||
<string name="type.man_made.petroleum_well">Fenten Oyl bo Petrol</string>
|
||||
<string name="type.man_made.crane">Garan</string>
|
||||
<string name="type.man_made.wastewater_plant">Komodyta Karth Karthyon</string>
|
||||
<string name="type.man_made.water_tap">Tapp</string>
|
||||
<string name="type.man_made.water_tap.drinking_water_no">Tapp</string>
|
||||
<string name="type.man_made.water_tower">Tour Dowrargh</string>
|
||||
<string name="type.man_made.water_well">Fenten</string>
|
||||
<string name="type.man_made.water_well.drinking_water_no">Fenten</string>
|
||||
<string name="type.man_made.windmill">Melin Wyns</string>
|
||||
<string name="type.man_made.works">Tir Gonis</string>
|
||||
<string name="type.military">Selva</string>
|
||||
<string name="type.natural">Natur</string>
|
||||
<string name="type.natural.bare_rock">Karrek</string>
|
||||
<string name="type.natural.shingle">Biliennow</string>
|
||||
<string name="type.natural.scree">Radel</string>
|
||||
<string name="type.natural.bay">Pleg Mor</string>
|
||||
<string name="type.natural.beach">Treth</string>
|
||||
<string name="type.natural.beach.sand">Treth Tewesek</string>
|
||||
<string name="type.natural.beach.gravel">Treth Growan</string>
|
||||
<string name="type.natural.cape">Pennrynn</string>
|
||||
<string name="type.natural.cave_entrance">Entrans Fow</string>
|
||||
<string name="type.natural.cliff">Als</string>
|
||||
<string name="type.natural.earth_bank">Banken</string>
|
||||
<string name="type.man_made.embankment">Bour</string>
|
||||
<string name="type.natural.coastline">Kost</string>
|
||||
<string name="type.natural.desert">Difeyth</string>
|
||||
<string name="type.natural.sand">Tewes</string>
|
||||
<string name="type.natural.geyser">Fenten Gnasek</string>
|
||||
<string name="type.natural.glacier">Rewiva</string>
|
||||
<string name="type.natural.grassland">Tonn</string>
|
||||
<string name="type.natural.heath">Grug</string>
|
||||
<string name="type.natural.hot_spring">Fenten Pooth</string>
|
||||
<string name="type.natural.water.lake">Lynn</string>
|
||||
<string name="type.natural.water.lock">Poll Yet Dhowr</string>
|
||||
<string name="type.natural.water.pond">Poll</string>
|
||||
<string name="type.natural.water.reservoir">Kreun</string>
|
||||
<string name="type.natural.water.basin">Bason</string>
|
||||
<string name="type.natural.water.river">Avon</string>
|
||||
<string name="type.natural.land">Tir</string>
|
||||
<string name="type.natural.meadow">Pras</string>
|
||||
<string name="type.natural.orchard">Avalennek</string>
|
||||
<string name="type.natural.peak">Topp</string>
|
||||
<string name="type.natural.rock">Men</string>
|
||||
<string name="type.natural.scrub">Krann</string>
|
||||
<string name="type.natural.spring">Fenten</string>
|
||||
<string name="type.natural.spring.drinking_water_no">Fenten</string>
|
||||
<string name="type.natural.tree">Gwedhen</string>
|
||||
<string name="type.natural.tree_row">Rew a Gwedhennow</string>
|
||||
<string name="type.natural.vineyard">Gwinlan</string>
|
||||
<string name="type.natural.volcano">Loskvenydh</string>
|
||||
<string name="type.natural.water">Dowr</string>
|
||||
<string name="type.natural.wetland.bog">Keunegen</string>
|
||||
<string name="type.natural.wetland.marsh">Keunek</string>
|
||||
<string name="type.natural.wetland.saltmarsh">Keunek Sall</string>
|
||||
<string name="type.natural.wetland.fen">Gwern</string>
|
||||
<string name="type.natural.wetland.reedbed">Keunegen</string>
|
||||
<string name="type.natural.wetland.swamp">Gwern</string>
|
||||
<string name="type.natural.wetland.mangrove">Koos Liva</string>
|
||||
<string name="type.noexit">Fordh Dhal</string>
|
||||
<string name="type.office">Buro</string>
|
||||
<string name="type.office.company">Buro Kowethyans</string>
|
||||
<string name="type.office.government">Buro Governans</string>
|
||||
<string name="type.office.insurance">Buro Surheans</string>
|
||||
<string name="type.office.lawyer">Laghyas</string>
|
||||
<string name="type.office.ngo">Buro Aluseneth</string>
|
||||
<string name="type.office.telecommunication">Kowethyans Pellgomunyans</string>
|
||||
<string name="type.organic.only">Organek</string>
|
||||
<string name="type.organic.yes">Organek</string>
|
||||
<string name="type.place.city">Cita</string>
|
||||
<string name="type.place.city.capital">Chifcita</string>
|
||||
<string name="type.place.city.capital.10">Cita</string>
|
||||
<string name="type.place.city.capital.11">Cita</string>
|
||||
<string name="type.place.city.capital.2">Chifcita</string>
|
||||
<string name="type.place.city.capital.3">Cita</string>
|
||||
<string name="type.place.city.capital.4">Cita</string>
|
||||
<string name="type.place.city.capital.5">Cita</string>
|
||||
<string name="type.place.city.capital.6">Cita</string>
|
||||
<string name="type.place.city.capital.7">Cita</string>
|
||||
<string name="type.place.city.capital.8">Cita</string>
|
||||
<string name="type.place.city.capital.9">Cita</string>
|
||||
<string name="type.place.continent">Brastir</string>
|
||||
<string name="type.place.country">Bro</string>
|
||||
<string name="type.place.county">Konteth</string>
|
||||
<string name="type.place.farm">Amethva</string>
|
||||
<string name="type.place.hamlet">Gwigbian</string>
|
||||
<string name="type.place.island">Enys</string>
|
||||
<string name="type.place.islet">Enesik</string>
|
||||
<string name="type.place.isolated_dwelling">Tre Enyshes</string>
|
||||
<string name="type.place.locality">Tyller</string>
|
||||
<string name="type.place.quarter">Kwarter</string>
|
||||
<string name="type.place.neighbourhood">Kentreveth</string>
|
||||
<string name="type.place.ocean">Keynvor</string>
|
||||
<string name="type.place.region">Pow</string>
|
||||
<string name="type.place.sea">Mor</string>
|
||||
<string name="type.place.square">Plen</string>
|
||||
<string name="type.place.state">Gwlas</string>
|
||||
<string name="type.place.state.USA">Gwlas Amerikanek</string>
|
||||
<string name="type.place.suburb">Mestrev</string>
|
||||
<string name="type.place.town">Tre</string>
|
||||
<string name="type.place.village">Gwig</string>
|
||||
<string name="type.power">Tredan</string>
|
||||
<string name="type.power.generator">Dinythell Dredan</string>
|
||||
<string name="type.power.generator.solar">Dinythell an Howl</string>
|
||||
<string name="type.power.generator.wind">Dinythell an Awel</string>
|
||||
<string name="type.power.line">Linen Tredanek</string>
|
||||
<string name="type.power.line.underground">Linen Tredanek yn-dann Dhor</string>
|
||||
<string name="type.power.minor_line">Linen Tredanek Le</string>
|
||||
<string name="type.power.plant">Dinythva Dredan</string>
|
||||
<string name="type.power.plant.coal">Tredanva Glow</string>
|
||||
<string name="type.power.plant.gas">Tredanva Gass</string>
|
||||
<string name="type.power.plant.hydro">Tredanva Dowr</string>
|
||||
<string name="type.power.plant.solar">Tredanva an Howl</string>
|
||||
<string name="type.power.plant.wind">Tredanva an Awel</string>
|
||||
<string name="type.power.tower">Tour Tredanek</string>
|
||||
<string name="type.power.pole">Gwelen Tredanek</string>
|
||||
<string name="type.man_made.utility_pole">Gwelen Les</string>
|
||||
<string name="type.public_transport">Karyans Poblek</string>
|
||||
<string name="type.public_transport.platform">Kay</string>
|
||||
<string name="type.railway">Hyns Horn</string>
|
||||
<string name="type.railway.abandoned">Hyns Horn Gesys</string>
|
||||
<string name="type.railway.abandoned.bridge">Pons Hyns Horn Gesys</string>
|
||||
<string name="type.railway.abandoned.tunnel">Kowfordh Hyns Horn Gesys</string>
|
||||
<string name="type.railway.construction">Hyns Horn Drehevyans</string>
|
||||
<string name="type.railway.crossing">Treusva Hyns Horn</string>
|
||||
<string name="type.railway.disused">Hyns Horn Undevnydhys</string>
|
||||
<string name="type.railway.halt">Savla Tren</string>
|
||||
<string name="type.railway.level_crossing">Treusva Hyns Horn</string>
|
||||
<string name="type.railway.light_rail">Hyns Horn Byghan</string>
|
||||
<string name="type.railway.light_rail.bridge">Pons Hyns Horn Byghan</string>
|
||||
<string name="type.railway.light_rail.tunnel">Kowfordh Hyns Horn Byghan</string>
|
||||
<string name="type.railway.monorail">Tren Ungledhren</string>
|
||||
<string name="type.railway.monorail.bridge">Pons Tren Ungledhren</string>
|
||||
<string name="type.railway.monorail.tunnel">Kowfordh Tren Ungledhren</string>
|
||||
<string name="type.railway.platform">Kay</string>
|
||||
<string name="type.railway.rail">Hyns Horn</string>
|
||||
<string name="type.railway.rail.highspeed">Hyns Horn Tooth</string>
|
||||
<string name="type.railway.rail.tourism">Hyns Horn Tourystek</string>
|
||||
<string name="type.railway.rail.main">Hyns Horn</string>
|
||||
<string name="type.railway.rail.branch">Hyns Horn Skorr</string>
|
||||
<string name="type.railway.rail.utility">Hyns Horn Gonis</string>
|
||||
<string name="type.railway.rail.bridge">Pons Hyns Horn</string>
|
||||
<string name="type.railway.rail.highspeed.bridge">Pons Hyns Horn Tooth</string>
|
||||
<string name="type.railway.rail.tourism.bridge">Pons Hyns Horn Tourystek</string>
|
||||
<string name="type.railway.rail.main.bridge">Pons Hyns Horn</string>
|
||||
<string name="type.railway.rail.branch.bridge">Pons Hyns Horn Skorr</string>
|
||||
<string name="type.railway.rail.tunnel">Kowfordh Hyns Horn</string>
|
||||
<string name="type.railway.rail.highspeed.tunnel">Kowfordh Hyns Horn Tooth</string>
|
||||
<string name="type.railway.rail.tourism.tunnel">Kowfordh Hyns Horn Tourystek</string>
|
||||
<string name="type.railway.rail.main.tunnel">Kowfordh Hyns Horn</string>
|
||||
<string name="type.railway.rail.branch.tunnel">Kowfordh Hyns Horn Skorr</string>
|
||||
<string name="type.railway.station">Gorsav</string>
|
||||
<string name="type.railway.station.light_rail">Gorsav</string>
|
||||
<string name="type.railway.station.light_rail.berlin">Gorsav S-Bahn</string>
|
||||
<string name="type.railway.station.light_rail.london">Gorsav DLR</string>
|
||||
<string name="type.railway.station.light_rail.porto">Gorsav Metro Porto</string>
|
||||
<string name="type.railway.station.monorail">Gorsav Tren Ungledhren</string>
|
||||
<string name="type.railway.station.subway">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.adana">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.algiers">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.almaty">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.amsterdam">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.ankara">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.athens">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.baku">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.bangkok">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.barcelona">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.beijing">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.bengalore">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.berlin">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.bilbao">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.brasilia">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.brescia">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.brussels">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.bucharest">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.budapest">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.buenos_aires">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.bursa">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.cairo">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.caracas">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.catania">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.changchun">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.chengdu">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.chicago">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.chongqing">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.dalian">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.delhi">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.dnepro">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.dubai">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.ekb">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.fukuoka">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.glasgow">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.guangzhou">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.hamburg">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.helsinki">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.hiroshima">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.hongkong">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.isfahan">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.istanbul">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.izmir">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.kazan">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.kharkiv">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.kiev">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.kobe">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.kolkata">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.kunming">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.kyoto">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.la">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.lausanne">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.lille">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.lima">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.lisboa">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.london">Gorsav Tube</string>
|
||||
<string name="type.railway.station.subway.lyon">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.madrid">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.malaga">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.manila">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.maracaibo">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.mashhad">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.mecca">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.medellin">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.mexico">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.milan">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.minsk">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.montreal">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.moscow">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.munchen">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.nagoya">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.newyork">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.nnov">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.novosibirsk">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.osaka">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.oslo">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.palma">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.panama">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.paris">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.philadelphia">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.pyongyang">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.qingdao">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.rennes">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.rio">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.roma">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.rotterdam">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.samara">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.santiago">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.santo_domingo">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.saopaulo">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.sapporo">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.sendai">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.sf">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.shanghai">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.shenzhen">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.shiraz">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.singapore">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.sofia">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.spb">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.stockholm">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.tabriz">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.taipei">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.taoyuan">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.tashkent">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.tbilisi">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.tehran">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.tianjin">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.tokyo">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.valencia">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.vienna">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.warszawa">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.washington">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.wuhan">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.yerevan">Gorsav Metro</string>
|
||||
<string name="type.railway.station.subway.yokohama">Gorsav Metro</string>
|
||||
<string name="type.railway.subway">Gorsav Metro</string>
|
||||
<string name="type.railway.subway_entrance">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.adana">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.algiers">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.almaty">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.amsterdam">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.ankara">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.athens">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.baku">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.bangkok">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.barcelona">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.beijing">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.bengalore">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.berlin">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.bilbao">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.brasilia">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.brescia">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.brussels">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.bucharest">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.budapest">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.buenos_aires">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.bursa">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.cairo">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.caracas">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.catania">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.changchun">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.chengdu">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.chicago">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.chongqing">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.dalian">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.delhi">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.dnepro">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.dubai">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.ekb">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.fukuoka">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.glasgow">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.guangzhou">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.hamburg">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.helsinki">Entrans Metro</string>
|
||||
<string name="type.railway.subway_entrance.hiroshima">Entrans Metro</string>
|
||||
</resources>
|
||||
|
||||
@@ -352,4 +352,21 @@
|
||||
<string name="type.cuisine.argentinian">Argentinska kuhinja</string>
|
||||
<string name="type.cuisine.asian">Azijska kuhinja</string>
|
||||
<string name="type.cuisine.austrian">Avstrijska kuhinja</string>
|
||||
<string name="type.cuisine.chinese">Kitajska kuhinja</string>
|
||||
<string name="type.cuisine.crepe">Krep</string>
|
||||
<string name="type.cuisine.donut">Donat</string>
|
||||
<string name="type.cuisine.fish">Ribe</string>
|
||||
<string name="type.cuisine.fish_and_chips">Riba s krompirčkom</string>
|
||||
<string name="type.cuisine.french">Francoska kuhinja</string>
|
||||
<string name="type.cuisine.grill">Žar</string>
|
||||
<string name="type.cuisine.hotdog">Hot dog</string>
|
||||
<string name="type.craft.electronics_repair">Popravilo elektronike</string>
|
||||
<string name="type.craft.gardener">Vrtnar</string>
|
||||
<string name="type.craft.hvac">Ogrevanje, prezračevanje, klimatizacija</string>
|
||||
<string name="type.craft.key_cutter">Ključavničar</string>
|
||||
<string name="type.shop.camera">Trgovina s fotoaparati</string>
|
||||
<string name="type.craft.plumber">Vodovodar</string>
|
||||
<string name="type.cuisine.breakfast">Zajtrk</string>
|
||||
<string name="type.cuisine.bubble_tea">Čaj s tapiokinimi kroglicami (\'Bubble Tea\')</string>
|
||||
<string name="type.cuisine.chicken">Piščanec</string>
|
||||
</resources>
|
||||
|
||||
@@ -379,6 +379,7 @@
|
||||
<string name="type.emergency.life_ring">Lifebuoy</string>
|
||||
<string name="type.emergency.defibrillator">Defibrillator</string>
|
||||
<string name="type.emergency.fire_hydrant">Fire Hydrant</string>
|
||||
<string name="type.amenity.hydrant">Irrigation Hydrant</string>
|
||||
<string name="type.emergency.phone">Emergency Phone</string>
|
||||
<!-- A place where a lifeguard is on duty. -->
|
||||
<string name="type.emergency.lifeguard">Lifeguard</string>
|
||||
|
||||
@@ -116,6 +116,9 @@ fi
|
||||
echo "Generating search categories / synonyms..."
|
||||
./tools/unix/generate_categories.sh
|
||||
|
||||
echo "Generating Desktop UI strings..."
|
||||
./tools/unix/generate_desktop_ui_strings.sh
|
||||
|
||||
if [ -z "$SKIP_GENERATE_SYMBOLS" ]; then
|
||||
if Diff data/symbols_hash data/styles/*/*/symbols/* || [ ! -z "$SYMBOLS_NOT_GENERATED" ]; then
|
||||
echo "Generating symbols..."
|
||||
|
||||
@@ -186,7 +186,7 @@
|
||||
"place-state": "Щат|провинция",
|
||||
"place-region": "Район|Регион",
|
||||
"place-island|place-islet": "Остров",
|
||||
"place-suburb|place-quarter|place-neighbourhood|landuse-residential": "Район|микрорайон|окръг|квартал|Предградие",
|
||||
"place-suburb|place-quarter|place-neighbourhood|landuse-residential": "Район|микрорайон|окръг|квартал|Предградие|Жилищен комплекс|ж.к.|ЖК",
|
||||
"place-hamlet": "Село",
|
||||
"place-village": "Село",
|
||||
"place-locality": "местност|регион|Място",
|
||||
|
||||
@@ -384,7 +384,7 @@
|
||||
"shop-outpost": "4Pickup Point|4Parcel Pickup",
|
||||
"amenity-vending_machine-fuel|@category_fuel": "Fuel Dispenser|Gas Pump",
|
||||
"building-garage": "Garage",
|
||||
"highway-rest_area|highway-services": "4Rest area|4Service area|station",
|
||||
"highway-rest_area|highway-services": "4Rest area|4Service area|station|rest stop",
|
||||
"man_made-chimney": "Chimney",
|
||||
"man_made-crane": "Crane",
|
||||
"man_made-tower|man_made-flare": "Tower",
|
||||
@@ -435,7 +435,8 @@
|
||||
"emergency-assembly_point": "5Emergency assembly point",
|
||||
"emergency-life_ring": "5Lifebuoy|6Life Ring|life-ring|lifering|flotation device|floatation device",
|
||||
"emergency-defibrillator": "4Defibrillator|AED",
|
||||
"emergency-fire_hydrant": "4Fire Hydrant|Fire Plug",
|
||||
"emergency-fire_hydrant": "4Fire Hydrant|Fire Plug|Hydrant",
|
||||
"amenity-hydrant": "Irrigation Hydrant|Water Hydrant|Cleaning Hydrant|Hydrant",
|
||||
"emergency-lifeguard": "Lifeguard|Lifesaver",
|
||||
"emergency-mountain_rescue": "Mountain Rescue Station|Search and Rescue|rescue",
|
||||
"leisure-fitness_station": "3Fitness Station|street workout|fitness|workout|4Exercise station|Exercise bench|outdoor gym|5Calisthenics park|trim trail",
|
||||
|
||||
@@ -405,7 +405,8 @@
|
||||
"amenity-shower": "3Ducha|duchas|4Regadera|regaderas",
|
||||
"emergency-assembly_point": "Punto de reunión de emergencia|reunión de emergencia|emergencia",
|
||||
"emergency-defibrillator": "4Desfibrilador|defibrilador|socorro|primeros auxilios|auxilio|electroshock|schock|reanimar|reanimación|paro cardíaco|infarto|emergencia",
|
||||
"emergency-fire_hydrant": "Boca de incendio|Hidrante",
|
||||
"emergency-fire_hydrant": "Boca de incendio|Boca de incendios|Hidrante|Hidrante de incendio|Hidrante de incendios|Hidrante contra incendios|Hidrante de fuego",
|
||||
"amenity-hydrant": "Boca de riego|Hidrante de riego|Hidrante de agua|Hidrante técnico|Hidrante de limpieza|Hidrante",
|
||||
"emergency-lifeguard": "Socorrista|Salvavidas",
|
||||
"emergency-mountain_rescue": "Puesto de rescate de montaña|Búsqueda y rescate|Rescate|rescatista|rescatistas",
|
||||
"leisure-fitness_station": "Aparatos de gimnasia|Aparatos de ejercicio|Estación de ejercicios|Gimnasio exterior|Calistenia|Ejercicio",
|
||||
|
||||
@@ -399,7 +399,8 @@
|
||||
"amenity-shower": "Douche",
|
||||
"emergency-assembly_point": "Point de rassemblement d'urgence",
|
||||
"emergency-defibrillator": "4Défibrillateur|DAE",
|
||||
"emergency-fire_hydrant": "Bouche d’incendie|borne d'incendie",
|
||||
"emergency-fire_hydrant": "Bouche d’incendie|bouche de incendie|borne d’incendie|borne de incendie|Borne hydratante|Poteau d’incendie|Hydrant|Hydrante",
|
||||
"amenity-hydrant": "Bouche d’puisage|bouche de puisage|borne d’puisage|bourne de puisage|Hydrant|Hydrante",
|
||||
"emergency-lifeguard": "Sauveteur d’urgence|Sauveteur",
|
||||
"emergency-mountain_rescue": "Sauveteurs en montagne d’urgence",
|
||||
"leisure-fitness_station": "Station de fitness|Parcours de santé",
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
"place-state": "Штат|провинция",
|
||||
"place-region": "Район",
|
||||
"place-island|place-islet": "Остров",
|
||||
"place-suburb|place-quarter|place-neighbourhood|landuse-residential": "Район|микрорайон|квартал|Жилая зона",
|
||||
"place-suburb|place-quarter|place-neighbourhood|landuse-residential": "Район|микрорайон|квартал|Жилая зона|Жилой комплекс|ж.к.|ЖК",
|
||||
"place-hamlet": "Посёлок|деревня",
|
||||
"place-village": "Деревня|поселок",
|
||||
"place-locality": "Местность|регион",
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
"place-state": "Штат|провінція|регіон",
|
||||
"place-region": "Район|область",
|
||||
"place-island|place-islet": "Острів",
|
||||
"place-suburb|place-quarter|place-neighbourhood|landuse-residential": "Район|мікрорайон|квартал|округа|Сусідство",
|
||||
"place-suburb|place-quarter|place-neighbourhood|landuse-residential": "Район|мікрорайон|квартал|округа|Сусідство|Житловий комплекс|ж.к.|ЖК",
|
||||
"place-hamlet": "Поселення|селище|село",
|
||||
"place-village": "Село|хутір|поселення",
|
||||
"place-locality": "Місцевість|регіон|Місце",
|
||||
|
||||
@@ -148,11 +148,11 @@
|
||||
<ul class="license-list">
|
||||
<li><a href="https://agg.sourceforge.net/antigrain.com/index.html">Anti-Grain Geometry</a><br>© 2002–2005 Maxim Shemanarev; <a href="#agg-license" class="license">License</a></li>
|
||||
|
||||
<li><a href="https://www.boost.org">Boost</a>; <a href="#boost-license" class="license">Boost License</a></li>
|
||||
<li><a href="https://www.boost.org/">Boost</a>; <a href="#boost-license" class="license">Boost License</a></li>
|
||||
|
||||
<li><a href="https://www.daemonology.net/bsdiff">bsdiff</a>; <a href="#bsd3-license" class="license">BSD License</a></li>
|
||||
<li><a href="https://www.daemonology.net/bsdiff/">bsdiff</a>; <a href="#bsd3-license" class="license">BSD License</a></li>
|
||||
|
||||
<li><a href="https://chromium.googlesource.com/chromium/src/courgette">Chromium's Courgette</a>;
|
||||
<li><a href="https://chromium.googlesource.com/chromium/src/courgette/">Chromium's Courgette</a>;
|
||||
<a href="#bsd3-license" class="license">BSD License</a></li>
|
||||
|
||||
<li><a href="https://github.com/dpogue/CMake-MetalShaderSupport">CMake Metal support files</a><br>
|
||||
@@ -170,22 +170,22 @@
|
||||
<li><a href="https://www.freetype.org">FreeType</a><br>
|
||||
© 2013 The FreeType Project; <a href="#freetype-license" class="license">FTL</a></li>
|
||||
|
||||
<li><a href="https://stephenberry.github.io/glaze">glaze</a><br>
|
||||
<li><a href="https://stephenberry.github.io/glaze/">glaze</a><br>
|
||||
© 2019 - present, Stephen Berry; <a href="#mit-license" class="license">MIT License</a></li>
|
||||
|
||||
<li><a href="https://www.glfw.org">GLFW</a><br>
|
||||
<li><a href="https://www.glfw.org/">GLFW</a><br>
|
||||
© 2002-2006 Marcus Geelnard;2006-2019 Camilla Löwy; <a href="#zlib-license" class="license">Zlib License</a></li>
|
||||
|
||||
<li><a href="https://www.g-truc.net/project-0016.html">GLM</a><br>
|
||||
© 2005–2014 G-Truc Creation; <a href="#mit-license" class="license">MIT License</a></li>
|
||||
|
||||
<li><a href="https://site.icu-project.org">ICU</a><br>
|
||||
<li><a href="https://site.icu-project.org/">ICU</a><br>
|
||||
© 1995–2016 IBM Corporation and others; <a href="#icu-license" class="license">ICU License</a></li>
|
||||
|
||||
<li><a href="https://www.digip.org/jansson">Jansson</a><br>
|
||||
<li><a href="https://www.digip.org/jansson/">Jansson</a><br>
|
||||
© 2009-2013 Petri Lehtinen; <a href="#mit-license" class="license">MIT License</a></li>
|
||||
|
||||
<li><a href="https://libkdtree.alioth.debian.org">libkdtree++</a><br>
|
||||
<li><a href="https://libkdtree.alioth.debian.org/">libkdtree++</a><br>
|
||||
© 2004-2007 Martin F. Krafft, parts are © 2004-2008 Paul Harris and © 2007-2008 Sylvain Bougerel; <a href="#artistic-license" class="license">Artistic License</a></li>
|
||||
|
||||
<li><a href="https://github.com/mapsme/omim">MAPS.ME</a><br>
|
||||
@@ -215,7 +215,7 @@
|
||||
<li><a href="https://github.com/googlesamples/android-vulkan-tutorials">Vulkan Wrapper</a><br>
|
||||
© 2016 Google Inc.; <a href="#apache2-license" class="license">Apache License</a></li>
|
||||
|
||||
<li class="android"><a href="https://cocosw.com/BottomSheet">BottomSheet</a><br>
|
||||
<li class="android"><a href="https://cocosw.com/BottomSheet/">BottomSheet</a><br>
|
||||
© 2011, 2015 Kai Liao; <a href="#apache2-license" class="license">Apache License</a></li>
|
||||
|
||||
<li><a href="https://github.com/google/open-location-code">Open Location Code</a><br>
|
||||
@@ -226,9 +226,6 @@
|
||||
|
||||
<li><a href="https://github.com/skarupke/flat_hash_map">Skarupke Hash Tables</a><br>
|
||||
© Malte Skarupke 2017; <a href="#boost-license" class="license">Boost License</a></li>
|
||||
|
||||
<li><a href="https://github.com/martinus/unordered_dense"></a><br>
|
||||
© 2022 Martin Leitner-Ankerl; <a href="#mit-license" class="license">MIT License</a></li>
|
||||
</ul>
|
||||
|
||||
<p lang="en">Beyond OpenStreetMap, we also use a few other open data sources to improve our map data:</p>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user