Merge branch 'master' of ssh://github.com/osmandapp/Osmand into TelegramStaleLocation

This commit is contained in:
Chumva 2018-08-28 14:22:36 +03:00
commit 448290aa21
67 changed files with 1579 additions and 437 deletions

View file

@ -24,7 +24,7 @@ public interface ITileSource {
public boolean couldBeDownloadedFromInternet();
public int getExpirationTimeMillis();
public long getExpirationTimeMillis();
public int getExpirationTimeMinutes();

View file

@ -11,15 +11,12 @@ import java.net.URL;
import java.net.URLConnection;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
@ -310,4 +307,5 @@ public class MapTileDownloader {
}
}
}
}

View file

@ -61,7 +61,7 @@ public class TileSourceManager {
private int avgSize;
private int bitDensity;
// -1 never expires,
private int expirationTimeMillis = -1;
private long expirationTimeMillis = -1;
private boolean ellipticYTile;
private String rule;
private boolean hidden; // if hidden in configure map settings, for example mapillary sources
@ -141,7 +141,7 @@ public class TileSourceManager {
return name;
}
public void setExpirationTimeMillis(int timeMillis) {
public void setExpirationTimeMillis(long timeMillis) {
this.expirationTimeMillis = timeMillis;
}
@ -149,7 +149,7 @@ public class TileSourceManager {
if(minutes < 0) {
this.expirationTimeMillis = -1;
} else {
this.expirationTimeMillis = minutes * 60 * 1000;
this.expirationTimeMillis = minutes * 60 * 1000l;
}
}
@ -157,10 +157,10 @@ public class TileSourceManager {
if(expirationTimeMillis < 0) {
return -1;
}
return expirationTimeMillis / (60 * 1000);
return (int) (expirationTimeMillis / (60 * 1000));
}
public int getExpirationTimeMillis() {
public long getExpirationTimeMillis() {
return expirationTimeMillis;
}

View file

@ -401,6 +401,10 @@ public class SearchUICore {
}
public void search(final String text, final boolean delayedExecution, final ResultMatcher<SearchResult> matcher) {
search(text, delayedExecution, matcher, searchSettings);
}
public void search(final String text, final boolean delayedExecution, final ResultMatcher<SearchResult> matcher, final SearchSettings searchSettings) {
final int request = requestNumber.incrementAndGet();
final SearchPhrase phrase = this.phrase.generateNewPhrase(text, searchSettings);
this.phrase = phrase;

View file

@ -5,10 +5,10 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/card_bg_color">

View file

@ -129,7 +129,7 @@
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/content_padding_standard"
android:layout_marginRight="@dimen/content_padding_standard"
android:text="@string/stop_sharing_chat"
android:text="@string/turn_off_location_sharing"
android:textColor="?attr/ctrl_active_color"
android:textSize="@dimen/hint_text_size"
app:typeface="@string/font_roboto_medium" />
@ -147,7 +147,7 @@
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/hint_text_size"
app:typeface="@string/font_roboto_regular"
tools:text="@string/stop_at" />
tools:text="@string/expire_in" />
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/ending_in_first_part"

View file

@ -20,9 +20,9 @@
<string name="send_my_location">Send my location</string>
<string name="gps_and_location">GPS &amp; location</string>
<string name="sharing_time">Sharing time</string>
<string name="stop_at">Stop at</string>
<string name="expire_in">Expire in</string>
<string name="stop_sharing_all">Sharing is enabled (disable)</string>
<string name="stop_sharing_chat">Stop chat sharing</string>
<string name="turn_off_location_sharing">Turn off location sharing</string>
<string name="open_osmand">Open OsmAnd</string>
<string name="shared_string_live">Live</string>
<string name="shared_string_bot">Bot</string>

View file

@ -25,7 +25,6 @@
<item name="primary_btn_bg">@drawable/primary_btn_bg_light</item>
<item name="primary_btn_text_color">@color/primary_btn_text_light</item>
<item name="secondary_btn_bg">@drawable/secondary_btn_bg_light</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="bottom_nav_shadow">@drawable/bg_bottom_bar_shadow_with_line_day</item>
@ -41,6 +40,11 @@
<item name="android:windowTranslucentStatus">true</item>
</style>
<style name="AppTheme.NoActionbar.Transparent">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
<style name="AppTheme.BottomSheet">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>

View file

@ -162,6 +162,11 @@ class TelegramSettings(private val app: TelegramApplication) {
fun getShowOnMapChatsCount() = showOnMapChats.size
fun clear() {
stopSharingLocationToChats()
app.getSharedPreferences(SETTINGS_NAME, Context.MODE_PRIVATE).edit().clear().apply()
}
fun save() {
val prefs = app.getSharedPreferences(SETTINGS_NAME, Context.MODE_PRIVATE)
val edit = prefs.edit()

View file

@ -35,12 +35,16 @@ class MessagesDbHelper(val app: TelegramApplication) {
}
fun saveMessages() {
sqliteHelper.clearMessages()
clearMessages()
synchronized(messages) {
sqliteHelper.addMessages(messages)
}
}
fun clearMessages() {
sqliteHelper.clearMessages()
}
private fun addMessage(chatId: Long, messageId: Long) {
synchronized(messages) {
messages.add(Message(chatId, messageId))

View file

@ -145,15 +145,17 @@ class TelegramHelper private constructor() {
fun getChatLiveMessages() = chatLiveMessages
fun getMessagesByChatIds(): Map<Long, List<TdApi.Message>> {
fun getMessagesByChatIds(messageExpTime: Long): Map<Long, List<TdApi.Message>> {
val res = mutableMapOf<Long, MutableList<TdApi.Message>>()
for (message in usersLocationMessages.values) {
var messages = res[message.chatId]
if (messages != null) {
messages.add(message)
} else {
messages = mutableListOf(message)
res[message.chatId] = messages
if (System.currentTimeMillis() / 1000 - getLastUpdatedTime(message) < messageExpTime) {
var messages = res[message.chatId]
if (messages != null) {
messages.add(message)
} else {
messages = mutableListOf(message)
res[message.chatId] = messages
}
}
}
return res
@ -179,10 +181,19 @@ class TelegramHelper private constructor() {
return chat.type is TdApi.ChatTypeSupergroup || chat.type is TdApi.ChatTypeBasicGroup
}
fun getLastUpdatedTime(message: TdApi.Message) = Math.max(message.editDate, message.date)
fun getLastUpdatedTime(message: TdApi.Message): Int {
val content = message.content
return if (content is MessageOsmAndBotLocation) {
content.lastUpdated
} else {
Math.max(message.editDate, message.date)
}
}
fun isPrivateChat(chat: TdApi.Chat): Boolean = chat.type is TdApi.ChatTypePrivate
fun isSecretChat(chat: TdApi.Chat): Boolean = chat.type is TdApi.ChatTypeSecret
private fun isChannel(chat: TdApi.Chat): Boolean {
return chat.type is TdApi.ChatTypeSupergroup && (chat.type as TdApi.ChatTypeSupergroup).isChannel
}
@ -577,7 +588,7 @@ class TelegramHelper private constructor() {
}
fun stopSendingLiveLocationMessages() {
chatLiveMessages.forEach { chatId, _ ->
chatLiveMessages.forEach { (chatId, _ )->
stopSendingLiveLocationToChat(chatId)
}
}
@ -612,7 +623,7 @@ class TelegramHelper private constructor() {
private fun sendLiveLocationImpl(chatLivePeriods: Map<Long, Long>, latitude: Double, longitude: Double) {
val location = TdApi.Location(latitude, longitude)
chatLivePeriods.forEach { chatId, livePeriod ->
chatLivePeriods.forEach { (chatId, livePeriod) ->
val content = TdApi.InputMessageLocation(location, livePeriod.toInt())
val msgId = chatLiveMessages[chatId]?.id
if (msgId != null) {
@ -901,8 +912,6 @@ class TelegramHelper private constructor() {
internal set
var lastUpdated: Int = 0
internal set
var created: Int = 0
internal set
override fun getConstructor() = -1

View file

@ -0,0 +1,25 @@
package net.osmand.telegram.ui
import android.os.Build
import android.os.Bundle
import android.support.v4.app.DialogFragment
import net.osmand.telegram.R
import net.osmand.telegram.TelegramApplication
open class BaseDialogFragment : DialogFragment() {
val app: TelegramApplication
get() = activity?.application as TelegramApplication
val telegramHelper get() = app.telegramHelper
val settings get() = app.settings
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
when {
Build.VERSION.SDK_INT >= 23 -> setStyle(DialogFragment.STYLE_NO_FRAME, R.style.AppTheme_NoActionbar_Transparent)
Build.VERSION.SDK_INT >= 19 -> setStyle(DialogFragment.STYLE_NO_FRAME, R.style.AppTheme_NoActionbar_Translucent)
else -> setStyle(DialogFragment.STYLE_NO_FRAME, R.style.AppTheme_NoActionbar)
}
}
}

View file

@ -212,13 +212,13 @@ class LiveNowTabFragment : Fragment(), TelegramListener, TelegramIncomingMessage
private fun updateLocationUi() {
if (locationUiUpdateAllowed) {
app.runInUIThread { adapter.notifyDataSetChanged() }
app.runInUIThread { updateList() }
}
}
private fun updateList() {
val res = mutableListOf<ListItem>()
for ((id, messages) in telegramHelper.getMessagesByChatIds()) {
for ((id, messages) in telegramHelper.getMessagesByChatIds(settings.locHistoryTime)) {
telegramHelper.getChat(id)?.also { chat ->
res.add(TelegramUiHelper.chatToChatItem(telegramHelper, chat, messages))
val type = chat.type

View file

@ -6,7 +6,6 @@ import android.graphics.Rect
import android.os.Build
import android.os.Bundle
import android.support.annotation.StringRes
import android.support.v4.app.DialogFragment
import android.support.v4.app.FragmentManager
import android.support.v4.content.ContextCompat
import android.support.v7.widget.AppCompatImageView
@ -30,7 +29,7 @@ import net.osmand.telegram.utils.AndroidUtils
import studio.carbonylgroup.textfieldboxes.ExtendedEditText
class LoginDialogFragment : DialogFragment() {
class LoginDialogFragment : BaseDialogFragment() {
companion object {
@ -118,10 +117,7 @@ class LoginDialogFragment : DialogFragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(DialogFragment.STYLE_NO_FRAME, R.style.AppTheme_NoActionbar_Translucent)
val activity = requireActivity()
val window = activity.window
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@ -218,7 +214,7 @@ class LoginDialogFragment : DialogFragment() {
var focusRequested = false
for (t in LoginDialogType.values()) {
val layout: View? = view?.findViewById(t.viewId)
val contains = t == loginDialogActiveType && !showProgress
val contains = t == loginDialogActiveType
when {
contains -> {
if (layout != null) {

View file

@ -2,6 +2,7 @@ package net.osmand.telegram.ui
import android.app.Dialog
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.support.design.widget.BottomNavigationView
import android.support.v4.app.DialogFragment
@ -58,6 +59,12 @@ class MainActivity : AppCompatActivity(), TelegramListener, ActionButtonsListene
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (Build.VERSION.SDK_INT >= 23) {
AndroidUtils.enterToTransparentFullScreen(this)
} else if (Build.VERSION.SDK_INT >= 19) {
AndroidUtils.enterToTranslucentFullScreen(this)
}
paused = false
val viewPager = findViewById<LockableViewPager>(R.id.view_pager).apply {
@ -149,8 +156,6 @@ class MainActivity : AppCompatActivity(), TelegramListener, ActionButtonsListene
if (AndroidUtils.isLocationPermissionAvailable(this)) {
app.locationProvider.resumeAllUpdates()
} else {
AndroidUtils.requestLocationPermission(this)
}
if (settings.hasAnyChatToShowOnMap() && !isOsmAndInstalled()) {
showOsmandMissingDialog()
@ -191,7 +196,14 @@ class MainActivity : AppCompatActivity(), TelegramListener, ActionButtonsListene
telegramHelper.init()
telegramHelper.requestAuthorizationState()
}
TelegramAuthorizationState.READY -> LoginDialogFragment.dismiss(fm)
TelegramAuthorizationState.READY -> {
LoginDialogFragment.dismiss(fm)
if (AndroidUtils.isLocationPermissionAvailable(this)) {
app.locationProvider.resumeAllUpdates()
} else {
AndroidUtils.requestLocationPermission(this)
}
}
else -> Unit
}
@ -281,6 +293,8 @@ class MainActivity : AppCompatActivity(), TelegramListener, ActionButtonsListene
fun logoutTelegram(silent: Boolean = false) {
if (telegramHelper.getTelegramAuthorizationState() == TelegramHelper.TelegramAuthorizationState.READY) {
if (app.isInternetConnectionAvailable) {
app.messagesDbHelper.clearMessages()
settings.clear()
telegramHelper.logout()
} else {
Toast.makeText(this, R.string.logout_no_internet_msg, Toast.LENGTH_SHORT).show()

View file

@ -578,7 +578,7 @@ class MyLocationTabFragment : Fragment(), TelegramListener {
holder.stopSharingDescr?.apply {
visibility = getStopSharingVisibility(expiresIn)
text = "${getText(R.string.stop_at)}:"
text = "${getText(R.string.expire_in)}:"
}
holder.stopSharingFirstPart?.apply {

View file

@ -2,7 +2,6 @@ package net.osmand.telegram.ui
import android.app.TimePickerDialog
import android.os.Bundle
import android.support.v4.app.DialogFragment
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v7.widget.LinearLayoutManager
@ -15,7 +14,6 @@ import android.widget.TextView
import net.osmand.Location
import net.osmand.data.LatLon
import net.osmand.telegram.R
import net.osmand.telegram.TelegramApplication
import net.osmand.telegram.TelegramLocationProvider.TelegramLocationListener
import net.osmand.telegram.TelegramLocationProvider.TelegramCompassListener
import net.osmand.telegram.helpers.ShareLocationHelper
@ -29,13 +27,7 @@ import org.drinkless.td.libcore.telegram.TdApi
import java.util.*
import java.util.concurrent.TimeUnit
class SetTimeDialogFragment : DialogFragment(), TelegramLocationListener, TelegramCompassListener {
private val app: TelegramApplication
get() = activity?.application as TelegramApplication
private val telegramHelper get() = app.telegramHelper
private val settings get() = app.settings
class SetTimeDialogFragment : BaseDialogFragment(), TelegramLocationListener, TelegramCompassListener {
private lateinit var locationViewCache: UiUtils.UpdateLocationViewCache
private val adapter = SetTimeListAdapter()
@ -49,11 +41,6 @@ class SetTimeDialogFragment : DialogFragment(), TelegramLocationListener, Telegr
private var heading: Float? = null
private var locationUiUpdateAllowed: Boolean = true
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(DialogFragment.STYLE_NO_FRAME, R.style.AppTheme_NoActionbar)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@ -100,7 +87,7 @@ class SetTimeDialogFragment : DialogFragment(), TelegramLocationListener, Telegr
if (!AndroidUtils.isLocationPermissionAvailable(view.context)) {
AndroidUtils.requestLocationPermission(activity!!)
} else {
chatLivePeriods.forEach { chatId, livePeriod ->
chatLivePeriods.forEach { (chatId, livePeriod) ->
settings.shareLocationToChat(chatId, true, livePeriod)
}
app.shareLocationHelper.startSharingLocation()

View file

@ -3,7 +3,6 @@ package net.osmand.telegram.ui
import android.os.Bundle
import android.support.annotation.DrawableRes
import android.support.annotation.StringRes
import android.support.v4.app.DialogFragment
import android.support.v4.app.FragmentManager
import android.support.v7.widget.ListPopupWindow
import android.support.v7.widget.Toolbar
@ -21,22 +20,12 @@ import net.osmand.telegram.helpers.TelegramUiHelper
import net.osmand.telegram.utils.AndroidUtils
import net.osmand.telegram.utils.OsmandFormatter
class SettingsDialogFragment : DialogFragment() {
private val app: TelegramApplication
get() = activity?.application as TelegramApplication
class SettingsDialogFragment : BaseDialogFragment() {
private val uiUtils get() = app.uiUtils
private val telegramHelper get() = app.telegramHelper
private val settings get() = app.settings
private val gpsAndLocPrefs = listOf(SendMyLocPref(), StaleLocPref(), LocHistoryPref())
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(android.support.v4.app.DialogFragment.STYLE_NO_FRAME, R.style.AppTheme_NoActionbar)
}
override fun onCreateView(
inflater: LayoutInflater,
parent: ViewGroup?,
@ -44,6 +33,9 @@ class SettingsDialogFragment : DialogFragment() {
): View {
val mainView = inflater.inflate(R.layout.fragement_settings_dialog, parent)
val appBarLayout = mainView.findViewById<View>(R.id.app_bar_layout)
AndroidUtils.addStatusBarPadding19v(context!!, appBarLayout)
mainView.findViewById<Toolbar>(R.id.toolbar).apply {
navigationIcon = uiUtils.getThemedIcon(R.drawable.ic_arrow_back)
setNavigationOnClickListener { dismiss() }

View file

@ -7,6 +7,7 @@ import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.content.res.Configuration
import android.graphics.Color
import android.graphics.Paint
import android.net.Uri
import android.os.Build
@ -17,6 +18,7 @@ import android.support.v4.content.FileProvider
import android.util.TypedValue
import android.util.TypedValue.COMPLEX_UNIT_DIP
import android.view.View
import android.view.WindowManager
import android.view.inputmethod.InputMethodManager
import net.osmand.telegram.R
import java.io.File
@ -86,6 +88,22 @@ object AndroidUtils {
}
}
fun enterToTransparentFullScreen(activity: Activity) {
if (Build.VERSION.SDK_INT >= 23) {
val window = activity.window
window.statusBarColor = Color.TRANSPARENT
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR or
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
}
}
fun enterToTranslucentFullScreen(activity: Activity) {
if (Build.VERSION.SDK_INT >= 19) {
activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
}
}
fun getPopupMenuWidth(ctx: Context, titles: Collection<String>): Int {
val txtSize = ctx.resources.getDimensionPixelSize(R.dimen.list_item_title_text_size)
val paint = Paint().apply { textSize = txtSize.toFloat() }

View file

@ -79,11 +79,10 @@ object OsmandFormatter {
fun getListItemLiveTimeDescr(ctx: TelegramApplication, lastUpdated: Int, prefix: String = ""): String {
return if (lastUpdated > 0) {
val duration = System.currentTimeMillis() / 1000 - lastUpdated
if (duration > MIN_DURATION_FOR_DATE_FORMAT) {
prefix + getFormattedDate(lastUpdated.toLong())
} else {
prefix + getFormattedDuration(ctx, duration) + " " +
ctx.getString(R.string.time_ago)
when {
duration > MIN_DURATION_FOR_DATE_FORMAT -> prefix + getFormattedDate(lastUpdated.toLong())
duration > 0 -> prefix + getFormattedDuration(ctx, duration) + " " + ctx.getString(R.string.time_ago)
else -> ""
}
} else {
""

View file

@ -299,9 +299,27 @@ task collectExternalResources {
import org.apache.tools.ant.taskdefs.condition.Os
task buildOsmAndCore(type: Exec) {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString().toLowerCase()
String flavour = "";
if(!tskReqStr.contains("fat")) {
if(tskReqStr.contains("arm64")) {
flavour = flavour.length() == 0 ? "ARM64_ONLY" : ""
}
if(tskReqStr.contains("armv7")) {
flavour = flavour.length() == 0 ? "ARMV7_ONLY" : ""
}
if(tskReqStr.contains("x86")) {
flavour = flavour.length() == 0 ? "X86_ONLY" : ""
}
}
description "Build Legacy OsmAndCore"
if (!Os.isFamily(Os.FAMILY_WINDOWS)) {
if(flavour.length() > 0) {
environment "$flavour", "1"
}
commandLine "bash", file("./old-ndk-build.sh").getAbsolutePath()
} else {
commandLine "cmd", "/c", "echo", "Not supported"

View file

@ -1,7 +1,6 @@
LOCAL_PATH := $(call my-dir)
ROOT_PATH := $(LOCAL_PATH)/../../..
$(info OsmAnd root: $(ROOT_PATH))
ifdef BUILD_ONLY_OLD_LIB
OSMAND_MAKEFILES := \
$(all-subdir-makefiles) \

View file

@ -10,8 +10,17 @@ APP_PLATFORM := android-14
# NDK_TOOLCHAIN_VERSION := 4.9
# NDK_TOOLCHAIN_VERSION := 4.8
NDK_TOOLCHAIN_VERSION := clang
APP_ABI := x86 armeabi-v7a arm64-v8a
ifdef ARMV7_ONLY
APP_ABI := armeabi-v7a
endif
ifdef ARM64_ONLY
APP_ABI := arm64-v8a
endif
ifdef X86_ONLY
APP_ABI := x86
endif
# APP_ABI := armeabi-v7a
ifndef OSMAND_DEBUG_NATIVE
# Force release compilation in release optimizations, even if application is debuggable by manifest

View file

@ -2,8 +2,6 @@
SCRIPT_LOC="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
NAME=$(basename $(dirname "${BASH_SOURCE[0]}") )
if [ -d "$ANDROID_HOME" ]; then
# for backwards compatbility
export ANDROID_SDK=$ANDROID_HOME

View file

@ -788,7 +788,7 @@ Zachod: %2$s</string>
<string name="avoid_unpaved">Paźbiahać daroh biez pakryćcia</string>
<string name="avoid_ferries">Paźbiahać paromaŭ</string>
<string name="avoid_in_routing_title">Paźbiahać…</string>
<string name="avoid_in_routing_descr">Pazbiahać platnych i daroh biez pakryccia, paromaŭ.</string>
<string name="avoid_in_routing_descr">Pazbiahać, napryklad, platnych i daroh biez pakryccia, paromaŭ.</string>
<string name="map_widget_fluorescent">Lumіniescentnyja maršruty</string>
<string name="map_widget_show_ruler">Liniejka</string>
<string name="map_widget_view_direction">Kіrunak pohladu</string>
@ -3071,7 +3071,7 @@ Praparcyjnaj pamiacі %4$s MB (Abmiežavańnie Android %5$s MB, Dalvik %6$s MB).
<string name="select_travel_book">Abrać dzionnik padarožžaŭ</string>
<string name="shared_string_travel_book">Dzionnik padarožžaŭ</string>
<string name="download_images">Spampavać vyjavy</string>
<string name="error_notification_desc">Kali laska, adpraŭcie zdymak ekrana hetaha apaviaščennia na support@osmand.net</string>
<string name="error_notification_desc">Kali laska, adpraŭcie zdymak ekrana z hetym apaviaščenniem na support@osmand.net</string>
<string name="release_3_0">"• Novaje: padtrymka svietavych aŭtanomnych turystyčnych daviednikaŭ. Spasylačnyja miasciny zviazany z mapaj. Zychodnyja danyja ad Wikivoyage.
\n
\n • Vikipiedyja: novy vyhliad, aktyŭnyja spasylki, padtrymka vyjaŭ
@ -3104,4 +3104,25 @@ Praparcyjnaj pamiacі %4$s MB (Abmiežavańnie Android %5$s MB, Dalvik %6$s MB).
\nRaspaviadzicie nam ab hetym.</string>
<string name="send_search_query">Adpravić pašukovy zapyt?</string>
<string name="increase_search_radius_to">Pavialičyć radyus pošuku da %1$s</string>
<string name="thank_you_for_feedback">Dziakuj vam za vodhuk</string>
<string name="poi_cannot_be_found">Vuziel ci šliach nie znajdzieny.</string>
<string name="search_no_results_feedback">Niama vynikaŭ pošuku?
\nDajcie nam vodhuk</string>
<string name="commiting_way">Fiksujecca šliach…</string>
<string name="test_voice_desrc">Nacisnicie na knopku i pasluchajcie adpaviednuju halasavuju padkazku, kab vyznačyć adsutnyja abo paškodžanyja padkazki.</string>
<string name="release_3_1">• Navihacyja: vypraŭliennie indykataru prahresu, chutkaja pieramiena pačatkovaha i kančatkovaha punktaŭ maršrutu
\n
\n • Markiery mapy: vypraŭliennie ŭkliučennia/adkliučennia hrup, mahčymasć chavać markiery z mapy
\n
\n • Redahavannie OSM: mahčymasć praŭki tehaŭ dlia niekropkavych abjektaŭ i šliachoŭ, vypraŭliennie adsutnych kamientaroŭ na natatkach, reziervovaje kapijavannie pravak
\n
\n • Paliapšennie razboru Wikipedia i Wikivoyage, abnoŭlienyja fajly ŭžo dastupnyja
\n
\n • Kantekstnaje mieniu: vypraŭliennie kolieru darožnych znakaŭ u načnym režymie, vypraŭliennie pamieraŭ dadatkovaha mieniu
\n
\n • Račnaja navihacyja: padtrymka farvateru
\n
\n • Vypraŭliennie inšych chibaŭ
\n
\n</string>
</resources>

View file

@ -3913,4 +3913,5 @@
<string name="poi_hazard_minefield">Міннае поле</string>
</resources>
<string name="poi_checkpoint_type_quize">Віктарына</string>
</resources>

View file

@ -329,7 +329,7 @@
<string name="avoid_unpaved">Пазьбягаць дарог без пакрыцьця</string>
<string name="avoid_ferries">Пазьбягаць паромаў</string>
<string name="avoid_in_routing_title">Пазбягаць…</string>
<string name="avoid_in_routing_descr">Пазбягаць платных і дарог без пакрыцця, паромаў.</string>
<string name="avoid_in_routing_descr">Пазбягаць, напрыклад, платных і дарог без пакрыцця, паромаў.</string>
<string name="map_widget_fluorescent">Люмінесцэнтныя маршруты</string>
<string name="map_widget_show_ruler">Лінейка</string>
@ -3155,4 +3155,25 @@
\nРаспавядзіце нам аб гэтым.</string>
<string name="send_search_query">Адправіць пашуковы запыт?</string>
<string name="increase_search_radius_to">Павялічыць радыус пошуку да %1$s</string>
<string name="thank_you_for_feedback">Дзякуй вам за водгук</string>
<string name="poi_cannot_be_found">Вузел ці шлях не знайдзены.</string>
<string name="search_no_results_feedback">Няма вынікаў пошуку?
\nДайце нам водгук</string>
<string name="commiting_way">Фіксуецца шлях…</string>
<string name="test_voice_desrc">Націсніце на кнопку і паслухайце адпаведную галасавую падказку, каб вызначыць адсутныя або пашкоджаныя падказкі.</string>
<string name="release_3_1">• Навігацыя: выпраўленне індыкатару прагрэсу, хуткая перамена пачатковага і канчатковага пунктаў маршруту
\n
\n • Маркеры мапы: выпраўленне ўключэння/адключэння груп, магчымасць хаваць маркеры з мапы
\n
\n • Рэдагаванне OSM: магчымасць праўкі тэгаў для некропкавых аб\'ектаў і шляхоў, выпраўленне адсутных каментароў на нататках, рэзервовае капіяванне правак
\n
\n • Паляпшэнне разбору Wikipedia і Wikivoyage, абноўленыя файлы ўжо даступныя
\n
\n • Кантэкстнае меню: выпраўленне колеру дарожных знакаў у начным рэжыме, выпраўленне памераў дадатковага меню
\n
\n • Рачная навігацыя: падтрымка фарватэру
\n
\n • Выпраўленне іншых хібаў
\n
\n</string>
</resources>

View file

@ -2311,7 +2311,7 @@
<string name="poi_social_facility_for_drug_addicted">Drogově závislí</string>
<string name="poi_social_facility_for_unemployed">Nezaměstnaní</string>
<string name="poi_social_facility_for_diseased">Nemocní</string>
<string name="poi_social_facility_for_child_juvenile">Děti a Mladiství</string>
<string name="poi_social_facility_for_child_juvenile">Děti a mladiství</string>
<string name="poi_theatre_genre_philharmonic">Filharmonie</string>
<string name="poi_theatre_genre_musical">Hudební</string>

View file

@ -640,7 +640,7 @@
<string name="osb_comment_dialog_success">Komentář přidán</string>
<string name="osb_comment_dialog_error">Chyba: Komentář nepřidán</string>
<string name="osb_comment_dialog_error">Nepodařilo se přidat komentář</string>
@ -1120,7 +1120,7 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
<string name="routing_attr_avoid_toll_name">Vyhnout se placeným silnicím</string>
<string name="routing_attr_avoid_toll_description">Vyhnout se placeným silnicím.</string>
<string name="routing_attr_avoid_unpaved_name">Vyhnout se nezpevněným cestám</string>
<string name="routing_attr_avoid_unpaved_description">Povede trasu mimo nezpevněné a polní cesty.</string>
<string name="routing_attr_avoid_unpaved_description">Povede trasu mimo nezpevněné cesty.</string>
<string name="routing_attr_avoid_ferries_name">Vyhnout se trajektům</string>
<string name="routing_attr_avoid_ferries_description">Vyhnout se trajektům.</string>
<string name="routing_attr_avoid_motorway_name">Vyhnout se dálnicím</string>
@ -1335,7 +1335,7 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
<string name="no_index_file_to_download">Není nic ke stažení, prosím zkontrolujte své připojení k Internetu.</string>
<string name="no_index_file_to_download">Nic ke stažení nebylo nalezeno, prosím zkontrolujte své připojení k Internetu.</string>
<string name="none_selected_gpx">Nebyl vybrán žádný GPX soubor. Podržením vyberte jednu z dostupných tras.</string>
<string name="rendering_attr_hideBuildings_name">Budovy</string>
<string name="rendering_attr_hideText_name">Text</string>
@ -1353,7 +1353,7 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
<string name="enable_sleep_mode">Zapnout GPS v režimu na pozadí</string>
<string name="gps_wake_up_timer">Interval probouzení GPS</string>
<string name="sleep_mode_stop_dialog">Zastavit GPS běžící na pozadí?</string>
<string name="map_preferred_locale_descr">Preferovaný jazyk pro nápisy na mapě (pokud není dostupný, budou použité anglické nebo lokální názvy).</string>
<string name="map_preferred_locale_descr">Preferovaný jazyk pro nápisy na mapě (pokud není dostupný, budou použity anglické nebo lokální názvy).</string>
<string name="map_preferred_locale">Preferovaný jazyk mapy</string>
<string name="local_map_names">Lokální názvy</string>
<string name="live_monitoring_m_descr">Pokud je zapnutý záznam GPX trasy, odesílat data trasování určené webové službě.</string>
@ -1683,7 +1683,7 @@ Délka %2$s</string>
<string name="rendering_value_lightblue_name">Světlemodrá</string>
<string name="rendering_value_blue_name">Modrá</string>
<string name="rendering_value_purple_name">Fialová</string>
<string name="restart_is_required">Restartovat ručně aplikaci pro aplikování všech změn.</string>
<string name="restart_is_required">Restartujte aplikaci pro aplikování všech změn.</string>
<string name="light_theme">Světlý</string>
<string name="dark_theme">Tmavý</string>
<string name="rendering_value_defaultTranslucentCyan_name">Výchozí (průsvitná modrozelená)</string>
@ -1813,7 +1813,7 @@ Délka %2$s</string>
<string name="regions">Oblasti</string>
<string name="region_maps">Mapy oblastí</string>
<string name="world_maps">Světové mapy</string>
<string name="favorite_category_dublicate_message">Prosím použijte název kategorie který ještě neexistuje.</string>
<string name="favorite_category_dublicate_message">Použijte prosím název kategorie, který ještě neexistuje.</string>
<string name="favorite_category_name">Název kategorie</string>
<string name="favorite_category_add_new_title">Přidat novou kategorii</string>
<string name="activate_seamarks_plugin">Prosím aktivujte modul \'Plavební mapový pohled\'</string>
@ -2012,7 +2012,7 @@ Délka %2$s</string>
<string name="osm_editors_ranking">Pořadí OSM editorů</string>
<string name="osm_live_subscription">Předplatné OsmAnd Live</string>
<string name="osm_live_subscribe_btn">Předplatit</string>
<string name="osm_live_email_desc">Nutné, aby jsme Vás mohli informovat o příspěvcích.</string>
<string name="osm_live_email_desc">Nutné, abychom vás mohli informovat o příspěvcích.</string>
<string name="osm_live_user_public_name">Veřejné jméno</string>
<string name="osm_live_hide_user_name">Nezobrazovat mé jméno v hlášeních</string>
<string name="osm_live_support_region">Oblast podpory</string>
@ -2022,7 +2022,7 @@ Délka %2$s</string>
<string name="osm_live_not_active">Neaktivní</string>
<string name="osm_live_enter_email">Prosím zadejte platnou e-mailovou adresu</string>
<string name="osm_live_enter_user_name">Prosím zadejte veřejné jméno</string>
<string name="osm_live_thanks">Děkujeme Vám za podporu projektu OsmAnd!
<string name="osm_live_thanks">Děkujeme vám za podporu projektu OsmAnd!
\nPro aktivování všech nových funkcí je třeba restartovat aplikaci OsmAnd.</string>
<string name="osm_live_region_desc">Část vašeho příspěvku bude zaslána uživatelům OSM, kteří upravují mapu ve zvolené oblasti.</string>
<string name="osm_live_subscription_settings">Nastavení předplatného</string>
@ -2517,7 +2517,7 @@ Zobrazená oblast: %1$s x %2$s</string>
<string name="empty_state_favourites_desc">Importujte Oblíbené nebo je přidejte označením bodů na mapě.</string>
<string name="import_track">Import souboru GPX</string>
<string name="import_track_desc">Soubor %$1s neobsahuje body GPX trasy, chcete jej přesto importovat jako trasu?</string>
<string name="move_point">Přesunout Bod</string>
<string name="move_point">Přesunout bod</string>
<string name="add_segment_to_the_track">Přidat do GPX souboru</string>
<string name="move_all_to_history">Přesunout vše do historie</string>
@ -2551,11 +2551,11 @@ Zobrazená oblast: %1$s x %2$s</string>
<string name="shared_string_sort">Seřadit</string>
<string name="coordinate_input">Zadání souřadnic</string>
<string name="is_saved">je uložen</string>
<string name="marker_save_as_track_descr">Vyexportuje Vaše značky do tohoto GPX souboru:</string>
<string name="marker_save_as_track_descr">Vyexportovat vaše značky do tohoto GPX souboru:</string>
<string name="marker_save_as_track">Uložit jako soubor GPX</string>
<string name="move_to_history">Přesunout do historie</string>
<string name="group_will_be_removed_after_restart">Skupina bude odstraněna po příštím restartu aplikace.</string>
<string name="show_guide_line">Zobrazit vodící čáry</string>
<string name="show_guide_line">Zobrazit vodicí čáry</string>
<string name="show_arrows_on_the_map">Zobrazit šipky na mapě</string>
<string name="remove_from_map_markers">Odebrat z mapových značek</string>
<string name="descendingly">sestupně</string>
@ -2568,14 +2568,14 @@ Zobrazená oblast: %1$s x %2$s</string>
<string name="fast_coordinates_input_descr">Zvolte formát souřadnicového vstupu. Můžete ho kdykoli změnit klepnutím na \'Možnosti\'.</string>
<string name="fast_coordinates_input">Rychlé zadávání souřadnic</string>
<string name="routing_attr_avoid_ice_roads_fords_name">Vyhnout brodům a ledovým cestám</string>
<string name="routing_attr_avoid_ice_roads_fords_description">Povede trasu mimo brody přes vodu a mimo ledové cesty.</string>
<string name="routing_attr_avoid_ice_roads_fords_description">Povede trasu mimo brody a ledové cesty.</string>
<string name="show_passed">Zobrazit prošlé</string>
<string name="hide_passed">Skrýt prošlé</string>
<string name="marker_show_distance_descr">Vyberte, jak ukazovat vzdálenost a směr k mapovým značkám na obrazovce mapy:</string>
<string name="osn_modify_dialog_error">Nepodařilo se změnit poznámku</string>
<string name="osn_modify_dialog_title">Upravit poznámku</string>
<string name="context_menu_item_modify_note">Upravit poznámku OSM</string>
<string name="make_round_trip_descr">Přidat počátečního bod také jako cíl pro vytvoření okruhu.</string>
<string name="make_round_trip_descr">Přidat počáteční bod také jako cíl pro vytvoření okruhu.</string>
<string name="make_round_trip">Vytvořit okružní trasu</string>
<string name="import_gpx_file_description">Může být importováno jako Oblíbené nebo jako GPX soubor.</string>
@ -2611,7 +2611,7 @@ Zobrazená oblast: %1$s x %2$s</string>
<string name="empty_state_markers_history_desc">Značky označené jako prošlé se objeví na této obrazovce.</string>
<string name="shared_string_two">Dvě</string>
<string name="shared_string_one">Jedna</string>
<string name="show_guide_line_descr">Zobrazit vodící čáry od vaší polohy k aktivním značkám.</string>
<string name="show_guide_line_descr">Zobrazit vodicí čáry od vaší polohy k aktivním značkám.</string>
<string name="show_arrows_descr">Zobrazit jednu nebo dvě šipky označující směr k aktivním značkám.</string>
<string name="distance_indication_descr">Zvolte způsob zobrazení vzdálenosti k aktivním značkám.</string>
<string name="active_markers_descr">Zvolte, kolik ukazatelů směru se má zobrazit.</string>
@ -2654,7 +2654,7 @@ Zobrazená oblast: %1$s x %2$s</string>
<string name="open_from">Otevřeno od</string>
<string name="open_till">Otevřeno do</string>
<string name="will_close_at">Zavírá v</string>
<string name="will_open_at">Otevírá od</string>
<string name="will_open_at">Otevírá v</string>
<string name="will_open_on">Otevírá v</string>
<string name="additional_actions">Další akce</string>
<string name="av_locations_selected_desc">GPX soubor se souřadnicemi a daty vybraných poznámek.</string>
@ -2663,7 +2663,7 @@ Zobrazená oblast: %1$s x %2$s</string>
<string name="winter_and_ski_renderer">Zimní</string>
<string name="touring_view_renderer">Cestovní</string>
<string name="nautical_renderer">Plavební</string>
<string name="will_open_tomorrow_at">Otevírá zítra od</string>
<string name="will_open_tomorrow_at">Otevírá zítra v</string>
<string name="shared_string_marker">Značka</string>
<string name="osm_recipient_stat">Počet úprav %1$s, součet %2$s mBTC</string>
@ -2715,30 +2715,103 @@ Zobrazená oblast: %1$s x %2$s</string>
<string name="distance_nearest">Vzdálenost: nejbližší jako první</string>
<string name="rendering_attr_whiteWaterSports_name">Divoká voda</string>
<string name="osmand_extended_description_part2">GPS navigace
\n• Můžete si vybrat mezi offline režimem (bez roamingových poplatků v zahraničí) a online režimem (rychlejší)
\n• Vyberte si mezi offline režimem (bez roamingových poplatků v zahraničí) a online režimem (rychlejší)
\n• Hlasová navigace vás povede krok za krokem vaší cestou (nahraný nebo syntetizovaný hlas)
\n• Při každém odchýlení se trasa přepočítá
\n• Pomůže vám navádění do jízdních pruhů, zobrazení názvů ulic a předpokládaný čas příjezdu
\n• Pro větší bezpečí se aplikace automaticky přepíná mezi denním a nočním režimem
\n• Můžete si zapnout zobrazování rychlostních limitů a upozornění při jejich překročení
\n• Přiblížení mapy se přizpůsobí rychlosti pohybu
\n• Můžete hledat cíle podle adresy, typu (např. parkoviště, restaurace, hotel, čerpací stanice, muzeum) či podle geografických souřadnic
\n• Hledejte cíle podle adresy, typu (např. parkoviště, restaurace, hotel, čerpací stanice, muzeum) či podle geografických souřadnic
\n• Do svého itineráře můžete přidávat mezicíle
\n• Můžete si zaznamenat nebo nahrát GPX trasu a následovat ji
\n• Zaznamenávejte nebo nahrajte svoji GPX trasu a následujte ji
\n</string>
<string name="osmand_extended_description_part3">Mapa • Zobrazuje POI (body zájmu) ve vašem okolí • Mapa se otáčí podle směru vašeho pohybu (nebo podle kompasu) • Ukazuje, kde jste a kterým směrem se díváte • Svoji polohu můžete sdílet se svými přáteli • Důležitá místa si můžete uložit do složky \'Moje místa\' • Můžete si vybrat, jak se na mapě budou zobrazovat názvy: V angličtině, v místním jazyce nebo ve fonetickém přepisu • Zobrazuje specializované online dlaždice, satelitní mapy (z Bingu), různé překryvné informace jako navigační GPX trasy a další vrstvy s volitelnou průhledností</string>
<string name="osmand_extended_description_part4">OsmAnd plugin Lyžařský mapový pohled zobrazuje lyžařské trasy podle stupně obtížnosti a také další informace jako polohy vleků a dalších zařízení.</string>
<string name="osmand_extended_description_part5">Cyklistika • Na mapě najdete cyklostezky • GPS navigace v režimu Cyklista vytvoří trasu podél cyklostezek • Vidíte svoji rychlost a nadmořskou výšku • Pomocí funkce GPX záznam si svůj výlet uložíte a můžete sdílet • Pomocí dalších pluginů si můžete na mapě zobrazit vrstevnice a stínování kopců</string>
<string name="osmand_extended_description_part6">Pěší výlety, procházky městem • Mapa zobrazuje pěší a turistické trasy • Wikipedie ve vašem zvoleném jazyce vám poskytne mnoho informací při procházce městem • Při pohybu v neznámém městě vám pomůže zobrazování názvů zastávek a tras veřejné dopravy (autobusy, tramvaje, vlaky) • GPS navigace v režimu Pěší vytvoří trasu cest vhodných pro chodce • Můžete otevřít GPX trasu a následovat ji nebo zaznamenat a sdílet svou vlastní</string>
<string name="osmand_extended_description_part7">Přispějte do OSM • Hlaste chyby v datech • Nahrávejte GPX trasy do OSM přímo z aplikace • Přidávejte body zájmu a rovnou je nahrávejte do OSM (nebo později, pokud jste zrovna offline)</string>
<string name="osmand_extended_description_part8">OsmAnd je aktivně vyvíjený open-source software. Do aplikace může každý přispět hlášením chyb, vylepšováním překladů nebo programováním nových funkcí. Projekt je živý a neustále se vyvíjí díky této spolupráci mezi vývojáři a uživateli. Vývoj je také závislý na finančních příspěvcích pro programování a testování nových funkcí. Přibližné pokrytí a kvalita map: • Západní Evropa: **** • Východní Evropa: *** • Rusko: *** • Severní Amerika: *** • Jižní Amerika: ** • Asie: ** • Japonsko &amp; Korea: *** • Střední Východ: ** • Afrika: ** • Antarktida: * Mapy většiny států na zeměkouli jsou dostupné ke stažení! Získejte spolehlivého navigátora ve své zemi - ať je to Francie, Německo, Mexiko, Spojené království, Španělsko, Nizozemí, USA, Rusko, Brazílie či jakákoliv jiná.</string>
<string name="osmand_plus_extended_description_part1">OsmAnd+ (OSM Automated Navigation Directions) je mapová a navigační aplikace s přístupem ke kvalitním, bezplatným a celosvětovým datům OpenStreetMap (OSM). Můžete využít hlasovou a optickou navigaci, prohlížet si POI (body zájmu), vytvářet a spravovat GPX trasy, zobrazit vrstevnice a údaje o nadmořské výšce, vybírat mezi režimem Auto, Cyklista a Pěší, editovat OSM a mnoho dalšího. OsmAnd+ je placenou verzí aplikace. Jejím zakoupením podpoříte projekt, přispějete na vývoj nových funkcí a získáte nejnovější aktualizace. Mezi hlavní funkce patří:</string>
<string name="osmand_plus_extended_description_part2">Navigace • Pracuje rychle (online) nebo i offline (bez roamingových poplatků v zahraničí) • Hlasová navigace krok za krokem (nahraný nebo syntetizovaný hlas) • Volitelné navádění do jízdních pruhů, zobrazení názvů ulic a předpokládaného čas příjezdu • Podporuje mezicíle v itineráři • Automatické přepočítání trasy při odchýlení • Hledání míst podle adresy, typu (např. restaurace, hotel, čerpací stanice, muzeum) či podle geografických souřadnic</string>
<string name="osmand_plus_extended_description_part3">"Prohlížení mapy • Ukazuje vaši pozici a orientaci • Volitelné otáčení podle směru vašeho pohybu (nebo podle kompasu) • Ukládání důležitých míst do složky Moje místa • Zobrazuje POI (body zájmu) ve vašem okolí • Zobrazuje specializované online dlaždice, satelitní mapy (z Bingu), různé překryvné informace jako navigační GPX trasy a další vrstvy s volitelnou průhledností • Názvy míst lze zobrazit v angličtině, v místním jazyce nebo ve fonetickém přepisu"</string>
<string name="osmand_plus_extended_description_part4">Využívá data OSM a Wikipedie • Kvalitní informace z nejlepších komunitních projektů na světě • OSM data dostupná podle země nebo regionu • Body zájmu z Wikipedie, skvělé pro vyhlídkové trasy • Bezplatné a neomezené stahování přímo z aplikace • Kompaktní vektorové offline mapy aktualizované nejméně jednou za měsíc • Výběr mezi kompletními daty regionu a pouze silniční mapou (například celá mapa Japonska zabírá 700 MB, silniční pouze 200 MB)</string>
<string name="osmand_plus_extended_description_part5">Bezpečnostní funkce • Volitelné automatické přepínání denního a nočního režimu • Volitelné zobrazení rychlostních limitů s upozorněním při překročení • Volitelné přiblížení mapy v závislosti na rychlosti • Sdílení polohy s přáteli</string>
<string name="osmand_plus_extended_description_part6">Funkce pro cyklisty a pěší • Zobrazení pěších, turistických a cyklistických tras, skvělé pro venkovní aktivity • Speciální navigační režim a zobrazení pro cyklisty a chodce • Volitelné zobrazení zastávek veřejné dopravy (autobusy, tramvaje, vlaky) včetně názvů linek • Volitelný záznam výletu do lokálního souboru GPS nebo do online služby • Zobrazení rychlosti a nadmořské výšky • Zobrazení vrstevnic a stínování kopců (pomocí pluginů)</string>
<string name="osmand_plus_extended_description_part7">Přispívejte přímo do OSM • Hlaste chyby v datech • Nahrávejte GPX trasy do OSM přímo z aplikace • Přidávejte body zájmu a rovnou je nahrávejte do OSM (nebo později, pokud jste zrovna offline) • Záznam trasy funguje také na pozadí (když je zařízení v režimu spánku) • OsmAnd je aktivně vyvíjený open-source software. Do aplikace může každý přispět hlášením chyb, vylepšováním překladů nebo programováním nových funkcí. Projekt je živý a neustále se vyvíjí díky této spolupráci mezi vývojáři a uživateli. Vývoj je také závislý na finančních příspěvcích pro programování a testování nových funkcí.</string>
<string name="osmand_extended_description_part3">Mapa
\n• Zobrazuje POI (body zájmu) ve vašem okolí
\n• Mapa se otáčí podle směru vašeho pohybu (nebo podle kompasu)
\n• Ukazuje vaši polohu a směr, kterým se díváte
\n• Svoji polohu můžete sdílet se svými přáteli
\n• Důležitá místa si můžete uložit do složky \'Moje místa\'
\n• Můžete si vybrat, jak se na mapě budou zobrazovat názvy: V angličtině, v místním jazyce nebo ve fonetickém přepisu
\n• Zobrazuje specializované online dlaždice, satelitní mapy (z Bingu), různé překryvné informace jako navigační GPX trasy a další vrstvy s volitelnou průhledností</string>
<string name="osmand_extended_description_part4">Lyžování
\nOsmAnd plugin Lyžařský mapový pohled zobrazuje lyžařské trasy podle stupně obtížnosti a také další informace jako polohy vleků a dalších zařízení.</string>
<string name="osmand_extended_description_part5">Cyklistika
\n• Na mapě najdete cyklostezky
\n• GPS navigace v režimu Cyklista vytvoří trasu podél cyklostezek
\n• Vidíte svoji rychlost a nadmořskou výšku
\n• Pomocí funkce GPX záznam si svůj výlet uložíte a můžete sdílet
\n• Pomocí dalších pluginů si můžete na mapě zobrazit vrstevnice a stínování kopců</string>
<string name="osmand_extended_description_part6">Pěší výlety, procházky městem
\n• Mapa zobrazuje pěší a turistické trasy
\n• Wikipedie ve vašem zvoleném jazyce vám poskytne mnoho informací při procházce městem
\n• Při pohybu v neznámém městě vám pomůže zobrazování názvů zastávek a tras veřejné dopravy (autobusy, tramvaje, vlaky)
\n• GPS navigace v režimu Pěší vytvoří trasu cest vhodných pro chodce
\n• Můžete otevřít GPX trasu a následovat ji nebo zaznamenat a sdílet svou vlastní</string>
<string name="osmand_extended_description_part7">Přispějte do OSM
\n• Hlaste chyby v datech
\n•Nahrávejte GPX trasy do OSM přímo z aplikace
\n• Přidávejte body zájmu a rovnou je nahrávejte do OSM (nebo později, pokud jste zrovna offline)</string>
<string name="osmand_extended_description_part8">OsmAnd je aktivně vyvíjený open-source software. Do aplikace může každý přispět hlášením chyb, vylepšováním překladů nebo programováním nových funkcí. Projekt je také závislý na finančních příspěvcích pro programování a testování nových funkcí.
\nPřibližné pokrytí a kvalita map:
\n• Západní Evropa: ****
\n• Východní Evropa: ***
\n• Rusko: ***
\n• Severní Amerika: ***
\n• Jižní Amerika: **
\n• Asie: **
\n• Japonsko &amp; Korea: ***
\n• Střední Východ: **
\n• Afrika: **
\n• Antarktida: *
\nMapy většiny států na zeměkouli jsou dostupné ke stažení!
\nZískejte spolehlivého navigátora ve své zemi - ať je to Francie, Německo, Mexiko, Spojené království, Španělsko, Nizozemí, USA, Rusko, Brazílie či jakákoliv jiná.</string>
<string name="osmand_plus_extended_description_part1">OsmAnd+ (OSM Automated Navigation Directions) je mapová a navigační aplikace s přístupem ke kvalitním, bezplatným a celosvětovým datům OpenStreetMap (OSM).
\nMůžete využít hlasovou a optickou navigaci, prohlížet si POI (body zájmu), vytvářet a spravovat GPX trasy, zobrazit vrstevnice a údaje o nadmořské výšce, vybírat mezi režimem Auto, Cyklista a Pěší, editovat OSM a mnoho dalšího.
\n
\nOsmAnd+ je placenou verzí aplikace. Jejím zakoupením podpoříte projekt, přispějete na vývoj nových funkcí a získáte nejnovější aktualizace.
\n
\nMezi hlavní funkce patří:</string>
<string name="osmand_plus_extended_description_part2">Navigace
\n• Pracuje online (rychle) nebo i offline (bez roamingových poplatků v zahraničí)
\n• Hlasová navigace krok za krokem (nahraný nebo syntetizovaný hlas)
\n• Volitelné navádění do jízdních pruhů, zobrazení názvů ulic a předpokládaného čas příjezdu
\n• Podporuje mezicíle v itineráři
\n• Automatické přepočítání trasy při odchýlení
\n• Hledání míst podle adresy, typu (např. restaurace, hotel, čerpací stanice, muzeum) či podle geografických souřadnic</string>
<string name="osmand_plus_extended_description_part3">"Prohlížení mapy
\n• Ukazuje vaši pozici a orientaci
\n• Volitelné otáčení podle směru vašeho pohybu (nebo podle kompasu)
\n• Ukládání důležitých míst do složky Moje místa
\n• Zobrazuje POI (body zájmu) ve vašem okolí
\n• Zobrazuje specializované online dlaždice, satelitní mapy (z Bingu), různé překryvné informace jako navigační GPX trasy a další vrstvy s volitelnou průhledností
\n• Názvy míst lze zobrazit v angličtině, v místním jazyce nebo ve fonetickém přepisu"</string>
<string name="osmand_plus_extended_description_part4">Využívá data OSM a Wikipedie
\n• Kvalitní informace z nejlepších komunitních projektů na světě
\n• OSM data dostupná podle země nebo regionu
\n• Body zájmu z Wikipedie, skvělé pro vyhlídkové trasy
\n• Bezplatné a neomezené stahování přímo z aplikace
\n• Kompaktní vektorové offline mapy aktualizované nejméně jednou za měsíc
\n
\n• Výběr mezi kompletními daty regionu a pouze silniční mapou (například celá mapa Japonska zabírá 700 MB, silniční pouze 200 MB)</string>
<string name="osmand_plus_extended_description_part5">Bezpečnostní funkce
\n• Volitelné automatické přepínání denního a nočního režimu
\n• Volitelné zobrazení rychlostních limitů s upozorněním při překročení
\n• Volitelné přiblížení mapy v závislosti na rychlosti
\n• Sdílení polohy s přáteli</string>
<string name="osmand_plus_extended_description_part6">Funkce pro cyklisty a pěší
\n• Zobrazení pěších, turistických a cyklistických tras, skvělé pro venkovní aktivity
\n• Speciální navigační režim a zobrazení pro cyklisty a chodce
\n• Volitelné zobrazení zastávek veřejné dopravy (autobusy, tramvaje, vlaky) včetně názvů linek
\n• Volitelný záznam výletu do lokálního souboru GPS nebo do online služby
\n• Zobrazení rychlosti a nadmořské výšky
\n• Zobrazení vrstevnic a stínování kopců (pomocí pluginů)</string>
<string name="osmand_plus_extended_description_part7">Přispívejte přímo do OSM
\n• Hlaste chyby v datech
\n• Nahrávejte GPX trasy do OSM přímo z aplikace
\n• Přidávejte body zájmu a rovnou je nahrávejte do OSM (nebo později, pokud jste zrovna offline)
\n• Záznam trasy funguje také na pozadí (když je zařízení v režimu spánku)
\nOsmAnd je aktivně vyvíjený open-source software. Do aplikace může každý přispět hlášením chyb, vylepšováním překladů nebo programováním nových funkcí. Projekt je také závislý na finančních příspěvcích pro programování a testování nových funkcí.</string>
<string name="osmand_plus_extended_description_part8">Přibližné pokrytí a kvalita map: • Západní Evropa: **** • Východní Evropa: *** • Rusko: *** • Severní Amerika: *** • Jižní Amerika: ** • Asie: ** • Japonsko &amp; Korea: *** • Střední Východ: ** • Afrika: ** • Antarktida: * Mapy většiny států na zeměkouli jsou dostupné ke stažení! Od Afghánistánu po Zimbabwe, od Austrálie po USA, Argentinu, Brazílii, Kanadu, Francii, Německo, Mexiko, Spojené království, Španělsko, …</string>
<string name="group_deleted">Skupina smazána</string>
<string name="clear_all_intermediates">Smazat všechny mezicíle</string>
@ -2832,7 +2905,7 @@ Zobrazená oblast: %1$s x %2$s</string>
\n
\n • Mapové značky: opravena možnost zapnutí/vypnutí skupin, nově možnost skrýt značky na mapě
\n
\n • Úpravy OSM: nově možnost upravovat tagy všech objektů zájmu v mapě, (nejen bodových jako dosud), opraveny chybějící komentáře v poznámkách, přidána možnost zálohy úprav
\n • Úpravy OSM: nově možnost upravovat tagy všech objektů zájmu v mapě (nejen bodových jako dosud), opraveny chybějící komentáře v poznámkách, přidána možnost zálohy úprav
\n
\n • Vylepšené vykreslování článků Wikipedie a Wikivoyage, upravené soubory jsou již k dispozici ke stažení
\n
@ -2844,7 +2917,7 @@ Zobrazená oblast: %1$s x %2$s</string>
\n</string>
<string name="commiting_way">Odesílání cesty…</string>
<string name="increase_search_radius_to">Zvětšit okruh hledání na %1$s</string>
<string name="send_search_query_description">Bude odeslán Váš dotaz pro vyhledávání: <b>\"%1$s\"</b>, spolu s Vaší polohou. <br/><br/> Odeslaná data jsou plně anonymní a nedocházi k žádnému shromažďování Vašich osobních údajů. Zaslaná data slouží pouze k vylepšení vyhledávacího algoritmu.<br/></string>
<string name="send_search_query_description">Bude odeslán váš dotaz pro vyhledávání: <b>\"%1$s\"</b> a také vaše poloha. <br/><br/> Nedochází k žádnému shromažďování osobních údajů. Zaslaná data slouží pouze k vylepšení vyhledávacího algoritmu.<br/></string>
<string name="send_search_query">Odeslat data?</string>
<string name="shared_string_world">Celý svět</string>
<string name="point_deleted">Bod %1$s byl smazán</string>
@ -2856,20 +2929,20 @@ Zobrazená oblast: %1$s x %2$s</string>
<string name="shared_string_bookmark">Záložka</string>
<string name="off_road_render_descr">Vhodný pro off-road terénní jízdu. Vhodný pro použití se zelenými satelitními snímky použitými jako podkladová vrstva. Zmenšená tloušťka hlavních cest a naopak zvětšená tloušťka polních cest, pěšin, cyklotras a dalších cest. Založeno na \"Topo\" stylu.</string>
<string name="open_wikipedia_link_online">Otevřít odkaz Wikipedia na internetu</string>
<string name="open_wikipedia_link_online_description">Odkaz bude otevřen v intenetovém prohlížeči.</string>
<string name="read_wikipedia_offline_description">Stahování Wikipedia a Wikivoyage článkú do zařízení pro pozdější použití bez přístupu k internetu je dostupné pouze předplatitelům OsmAnd Live.</string>
<string name="open_wikipedia_link_online_description">Odkaz bude otevřen v internetovém prohlížeči.</string>
<string name="read_wikipedia_offline_description">Stahování Wikipedia a Wikivoyage článků pro čtení offline je dostupné pouze předplatitelům OsmAnd Live.</string>
<string name="how_to_open_link">Jak otevřít odkaz?</string>
<string name="read_wikipedia_offline">Číst Wikipedia bez internetu</string>
<string name="read_wikipedia_offline">Číst Wikipedii offline</string>
<string name="download_all">Stáhnout vše</string>
<string name="purchase_cancelled_dialog_title">Zrušili jste Vaše předplatné OsmAnd Live</string>
<string name="purchase_cancelled_dialog_title">Zrušili jste své předplatné OsmAnd Live</string>
<string name="paid_app">Placená aplikace</string>
<string name="paid_plugin">Placený modul</string>
<string name="travel_card_update_descr">Jsou dostupná nová data Wikivoyage, aktualizujte je na nejnovější verzi.</string>
<string name="wikivoyage_travel_guide">Turistický Průvodce Wikivoyage</string>
<string name="wikivoyage_travel_guide">Turistický průvodce Wikivoyage</string>
<string name="wikivoyage_travel_guide_descr">Průvodce Wikivoyage Vám ukáže nejzajímavější místa planety, přímo v aplikaci OsmAnd a bez nutnosti připojení k internetu.</string>
<string name="shared_string_gpx_files">Soubory GPX</string>
<string name="access_intermediate_arrival_time">Čas příjezdu do mezicíle</string>
<string name="map_widget_intermediate_time">Do Průjezdního bodu</string>
<string name="map_widget_intermediate_time">Do průjezdního bodu</string>
<string name="test_voice_desrc">Klepněte na tlačítko pro vyslechnutí odpovídajícího hlasového pokynu, aby jste zjistili chybné nebo chybějící pokyny.</string>
<string name="nautical_render_descr">Plavební navigační styl. Klíčové vlastnosti: Bóje, majáky, plavební cesty, mořské cesty a značky, přístavy, námořní služby, plavební hloubka.</string>
<string name="ski_map_render_descr">Zimní režim. Klíčové vlastnosti: Vykresluje sjezdovky, lyžařské vleky a další praktické objekty pro lyžaře a snowboardisty. Nedůležité objekty jsou na mapě méně výrazné.</string>
@ -2877,4 +2950,10 @@ Zobrazená oblast: %1$s x %2$s</string>
<string name="light_rs_render_descr">Jednoduchý a kontrastní styl pro automobilovou navigaci. Příjemný na oči v nočním režimu. Klíčové vlastnosti: Vrstevnice, kontrastní oranžové silnice, druhořadé objekty jsou méně výrazné.</string>
<string name="topo_render_descr">Kontrastní styl určený primárně pro pěší turistiku a cyklistiku v přírodě. Dobrá čitelnost při složitém venkovním osvětlením. Klíčové vlastnosti: kontrastní silnice a přírodních objekty, různé typy tras, vrstevnice s rozšířeným nastavením, více detailů při odpovídající úrovni zvětšení než ve výchozím stylu. Umožňuje rozlišit kvalitu povrchu vozovky. Nemá noční režim.</string>
<string name="mapnik_render_descr">Starý styl vykreslení jako výchozí \"Mapnik\". Klíčové vlastnosti: barvy jsou podobné \"Mapnik\" stylu.</string>
<string name="touring_view_render_descr">Vysoce detailní styl pro účely cestování. Obsahuje všechna nastavení z výchozího stylu a navíc zobrazuje maximum detailů, především všechny silnice, cesty a jiné způsoby cestování. Jasně rozlišuje různé typy cest, podobně jako mnohé cestovní atlasy. Vysoce kontrastní schéma pro venkovní použití, denní a noční režim.</string>
<string name="default_render_descr">Obecný styl. Zjednodušené vykreslování v hustě osídlených městech. Klíčové vlastnosti: vrstevnice, trasy, kvalita povrchu cest, omezení přístupu, čísla cest, značení dle SAC, objekty pro vodní sporty.</string>
<string name="travel_card_download_descr">Stáhněte si cestovní průvodce Wikivoyage a prohlížejte články o místech po celém světě bez připojení na internet.</string>
<string name="start_editing_card_image_text">Bezplatný cestovní průvodce, který může upravovat každý.</string>
<string name="welcome_to_open_beta_description">Cestovní průvodci jsou nyní založené na Wikivoyage. Všechny jejich funkce můžete otestovat zdarma během beta testování. Poté budou zpřístupněny předplatitelům služby OsmAnd Live a uživatelům OsmAnd+.</string>
<string name="start_editing_card_description">Můžete (a měli byste) upravovat libovolný článek na Wikivoyage. Sdílejte znalosti, zkušenosti, talent a svoji pozornost</string>
</resources>

View file

@ -1164,7 +1164,7 @@
<string name="poi_cypress">Zypresse</string>
<string name="poi_bench_yes">ja</string>
<string name="poi_bench_no">Ohne Sitzbank</string>
<string name="poi_bench_no">ohne Sitzbank</string>
<string name="poi_bin_yes">Mit Abfalleimer</string>
<string name="poi_bin_no">Ohne Abfalleimer</string>
@ -1400,7 +1400,7 @@
<string name="poi_fireplace_no">Keine Feuerstelle</string>
<string name="poi_covered_yes">ja</string>
<string name="poi_covered_no">offen</string>
<string name="poi_covered_no">nicht überdacht</string>
<string name="poi_smoking_no">Nicht erlaubt</string>
<string name="poi_smoking_outside">nur Außerhalb</string>

View file

@ -78,7 +78,7 @@ Lon %2$s</string>
<string name="shared_string_help">Ayuda</string>
<string name="shared_string_settings">Ajustes</string>
<string name="shared_string_history">Historial</string>
<string name="shared_string_select_on_map">Elegir en el mapa</string>
<string name="shared_string_select_on_map">Marcar en el mapa</string>
<string name="shared_string_select_all">Marcar todo</string>
<string name="shared_string_deselect">Desmarcar</string>
<string name="shared_string_deselect_all">Desmarcar todo</string>
@ -219,11 +219,11 @@ Lon %2$s</string>
<string name="traffic_warning">Aviso de tráfico</string>
<string name="speak_favorites">Favoritos cercanos</string>
<string name="speak_poi">PDI cercanos</string>
<string name="way_alarms">Avisos de tráfico</string>
<string name="way_alarms">Advertencias de tráfico</string>
<string name="stop_navigation_service">Parar</string>
<string name="confirm_every_run">Preguntar siempre</string>
<string name="enable_sleep_mode">Activar modo reposo del GPS</string>
<string name="save_current_track_descr">Guardar ahora la traza actual como un archivo GPX.</string>
<string name="save_current_track_descr">Guarda la traza actual como archivo GPX ahora.</string>
<string name="save_current_track">Guardar la traza actual</string>
<string name="save_track_interval_globally">Intervalo de registro</string>
<string name="voice_provider">Indicaciones por voz</string>
@ -538,7 +538,7 @@ Lon %2$s</string>
<string name="map_preferred_locale">Idioma preferido del mapa</string>
<string name="forward">Siguiente</string>
<string name="home">Panel de control</string>
<string name="live_monitoring_m_descr">Envía los datos de rastreo a un servicio web específico, si la grabación GPX está activada.</string>
<string name="live_monitoring_m_descr">Envía los datos de seguimiento a un servicio web específico, si la grabación GPX está activada.</string>
<string name="live_monitoring_m">Rastreo en línea (requiere GPX)</string>
<string name="live_monitoring_start">Iniciar rastreo en línea</string>
<string name="live_monitoring_stop">Parar rastreo en línea</string>
@ -641,7 +641,7 @@ Lon %2$s</string>
<string name="edit_tilesource_url_to_load">URL</string>
<string name="edit_tilesource_choose_existing">Elegir existente…</string>
<string name="maps_define_edit">Definir/Editar…</string>
<string name="map_widget_fps_info">Info de depuración FPS</string>
<string name="map_widget_fps_info">Información de FPS</string>
<string name="driving_region_descr">Región de conducción: EEUU, Europa, Reino Unido, Asia u otras.</string>
<string name="driving_region">Región de conducción</string>
<string name="driving_region_japan">Japón</string>
@ -650,7 +650,7 @@ Lon %2$s</string>
<string name="driving_region_europe_asia">Europa, Asia, Latinoamérica y similares</string>
<string name="driving_region_uk">Reino Unido, India y similares</string>
<string name="speak_title">Anunciar…</string>
<string name="speak_descr">Configura el anuncio de nombres de calles, avisos de tráfico (paradas, lomadas), radares y límites de velocidad.</string>
<string name="speak_descr">Configura el anuncio de nombres de calles, advertencias de tráfico (paradas, lomadas), radares y límites de velocidad.</string>
<string name="speak_street_names">Nombres de calles (TTS)</string>
<string name="speak_speed_limit">Límite de velocidad</string>
<string name="speak_cameras">Radares de velocidad</string>
@ -841,7 +841,7 @@ Lon %2$s</string>
<string name="poi_filter_for_tourists">Para turistas</string>
<string name="poi_filter_fuel">Combustible</string>
<string name="show_warnings_title">Mostrar alertas…</string>
<string name="show_warnings_descr">Configura avisos de tráfico (límites de velocidad, paradas forzosas, lomadas, túneles), radares de velocidad, e información de carriles.</string>
<string name="show_warnings_descr">Configura advertencias de tráfico (límites de velocidad, paradas forzosas, lomadas, túneles), radares de velocidad, e información de carriles.</string>
<string name="use_compass_navigation_descr">Usa la brújula cuando no se detecta la dirección.</string>
<string name="use_compass_navigation">Usar brújula</string>
<string name="avoid_motorway">Evitar autopistas</string>
@ -910,7 +910,7 @@ Lon %2$s</string>
<string name="avoid_unpaved">Evitar caminos sin pavimentar</string>
<string name="avoid_ferries">Evitar ferris</string>
<string name="avoid_in_routing_title">Evitar…</string>
<string name="avoid_in_routing_descr">Evita caminos con peajes, sin pavimentar, transbordadores u otros.</string>
<string name="avoid_in_routing_descr">Evita caminos con peajes, sin pavimentar, transbordadores o ferris y otros.</string>
<string name="map_widget_fluorescent">Rutas fluorescentes</string>
<string name="map_widget_show_ruler">Escala</string>
<string name="map_widget_view_direction">Dirección de visualización</string>
@ -1077,7 +1077,7 @@ Lon %2$s</string>
<string name="direction_style_sidewise">Según el lado (8 sectores)</string>
<string name="direction_style_clockwise">Según el reloj (12 sectores)</string>
<string name="settings_direction_style">Estilo de dirección</string>
<string name="settings_direction_style_descr">Elige el estilo para expresar direcciones relativas en movimiento.</string>
<string name="settings_direction_style_descr">Elige el estilo para expresar direcciones relativas al moverse.</string>
<string name="auto_announce_on">Iniciar anuncios automáticos</string>
<string name="auto_announce_off">Parar anuncios automáticos</string>
<string name="i_am_here">Estoy aquí</string>
@ -1327,7 +1327,7 @@ Lon %2$s</string>
<string name="m">m</string>
<string name="old_map_index_is_not_supported">Formato de datos «{0}» del mapa, obsoleto e incompatible</string>
<string name="poi_filter_closest_poi">PDI más cercanos</string>
<string name="poi_filter_custom_filter">Filtro propio</string>
<string name="poi_filter_custom_filter">Filtro personal</string>
<string name="poi_filter_namefinder">NameFinder en línea</string>
<string name="reading_cached_tiles">Leyendo teselas guardadas…</string>
<string name="version_index_is_big_for_memory">La versión «{0}» de índices no cabe en memoria</string>
@ -1345,7 +1345,7 @@ Lon %2$s</string>
\nVersión: {0}
\nFecha: {1}
\nTamaño: {2} MB</string>
<string name="loading_builds_failed">Fallo al recuperar la lista de compilaciones de OsmAnd</string>
<string name="loading_builds_failed">Error al recuperar la lista de compilaciones de OsmAnd</string>
<string name="loading_builds">Cargando compilaciones de OsmAnd…</string>
<string name="select_build_to_install">Instalar una compilación de OsmAnd</string>
<string name="gps_status_app_not_found">La aplicación «GPS Status» no está instalada. ¿Buscar en la tienda de aplicaciones?</string>
@ -2045,7 +2045,7 @@ Lon %2$s</string>
<string name="osm_editors_ranking">Clasificación de editores OSM</string>
<string name="osm_live_subscription">Suscripción de OsmAnd Live</string>
<string name="osm_live_subscribe_btn">Suscribirse</string>
<string name="osm_live_email_desc">Necesario para proporcionarte información sobre las contribuciones.</string>
<string name="osm_live_email_desc">Necesario para proporcionar información sobre las contribuciones.</string>
<string name="osm_live_user_public_name">Nombre público</string>
<string name="osm_live_hide_user_name">Ocultar mi nombre en los informes</string>
<string name="osm_live_support_region">Región soportada</string>
@ -2173,7 +2173,7 @@ Lon %2$s</string>
<string name="no_inet_connection_desc_map">Necesario para descargar mapas.</string>
<string name="search_location">Buscando la ubicación…</string>
<string name="storage_free_space">Espacio libre</string>
<string name="storage_place_description">Almacenamiento de datos OsmAnd (para mapas, archivos GPX, etc.): %1$s.</string>
<string name="storage_place_description">Almacenamiento de datos de OsmAnd (para mapas, archivos GPX, etc.): %1$s.</string>
<string name="give_permission">Conceder permiso</string>
<string name="allow_access_location">Permitir el acceso a la ubicación</string>
<string name="first_usage_greeting">Obtén direcciones y descubre lugares nuevos sin una conexión a Internet</string>
@ -2355,7 +2355,7 @@ Lon %2$s</string>
<string name="routing_attr_height_obstacles_name">Usar datos de elevación</string>
<string name="routing_attr_height_obstacles_description">Factor de elevación del terreno (según datos de SRTM, ASTER y EU-DEM).</string>
<string name="routing_attr_height_obstacles_description">Incluye como factor, la elevación del terreno (según datos de SRTM, ASTER y EU-DEM).</string>
<string name="routing_attr_driving_style_name">Estilo de conducción</string>
@ -2760,7 +2760,7 @@ Lon %2$s</string>
<string name="shared_string_gpx_waypoints">Puntos de referencia de la traza</string>
<string name="favourites_group">Categoría de favoritos</string>
<string name="add_group">Añadir un grupo</string>
<string name="add_group_descr">Importar grupos de Favoritos o puntos de referencia GPX.</string>
<string name="add_group_descr">Importar grupos desde Favoritos o puntos de referencia GPX.</string>
<string name="empty_state_markers_active">¡Crea marcadores del mapa!</string>
<string name="empty_state_markers_active_desc">Pulsa en «Lugares» y luego pulsa la bandera del marcador.</string>
<string name="empty_state_markers_groups">Importar grupos</string>
@ -2789,11 +2789,11 @@ Lon %2$s</string>
<string name="by_date">Por fecha</string>
<string name="by_type">Por tipo</string>
<string name="modify_the_search_query">Modificar la consulta de búsqueda.</string>
<string name="release_3_0">• Nuevo: Soporte de guías turísticas globales sin conexión a Internet. Las ubicaciones de referencias, están enlazadas al mapa. Datos iniciales de Wikiviajes
<string name="release_3_0">• Nuevo: Soporte para guías turísticas globales sin conexión a Internet. Las ubicaciones de referencia, están vinculadas al mapa. Datos iniciales de Wikiviajes
\n
\n • Wikipedia: Nuevo aspecto, enlaces activos, ahora con soporte de imágenes
\n
\n • Interfaz de apertura de traza: Soporte para los grupos de puntos de ruta
\n • Interfaz de usuario de Open Tracks: Soporte para grupos de puntos de ruta
\n
\n • Marcadores del mapa: Importación de grupos elegidos desde archivos GPX, ingreso de coordenadas, nuevo aspecto
\n
@ -2824,7 +2824,7 @@ Lon %2$s</string>
<string name="will_open_tomorrow_at">Abre mañana a las</string>
<string name="rendering_attr_hidePOILabels_name">Etiquetas de PDI</string>
<string name="day_off_label">cerrado (día libre)</string>
<string name="day_off_label">cerrado</string>
<string name="winter_and_ski_renderer">Invierno y esquí</string>
<string name="touring_view_renderer">Vista turística</string>
<string name="nautical_renderer">Náutico</string>
@ -2894,7 +2894,7 @@ Lon %2$s</string>
<string name="shared_string_do"></string>
<string name="shared_string_only_with_wifi">Sólo con Wi-Fi</string>
<string name="wikivoyage_download_pics">Descargar imágenes</string>
<string name="wikivoyage_download_pics_descr">Las imágenes de los artículos pueden descargarse para su uso sin conexión.
<string name="wikivoyage_download_pics_descr">Las imágenes del artículo pueden descargarse para su uso sin conexión.
\nSiempre disponible en «Explorar» → «Opciones».</string>
<string name="shared_string_wifi_only">Sólo con Wi-Fi</string>
<string name="select_travel_book">Marcar un libro de viaje</string>

View file

@ -78,7 +78,7 @@ Lon %2$s</string>
<string name="shared_string_help">Ayuda</string>
<string name="shared_string_settings">Ajustes</string>
<string name="shared_string_history">Historial</string>
<string name="shared_string_select_on_map">Elegir en el mapa</string>
<string name="shared_string_select_on_map">Marcar en el mapa</string>
<string name="shared_string_select_all">Marcar todo</string>
<string name="shared_string_deselect">Desmarcar</string>
<string name="shared_string_deselect_all">Desmarcar todo</string>
@ -219,11 +219,11 @@ Lon %2$s</string>
<string name="traffic_warning">Aviso de tráfico</string>
<string name="speak_favorites">Favoritos cercanos</string>
<string name="speak_poi">PDI cercanos</string>
<string name="way_alarms">Avisos de tráfico</string>
<string name="way_alarms">Advertencias de tráfico</string>
<string name="stop_navigation_service">Parar</string>
<string name="confirm_every_run">Preguntar siempre</string>
<string name="enable_sleep_mode">Activar modo reposo del GPS</string>
<string name="save_current_track_descr">Guardar ahora la traza actual como un archivo GPX.</string>
<string name="save_current_track_descr">Guarda la traza actual como archivo GPX ahora.</string>
<string name="save_current_track">Guardar la traza actual</string>
<string name="save_track_interval_globally">Intervalo de registro</string>
<string name="voice_provider">Indicaciones por voz</string>
@ -538,7 +538,7 @@ Lon %2$s</string>
<string name="map_preferred_locale">Idioma preferido del mapa</string>
<string name="forward">Siguiente</string>
<string name="home">Panel de control</string>
<string name="live_monitoring_m_descr">Envía los datos de rastreo a un servicio web específico, si la grabación GPX está activada.</string>
<string name="live_monitoring_m_descr">Envía los datos de seguimiento a un servicio web específico, si la grabación GPX está activada.</string>
<string name="live_monitoring_m">Rastreo en línea (requiere GPX)</string>
<string name="live_monitoring_start">Iniciar rastreo en línea</string>
<string name="live_monitoring_stop">Parar rastreo en línea</string>
@ -641,7 +641,7 @@ Lon %2$s</string>
<string name="edit_tilesource_url_to_load">URL</string>
<string name="edit_tilesource_choose_existing">Elegir existente…</string>
<string name="maps_define_edit">Definir/Editar…</string>
<string name="map_widget_fps_info">Info de depuración FPS</string>
<string name="map_widget_fps_info">Información de FPS</string>
<string name="driving_region_descr">Región de conducción: EEUU, Europa, Reino Unido, Asia u otras.</string>
<string name="driving_region">Región de conducción</string>
<string name="driving_region_japan">Japón</string>
@ -650,7 +650,7 @@ Lon %2$s</string>
<string name="driving_region_europe_asia">Europa, Asia, Latinoamérica y similares</string>
<string name="driving_region_uk">Reino Unido, India y similares</string>
<string name="speak_title">Anunciar…</string>
<string name="speak_descr">Configura el anuncio de nombres de calles, avisos de tráfico (paradas, lomadas), radares y límites de velocidad.</string>
<string name="speak_descr">Configura el anuncio de nombres de calles, advertencias de tráfico (paradas, lomadas), radares y límites de velocidad.</string>
<string name="speak_street_names">Nombres de calles (TTS)</string>
<string name="speak_speed_limit">Límite de velocidad</string>
<string name="speak_cameras">Radares de velocidad</string>
@ -841,7 +841,7 @@ Lon %2$s</string>
<string name="poi_filter_for_tourists">Para turistas</string>
<string name="poi_filter_fuel">Combustible</string>
<string name="show_warnings_title">Mostrar alertas…</string>
<string name="show_warnings_descr">Configura avisos de tráfico (límites de velocidad, paradas forzosas, lomadas, túneles), radares de velocidad, e información de carriles.</string>
<string name="show_warnings_descr">Configura advertencias de tráfico (límites de velocidad, paradas forzosas, lomadas, túneles), radares de velocidad, e información de carriles.</string>
<string name="use_compass_navigation_descr">Usa la brújula cuando no se detecta la dirección.</string>
<string name="use_compass_navigation">Usar brújula</string>
<string name="avoid_motorway">Evitar autopistas</string>
@ -910,7 +910,7 @@ Lon %2$s</string>
<string name="avoid_unpaved">Evitar caminos sin pavimentar</string>
<string name="avoid_ferries">Evitar ferris</string>
<string name="avoid_in_routing_title">Evitar…</string>
<string name="avoid_in_routing_descr">Evita caminos con peajes, sin pavimentar, transbordadores y otros.</string>
<string name="avoid_in_routing_descr">Evita caminos con peajes, sin pavimentar, transbordadores o ferris y otros.</string>
<string name="map_widget_fluorescent">Rutas fluorescentes</string>
<string name="map_widget_show_ruler">Escala</string>
<string name="map_widget_view_direction">Dirección de visualización</string>
@ -1077,7 +1077,7 @@ Lon %2$s</string>
<string name="direction_style_sidewise">Según el lado (8 sectores)</string>
<string name="direction_style_clockwise">Según el reloj (12 sectores)</string>
<string name="settings_direction_style">Estilo de dirección</string>
<string name="settings_direction_style_descr">Elige el estilo para expresar direcciones relativas en movimiento.</string>
<string name="settings_direction_style_descr">Elige el estilo para expresar direcciones relativas al moverse.</string>
<string name="auto_announce_on">Iniciar anuncios automáticos</string>
<string name="auto_announce_off">Parar anuncios automáticos</string>
<string name="i_am_here">Estoy aquí</string>
@ -1327,7 +1327,7 @@ Lon %2$s</string>
<string name="m">m</string>
<string name="old_map_index_is_not_supported">Formato de datos «{0}» del mapa, obsoleto e incompatible</string>
<string name="poi_filter_closest_poi">PDI más cercanos</string>
<string name="poi_filter_custom_filter">Filtro propio</string>
<string name="poi_filter_custom_filter">Filtro personal</string>
<string name="poi_filter_namefinder">NameFinder en línea</string>
<string name="reading_cached_tiles">Leyendo teselas guardadas…</string>
<string name="version_index_is_big_for_memory">La versión «{0}» de índices no cabe en memoria</string>
@ -1341,8 +1341,11 @@ Lon %2$s</string>
<string name="osmand_net_previously_installed">Todos los datos sin conexión en la versión vieja de OsmAnd son compatibles con la nueva versión, pero los puntos de Favoritos deben exportarse desde la versión vieja y luego, importarse en la nueva.</string>
<string name="build_installed">Compilación {0} instalada ({1}).</string>
<string name="downloading_build">Descargando compilación…</string>
<string name="install_selected_build">¿Instalar OsmAnd - {0} de {1} {2} MB ?</string>
<string name="loading_builds_failed">Fallo al recuperar la lista de compilaciones de OsmAnd</string>
<string name="install_selected_build">¿Instalar OsmAnd?
\nVersión: {0}
\nFecha: {1}
\nTamaño: {2} MB</string>
<string name="loading_builds_failed">Error al recuperar la lista de compilaciones de OsmAnd</string>
<string name="loading_builds">Cargando compilaciones de OsmAnd…</string>
<string name="select_build_to_install">Instalar una compilación de OsmAnd</string>
<string name="gps_status_app_not_found">La aplicación «GPS Status» no está instalada. ¿Buscar en la tienda de aplicaciones?</string>
@ -1670,7 +1673,7 @@ Lon %2$s</string>
<string name="av_camera_pic_size_descr">Tamaño interno de la fotografía.</string>
<string name="navigation_intent_invalid">Formato inválido: %s</string>
<string name="plugin_description_title">Descripción</string>
<string name="plugin_install_needs_network">Es necesaria una conexión a Internet para instalar este complemento.</string>
<string name="plugin_install_needs_network">Debes conectarte a Internet para instalar este complemento.</string>
<string name="get_plugin">Obtener</string>
<string name="routing_attr_avoid_borders_description">Evita cruzar las fronteras nacionales</string>
@ -2036,7 +2039,7 @@ Lon %2$s</string>
<string name="osm_editors_ranking">Clasificación de editores OSM</string>
<string name="osm_live_subscription">Suscripción de OsmAnd Live</string>
<string name="osm_live_subscribe_btn">Suscribirse</string>
<string name="osm_live_email_desc">Necesario para proporcionarte información sobre las contribuciones.</string>
<string name="osm_live_email_desc">Necesario para proporcionar información sobre las contribuciones.</string>
<string name="osm_live_user_public_name">Nombre público</string>
<string name="osm_live_hide_user_name">Ocultar mi nombre en los informes</string>
<string name="osm_live_support_region">Región soportada</string>
@ -2170,7 +2173,7 @@ Lon %2$s</string>
<string name="no_inet_connection_desc_map">Necesario para descargar mapas.</string>
<string name="search_location">Buscando la ubicación…</string>
<string name="storage_free_space">Espacio libre</string>
<string name="storage_place_description">Almacenamiento de datos OsmAnd (para mapas, archivos GPX, etc.): %1$s.</string>
<string name="storage_place_description">Almacenamiento de datos de OsmAnd (para mapas, archivos GPX, etc.): %1$s.</string>
<string name="give_permission">Conceder permiso</string>
<string name="allow_access_location">Permitir el acceso a la ubicación</string>
<string name="first_usage_greeting">Obtén direcciones y descubre lugares nuevos sin una conexión a Internet</string>
@ -2352,7 +2355,7 @@ Lon %2$s</string>
<string name="routing_attr_height_obstacles_name">Usar datos de elevación</string>
<string name="routing_attr_height_obstacles_description">Factor de elevación del terreno (según datos de SRTM, ASTER y EU-DEM).</string>
<string name="routing_attr_height_obstacles_description">Incluye como factor, la elevación del terreno (según datos de SRTM, ASTER y EU-DEM).</string>
<string name="routing_attr_driving_style_name">Estilo de conducción</string>
@ -2489,7 +2492,8 @@ Lon %2$s</string>
\n • Añade PDI y súbelos directamente a OSM (o más tarde, si no estás conectado)
\n • (Opcional) Grabación del viaje en modo reposo (mientras el dispositivo está bloqueado)
\n
\n OsmAnd es un software de código abierto, activamente desarrollado. Cualquiera puede contribuir con la aplicación informando sobre errores, mejorando las traducciones o desarrollando nuevas funciones. Además, el proyecto también depende de contribuciones financieras para desarrollar y probar nuevas funcionalidades. "</string>
\n OsmAnd es un software de código abierto, activamente desarrollado. Cualquiera puede contribuir con la aplicación informando sobre errores, mejorando las traducciones o desarrollando nuevas funciones. Además, el proyecto también depende de contribuciones financieras para desarrollar y probar nuevas funcionalidades.
\n"</string>
<string name="osmand_plus_extended_description_part8">Cobertura y calidad aproximada del mapa:
\n • Europa Occidental: ****
\n • Europa Oriental: ***
@ -2757,7 +2761,7 @@ Lon %2$s</string>
<string name="shared_string_gpx_waypoints">Puntos de referencia de la traza</string>
<string name="favourites_group">Categoría de favoritos</string>
<string name="add_group">Añadir un grupo</string>
<string name="add_group_descr">Importar grupos de Favoritos o puntos de referencia GPX.</string>
<string name="add_group_descr">Importar grupos desde Favoritos o puntos de referencia GPX.</string>
<string name="empty_state_markers_active">¡Crea marcadores del mapa!</string>
<string name="empty_state_markers_active_desc">Pulsa en «Lugares» y luego pulsa la bandera del marcador.</string>
<string name="empty_state_markers_groups">Importar grupos</string>
@ -2786,11 +2790,11 @@ Lon %2$s</string>
<string name="by_date">Por fecha</string>
<string name="by_type">Por tipo</string>
<string name="modify_the_search_query">Modificar la consulta de búsqueda.</string>
<string name="release_3_0">• Nuevo: Soporte de guías turísticas globales sin conexión a Internet. Las ubicaciones de referencias, están enlazadas al mapa. Datos iniciales de Wikiviajes
<string name="release_3_0">• Nuevo: Soporte para guías turísticas globales sin conexión a Internet. Las ubicaciones de referencia, están vinculadas al mapa. Datos iniciales de Wikiviajes
\n
\n • Wikipedia: Nuevo aspecto, enlaces activos, ahora con soporte de imágenes
\n
\n • Interfaz de apertura de traza: Soporte para los grupos de puntos de ruta
\n • Interfaz de usuario de Open Tracks: Soporte para grupos de puntos de ruta
\n
\n • Marcadores del mapa: Importación de grupos elegidos desde archivos GPX, ingreso de coordenadas, nuevo aspecto
\n
@ -2821,7 +2825,7 @@ Lon %2$s</string>
<string name="will_open_tomorrow_at">Abre mañana a las</string>
<string name="rendering_attr_hidePOILabels_name">Etiquetas de PDI</string>
<string name="day_off_label">cerrado (día libre)</string>
<string name="day_off_label">cerrado</string>
<string name="winter_and_ski_renderer">Invierno y esquí</string>
<string name="touring_view_renderer">Vista turística</string>
<string name="nautical_renderer">Náutico</string>
@ -2891,7 +2895,7 @@ Lon %2$s</string>
<string name="shared_string_do"></string>
<string name="shared_string_only_with_wifi">Sólo con Wi-Fi</string>
<string name="wikivoyage_download_pics">Descargar imágenes</string>
<string name="wikivoyage_download_pics_descr">Las imágenes de los artículos pueden descargarse para su uso sin conexión.
<string name="wikivoyage_download_pics_descr">Las imágenes del artículo pueden descargarse para su uso sin conexión.
\nSiempre disponible en «Explorar» → «Opciones».</string>
<string name="shared_string_wifi_only">Sólo con Wi-Fi</string>
<string name="select_travel_book">Marcar un libro de viaje</string>

File diff suppressed because it is too large Load diff

View file

@ -1744,7 +1744,7 @@
<string name="traffic_warning_pedestrian">گذرگاه پیاده</string>
<string name="show_railway_warnings">تقاطع‌های ریلی</string>
<string name="show_pedestrian_warnings">گذرگاه‌های پیاده</string>
<string name="routing_attr_no_new_routing_name">استفاده‌نکردن از قوائد مسیریابی نسخهٔ ۱٫۹</string>
<string name="routing_attr_no_new_routing_name">استفاده‌نکردن از قواعد مسیریابی نسخهٔ ۱٫۹</string>
<string name="rendering_attr_transportStops_name">ایستگاه‌های حمل‌ونقل</string>
<string name="navigate_point_northing">به‌طرف شمال</string>
<string name="navigate_point_easting">به‌طرف شرق</string>

View file

@ -2444,4 +2444,5 @@ Jos pidät OsmAndista ja OSMsta ja haluat tukea niitä, on tämä täydellinen t
<string name="quick_action_navigation_voice_descr">Näpäyttämällä tätä toimintonäppäintä otat tai poistat ääniohjauksen käytöstä navigoinnin aikana.</string>
<string name="open_in_browser_wiki_description">Näytä artikkeli selaimessa.</string>
<string name="how_to_open_wiki_title">Kuinka avata Wikipedia artikkelit?</string>
</resources>
<string name="thank_you_for_feedback">Kiitos palautteesta</string>
</resources>

View file

@ -1237,7 +1237,7 @@
<string name="poi_smoking_outside">À l\'extérieur uniquement</string>
<string name="poi_services">Aire de services</string>
<string name="poi_mini_roundabout">Mini rond-point</string>
<string name="poi_mini_roundabout">Mini giratoire</string>
<string name="poi_level">Niveau</string>
<string name="poi_garden_type_residential">Type de jardin : résidentiel</string>
<string name="poi_garden_type_community">Type de jardin : communautaire</string>

View file

@ -784,7 +784,7 @@
<string name="transport_search_desc">Recherche de transports publics</string>
<string name="favourites_search_desc">Recherche dans les favoris</string>
<string name="route_roundabout">Rond-point : prenez la sortie %1$d puis continuez</string>
<string name="route_roundabout">Giratoire : prenez la sortie %1$d puis continuez</string>
<string name="route_kl">Serrez à gauche et continuez</string>
<string name="route_kr">Serrez à droite et continuez</string>
<string name="rendering_attr_noPolygons_description">Rendre invisibles les surfaces représentant des éléments de terrain.</string>

View file

@ -2072,4 +2072,6 @@
<string name="poi_shelter_type_picnic_shelter">פיקניק</string>
<string name="poi_shelter_type_weather_shelter">מזג אוויר</string>
<string name="poi_shelter_type_lean_to">סככה פתוחה</string>
<string name="poi_shelter_type_basic_hut">בקתה בסיסית</string>
<string name="poi_shelter_type_building">בניין</string>
</resources>

View file

@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><resources>
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="starting_point_too_far">Pradžios taškas yra per toli nuo artimiausio kelio.</string>
<string name="shared_location">Bendrinta vieta</string>
<string name="osmand_parking_warning">Dėmesio</string>
@ -2516,7 +2517,7 @@ Tai yra puikus būdas paremti OsmAnd ir OSM, jei jie jums patinka.</string>
<string name="private_access_routing_req">Jūsų kelionės tikslas yra privačioje teritorijoje. Ar norite leisti keliavimą privačiais keliais šioje kelionėje?</string>
<string name="quick_action_showhide_osmbugs_descr">Paspaudus aktyvinimo mygtuką OSM užrašai bus parodomi ant žemėlapio arba paslepiami.</string>
<string name="hillshade_menu_download_descr">Norėdami pamatyti kalnų reljefo šešėlių žemėlapį turite parsisiųsti kalnų šešėlių sluoksnio žemėlapį šiam regionui.</string>
<string name="hillshade_purchase_header">Norėdami pamatyti kalnų šešėlius ant žemėlapio turėsite nusipirkti ir įdiegti Kontūrų Linijų įskiepį</string>
<string name="hillshade_purchase_header">Norėdami pamatyti kalnų šešėlius žemėlapyje, turte nusipirkti ir įdiegti \"Kontūrų Linijų\" įskiepį</string>
<string name="hide_from_zoom_level">Paslėpti mąstelį</string>
<string name="store_tracks_in_monthly_directories">Išsaugoti įrašytas keliones mėnesiniuose segtuvuose</string>
<string name="store_tracks_in_monthly_directories_descrp">Išsaugoti įrašytas keliones mėnesiniuose poaplankiuose (pvz. 2018-01).</string>
@ -2702,7 +2703,7 @@ Tai yra puikus būdas paremti OsmAnd ir OSM, jei jie jums patinka.</string>
<string name="shared_string_edited">Redaguota</string>
<string name="shared_string_added">Pridėta</string>
<string name="marker_activated">Žymeklis %s aktyvuotas.</string>
<string name="one_tap_active">Aktyvavimas vienu lietimu</string>
<string name="one_tap_active">Aktyvavimas \"vienu lietimu\"</string>
<string name="empty_state_av_notes">Rašykite pastabas!</string>
<string name="by_date">Pagal datą</string>
<string name="by_type">Pagal tipą</string>
@ -2812,8 +2813,8 @@ Tai yra puikus būdas paremti OsmAnd ir OSM, jei jie jums patinka.</string>
<string name="get_unlimited_access">Gauti neribotą prieigą</string>
<string name="welcome_to_open_beta">Sveiki atvykę į atvirą beta testavimą</string>
<string name="wikivoyage_travel_guide">Kelionių vadovas</string>
<string name="monthly_map_updates">Žemėlapis atnaujinamas: <b>Kas mėnesį</b></string>
<string name="daily_map_updates">Žemėlapis atnaujinamas: <b>Kas valandą</b></string>
<string name="monthly_map_updates">Žemėlapis atnaujinamas: <b>kas mėnesį</b></string>
<string name="daily_map_updates">Žemėlapis atnaujinamas: <b>kas valandą</b></string>
<string name="in_app_purchase_desc">Vienkartinis mokestis</string>
<string name="purchase_unlim_title">Pirkti - %1$s</string>
<string name="purchase_subscription_title">Prenumeruoti - %1$s</string>
@ -2879,4 +2880,15 @@ Tai yra puikus būdas paremti OsmAnd ir OSM, jei jie jums patinka.</string>
<string name="show_full_description">Rodyti visą aprašymą</string>
<string name="read_wikipedia_offline">Skaityti Wikipedia atjungus internetą</string>
<string name="maps_you_need">Jums reikalingi žemėlapiai</string>
<string name="increase_search_radius_to">Padidinti paieškos spindulį iki %1$s</string>
<string name="send_search_query">Siųsti paieškos užklausą?</string>
<string name="shared_string_world">Pasaulis</string>
<string name="coord_input_edit_point">Redaguoti tašką</string>
<string name="coord_input_add_point">Priddėti tašką</string>
<string name="open_wikipedia_link_online_description">Nuoroda bus atverta naršyklėje.</string>
<string name="start_editing_card_image_text">Atviras pasaulinis kelionių vadovas, kurie kiekvienas gali redaguoti.</string>
<string name="access_intermediate_arrival_time">Tarpinis atvykimo laikas</string>
<string name="map_widget_intermediate_time">Tarpinis laikas</string>
<string name="empty_state_my_tracks">Pridėti GPX failus</string>
<string name="download_wikipedia_label">Atsisiųsti Vikipedijos duomenys</string>
</resources>

View file

@ -3077,4 +3077,22 @@ voor Gebied: %1$s x %2$s</string>
<string name="send_search_query">"Zoekterm versturen? "</string>
<string name="shared_string_world">Wereld</string>
<string name="shared_string_gpx_files">GPX bestanden</string>
</resources>
<string name="commiting_way">"Weg vastleggen.. ik "</string>
<string name="coord_input_save_as_track">Als GPX-track opslaan</string>
<string name="get_osmand_live">"Neem OsmAnd Live en krijg alle mogelijkheden: Dagelijjse kaartupdates en onbeperkte downloads, alle betaalde en gratis plugins, Wikipedia, Wikivoyage en nog meer. "</string>
<string name="unirs_render_descr">"Wijziging van de standaard Kaartstijl met mreer constrast voor wandel-en fietspaden. Gebruikt de Mapnik-kleuren. "</string>
<string name="waypoints_removed_from_map_markers">"Wegpunten verwijders uit de Markeervlaggetjes "</string>
<string name="select_waypoints_category_description">"Voeg alle wegpunten uit de track toe, of kies een categorie. "</string>
<string name="one_tap_active_descr">Tik op een Markeervlaggetje om die bovenaan de actieve lijst te zetten, zonder het contextmenu te openen.</string>
<string name="one_tap_active">\'Eén tik\' actief</string>
<string name="looking_for_tracks_with_waypoints">Tracks met wegpunten zoeken</string>
<string name="add_track_to_markers_descr">"Kies een track, om de wegpunten daaruit aan de Markeervlaggetjes toe te voegen."</string>
<string name="shared_string_gpx_waypoints">Track routepunten</string>
<string name="add_group_descr">"Groepen uit Favorieten of GPX-routepunte. "</string>
<string name="empty_state_markers_active_desc">"Tik lang of kort ergens op de kaart en tik op het \'Markeer\'-vlaggetje. "</string>
<string name="empty_state_markers_groups_desc">"Importeer een Groep Favorieten of Routepunten als Markeervlaggetjes. "</string>
<string name="empty_state_markers_history_desc">Markeervlaggetjes die niet actief zijn, komen in dit scherm.</string>
<string name="show_guide_line_descr">"Toon rechte lijnen van je positie nasr de actieve Markeervlaggetjes. "</string>
<string name="show_arrows_descr">Toon pijlen richting de actieve Markeervlaggetjes.</string>
<string name="waypoints_added_to_map_markers">"Routepunten: toegevoegd aan Markeervlaggetjes "</string>
</resources>

View file

@ -2322,7 +2322,7 @@
<string name="poi_site_type_megalith">Megálito</string>
<string name="poi_site_type_tumulus">Túmulo</string>
<string name="poi_site_type_fortification">Fortificação</string>
<string name="poi_site_type_settlement">Povoamento</string>
<string name="poi_site_type_settlement">Assentamento</string>
<string name="poi_site_type_city">Cidade</string>
<string name="poi_site_type_necropolis">Necrópole</string>
<string name="poi_site_type_petroglyph">Petróglifo</string>

View file

@ -2502,7 +2502,7 @@
<string name="this_year">В этом году</string>
<string name="plan_route">План маршрута</string>
<string name="coordinate_input">Ввод координат</string>
<string name="marker_save_as_track">Сохранить как трек</string>
<string name="marker_save_as_track">Сохранить как GPX файл</string>
<string name="move_to_history">Переместить в историю</string>
<string name="group_will_be_removed_after_restart">Группа будет выключена при следующем запуске приложения.</string>
<string name="show_arrows_on_the_map">Показывать стрелки на карте</string>
@ -2517,7 +2517,7 @@
<string name="my_location">Мое местоположение</string>
<string name="shared_string_finish">Финиш</string>
<string name="shared_string_sort">Сортировать</string>
<string name="marker_save_as_track_descr">Экспорт маркеров в файл можно задать здесь:</string>
<string name="marker_save_as_track_descr">Экспорт маркеров в следующий GPX файл:</string>
<string name="shared_string_markers">Маркеры</string>
<string name="osn_modify_dialog_title">Изменить заметку</string>
<string name="context_menu_item_modify_note">Изменить заметку OSM</string>
@ -2590,7 +2590,7 @@
<string name="add_favourites_group_to_markers_descr">Выберите категорию избранных для добавления к маркерам.</string>
<string name="favourites_group">Категория избранных</string>
<string name="add_group">Добавить группу</string>
<string name="add_group_descr">Импортировать группу из избранных или путевых точек.</string>
<string name="add_group_descr">Импортировать группу из избранных или GPX путевых точек.</string>
<string name="empty_state_markers_active">Создайте маркеры карт!</string>
<string name="empty_state_markers_active_desc">Длинное или короткое нажатие на нужное место, а затем на флажок маркера.</string>
<string name="empty_state_markers_groups">Импорт групп</string>
@ -2611,14 +2611,14 @@
<string name="tap_on_map_to_hide_interface">Полноэкранный режим</string>
<string name="mark_passed">Отметить пройденным</string>
<string name="import_track_desc">Файл %1$s не содержит путевых точек, импортировать его как трек?</string>
<string name="add_track_to_markers_descr">Путевые точки можно добавить к маркерам выбрав один из этих треков, содержащих их.</string>
<string name="add_track_to_markers_descr">Выберите трек, чтобы добавить свои путевые точки к маркерам.</string>
<string name="shared_string_gpx_waypoints">Трек путевых точек</string>
<string name="shared_string_right">Направо</string>
<string name="shared_string_left">Налево</string>
<string name="show_number_pad">Показать цифровую панель</string>
<string name="tap_on_map_to_hide_interface_descr">Нажатие на карте переключает кнопки управления и виджеты.</string>
<string name="import_gpx_file_description">могут быть импортированы как избранные точки или как трек файл.</string>
<string name="import_gpx_file_description">могут быть импортированы как избранные точки или как GPX файл.</string>
<string name="shared_string_more_without_dots">Больше</string>
<string name="import_as_gpx">Импортировать как файл GPX</string>
<string name="import_as_favorites">Импортировать как избранные</string>
@ -2849,14 +2849,14 @@
<string name="shared_string_travel_guides">Путеводитель</string>
<string name="waypoints_removed_from_map_markers">Путевые точки удалены из маркеров карты</string>
<string name="nothing_found_in_radius">Ничего не найдено:</string>
<string name="select_waypoints_category_description">Вы можете добавить все путевые точки трека, или выбрать отдельные категории.</string>
<string name="select_waypoints_category_description">Добавьте все путевые точки трека или выберите отдельные категории.</string>
<string name="shared_string_total">Всего</string>
<string name="shared_string_result">Результат</string>
<string name="wikivoyage_search_hint">Поиск: страна, город, провинция</string>
<string name="shared_string_read">Читать</string>
<string name="saved_articles">Сохраненные статьи</string>
<string name="shared_string_contents">Главы</string>
<string name="download_maps_travel">Карты путешествий</string>
<string name="download_maps_travel">Путеводитель</string>
<string name="shared_string_wikivoyage">Викигид</string>
<string name="article_removed">Статья удалена</string>
<string name="shared_string_explore">Исследовать</string>
@ -2865,14 +2865,14 @@
<string name="delete_search_history">"Удалить историю поиска "</string>
<string name="show_images">Показать изображения</string>
<string name="shared_string_only_with_wifi">Только по WiFi</string>
<string name="wikivoyage_download_pics">Показывать изображения</string>
<string name="wikivoyage_download_pics">Загружать изображения</string>
<string name="wikivoyage_download_pics_descr">Изображения из статей можно загрузить для использования в автономном режиме.
\nВы всегда можете изменить настройку в \"Исследовать\" → \"Параметры\".</string>
<string name="shared_string_wifi_only">Только WiFi</string>
<string name="select_travel_book">Выберите дневник путешествий</string>
<string name="shared_string_travel_book">Дневник путешествий</string>
<string name="online_webpage_warning">Страница доступна только онлайн. Открыть ее в браузере?</string>
<string name="download_images">Показывать изображения</string>
<string name="download_images">Загружать изображения</string>
<string name="shared_string_dont">Нет</string>
<string name="shared_string_do">Выполнить</string>
<string name="purchase_dialog_title">Выберите план</string>
@ -2911,7 +2911,7 @@
<string name="open_in_browser_wiki">Открыть статью в Интернете</string>
<string name="open_in_browser_wiki_description">Просмотреть эту статью в браузере.</string>
<string name="download_wiki_region_placeholder">этот регион</string>
<string name="wiki_article_search_text">Поиск нужной статьи в вики</string>
<string name="wiki_article_search_text">Поиск соответствующей статьи в вики</string>
<string name="wiki_article_not_found">Статья не найдена</string>
<string name="how_to_open_wiki_title">Как открыть статьи Википедии?</string>
<string name="popular_destinations">Популярные направления</string>
@ -2979,4 +2979,5 @@
\n• Другие исправления ошибок
\n</string>
<string name="increase_search_radius_to">Увеличить радиус поиска до %1$s</string>
<string name="commiting_way">Фиксируется путь…</string>
</resources>

View file

@ -1876,4 +1876,53 @@
<string name="poi_tactile_paving_no">Без површне облоге</string>
<string name="poi_services">Услужни простор</string>
<string name="poi_railway_level_crossing">Пружни прелаз у нивоу</string>
<string name="poi_leisure_common">Заједнички простор одмора</string>
<string name="poi_heath">Врес</string>
<string name="poi_grassland">Травната земља</string>
<string name="poi_scrub">Жбун</string>
<string name="poi_farmland">Земља фарме</string>
<string name="poi_logging">Сеча дрвета</string>
<string name="poi_windfall">Опало воће</string>
<string name="poi_passing_place">Пролазно место</string>
<string name="poi_rtsa_scale">РТСА скала</string>
<string name="poi_piste_grooming_backcountry">Рурални део</string>
<string name="poi_payment_girocard_yes">Гирокартица</string>
<string name="poi_payment_pikepass_no">PIKEPASS се не прихвата</string>
<string name="poi_payment_pikepass_designated">PIKEPASS (намењено)</string>
<string name="poi_payment_visa_debit_yes">Виза дебитне картице</string>
<string name="poi_payment_visa_debit_no">Виза дебитне картице се не прихватају</string>
<string name="poi_payment_cryptocurrencies_no">Криптовалуте се не прихватају</string>
<string name="poi_payment_others_yes">Други методи</string>
<string name="poi_payment_others_no">Други методи плаћања се не прихватају</string>
<string name="poi_payment_routex_yes">Routex да</string>
<string name="poi_payment_routex_no">Routex кртице горива се не прихватају</string>
<string name="poi_payment_bancomat_yes">Bancomat да</string>
<string name="poi_payment_bancomat_no">Bancomat се не прихвата</string>
<string name="poi_payment_icsf_yes">IC Stored Fare - да</string>
<string name="poi_payment_wire_transfer_yes">Вајер трансфери</string>
<string name="poi_payment_wire_transfer_no">Вајер трансфери се не прихватају</string>
<string name="poi_events_venue">Места догађаја</string>
<string name="poi_diet_kosher_no">Кошер исхрана: не</string>
<string name="poi_diet_halal_filter_yes">Халал</string>
<string name="poi_diet_halal_only">Халал само</string>
<string name="poi_diet_halal_yes">Халал</string>
<string name="poi_diet_halal_no">Халал исхрана: не</string>
<string name="poi_diet_lactose_free_filter_yes">Без лактозе</string>
<string name="poi_diet_lactose_free_only">Без лактозе само</string>
<string name="poi_diet_lactose_free_yes">Без лактозе</string>
<string name="poi_diet_lactose_free_no">Без лактозе исхрана: не</string>
<string name="poi_diet_pescetarian_yes">Пескотеријан</string>
<string name="poi_drive_in_yes">Да</string>
<string name="poi_drive_in_no">Улазак колима: не</string>
<string name="poi_drive_through_yes">Да</string>
<string name="poi_drive_through_no">Пролазак кроз: не</string>
<string name="poi_brewery_additional">Име пиваре</string>
<string name="poi_microbrewery_yes">Микропивара</string>
<string name="poi_microbrewery_no">Не микропивара</string>
<string name="poi_takeaway_filter_yes">Да</string>
</resources>

View file

@ -0,0 +1,7 @@
package net.osmand.aidl;
import net.osmand.aidl.search.SearchResult;
interface IOsmAndAidlCallback {
void onSearchComplete(in List<SearchResult> resultSet);
}

View file

@ -55,6 +55,17 @@ import net.osmand.aidl.maplayer.point.ShowMapPointParams;
import net.osmand.aidl.navdrawer.SetNavDrawerItemsParams;
import net.osmand.aidl.navigation.PauseNavigationParams;
import net.osmand.aidl.navigation.ResumeNavigationParams;
import net.osmand.aidl.navigation.StopNavigationParams;
import net.osmand.aidl.navigation.MuteNavigationParams;
import net.osmand.aidl.navigation.UnmuteNavigationParams;
import net.osmand.aidl.IOsmAndAidlCallback;
import net.osmand.aidl.search.SearchResult;
import net.osmand.aidl.search.SearchParams;
// NOTE: Add new methods at the end of file!!!
interface IOsmAndAidlInterface {
@ -109,4 +120,12 @@ interface IOsmAndAidlInterface {
boolean showMapPoint(in ShowMapPointParams params);
boolean setNavDrawerItems(in SetNavDrawerItemsParams params);
boolean pauseNavigation(in PauseNavigationParams params);
boolean resumeNavigation(in ResumeNavigationParams params);
boolean stopNavigation(in StopNavigationParams params);
boolean muteNavigation(in MuteNavigationParams params);
boolean unmuteNavigation(in UnmuteNavigationParams params);
boolean search(in SearchParams params, IOsmAndAidlCallback callback);
}

View file

@ -1,5 +1,6 @@
package net.osmand.aidl;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
@ -28,9 +29,12 @@ import net.osmand.aidl.maplayer.AMapLayer;
import net.osmand.aidl.maplayer.point.AMapPoint;
import net.osmand.aidl.mapmarker.AMapMarker;
import net.osmand.aidl.mapwidget.AMapWidget;
import net.osmand.aidl.search.SearchParams;
import net.osmand.aidl.search.SearchResult;
import net.osmand.data.FavouritePoint;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
import net.osmand.plus.AppInitializer;
import net.osmand.plus.ApplicationMode;
import net.osmand.plus.ContextMenuAdapter;
import net.osmand.plus.ContextMenuItem;
@ -51,6 +55,7 @@ import net.osmand.plus.dialogs.ConfigureMapMenu;
import net.osmand.plus.helpers.ColorDialogs;
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.search.listitems.QuickSearchListItem;
import net.osmand.plus.views.AidlMapLayer;
import net.osmand.plus.views.MapInfoLayer;
import net.osmand.plus.views.OsmandMapLayer;
@ -58,6 +63,10 @@ import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
import net.osmand.plus.views.OsmandMapTileView;
import net.osmand.plus.views.mapwidgets.MapWidgetRegistry.MapWidgetRegInfo;
import net.osmand.plus.views.mapwidgets.TextInfoWidget;
import net.osmand.search.SearchUICore;
import net.osmand.search.SearchUICore.SearchResultCollection;
import net.osmand.search.core.ObjectType;
import net.osmand.search.core.SearchSettings;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
@ -81,6 +90,15 @@ import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import static net.osmand.search.core.ObjectType.CITY;
import static net.osmand.search.core.ObjectType.HOUSE;
import static net.osmand.search.core.ObjectType.POI;
import static net.osmand.search.core.ObjectType.POSTCODE;
import static net.osmand.search.core.ObjectType.STREET;
import static net.osmand.search.core.ObjectType.STREET_INTERSECTION;
import static net.osmand.search.core.ObjectType.VILLAGE;
import static net.osmand.search.core.SearchCoreFactory.MAX_DEFAULT_SEARCH_RADIUS;
public class OsmandAidlApi {
private static final Log LOG = PlatformUtil.getLog(OsmandAidlApi.class);
@ -117,6 +135,11 @@ public class OsmandAidlApi {
private static final String AIDL_NAVIGATE = "aidl_navigate";
private static final String AIDL_NAVIGATE_GPX = "aidl_navigate_gpx";
private static final String AIDL_PAUSE_NAVIGATION = "pause_navigation";
private static final String AIDL_RESUME_NAVIGATION = "resume_navigation";
private static final String AIDL_STOP_NAVIGATION = "stop_navigation";
private static final String AIDL_MUTE_NAVIGATION = "mute_navigation";
private static final String AIDL_UNMUTE_NAVIGATION = "unmute_navigation";
private static final ApplicationMode DEFAULT_PROFILE = ApplicationMode.CAR;
@ -135,7 +158,7 @@ public class OsmandAidlApi {
private Map<String, TextInfoWidget> widgetControls = new ConcurrentHashMap<>();
private Map<String, AMapLayer> layers = new ConcurrentHashMap<>();
private Map<String, OsmandMapLayer> mapLayers = new ConcurrentHashMap<>();
private Map<String, BroadcastReceiver> receivers = new TreeMap<String, BroadcastReceiver>();
private Map<String, BroadcastReceiver> receivers = new TreeMap<>();
public OsmandAidlApi(OsmandApplication app) {
@ -155,6 +178,11 @@ public class OsmandAidlApi {
registerStopRecordingReceiver(mapActivity);
registerNavigateReceiver(mapActivity);
registerNavigateGpxReceiver(mapActivity);
registerPauseNavigationReceiver(mapActivity);
registerResumeNavigationReceiver(mapActivity);
registerStopNavigationReceiver(mapActivity);
registerMuteNavigationReceiver(mapActivity);
registerUnmuteNavigationReceiver(mapActivity);
}
public void onDestroyMapActivity(final MapActivity mapActivity) {
@ -168,7 +196,7 @@ public class OsmandAidlApi {
LOG.error(e.getMessage(), e);
}
}
receivers = new TreeMap<String, BroadcastReceiver>();
receivers = new TreeMap<>();
}
private void registerRefreshMapReceiver(final MapActivity mapActivity) {
@ -529,6 +557,70 @@ public class OsmandAidlApi {
}
}
private void registerPauseNavigationReceiver(final MapActivity mapActivity) {
BroadcastReceiver pauseNavigationReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
RoutingHelper routingHelper = mapActivity.getRoutingHelper();
if (routingHelper.isRouteCalculated() && !routingHelper.isRoutePlanningMode()) {
routingHelper.setRoutePlanningMode(true);
routingHelper.setFollowingMode(false);
routingHelper.setPauseNavigation(true);
}
}
};
registerReceiver(pauseNavigationReceiver, mapActivity, AIDL_PAUSE_NAVIGATION);
}
private void registerResumeNavigationReceiver(final MapActivity mapActivity) {
BroadcastReceiver resumeNavigationReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
RoutingHelper routingHelper = mapActivity.getRoutingHelper();
if (routingHelper.isRouteCalculated() && routingHelper.isRoutePlanningMode()) {
routingHelper.setRoutePlanningMode(false);
routingHelper.setFollowingMode(true);
}
}
};
registerReceiver(resumeNavigationReceiver, mapActivity, AIDL_RESUME_NAVIGATION);
}
private void registerStopNavigationReceiver(final MapActivity mapActivity) {
BroadcastReceiver stopNavigationReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
RoutingHelper routingHelper = mapActivity.getRoutingHelper();
if (routingHelper.isPauseNavigation() || routingHelper.isFollowingMode()) {
mapActivity.getMapLayers().getMapControlsLayer().stopNavigationWithoutConfirm();
}
}
};
registerReceiver(stopNavigationReceiver, mapActivity, AIDL_STOP_NAVIGATION);
}
private void registerMuteNavigationReceiver(final MapActivity mapActivity) {
BroadcastReceiver muteNavigationReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
mapActivity.getMyApplication().getSettings().VOICE_MUTE.set(true);
mapActivity.getRoutingHelper().getVoiceRouter().setMute(true);
}
};
registerReceiver(muteNavigationReceiver, mapActivity, AIDL_MUTE_NAVIGATION);
}
private void registerUnmuteNavigationReceiver(final MapActivity mapActivity) {
BroadcastReceiver unmuteNavigationReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
mapActivity.getMyApplication().getSettings().VOICE_MUTE.set(false);
mapActivity.getRoutingHelper().getVoiceRouter().setMute(false);
}
};
registerReceiver(unmuteNavigationReceiver, mapActivity, AIDL_UNMUTE_NAVIGATION);
}
public void registerMapLayers(MapActivity mapActivity) {
for (AMapLayer layer : layers.values()) {
OsmandMapLayer mapLayer = mapLayers.get(layer.getId());
@ -898,6 +990,7 @@ public class OsmandAidlApi {
return false;
}
@SuppressLint("StaticFieldLeak")
private void finishGpxImport(boolean destinationExists, File destination, String color, boolean show) {
int col = ConfigureMapMenu.GpxAppearanceAdapter.parseTrackColor(
app.getRendererRegistry().getCurrentSelectedRenderer(), color);
@ -1039,6 +1132,7 @@ public class OsmandAidlApi {
return false;
}
@SuppressLint("StaticFieldLeak")
boolean showGpx(String fileName) {
if (!Algorithms.isEmpty(fileName)) {
File f = app.getAppPath(IndexConstants.GPX_INDEX_DIR + fileName);
@ -1191,6 +1285,41 @@ public class OsmandAidlApi {
return true;
}
boolean pauseNavigation() {
Intent intent = new Intent();
intent.setAction(AIDL_PAUSE_NAVIGATION);
app.sendBroadcast(intent);
return true;
}
boolean resumeNavigation() {
Intent intent = new Intent();
intent.setAction(AIDL_RESUME_NAVIGATION);
app.sendBroadcast(intent);
return true;
}
boolean stopNavigation() {
Intent intent = new Intent();
intent.setAction(AIDL_STOP_NAVIGATION);
app.sendBroadcast(intent);
return true;
}
boolean muteNavigation() {
Intent intent = new Intent();
intent.setAction(AIDL_MUTE_NAVIGATION);
app.sendBroadcast(intent);
return true;
}
boolean unmuteNavigation() {
Intent intent = new Intent();
intent.setAction(AIDL_UNMUTE_NAVIGATION);
app.sendBroadcast(intent);
return true;
}
boolean navigateGpx(String data, Uri uri, boolean force) {
Intent intent = new Intent();
intent.setAction(AIDL_NAVIGATE_GPX);
@ -1201,6 +1330,86 @@ public class OsmandAidlApi {
return true;
}
boolean search(final String searchQuery, final int searchType, final double latitude, final double longitude,
final int radiusLevel, final int totalLimit, final SearchCompleteCallback callback) {
if (Algorithms.isEmpty(searchQuery) || latitude == 0 || longitude == 0 || callback == null) {
return false;
}
if (app.isApplicationInitializing()) {
app.getAppInitializer().addListener(new AppInitializer.AppInitializeListener() {
@Override
public void onProgress(AppInitializer init, AppInitializer.InitEvents event) {
}
@Override
public void onFinish(AppInitializer init) {
runSearch(searchQuery, searchType, latitude, longitude, radiusLevel, totalLimit, callback);
}
});
} else {
runSearch(searchQuery, searchType, latitude, longitude, radiusLevel, totalLimit, callback);
}
return true;
}
private void runSearch(String searchQuery, int searchType, double latitude, double longitude, int radiusLevel,
int totalLimit, final SearchCompleteCallback callback) {
if (radiusLevel < 1) {
radiusLevel = 1;
} else if (radiusLevel > MAX_DEFAULT_SEARCH_RADIUS) {
radiusLevel = MAX_DEFAULT_SEARCH_RADIUS;
}
if (totalLimit <= 0) {
totalLimit = -1;
}
final int limit = totalLimit;
final SearchUICore core = app.getSearchUICore().getCore();
core.setOnResultsComplete(new Runnable() {
@Override
public void run() {
List<SearchResult> resultSet = new ArrayList<>();
SearchResultCollection resultCollection = core.getCurrentSearchResult();
int count = 0;
for (net.osmand.search.core.SearchResult r : resultCollection.getCurrentSearchResults()) {
String name = QuickSearchListItem.getName(app, r);
String typeName = QuickSearchListItem.getTypeName(app, r);
SearchResult result = new SearchResult(r.location.getLatitude(), r.location.getLongitude(),
name, typeName, r.alternateName, new ArrayList<>(r.otherNames));
resultSet.add(result);
count++;
if (limit != -1 && count >= limit) {
break;
}
}
callback.onSearchComplete(resultSet);
}
});
SearchSettings searchSettings = new SearchSettings(core.getSearchSettings())
.setRadiusLevel(radiusLevel)
.setEmptyQueryAllowed(false)
.setSortByName(false)
.setOriginalLocation(new LatLon(latitude, longitude))
.setTotalLimit(totalLimit);
List<ObjectType> searchTypes = new ArrayList<>();
if ((searchType & SearchParams.SEARCH_TYPE_POI) != 0) {
searchTypes.add(POI);
}
if ((searchType & SearchParams.SEARCH_TYPE_ADDRESS) != 0) {
searchTypes.add(CITY);
searchTypes.add(VILLAGE);
searchTypes.add(POSTCODE);
searchTypes.add(STREET);
searchTypes.add(HOUSE);
searchTypes.add(STREET_INTERSECTION);
}
searchSettings = searchSettings.setSearchTypes(searchTypes.toArray(new ObjectType[searchTypes.size()]));
core.search(searchQuery, false, null, searchSettings);
}
boolean setNavDrawerItems(String appPackage, List<net.osmand.aidl.navdrawer.NavDrawerItem> items) {
if (!TextUtils.isEmpty(appPackage) && items != null) {
if (items.isEmpty()) {
@ -1339,4 +1548,8 @@ public class OsmandAidlApi {
this.flags = flags;
}
}
public interface SearchCompleteCallback {
void onSearchComplete(List<SearchResult> resultSet);
}
}

View file

@ -2,10 +2,17 @@ package net.osmand.aidl;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.Parcelable;
import android.os.RemoteException;
import net.osmand.PlatformUtil;
import net.osmand.aidl.OsmandAidlApi.SearchCompleteCallback;
import net.osmand.aidl.calculateroute.CalculateRouteParams;
import net.osmand.aidl.favorite.AddFavoriteParams;
import net.osmand.aidl.favorite.RemoveFavoriteParams;
@ -35,23 +42,39 @@ import net.osmand.aidl.mapwidget.AddMapWidgetParams;
import net.osmand.aidl.mapwidget.RemoveMapWidgetParams;
import net.osmand.aidl.mapwidget.UpdateMapWidgetParams;
import net.osmand.aidl.navdrawer.SetNavDrawerItemsParams;
import net.osmand.aidl.navigation.MuteNavigationParams;
import net.osmand.aidl.navigation.NavigateGpxParams;
import net.osmand.aidl.navigation.NavigateParams;
import net.osmand.aidl.navigation.PauseNavigationParams;
import net.osmand.aidl.navigation.ResumeNavigationParams;
import net.osmand.aidl.navigation.StopNavigationParams;
import net.osmand.aidl.navigation.UnmuteNavigationParams;
import net.osmand.aidl.note.StartAudioRecordingParams;
import net.osmand.aidl.note.StartVideoRecordingParams;
import net.osmand.aidl.note.StopRecordingParams;
import net.osmand.aidl.note.TakePhotoNoteParams;
import net.osmand.aidl.search.SearchParams;
import net.osmand.aidl.search.SearchResult;
import net.osmand.plus.OsmandApplication;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class OsmandAidlService extends Service {
private static final Log LOG = PlatformUtil.getLog(OsmandAidlService.class);
private static final int MSG_RUN_SEARCH = 53;
private static final String DATA_KEY_RESULT_SET = "resultSet";
private ArrayList<IOsmAndAidlCallback> mRemoteCallbacks;
private ServiceHandler mHandler = null;
HandlerThread mHandlerThread = new HandlerThread("OsmAndAidlServiceThread");
OsmandApplication getApp() {
return (OsmandApplication) getApplication();
}
@ -63,15 +86,25 @@ public class OsmandAidlService extends Service {
@Override
public IBinder onBind(Intent intent) {
// Handler Thread handling all call back methods
mHandlerThread.start();
mHandler = new ServiceHandler(mHandlerThread.getLooper());
// Return the interface
return mBinder;
}
@Override
public void onCreate() {
super.onCreate();
mRemoteCallbacks = new ArrayList<>();
}
private final IOsmAndAidlInterface.Stub mBinder = new IOsmAndAidlInterface.Stub() {
private void handleException(Exception e) {
LOG.error("AIDL e.getMessage()", e);
}
@Override
@ -459,6 +492,56 @@ public class OsmandAidlService extends Service {
}
}
@Override
public boolean pauseNavigation(PauseNavigationParams params) throws RemoteException {
try {
return getApi("pauseNavigation").pauseNavigation();
} catch (Exception e) {
handleException(e);
return false;
}
}
@Override
public boolean resumeNavigation(ResumeNavigationParams params) throws RemoteException {
try {
return getApi("resumeNavigation").resumeNavigation();
} catch (Exception e) {
handleException(e);
return false;
}
}
@Override
public boolean stopNavigation(StopNavigationParams params) throws RemoteException {
try {
return getApi("stopNavigation").stopNavigation();
} catch (Exception e) {
handleException(e);
return false;
}
}
@Override
public boolean muteNavigation(MuteNavigationParams params) throws RemoteException {
try {
return getApi("muteNavigation").muteNavigation();
} catch (Exception e) {
handleException(e);
return false;
}
}
@Override
public boolean unmuteNavigation(UnmuteNavigationParams params) throws RemoteException {
try {
return getApi("unmuteNavigation").unmuteNavigation();
} catch (Exception e) {
handleException(e);
return false;
}
}
@Override
public boolean setNavDrawerItems(SetNavDrawerItemsParams params) throws RemoteException {
try {
@ -468,5 +551,77 @@ public class OsmandAidlService extends Service {
return false;
}
}
@Override
public boolean search(SearchParams params, final IOsmAndAidlCallback callback) throws RemoteException {
try {
return params != null && getApi("search").search(params.getSearchQuery(), params.getSearchType(),
params.getLatutude(), params.getLongitude(), params.getRadiusLevel(), params.getTotalLimit(), new SearchCompleteCallback() {
@Override
public void onSearchComplete(List<SearchResult> resultSet) {
Bundle data = new Bundle();
if (resultSet.size() > 0) {
data.putParcelableArrayList(DATA_KEY_RESULT_SET, new ArrayList<>(resultSet));
}
sendMsgToHandler(callback, MSG_RUN_SEARCH, data);
}
});
} catch (Exception e) {
handleException(e);
return false;
}
}
};
/**
* Create handler message to be sent
*/
void sendMsgToHandler(IOsmAndAidlCallback callback, int flag, Bundle data) {
mRemoteCallbacks.add(callback);
Message message = mHandler.obtainMessage();
message.arg1 = mRemoteCallbacks.size() - 1;
message.setData(data);
message.what = flag;
mHandler.sendMessage(message);
}
/**
* Handler class sending result in callback to respective
* application
*/
private class ServiceHandler extends Handler {
int callbackIndex = 0;
ServiceHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
callbackIndex = msg.arg1;
switch (msg.what) {
case MSG_RUN_SEARCH:
Bundle data = msg.getData();
List<SearchResult> resultSet;
if (data.containsKey(DATA_KEY_RESULT_SET)) {
resultSet = data.getParcelableArrayList(DATA_KEY_RESULT_SET);
} else {
resultSet = Collections.emptyList();
}
try {
mRemoteCallbacks.get(callbackIndex).onSearchComplete(resultSet);
} catch (RemoteException e) {
LOG.error("AIDL e.getMessage()", e);
}
break;
}
}
}
}

View file

@ -0,0 +1,3 @@
package net.osmand.aidl.navigation;
parcelable MuteNavigationParams;

View file

@ -0,0 +1,38 @@
package net.osmand.aidl.navigation;
import android.os.Parcel;
import android.os.Parcelable;
public class MuteNavigationParams implements Parcelable {
public MuteNavigationParams() {
}
public MuteNavigationParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<MuteNavigationParams> CREATOR = new Creator<MuteNavigationParams>() {
@Override
public MuteNavigationParams createFromParcel(Parcel in) {
return new MuteNavigationParams(in);
}
@Override
public MuteNavigationParams[] newArray(int size) {
return new MuteNavigationParams[size];
}
};
@Override
public void writeToParcel(Parcel out, int flags) {
}
private void readFromParcel(Parcel in) {
}
@Override
public int describeContents() {
return 0;
}
}

View file

@ -0,0 +1,3 @@
package net.osmand.aidl.navigation;
parcelable PauseNavigationParams;

View file

@ -0,0 +1,38 @@
package net.osmand.aidl.navigation;
import android.os.Parcel;
import android.os.Parcelable;
public class PauseNavigationParams implements Parcelable {
public PauseNavigationParams() {
}
public PauseNavigationParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<PauseNavigationParams> CREATOR = new Creator<PauseNavigationParams>() {
@Override
public PauseNavigationParams createFromParcel(Parcel in) {
return new PauseNavigationParams(in);
}
@Override
public PauseNavigationParams[] newArray(int size) {
return new PauseNavigationParams[size];
}
};
@Override
public void writeToParcel(Parcel out, int flags) {
}
private void readFromParcel(Parcel in) {
}
@Override
public int describeContents() {
return 0;
}
}

View file

@ -0,0 +1,3 @@
package net.osmand.aidl.navigation;
parcelable ResumeNavigationParams;

View file

@ -0,0 +1,38 @@
package net.osmand.aidl.navigation;
import android.os.Parcel;
import android.os.Parcelable;
public class ResumeNavigationParams implements Parcelable {
public ResumeNavigationParams() {
}
public ResumeNavigationParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<ResumeNavigationParams> CREATOR = new Creator<ResumeNavigationParams>() {
@Override
public ResumeNavigationParams createFromParcel(Parcel in) {
return new ResumeNavigationParams(in);
}
@Override
public ResumeNavigationParams[] newArray(int size) {
return new ResumeNavigationParams[size];
}
};
@Override
public void writeToParcel(Parcel out, int flags) {
}
private void readFromParcel(Parcel in) {
}
@Override
public int describeContents() {
return 0;
}
}

View file

@ -0,0 +1,3 @@
package net.osmand.aidl.navigation;
parcelable StopNavigationParams;

View file

@ -0,0 +1,38 @@
package net.osmand.aidl.navigation;
import android.os.Parcel;
import android.os.Parcelable;
public class StopNavigationParams implements Parcelable {
public StopNavigationParams() {
}
public StopNavigationParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<StopNavigationParams> CREATOR = new Creator<StopNavigationParams>() {
@Override
public StopNavigationParams createFromParcel(Parcel in) {
return new StopNavigationParams(in);
}
@Override
public StopNavigationParams[] newArray(int size) {
return new StopNavigationParams[size];
}
};
@Override
public void writeToParcel(Parcel out, int flags) {
}
private void readFromParcel(Parcel in) {
}
@Override
public int describeContents() {
return 0;
}
}

View file

@ -0,0 +1,3 @@
package net.osmand.aidl.navigation;
parcelable UnmuteNavigationParams;

View file

@ -0,0 +1,38 @@
package net.osmand.aidl.navigation;
import android.os.Parcel;
import android.os.Parcelable;
public class UnmuteNavigationParams implements Parcelable {
public UnmuteNavigationParams() {
}
public UnmuteNavigationParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<UnmuteNavigationParams> CREATOR = new Creator<UnmuteNavigationParams>() {
@Override
public UnmuteNavigationParams createFromParcel(Parcel in) {
return new UnmuteNavigationParams(in);
}
@Override
public UnmuteNavigationParams[] newArray(int size) {
return new UnmuteNavigationParams[size];
}
};
@Override
public void writeToParcel(Parcel out, int flags) {
}
private void readFromParcel(Parcel in) {
}
@Override
public int describeContents() {
return 0;
}
}

View file

@ -0,0 +1,3 @@
package net.osmand.aidl.search;
parcelable SearchParams;

View file

@ -0,0 +1,91 @@
package net.osmand.aidl.search;
import android.os.Parcel;
import android.os.Parcelable;
public class SearchParams implements Parcelable {
public static final int SEARCH_TYPE_POI = 1;
public static final int SEARCH_TYPE_ADDRESS = 2;
public static final int SEARCH_TYPE_ALL = SEARCH_TYPE_POI | SEARCH_TYPE_ADDRESS;
private String searchQuery;
private int searchType;
private double latutude;
private double longitude;
private int radiusLevel = 1;
private int totalLimit = -1;
public SearchParams(String searchQuery, int searchType, double latutude, double longitude, int radiusLevel, int totalLimit) {
this.searchQuery = searchQuery;
this.searchType = searchType;
this.latutude = latutude;
this.longitude = longitude;
this.radiusLevel = radiusLevel;
this.totalLimit = totalLimit;
}
public SearchParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<SearchParams> CREATOR = new Creator<SearchParams>() {
@Override
public SearchParams createFromParcel(Parcel in) {
return new SearchParams(in);
}
@Override
public SearchParams[] newArray(int size) {
return new SearchParams[size];
}
};
public String getSearchQuery() {
return searchQuery;
}
public int getSearchType() {
return searchType;
}
public double getLatutude() {
return latutude;
}
public double getLongitude() {
return longitude;
}
public int getRadiusLevel() {
return radiusLevel;
}
public int getTotalLimit() {
return totalLimit;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(searchQuery);
out.writeInt(searchType);
out.writeDouble(latutude);
out.writeDouble(longitude);
out.writeInt(radiusLevel);
out.writeInt(totalLimit);
}
private void readFromParcel(Parcel in) {
searchQuery = in.readString();
searchType = in.readInt();
latutude = in.readDouble();
longitude = in.readDouble();
radiusLevel = in.readInt();
totalLimit = in.readInt();
}
@Override
public int describeContents() {
return 0;
}
}

View file

@ -0,0 +1,3 @@
package net.osmand.aidl.search;
parcelable SearchResult;

View file

@ -0,0 +1,96 @@
package net.osmand.aidl.search;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.ArrayList;
import java.util.List;
public class SearchResult implements Parcelable {
private double latitude;
private double longitude;
private String localName;
private String localTypeName;
private String alternateName;
private List<String> otherNames = new ArrayList<>();
public SearchResult(double latitude, double longitude, String localName, String localTypeName,
String alternateName, List<String> otherNames) {
this.latitude = latitude;
this.longitude = longitude;
this.localName = localName;
this.localTypeName = localTypeName;
this.alternateName = alternateName;
if (otherNames != null) {
this.otherNames = otherNames;
}
}
public SearchResult(Parcel in) {
readFromParcel(in);
}
public static final Creator<SearchResult> CREATOR = new Creator<SearchResult>() {
@Override
public SearchResult createFromParcel(Parcel in) {
return new SearchResult(in);
}
@Override
public SearchResult[] newArray(int size) {
return new SearchResult[size];
}
};
public double getLatitude() {
return latitude;
}
public double getLongitude() {
return longitude;
}
public String getLocalName() {
return localName;
}
public String getLocalTypeName() {
return localTypeName;
}
public String getAlternateName() {
return alternateName;
}
public List<String> getOtherNames() {
return otherNames;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeDouble(latitude);
out.writeDouble(longitude);
out.writeString(localName);
out.writeString(localTypeName);
out.writeString(alternateName);
out.writeStringList(otherNames);
}
private void readFromParcel(Parcel in) {
latitude = in.readDouble();
longitude = in.readDouble();
localName = in.readString();
localTypeName = in.readString();
alternateName = in.readString();
in.readStringList(otherNames);
}
@Override
public int describeContents() {
return 0;
}
}

View file

@ -43,7 +43,7 @@ public class SQLiteTileSource implements ITileSource {
private int maxZoom = 17;
private boolean inversiveZoom = true; // BigPlanet
private boolean timeSupported = false;
private int expirationTimeMillis = -1; // never
private long expirationTimeMillis = -1; // never
private boolean isEllipsoid = false;
private String rule = null;
private String referer = null;
@ -208,14 +208,14 @@ public class SQLiteTileSource implements ITileSource {
timeSupported = "yes".equalsIgnoreCase(cursor.getString(timecolumn));
} else {
timeSupported = hasTimeColumn();
addInfoColumn("timecolumn", timeSupported?"yes" : "no");
addInfoColumn("timecolumn", timeSupported? "yes" : "no");
}
int expireminutes = list.indexOf("expireminutes");
this.expirationTimeMillis = -1;
if(expireminutes != -1) {
int minutes = (int) cursor.getInt(expireminutes);
if(minutes > 0) {
this.expirationTimeMillis = minutes * 60 * 1000;
this.expirationTimeMillis = minutes * 60 * 1000l;
}
} else {
addInfoColumn("expireminutes", "0");
@ -462,8 +462,9 @@ public class SQLiteTileSource implements ITileSource {
public void closeDB(){
LOG.debug("closeDB");
bshInterpreter = null;
if(timeSupported)
if(timeSupported) {
clearOld();
}
if(db != null){
db.close();
db = null;
@ -472,12 +473,15 @@ public class SQLiteTileSource implements ITileSource {
public void clearOld() {
SQLiteConnection db = getDatabase();
if(db == null || db.isReadOnly()){
long expiration = getExpirationTimeMillis();
if(db == null || db.isReadOnly() || expiration <= 0){
return;
}
LOG.debug("DELETE FROM tiles WHERE time<" + (System.currentTimeMillis() - getExpirationTimeMillis()));
db.execSQL("DELETE FROM tiles WHERE time<"+(System.currentTimeMillis()-getExpirationTimeMillis())); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
db.execSQL("VACUUM"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
String sql = "DELETE FROM tiles WHERE time < "+
(System.currentTimeMillis() - expiration);
LOG.debug(sql);
db.execSQL(sql);
db.execSQL("VACUUM");
}
@Override
@ -498,10 +502,10 @@ public class SQLiteTileSource implements ITileSource {
if(expirationTimeMillis < 0) {
return -1;
}
return expirationTimeMillis / (60 * 1000);
return (int) (expirationTimeMillis / (60 * 1000));
}
public int getExpirationTimeMillis() {
public long getExpirationTimeMillis() {
return expirationTimeMillis;
}

View file

@ -47,6 +47,11 @@ public class ExternalApiHelper {
public static final String API_CMD_NAVIGATE_GPX = "navigate_gpx";
public static final String API_CMD_NAVIGATE = "navigate";
public static final String API_CMD_PAUSE_NAVIGATION = "pause_navigation";
public static final String API_CMD_RESUME_NAVIGATION = "resume_navigation";
public static final String API_CMD_STOP_NAVIGATION = "stop_navigation";
public static final String API_CMD_MUTE_NAVIGATION = "mute_navigation";
public static final String API_CMD_UNMUTE_NAVIGATION = "unmute_navigation";
public static final String API_CMD_RECORD_AUDIO = "record_audio";
public static final String API_CMD_RECORD_VIDEO = "record_video";
@ -86,6 +91,7 @@ public class ExternalApiHelper {
public static final String PARAM_START_LON = "start_lon";
public static final String PARAM_DEST_LAT = "dest_lat";
public static final String PARAM_DEST_LON = "dest_lon";
public static final String PARAM_DEST_SEARCH_QUERY = "dest_search_query";
public static final String PARAM_PROFILE = "profile";
public static final String PARAM_VERSION = "version";
@ -246,9 +252,20 @@ public class ExternalApiHelper {
startDesc = null;
}
double destLat = Double.parseDouble(uri.getQueryParameter(PARAM_DEST_LAT));
double destLon = Double.parseDouble(uri.getQueryParameter(PARAM_DEST_LON));
final LatLon dest = new LatLon(destLat, destLon);
String destSearchQuery = uri.getQueryParameter(PARAM_DEST_SEARCH_QUERY);
String destLatStr = uri.getQueryParameter(PARAM_DEST_LAT);
String destLonStr = uri.getQueryParameter(PARAM_DEST_LON);
final LatLon dest;
if (!Algorithms.isEmpty(destLatStr) && !Algorithms.isEmpty(destLonStr)) {
double destLat = Double.parseDouble(destLatStr);
double destLon = Double.parseDouble(destLonStr);
dest = new LatLon(destLat, destLon);
} else {
dest = null;
}
if (!Algorithms.isEmpty(destSearchQuery)) {
}
final PointDescription destDesc = new PointDescription(PointDescription.POINT_TYPE_LOCATION, destName);
boolean force = uri.getBooleanQueryParameter(PARAM_FORCE, false);
@ -270,6 +287,35 @@ public class ExternalApiHelper {
}
}
} else if (API_CMD_PAUSE_NAVIGATION.equals(cmd)) {
RoutingHelper routingHelper = mapActivity.getRoutingHelper();
if (routingHelper.isRouteCalculated() && !routingHelper.isRoutePlanningMode()) {
routingHelper.setRoutePlanningMode(true);
routingHelper.setFollowingMode(false);
routingHelper.setPauseNavigation(true);
resultCode = Activity.RESULT_OK;
}
} else if (API_CMD_RESUME_NAVIGATION.equals(cmd)) {
RoutingHelper routingHelper = mapActivity.getRoutingHelper();
if (routingHelper.isRouteCalculated() && routingHelper.isRoutePlanningMode()) {
routingHelper.setRoutePlanningMode(false);
routingHelper.setFollowingMode(true);
resultCode = Activity.RESULT_OK;
}
} else if (API_CMD_STOP_NAVIGATION.equals(cmd)) {
RoutingHelper routingHelper = mapActivity.getRoutingHelper();
if (routingHelper.isPauseNavigation() || routingHelper.isFollowingMode()) {
mapActivity.getMapLayers().getMapControlsLayer().stopNavigationWithoutConfirm();
resultCode = Activity.RESULT_OK;
}
} else if (API_CMD_MUTE_NAVIGATION.equals(cmd)) {
mapActivity.getMyApplication().getSettings().VOICE_MUTE.set(true);
mapActivity.getRoutingHelper().getVoiceRouter().setMute(true);
resultCode = Activity.RESULT_OK;
} else if (API_CMD_UNMUTE_NAVIGATION.equals(cmd)) {
mapActivity.getMyApplication().getSettings().VOICE_MUTE.set(false);
mapActivity.getRoutingHelper().getVoiceRouter().setMute(false);
resultCode = Activity.RESULT_OK;
} else if (API_CMD_RECORD_AUDIO.equals(cmd)
|| API_CMD_RECORD_VIDEO.equals(cmd)
|| API_CMD_RECORD_PHOTO.equals(cmd)

View file

@ -13,7 +13,9 @@ import java.io.File;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.TreeSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
@ -71,6 +73,10 @@ public class MapRenderRepositories {
private final static Log log = PlatformUtil.getLog(MapRenderRepositories.class);
private final OsmandApplication context;
private final static int zoomOnlyForBasemaps = 11;
private final static int zoomToOverviewLocalNames = 6;
private final static Set<String> languagesNotTransliterateOnBasemap = new TreeSet<>(
Arrays.asList("ru", "uk", "be", "bg", "mk", "sr")
);
static int zoomForBaseRouteRendering = 14;
private Handler handler;
@ -730,17 +736,14 @@ public class MapRenderRepositories {
currentRenderingContext.width = requestedBox.getPixWidth();
currentRenderingContext.height = requestedBox.getPixHeight();
currentRenderingContext.nightMode = nightMode;
if(requestedBox.getZoom() <= zoomOnlyForBasemaps &&
if(requestedBox.getZoom() <= zoomToOverviewLocalNames &&
"".equals(prefs.MAP_PREFERRED_LOCALE.get())) {
currentRenderingContext.preferredLocale = app.getLanguage();
currentRenderingContext.transliterate = !"ru".equals(app.getLanguage()) && !"uk".equals(app.getLanguage()) && !"be".equals(app.getLanguage())
&& !"bg".equals(app.getLanguage()) && !"mk".equals(app.getLanguage()) && !"sr".equals(app.getLanguage());
currentRenderingContext.transliterate =
!languagesNotTransliterateOnBasemap.contains(app.getLanguage());
} else {
currentRenderingContext.preferredLocale = prefs.MAP_PREFERRED_LOCALE.get();
currentRenderingContext.transliterate = prefs.MAP_TRANSLITERATE_NAMES.get();
if(currentRenderingContext.preferredLocale.equals("en")) {
currentRenderingContext.transliterate = true;
}
}
final float mapDensity = (float) requestedBox.getMapDensity();
currentRenderingContext.setDensityValue(mapDensity);
@ -770,7 +773,7 @@ public class MapRenderRepositories {
this.prevBmp = this.bmp;
this.prevBmpLocation = this.bmpLocation;
// necessary for transparent, otherwise 2 times smaller
Config cfg = transparent ? Config.ARGB_8888 : Config.RGB_565;
Config cfg = true ? Config.ARGB_8888 : Config.RGB_565;
if (reuse != null && reuse.getWidth() == currentRenderingContext.width && reuse.getHeight() == currentRenderingContext.height &&
cfg == reuse.getConfig()) {
bmp = reuse;

View file

@ -205,7 +205,7 @@ public abstract class TilesCache<T> {
protected boolean isExpired(TileLoadDownloadRequest req, long lastModified) {
long time = System.currentTimeMillis();
int ts = req.tileSource.getExpirationTimeMillis();
long ts = req.tileSource.getExpirationTimeMillis();
return ts != -1 && req.url != null && time - lastModified > ts;
}

View file

@ -363,6 +363,11 @@ public class MapControlsLayer extends OsmandMapLayer {
}
}
public void stopNavigationWithoutConfirm() {
mapRouteInfoMenu.hide();
mapActivity.getMapActions().stopNavigationWithoutConfirm();
}
protected void clickRouteCancel() {
stopNavigation();
}

View file

@ -573,7 +573,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
}
if (bufferBitmapTmp == null || tileBox.getPixHeight() != bufferBitmapTmp.getHeight()
|| tileBox.getPixWidth() != bufferBitmapTmp.getWidth()) {
bufferBitmapTmp = Bitmap.createBitmap(tileBox.getPixWidth(), tileBox.getPixHeight(), Config.RGB_565);
bufferBitmapTmp = Bitmap.createBitmap(tileBox.getPixWidth(), tileBox.getPixHeight(), Config.ARGB_8888);
}
long start = SystemClock.elapsedRealtime();
final QuadPoint c = tileBox.getCenterPixelPoint();