Merge branch 'master' of ssh://github.com/osmandapp/Osmand into ShareLocationImprovements
This commit is contained in:
commit
ad7bd6d1c5
9 changed files with 322 additions and 27 deletions
|
@ -7,11 +7,8 @@ import android.net.ConnectivityManager
|
||||||
import android.net.NetworkInfo
|
import android.net.NetworkInfo
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import net.osmand.telegram.helpers.OsmandAidlHelper
|
import net.osmand.telegram.helpers.*
|
||||||
import net.osmand.telegram.helpers.OsmandAidlHelper.OsmandHelperListener
|
import net.osmand.telegram.helpers.OsmandAidlHelper.OsmandHelperListener
|
||||||
import net.osmand.telegram.helpers.ShareLocationHelper
|
|
||||||
import net.osmand.telegram.helpers.ShowLocationHelper
|
|
||||||
import net.osmand.telegram.helpers.TelegramHelper
|
|
||||||
import net.osmand.telegram.notifications.NotificationHelper
|
import net.osmand.telegram.notifications.NotificationHelper
|
||||||
import net.osmand.telegram.utils.AndroidUtils
|
import net.osmand.telegram.utils.AndroidUtils
|
||||||
import net.osmand.telegram.utils.UiUtils
|
import net.osmand.telegram.utils.UiUtils
|
||||||
|
@ -26,6 +23,7 @@ class TelegramApplication : Application(), OsmandHelperListener {
|
||||||
lateinit var notificationHelper: NotificationHelper private set
|
lateinit var notificationHelper: NotificationHelper private set
|
||||||
lateinit var osmandAidlHelper: OsmandAidlHelper private set
|
lateinit var osmandAidlHelper: OsmandAidlHelper private set
|
||||||
lateinit var locationProvider: TelegramLocationProvider private set
|
lateinit var locationProvider: TelegramLocationProvider private set
|
||||||
|
lateinit var messagesDbHelper: MessagesDbHelper private set
|
||||||
|
|
||||||
var telegramService: TelegramService? = null
|
var telegramService: TelegramService? = null
|
||||||
|
|
||||||
|
@ -37,6 +35,7 @@ class TelegramApplication : Application(), OsmandHelperListener {
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
telegramHelper.appDir = filesDir.absolutePath
|
telegramHelper.appDir = filesDir.absolutePath
|
||||||
|
telegramHelper.init()
|
||||||
|
|
||||||
settings = TelegramSettings(this)
|
settings = TelegramSettings(this)
|
||||||
telegramHelper.messageActiveTimeSec = settings.locHistoryTime
|
telegramHelper.messageActiveTimeSec = settings.locHistoryTime
|
||||||
|
@ -61,6 +60,7 @@ class TelegramApplication : Application(), OsmandHelperListener {
|
||||||
showLocationHelper = ShowLocationHelper(this)
|
showLocationHelper = ShowLocationHelper(this)
|
||||||
notificationHelper = NotificationHelper(this)
|
notificationHelper = NotificationHelper(this)
|
||||||
locationProvider = TelegramLocationProvider(this)
|
locationProvider = TelegramLocationProvider(this)
|
||||||
|
messagesDbHelper = MessagesDbHelper(this)
|
||||||
|
|
||||||
if (settings.hasAnyChatToShareLocation() && AndroidUtils.isLocationPermissionAvailable(this)) {
|
if (settings.hasAnyChatToShareLocation() && AndroidUtils.isLocationPermissionAvailable(this)) {
|
||||||
shareLocationHelper.startSharingLocation()
|
shareLocationHelper.startSharingLocation()
|
||||||
|
|
|
@ -0,0 +1,118 @@
|
||||||
|
package net.osmand.telegram.helpers
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.database.sqlite.SQLiteDatabase
|
||||||
|
import android.database.sqlite.SQLiteOpenHelper
|
||||||
|
import net.osmand.telegram.TelegramApplication
|
||||||
|
import org.drinkless.td.libcore.telegram.TdApi
|
||||||
|
|
||||||
|
class MessagesDbHelper(val app: TelegramApplication) {
|
||||||
|
|
||||||
|
private val messages = HashSet<Message>()
|
||||||
|
|
||||||
|
private val sqliteHelper: SQLiteHelper
|
||||||
|
|
||||||
|
init {
|
||||||
|
sqliteHelper = SQLiteHelper(app)
|
||||||
|
sqliteHelper.getMessages().forEach {
|
||||||
|
app.telegramHelper.loadMessage(it.chatId, it.messageId)
|
||||||
|
}
|
||||||
|
app.telegramHelper.addIncomingMessagesListener(object :
|
||||||
|
TelegramHelper.TelegramIncomingMessagesListener {
|
||||||
|
|
||||||
|
override fun onReceiveChatLocationMessages(
|
||||||
|
chatId: Long, vararg messages: TdApi.Message
|
||||||
|
) {
|
||||||
|
messages.forEach { addMessage(chatId, it.id) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDeleteChatLocationMessages(chatId: Long, messages: List<TdApi.Message>) {
|
||||||
|
messages.forEach { removeMessage(chatId, it.id) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun updateLocationMessages() {}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fun saveMessages() {
|
||||||
|
sqliteHelper.clearMessages()
|
||||||
|
synchronized(messages) {
|
||||||
|
sqliteHelper.addMessages(messages)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addMessage(chatId: Long, messageId: Long) {
|
||||||
|
synchronized(messages) {
|
||||||
|
messages.add(Message(chatId, messageId))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun removeMessage(chatId: Long, messageId: Long) {
|
||||||
|
synchronized(messages) {
|
||||||
|
messages.remove(Message(chatId, messageId))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class SQLiteHelper(context: Context) :
|
||||||
|
SQLiteOpenHelper(context, DB_NAME, null, DB_VERSION) {
|
||||||
|
|
||||||
|
override fun onCreate(db: SQLiteDatabase) {
|
||||||
|
db.execSQL(MESSAGES_TABLE_CREATE)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
|
||||||
|
db.execSQL(MESSAGES_TABLE_DELETE)
|
||||||
|
onCreate(db)
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun addMessages(messages: Set<Message>) {
|
||||||
|
messages.forEach {
|
||||||
|
writableDatabase?.execSQL(MESSAGES_TABLE_INSERT, arrayOf(it.chatId, it.messageId))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun getMessages(): Set<Message> {
|
||||||
|
val res = HashSet<Message>()
|
||||||
|
readableDatabase?.rawQuery(MESSAGES_TABLE_SELECT, null)?.apply {
|
||||||
|
if (moveToFirst()) {
|
||||||
|
do {
|
||||||
|
res.add(Message(getLong(0), getLong(1)))
|
||||||
|
} while (moveToNext())
|
||||||
|
}
|
||||||
|
close()
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun clearMessages() {
|
||||||
|
writableDatabase?.execSQL(MESSAGES_TABLE_CLEAR)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
private const val DB_NAME = "messages.db"
|
||||||
|
private const val DB_VERSION = 1
|
||||||
|
|
||||||
|
private const val MESSAGES_TABLE_NAME = "messages"
|
||||||
|
private const val MESSAGES_COL_CHAT_ID = "chat_id"
|
||||||
|
private const val MESSAGES_COL_MESSAGE_ID = "message_id"
|
||||||
|
|
||||||
|
private const val MESSAGES_TABLE_CREATE =
|
||||||
|
"CREATE TABLE IF NOT EXISTS $MESSAGES_TABLE_NAME (" +
|
||||||
|
"$MESSAGES_COL_CHAT_ID LONG, " +
|
||||||
|
"$MESSAGES_COL_MESSAGE_ID LONG)"
|
||||||
|
|
||||||
|
private const val MESSAGES_TABLE_DELETE = "DROP TABLE IF EXISTS $MESSAGES_TABLE_NAME"
|
||||||
|
|
||||||
|
private const val MESSAGES_TABLE_SELECT =
|
||||||
|
"SELECT $MESSAGES_COL_CHAT_ID, $MESSAGES_COL_MESSAGE_ID FROM $MESSAGES_TABLE_NAME"
|
||||||
|
|
||||||
|
private const val MESSAGES_TABLE_CLEAR = "DELETE FROM $MESSAGES_TABLE_NAME"
|
||||||
|
|
||||||
|
private const val MESSAGES_TABLE_INSERT = "INSERT INTO $MESSAGES_TABLE_NAME (" +
|
||||||
|
"$MESSAGES_COL_CHAT_ID, $MESSAGES_COL_MESSAGE_ID) VALUES (?, ?)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private data class Message(val chatId: Long, val messageId: Long)
|
||||||
|
}
|
|
@ -292,13 +292,20 @@ class TelegramHelper private constructor() {
|
||||||
return if (libraryLoaded) {
|
return if (libraryLoaded) {
|
||||||
// create client
|
// create client
|
||||||
client = Client.create(UpdatesHandler(), null, null)
|
client = Client.create(UpdatesHandler(), null, null)
|
||||||
client!!.send(TdApi.GetAuthorizationState(), defaultHandler)
|
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun requestAuthorizationState() {
|
||||||
|
client?.send(TdApi.GetAuthorizationState()) { obj ->
|
||||||
|
if (obj is TdApi.AuthorizationState) {
|
||||||
|
onAuthorizationStateUpdated(obj)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun isInit() = client != null && haveAuthorization
|
fun isInit() = client != null && haveAuthorization
|
||||||
|
|
||||||
fun getUserPhotoPath(user: TdApi.User): String? {
|
fun getUserPhotoPath(user: TdApi.User): String? {
|
||||||
|
@ -473,6 +480,10 @@ class TelegramHelper private constructor() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun loadMessage(chatId: Long, messageId: Long) {
|
||||||
|
requestMessage(chatId, messageId, this@TelegramHelper::addNewMessage)
|
||||||
|
}
|
||||||
|
|
||||||
private fun requestMessage(chatId: Long, messageId: Long, onComplete: (TdApi.Message) -> Unit) {
|
private fun requestMessage(chatId: Long, messageId: Long, onComplete: (TdApi.Message) -> Unit) {
|
||||||
client?.send(TdApi.GetMessage(chatId, messageId)) { obj ->
|
client?.send(TdApi.GetMessage(chatId, messageId)) { obj ->
|
||||||
when (obj.constructor) {
|
when (obj.constructor) {
|
||||||
|
|
|
@ -117,6 +117,8 @@ class MainActivity : AppCompatActivity(), TelegramListener, ActionButtonsListene
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
telegramHelper.listener = this
|
||||||
|
telegramHelper.requestAuthorizationState()
|
||||||
|
|
||||||
if (osmandAidlHelper.isOsmandBound() && !osmandAidlHelper.isOsmandConnected()) {
|
if (osmandAidlHelper.isOsmandBound() && !osmandAidlHelper.isOsmandConnected()) {
|
||||||
osmandAidlHelper.connectOsmand()
|
osmandAidlHelper.connectOsmand()
|
||||||
|
@ -138,9 +140,8 @@ class MainActivity : AppCompatActivity(), TelegramListener, ActionButtonsListene
|
||||||
super.onResume()
|
super.onResume()
|
||||||
paused = false
|
paused = false
|
||||||
|
|
||||||
|
if (telegramHelper.listener != this) {
|
||||||
telegramHelper.listener = this
|
telegramHelper.listener = this
|
||||||
if (!telegramHelper.isInit()) {
|
|
||||||
telegramHelper.init()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
app.locationProvider.checkIfLastKnownLocationIsValid()
|
app.locationProvider.checkIfLastKnownLocationIsValid()
|
||||||
|
@ -167,6 +168,7 @@ class MainActivity : AppCompatActivity(), TelegramListener, ActionButtonsListene
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
super.onStop()
|
super.onStop()
|
||||||
settings.save()
|
settings.save()
|
||||||
|
app.messagesDbHelper.saveMessages()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
|
@ -253,7 +255,7 @@ class MainActivity : AppCompatActivity(), TelegramListener, ActionButtonsListene
|
||||||
if (telegramHelper.getTelegramAuthorizationState() != TelegramAuthorizationState.CLOSED) {
|
if (telegramHelper.getTelegramAuthorizationState() != TelegramAuthorizationState.CLOSED) {
|
||||||
telegramHelper.logout()
|
telegramHelper.logout()
|
||||||
}
|
}
|
||||||
telegramHelper.init()
|
// FIXME: update UI
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun logoutTelegram(silent: Boolean = false) {
|
private fun logoutTelegram(silent: Boolean = false) {
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
<!--<asset source="voice/pt-br/pt-br_tts.js" destination="voice/pt-br-tts/pt-br_tts.js" mode="overwriteOnlyIfExists" />-->
|
<!--<asset source="voice/pt-br/pt-br_tts.js" destination="voice/pt-br-tts/pt-br_tts.js" mode="overwriteOnlyIfExists" />-->
|
||||||
<!--<asset source="voice/ro/ro_tts.js" destination="voice/ro-tts/ro_tts.js" mode="overwriteOnlyIfExists" />-->
|
<!--<asset source="voice/ro/ro_tts.js" destination="voice/ro-tts/ro_tts.js" mode="overwriteOnlyIfExists" />-->
|
||||||
<asset source="voice/ru/ru_tts.js" destination="voice/ru-tts/ru_tts.js" mode="alwaysOverwriteOrCopy" />
|
<asset source="voice/ru/ru_tts.js" destination="voice/ru-tts/ru_tts.js" mode="alwaysOverwriteOrCopy" />
|
||||||
<!--<asset source="voice/sc/sc_tts.js" destination="voice/sc-tts/sc_tts.js" mode="overwriteOnlyIfExists" />-->
|
<asset source="voice/sc/sc_tts.js" destination="voice/sc-tts/sc_tts.js" mode="overwriteOnlyIfExists" />
|
||||||
<!--<asset source="voice/sk/sk_tts.js" destination="voice/sk-tts/sk_tts.js" mode="overwriteOnlyIfExists" />-->
|
<!--<asset source="voice/sk/sk_tts.js" destination="voice/sk-tts/sk_tts.js" mode="overwriteOnlyIfExists" />-->
|
||||||
<!--<asset source="voice/sl/sl_tts.js" destination="voice/sl-tts/sl_tts.js" mode="overwriteOnlyIfExists" />-->
|
<!--<asset source="voice/sl/sl_tts.js" destination="voice/sl-tts/sl_tts.js" mode="overwriteOnlyIfExists" />-->
|
||||||
<!--<asset source="voice/sv/sv_tts.js" destination="voice/sv-tts/sv_tts.js" mode="overwriteOnlyIfExists" />-->
|
<!--<asset source="voice/sv/sv_tts.js" destination="voice/sv-tts/sv_tts.js" mode="overwriteOnlyIfExists" />-->
|
||||||
|
|
|
@ -597,7 +597,7 @@
|
||||||
<string name="poi_camp_site">Kemp</string>
|
<string name="poi_camp_site">Kemp</string>
|
||||||
<string name="poi_caravan_site">Autokemp</string>
|
<string name="poi_caravan_site">Autokemp</string>
|
||||||
<string name="poi_picnic_site">Místo pro piknik</string>
|
<string name="poi_picnic_site">Místo pro piknik</string>
|
||||||
<string name="poi_spring">Pramen</string>
|
<string name="poi_spring">Studánka (pramen)</string>
|
||||||
<string name="poi_hot_spring">Horký pramen</string>
|
<string name="poi_hot_spring">Horký pramen</string>
|
||||||
<string name="poi_geyser">Gejzír</string>
|
<string name="poi_geyser">Gejzír</string>
|
||||||
<string name="poi_tomb">Hrobka</string>
|
<string name="poi_tomb">Hrobka</string>
|
||||||
|
@ -3700,14 +3700,14 @@
|
||||||
<string name="poi_socket_as3112_current">Maximální proud zásuvky australského typu AS 3112 [A]</string>
|
<string name="poi_socket_as3112_current">Maximální proud zásuvky australského typu AS 3112 [A]</string>
|
||||||
<string name="poi_socket_as3112_output">Maximální výkon zásuvky australského typu AS 3112 [kW]</string>
|
<string name="poi_socket_as3112_output">Maximální výkon zásuvky australského typu AS 3112 [kW]</string>
|
||||||
|
|
||||||
<string name="poi_car_yes">Vhodné pro Osobní automobily</string>
|
<string name="poi_car_yes">Osobní auta: Ano</string>
|
||||||
<string name="poi_car_no">Nevhodné pro Osobní automobily</string>
|
<string name="poi_car_no">Osobní auta: Ne</string>
|
||||||
<string name="poi_bicycle_yes">Vhodné pro jízdní kola</string>
|
<string name="poi_bicycle_yes">Jízdní kola: Ano</string>
|
||||||
<string name="poi_bicycle_no">Nevhodné pro jízdní kola</string>
|
<string name="poi_bicycle_no">Jízdní kola: Ne</string>
|
||||||
<string name="poi_scooter_yes">Vhodné pro skútry</string>
|
<string name="poi_scooter_yes">Skútry a motorky: Ano</string>
|
||||||
<string name="poi_scooter_no">Nevhodné pro skútry</string>
|
<string name="poi_scooter_no">Skútry a motorky: Ne</string>
|
||||||
<string name="poi_truck_yes">Vhodné pro nákladní automobily</string>
|
<string name="poi_truck_yes">Nákladní automobily: Ano</string>
|
||||||
<string name="poi_truck_no">Nevhodné pro nákladní automobily</string>
|
<string name="poi_truck_no">Nákladní automobily: Ne</string>
|
||||||
|
|
||||||
<string name="poi_parking_fee_yes">S poplatkem za parkování</string>
|
<string name="poi_parking_fee_yes">S poplatkem za parkování</string>
|
||||||
<string name="poi_parking_fee_no">Bez poplatku za parkování</string>
|
<string name="poi_parking_fee_no">Bez poplatku za parkování</string>
|
||||||
|
|
|
@ -989,7 +989,7 @@ Proporcionální paměť %4$s MB (limit Androidu %5$s MB, Dalvik %6$s MB).</stri
|
||||||
<string name="shared_string_more_actions">Další akce</string>
|
<string name="shared_string_more_actions">Další akce</string>
|
||||||
<string name="monitoring_settings_descr">Konfigurace záznamů vašich cest.</string>
|
<string name="monitoring_settings_descr">Konfigurace záznamů vašich cest.</string>
|
||||||
<string name="install_paid">Instalovat plnou verzi</string>
|
<string name="install_paid">Instalovat plnou verzi</string>
|
||||||
<string name="cancel_navigation">Zastavit navigaci</string>
|
<string name="cancel_navigation">Ukončit navigaci</string>
|
||||||
<string name="use_kalman_filter_compass_descr">Sníží šum v hodnotách z kompasu, ale zpomalí změny směru.</string>
|
<string name="use_kalman_filter_compass_descr">Sníží šum v hodnotách z kompasu, ale zpomalí změny směru.</string>
|
||||||
<string name="use_kalman_filter_compass">Použít Kalmanův filtr</string>
|
<string name="use_kalman_filter_compass">Použít Kalmanův filtr</string>
|
||||||
<string name="use_magnetic_sensor">Používat magnetický senzor</string>
|
<string name="use_magnetic_sensor">Používat magnetický senzor</string>
|
||||||
|
@ -2709,7 +2709,7 @@ Zobrazená oblast: %1$s x %2$s</string>
|
||||||
<string name="north_abbreviation">S</string>
|
<string name="north_abbreviation">S</string>
|
||||||
<string name="optional_point_name">Volitelný název bodu</string>
|
<string name="optional_point_name">Volitelný název bodu</string>
|
||||||
<string name="transport_nearby_routes_within">Trasy v okruhu</string>
|
<string name="transport_nearby_routes_within">Trasy v okruhu</string>
|
||||||
<string name="transport_nearby_routes">POBLÍŽ</string>
|
<string name="transport_nearby_routes">V okruhu</string>
|
||||||
<string name="distance_farthest">Vzdálenost: nejvzdálenější jako první</string>
|
<string name="distance_farthest">Vzdálenost: nejvzdálenější jako první</string>
|
||||||
<string name="distance_nearest">Vzdálenost: nejbližší jako první</string>
|
<string name="distance_nearest">Vzdálenost: nejbližší jako první</string>
|
||||||
<string name="rendering_attr_whiteWaterSports_name">Divoká voda</string>
|
<string name="rendering_attr_whiteWaterSports_name">Divoká voda</string>
|
||||||
|
@ -2741,9 +2741,9 @@ Zobrazená oblast: %1$s x %2$s</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 & 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="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 & 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="group_deleted">Skupina smazána</string>
|
||||||
<string name="clear_all_intermediates">Smazat všechny mezicíle</string>
|
<string name="clear_all_intermediates">Smazat všechny mezicíle</string>
|
||||||
<string name="select_waypoints_category_description">Můžete přidat všechny mezicíle na trase, nebo vybrat jednotlivé kategorie.</string>
|
<string name="select_waypoints_category_description">Přidat všechny mezicíle na trase nebo vybrat jednotlivé kategorie.</string>
|
||||||
<string name="shared_string_total">Celkem</string>
|
<string name="shared_string_total">Celkem</string>
|
||||||
<string name="nothing_found_in_radius">Nebylo nalezeno nic v okruhu:</string>
|
<string name="nothing_found_in_radius">Nebylo nic nalezeno:</string>
|
||||||
<string name="shared_string_result">Výsledek</string>
|
<string name="shared_string_result">Výsledek</string>
|
||||||
<string name="use_two_digits_longitude">Použít dvě číslice pro délku</string>
|
<string name="use_two_digits_longitude">Použít dvě číslice pro délku</string>
|
||||||
<string name="shared_string_travel_guides">Cesta</string>
|
<string name="shared_string_travel_guides">Cesta</string>
|
||||||
|
@ -2823,4 +2823,51 @@ Zobrazená oblast: %1$s x %2$s</string>
|
||||||
<string name="error_notification_desc">Zašlete prosím kopii obrazovky s touto chybou na email support@osmand.net</string>
|
<string name="error_notification_desc">Zašlete prosím kopii obrazovky s touto chybou na email support@osmand.net</string>
|
||||||
<string name="quick_action_edit_actions">Upravit akce</string>
|
<string name="quick_action_edit_actions">Upravit akce</string>
|
||||||
<string name="get_osmand_live">Získejte OsmAnd Live pro odemknutí všech funkcí: Denní aktulizace mapových podkladů s neomezeným počtem stahování, všechny placené zásuvné moduly, propojení s Wikipedia, Wikivoyage a mnoho dalšího.</string>
|
<string name="get_osmand_live">Získejte OsmAnd Live pro odemknutí všech funkcí: Denní aktulizace mapových podkladů s neomezeným počtem stahování, všechny placené zásuvné moduly, propojení s Wikipedia, Wikivoyage a mnoho dalšího.</string>
|
||||||
</resources>
|
<string name="thank_you_for_feedback">Děkujeme za Vaši zpětnou vazbu</string>
|
||||||
|
<string name="poi_cannot_be_found">Na Váš dotaz nebylo nic nalezeno.</string>
|
||||||
|
<string name="search_no_results_feedback">Žádný výsledek vyhledávání?
|
||||||
|
\nDejte nám o tom vědět, ať to můžeme zlepšit</string>
|
||||||
|
<string name="release_3_1">• Navigace: opravený indikátor průběhu, přidána možnost pro rychlé prohození začátku a konce trasy
|
||||||
|
\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
|
||||||
|
\n • Vylepšené vykreslování článků Wikipedie a Wikivoyage, upravené soubory jsou již k dispozici ke stažení
|
||||||
|
\n
|
||||||
|
\n • Nabídka: opraveny barvy znaků v nočním režimu, opraveny velikosti dodatečných menu
|
||||||
|
\n
|
||||||
|
\n • Lodní navigace: nově podpora vodních cest
|
||||||
|
\n
|
||||||
|
\n • Menší opravy nahlášených chyb
|
||||||
|
\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">Odeslat data?</string>
|
||||||
|
<string name="shared_string_world">Celý svět</string>
|
||||||
|
<string name="point_deleted">Bod %1$s byl smazán</string>
|
||||||
|
<string name="coord_input_edit_point">Upravit bod</string>
|
||||||
|
<string name="coord_input_add_point">Přidat bod</string>
|
||||||
|
<string name="coord_input_save_as_track">Uložit jako stopu</string>
|
||||||
|
<string name="coord_input_save_as_track_descr">Bylo přidáno %1$s bodů. Zadejte název a klepněte na \"Uložit\".</string>
|
||||||
|
<string name="unirs_render_descr">Upravený základní styl pro zvýšení kontrastu pěších a cyklistických cest. Používá starší barvy Mapnik.</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="how_to_open_link">Jak otevřít odkaz?</string>
|
||||||
|
<string name="read_wikipedia_offline">Číst Wikipedia bez internetu</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="paid_app">Placená aplikace</string>
|
||||||
|
<string name="paid_plugin">Placený zásuvný 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_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="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>
|
||||||
|
</resources>
|
||||||
|
|
|
@ -657,8 +657,8 @@
|
||||||
<string name="settings_preset_descr">نمای نقشه و تنظیمات راهبری برای هر پروفایل جداگانه ذخیره میشود. پروفایل پیشفرض خود را اینجا تنظیم کنید.</string>
|
<string name="settings_preset_descr">نمای نقشه و تنظیمات راهبری برای هر پروفایل جداگانه ذخیره میشود. پروفایل پیشفرض خود را اینجا تنظیم کنید.</string>
|
||||||
<string name="osmand_background_plugin_description">تنظیمات مربوط به فعالسازی ردگیری و راهبری در پسزمینه را نشان میدهد که با ارسال پیامهای بیدارباش متناوب به جیپیاس دستگاه این کار را انجام میدهد (با نمایشگر خاموش).</string>
|
<string name="osmand_background_plugin_description">تنظیمات مربوط به فعالسازی ردگیری و راهبری در پسزمینه را نشان میدهد که با ارسال پیامهای بیدارباش متناوب به جیپیاس دستگاه این کار را انجام میدهد (با نمایشگر خاموش).</string>
|
||||||
<string name="av_def_action_choose">انتخاب برحسب تقاضا</string>
|
<string name="av_def_action_choose">انتخاب برحسب تقاضا</string>
|
||||||
<string name="audionotes_location_not_defined">مکانی برای یادداشتگذاری تعیین نشده است.
|
<string name="audionotes_location_not_defined">مکانی برای یادداشتگذاری تعیین نشده.
|
||||||
\nمکانی را مشخص و از طریق منوی زمینه اقدام کنید.</string>
|
\nمکانی را مشخص و از منوی زمینه اقدام کنید.</string>
|
||||||
<string name="rendering_attr_showRoadMaps_description">انتخاب کنید چه زمانی نقشههای فقط-جادهای نشان داده شود:</string>
|
<string name="rendering_attr_showRoadMaps_description">انتخاب کنید چه زمانی نقشههای فقط-جادهای نشان داده شود:</string>
|
||||||
<string name="shared_string_target_points">مقصدها</string>
|
<string name="shared_string_target_points">مقصدها</string>
|
||||||
<string name="ending_point_too_far">نقطهٔ پایانی از نزدیکترین جاده خیلی دور است.</string>
|
<string name="ending_point_too_far">نقطهٔ پایانی از نزدیکترین جاده خیلی دور است.</string>
|
||||||
|
@ -999,7 +999,7 @@
|
||||||
<string name="loading_builds_failed">بازیابی لیست ساختهای OsmAnd ناموفق بود</string>
|
<string name="loading_builds_failed">بازیابی لیست ساختهای OsmAnd ناموفق بود</string>
|
||||||
<string name="loading_builds">بارگیری ساختهای OsmAnd…</string>
|
<string name="loading_builds">بارگیری ساختهای OsmAnd…</string>
|
||||||
<string name="select_build_to_install">یک ساخت OsmAnd را برای نصب انتخاب کنید</string>
|
<string name="select_build_to_install">یک ساخت OsmAnd را برای نصب انتخاب کنید</string>
|
||||||
<string name="gps_status_app_not_found">برنامهٔ GPS Status نصب نیست. در فروشگاه اندروید جستوجو میکنید؟</string>
|
<string name="gps_status_app_not_found">این برنامهٔ وضعیت GPS نصب نیست. در بازار اندروید بگردیم؟</string>
|
||||||
<string name="voice_is_not_available_msg">راهنمای صوتی موجود نیست. لطفاً به «تنطیمات» ← «تنظیمات راهبری» ← «راهنمای صوتی» بروید و یکی از بستههای پیام صوتی را انتخاب یا دانلود کنید.</string>
|
<string name="voice_is_not_available_msg">راهنمای صوتی موجود نیست. لطفاً به «تنطیمات» ← «تنظیمات راهبری» ← «راهنمای صوتی» بروید و یکی از بستههای پیام صوتی را انتخاب یا دانلود کنید.</string>
|
||||||
<string name="voice_is_not_available_title">راهنمای صوتی انتخاب نشده</string>
|
<string name="voice_is_not_available_title">راهنمای صوتی انتخاب نشده</string>
|
||||||
<string name="download_files_question">آیا {0} فایل دانلود شود ({1} مگابایت)؟</string>
|
<string name="download_files_question">آیا {0} فایل دانلود شود ({1} مگابایت)؟</string>
|
||||||
|
|
|
@ -1884,4 +1884,121 @@
|
||||||
<string name="poi_racquet">סקווש</string>
|
<string name="poi_racquet">סקווש</string>
|
||||||
<string name="poi_roller_skating">גלגיליות</string>
|
<string name="poi_roller_skating">גלגיליות</string>
|
||||||
<string name="poi_rowing">חתירה</string>
|
<string name="poi_rowing">חתירה</string>
|
||||||
|
<string name="poi_rugby_union">התאחדות רוגבי</string>
|
||||||
|
<string name="poi_rugby_league">ליגת רוגבי</string>
|
||||||
|
<string name="poi_sailing">שיט מפרשיות</string>
|
||||||
|
<string name="poi_shooting">ירי</string>
|
||||||
|
<string name="poi_skating">החלקה על גלגיליות</string>
|
||||||
|
<string name="poi_skateboard">סקייטבורד</string>
|
||||||
|
<string name="poi_skiing">סקי</string>
|
||||||
|
<string name="poi_soccer">כדורגל</string>
|
||||||
|
<string name="poi_surfing">גלישה</string>
|
||||||
|
<string name="poi_swimming">שחייה</string>
|
||||||
|
<string name="poi_table_tennis">טניס שולחן</string>
|
||||||
|
<string name="poi_tennis">טניס</string>
|
||||||
|
<string name="poi_toboggan">מזחלות שלג</string>
|
||||||
|
<string name="poi_volleyball">כדורעף</string>
|
||||||
|
|
||||||
|
<string name="poi_museum">מוזיאון</string>
|
||||||
|
<string name="poi_memorial">אתר הנצחה</string>
|
||||||
|
<string name="poi_artwork">מיצג אומנותי</string>
|
||||||
|
<string name="poi_archaeological_site">אתר ארכיאולוגי</string>
|
||||||
|
<string name="poi_battlefield">שדה קרב</string>
|
||||||
|
<string name="poi_boundary_stone">אבן גבול</string>
|
||||||
|
<string name="poi_historic_cannon">תותח היסטורי</string>
|
||||||
|
<string name="poi_castle">טירה</string>
|
||||||
|
<string name="poi_city_gate">שער עיר</string>
|
||||||
|
<string name="poi_fort">מבצר</string>
|
||||||
|
<string name="poi_fountain">מזרקה</string>
|
||||||
|
<string name="poi_historic_ruins">חורבות היסטוריות</string>
|
||||||
|
<string name="poi_wreck">אונייה טרופה</string>
|
||||||
|
<string name="poi_historic_ship">ספינה היסטורית</string>
|
||||||
|
<string name="poi_historic_mine">מכרה היסטורי</string>
|
||||||
|
<string name="poi_monument">אתר מורשת</string>
|
||||||
|
<string name="poi_zoo">גן חיות</string>
|
||||||
|
<string name="poi_aquarium">אקווריום</string>
|
||||||
|
<string name="poi_attraction">מוקד משיכה תיירותי</string>
|
||||||
|
<string name="poi_tourism_yes">פריט תיירותי</string>
|
||||||
|
<string name="poi_attraction_animal">חיה (מוקד משיכה)</string>
|
||||||
|
<string name="poi_attraction_big_wheel">גלגל ענק</string>
|
||||||
|
<string name="poi_attraction_carousel">קרוסלה</string>
|
||||||
|
<string name="poi_attraction_summer_toboggan">מזחלת קיץ</string>
|
||||||
|
<string name="poi_wilderness_hut">בקתת פרא</string>
|
||||||
|
<string name="poi_denomination_united">מאוחדת</string>
|
||||||
|
<string name="poi_denomination_united_reformed">מאוחדת רפורמית</string>
|
||||||
|
<string name="poi_denomination_church_of_scotland">כנסיית סקוטלנד</string>
|
||||||
|
<string name="poi_denomination_iglesia_ni_cristo">איגלסיה ני קריסטו (הכנסייה של ישו)</string>
|
||||||
|
<string name="poi_denomination_uniting">הכנסייה הלותרנית של אוסטרליה</string>
|
||||||
|
<string name="poi_denomination_mennonite">מנוניטיזם</string>
|
||||||
|
<string name="poi_denomination_quaker">קווייקריזם</string>
|
||||||
|
<string name="poi_denomination_bulgarian_orthodox">אורתודוכסית בולגרית</string>
|
||||||
|
<string name="poi_denomination_nondenominational">על־זרמית</string>
|
||||||
|
<string name="poi_denomination_adventist">אדוונטיזם</string>
|
||||||
|
<string name="poi_denomination_serbian_orthodox">אורתודכסיות סרבית</string>
|
||||||
|
<string name="poi_denomination_romanian_orthodox">אורתודוכסיות רומנית</string>
|
||||||
|
<string name="poi_piste_snow_park">פארק שלג</string>
|
||||||
|
<string name="poi_piste_ice_skate">החלקרח</string>
|
||||||
|
<string name="poi_cutline">קו תפר</string>
|
||||||
|
<string name="poi_distance_mark">סמן מרחק</string>
|
||||||
|
<string name="poi_floating_dock">רציף צף</string>
|
||||||
|
<string name="poi_fog_signal">אות ערפל</string>
|
||||||
|
<string name="poi_military_landuse">אזור צבאי</string>
|
||||||
|
<string name="poi_military_airfield">מנחת צבאי</string>
|
||||||
|
<string name="poi_military_bunker">בונקר צבאי</string>
|
||||||
|
<string name="poi_military_barracks">קסרקטין</string>
|
||||||
|
<string name="poi_military_danger_area">אזור סכנה</string>
|
||||||
|
<string name="poi_military_range">שטח צבאי</string>
|
||||||
|
<string name="poi_wiki_lang_new">ויקי בנווארית</string>
|
||||||
|
<string name="poi_wiki_lang_vo">ויקי בוולאפיק</string>
|
||||||
|
<string name="poi_wiki_lang_zh">ויקי בסינית</string>
|
||||||
|
<string name="poi_wiki_lang_af">ויקי באפריקאנס</string>
|
||||||
|
<string name="poi_wiki_lang_als">ויקי באלזסית</string>
|
||||||
|
<string name="poi_wiki_lang_az">ויקי באזרית</string>
|
||||||
|
<string name="poi_wiki_lang_bn">ויקי בבנגלית</string>
|
||||||
|
<string name="poi_wiki_lang_br">ויקי בברטונית</string>
|
||||||
|
<string name="poi_wiki_lang_bs">ויקי בבוסנית</string>
|
||||||
|
<string name="poi_wiki_lang_cy">ויקי בוולשית</string>
|
||||||
|
<string name="poi_wiki_lang_eo">ויקי באספרנטו</string>
|
||||||
|
<string name="poi_wiki_lang_eu">ויקי בבסקית</string>
|
||||||
|
<string name="poi_wiki_lang_fa">ויקי בפרסית</string>
|
||||||
|
<string name="poi_wiki_lang_fy">ויקי בפריזית</string>
|
||||||
|
<string name="poi_wiki_lang_ga">ויקי באירית</string>
|
||||||
|
<string name="poi_wiki_lang_hy">ויקי בארמנית</string>
|
||||||
|
<string name="poi_wiki_lang_is">ויקי באיסלנדית</string>
|
||||||
|
<string name="poi_wiki_lang_ka">ויקי בגיאורגית</string>
|
||||||
|
<string name="poi_wiki_lang_ku">ויקי בכורדית</string>
|
||||||
|
<string name="poi_wiki_lang_la">ויקי בלטינית</string>
|
||||||
|
<string name="poi_wiki_lang_lb">ויקי בלוקסמבורגית</string>
|
||||||
|
<string name="poi_wiki_lang_mk">ויקי במקדונית</string>
|
||||||
|
<string name="poi_wiki_lang_ml">ויקי במלאיאלאם</string>
|
||||||
|
<string name="poi_wiki_lang_mr">ויקי במרטהי</string>
|
||||||
|
<string name="poi_wiki_lang_nv">ויקי בנבאחו</string>
|
||||||
|
<string name="poi_wiki_lang_os">ויקי באוסטית</string>
|
||||||
|
<string name="poi_wiki_lang_sc">ויקי בסרדו</string>
|
||||||
|
<string name="poi_wiki_lang_sh">ויקי בסרבו קרואטית</string>
|
||||||
|
<string name="poi_wiki_lang_sq">ויקי באלבנית</string>
|
||||||
|
<string name="poi_wiki_lang_ta">ויקי בטמילית</string>
|
||||||
|
<string name="poi_wiki_lang_tl">ויקי בפיליפינית</string>
|
||||||
|
<string name="poi_wiki_lang_kk">ויקי בקזחית</string>
|
||||||
|
<string name="poi_wiki_lang_uz">ויקי באוזבקית</string>
|
||||||
|
<string name="poi_wiki_lang_ce">ויקי בצ׳צ׳נית</string>
|
||||||
|
<string name="poi_wiki_lang_ur">ויקי באורדו</string>
|
||||||
|
<string name="poi_wiki_lang_oc">ויקי באוקסיטנית</string>
|
||||||
|
<string name="poi_wiki_lang_mg">ויקי במלגשי</string>
|
||||||
|
<string name="poi_wiki_lang_tt">ויקי בטטרית</string>
|
||||||
|
<string name="poi_wiki_lang_ky">ויקי בקירגיזית</string>
|
||||||
|
<string name="poi_wiki_lang_zhyue">ויקי בקנטונית</string>
|
||||||
|
<string name="poi_wiki_lang_tg">ויקי בטג׳יקית</string>
|
||||||
|
<string name="poi_wiki_lang_ba">ויקי בבשקירית</string>
|
||||||
|
<string name="poi_wiki_lang_sco">ויקי בסקוטית</string>
|
||||||
|
<string name="poi_wiki_lang_pnb">ויקי בפנג׳בית</string>
|
||||||
|
<string name="poi_wiki_lang_cv">ויקי בצ׳ובשית</string>
|
||||||
|
<string name="poi_wiki_lang_my">ויקי בבורמית</string>
|
||||||
|
<string name="poi_wiki_lang_yo">ויקי ביורובה</string>
|
||||||
|
<string name="poi_wiki_lang_an">ויקי באראגונית</string>
|
||||||
|
<string name="poi_wiki_lang_ne">ויקי בנפאלית</string>
|
||||||
|
<string name="poi_wiki_lang_gu">ויקי בגוג׳רטית</string>
|
||||||
|
<string name="poi_wiki_lang_mn">ויקי במונגולית</string>
|
||||||
|
<string name="poi_cycle_barrier">מחסום אופניים</string>
|
||||||
|
<string name="poi_motorcycle_barrier">מחסום אופנועים</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue