Merge branch 'master' into send-gpx
# Conflicts: # OsmAnd/res/values/strings.xml
This commit is contained in:
commit
5380837e63
99 changed files with 1539 additions and 732 deletions
|
@ -71,6 +71,7 @@ public class GPXUtilities {
|
|||
WHITE(0xFFFFFFFF),
|
||||
RED(0xFFFF0000),
|
||||
GREEN(0xFF00FF00),
|
||||
DARKGREEN(0xFF006400),
|
||||
BLUE(0xFF0000FF),
|
||||
YELLOW(0xFFFFFF00),
|
||||
CYAN(0xFF00FFFF),
|
||||
|
|
|
@ -18,7 +18,6 @@ import net.osmand.telegram.helpers.TelegramHelper
|
|||
import net.osmand.telegram.helpers.TelegramHelper.*
|
||||
import net.osmand.telegram.notifications.TelegramNotification.NotificationType
|
||||
import net.osmand.telegram.utils.AndroidUtils
|
||||
import net.osmand.telegram.utils.OsmandLocationUtils
|
||||
import org.drinkless.td.libcore.telegram.TdApi
|
||||
import java.util.*
|
||||
|
||||
|
@ -377,7 +376,10 @@ class TelegramService : Service(), LocationListener, TelegramIncomingMessagesLis
|
|||
Log.d(PlatformUtil.TAG, "Send live location error: $code - $message")
|
||||
when (messageType) {
|
||||
TelegramHelper.MESSAGE_TYPE_TEXT -> shareInfo.pendingTdLibText--
|
||||
TelegramHelper.MESSAGE_TYPE_MAP -> shareInfo.pendingTdLibMap--
|
||||
TelegramHelper.MESSAGE_TYPE_MAP -> {
|
||||
shareInfo.pendingTdLibMap--
|
||||
shareInfo.currentMapMessageId = -1L
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -304,27 +304,18 @@ class TelegramSettings(private val app: TelegramApplication) {
|
|||
|
||||
fun prepareForSharingNewMessages() {
|
||||
shareChatsInfo.forEach { (_, shareInfo) ->
|
||||
prepareForSharingNewMessages(shareInfo)
|
||||
shareInfo.resetMessagesInfo()
|
||||
}
|
||||
}
|
||||
|
||||
fun prepareForSharingNewMessages(chatsIds: List<Long>) {
|
||||
chatsIds.forEach {
|
||||
shareChatsInfo[it]?.also { shareInfo ->
|
||||
prepareForSharingNewMessages(shareInfo)
|
||||
shareInfo.resetMessagesInfo()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun prepareForSharingNewMessages(shareInfo: ShareChatInfo) {
|
||||
shareInfo.pendingTdLibText = 0
|
||||
shareInfo.pendingTdLibMap = 0
|
||||
shareInfo.currentTextMessageId = -1L
|
||||
shareInfo.currentMapMessageId = -1L
|
||||
shareInfo.pendingTextMessage = false
|
||||
shareInfo.pendingMapMessage = false
|
||||
}
|
||||
|
||||
fun getChatLivePeriod(chatId: Long) = shareChatsInfo[chatId]?.livePeriod
|
||||
|
||||
fun getChatsShareInfo() = shareChatsInfo
|
||||
|
@ -1497,6 +1488,27 @@ class TelegramSettings(private val app: TelegramApplication) {
|
|||
|
||||
fun isPendingMapMessagesLimitReached() = pendingTdLibMap >= MAX_MESSAGES_IN_TDLIB_PER_CHAT
|
||||
|
||||
fun resetMessagesInfo() {
|
||||
resetTextMessageInfo()
|
||||
resetMapMessageInfo()
|
||||
}
|
||||
|
||||
fun resetTextMessageInfo() {
|
||||
pendingTdLibText = 0
|
||||
currentTextMessageId = -1L
|
||||
pendingTextMessage = false
|
||||
}
|
||||
|
||||
fun resetMapMessageInfo() {
|
||||
pendingTdLibMap = 0
|
||||
currentMapMessageId = -1L
|
||||
pendingMapMessage = false
|
||||
}
|
||||
|
||||
fun isTextMessageIdPresent() = currentTextMessageId != -1L
|
||||
|
||||
fun isMapMessageIdPresent() = currentMapMessageId != -1L
|
||||
|
||||
companion object {
|
||||
|
||||
internal const val CHAT_ID_KEY = "chatId"
|
||||
|
|
|
@ -138,7 +138,7 @@ class ShareLocationHelper(private val app: TelegramApplication) {
|
|||
}
|
||||
}
|
||||
if (pendingMessagesLimitReached && checkNetworkTypeAllowed) {
|
||||
checkNetworkType()
|
||||
updateNetworkType()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -167,7 +167,7 @@ class ShareLocationHelper(private val app: TelegramApplication) {
|
|||
app.locationMessages.getBufferedTextMessagesForChat(chatId).take(MAX_MESSAGES_IN_TDLIB_PER_CHAT).forEach {
|
||||
if (!shareInfo.isPendingTextMessagesLimitReached()) {
|
||||
if (it.deviceName.isEmpty()) {
|
||||
if (!shareInfo.pendingTextMessage && shareInfo.currentTextMessageId != -1L) {
|
||||
if (!shareInfo.pendingTextMessage && shareInfo.isTextMessageIdPresent()) {
|
||||
val content = OsmandLocationUtils.getTextMessageContent(shareInfo.updateTextMessageId, it, app)
|
||||
app.telegramHelper.editTextLocation(shareInfo, content)
|
||||
app.locationMessages.removeBufferedMessage(it)
|
||||
|
@ -180,8 +180,12 @@ class ShareLocationHelper(private val app: TelegramApplication) {
|
|||
app.locationMessages.getBufferedMapMessagesForChat(chatId).take(MAX_MESSAGES_IN_TDLIB_PER_CHAT).forEach {
|
||||
if (!shareInfo.isPendingMapMessagesLimitReached()) {
|
||||
if (it.deviceName.isEmpty()) {
|
||||
if (!shareInfo.pendingMapMessage && shareInfo.currentMapMessageId != -1L) {
|
||||
app.telegramHelper.editMapLocation(shareInfo, it)
|
||||
if (!shareInfo.pendingMapMessage) {
|
||||
if (shareInfo.isMapMessageIdPresent()) {
|
||||
app.telegramHelper.editMapLocation(shareInfo, it)
|
||||
} else {
|
||||
app.telegramHelper.sendNewMapLocation(shareInfo, it)
|
||||
}
|
||||
app.locationMessages.removeBufferedMessage(it)
|
||||
}
|
||||
} else {
|
||||
|
@ -279,7 +283,7 @@ class ShareLocationHelper(private val app: TelegramApplication) {
|
|||
}
|
||||
}
|
||||
if (pendingMessagesLimitReached) {
|
||||
checkNetworkType()
|
||||
updateNetworkType()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -347,7 +351,7 @@ class ShareLocationHelper(private val app: TelegramApplication) {
|
|||
}
|
||||
}
|
||||
|
||||
fun checkNetworkType(){
|
||||
fun updateNetworkType(){
|
||||
if (app.isInternetConnectionAvailable) {
|
||||
val networkType = when {
|
||||
app.isWifiConnected -> TdApi.NetworkTypeWiFi()
|
||||
|
|
|
@ -840,7 +840,7 @@ class TelegramHelper private constructor() {
|
|||
}
|
||||
|
||||
fun stopSendingLiveLocationToChat(shareInfo: ShareChatInfo) {
|
||||
if (shareInfo.currentMapMessageId != -1L && shareInfo.chatId != -1L) {
|
||||
if (!shareInfo.isMapMessageIdPresent() && shareInfo.chatId != -1L) {
|
||||
shareInfo.lastSendMapMessageTime = (System.currentTimeMillis() / 1000).toInt()
|
||||
client?.send(
|
||||
TdApi.EditMessageLiveLocation(shareInfo.chatId, shareInfo.currentMapMessageId, null, null)) { obj ->
|
||||
|
|
|
@ -15,7 +15,6 @@ import android.widget.TextView
|
|||
import androidx.appcompat.widget.ListPopupWindow
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import net.osmand.Location
|
||||
import net.osmand.data.LatLon
|
||||
import net.osmand.telegram.R
|
||||
|
@ -99,7 +98,7 @@ class LiveNowTabFragment : Fragment(), TelegramListener, TelegramIncomingMessage
|
|||
|
||||
mainView.findViewById<androidx.swiperefreshlayout.widget.SwipeRefreshLayout>(R.id.swipe_refresh).apply {
|
||||
setOnRefreshListener {
|
||||
app.shareLocationHelper.checkNetworkType()
|
||||
app.shareLocationHelper.updateNetworkType()
|
||||
app.telegramHelper.scanChatsHistory()
|
||||
updateList()
|
||||
isRefreshing = false
|
||||
|
|
|
@ -72,7 +72,7 @@ class SharingStatusBottomSheet : DialogFragment() {
|
|||
if (sharingStatusType.canResendLocation) {
|
||||
if (i == 0) {
|
||||
setOnClickListener {
|
||||
app.shareLocationHelper.checkNetworkType()
|
||||
app.shareLocationHelper.updateNetworkType()
|
||||
app.settings.prepareForSharingNewMessages(sharingStatus.chatsIds)
|
||||
app.shareLocationHelper.checkAndSendBufferMessages()
|
||||
app.forceUpdateMyLocation()
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
<string name="poi_shop">متجر</string>
|
||||
<string name="poi_personal_transport">نقل شخصي</string>
|
||||
<string name="poi_public_transport">نقل عام</string>
|
||||
<string name="poi_healthcare">مركز صحّيّ</string>
|
||||
<string name="poi_healthcare">الرعاية الصحية</string>
|
||||
<string name="poi_office">مكتب</string>
|
||||
<string name="poi_club">نادي</string>
|
||||
<string name="poi_cafe_and_restaurant">مطعم و مقهى</string>
|
||||
<string name="poi_finance">ماليّة</string>
|
||||
<string name="poi_osmwiki">ويكيبيديا</string>
|
||||
<string name="poi_osmwiki">ويكيبديا</string>
|
||||
<string name="poi_chocolate">متجر شوكلاته</string>
|
||||
<string name="poi_coffee">متجر قهوة</string>
|
||||
<string name="poi_mall">مجمّع</string>
|
||||
|
@ -18,32 +18,32 @@
|
|||
<string name="poi_mobile_phone">متجر هواتف نقّالة</string>
|
||||
<string name="poi_motorcycle">متجر درّاجات ناريّة</string>
|
||||
<string name="poi_emergency">طوارئ</string>
|
||||
<string name="poi_transportation">النقل</string>
|
||||
<string name="poi_filling_station">محطة بنزين</string>
|
||||
<string name="poi_transportation">وسائل النقل</string>
|
||||
<string name="poi_filling_station">محطة وقود</string>
|
||||
<string name="poi_air_transport">نقل جوي</string>
|
||||
<string name="poi_water_transport">نقل بحري</string>
|
||||
<string name="poi_man_made">من صنع الإنسان</string>
|
||||
<string name="poi_water_supply">الإمداد بالمياه</string>
|
||||
<string name="poi_water_supply">إمدادات المياه</string>
|
||||
<string name="poi_power">الطاقة</string>
|
||||
<string name="poi_communication">الاتصالات</string>
|
||||
<string name="poi_landuse">استخدام الأراضي</string>
|
||||
<string name="poi_education">التعليم</string>
|
||||
<string name="poi_administrative">الإدارية</string>
|
||||
<string name="poi_sport">الرياضة</string>
|
||||
<string name="poi_landuse">الأراضي المستخدمة</string>
|
||||
<string name="poi_education">تعليم</string>
|
||||
<string name="poi_administrative">إداري</string>
|
||||
<string name="poi_sport">رياضة</string>
|
||||
<string name="poi_tourism">السياحة</string>
|
||||
<string name="poi_sightseeing">معالم سياحية</string>
|
||||
<string name="poi_internet_access">الوصول إلى شبكة الإنترنت</string>
|
||||
<string name="poi_internet_access">الوصول إلى الإنترنت</string>
|
||||
<string name="poi_sustenance">المواد الغذائية</string>
|
||||
<string name="poi_service">الخدمات</string>
|
||||
<string name="poi_craft">الحرف اليدوية</string>
|
||||
<string name="poi_natural">الطبيعية</string>
|
||||
<string name="poi_military">العسكرية</string>
|
||||
<string name="poi_user_defined_other">المحددة من قبل المستخدم</string>
|
||||
<string name="poi_natural">طبيعة</string>
|
||||
<string name="poi_military">عسكري</string>
|
||||
<string name="poi_user_defined_other">محددة من قبل المستخدم</string>
|
||||
<string name="poi_palaeontological_site">موقع الكتابات القديمة</string>
|
||||
<string name="poi_bakery">مخبزة</string>
|
||||
<string name="poi_bakery">مخبز</string>
|
||||
<string name="poi_alcohol">محل الخمور</string>
|
||||
<string name="poi_cheese">متجر الجبن</string>
|
||||
<string name="poi_convenience">متجر</string>
|
||||
<string name="poi_convenience">بقالة - متجر صغير</string>
|
||||
<string name="poi_supermarket">سوبر ماركت</string>
|
||||
<string name="poi_pasta">متجر المعكرونة</string>
|
||||
<string name="poi_antiques">متجر تحف</string>
|
||||
|
@ -58,25 +58,25 @@
|
|||
<string name="poi_min_age">الحد الأدنى للسن</string>
|
||||
<string name="poi_aquaculture">تربية الأحياء المائية</string>
|
||||
<string name="poi_pumping_station">محطة الضخ</string>
|
||||
<string name="poi_road_obstacle">عائق طريق</string>
|
||||
<string name="poi_shop_food">متجر وسوبرماركت</string>
|
||||
<string name="poi_bicycle_transport">دراجات نقل</string>
|
||||
<string name="poi_farm">مخزن المزرعة</string>
|
||||
<string name="poi_road_obstacle">عوائق الطريق</string>
|
||||
<string name="poi_shop_food">متجر صغير وسووبر ماركت</string>
|
||||
<string name="poi_bicycle_transport">نقل الدراجات</string>
|
||||
<string name="poi_farm">متجر المزرعة</string>
|
||||
<string name="poi_accomodation">أماكن الإقامة</string>
|
||||
<string name="poi_entertainment">أوقات الفراغ</string>
|
||||
<string name="poi_aquaculture_mussels">تربية الأحياء المائية: بلح البحر</string>
|
||||
<string name="poi_aquaculture_fish">تربية الأحياء المائية: الأسماك</string>
|
||||
<string name="poi_aquaculture_shrimp">تربية الأحياء المائية: الجمبري</string>
|
||||
<string name="poi_hiking_routes">مسارات المشي</string>
|
||||
<string name="poi_hiking_routes">مسارات المشي الخلوي</string>
|
||||
<string name="poi_tea">متجر شاي</string>
|
||||
<string name="poi_pastry">متجر الحلويات</string>
|
||||
<string name="poi_vending_machine">آلة بيع</string>
|
||||
<string name="poi_bag">متجر حقائب</string>
|
||||
<string name="poi_bed">متجر أفرشة</string>
|
||||
<string name="poi_bed">متجر مفارش</string>
|
||||
<string name="poi_carpet">متجر سجاد</string>
|
||||
<string name="poi_chemist">صيدلية</string>
|
||||
<string name="poi_clothes_children">ملابس أطفال</string>
|
||||
<string name="poi_shoes">متجر الأحذية</string>
|
||||
<string name="poi_shoes">متجر أحذية</string>
|
||||
<string name="poi_candles">متجر شموع</string>
|
||||
<string name="poi_computer">متجر كمبيوتر</string>
|
||||
<string name="poi_fabric">متجر الأقمشة</string>
|
||||
|
@ -91,26 +91,26 @@
|
|||
<string name="poi_gift">دكان الهدايا</string>
|
||||
<string name="poi_shop_yes">متجر عام</string>
|
||||
<string name="poi_garden_furniture">متجر اغراض الحدائق</string>
|
||||
<string name="poi_gas">متجر الغاز المسال</string>
|
||||
<string name="poi_gas">متجر الغاز السائل</string>
|
||||
<string name="poi_jewelry">متجر مجوهرات</string>
|
||||
<string name="poi_herbalist">متجر ألأعشاب</string>
|
||||
<string name="poi_herbalist">محل عطارة</string>
|
||||
<string name="poi_hunting">معدات الصيد</string>
|
||||
<string name="poi_interior_decoration">متجر الديكور الداخلي</string>
|
||||
<string name="poi_music">متجر الموسيقى</string>
|
||||
<string name="poi_musical_instrument">معدات الموسيقى</string>
|
||||
<string name="poi_organic">أغدية عضوية</string>
|
||||
<string name="poi_pet">متجر أغراض الكلاب</string>
|
||||
<string name="poi_paint">متجر الدهان</string>
|
||||
<string name="poi_toys">متجر ألألعاب</string>
|
||||
<string name="poi_pet">متجر الحيوانات الأليفة</string>
|
||||
<string name="poi_paint">متجر الدهانات</string>
|
||||
<string name="poi_toys">متجر ألعاب</string>
|
||||
<string name="poi_parking">موقف سيارات</string>
|
||||
<string name="poi_motorcycle_parking">موقف دراجات نارية</string>
|
||||
<string name="poi_parking_entrance">مدخل موقف سيارات</string>
|
||||
<string name="poi_bicycle_parking">موقف دراجات هوائية</string>
|
||||
<string name="poi_vending_parking_tickets">تذاكر موقف السيارات</string>
|
||||
<string name="poi_vending_parking_tickets_public_transport_tickets">تذاكر موقف سيارات و تذاكر للنقل العام</string>
|
||||
<string name="poi_beverages">محل للمشروبات</string>
|
||||
<string name="poi_beverages">متجر مرطبات</string>
|
||||
<string name="poi_pharmacy">صيدلية</string>
|
||||
<string name="poi_driving_school">مدرسة تعليم السياقة</string>
|
||||
<string name="poi_driving_school">مدرسة تعليم القيادة</string>
|
||||
<string name="poi_school">مدرسة</string>
|
||||
<string name="poi_building_type_mosque">نوع المبنى : مسجد</string>
|
||||
<string name="poi_hospital">مستشفى</string>
|
||||
|
@ -118,10 +118,10 @@
|
|||
<string name="poi_artwork_type_fountain">نوع العمل الفني : نافورة</string>
|
||||
<string name="poi_craft_carpenter">نجار</string>
|
||||
<string name="poi_craft_plumber">سباك</string>
|
||||
<string name="poi_car">تاجر سيارات</string>
|
||||
<string name="poi_car_repair">تصليح السيارات</string>
|
||||
<string name="poi_car">معرض سيارات</string>
|
||||
<string name="poi_car_repair">ورشة تصليح السيارات</string>
|
||||
<string name="poi_recycling_printer_cartridges">خراطيش الطابعة</string>
|
||||
<string name="poi_recycling_car_batteries">بطاريات السيارات</string>
|
||||
<string name="poi_recycling_car_batteries">بطاريات سيارات</string>
|
||||
<string name="poi_recycling_cars">سيارات</string>
|
||||
<string name="poi_caravan_site">موقع خاص للقوافل</string>
|
||||
<string name="poi_int_name">الإسم الدولي</string>
|
||||
|
@ -132,9 +132,9 @@
|
|||
<string name="poi_alt_name">الإسم البديل</string>
|
||||
<string name="poi_official_name">الإسم الرسمي</string>
|
||||
<string name="poi_village">قرية</string>
|
||||
<string name="poi_town">مدينة</string>
|
||||
<string name="poi_town">مدينة صغيرة</string>
|
||||
<string name="poi_website">موقع إنترنت</string>
|
||||
<string name="poi_emergency_phone">هاتف النجدة</string>
|
||||
<string name="poi_emergency_phone">هاتف الطوارئ</string>
|
||||
<string name="poi_recycling_mobile_phones">هواتف نقالة</string>
|
||||
<string name="poi_phone">الهاتف</string>
|
||||
<string name="poi_vending_telephone_vouchers">قسائم تعبئة الهاتف</string>
|
||||
|
@ -142,23 +142,23 @@
|
|||
<string name="poi_fire_extinguisher">طفاية حريق</string>
|
||||
<string name="poi_fire_hose">خرطوم إطفاء الحريق</string>
|
||||
<string name="poi_fireworks">متجر الألعاب النارية</string>
|
||||
<string name="poi_traffic_calming_hump">مطب</string>
|
||||
<string name="poi_traffic_calming_hump">مطب خفيف</string>
|
||||
<string name="poi_cafe">مقهى</string>
|
||||
<string name="poi_internet_cafe">مقهى إنترنت</string>
|
||||
<string name="poi_hotel">فندق</string>
|
||||
<string name="poi_university">جامعة</string>
|
||||
<string name="poi_route_train_ref">قطار</string>
|
||||
<string name="poi_aerialway_transport">النقل الجوي</string>
|
||||
<string name="poi_node_networks">نقاط شبكة التنزه/ركوب الدراجات</string>
|
||||
<string name="poi_traffic_enforcement">قوانين المرور جارية المفعول</string>
|
||||
<string name="poi_aerialway_transport">النقل المعلق بالكيابل</string>
|
||||
<string name="poi_node_networks">مجموعة نقاط المشي الخلوي \"الهايكنق\"/ركوب الدراجات</string>
|
||||
<string name="poi_traffic_enforcement">كمائن و مراصد المرور</string>
|
||||
<string name="poi_transport_construction">بنية المواصلات</string>
|
||||
<string name="poi_trash_disposal">صرف القمامة</string>
|
||||
<string name="poi_trash_disposal">مكب النفايات</string>
|
||||
<string name="poi_seamark">بحري</string>
|
||||
<string name="poi_deli">أطعمة لذيذة</string>
|
||||
<string name="poi_greengrocer">بقالة خضراء</string>
|
||||
<string name="poi_deli">محل أطعمة مستوردة</string>
|
||||
<string name="poi_greengrocer">متجر خضروات</string>
|
||||
<string name="poi_seafood">متجر مأكولات بحرية</string>
|
||||
<string name="poi_confectionery">متجر الحلويات</string>
|
||||
<string name="poi_ice_cream">ردهة مثلجات</string>
|
||||
<string name="poi_confectionery">متجر حلويات</string>
|
||||
<string name="poi_ice_cream">ركن المثلجات</string>
|
||||
<string name="poi_dairy">متجر ألبان</string>
|
||||
<string name="poi_wine">متجر نبيذ</string>
|
||||
<string name="poi_books">متجر كتب</string>
|
||||
|
@ -166,7 +166,7 @@
|
|||
<string name="poi_art">متجرفنون</string>
|
||||
<string name="poi_baby_goods">سلع أطفال</string>
|
||||
<string name="poi_boutique">متجر أزياء</string>
|
||||
<string name="poi_charity">متجر جمعيات خيرية</string>
|
||||
<string name="poi_charity">متجر خيري</string>
|
||||
<string name="poi_clothes">متجر ملابس</string>
|
||||
<string name="poi_copyshop">محل نسخ</string>
|
||||
<string name="poi_curtain">متجر ستائر</string>
|
||||
|
@ -175,11 +175,11 @@
|
|||
<string name="poi_free_flying">متجر لوازم الطيران الحر</string>
|
||||
<string name="poi_garden_centre">مركز الحديقة</string>
|
||||
<string name="poi_glaziery">محل زجاج</string>
|
||||
<string name="poi_hardware">متجر لواحق الحاسوب</string>
|
||||
<string name="poi_hardware">متجر ملحقات الحاسوب</string>
|
||||
<string name="poi_railway_station">محطة القطارات</string>
|
||||
<string name="poi_kitchen">أثاث مطبخ</string>
|
||||
<string name="poi_kitchen">أثاث المطبخ</string>
|
||||
<string name="poi_leather">متجر جلود</string>
|
||||
<string name="poi_medical_supply">إمدادات طبية</string>
|
||||
<string name="poi_medical_supply">مستلزمات طبية</string>
|
||||
<string name="poi_newsagent">بائع جرائد</string>
|
||||
<string name="poi_optician">طبيب العيون</string>
|
||||
<string name="poi_photo">متجر صور</string>
|
||||
|
@ -187,22 +187,22 @@
|
|||
<string name="poi_scuba_diving_shop">متجر بضائع الغوص</string>
|
||||
<string name="poi_sports">سلع رياضية</string>
|
||||
<string name="poi_hifi">متجر هاي فاي</string>
|
||||
<string name="poi_outdoor">متجر في الهواء الطلق</string>
|
||||
<string name="poi_outdoor">متجر أدوات التنزه والرحلات</string>
|
||||
<string name="poi_length">طول</string>
|
||||
<string name="poi_water_tank">خزان ماء</string>
|
||||
<string name="poi_diplomatic_honorary_consulate">قنصلية شرفية</string>
|
||||
<string name="poi_radiotechnics">متجر تقنيات الراديو</string>
|
||||
<string name="poi_tableware">متجر موائد</string>
|
||||
<string name="poi_tableware">متجر أدوات المائدة</string>
|
||||
<string name="poi_ticket">بيع التذاكر</string>
|
||||
<string name="poi_tobacco">متجر تبغ</string>
|
||||
<string name="poi_trade">محطة تجارية</string>
|
||||
<string name="poi_tyres">مخزن إطارات</string>
|
||||
<string name="poi_trade">مبسط تجاري</string>
|
||||
<string name="poi_tyres">متجر الاطارات</string>
|
||||
<string name="poi_vacuum_cleaner">متجر مكانس كهربائية</string>
|
||||
<string name="poi_variety_store">متجر متنوع</string>
|
||||
<string name="poi_video">متجر فيديوتاك</string>
|
||||
<string name="poi_department_store">متجر متعدد الأقسام</string>
|
||||
<string name="poi_electronics">متجر إلكترونيات</string>
|
||||
<string name="poi_energy">متجر طاقة</string>
|
||||
<string name="poi_energy">متجر أدوات طاقة</string>
|
||||
<string name="poi_car_parts">قطع غيار السيارات</string>
|
||||
<string name="poi_games">ألعاب</string>
|
||||
<string name="poi_model">نماذج مقياس</string>
|
||||
|
@ -214,13 +214,13 @@
|
|||
<string name="poi_fire_hydrant">صنبور مياه الإطفاء</string>
|
||||
<string name="poi_grit_bin">سلة حصى</string>
|
||||
<string name="poi_ambulance_station">محطة إسعاف</string>
|
||||
<string name="poi_emergency_access_point">منفذ طوارئ</string>
|
||||
<string name="poi_ford">فورد</string>
|
||||
<string name="poi_emergency_access_point">نقطة وصول الطوارئ</string>
|
||||
<string name="poi_ford">مجرى الماء على الطريق</string>
|
||||
<string name="poi_vehicle_inspection">فحص المركبات</string>
|
||||
<string name="poi_car_wash">غسيل السيارات</string>
|
||||
<string name="poi_fuel">محطة بنزين: بترول، ديزل، غاز</string>
|
||||
<string name="poi_fuel_diesel">ديزل</string>
|
||||
<string name="poi_fuel_gtl_diesel">ديزل جي تي أل</string>
|
||||
<string name="poi_fuel_gtl_diesel">ديزل GTL</string>
|
||||
<string name="poi_fuel_biodiesel">ديزل حيوي</string>
|
||||
<string name="poi_fuel_octane_80">أوكتان 80</string>
|
||||
<string name="poi_fuel_octane_91">أوكتان 91</string>
|
||||
|
@ -241,11 +241,11 @@
|
|||
<string name="poi_electricity_combined_charging">محطة شحن</string>
|
||||
<string name="poi_compressed_air">هواء مضغوط</string>
|
||||
<string name="poi_garages">كراجات</string>
|
||||
<string name="poi_public_transport_platform">موقف النقل العمومي</string>
|
||||
<string name="poi_public_transport_platform">موقف النقل العام</string>
|
||||
<string name="poi_public_transport_platform_bus">موقف حافلات</string>
|
||||
<string name="poi_bus_stop">موقف حافلات</string>
|
||||
<string name="poi_public_transport_stop_position">مكان توقف وسائل النقل العمومي</string>
|
||||
<string name="poi_public_transport_station">محطة النقل العمومي</string>
|
||||
<string name="poi_public_transport_stop_position">مكان توقف وسائل النقل العام</string>
|
||||
<string name="poi_public_transport_station">محطة النقل العام</string>
|
||||
<string name="poi_bus_station">محطة حافلات</string>
|
||||
<string name="poi_railway_platform">منصة سكك حديدية</string>
|
||||
<string name="poi_halt">محطة سكك حديدية</string>
|
||||
|
@ -260,7 +260,7 @@
|
|||
<string name="poi_lighthouse">المنارة</string>
|
||||
<string name="poi_bicycle_rental">تأجير دراجات</string>
|
||||
<string name="poi_city_wall">جدار مدينة</string>
|
||||
<string name="poi_city">مدينة</string>
|
||||
<string name="poi_city">مدينة كبيرة</string>
|
||||
<string name="poi_city_gate">باب مدينة</string>
|
||||
<string name="poi_courthouse">محكمة</string>
|
||||
<string name="poi_restaurant">مطعم</string>
|
||||
|
@ -269,15 +269,15 @@
|
|||
<string name="poi_building">مبنى</string>
|
||||
<string name="poi_hairdresser">حلاق</string>
|
||||
<string name="poi_toilets">مرحاض; حمام</string>
|
||||
<string name="poi_traffic_calming_bump">مطب</string>
|
||||
<string name="poi_traffic_calming_bump">مطب قوي</string>
|
||||
<string name="poi_highway_crossing">ممر الراجلين</string>
|
||||
<string name="poi_post_office">مكتب بريد</string>
|
||||
<string name="poi_water_tower">خزان مياه عمودي</string>
|
||||
<string name="poi_water_tower">برج مياه</string>
|
||||
<string name="poi_bridge">جسر</string>
|
||||
<string name="poi_swimming_pool">حوض سباحة</string>
|
||||
<string name="poi_power_generator">مولد طاقة</string>
|
||||
<string name="poi_peak">قمة جبلية</string>
|
||||
<string name="poi_soccer">كرة القدم</string>
|
||||
<string name="poi_soccer">كرة قدم</string>
|
||||
<string name="poi_bank">بنك</string>
|
||||
<string name="poi_insurance">شركة تأمين</string>
|
||||
<string name="poi_doctors">أطباء</string>
|
||||
|
@ -316,8 +316,8 @@
|
|||
<string name="poi_tunnel_railway">نفق سكك حديدية</string>
|
||||
<string name="poi_river">وادي</string>
|
||||
<string name="poi_craft_tailor">خياط</string>
|
||||
<string name="poi_motorway_junction">مُحَوِّل الطريق السيار</string>
|
||||
<string name="poi_tram_stop">موقف ترامواي</string>
|
||||
<string name="poi_motorway_junction">تقاطع الطريق السريع</string>
|
||||
<string name="poi_tram_stop">توقف الترام</string>
|
||||
<string name="poi_recycling_books">كتب</string>
|
||||
<string name="poi_recycling_shoes">أحذية</string>
|
||||
<string name="poi_recycling_aluminium">ألومنيوم</string>
|
||||
|
@ -327,7 +327,7 @@
|
|||
<string name="poi_recycling_low_energy_bulbs">مصابيح منخفضة الطاقة</string>
|
||||
<string name="poi_recycling_fluorescent_tubes">أنابيب ضوء النيون</string>
|
||||
<string name="poi_recycling_metal">معدن</string>
|
||||
<string name="poi_recycling_electrical_items">عناصر كهربائية</string>
|
||||
<string name="poi_recycling_electrical_items">أغراض الكترونية</string>
|
||||
<string name="poi_recycling_white_goods">سلع بيضاء</string>
|
||||
<string name="poi_recycling_cooking_oil">زيت الطهي</string>
|
||||
<string name="poi_recycling_engine_oil">زيت المحرك</string>
|
||||
|
@ -342,14 +342,14 @@
|
|||
<string name="poi_recycling_waste_oil">زيت مستعمل</string>
|
||||
<string name="poi_recycling_bottles">زجاجات</string>
|
||||
<string name="poi_recycling_sheet_metal">صفائح معدنية</string>
|
||||
<string name="poi_recycling_foil">رقاقة معدنية</string>
|
||||
<string name="poi_recycling_foil">ورق قصدير</string>
|
||||
<string name="poi_employment_agency">مكتب التوظيف</string>
|
||||
<string name="poi_research">مكتب البحوث</string>
|
||||
<string name="poi_it">مكتب تكنولوجيا المعلومات</string>
|
||||
<string name="poi_newspaper">مكتب جرائد</string>
|
||||
<string name="poi_architect">مكتب مهندس معماري</string>
|
||||
<string name="poi_advertising_agency">وكالة إعلانات</string>
|
||||
<string name="poi_educational_institution">مؤسسة تربوية</string>
|
||||
<string name="poi_educational_institution">مؤسسة تعليمية</string>
|
||||
<string name="poi_studio">ستوديو</string>
|
||||
<string name="poi_office_religion">مكتب شؤون دينية</string>
|
||||
<string name="poi_association">مكتب منظمة</string>
|
||||
|
@ -368,7 +368,7 @@
|
|||
<string name="poi_animal_boarding_dog_cat">نوع المصعد لـ: كلب، قط</string>
|
||||
<string name="poi_animal_boarding_horse">نوع المصعد لـ: حصان</string>
|
||||
<string name="poi_historic_aircraft">طائرات تاريخية</string>
|
||||
<string name="poi_honey">متجرعسل</string>
|
||||
<string name="poi_honey">متجر عسل</string>
|
||||
<string name="poi_elevator_yes">بالمصعد</string>
|
||||
<string name="poi_elevator_no">بدون مصعد</string>
|
||||
<string name="poi_office_camping">مكتب التخييم</string>
|
||||
|
@ -426,107 +426,107 @@
|
|||
<string name="poi_fire_hydrant_water_source">مصدر المياه</string>
|
||||
<string name="poi_payment_toll_type">طريقة الدفع</string>
|
||||
<string name="poi_traffic_signals_sound">الصوت</string>
|
||||
<string name="poi_highway_crossing_type">نوع</string>
|
||||
<string name="poi_highway_crossing_type">النوع</string>
|
||||
<string name="poi_service_general">خدمة</string>
|
||||
<string name="poi_self_service">خدمة ذاتية</string>
|
||||
<string name="poi_parking_type">نوع</string>
|
||||
<string name="poi_subway_station_filter">محطة مترو الإنفاق</string>
|
||||
<string name="poi_bicycle_parking_type">نوع</string>
|
||||
<string name="poi_parking_type">النوع</string>
|
||||
<string name="poi_subway_station_filter">محطة مترو</string>
|
||||
<string name="poi_bicycle_parking_type">النوع</string>
|
||||
<string name="poi_aerialway_heating">تدفئة</string>
|
||||
<string name="poi_pump">مضخة</string>
|
||||
<string name="poi_telescope_type">نوع</string>
|
||||
<string name="poi_animal_training_type">نوع</string>
|
||||
<string name="poi_embassy_type">نوع</string>
|
||||
<string name="poi_telescope_type">النوع</string>
|
||||
<string name="poi_animal_training_type">النوع</string>
|
||||
<string name="poi_embassy_type">النوع</string>
|
||||
<string name="poi_healthcare_alternative_types">التخصص</string>
|
||||
<string name="poi_archaeological_site_type">نوع</string>
|
||||
<string name="poi_religion_type">الديانة</string>
|
||||
<string name="poi_denomination">الطائفة</string>
|
||||
<string name="poi_information_type">نوع</string>
|
||||
<string name="poi_scout_camp">مخيم الكشافة</string>
|
||||
<string name="poi_resort_type">نوع</string>
|
||||
<string name="poi_archaeological_site_type">النوع</string>
|
||||
<string name="poi_religion_type">الدين</string>
|
||||
<string name="poi_denomination">المذهب</string>
|
||||
<string name="poi_information_type">النوع</string>
|
||||
<string name="poi_scout_camp">مخيم كشافة</string>
|
||||
<string name="poi_resort_type">النوع</string>
|
||||
<string name="poi_piste_difficulty">صعوبة الطريق</string>
|
||||
<string name="poi_fee">رسوم</string>
|
||||
<string name="poi_fee">الرسوم</string>
|
||||
<string name="poi_smoking">التدخين</string>
|
||||
<string name="poi_takeaway">الوجبات الجاهزة</string>
|
||||
<string name="poi_takeaway">الطلب الخارجي</string>
|
||||
<string name="poi_cocktails">كوكتيلات</string>
|
||||
<string name="poi_recycling_type">نوع</string>
|
||||
<string name="poi_recycling_type">النوع</string>
|
||||
<string name="poi_recycling_accepted_waste">النفايات المقبولة</string>
|
||||
<string name="poi_shelter_type">نوع</string>
|
||||
<string name="poi_shelter_type">النوع</string>
|
||||
<string name="poi_seasonal">موسمي</string>
|
||||
<string name="poi_water_characteristic">خصائص المياه</string>
|
||||
<string name="poi_health_specialty">التخصص الصحي</string>
|
||||
<string name="poi_massage_type">نوع التدليك</string>
|
||||
<string name="poi_tents">الخيام</string>
|
||||
<string name="poi_tents">خيام</string>
|
||||
<string name="poi_washing_machine">غسالة</string>
|
||||
<string name="poi_caravans">البيوت المتنقلة</string>
|
||||
<string name="poi_power_supply">الإمداد بالطاقة</string>
|
||||
<string name="poi_caravans">كارفان (مقطورة متنقلة)</string>
|
||||
<string name="poi_power_supply">مصدر الطاقة</string>
|
||||
<string name="poi_medical_system">النظام الطبي</string>
|
||||
<string name="poi_fuel_avia_type">نوع الوقود (افيا)</string>
|
||||
<string name="poi_additional_type">إضافي</string>
|
||||
<string name="poi_vending_type">نوع البيع</string>
|
||||
<string name="poi_clothes_type">نوع</string>
|
||||
<string name="poi_clothes_type">النوع</string>
|
||||
<string name="poi_shoes_type">نوع</string>
|
||||
<string name="poi_fire_hydrant_position">موقع</string>
|
||||
<string name="poi_tactile_paving">رصيف ذوي الاحتياجات</string>
|
||||
<string name="poi_brushless">بدون فرش</string>
|
||||
<string name="poi_fire_hydrant_position">الموقع</string>
|
||||
<string name="poi_tactile_paving">مسار الرصيف البارز (للمكفوفين)</string>
|
||||
<string name="poi_brushless">فرش</string>
|
||||
<string name="poi_automated">آلي</string>
|
||||
<string name="poi_covered">مغطى</string>
|
||||
<string name="poi_ferry_terminal_cargo">نقل البضائع</string>
|
||||
<string name="poi_aerialway_bicycle">دراجات النقل</string>
|
||||
<string name="poi_observatory_designation">تعيين</string>
|
||||
<string name="poi_aerialway_bicycle">دراجات التنقل</string>
|
||||
<string name="poi_observatory_designation">الصفة</string>
|
||||
<string name="poi_city_capital">العاصمة</string>
|
||||
<string name="poi_pharmacy_dispensing">استغناء</string>
|
||||
<string name="poi_pharmacy_dispensing">استلام</string>
|
||||
<string name="poi_free_flying_characteristics">خاصية</string>
|
||||
<string name="poi_star_rating">تصنيف النجوم</string>
|
||||
<string name="poi_information_contents">المحتويات</string>
|
||||
<string name="poi_clock_option">إضافي</string>
|
||||
<string name="poi_clock_option">اضافية</string>
|
||||
<string name="poi_backcountry">الريف</string>
|
||||
<string name="poi_theatre_genre">نوع</string>
|
||||
<string name="poi_outdoor_seating">جلوس في الهواء الطلق</string>
|
||||
<string name="poi_delivery">التسليم</string>
|
||||
<string name="poi_outdoor_seating">جلوس في الخارج</string>
|
||||
<string name="poi_delivery">التوصيل</string>
|
||||
<string name="poi_microbrewery">مصنع الجعة مصغر</string>
|
||||
<string name="poi_beauty_salon_service">خدمة</string>
|
||||
<string name="poi_fireplace">موقد</string>
|
||||
<string name="poi_beach_surface_type">سطح</string>
|
||||
<string name="poi_nudism">العري</string>
|
||||
<string name="poi_diet">النظام الغذائي</string>
|
||||
<string name="poi_diet">حمية</string>
|
||||
<string name="poi_dish">صحن</string>
|
||||
<string name="poi_payment_transport_type">نوع الدفع (نقل)</string>
|
||||
<string name="poi_social_facility_type">نوع</string>
|
||||
<string name="poi_social_facility_type">النوع</string>
|
||||
<string name="poi_fuel_type">نوع الوقود</string>
|
||||
<string name="poi_drive_in">قيادة</string>
|
||||
<string name="poi_drive_through">سق عبر</string>
|
||||
<string name="poi_drive_through">مسار طلبات السيارة</string>
|
||||
<string name="poi_social_facility_for">الفئة المستهدفة</string>
|
||||
<string name="poi_compressed_air_filter">هواء مضغوط</string>
|
||||
<string name="poi_vacuum_cleaner_filter">مكنسة كهربائية</string>
|
||||
<string name="poi_free_flying_characteristic">مميزة</string>
|
||||
<string name="poi_stationery">محل وراقة</string>
|
||||
<string name="poi_stationery">قرطاسية وأدوات مكتبية</string>
|
||||
<string name="poi_cosmetics">مستحضرات التجميل</string>
|
||||
<string name="poi_watches">متجر الساعات</string>
|
||||
<string name="poi_spices">متجر التوابل</string>
|
||||
<string name="poi_mountain_pass">ممر جبلي</string>
|
||||
<string name="poi_border_control">مراقبة الحدود</string>
|
||||
<string name="poi_traffic_calming_cushion">وسادة سرعة</string>
|
||||
<string name="poi_traffic_calming_cushion">مطبات مركبات صغيرة</string>
|
||||
<string name="poi_fuel_lpg">غاز البترول المسال</string>
|
||||
<string name="poi_aeroway_fuel">محطة وقود الطائرات</string>
|
||||
<string name="poi_waterway_fuel">محطة بنزين للقوارب</string>
|
||||
<string name="poi_public_transport_platform_tram">موقف ترامواي</string>
|
||||
<string name="poi_speed_camera">رادار</string>
|
||||
<string name="poi_public_transport_platform_tram">موقف الترام</string>
|
||||
<string name="poi_speed_camera">رادار سرعة</string>
|
||||
<string name="poi_junction">تقاطع</string>
|
||||
<string name="poi_rest_area">مساحة للإستراحة</string>
|
||||
<string name="poi_water_works">أشغال المياه</string>
|
||||
<string name="poi_rest_area">منطقة استراحة</string>
|
||||
<string name="poi_water_works">أعمال المياه</string>
|
||||
<string name="poi_boatyard">حوض سفن</string>
|
||||
<string name="poi_wastewater_plant">محطة مياه الصرف الصحي</string>
|
||||
<string name="poi_wastewater_plant">محطة الصرف الصحي</string>
|
||||
<string name="poi_dam">سد</string>
|
||||
<string name="poi_watermill">طاحونة مائية</string>
|
||||
<string name="poi_power_substation">محطة فرعية</string>
|
||||
<string name="poi_power_transformer">محول</string>
|
||||
<string name="poi_power_plant">محطة للطاقة</string>
|
||||
<string name="poi_power_plant">محطة توليد الطاقة</string>
|
||||
<string name="poi_post_box">صندوق البريد</string>
|
||||
<string name="poi_telephone">هاتف</string>
|
||||
<string name="poi_cooling_tower">برج التبريد</string>
|
||||
<string name="poi_recycling">إعادة التدوير</string>
|
||||
<string name="poi_recycling_centre">مركز لإعادة التدوير</string>
|
||||
<string name="poi_recycling">إعادة تدوير</string>
|
||||
<string name="poi_recycling_centre">مركز إعادة التدوير</string>
|
||||
<string name="poi_recycling_container">حاوية</string>
|
||||
<string name="poi_recycling_glass">زجاج</string>
|
||||
<string name="poi_recycling_paper">ورق</string>
|
||||
|
@ -542,30 +542,30 @@
|
|||
<string name="poi_recycling_plastic_packaging">التعبئة والتغليف البلاستيكي</string>
|
||||
<string name="poi_recycling_newspaper">جرائد</string>
|
||||
<string name="poi_recycling_cartons">كرتون</string>
|
||||
<string name="poi_recycling_cardboard">الورق المقوى</string>
|
||||
<string name="poi_recycling_magazines">المجلات</string>
|
||||
<string name="poi_recycling_cardboard">ورق مقوى</string>
|
||||
<string name="poi_recycling_magazines">مجلات</string>
|
||||
<string name="poi_recycling_paper_packaging">تغليف ورقي</string>
|
||||
<string name="poi_recycling_small_appliances">أجهزة صغيرة</string>
|
||||
<string name="poi_recycling_wood">الخشب</string>
|
||||
<string name="poi_recycling_wood">خشب</string>
|
||||
<string name="poi_recycling_tetrapak">تتراباك</string>
|
||||
<string name="poi_recycling_paint">الطلاء</string>
|
||||
<string name="poi_recycling_drugs">الأدوية</string>
|
||||
<string name="poi_recycling_compost">السماد العضوي</string>
|
||||
<string name="poi_recycling_paint">طلاء</string>
|
||||
<string name="poi_recycling_drugs">أدوية</string>
|
||||
<string name="poi_recycling_compost">سماد عضوي</string>
|
||||
<string name="poi_recycling_christmas_trees">أشجار عيد الميلاد</string>
|
||||
<string name="poi_recycling_light_bulbs">المصابيح الكهربائية</string>
|
||||
<string name="poi_recycling_chipboard">ألواح رقائقيه</string>
|
||||
<string name="poi_recycling_animal_waste">النفايات الحيوانية</string>
|
||||
<string name="poi_recycling_light_bulbs">مصابيح كهربائية</string>
|
||||
<string name="poi_recycling_chipboard">ألواح خشبية - بلاكاش</string>
|
||||
<string name="poi_recycling_animal_waste">نفايات حيوانية</string>
|
||||
<string name="poi_recycling_diapers">حفاضات الأطفال</string>
|
||||
<string name="poi_recycling_bicycles">دراجات هوائية</string>
|
||||
<string name="poi_landfill">مطمرة نفايات</string>
|
||||
<string name="poi_landfill_waste_nuclear">النفايات النووية</string>
|
||||
<string name="poi_landfill">مكب نفايات</string>
|
||||
<string name="poi_landfill_waste_nuclear">نفايات نووية</string>
|
||||
<string name="poi_waste_basket">سلة المهملات</string>
|
||||
<string name="poi_commercial">مساحة تجارية</string>
|
||||
<string name="poi_vineyard">كروم</string>
|
||||
<string name="poi_vineyard">حقل عنب</string>
|
||||
<string name="poi_farmyard">مزرعة</string>
|
||||
<string name="poi_meadow">المرج</string>
|
||||
<string name="poi_meadow">مرعى أو مرج</string>
|
||||
<string name="poi_canal">قناة</string>
|
||||
<string name="poi_surveillance">المراقبة</string>
|
||||
<string name="poi_surveillance">مراقبة</string>
|
||||
<string name="poi_observatory">مرصد</string>
|
||||
<string name="poi_astronomical_observatory">فلكي</string>
|
||||
<string name="poi_mast">صاري</string>
|
||||
|
@ -586,21 +586,21 @@
|
|||
<string name="poi_customs">الجمارك</string>
|
||||
<string name="poi_country">البلد</string>
|
||||
<string name="poi_capital">نعم</string>
|
||||
<string name="poi_hamlet">قرية صغيرة</string>
|
||||
<string name="poi_hamlet">قرية صغيرة - هجرة</string>
|
||||
<string name="poi_isolated_dwelling">بيت معزول</string>
|
||||
<string name="poi_suburb">ضاحية</string>
|
||||
<string name="poi_neighbourhood">حي</string>
|
||||
<string name="poi_place_farm">مزرعة</string>
|
||||
<string name="poi_first_aid">الإسعافات الأولية</string>
|
||||
<string name="poi_veterinary">الطب البيطري</string>
|
||||
<string name="poi_veterinary">بيطري</string>
|
||||
<string name="poi_sanatorium">مصحة</string>
|
||||
<string name="poi_healthcare_alternative">الطب البديل</string>
|
||||
<string name="poi_healthcare_alternative">طب بديل</string>
|
||||
<string name="poi_blood_bank">بنك دم</string>
|
||||
<string name="poi_healthcare_centre">مركز طبي</string>
|
||||
<string name="poi_midwife">قابلة</string>
|
||||
<string name="poi_physiotherapist">أخصائي العلاج الطبيعي</string>
|
||||
<string name="poi_physiotherapist">أخصائي علاج طبيعي</string>
|
||||
<string name="poi_podiatrist">طبيب الأرجل</string>
|
||||
<string name="poi_psychotherapist">الطبيب النفساني</string>
|
||||
<string name="poi_psychotherapist">معالج نفسي</string>
|
||||
<string name="poi_healthcare_rehabilitation">إعادة التأهيل</string>
|
||||
<string name="poi_healthcare_yes">مرفق طبي</string>
|
||||
<string name="poi_paediatrics">طب الأطفال</string>
|
||||
|
@ -648,7 +648,7 @@
|
|||
<string name="poi_skiing">تزلج</string>
|
||||
<string name="poi_swimming">سباحة</string>
|
||||
<string name="poi_table_tennis">تنس الطاولة</string>
|
||||
<string name="poi_tennis">كرة المضرب</string>
|
||||
<string name="poi_tennis">تنس</string>
|
||||
<string name="poi_volleyball">الكرة الطائرة</string>
|
||||
<string name="poi_museum">متحف</string>
|
||||
<string name="poi_archaeological_site">موقع أثري</string>
|
||||
|
@ -658,35 +658,35 @@
|
|||
<string name="poi_historic_ruins">أطلال تاريخية</string>
|
||||
<string name="poi_historic_ship">سفينة تاريخية</string>
|
||||
<string name="poi_monument">نصب تذكاري</string>
|
||||
<string name="poi_zoo">حديقة الحيوانات</string>
|
||||
<string name="poi_home_visit">زيارة منزلية</string>
|
||||
<string name="poi_zoo">حديقة حيوانات</string>
|
||||
<string name="poi_home_visit">الزيارة المنزلية</string>
|
||||
<string name="poi_hearing_aids">أدوات مساعدة للسمع</string>
|
||||
<string name="poi_ship_chandler">لوازم السفن والقوارب</string>
|
||||
<string name="poi_window_blind">متجر ستائر</string>
|
||||
<string name="poi_atv">متجر الدرجات الرباعية</string>
|
||||
<string name="poi_marketplace">سوق</string>
|
||||
<string name="poi_marketplace">سوق مباسط</string>
|
||||
<string name="poi_swimming_pool_shop">متجر لوازم المسبح</string>
|
||||
<string name="poi_shop_craft">متجر لوازم الفنون والحرف</string>
|
||||
<string name="poi_religion">لوازم دينية</string>
|
||||
<string name="poi_fire_flapper">رفش اطفاء النار</string>
|
||||
<string name="poi_fire_flapper">أداة/مكنسة اطفاء النار</string>
|
||||
<string name="poi_ford_stepping_stones">معبر حجري</string>
|
||||
<string name="poi_gate">بوابة</string>
|
||||
<string name="poi_lift_gate">بوابة برافعة</string>
|
||||
<string name="poi_toll_booth">كشك طريق مدفوع</string>
|
||||
<string name="poi_traffic_calming_rumble_strip">مطب طريق تحذيري</string>
|
||||
<string name="poi_traffic_calming_table">جدول السرعة</string>
|
||||
<string name="poi_traffic_calming_rumble_strip">مطب تحذيري</string>
|
||||
<string name="poi_traffic_calming_table">مطب مرتفع وطويل</string>
|
||||
<string name="poi_traffic_signals">اشارة توقف ضوئية</string>
|
||||
<string name="poi_service_tyres">إطارات</string>
|
||||
<string name="poi_fuel_hgv_diesel">نقل وقود الديزل</string>
|
||||
<string name="poi_fuel_hgv_diesel">ديزل HGV</string>
|
||||
<string name="poi_photo_studio">استوديو صور</string>
|
||||
<string name="poi_locomotive">قاطرة</string>
|
||||
<string name="poi_e_cigarette">متجر السجائر الإلكترونية</string>
|
||||
<string name="poi_sewing">متجر البضائع الجافة</string>
|
||||
<string name="poi_traffic_calming_choker">سلسلة كبح السرعة</string>
|
||||
<string name="poi_traffic_calming_island">مكان وقوف المارة</string>
|
||||
<string name="poi_sewing">متجر الأغذية المجففة</string>
|
||||
<string name="poi_traffic_calming_choker">مهدئ السرعة</string>
|
||||
<string name="poi_traffic_calming_island">جزيرة مرورية</string>
|
||||
<string name="poi_fuel_cng">غاز طبيعي مضغوط</string>
|
||||
<string name="poi_fuel_svo">زيت نباتي</string>
|
||||
<string name="poi_vehicle_ramp">منحدر مركبة</string>
|
||||
<string name="poi_vehicle_ramp">جسر صيانة سيارات</string>
|
||||
<string name="poi_public_transport_platform_trolleybus">موقف حافلات</string>
|
||||
<string name="poi_railway_buffer_stop">حاجز سكة حديدية</string>
|
||||
<string name="poi_aerialway_cable_car">مركبة كهربائية</string>
|
||||
|
@ -772,10 +772,10 @@
|
|||
<string name="poi_attraction_water_slide">منزلق مائي</string>
|
||||
<string name="poi_lodging">سكن</string>
|
||||
<string name="poi_guest_house">بيت ضيافة</string>
|
||||
<string name="poi_hostel">نزل</string>
|
||||
<string name="poi_hostel">شقة</string>
|
||||
<string name="poi_motel">نزل صغير</string>
|
||||
<string name="poi_alpine_hut">كوخ بجبال الألب</string>
|
||||
<string name="poi_chalet">تشاليه</string>
|
||||
<string name="poi_chalet">شاليه</string>
|
||||
<string name="poi_apartment">شقة</string>
|
||||
<string name="poi_wilderness_hut">كوخ بري</string>
|
||||
<string name="poi_cabin">مقصورة</string>
|
||||
|
@ -807,10 +807,10 @@
|
|||
<string name="poi_xmas_market">سوق عيد الميلاد</string>
|
||||
<string name="poi_xmas_shop">متجر عيد الميلاد</string>
|
||||
<string name="poi_xmas_tree">شجرة عيد الميلاد</string>
|
||||
<string name="poi_emergency_infrastructure">هياكل الإستعجالات</string>
|
||||
<string name="poi_emergency_infrastructure">البنية التحتية للطوارئ</string>
|
||||
<string name="poi_houseware">متجر الأدوات المنزلية</string>
|
||||
<string name="poi_fire_water_pond">احتياطي مياه الحرائق</string>
|
||||
<string name="poi_traffic_calming_chicane">ممهل</string>
|
||||
<string name="poi_fire_water_pond">احتياطي مياه إطفاء الحرائق</string>
|
||||
<string name="poi_traffic_calming_chicane">منعطف صناعي</string>
|
||||
<string name="poi_aeroway_terminal">محطة المطار</string>
|
||||
<string name="poi_aeroway_gate">بوابة الصعود</string>
|
||||
<string name="poi_club_art">نادي الفنون</string>
|
||||
|
@ -823,7 +823,7 @@
|
|||
<string name="poi_club_chess">نادي الشطرنج</string>
|
||||
<string name="poi_club_veterans">نادي قدامى المحاربين</string>
|
||||
<string name="poi_club_hunting">نادي الصيد</string>
|
||||
<string name="poi_speech_therapist">أخصائي في معالجة الكلام</string>
|
||||
<string name="poi_speech_therapist">معالج النطق</string>
|
||||
<string name="poi_craft_sculptor">نحات</string>
|
||||
<string name="poi_craft_shoemaker">إسكافي</string>
|
||||
<string name="poi_craft_tiler">مبلط</string>
|
||||
|
@ -1393,11 +1393,11 @@
|
|||
<string name="poi_fair_trade_no">التجارة العادلة : لا يوجد</string>
|
||||
<string name="poi_fair_trade_only">منتجات التجارة العادلة فقط</string>
|
||||
<string name="poi_protected_area">منطقة محمية</string>
|
||||
<string name="poi_cafeteria">مقهى</string>
|
||||
<string name="poi_cafeteria">كافتيريا</string>
|
||||
<string name="poi_motorcycle_services">الخدمات</string>
|
||||
<string name="poi_motorcycle_type">نوع الدراجة النارية</string>
|
||||
<string name="poi_motorcycle_type_standard">موحد</string>
|
||||
<string name="poi_zoo_type">نوع</string>
|
||||
<string name="poi_zoo_type">النوع</string>
|
||||
<string name="poi_aerialway_station">محطة Aerialway</string>
|
||||
<string name="poi_aerialway_chair_lift">رافعة بالكرسي</string>
|
||||
<string name="poi_aerialway_t_bar">رافعة T</string>
|
||||
|
@ -1407,48 +1407,48 @@
|
|||
<string name="poi_aerialway_mixed_lift">رافعة مختلطة</string>
|
||||
<string name="poi_aerialway_drag_lift">رافعة سحب</string>
|
||||
<string name="poi_aerialway_rope_tow">رافعة سحب</string>
|
||||
<string name="poi_water_well">بئر</string>
|
||||
<string name="poi_water_well">بئر ماء</string>
|
||||
<string name="poi_standpipe">صنبور</string>
|
||||
<string name="poi_lock_gate">قفل البوابة</string>
|
||||
<string name="poi_lock_gate">حوض نقل القوارب</string>
|
||||
<string name="poi_weir">سدّ غاطس</string>
|
||||
<string name="poi_breakwater">حائل الأمواج</string>
|
||||
<string name="poi_breakwater">كاسر الأمواج</string>
|
||||
<string name="poi_groyne">مِرطَم مَوج</string>
|
||||
<string name="poi_power_cable_distribution_cabinet">كبينة توزيع الأسلاك</string>
|
||||
<string name="poi_power_pole">عمود كهربائي</string>
|
||||
<string name="poi_bell_tower">برج جرس</string>
|
||||
<string name="poi_telephone_exchange">مبدلة الخدمات الهاتفية</string>
|
||||
<string name="poi_telephone_exchange">مقسم الهاتف</string>
|
||||
<string name="poi_recycling_cork">فلين</string>
|
||||
<string name="poi_recycling_styrofoam">الستايروفوم</string>
|
||||
<string name="poi_recycling_polyester">بوليستر</string>
|
||||
<string name="poi_recycling_plasterboard">لوح جصي</string>
|
||||
<string name="poi_recycling_fridge_and_freezer">ثلاجة ومجمد</string>
|
||||
<string name="poi_recycling_fridge_and_freezer">ثلاجة وفريزر</string>
|
||||
<string name="poi_recycling_furniture">أثاث</string>
|
||||
<string name="poi_waste_disposal">صرف القمامة</string>
|
||||
<string name="poi_waste_disposal">مكب النفايات</string>
|
||||
<string name="poi_landuse_railway">منطقة سكك حديدية</string>
|
||||
<string name="poi_retail">بيع أراضي بالتجزئة</string>
|
||||
<string name="poi_retail">منطقة محلات بيع بالتجزئة</string>
|
||||
<string name="poi_quarry">مقلع</string>
|
||||
<string name="poi_orchard">بستان</string>
|
||||
<string name="poi_basin">حوض</string>
|
||||
<string name="poi_basin">أرض حوضية</string>
|
||||
<string name="poi_pier">رصيف بحري</string>
|
||||
<string name="poi_crane">رافعة</string>
|
||||
<string name="poi_construction">بناء</string>
|
||||
<string name="poi_direction_all">الاتجاه: الكل</string>
|
||||
<string name="poi_direction_exit">الاتجاه: مخرج</string>
|
||||
<string name="poi_piste_grooming">مسار زحلقة</string>
|
||||
<string name="poi_animal_shelter_type">الحيوانات مسموح بها</string>
|
||||
<string name="poi_piste_grooming">مسار الزحلقة</string>
|
||||
<string name="poi_animal_shelter_type">الحيوانات المسموح بها</string>
|
||||
<string name="poi_animal_shelter_purpose">الغرض</string>
|
||||
<string name="poi_direction_entrance">الوجهة: مدخل</string>
|
||||
<string name="poi_boat_rental_type">قوارب مستأجرة</string>
|
||||
<string name="poi_boat_rental_type">قوارب مأجرة</string>
|
||||
<string name="poi_petroleum_well">بئر نفط</string>
|
||||
<string name="poi_cricket_nets">شبكات الكريكيت</string>
|
||||
<string name="poi_college">كلية</string>
|
||||
<string name="poi_social_facility">مرفق اجتماعي</string>
|
||||
<string name="poi_quarter">ربع</string>
|
||||
<string name="poi_quarter">ربع (مجموع مربعات سكنية)</string>
|
||||
<string name="poi_locality">موضع</string>
|
||||
<string name="poi_nursing_home">دار تمريض</string>
|
||||
<string name="poi_audiologist">اختصاصي السمع</string>
|
||||
<string name="poi_occupational_therapist">أخصائي العلاج الوظيفي</string>
|
||||
<string name="poi_optometrist">طبيب العيون</string>
|
||||
<string name="poi_audiologist">أخصائي سمع</string>
|
||||
<string name="poi_occupational_therapist">أخصائي علاج مهني</string>
|
||||
<string name="poi_optometrist">طبيب عيون</string>
|
||||
<string name="poi_bookmaker">ناشر</string>
|
||||
<string name="poi_golf_course">ملعب غولف</string>
|
||||
<string name="poi_ice_rink">حلبة تزلج</string>
|
||||
|
@ -1456,7 +1456,7 @@
|
|||
<string name="poi_raceway">مضمار سباق</string>
|
||||
<string name="poi_archery">الرماية</string>
|
||||
<string name="poi_turning_circle">دائرة دوران</string>
|
||||
<string name="poi_waterway_turning_point">نقطة دوران في مجرى مائي</string>
|
||||
<string name="poi_waterway_turning_point">نقطة دوران في المياة</string>
|
||||
<string name="poi_forest">محمية</string>
|
||||
<string name="poi_brownfield">أرض صناعية سابقة</string>
|
||||
<string name="poi_greenfield">حقل أخضر</string>
|
||||
|
@ -1482,7 +1482,7 @@
|
|||
<string name="poi_battlefield">ميدان معركة</string>
|
||||
<string name="poi_water_supply_type">نوع إمدادات المياه</string>
|
||||
<string name="poi_water_purification">تنقية المياه</string>
|
||||
<string name="poi_survey_point">نقطة دراسة استقصائية</string>
|
||||
<string name="poi_survey_point">نقطة الاستطلاع</string>
|
||||
<string name="poi_parking_fee">رسوم الموقف</string>
|
||||
<string name="poi_map_type_street">نوع الخريطة: شارع</string>
|
||||
<string name="poi_charging_station">محطة شحن</string>
|
||||
|
@ -1491,20 +1491,20 @@
|
|||
<string name="poi_post_flats">شقة</string>
|
||||
<string name="poi_payment_centre">مركز الدفع</string>
|
||||
<string name="poi_money_transfer">تحويل أموال</string>
|
||||
<string name="poi_operational_status">حالة التشغيل</string>
|
||||
<string name="poi_operational_status">الحالة التشغيلية</string>
|
||||
<string name="poi_water_place_access">الوصول إلى مكان المياه</string>
|
||||
<string name="poi_climbing_style">أسلوب التسلق</string>
|
||||
<string name="poi_socket">موصل</string>
|
||||
<string name="poi_socket">مقبس كهرباء</string>
|
||||
<string name="poi_socket_chademo_output_filter">مخرج CHAdeMO</string>
|
||||
<string name="poi_socket_type2_output_filter">مخرج نوع 2</string>
|
||||
<string name="poi_service_car">خدمة سيارات</string>
|
||||
<string name="poi_service_car">خدمة السيارات</string>
|
||||
<string name="poi_glacier_type">النوع الجليدي</string>
|
||||
<string name="poi_checkpoint_type">نوع نقطة التفتيش</string>
|
||||
<string name="poi_bulk_purchase">الشراء بالجملة</string>
|
||||
<string name="poi_substation_type">النوع</string>
|
||||
<string name="poi_books_type">كتب</string>
|
||||
<string name="poi_denotation">له دلالة</string>
|
||||
<string name="poi_allotments">المخصصات</string>
|
||||
<string name="poi_denotation">إشارة</string>
|
||||
<string name="poi_allotments">أراضي مخصصات</string>
|
||||
<string name="poi_denomination_shaktism">شاكتيزم</string>
|
||||
<string name="poi_bird_hide">مكان لمراقبة الطيور</string>
|
||||
<string name="poi_passing_place">طريق تجاوز</string>
|
||||
|
@ -1624,15 +1624,15 @@
|
|||
<string name="poi_generator_source_biomass">مصدر الطاقة: الكتلة الحيوية</string>
|
||||
<string name="reddit">موقع Reddit</string>
|
||||
<string name="poi_park_ride">اصطف واركب</string>
|
||||
<string name="poi_rtsa_scale_filter">فئة الصعوبة</string>
|
||||
<string name="poi_rtsa_scale_filter">تصنيف الصعوبة</string>
|
||||
<string name="poi_climbing_crag_filter">تسلق الصخور</string>
|
||||
<string name="poi_climbing_crag">نعم</string>
|
||||
<string name="poi_access_bus">منفذ للحافلة</string>
|
||||
<string name="poi_access_motorcycle">مدخل دراجات نارية</string>
|
||||
<string name="poi_access_disabled">مدخل معاقين</string>
|
||||
<string name="poi_cash_withdrawal_bank_card">سحب نقدي</string>
|
||||
<string name="poi_access_motorhome">عربة منزل متنقل</string>
|
||||
<string name="poi_access_caravan">مدخل منازل متنقلة</string>
|
||||
<string name="poi_access_disabled">مدخل المعاقين</string>
|
||||
<string name="poi_cash_withdrawal_bank_card">السحب النقدي</string>
|
||||
<string name="poi_access_motorhome">مدخل المنزل المتنقل</string>
|
||||
<string name="poi_access_caravan">مدخل الكارفان</string>
|
||||
<string name="poi_snowmobile_filter">مدخل دراجة جليد</string>
|
||||
<string name="poi_socket_schuko_output_filter">مخرج Schuko</string>
|
||||
<string name="poi_socket_cee_blue_output_filter">مخرج CEE أزرق</string>
|
||||
|
@ -1644,10 +1644,10 @@
|
|||
<string name="poi_orienteering">التوجيه</string>
|
||||
<string name="poi_ice_stock">مخزون الثلج</string>
|
||||
<string name="poi_bowls">كرة</string>
|
||||
<string name="poi_place_allotments">المخصصات</string>
|
||||
<string name="poi_place_allotments">أراضي مخصصات</string>
|
||||
<string name="poi_register_office">مكتب السجل المدني</string>
|
||||
<string name="poi_bunker_silo">مستودع بنكر</string>
|
||||
<string name="poi_recycling_hardcore">متشدد</string>
|
||||
<string name="poi_bunker_silo">غرفة تحميل</string>
|
||||
<string name="poi_recycling_hardcore">صلب</string>
|
||||
<string name="poi_aerialway_pylon">برج الرفع الجوي</string>
|
||||
<string name="poi_fuel_coal">الوقود: الفحم</string>
|
||||
<string name="poi_fuel_charcoal">الوقود: فحم</string>
|
||||
|
@ -1655,16 +1655,27 @@
|
|||
<string name="poi_fuel_adblue">سائل عادم الديزل</string>
|
||||
<string name="poi_fuel_jeta1">وقود الطائرات النفاثة A-1</string>
|
||||
<string name="poi_fuel_autogas">أوتوجاز</string>
|
||||
<string name="poi_fuel_100ll">100 لتر وقود</string>
|
||||
<string name="poi_fuel_100ll">وقود 100LL</string>
|
||||
<string name="poi_fuel_91ul">وقود 91UL</string>
|
||||
<string name="poi_traffic_signals_arrow">سهم</string>
|
||||
<string name="poi_traffic_signals_arrow">السهم</string>
|
||||
<string name="poi_traffic_signals_vibration">الاهتزاز</string>
|
||||
<string name="poi_fire_hydrant_pressure_filter">الضغط</string>
|
||||
<string name="poi_video_telephone">فيديو</string>
|
||||
<string name="poi_sms">رسالة قصيرة</string>
|
||||
<string name="poi_sms">رسالة SMS</string>
|
||||
<string name="poi_volcano_status">الحالة</string>
|
||||
<string name="poi_volcano_type">النوع</string>
|
||||
<string name="poi_bath_open_air">الهواء الطلق</string>
|
||||
<string name="poi_bath_type">النوع</string>
|
||||
<string name="poi_access_goods">دخول مركبات البضائع الخفيفة</string>
|
||||
<string name="poi_access_goods">مدخل مركبات البضائع الخفيفة</string>
|
||||
<string name="poi_recycling_small_electrical_appliances">الأجهزة الكهربائية الصغيرة</string>
|
||||
<string name="poi_escape_lane">طريق إخلاء</string>
|
||||
<string name="poi_departures_board">لوحة المغادرة</string>
|
||||
<string name="poi_drinking_water_refill">إعادة تعبئة مياه الشرب</string>
|
||||
<string name="poi_access_hgv">مدخل HGV</string>
|
||||
<string name="poi_access_mofa">مدخل الدراجة النارية</string>
|
||||
<string name="poi_access_moped">مدخل الدراجة</string>
|
||||
<string name="poi_access_trailer">مدخل المقطورة</string>
|
||||
<string name="poi_socket_type2_combo_output_filter">نوع 2 مخرج combo</string>
|
||||
<string name="poi_theme_park">حديقه</string>
|
||||
<string name="poi_aquarium">حوض سمك</string>
|
||||
</resources>
|
|
@ -3117,7 +3117,7 @@
|
|||
<string name="utm_format_descr">يستخدم أوسماند تنسيق UTM وهو مشابه ولكن غير مطابق لتنسيق UTM الناتو.</string>
|
||||
<string name="shared_string_example">مثال</string>
|
||||
<string name="navigate_point_format_utm">معيار الإحداثيات</string>
|
||||
<string name="navigate_point_format_olc">فتح رمز الموقع</string>
|
||||
<string name="navigate_point_format_olc">رمز الموقع المفتوح (OLC)</string>
|
||||
<string name="coordinates_format_info">سيتم تطبيق التنسيق المحدد في كل أنحاء التطبيق.</string>
|
||||
<string name="pref_selected_by_default_for_profiles">يتم تحديد هذا الاعداد بشكل افتراضي للأوضاع: %s</string>
|
||||
<string name="change_default_settings">تغيير الإعدادات</string>
|
||||
|
@ -3658,15 +3658,15 @@
|
|||
<string name="osmand_purchases_item">مشتريات أوسماند</string>
|
||||
<string name="legend_item_description">دليل رموز الخريطة.</string>
|
||||
<string name="navigation_profiles_item">أوضاع الملاحة</string>
|
||||
<string name="release_3_7">• خرائط جديدة للمنحدرات غير المتصلة بالإنترنت
|
||||
<string name="release_3_7">• خرائط جديدة للتضاريس توضح المنحدرات من دون الحاجة للاتصال بالإنترنت
|
||||
\n
|
||||
\n • التخصيص الكامل للمفضلات ونقاط الطرق GPX - الألوان المخصصة والأيقونات والأشكال
|
||||
\n
|
||||
\n • تخصيص ترتيب العناصر في قائمة السياق ، تكوين الخريطة ، درج
|
||||
\n
|
||||
\n • ويكيبيديا كطبقة منفصلة في تكوين الخريطة ، حدد اللغات المطلوبة فقط
|
||||
\n • عرض ويكيبيديا كطبقة منفصلة في تكوين الخريطة ، حدد اللغات المطلوبة فقط
|
||||
\n
|
||||
\n • إنشاء مرشح / خرائط POI الخاصة بك مع مرونة تامة
|
||||
\n • إنشاء مرشح / خرائط للمعالم الخاصة بك مع مرونة تامة
|
||||
\n
|
||||
\n • تمت إضافة خيارات لاستعادة إعدادات الأوضاع المخصصة
|
||||
\n
|
||||
|
@ -3674,7 +3674,7 @@
|
|||
\n
|
||||
\n • إصلاح أحجام واجهة المستخدم على الأجهزة اللوحية
|
||||
\n
|
||||
\n • إصلاح الخلل مع RTL
|
||||
\n • إصلاح الخلل مع اللغات التي تكتب من اليمين
|
||||
\n
|
||||
\n</string>
|
||||
<string name="shared_string_resume">إستئناف</string>
|
||||
|
@ -3683,7 +3683,7 @@
|
|||
<string name="quick_action_transport_show">إظهار وسائل النقل العام</string>
|
||||
<string name="quick_action_show_hide_transport">إظهار/إخفاء وسائل النقل العام</string>
|
||||
<string name="quick_action_transport_descr">زر لإظهار أو إخفاء وسائل النقل العام على الخريطة.</string>
|
||||
<string name="create_edit_poi">إنشاء /تحرير POI</string>
|
||||
<string name="create_edit_poi">إنشاء /تحرير موضع مكان</string>
|
||||
<string name="parking_positions">مكان الموقف</string>
|
||||
<string name="add_edit_favorite">إضافة / تحرير المفضلة</string>
|
||||
<string name="reset_deafult_order">استعادة ترتيب العناصر الافتراضية</string>
|
||||
|
|
|
@ -562,7 +562,7 @@
|
|||
<string name="global_app_settings">Агульныя налады праграмы</string>
|
||||
<string name="user_name">Вашае імя карыстальніка OSM</string>
|
||||
<string name="open_street_map_login_descr">Патрэбна для падачы ў openstreetmap.org.</string>
|
||||
<string name="user_password">Ваш пароль OSM</string>
|
||||
<string name="user_password">Пароль</string>
|
||||
<string name="osmand_service">Фонавы рэжым</string>
|
||||
<string name="osmand_service_descr">OsmAnd працуе ў фоне з адключаным экранам.</string>
|
||||
<string name="download_files_not_enough_space">Не стае вольнага месца для спампоўвання %1$s МБ (вольна: %2$s).</string>
|
||||
|
@ -905,7 +905,7 @@
|
|||
<string name="uploading">Запампоўванне…</string>
|
||||
<string name="search_nothing_found">Нічога не знойдзена</string>
|
||||
<string name="searching">Пошук…</string>
|
||||
<string name="searching_address">Пошук адрасу…</string>
|
||||
<string name="searching_address">Пошук адраса…</string>
|
||||
<string name="search_osm_nominatim">Сеціўны пошук праз OSM Nominatim</string>
|
||||
<string name="hint_search_online">Сеціўны пошук: горад, вуліца, дом</string>
|
||||
<string name="search_offline_address">Пазасеціўны пошук</string>
|
||||
|
@ -3478,7 +3478,7 @@
|
|||
<string name="photo_notes">Фотанататкі</string>
|
||||
<string name="route_recalculation">Пераразлік маршруту</string>
|
||||
<string name="login_and_pass">Імя карыстальніка і пароль</string>
|
||||
<string name="plugin_global_prefs_info">Гэтыя алады распаўсюджваюцца на ўсе профілі.</string>
|
||||
<string name="plugin_global_prefs_info">Гэтыя налады ўбудовы распаўсюджваюцца на ўсе профілі</string>
|
||||
<string name="osm_editing">Рэдагаванне OSM</string>
|
||||
<string name="app_mode_osm">OSM</string>
|
||||
<string name="select_nav_icon_descr">Значок будзе паказвацца падчас навігацыі або руху.</string>
|
||||
|
|
|
@ -3654,4 +3654,78 @@ Zobrazená oblast: %1$s x %2$s</string>
|
|||
<string name="keep_screen_on">Nechat obrazovku zapnutou</string>
|
||||
<string name="keep_screen_off">Nechat obrazovku vypnutou</string>
|
||||
<string name="route_between_points_warning_desc">Dále, pro použití této možnosti připojte vaši stopu k nejbližší povolené cestě s některým z vašich navigačních profilů.</string>
|
||||
<string name="use_system_screen_timeout">Použít systémový časový limit obrazovky</string>
|
||||
<string name="reset_to_default_category_button_promo">\"Obnovit do základního nastavení\" nastaví výchozí pořadí.</string>
|
||||
<string name="copy_coordinates">Kopírovat souřadnice</string>
|
||||
<string name="release_3_6">• Profily: nyní můžete změnit pořadí, nastavit ikonu pro mapu, změnit všechna nastavení základních profilů a resetovat je zpět do výchozího stavu
|
||||
\n
|
||||
\n • V navigaci přibylo číslo výjezdu
|
||||
\n
|
||||
\n • Přepracovaná nastavení modulů
|
||||
\n
|
||||
\n • Přepracovaná obrazovka nastavení pro rychlý přístup ke všem profilům
|
||||
\n
|
||||
\n • Přidaná možnost kopírovat nastavení z jiného profilu
|
||||
\n
|
||||
\n • Přidaná možnost skrýt nebo změnit pořadí kategorií bodů zájmu při hledání
|
||||
\n
|
||||
\n • Zpřesněné umístění ikon bodů zájmu na mapě
|
||||
\n
|
||||
\n • Přidané údaje o východu a západu slunce v nastavení mapy
|
||||
\n
|
||||
\n • Přidané ikony Domov a Práce na mapě
|
||||
\n
|
||||
\n • Přidaná podpora pro víceřádkové popisy v nastavení
|
||||
\n
|
||||
\n • Přidaná správná transliterace v mapě Japonska
|
||||
\n
|
||||
\n • Přidaná mapa Antarktidy
|
||||
\n
|
||||
\n</string>
|
||||
<string name="clear_recorded_data">Vymazat zaznamenaná data</string>
|
||||
<string name="routing_profile_direct_to">Přímo k bodu</string>
|
||||
<string name="ui_customization_description">Nastavte počet položek v \"Úvodním panelu\", \"Nastavení mapy\" a \"Kontextovém menu\".
|
||||
\n
|
||||
\nVypněte nepoužívané moduly, abyste skryli jejich ovládací prvky. %1$s.</string>
|
||||
<string name="ui_customization_short_descr">Položky v úvodním panelu a kontextovém menu</string>
|
||||
<string name="ui_customization">Nastavení uživatelského rozhraní</string>
|
||||
<string name="shared_string_drawer">Úvodní panel</string>
|
||||
<string name="quick_action_transport_hide">Skrýt veřejnou dopravu</string>
|
||||
<string name="quick_action_transport_show">Zobrazit veřejnou dopravu</string>
|
||||
<string name="quick_action_show_hide_transport">Zobrazit/skrýt veřejnou dopravu</string>
|
||||
<string name="quick_action_transport_descr">Tlačítko pro zobrazení nebo skrytí veřejné dopravy na mapě.</string>
|
||||
<string name="create_edit_poi">Vytvořit / upravit bod zájmu</string>
|
||||
<string name="parking_positions">Parkovací místa</string>
|
||||
<string name="add_edit_favorite">Přidat / upravit oblíbený bod</string>
|
||||
<string name="reset_deafult_order">Obnovit výchozí pořadí položek</string>
|
||||
<string name="back_to_editing">Zpět k úpravám</string>
|
||||
<string name="quick_action_switch_profile_descr">Tlačítko akce přepne mezi zvolenými profily.</string>
|
||||
<string name="shared_string_add_profile">Přidat profil</string>
|
||||
<string name="change_application_profile">Změnit profil aplikace</string>
|
||||
<string name="profiles_for_action_not_found">Nebyly nalezeny žádné vhodné profily.</string>
|
||||
<string name="index_item_world_basemap_detailed">Přehledová mapa světa (detailní)</string>
|
||||
<string name="unsupported_type_error">Nepodporovaný typ</string>
|
||||
<string name="width_limit_description">Zadejte šířku svého vozidla, na trase mohou být omezení pro široká vozidla.</string>
|
||||
<string name="height_limit_description">Zadejte výšku svého vozidla, na trase mohou být omezení pro vysoká vozidla.</string>
|
||||
<string name="weight_limit_description">Zadejte hmotnost svého vozidla, na trase mohou být omezení pro těžká vozidla.</string>
|
||||
<string name="lenght_limit_description">Zadejte délku svého vozidla, na trase mohou být omezení pro dlouhá vozidla.</string>
|
||||
<string name="gpx_parse_error">GPX nemá správný tvar pro OsmAnd, kontaktujte prosím podporu pro další přezkoumání.</string>
|
||||
<string name="shared_string_always">Vždy</string>
|
||||
<string name="screen_control">Ovládání obrazovky</string>
|
||||
<string name="system_screen_timeout_descr">Vypne obrazovku po uplynutí systémového časového limitu.</string>
|
||||
<string name="system_screen_timeout">Použít systémový časový limit obrazovky</string>
|
||||
<string name="turn_screen_on_descr">Zvolte možnosti probuzení obrazovky (při zamykání zařízení se ujistěte, že je OsmAnd na popředí):</string>
|
||||
<string name="turn_screen_on_navigation_instructions_descr">Každý navigační pokyn zapne obrazovku.</string>
|
||||
<string name="turn_screen_on_navigation_instructions">Navigační pokyny</string>
|
||||
<string name="turn_screen_on_power_button_disabled">Vypnuto. Vyžaduje \"Nechat obrazovku zapnutou\" pod \"Časový limit obrazovky po probuzení\".</string>
|
||||
<string name="turn_screen_on_power_button_descr">Stisknutím tlačítka napájení zapnete obrazovku s aplikací OsmAnd na zamčené obrazovce.</string>
|
||||
<string name="turn_screen_on_power_button">Tlačítko napájení</string>
|
||||
<string name="turn_screen_on_proximity_sensor">Senzor přiblížení</string>
|
||||
<string name="turn_screen_on_wake_time_descr">Zvolte časový limit vypnutí obrazovky po probuzení (\"%1$s\" znamená bez časového limitu.)</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">Musíte přidat aspoň dva body.</string>
|
||||
<string name="manage_subscription">Spravovat předplatné</string>
|
||||
<string name="subscription_payment_issue_title">S vaším předplatným je problém. Klikněte na tlačítko pro přechod do nastavení předplatného v Google Play a opravte způsob platby.</string>
|
||||
<string name="subscription_expired_title">Předplatné OsmAnd Live skončilo</string>
|
||||
<string name="subscription_paused_title">Předplatné OsmAnd Live je pozastaveno</string>
|
||||
<string name="subscription_on_hold_title">Předplatné OsmAnd Live je zablokované</string>
|
||||
</resources>
|
|
@ -3951,4 +3951,10 @@
|
|||
<string name="icon_group_symbols">Symbole</string>
|
||||
<string name="shared_string_local_maps">Lokale Karten</string>
|
||||
<string name="icon_group_special">Spezial</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">Sie müssen mindestens zwei Punkte hinzufügen.</string>
|
||||
<string name="manage_subscription">Abonnement verwalten</string>
|
||||
<string name="subscription_payment_issue_title">Es gibt ein Problem mit Ihrem Abonnement. Klicken Sie auf die Schaltfläche, um zu den Einstellungen des Google Play Abonnements zu gelangen und Ihre Zahlungsmethode zu überprüfen.</string>
|
||||
<string name="subscription_expired_title">OsmAnd Live Abonnement ist abgelaufen</string>
|
||||
<string name="subscription_paused_title">OsmAnd Live Abonnement wurde ausgesetzt</string>
|
||||
<string name="subscription_on_hold_title">OsmAnd Live Abonnement liegt auf Eis</string>
|
||||
</resources>
|
|
@ -3946,4 +3946,10 @@
|
|||
<string name="navigate_point_mgrs">MGRS</string>
|
||||
<string name="navigate_point_format_mgrs">MGRS</string>
|
||||
<string name="mgrs_format_descr">OsmAnd uzas MGRS, kiu estas simila al la formo UTM NATO.</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">Aldonu almenaŭ du punktojn.</string>
|
||||
<string name="manage_subscription">Administri abonon</string>
|
||||
<string name="subscription_payment_issue_title">Okazis problemo pri via abono. Premu la butonon por iri al agordoj pri abonoj ĉe Google Play por korekti vian pagmanieron.</string>
|
||||
<string name="subscription_expired_title">Abono OsmAnd Live senvalidiĝis</string>
|
||||
<string name="subscription_paused_title">Abono OsmAnd Live estas paŭziigita</string>
|
||||
<string name="subscription_on_hold_title">Abono OsmAnd Live estas ĉesigita</string>
|
||||
</resources>
|
|
@ -1033,7 +1033,7 @@
|
|||
<string name="global_app_settings">Ajustes globales de la aplicación</string>
|
||||
<string name="user_name">Nombre de usuario de OSM</string>
|
||||
<string name="open_street_map_login_descr">Necesario para envíos a OpenStreetMap.org.</string>
|
||||
<string name="user_password">Contraseña de OSM</string>
|
||||
<string name="user_password">Contraseña</string>
|
||||
<string name="osmand_service">Modo reposo</string>
|
||||
<string name="osmand_service_descr">OsmAnd se ejecuta en modo reposo con la pantalla apagada.</string>
|
||||
<string name="download_files_not_enough_space">Sin espacio suficiente para descargar %1$s MB (disponible: %2$s).</string>
|
||||
|
@ -3430,7 +3430,7 @@
|
|||
<string name="route_recalculation">Recálculo de la ruta</string>
|
||||
<string name="accessibility_announce">Anunciar</string>
|
||||
<string name="login_and_pass">Nombre de usuario y contraseña</string>
|
||||
<string name="plugin_global_prefs_info">Estos ajustes se aplican a todos los perfiles.</string>
|
||||
<string name="plugin_global_prefs_info">Los ajustes de este complemento son globales y se aplican a todos los perfiles</string>
|
||||
<string name="osm_editing">Edición de OSM</string>
|
||||
<string name="osm_edits_view_descr">Puedes ver todas tus ediciones no subidas o errores de OSM en «%1$s». Los puntos subidos no se muestran en OsmAnd.</string>
|
||||
<string name="app_mode_osm">OSM</string>
|
||||
|
@ -3952,4 +3952,18 @@
|
|||
<string name="navigate_point_format_mgrs">MGRS</string>
|
||||
<string name="mgrs_format_descr">OsmAnd usa MGRS, similar al formato UTM de la OTAN.</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">Debes añadir al menos dos puntos.</string>
|
||||
<string name="manage_subscription">Gestionar suscripción</string>
|
||||
<string name="subscription_payment_issue_title">Hay un problema con la suscripción. Pulsa el botón para ir a los ajustes de la suscripción de Google Play y corregir el método de pago.</string>
|
||||
<string name="subscription_expired_title">La suscripción a OsmAnd Live ha caducado</string>
|
||||
<string name="subscription_paused_title">La suscripción a OsmAnd Live se ha pausado</string>
|
||||
<string name="subscription_on_hold_title">La suscripción a OsmAnd Live está en espera</string>
|
||||
<string name="sing_in_with_open_street_map">Ingresar con OpenStreetMap</string>
|
||||
<string name="login_open_street_map">Iniciar sesión en OpenStreetMap</string>
|
||||
<string name="login_open_street_map_org">Ingresar a OpenStreetMap.org</string>
|
||||
<string name="open_street_map_login_mode">Necesitas iniciar sesión para subir cambios nuevos o modificados.
|
||||
\n
|
||||
\nPuedes ingresar usando el método seguro de OAuth o usar el nombre de usuario y contraseña.</string>
|
||||
<string name="use_login_password">Utilice nombre de usuario y contraseña</string>
|
||||
<string name="login_account">Cuenta</string>
|
||||
<string name="user_login">Iniciar sesión</string>
|
||||
</resources>
|
|
@ -1943,7 +1943,7 @@
|
|||
<string name="general_settings_descr">Seadista ekraan ja rakenduse üldised seaded.</string>
|
||||
<string name="global_app_settings">Rakenduse üldised seaded</string>
|
||||
<string name="user_name">Sinu OSM kasutajanimi</string>
|
||||
<string name="user_password">Sinu OSM salasõna</string>
|
||||
<string name="user_password">Salasõna</string>
|
||||
<string name="osmand_service">Taustarežiim</string>
|
||||
<string name="osmand_service_descr">OsmAnd töötab taustal, ekraan välja lülitatud.</string>
|
||||
<string name="download_files_question_space">Kas laeme alla {0} fail(i)\?
|
||||
|
@ -3358,7 +3358,7 @@
|
|||
<string name="route_recalculation">Teekonna ümberarvutamine</string>
|
||||
<string name="accessibility_announce">Teata</string>
|
||||
<string name="login_and_pass">Kasutajanimi ja salasõna</string>
|
||||
<string name="plugin_global_prefs_info">Need seaded rakenduvad kõikidele profiilidele.</string>
|
||||
<string name="plugin_global_prefs_info">Need seaded on üldised ja rakenduvad kõikidele profiilidele</string>
|
||||
<string name="osm_editing">OSM\'i andmete muutmine</string>
|
||||
<string name="osm_edits_view_descr">Kõiki üleslaadimata muudatusi või OSM vigu saad vaadata menüüs %1$s. Üleslaaditud punkte OsmAnd ei kuva.</string>
|
||||
<string name="app_mode_osm">OSM</string>
|
||||
|
@ -3798,4 +3798,17 @@
|
|||
<string name="mgrs_format_descr">OsmAnd kasutab MGRS-vormingut, mis on sarnane NATO UTM-vormingule.</string>
|
||||
<string name="navigate_point_format_mgrs">MGRS</string>
|
||||
<string name="navigate_point_mgrs">MGRS</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">Graafiku joonistamiseks pead lisama vähemalt kaks punkti.</string>
|
||||
<string name="subscription_on_hold_title">OsmAnd Live tellimus on ootel</string>
|
||||
<string name="subscription_paused_title">OsmAnd Live tellimus on peatatud</string>
|
||||
<string name="subscription_expired_title">OsmAnd Live tellimus on aegunud</string>
|
||||
<string name="subscription_payment_issue_title">Sinu tellimusega on üks pisikene segadus. Selleks et Google Play seadistuses makseviisi parandada, palun klõpsi seda nuppu.</string>
|
||||
<string name="manage_subscription">Halda tellimusi</string>
|
||||
<string name="sing_in_with_open_street_map">Logi sisse OpenStreetMapi kasutajakontoga</string>
|
||||
<string name="user_login">Kasutajanimi</string>
|
||||
<string name="use_login_password">Pruugi kasutajanime ja salasõna</string>
|
||||
<string name="open_street_map_login_mode">Täienduste või muudatuste üleslaadimiseks pead sisse logima.
|
||||
\n
|
||||
\nSa võid selleks kasutada mõnd turvalust OAuth võimalust või oma kasutajanime ning salasõna.</string>
|
||||
<string name="login_account">Kasutajakonto</string>
|
||||
</resources>
|
|
@ -51,7 +51,7 @@
|
|||
<string name="global_app_settings">Paramètres globaux de l\'application</string>
|
||||
<string name="user_name">Votre identifiant OSM</string>
|
||||
<string name="open_street_map_login_descr">Nécessaire pour les contributions à openstreetmap.org.</string>
|
||||
<string name="user_password">Votre mot de passe OSM</string>
|
||||
<string name="user_password">Mot de passe</string>
|
||||
<string name="osmand_service">Mode arrière-plan</string>
|
||||
<string name="osmand_service_descr">OsmAnd s\'exécute en arrière-plan, écran éteint.</string>
|
||||
<string name="switch_to_raster_map_to_see">Téléchargez une carte vectorielle hors-ligne pour ce lieu (depuis « Paramètres » > « Gérer les cartes ») ou utilisez le greffon « cartes en ligne ».</string>
|
||||
|
@ -3926,5 +3926,15 @@
|
|||
<string name="mgrs_format_descr">OsmAnd utilise le système de référence MDRS de l\'OTAN dérivé des formats UTM et UPS.</string>
|
||||
<string name="navigate_point_format_mgrs">MGRS</string>
|
||||
<string name="navigate_point_mgrs">MGRS</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">Vous devez ajouter, au moins, deux points.</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">Vous devez, au moins, ajouter deux points.</string>
|
||||
<string name="subscription_on_hold_title">L\'abonnement OsmAnd Live est en attente</string>
|
||||
<string name="subscription_expired_title">L’abonnement OsmAnd Live a expiré</string>
|
||||
<string name="subscription_paused_title">L\'abonnement OsmAnd Live a été suspendu</string>
|
||||
<string name="login_open_street_map">Se connecter à OpenStreetMap</string>
|
||||
<string name="login_open_street_map_org">Se connecter à OpenStreetMap.org</string>
|
||||
<string name="sing_in_with_open_street_map">Se connecter avec OpenStreetMap</string>
|
||||
<string name="user_login">Identifiant</string>
|
||||
<string name="use_login_password">Utiliser un identifiant et un mot de passe</string>
|
||||
<string name="login_account">Compte</string>
|
||||
<string name="manage_subscription">Gérer l\'abonnement</string>
|
||||
</resources>
|
|
@ -3842,4 +3842,5 @@
|
|||
<string name="poi_parking_sheds">Pendellos</string>
|
||||
<string name="poi_parking_rooftop">Terrazo</string>
|
||||
<string name="poi_gpx_point">Punto GPX</string>
|
||||
<string name="poi_radar_tower">Torre de radar</string>
|
||||
</resources>
|
|
@ -3971,4 +3971,10 @@ Lon %2$s</string>
|
|||
<string name="icon_group_sport">Deporte</string>
|
||||
<string name="icon_group_emergency">Emerxencia</string>
|
||||
<string name="icon_group_travel">Viaxe</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">Tes que engadir polo menos dous puntos.</string>
|
||||
<string name="manage_subscription">Xestionar subscrición</string>
|
||||
<string name="subscription_payment_issue_title">Hai un problema coa túa subscrición. Preme no botón para ir ós axustes de subscrición da Google Play e corrixir o teu método de pagamento.</string>
|
||||
<string name="subscription_expired_title">A subscrición do OsmAnd Live expirou</string>
|
||||
<string name="subscription_paused_title">A subscrición do OsmAnd Live foi detida</string>
|
||||
<string name="subscription_on_hold_title">A subscrición do OsmAnd Live está en espera</string>
|
||||
</resources>
|
|
@ -239,7 +239,7 @@
|
|||
<string name="map_overlay_descr">Rátéttérkép kiválasztása</string>
|
||||
<string name="tile_source_already_installed">A térkép már telepítve van, a beállítások frissülnek.</string>
|
||||
<string name="select_tile_source_to_install">(Csempés) térkép kiválasztása telepítéshez vagy frissítéshez.</string>
|
||||
<string name="internet_not_available">Nem lehet végrehajtani a műveletet internetkapcsolat nélkül.</string>
|
||||
<string name="internet_not_available">A műveletet nem lehetséges internetkapcsolat nélkül végrehajtani.</string>
|
||||
<string name="install_more">További telepítése…</string>
|
||||
<string name="level_to_switch_vector_raster_descr">Raszteres térképek használata ezen nagyítási szint alatt.</string>
|
||||
<string name="level_to_switch_vector_raster">Legkisebb vektoros nagyítási szint</string>
|
||||
|
@ -1228,7 +1228,7 @@
|
|||
<string name="import_file_favourites">Mented az adatokat GPX fájlként, vagy importálod az útpontokat a „Kedvencek”-be?</string>
|
||||
<string name="shared_string_share">Megosztás</string>
|
||||
<string name="share_fav_subject">OsmAndból megosztott kedvencek</string>
|
||||
<string name="no_index_file_to_download">Nem találhatók letöltések, ellenőrizd az internetkapcsolatot.</string>
|
||||
<string name="no_index_file_to_download">Nem találhatók letöltések, ellenőrizze az internetkapcsolatot.</string>
|
||||
<string name="none_selected_gpx">Először egy hosszú koppintással adjon meg egy GPX-fájlt.</string>
|
||||
<string name="local_index_select_gpx_file">Nyomvonal kijelölése</string>
|
||||
<string name="sort_by_distance">Rendezés távolság szerint</string>
|
||||
|
@ -1370,7 +1370,7 @@
|
|||
<string name="download_tab_updates">Frissítések</string>
|
||||
<string name="download_tab_downloads">Letöltés</string>
|
||||
<string name="download_tab_local">Helyi</string>
|
||||
<string name="no_internet_connection">A letöltés nem lehetséges, ellenőrizd az internet-kapcsolatot.</string>
|
||||
<string name="no_internet_connection">A letöltés nem lehetséges, ellenőrizze az internetkapcsolatot.</string>
|
||||
<string name="shared_string_dismiss">Bezárás</string>
|
||||
<string name="everything_up_to_date">Minden fájl naprakész</string>
|
||||
<string name="use_opengl_render">OpenGL megjelenítő használata</string>
|
||||
|
@ -2493,9 +2493,9 @@
|
|||
<string name="context_menu_points_of_group">A csoport összes pontja</string>
|
||||
<string name="open_from">Nyitva ekkortól:</string>
|
||||
<string name="open_till">Nyitva eddig:</string>
|
||||
<string name="will_close_at">Bezár ekkor:</string>
|
||||
<string name="will_open_at">Kinyit ekkor:</string>
|
||||
<string name="will_open_on">Kinyit ekkor:</string>
|
||||
<string name="will_close_at">Ekkor zár:</string>
|
||||
<string name="will_open_at">Ekkor nyit:</string>
|
||||
<string name="will_open_on">Ekkor nyit:</string>
|
||||
<string name="additional_actions">További műveletek</string>
|
||||
<string name="av_locations_selected_desc">GPX fájl a kijelölt jegyzetek koordinátáival és adataival.</string>
|
||||
<string name="av_locations_all_desc">GPX fájl az összes jegyzet koordinátáival és adataival.</string>
|
||||
|
@ -3939,4 +3939,5 @@
|
|||
<string name="navigate_point_format_mgrs">MGRS</string>
|
||||
<string name="mgrs_format_descr">Az OsmAnd a NATO által is használt MGRS (Military Grid Reference System) koordinátákat alkamazza, amely hasonlít az UTM-formátumhoz.</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">Legalább két pontot kell hozzáadnia.</string>
|
||||
<string name="manage_subscription">Előfizetés kezelése</string>
|
||||
</resources>
|
|
@ -303,7 +303,7 @@
|
|||
<string name="global_app_settings">הגדרות יישומים כלליות</string>
|
||||
<string name="user_name">שם המשתמש שלך ב־OSM</string>
|
||||
<string name="open_street_map_login_descr">נדרש לטובת שליחת נתונים אל openstreetmap.org.</string>
|
||||
<string name="user_password">הססמה שלך ב־OSM</string>
|
||||
<string name="user_password">ססמה</string>
|
||||
<string name="osmand_service">מצב רקע</string>
|
||||
<string name="osmand_service_descr">OsmAnd פועל ברקע בזמן שהמסך כבוי.</string>
|
||||
<string name="download_files_not_enough_space">אין די מקום כדי להוריד %1$s מ״ב (פנויים: %2$s).</string>
|
||||
|
@ -3951,4 +3951,14 @@
|
|||
<string name="mgrs_format_descr">ב־OsmAnd נעשה שימוש ב־MGRS, שדומה לתצורת UTM NATO.</string>
|
||||
<string name="navigate_point_mgrs">MGRS</string>
|
||||
<string name="navigate_point_format_mgrs">MGRS</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">עליך להוסיף שתי נקודות לפחות.</string>
|
||||
<string name="login_open_street_map">כניסה ל־OpenStreetMap</string>
|
||||
<string name="login_open_street_map_org">כניסה ל־OpenStreetMap.org</string>
|
||||
<string name="sing_in_with_open_street_map">כניסה עם OpenStreetMap</string>
|
||||
<string name="use_login_password">להשתמש בשם כניסה וססמה</string>
|
||||
<string name="login_account">חשבון</string>
|
||||
<string name="user_login">כניסה</string>
|
||||
<string name="manage_subscription">ניהול מינוי</string>
|
||||
<string name="subscription_expired_title">תוקף המינוי ל־OsmAnd Live פג</string>
|
||||
<string name="subscription_paused_title">המינוי ל־OsmAnd Live הושהה</string>
|
||||
</resources>
|
2
OsmAnd/res/values-lb/strings.xml
Normal file
2
OsmAnd/res/values-lb/strings.xml
Normal file
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
|
@ -3562,10 +3562,10 @@
|
|||
<string name="poi_hazard">Zagrożenie</string>
|
||||
<string name="poi_health_specialty_radiotherapy_yes">Radioterapia</string>
|
||||
<string name="poi_change_delete">Usunięty obiekt</string>
|
||||
<string name="poi_rtsa_scale_nc">н/к</string>
|
||||
<string name="poi_rtsa_scale_nc_asterisk">н/к*</string>
|
||||
<string name="poi_rtsa_scale_nc">n/c</string>
|
||||
<string name="poi_rtsa_scale_nc_asterisk">n/c*</string>
|
||||
<string name="poi_rtsa_scale_1a">1A</string>
|
||||
<string name="poi_rtsa_scale_1a_asterisk">1А*</string>
|
||||
<string name="poi_rtsa_scale_1a_asterisk">1A*</string>
|
||||
<string name="poi_rtsa_scale_1b">1B</string>
|
||||
<string name="poi_rtsa_scale_1b_asterisk">1B*</string>
|
||||
<string name="poi_rtsa_scale_2a">2A</string>
|
||||
|
@ -3817,7 +3817,7 @@
|
|||
<string name="poi_seamark_water_level_below_mwl">Poziom wody: poniżej średniego poziomu wody</string>
|
||||
<string name="poi_seamark_water_level_awash">Poziom wody: obmywający falami</string>
|
||||
<string name="poi_seamark_water_level_covers">Poziom wody: pokrywający</string>
|
||||
<string name="poi_internet_access_fee_customers">Dostęp do Internetu dla klientów</string>
|
||||
<string name="poi_internet_access_fee_customers">Dostęp do Internetu: klienci</string>
|
||||
<string name="poi_osmand_fire_hydrant_pressure_suction">Ssanie</string>
|
||||
<string name="poi_osmand_fire_hydrant_pressure_pressurized">Pod ciśnieniem</string>
|
||||
<string name="poi_fire_hydrant_style_water_source_groundwater">Woda podziemna</string>
|
||||
|
|
|
@ -3837,9 +3837,7 @@
|
|||
<string name="route_between_points_whole_track_button_desc">Cała trasa zostanie ponownie wyznaczona przy użyciu wybranego profilu.</string>
|
||||
<string name="route_between_points_next_segment_button_desc">Tylko następny segment zostanie przeliczony przy użyciu wybranego profilu.</string>
|
||||
<string name="route_between_points_desc">Wybierz sposób łączenia punktów, za pomocą linii prostej, lub oblicz trasę między nimi w sposób określony poniżej.</string>
|
||||
<string name="route_between_points_warning_desc">Aby skorzystać z tej opcji, OsmAnd musi przyciągnąć ślad do dróg mapy.
|
||||
\n
|
||||
\nW następnym kroku należy wybrać profil nawigacji w celu wykrycia dozwolonych dróg i odległości progowej w celu przybliżenia śledzenia drogi.</string>
|
||||
<string name="route_between_points_warning_desc">Następnie przyciągnij trasę do najbliższej dozwolonej drogi za pomocą jednego z profili nawigacji, aby skorzystać z tej opcji.</string>
|
||||
<string name="street_level_imagery">Zdjęcia z poziomu ulicy</string>
|
||||
<string name="plan_route_exit_dialog_descr">Czy na pewno chcesz odrzucić wszystkie zmiany w zaplanowanej trasie, zamykając ją\?</string>
|
||||
<string name="in_case_of_reverse_direction">W przypadku odwrotnego kierunku</string>
|
||||
|
@ -3945,7 +3943,7 @@
|
|||
<string name="shared_string_local_maps">Mapy lokalne</string>
|
||||
<string name="app_mode_gap">Luka</string>
|
||||
<string name="icon_group_amenity">Udogodnienie</string>
|
||||
<string name="icon_group_special">Specjalne</string>
|
||||
<string name="icon_group_special">Specjalny</string>
|
||||
<string name="icon_group_transport">Transport</string>
|
||||
<string name="icon_group_service">Usługi</string>
|
||||
<string name="icon_group_symbols">Symbole</string>
|
||||
|
@ -3956,4 +3954,8 @@
|
|||
<string name="manage_subscription">Zarządzaj subskrypcją</string>
|
||||
<string name="subscription_expired_title">Subskrypcja OsmAnd Live wygasła</string>
|
||||
<string name="subscription_paused_title">Subskrypcja OsmAnd Live została wstrzymana</string>
|
||||
<string name="snowmobile_render_descr">Do jazdy skuterem śnieżnym z wyznaczonymi drogami i torami.</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">Należy dodać co najmniej dwa punkty.</string>
|
||||
<string name="subscription_payment_issue_title">Wystąpił problem z Twoją subskrypcją. Kliknij przycisk, aby przejść do ustawień subskrypcji Google Play i naprawić metodę płatności.</string>
|
||||
<string name="subscription_on_hold_title">Subskrypcja OsmAnd Live jest wstrzymana</string>
|
||||
</resources>
|
|
@ -1020,7 +1020,7 @@
|
|||
<string name="global_app_settings">Configurações globais do aplicativo</string>
|
||||
<string name="user_name">Seu nome de usuário OSM</string>
|
||||
<string name="open_street_map_login_descr">Necessário para envios ao openstreetmap.org.</string>
|
||||
<string name="user_password">Sua senha do OSM</string>
|
||||
<string name="user_password">Senha</string>
|
||||
<string name="osmand_service">Modo em segundo plano</string>
|
||||
<string name="osmand_service_descr">OsmAnd é executado em segundo plano com a tela desligada.</string>
|
||||
<string name="arrival_distance_factor_late">Atrasado</string>
|
||||
|
@ -3421,9 +3421,9 @@
|
|||
<string name="route_recalculation">Recálculo da rota</string>
|
||||
<string name="accessibility_announce">Anunciar</string>
|
||||
<string name="login_and_pass">Usuário e senha</string>
|
||||
<string name="plugin_global_prefs_info">Essas configurações se aplicam a todos os perfis.</string>
|
||||
<string name="plugin_global_prefs_info">Essas configurações de plug-in são globais e se aplicam a todos os perfis</string>
|
||||
<string name="osm_editing">Edição OSM</string>
|
||||
<string name="osm_edits_view_descr">Você pode ver todos os erros de osm do editor carregado em %1$s. Os pontos enviados não são exibidos no OsmAnd.</string>
|
||||
<string name="osm_edits_view_descr">Você pode ver todas as suas edições descarregadas ou erros do OSM em %1$s. Os pontos carregados não aparecem no OsmAnd.</string>
|
||||
<string name="app_mode_osm">OSM</string>
|
||||
<string name="select_nav_icon_descr">Ícone mostrado ao navegar ou mover.</string>
|
||||
<string name="select_map_icon_descr">Ícone mostrado em repouso.</string>
|
||||
|
@ -3947,4 +3947,14 @@
|
|||
<string name="subscription_expired_title">A assinatura do OsmAnd Live expirou</string>
|
||||
<string name="subscription_paused_title">A assinatura do OsmAnd Live foi pausada</string>
|
||||
<string name="subscription_on_hold_title">A assinatura do OsmAnd Live está em espera</string>
|
||||
<string name="app_mode_gap">Diferença</string>
|
||||
<string name="login_open_street_map">Entrar para OpenStreetMap</string>
|
||||
<string name="login_open_street_map_org">Entrar com OpenStreetMap.org</string>
|
||||
<string name="sing_in_with_open_street_map">Entrar com OpenStreetMap</string>
|
||||
<string name="open_street_map_login_mode">Você precisa entrar para enviar alterações novas ou modificadas.
|
||||
\n
|
||||
\nVocê pode entrar usando o método OAuth seguro ou usar sua entrada e senha.</string>
|
||||
<string name="use_login_password">Usar a entrada e senha</string>
|
||||
<string name="login_account">Conta</string>
|
||||
<string name="user_login">Entrar</string>
|
||||
</resources>
|
|
@ -3950,4 +3950,9 @@
|
|||
<string name="icon_group_emergency">Emergência</string>
|
||||
<string name="icon_group_travel">Viagem</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">Deve adicionar pelo menos dois pontos.</string>
|
||||
<string name="manage_subscription">Gerir a assinatura</string>
|
||||
<string name="subscription_payment_issue_title">Há um problema com a sua assinatura. Clique no botão para ir às definições de assinatura do Google Play para corrigir o seu método de pagamento.</string>
|
||||
<string name="subscription_expired_title">A assinatura do OsmAnd Live expirou</string>
|
||||
<string name="subscription_paused_title">A assinatura do OsmAnd Live foi pausada</string>
|
||||
<string name="subscription_on_hold_title">A assinatura do OsmAnd Live está em espera</string>
|
||||
</resources>
|
|
@ -3845,4 +3845,5 @@
|
|||
<string name="poi_parking_sheds">Cabannas</string>
|
||||
<string name="poi_parking_rooftop">Cobertura</string>
|
||||
<string name="poi_gpx_point">Puntu GPX</string>
|
||||
<string name="poi_radar_tower">Torre ràdar</string>
|
||||
</resources>
|
|
@ -261,7 +261,7 @@
|
|||
<string name="amenity_type_osmwiki">Wikipedia (çevrim dışı)</string>
|
||||
<string name="amenity_type_user_defined">Kullanıcı tanımlı</string>
|
||||
<string name="settings_preset">Öntanımlı profil</string>
|
||||
<string name="user_password">OSM şifreniz</string>
|
||||
<string name="user_password">Parola</string>
|
||||
<string name="download_files_not_enough_space">İndirme için yeterli yer yok: %1$s MB (free: %2$s).</string>
|
||||
<string name="animate_route_off">Animasyonu durdur</string>
|
||||
<string name="animate_route">Animasyonu başlat</string>
|
||||
|
@ -3382,9 +3382,9 @@
|
|||
<string name="route_recalculation">Rotanın yeniden hesaplanması</string>
|
||||
<string name="accessibility_announce">Duyuru</string>
|
||||
<string name="login_and_pass">Kullanıcı adı ve parola</string>
|
||||
<string name="plugin_global_prefs_info">Bu ayarlar tüm profiller için geçerlidir.</string>
|
||||
<string name="plugin_global_prefs_info">Bu eklenti ayarları geneldir ve tüm profiller için geçerlidir</string>
|
||||
<string name="osm_editing">OSM düzenleme</string>
|
||||
<string name="osm_edits_view_descr">Karşıya yüklenmemiş tüm düzenlemelerinizi veya osm hatalarınızı %1$s içinde görüntüleyebilirsiniz. Yüklenen noktalar OsmAnd\'de gösterilmez.</string>
|
||||
<string name="osm_edits_view_descr">Yüklenmemiş tüm düzenlemelerinizi veya OSM hatalarınızı %1$s\'de görüntüleyebilirsiniz. Karşıya yüklenen noktalar OsmAnd\'da gösterilmez.</string>
|
||||
<string name="app_mode_osm">OSM</string>
|
||||
<string name="select_nav_icon_descr">Navigasyon sırasında veya harekete halindeyken gösterilen simge.</string>
|
||||
<string name="select_map_icon_descr">Dinlenme anında gösterilen simge.</string>
|
||||
|
@ -3903,4 +3903,18 @@
|
|||
<string name="icon_group_emergency">Acil</string>
|
||||
<string name="icon_group_travel">Seyahat</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">En az iki nokta eklemelisiniz.</string>
|
||||
<string name="login_open_street_map">OpenStreetMap\'te oturum aç</string>
|
||||
<string name="login_open_street_map_org">OpenStreetMap.org\'da oturum aç</string>
|
||||
<string name="sing_in_with_open_street_map">OpenStreetMap ile giriş yap</string>
|
||||
<string name="open_street_map_login_mode">Yenilikleri veya değişiklikleri karşıya yüklemek için oturum açmanız gerekir.
|
||||
\n
|
||||
\nGüvenli OAuth yöntemini kullanarak oturum açabilir veya kullanıcı adı ve parolanızı kullanabilirsiniz.</string>
|
||||
<string name="use_login_password">Kullanıcı adı ve parola kullan</string>
|
||||
<string name="user_login">Kullanıcı adı</string>
|
||||
<string name="login_account">Hesap</string>
|
||||
<string name="manage_subscription">Aboneliği yönet</string>
|
||||
<string name="subscription_payment_issue_title">Aboneliğinizle ilgili bir sorun var. Ödeme yönteminizi düzeltmek üzere Google Play abonelik ayarlarına gitmek için düğmeye tıklayın.</string>
|
||||
<string name="subscription_expired_title">OsmAnd Live aboneliğinin süresi doldu</string>
|
||||
<string name="subscription_paused_title">OsmAnd Live aboneliği duraklatıldı</string>
|
||||
<string name="subscription_on_hold_title">OsmAnd Live aboneliği beklemede</string>
|
||||
</resources>
|
|
@ -2038,7 +2038,7 @@
|
|||
<string name="osm_live_subscription_desc">Передплата включає щогодинні, щоденні та щотижневі оновлення, а також, необмежену кількість доступних завантажень для всіх мап з усього світу.</string>
|
||||
<string name="get_it">Отримати</string>
|
||||
<string name="get_for">Отримати на %1$s</string>
|
||||
<string name="osm_live_banner_desc">Отримайте необмежені завантаження для мап, а також оновлення мап частіше ніж один раз на місяць: щотижня, щодня або щогодини.</string>
|
||||
<string name="osm_live_banner_desc">Отримайте для мап необмежені завантаження та оновлення частіше ніж раз на місяць: щотижня, щодня або щогодини.</string>
|
||||
<string name="osmand_plus_banner_desc">Втулок для необмеженого доступу до мап, їх оновлень та отримання відомостей з Wikipedia.</string>
|
||||
<string name="si_mi_meters">Милі/метри</string>
|
||||
<string name="skip_map_downloading">Пропустити завантаження мап</string>
|
||||
|
@ -2741,8 +2741,8 @@
|
|||
\nРозкажіть нам про це.</string>
|
||||
<string name="send_search_query">Надіслати пошуковий запит?</string>
|
||||
<string name="shared_string_world">Світ</string>
|
||||
<string name="monthly_map_updates">Оновлення мап: щомісячне</string>
|
||||
<string name="daily_map_updates">Оновлення мап: щогодинне</string>
|
||||
<string name="monthly_map_updates">Оновлення мап: щомісячно</string>
|
||||
<string name="daily_map_updates">Оновлення мап: щогодинно</string>
|
||||
<string name="in_app_purchase">Купівля в застосунку</string>
|
||||
<string name="in_app_purchase_desc">Одноразовий платіж</string>
|
||||
<string name="in_app_purchase_desc_ex">Після покупки він буде завжди доступний для вас.</string>
|
||||
|
@ -3425,9 +3425,9 @@
|
|||
<string name="route_recalculation">Перерахунок маршруту</string>
|
||||
<string name="accessibility_announce">Оголошення</string>
|
||||
<string name="login_and_pass">Ім\'я користувача і пароль</string>
|
||||
<string name="plugin_global_prefs_info">Ці налаштування стосуються всіх профілів.</string>
|
||||
<string name="plugin_global_prefs_info">Ці налаштування втулка стосуються всіх профілів</string>
|
||||
<string name="osm_editing">OSM-правлення</string>
|
||||
<string name="osm_edits_view_descr">Ви можете переглянути всі не завантажені зміни або помилки в OSM в %1$s. Завантажені точки не відображаються в OsmAnd.</string>
|
||||
<string name="osm_edits_view_descr">Ви можете переглянути всі вивантажені зміни або вади OSM у %1$s. Вивантажені точки не показано в OsmAnd.</string>
|
||||
<string name="app_mode_osm">OSM</string>
|
||||
<string name="select_nav_icon_descr">Значок відображається під час навігації чи переміщення.</string>
|
||||
<string name="select_map_icon_descr">Значок показано в спокої.</string>
|
||||
|
@ -3661,7 +3661,7 @@
|
|||
<string name="subscription_osmandlive_item">Передплата - OsmAnd Live</string>
|
||||
<string name="osmand_purchases_item">OsmAnd покупки</string>
|
||||
<string name="legend_item_description">Довідник умовних позначень мапи.</string>
|
||||
<string name="osm_live_payment_subscription_management">Оплату буде здійснено з рахунку, прив\'язаного до вашого облікового запису Google Play, під час підтвердженні придбання.
|
||||
<string name="osm_live_payment_subscription_management">Оплату буде здійснено під час підтвердження придбання з пов\'язаного з вашим обліковим записом Google Play рахунку.
|
||||
\n
|
||||
\nПередплата продовжується автоматично, якщо ви не скасуєте її до дати продовження. З вашого рахунку буде стягуватися плата за період продовження (щомісяця/щотримісяці/щорік) разово в день продовження.
|
||||
\n
|
||||
|
@ -3949,4 +3949,13 @@
|
|||
<string name="subscription_expired_title">Термін дії передплати OsmAnd Live закінчився</string>
|
||||
<string name="subscription_paused_title">Передплату OsmAnd Live зупинено</string>
|
||||
<string name="subscription_on_hold_title">Передплата OsmAnd Live на утриманні</string>
|
||||
<string name="login_open_street_map">Увійти до OpenStreetMap.org</string>
|
||||
<string name="login_open_street_map_org">Увійти до OpenStreetMap.org</string>
|
||||
<string name="sing_in_with_open_street_map">Увійти за допомогою OpenStreetMap</string>
|
||||
<string name="open_street_map_login_mode">Увійдіть, щоб вивантажити нові або внесені зміни.
|
||||
\n
|
||||
\nВи можете увійти, за допомогою безпечного методу OAuth, або скористатися своїм ім\'ям та паролем.</string>
|
||||
<string name="use_login_password">Використовувати ім\'я і пароль</string>
|
||||
<string name="login_account">Обліковий запис</string>
|
||||
<string name="user_login">Ім\'я користувача</string>
|
||||
</resources>
|
|
@ -3943,4 +3943,9 @@
|
|||
<string name="navigate_point_format_mgrs">MGRS</string>
|
||||
<string name="mgrs_format_descr">OsmAnd 使用 MGRS,其類似於 UTM NATO 格式。</string>
|
||||
<string name="message_you_need_add_two_points_to_show_graphs">您必須新增至少兩個點。</string>
|
||||
<string name="manage_subscription">管理訂閱</string>
|
||||
<string name="subscription_payment_issue_title">您的訂閱似乎有點問題。點擊按鈕以跳到 Google Play 訂閱設定以修復您的付款方式。</string>
|
||||
<string name="subscription_expired_title">OsmAnd Live 訂閱已過期</string>
|
||||
<string name="subscription_paused_title">OsmAnd Live 訂閱已暫停</string>
|
||||
<string name="subscription_on_hold_title">OsmAnd Live 訂閱已暫停</string>
|
||||
</resources>
|
|
@ -17,6 +17,7 @@
|
|||
<string name="gpx_upload_public_visibility_descr">Public means that the trace will be shown publicly in Your GPS traces and in public GPS trace listings. Data served via the API does not reference your trace page. Timestamps of the trace points are not available through the public GPS API, and the points are not chronologically ordered. However, other users are still able to download the raw trace from the public trace list and any timestamps contained within.</string>
|
||||
<string name="enter_text_separated">Enter tags separated by comma.</string>
|
||||
<string name="send_files_to_openstreetmap">Send GPX file to OpenStreetMap</string>
|
||||
<string name="markers_history">Markers history</string>
|
||||
<string name="subscription_on_hold_title">OsmAnd Live subscription is on hold</string>
|
||||
<string name="subscription_paused_title">OsmAnd Live subscription has been paused</string>
|
||||
<string name="subscription_expired_title">OsmAnd Live subscription has been expired</string>
|
||||
|
|
|
@ -55,8 +55,8 @@ import net.osmand.plus.FavouritesDbHelper;
|
|||
import net.osmand.plus.GPXDatabase.GpxDataItem;
|
||||
import net.osmand.plus.GpxSelectionHelper;
|
||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.SQLiteTileSource;
|
||||
|
|
|
@ -41,6 +41,7 @@ import net.osmand.plus.helpers.WaypointHelper;
|
|||
import net.osmand.plus.inapp.InAppPurchaseHelperImpl;
|
||||
import net.osmand.plus.liveupdates.LiveUpdatesHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersDbHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.monitoring.LiveMonitoringHelper;
|
||||
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
|
||||
import net.osmand.plus.poi.PoiFiltersHelper;
|
||||
|
|
|
@ -16,7 +16,8 @@ import net.osmand.PlatformUtil;
|
|||
import net.osmand.data.FavouritePoint;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.GeocodingLookupService.AddressLookupRequest;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.api.SQLiteAPI.SQLiteConnection;
|
||||
import net.osmand.plus.api.SQLiteAPI.SQLiteCursor;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
|
|
@ -23,7 +23,8 @@ import net.osmand.PlatformUtil;
|
|||
import net.osmand.StateChangedListener;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.GPXDatabase.GpxDataItem;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.activities.SavingTrackHelper;
|
||||
import net.osmand.plus.helpers.GpxUiHelper;
|
||||
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetAxisType;
|
||||
|
|
|
@ -63,6 +63,7 @@ import net.osmand.plus.helpers.enums.MetricsConstants;
|
|||
import net.osmand.plus.helpers.WaypointHelper;
|
||||
import net.osmand.plus.inapp.InAppPurchaseHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersDbHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.monitoring.LiveMonitoringHelper;
|
||||
import net.osmand.plus.poi.PoiFiltersHelper;
|
||||
import net.osmand.plus.quickaction.QuickActionRegistry;
|
||||
|
|
|
@ -27,8 +27,8 @@ import androidx.fragment.app.FragmentManager;
|
|||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.plus.FavouritesDbHelper;
|
||||
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
|
|
|
@ -41,7 +41,7 @@ import net.osmand.data.PointDescription;
|
|||
import net.osmand.plus.FavouritesDbHelper;
|
||||
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
|
||||
import net.osmand.plus.FavouritesDbHelper.FavoritesListener;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
|
|
|
@ -67,8 +67,8 @@ import net.osmand.plus.AppInitializer;
|
|||
import net.osmand.plus.AppInitializer.AppInitializeListener;
|
||||
import net.osmand.plus.AppInitializer.InitEvents;
|
||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkerChangedListener;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkerChangedListener;
|
||||
import net.osmand.plus.OnDismissDialogFragmentListener;
|
||||
import net.osmand.plus.OsmAndConstants;
|
||||
import net.osmand.plus.OsmAndLocationSimulation;
|
||||
|
|
|
@ -39,8 +39,8 @@ import net.osmand.plus.ContextMenuAdapter;
|
|||
import net.osmand.plus.ContextMenuAdapter.ItemClickListener;
|
||||
import net.osmand.plus.ContextMenuItem;
|
||||
import net.osmand.plus.ContextMenuItem.ItemBuilder;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmAndLocationProvider;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
|
|
|
@ -13,8 +13,8 @@ import net.osmand.data.LatLon;
|
|||
import net.osmand.data.RotatedTileBox;
|
||||
import net.osmand.map.IMapLocationListener;
|
||||
import net.osmand.map.WorldRegion;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkerChangedListener;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkerChangedListener;
|
||||
import net.osmand.plus.OsmAndConstants;
|
||||
import net.osmand.plus.OsmAndLocationProvider;
|
||||
import net.osmand.plus.OsmAndLocationProvider.OsmAndCompassListener;
|
||||
|
@ -88,7 +88,7 @@ public class MapViewTrackingUtilities implements OsmAndLocationListener, IMapLoc
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onMapMarkerChanged(MapMarkersHelper.MapMarker mapMarker) {
|
||||
public void onMapMarkerChanged(MapMarker mapMarker) {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -31,8 +31,8 @@ import net.osmand.data.PointDescription;
|
|||
import net.osmand.plus.FavouritesDbHelper;
|
||||
import net.osmand.plus.GpxSelectionHelper;
|
||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.R;
|
||||
|
|
|
@ -11,7 +11,7 @@ import net.osmand.PlatformUtil;
|
|||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.map.TileSourceManager;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
@ -207,7 +207,7 @@ public class IntentHelper {
|
|||
if (intent.hasExtra(MapMarkersDialogFragment.OPEN_MAP_MARKERS_GROUPS)) {
|
||||
Bundle openMapMarkersGroupsExtra = intent.getBundleExtra(MapMarkersDialogFragment.OPEN_MAP_MARKERS_GROUPS);
|
||||
if (openMapMarkersGroupsExtra != null) {
|
||||
MapMarkersDialogFragment.showInstance(mapActivity, openMapMarkersGroupsExtra.getString(MapMarkersHelper.MapMarkersGroup.MARKERS_SYNC_GROUP_ID));
|
||||
MapMarkersDialogFragment.showInstance(mapActivity, openMapMarkersGroupsExtra.getString(MapMarkersGroup.MARKERS_SYNC_GROUP_ID));
|
||||
}
|
||||
mapActivity.setIntent(null);
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ import android.widget.TextView;
|
|||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.Location;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
|
|
|
@ -25,8 +25,8 @@ import net.osmand.data.TransportStop;
|
|||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.ContextMenuAdapter;
|
||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkerChangedListener;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkerChangedListener;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.R;
|
||||
|
|
|
@ -32,7 +32,7 @@ import net.osmand.data.TransportStop;
|
|||
import net.osmand.map.OsmandRegions;
|
||||
import net.osmand.map.WorldRegion;
|
||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
|
|
|
@ -12,7 +12,7 @@ import net.osmand.data.TransportStop;
|
|||
import net.osmand.osm.PoiCategory;
|
||||
import net.osmand.osm.PoiFilter;
|
||||
import net.osmand.osm.PoiType;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
|
|
@ -14,8 +14,8 @@ import net.osmand.data.LatLon;
|
|||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.data.TransportStop;
|
||||
import net.osmand.plus.FavouritesDbHelper;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
|
|
@ -11,8 +11,8 @@ import androidx.annotation.Nullable;
|
|||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
|
|
@ -11,8 +11,8 @@ import net.osmand.data.LatLon;
|
|||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.plus.GpxSelectionHelper;
|
||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.base.PointImageDrawable;
|
||||
|
|
|
@ -2,7 +2,7 @@ package net.osmand.plus.mapcontextmenu.editors;
|
|||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
||||
public class MapMarkerEditor extends PointEditor {
|
||||
|
|
|
@ -14,7 +14,7 @@ import androidx.annotation.NonNull;
|
|||
import androidx.annotation.Nullable;
|
||||
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
|
|
@ -17,8 +17,8 @@ import net.osmand.GPXUtilities.WptPt;
|
|||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.WptLocationPoint;
|
||||
import net.osmand.plus.GpxSelectionHelper;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
|
|
@ -20,8 +20,8 @@ import net.osmand.data.FavouritePoint.BackgroundType;
|
|||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.WptLocationPoint;
|
||||
import net.osmand.plus.GpxSelectionHelper;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
package net.osmand.plus.mapmarkers;
|
||||
|
||||
import androidx.annotation.DrawableRes;
|
||||
|
||||
public class CategoriesSubHeader {
|
||||
|
||||
@DrawableRes
|
||||
private int iconRes;
|
||||
private MapMarkersGroup group;
|
||||
|
||||
public CategoriesSubHeader(int iconRes, MapMarkersGroup group) {
|
||||
this.iconRes = iconRes;
|
||||
this.group = group;
|
||||
}
|
||||
|
||||
@DrawableRes
|
||||
public int getIconRes() {
|
||||
return iconRes;
|
||||
}
|
||||
|
||||
public MapMarkersGroup getGroup() {
|
||||
return group;
|
||||
}
|
||||
}
|
|
@ -63,7 +63,6 @@ import net.osmand.GPXUtilities.WptPt;
|
|||
import net.osmand.IndexConstants;
|
||||
import net.osmand.Location;
|
||||
import net.osmand.plus.GpxSelectionHelper;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.OsmAndLocationProvider.OsmAndCompassListener;
|
||||
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
|
@ -79,7 +78,6 @@ import net.osmand.plus.mapmarkers.CoordinateInputFormats.DDM;
|
|||
import net.osmand.plus.mapmarkers.CoordinateInputFormats.DMS;
|
||||
import net.osmand.plus.mapmarkers.CoordinateInputFormats.Format;
|
||||
import net.osmand.plus.mapmarkers.adapters.CoordinateInputAdapter;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.widgets.EditTextEx;
|
||||
import net.osmand.util.Algorithms;
|
||||
import net.osmand.util.LocationParser;
|
||||
|
@ -171,7 +169,7 @@ public class CoordinateInputDialogFragment extends DialogFragment implements Osm
|
|||
|
||||
private void syncGpx(GPXFile gpxFile) {
|
||||
MapMarkersHelper helper = getMyApplication().getMapMarkersHelper();
|
||||
MapMarkersHelper.MapMarkersGroup group = helper.getMarkersGroup(gpxFile);
|
||||
MapMarkersGroup group = helper.getMarkersGroup(gpxFile);
|
||||
if (group != null) {
|
||||
helper.runSynchronization(group);
|
||||
}
|
||||
|
|
24
OsmAnd/src/net/osmand/plus/mapmarkers/GroupHeader.java
Normal file
24
OsmAnd/src/net/osmand/plus/mapmarkers/GroupHeader.java
Normal file
|
@ -0,0 +1,24 @@
|
|||
package net.osmand.plus.mapmarkers;
|
||||
|
||||
import androidx.annotation.DrawableRes;
|
||||
|
||||
public class GroupHeader {
|
||||
|
||||
@DrawableRes
|
||||
private int iconRes;
|
||||
private MapMarkersGroup group;
|
||||
|
||||
public GroupHeader(int iconRes, MapMarkersGroup group) {
|
||||
this.iconRes = iconRes;
|
||||
this.group = group;
|
||||
}
|
||||
|
||||
@DrawableRes
|
||||
public int getIconRes() {
|
||||
return iconRes;
|
||||
}
|
||||
|
||||
public MapMarkersGroup getGroup() {
|
||||
return group;
|
||||
}
|
||||
}
|
|
@ -3,7 +3,6 @@ package net.osmand.plus.mapmarkers;
|
|||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
||||
|
|
149
OsmAnd/src/net/osmand/plus/mapmarkers/MapMarker.java
Normal file
149
OsmAnd/src/net/osmand/plus/mapmarkers/MapMarker.java
Normal file
|
@ -0,0 +1,149 @@
|
|||
package net.osmand.plus.mapmarkers;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import net.osmand.GPXUtilities.WptPt;
|
||||
import net.osmand.data.FavouritePoint;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.LocationPoint;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import static net.osmand.data.PointDescription.POINT_TYPE_MAP_MARKER;
|
||||
|
||||
public class MapMarker implements LocationPoint {
|
||||
|
||||
private static int[] colors;
|
||||
|
||||
public String id;
|
||||
public LatLon point;
|
||||
private PointDescription pointDescription;
|
||||
public int colorIndex;
|
||||
public int index;
|
||||
public boolean history;
|
||||
public boolean selected;
|
||||
public int dist;
|
||||
public long creationDate;
|
||||
public long visitedDate;
|
||||
public String nextKey;
|
||||
public String groupKey;
|
||||
public String groupName;
|
||||
public WptPt wptPt;
|
||||
public FavouritePoint favouritePoint;
|
||||
public String mapObjectName;
|
||||
|
||||
public MapMarker(LatLon point, PointDescription name, int colorIndex, boolean selected, int index) {
|
||||
this.point = point;
|
||||
this.pointDescription = name;
|
||||
this.colorIndex = colorIndex;
|
||||
this.selected = selected;
|
||||
this.index = index;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return favouritePoint == null ?
|
||||
(wptPt == null ? MapMarkersGroup.ANY_TYPE : MapMarkersGroup.GPX_TYPE) :
|
||||
MapMarkersGroup.FAVORITES_TYPE;
|
||||
}
|
||||
|
||||
public PointDescription getPointDescription(Context ctx) {
|
||||
return new PointDescription(POINT_TYPE_MAP_MARKER, ctx.getString(R.string.map_marker), getOnlyName());
|
||||
}
|
||||
|
||||
public String getName(Context ctx) {
|
||||
String name;
|
||||
PointDescription pd = getPointDescription(ctx);
|
||||
if (Algorithms.isEmpty(pd.getName())) {
|
||||
name = pd.getTypeName();
|
||||
} else {
|
||||
name = pd.getName();
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
public PointDescription getOriginalPointDescription() {
|
||||
return pointDescription;
|
||||
}
|
||||
|
||||
public void setOriginalPointDescription(PointDescription pointDescription) {
|
||||
this.pointDescription = pointDescription;
|
||||
}
|
||||
|
||||
public String getOnlyName() {
|
||||
return pointDescription == null ? "" : pointDescription.getName();
|
||||
}
|
||||
|
||||
public double getLatitude() {
|
||||
return point.getLatitude();
|
||||
}
|
||||
|
||||
public double getLongitude() {
|
||||
return point.getLongitude();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getColor() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
MapMarker mapMarker = (MapMarker) o;
|
||||
|
||||
return colorIndex == mapMarker.colorIndex && point.equals(mapMarker.point);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = point.hashCode();
|
||||
result = 31 * result + colorIndex;
|
||||
return result;
|
||||
}
|
||||
|
||||
private static final int[] colorsIds = new int[] {
|
||||
R.color.marker_blue,
|
||||
R.color.marker_green,
|
||||
R.color.marker_orange,
|
||||
R.color.marker_red,
|
||||
R.color.marker_yellow,
|
||||
R.color.marker_teal,
|
||||
R.color.marker_purple
|
||||
};
|
||||
|
||||
public static int[] getColors(Context context) {
|
||||
if (colors != null) {
|
||||
return colors;
|
||||
}
|
||||
colors = new int[colorsIds.length];
|
||||
for (int i = 0; i < colorsIds.length; i++) {
|
||||
colors[i] = ContextCompat.getColor(context, colorsIds[i]);
|
||||
}
|
||||
return colors;
|
||||
}
|
||||
|
||||
public static int getColorId(int colorIndex) {
|
||||
return (colorIndex >= 0 && colorIndex < colorsIds.length) ? colorsIds[colorIndex] : colorsIds[0];
|
||||
}
|
||||
|
||||
public static int getColorIndex(Context context, @ColorInt int color) {
|
||||
int[] colors = getColors(context);
|
||||
for (int i = 0; i < colors.length; i++) {
|
||||
if (color == colors[i]) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
|
@ -15,7 +15,6 @@ import androidx.annotation.Nullable;
|
|||
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
|
|
@ -21,7 +21,6 @@ import net.osmand.data.FavouritePoint;
|
|||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.data.WptLocationPoint;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.OsmAndLocationProvider.OsmAndCompassListener;
|
||||
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
|
|
|
@ -4,8 +4,6 @@ import androidx.annotation.Nullable;
|
|||
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.api.SQLiteAPI.SQLiteConnection;
|
||||
import net.osmand.plus.api.SQLiteAPI.SQLiteCursor;
|
||||
|
@ -13,7 +11,6 @@ import net.osmand.plus.helpers.SearchHistoryHelper;
|
|||
import net.osmand.util.Algorithms;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
|
|
|
@ -29,9 +29,8 @@ import net.osmand.AndroidUtils;
|
|||
import net.osmand.Location;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.LockableViewPager;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersSortByDef;
|
||||
import net.osmand.plus.MapMarkersHelper.OnGroupSyncedListener;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkersSortByDef;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper.OnGroupSyncedListener;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
|
@ -430,7 +429,7 @@ public class MapMarkersDialogFragment extends DialogFragment implements OnGroupS
|
|||
public void moveAllToHistoryOnClick() {
|
||||
if (mapActivity != null) {
|
||||
final MapMarkersHelper helper = mapActivity.getMyApplication().getMapMarkersHelper();
|
||||
final List<MapMarkersHelper.MapMarker> markers = new ArrayList<>(helper.getMapMarkers());
|
||||
final List<MapMarker> markers = new ArrayList<>(helper.getMapMarkers());
|
||||
helper.moveAllActiveMarkersToHistory();
|
||||
if (viewPager.getCurrentItem() == ACTIVE_MARKERS_POSITION) {
|
||||
activeFragment.updateAdapter();
|
||||
|
@ -482,7 +481,7 @@ public class MapMarkersDialogFragment extends DialogFragment implements OnGroupS
|
|||
|
||||
@Override
|
||||
public void saveGpx(final String fileName) {
|
||||
final String gpxPath = mapActivity.getMyApplication().getMapMarkersHelper().generateGpx(fileName);
|
||||
final String gpxPath = mapActivity.getMyApplication().getMapMarkersHelper().saveMarkersToFile(fileName);
|
||||
snackbar = Snackbar.make(viewPager, String.format(getString(R.string.shared_string_file_is_saved), fileName) + ".", Snackbar.LENGTH_LONG)
|
||||
.setAction(R.string.shared_string_show, new View.OnClickListener() {
|
||||
@Override
|
||||
|
|
183
OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkersGroup.java
Normal file
183
OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkersGroup.java
Normal file
|
@ -0,0 +1,183 @@
|
|||
package net.osmand.plus.mapmarkers;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class MapMarkersGroup {
|
||||
|
||||
public static final int ANY_TYPE = -1;
|
||||
public static final int FAVORITES_TYPE = 0;
|
||||
public static final int GPX_TYPE = 1;
|
||||
|
||||
public static final String MARKERS_SYNC_GROUP_ID = "markers_sync_group_id";
|
||||
|
||||
private String id;
|
||||
private String name;
|
||||
private int type = ANY_TYPE;
|
||||
private Set<String> wptCategories;
|
||||
private long creationDate;
|
||||
private boolean disabled;
|
||||
private boolean visible = true;
|
||||
private boolean wasShown = false;
|
||||
private boolean visibleUntilRestart;
|
||||
private List<MapMarker> markers = new ArrayList<>();
|
||||
private TravelArticle wikivoyageArticle;
|
||||
// TODO should be removed from this class:
|
||||
private GroupHeader header;
|
||||
private CategoriesSubHeader categoriesSubHeader;
|
||||
private ShowHideHistoryButton showHideHistoryButton;
|
||||
|
||||
public MapMarkersGroup() {
|
||||
|
||||
}
|
||||
|
||||
public MapMarkersGroup(@NonNull String id, @NonNull String name, int type) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getGpxPath() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public TravelArticle getWikivoyageArticle() {
|
||||
return wikivoyageArticle;
|
||||
}
|
||||
|
||||
public long getCreationDate() {
|
||||
return creationDate;
|
||||
}
|
||||
|
||||
public void setCreationDate(long creationDate) {
|
||||
this.creationDate = creationDate;
|
||||
}
|
||||
|
||||
public void setVisible(boolean visible) {
|
||||
this.visible = visible;
|
||||
}
|
||||
|
||||
public void setMarkers(List<MapMarker> markers) {
|
||||
this.markers = markers;
|
||||
}
|
||||
|
||||
public void setHeader(GroupHeader header) {
|
||||
this.header = header;
|
||||
}
|
||||
|
||||
public void setCategoriesSubHeader(CategoriesSubHeader categoriesSubHeader) {
|
||||
this.categoriesSubHeader = categoriesSubHeader;
|
||||
}
|
||||
|
||||
public void setShowHideHistoryButton(ShowHideHistoryButton showHideHistoryButton) {
|
||||
this.showHideHistoryButton = showHideHistoryButton;
|
||||
}
|
||||
|
||||
public boolean isWasShown() {
|
||||
return wasShown;
|
||||
}
|
||||
|
||||
public boolean isVisibleUntilRestart() {
|
||||
return visibleUntilRestart;
|
||||
}
|
||||
|
||||
public void setWikivoyageArticle(TravelArticle wikivoyageArticle) {
|
||||
this.wikivoyageArticle = wikivoyageArticle;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setWptCategories(Set<String> wptCategories) {
|
||||
this.wptCategories = wptCategories;
|
||||
}
|
||||
|
||||
public Set<String> getWptCategories() {
|
||||
return wptCategories;
|
||||
}
|
||||
|
||||
public boolean isDisabled() {
|
||||
return disabled;
|
||||
}
|
||||
|
||||
public void setDisabled(boolean disabled) {
|
||||
this.disabled = disabled;
|
||||
}
|
||||
|
||||
public boolean isVisible() {
|
||||
return visible;
|
||||
}
|
||||
|
||||
public boolean wasShown() {
|
||||
return wasShown;
|
||||
}
|
||||
|
||||
public void setWasShown(boolean wasShown) {
|
||||
this.wasShown = wasShown;
|
||||
}
|
||||
|
||||
public void setVisibleUntilRestart(boolean visibleUntilRestart) {
|
||||
this.visibleUntilRestart = visibleUntilRestart;
|
||||
}
|
||||
|
||||
public List<MapMarker> getMarkers() {
|
||||
return markers;
|
||||
}
|
||||
|
||||
public GroupHeader getGroupHeader() {
|
||||
return header;
|
||||
}
|
||||
|
||||
public CategoriesSubHeader getCategoriesSubHeader() {
|
||||
return categoriesSubHeader;
|
||||
}
|
||||
|
||||
public ShowHideHistoryButton getShowHideHistoryButton() {
|
||||
return showHideHistoryButton;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getWptCategoriesString() {
|
||||
if (wptCategories != null) {
|
||||
return Algorithms.encodeStringSet(wptCategories);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<MapMarker> getActiveMarkers() {
|
||||
List<MapMarker> markers = new ArrayList<>(this.markers);
|
||||
List<MapMarker> activeMarkers = new ArrayList<>(markers.size());
|
||||
for (MapMarker marker : markers) {
|
||||
if (!marker.history) {
|
||||
activeMarkers.add(marker);
|
||||
}
|
||||
}
|
||||
return activeMarkers;
|
||||
}
|
||||
|
||||
public List<MapMarker> getHistoryMarkers() {
|
||||
List<MapMarker> historyMarkers = new ArrayList<>();
|
||||
for (MapMarker marker : markers) {
|
||||
if (marker.history) {
|
||||
historyMarkers.add(marker);
|
||||
}
|
||||
}
|
||||
return historyMarkers;
|
||||
}
|
||||
}
|
|
@ -28,7 +28,6 @@ import net.osmand.data.FavouritePoint;
|
|||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.data.WptLocationPoint;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.OsmAndLocationProvider.OsmAndCompassListener;
|
||||
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package net.osmand.plus;
|
||||
package net.osmand.plus.mapmarkers;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import androidx.annotation.IntDef;
|
||||
|
@ -16,13 +15,16 @@ import net.osmand.IndexConstants;
|
|||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.data.FavouritePoint;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.LocationPoint;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
|
||||
import net.osmand.plus.GPXDatabase;
|
||||
import net.osmand.plus.GeocodingLookupService;
|
||||
import net.osmand.plus.GeocodingLookupService.AddressLookupRequest;
|
||||
import net.osmand.plus.GpxSelectionHelper;
|
||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersDbHelper;
|
||||
import net.osmand.plus.mapmarkers.MarkersPlanRouteContext;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.Version;
|
||||
import net.osmand.plus.wikivoyage.data.TravelArticle;
|
||||
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
@ -57,6 +59,9 @@ public class MapMarkersHelper {
|
|||
|
||||
public static final int BY_DATE_ADDED_ASC = 4;
|
||||
|
||||
public static final String VISITED_DATE = "visited_date";
|
||||
public static final String CREATION_DATE = "creation_date";
|
||||
|
||||
private static final Log LOG = PlatformUtil.getLog(MapMarkersHelper.class);
|
||||
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
|
@ -148,12 +153,12 @@ public class MapMarkersHelper {
|
|||
if (group == null) {
|
||||
if (noGroup == null) {
|
||||
noGroup = new MapMarkersGroup();
|
||||
noGroup.creationDate = Long.MAX_VALUE;
|
||||
noGroup.setCreationDate(Long.MAX_VALUE);
|
||||
}
|
||||
noGroup.getMarkers().add(marker);
|
||||
} else {
|
||||
if (marker.creationDate < group.creationDate) {
|
||||
group.creationDate = marker.creationDate;
|
||||
if (marker.creationDate < group.getCreationDate()) {
|
||||
group.setCreationDate(marker.creationDate);
|
||||
}
|
||||
group.getMarkers().add(marker);
|
||||
}
|
||||
|
@ -190,16 +195,17 @@ public class MapMarkersHelper {
|
|||
}
|
||||
|
||||
private void lookupAddress(final MapMarker mapMarker) {
|
||||
if (mapMarker != null && mapMarker.pointDescription.isSearchingAddress(ctx)) {
|
||||
if (mapMarker != null && mapMarker.getOriginalPointDescription().isSearchingAddress(ctx)) {
|
||||
cancelPointAddressRequests(mapMarker.point);
|
||||
AddressLookupRequest lookupRequest = new AddressLookupRequest(mapMarker.point,
|
||||
new GeocodingLookupService.OnAddressLookupResult() {
|
||||
@Override
|
||||
public void geocodingDone(String address) {
|
||||
PointDescription pointDescription = mapMarker.getOriginalPointDescription();
|
||||
if (Algorithms.isEmpty(address)) {
|
||||
mapMarker.pointDescription.setName(PointDescription.getAddressNotFoundStr(ctx));
|
||||
pointDescription.setName(PointDescription.getAddressNotFoundStr(ctx));
|
||||
} else {
|
||||
mapMarker.pointDescription.setName(address);
|
||||
pointDescription.setName(address);
|
||||
}
|
||||
markersDbHelper.updateMarker(mapMarker);
|
||||
refreshMarker(mapMarker);
|
||||
|
@ -291,7 +297,6 @@ public class MapMarkersHelper {
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
public void runSynchronization(final @NonNull MapMarkersGroup group) {
|
||||
ctx.runInUIThread(new Runnable() {
|
||||
@Override
|
||||
|
@ -301,19 +306,17 @@ public class MapMarkersHelper {
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
public MapMarkersGroup getMarkersGroup(GPXFile gpx) {
|
||||
if(gpx == null || gpx.path == null) {
|
||||
if (gpx == null || gpx.path == null) {
|
||||
return null;
|
||||
}
|
||||
return getMapMarkerGroupById(getMarkerGroupId(new File(gpx.path)), MapMarkersGroup.GPX_TYPE);
|
||||
}
|
||||
|
||||
|
||||
public MapMarkersGroup getMarkersGroup(FavoriteGroup favGroup) {
|
||||
return getMapMarkerGroupById(getMarkerGroupId(favGroup), MapMarkersGroup.FAVORITES_TYPE);
|
||||
}
|
||||
|
||||
|
||||
public MapMarkersGroup addOrEnableGpxGroup(@NonNull File file) {
|
||||
updateGpxShowAsMarkers(file);
|
||||
MapMarkersGroup gr = getMapMarkerGroupById(getMarkerGroupId(file), MapMarkersGroup.GPX_TYPE);
|
||||
|
@ -324,7 +327,7 @@ public class MapMarkersHelper {
|
|||
enableGroup(gr);
|
||||
return gr;
|
||||
}
|
||||
|
||||
|
||||
public MapMarkersGroup addOrEnableGroup(@NonNull GPXFile file) {
|
||||
updateGpxShowAsMarkers(new File(file.path));
|
||||
MapMarkersGroup gr = getMarkersGroup(file);
|
||||
|
@ -336,7 +339,6 @@ public class MapMarkersHelper {
|
|||
return gr;
|
||||
}
|
||||
|
||||
|
||||
public MapMarkersGroup addOrEnableGroup(@NonNull FavoriteGroup group) {
|
||||
MapMarkersGroup gr = getMarkersGroup(group);
|
||||
if (gr == null) {
|
||||
|
@ -346,10 +348,10 @@ public class MapMarkersHelper {
|
|||
enableGroup(gr);
|
||||
return gr;
|
||||
}
|
||||
|
||||
|
||||
public void enableGroup(@NonNull MapMarkersGroup gr) {
|
||||
// check if group doesn't exist internally
|
||||
if(!mapMarkersGroups.contains(gr)) {
|
||||
if (!mapMarkersGroups.contains(gr)) {
|
||||
addGroupInternally(gr);
|
||||
}
|
||||
if (gr.isDisabled()) {
|
||||
|
@ -393,14 +395,14 @@ public class MapMarkersHelper {
|
|||
String id = group.getId();
|
||||
if (id != null) {
|
||||
markersDbHelper.updateGroupDisabled(id, disabled);
|
||||
group.disabled = disabled;
|
||||
group.setDisabled(disabled);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateGroupWptCategories(@NonNull MapMarkersGroup group, Set<String> wptCategories) {
|
||||
String id = group.getId();
|
||||
if (id != null) {
|
||||
group.wptCategories = wptCategories;
|
||||
group.setWptCategories(wptCategories);
|
||||
if (wptCategories != null) {
|
||||
markersDbHelper.updateGroupCategories(id, group.getWptCategoriesString());
|
||||
}
|
||||
|
@ -412,7 +414,7 @@ public class MapMarkersHelper {
|
|||
markersDbHelper.removeActiveMarkersFromGroup(group.getId());
|
||||
removeFromMapMarkersList(group.getActiveMarkers());
|
||||
if (updateGroup) {
|
||||
group.markers = group.getHistoryMarkers();
|
||||
group.setMarkers(group.getHistoryMarkers());
|
||||
updateGroup(group);
|
||||
}
|
||||
reorderActiveMarkersIfNeeded();
|
||||
|
@ -435,12 +437,12 @@ public class MapMarkersHelper {
|
|||
ShowHideHistoryButton showHideHistoryButton = mapMarkersGroup.getShowHideHistoryButton();
|
||||
if (showHideHistoryButton != null) {
|
||||
if (historyMarkersCount == 0) {
|
||||
mapMarkersGroup.showHideHistoryButton = null;
|
||||
mapMarkersGroup.setShowHideHistoryButton(null);
|
||||
}
|
||||
} else if (historyMarkersCount > 0) {
|
||||
showHideHistoryButton = new ShowHideHistoryButton();
|
||||
showHideHistoryButton.showHistory = false;
|
||||
mapMarkersGroup.showHideHistoryButton = showHideHistoryButton;
|
||||
mapMarkersGroup.setShowHideHistoryButton(showHideHistoryButton);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -460,10 +462,8 @@ public class MapMarkersHelper {
|
|||
sortMarkers(mapMarkersGroup.getMarkers(), false, BY_DATE_ADDED_DESC);
|
||||
}
|
||||
} else {
|
||||
mapMarkersGroup = new MapMarkersGroup();
|
||||
mapMarkersGroup.id = marker.groupKey;
|
||||
mapMarkersGroup.name = marker.groupName;
|
||||
mapMarkersGroup.creationDate = Long.MAX_VALUE;
|
||||
mapMarkersGroup = new MapMarkersGroup(marker.groupKey, marker.groupName, MapMarkersGroup.ANY_TYPE);
|
||||
mapMarkersGroup.setCreationDate(Long.MAX_VALUE);
|
||||
mapMarkersGroup.getMarkers().add(marker);
|
||||
addToGroupsList(mapMarkersGroup);
|
||||
sortGroups();
|
||||
|
@ -473,18 +473,19 @@ public class MapMarkersHelper {
|
|||
}
|
||||
|
||||
private void createHeadersInGroup(@NonNull MapMarkersGroup group) {
|
||||
GroupHeader header = new GroupHeader();
|
||||
CategoriesSubHeader categoriesSubHeader = new CategoriesSubHeader();
|
||||
int type = group.getType();
|
||||
int headerIconId = 0;
|
||||
int subHeaderIconId = 0;
|
||||
if (type != -1) {
|
||||
header.iconRes = type == MapMarkersGroup.FAVORITES_TYPE
|
||||
headerIconId = type == MapMarkersGroup.FAVORITES_TYPE
|
||||
? R.drawable.ic_action_favorite : R.drawable.ic_action_polygom_dark;
|
||||
categoriesSubHeader.iconRes = R.drawable.ic_action_filter;
|
||||
subHeaderIconId = R.drawable.ic_action_filter;
|
||||
}
|
||||
header.group = group;
|
||||
categoriesSubHeader.group = group;
|
||||
group.header = header;
|
||||
group.categoriesSubHeader = categoriesSubHeader;
|
||||
GroupHeader header = new GroupHeader(headerIconId, group);
|
||||
CategoriesSubHeader categoriesSubHeader = new CategoriesSubHeader(subHeaderIconId, group);
|
||||
|
||||
group.setHeader(header);
|
||||
group.setCategoriesSubHeader(categoriesSubHeader);
|
||||
}
|
||||
|
||||
private void removeMarkerFromGroup(MapMarker marker) {
|
||||
|
@ -502,8 +503,8 @@ public class MapMarkersHelper {
|
|||
Collections.sort(mapMarkersGroups, new Comparator<MapMarkersGroup>() {
|
||||
@Override
|
||||
public int compare(MapMarkersGroup group1, MapMarkersGroup group2) {
|
||||
long t1 = group1.creationDate;
|
||||
long t2 = group2.creationDate;
|
||||
long t1 = group1.getCreationDate();
|
||||
long t2 = group2.getCreationDate();
|
||||
return (t1 > t2) ? -1 : ((t1 == t2) ? 0 : 1);
|
||||
}
|
||||
});
|
||||
|
@ -515,7 +516,7 @@ public class MapMarkersHelper {
|
|||
for (MapMarkersGroup group : mapMarkersGroups) {
|
||||
if ((id == null && group.getId() == null)
|
||||
|| (group.getId() != null && group.getId().equals(id))) {
|
||||
if(type == MapMarkersGroup.ANY_TYPE || type == group.type) {
|
||||
if (type == MapMarkersGroup.ANY_TYPE || type == group.getType()) {
|
||||
return group;
|
||||
}
|
||||
}
|
||||
|
@ -528,7 +529,7 @@ public class MapMarkersHelper {
|
|||
Algorithms.getFileNameWithoutExtension(fl.getName()),
|
||||
MapMarkersGroup.GPX_TYPE);
|
||||
}
|
||||
|
||||
|
||||
private MapMarkersGroup createFavMarkerGroup(FavoriteGroup favGroup) {
|
||||
return new MapMarkersGroup(favGroup.getName(), favGroup.getName(), MapMarkersGroup.FAVORITES_TYPE);
|
||||
}
|
||||
|
@ -536,11 +537,11 @@ public class MapMarkersHelper {
|
|||
private String getMarkerGroupId(File gpx) {
|
||||
return gpx.getAbsolutePath();
|
||||
}
|
||||
|
||||
|
||||
private String getMarkerGroupId(FavoriteGroup group) {
|
||||
return group.getName();
|
||||
}
|
||||
|
||||
|
||||
@NonNull
|
||||
public List<MapMarkersGroup> getGroupsForDisplayedGpx() {
|
||||
List<MapMarkersGroup> res = new ArrayList<>();
|
||||
|
@ -549,28 +550,28 @@ public class MapMarkersHelper {
|
|||
MapMarkersGroup search = getMarkersGroup(selected.getGpxFile());
|
||||
if (search == null && selected.getGpxFile() != null && selected.getGpxFile().path != null) {
|
||||
MapMarkersGroup group = createGPXMarkerGroup(new File(selected.getGpxFile().path));
|
||||
group.disabled = true;
|
||||
group.setDisabled(true);
|
||||
createHeadersInGroup(group);
|
||||
res.add(group);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
@NonNull
|
||||
public List<MapMarkersGroup> getGroupsForSavedArticlesTravelBook() {
|
||||
List<MapMarkersGroup> res = new ArrayList<>();
|
||||
TravelDbHelper travelDbHelper = ctx.getTravelDbHelper();
|
||||
if(travelDbHelper.getSelectedTravelBook() != null) {
|
||||
if (travelDbHelper.getSelectedTravelBook() != null) {
|
||||
List<TravelArticle> savedArticles = travelDbHelper.getLocalDataHelper().getSavedArticles();
|
||||
for (TravelArticle art : savedArticles) {
|
||||
String gpxName = travelDbHelper.getGPXName(art);
|
||||
File path = ctx.getAppPath(IndexConstants.GPX_TRAVEL_DIR + gpxName);
|
||||
LOG.debug("Article group " + path.getAbsolutePath() + " " + path.exists()) ;
|
||||
LOG.debug("Article group " + path.getAbsolutePath() + " " + path.exists());
|
||||
MapMarkersGroup search = getMapMarkerGroupById(getMarkerGroupId(path), MapMarkersGroup.GPX_TYPE);
|
||||
if (search == null) {
|
||||
MapMarkersGroup group = createGPXMarkerGroup(path);
|
||||
group.disabled = true;
|
||||
group.setDisabled(true);
|
||||
createHeadersInGroup(group);
|
||||
res.add(group);
|
||||
}
|
||||
|
@ -1004,7 +1005,8 @@ public class MapMarkersHelper {
|
|||
});
|
||||
}
|
||||
|
||||
public String generateGpx(String fileName) {
|
||||
public String saveMarkersToFile(String fileName) {
|
||||
GPXFile gpxFile = generateGpx();
|
||||
String dirName = IndexConstants.GPX_INDEX_DIR + IndexConstants.MAP_MARKERS_INDEX_DIR;
|
||||
File dir = ctx.getAppPath(dirName);
|
||||
if (!dir.exists()) {
|
||||
|
@ -1012,18 +1014,54 @@ public class MapMarkersHelper {
|
|||
}
|
||||
String uniqueFileName = FileUtils.createUniqueFileName(ctx, fileName, dirName, IndexConstants.GPX_FILE_EXT);
|
||||
File fout = new File(dir, uniqueFileName + IndexConstants.GPX_FILE_EXT);
|
||||
GPXUtilities.writeGpxFile(fout, gpxFile);
|
||||
|
||||
GPXFile file = new GPXFile(Version.getFullVersion(ctx));
|
||||
for (MapMarker marker : mapMarkers) {
|
||||
return fout.getAbsolutePath();
|
||||
}
|
||||
|
||||
public GPXFile generateGpx() {
|
||||
return generateGpx(mapMarkers, false);
|
||||
}
|
||||
|
||||
public GPXFile generateGpx(List<MapMarker> markers, boolean completeBackup) {
|
||||
GPXFile gpxFile = new GPXFile(Version.getFullVersion(ctx));
|
||||
for (MapMarker marker : markers) {
|
||||
WptPt wpt = new WptPt();
|
||||
wpt.lat = marker.getLatitude();
|
||||
wpt.lon = marker.getLongitude();
|
||||
wpt.setColor(ctx.getResources().getColor(MapMarker.getColorId(marker.colorIndex)));
|
||||
wpt.name = marker.getOnlyName();
|
||||
file.addPoint(wpt);
|
||||
wpt.setColor(ContextCompat.getColor(ctx, MapMarker.getColorId(marker.colorIndex)));
|
||||
if (completeBackup) {
|
||||
if (marker.creationDate != 0) {
|
||||
wpt.getExtensionsToWrite().put(CREATION_DATE, String.valueOf(marker.creationDate));
|
||||
}
|
||||
if (marker.visitedDate != 0) {
|
||||
wpt.getExtensionsToWrite().put(VISITED_DATE, String.valueOf(marker.visitedDate));
|
||||
}
|
||||
}
|
||||
gpxFile.addPoint(wpt);
|
||||
}
|
||||
GPXUtilities.writeGpxFile(fout, file);
|
||||
return fout.getAbsolutePath();
|
||||
return gpxFile;
|
||||
}
|
||||
|
||||
public List<MapMarker> readMarkersFromGpx(GPXFile gpxFile, boolean history) {
|
||||
List<MapMarker> mapMarkers = new ArrayList<>();
|
||||
for (WptPt point : gpxFile.getPoints()) {
|
||||
LatLon latLon = new LatLon(point.lat, point.lon);
|
||||
int colorIndex = MapMarker.getColorIndex(ctx, point.getColor());
|
||||
PointDescription name = new PointDescription(PointDescription.POINT_TYPE_LOCATION, point.name);
|
||||
|
||||
MapMarker marker = new MapMarker(latLon, name, colorIndex, false, 0);
|
||||
|
||||
String visitedDateStr = point.getExtensionsToRead().get(VISITED_DATE);
|
||||
String creationDateStr = point.getExtensionsToRead().get(CREATION_DATE);
|
||||
marker.visitedDate = Algorithms.parseLongSilently(visitedDateStr, 0);
|
||||
marker.creationDate = Algorithms.parseLongSilently(creationDateStr, 0);
|
||||
marker.nextKey = history ? MapMarkersDbHelper.HISTORY_NEXT_VALUE : MapMarkersDbHelper.TAIL_NEXT_VALUE;
|
||||
|
||||
mapMarkers.add(marker);
|
||||
}
|
||||
return mapMarkers;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------------------
|
||||
|
@ -1155,7 +1193,7 @@ public class MapMarkersHelper {
|
|||
if (favGroup == null) {
|
||||
return;
|
||||
}
|
||||
group.visible = favGroup.isVisible();
|
||||
group.setVisible(favGroup.isVisible());
|
||||
if (!group.isVisible() || group.isDisabled()) {
|
||||
removeGroupActiveMarkers(group, true);
|
||||
return;
|
||||
|
@ -1175,17 +1213,17 @@ public class MapMarkersHelper {
|
|||
String gpxPath = group.getId();
|
||||
SelectedGpxFile selectedGpxFile = gpxHelper.getSelectedFileByPath(gpxPath);
|
||||
GPXFile gpx = selectedGpxFile == null ? null : selectedGpxFile.getGpxFile();
|
||||
group.visible = gpx != null || group.visibleUntilRestart;
|
||||
group.setVisible(gpx != null || group.isVisibleUntilRestart());
|
||||
if (gpx == null || group.isDisabled()) {
|
||||
removeGroupActiveMarkers(group, true);
|
||||
return;
|
||||
}
|
||||
|
||||
boolean addAll = group.wptCategories == null || group.wptCategories.isEmpty();
|
||||
boolean addAll = group.getWptCategories() == null || group.getWptCategories().isEmpty();
|
||||
List<WptPt> gpxPoints = new ArrayList<>(gpx.getPoints());
|
||||
for (WptPt pt : gpxPoints) {
|
||||
if (addAll || group.wptCategories.contains(pt.category)
|
||||
|| (pt.category == null && group.wptCategories.contains(""))) {
|
||||
if (addAll || group.getWptCategories().contains(pt.category)
|
||||
|| (pt.category == null && group.getWptCategories().contains(""))) {
|
||||
addNewMarkerIfNeeded(group, groupMarkers, new LatLon(pt.lat, pt.lon), pt.name, null, pt);
|
||||
}
|
||||
}
|
||||
|
@ -1208,295 +1246,4 @@ public class MapMarkersHelper {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class MapMarkersGroup {
|
||||
|
||||
public static final int ANY_TYPE = -1;
|
||||
public static final int FAVORITES_TYPE = 0;
|
||||
public static final int GPX_TYPE = 1;
|
||||
|
||||
public static final String MARKERS_SYNC_GROUP_ID = "markers_sync_group_id";
|
||||
|
||||
private String id;
|
||||
private String name;
|
||||
private int type = -1;
|
||||
private Set<String> wptCategories;
|
||||
private long creationDate;
|
||||
private boolean disabled;
|
||||
private boolean visible = true;
|
||||
private boolean wasShown = false;
|
||||
private boolean visibleUntilRestart;
|
||||
private List<MapMarker> markers = new ArrayList<>();
|
||||
private TravelArticle wikivoyageArticle;
|
||||
// TODO should be removed from this class:
|
||||
private GroupHeader header;
|
||||
private CategoriesSubHeader categoriesSubHeader;
|
||||
private ShowHideHistoryButton showHideHistoryButton;
|
||||
|
||||
public MapMarkersGroup() {
|
||||
|
||||
}
|
||||
|
||||
public MapMarkersGroup(@NonNull String id, @NonNull String name, int type) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getGpxPath() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public TravelArticle getWikivoyageArticle() {
|
||||
return wikivoyageArticle;
|
||||
}
|
||||
|
||||
public void setWikivoyageArticle(TravelArticle wikivoyageArticle) {
|
||||
this.wikivoyageArticle = wikivoyageArticle;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setWptCategories(Set<String> wptCategories) {
|
||||
this.wptCategories = wptCategories;
|
||||
}
|
||||
|
||||
public Set<String> getWptCategories() {
|
||||
return wptCategories;
|
||||
}
|
||||
|
||||
public boolean isDisabled() {
|
||||
return disabled;
|
||||
}
|
||||
|
||||
public void setDisabled(boolean disabled) {
|
||||
this.disabled = disabled;
|
||||
}
|
||||
|
||||
public boolean isVisible() {
|
||||
return visible;
|
||||
}
|
||||
|
||||
public boolean wasShown() {
|
||||
return wasShown;
|
||||
}
|
||||
|
||||
public void setWasShown(boolean wasShown) {
|
||||
this.wasShown = wasShown;
|
||||
}
|
||||
|
||||
public void setVisibleUntilRestart(boolean visibleUntilRestart) {
|
||||
this.visibleUntilRestart = visibleUntilRestart;
|
||||
}
|
||||
|
||||
public List<MapMarker> getMarkers() {
|
||||
return markers;
|
||||
}
|
||||
|
||||
public GroupHeader getGroupHeader() {
|
||||
return header;
|
||||
}
|
||||
|
||||
public CategoriesSubHeader getCategoriesSubHeader() {
|
||||
return categoriesSubHeader;
|
||||
}
|
||||
|
||||
public ShowHideHistoryButton getShowHideHistoryButton() {
|
||||
return showHideHistoryButton;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getWptCategoriesString() {
|
||||
if (wptCategories != null) {
|
||||
return Algorithms.encodeStringSet(wptCategories);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<MapMarker> getActiveMarkers() {
|
||||
List<MapMarker> markers = new ArrayList<>(this.markers);
|
||||
List<MapMarker> activeMarkers = new ArrayList<>(markers.size());
|
||||
for (MapMarker marker : markers) {
|
||||
if (!marker.history) {
|
||||
activeMarkers.add(marker);
|
||||
}
|
||||
}
|
||||
return activeMarkers;
|
||||
}
|
||||
|
||||
public List<MapMarker> getHistoryMarkers() {
|
||||
List<MapMarker> historyMarkers = new ArrayList<>();
|
||||
for (MapMarker marker : markers) {
|
||||
if (marker.history) {
|
||||
historyMarkers.add(marker);
|
||||
}
|
||||
}
|
||||
return historyMarkers;
|
||||
}
|
||||
}
|
||||
|
||||
public static class ShowHideHistoryButton {
|
||||
public boolean showHistory;
|
||||
}
|
||||
|
||||
public static class GroupHeader {
|
||||
private int iconRes;
|
||||
private MapMarkersGroup group;
|
||||
|
||||
public int getIconRes() {
|
||||
return iconRes;
|
||||
}
|
||||
|
||||
public MapMarkersGroup getGroup() {
|
||||
return group;
|
||||
}
|
||||
}
|
||||
|
||||
public static class CategoriesSubHeader {
|
||||
private int iconRes;
|
||||
private MapMarkersGroup group;
|
||||
|
||||
public int getIconRes() {
|
||||
return iconRes;
|
||||
}
|
||||
|
||||
public MapMarkersGroup getGroup() {
|
||||
return group;
|
||||
}
|
||||
}
|
||||
|
||||
public static class MapMarker implements LocationPoint {
|
||||
private static int[] colors;
|
||||
|
||||
public String id;
|
||||
public LatLon point;
|
||||
private PointDescription pointDescription;
|
||||
public int colorIndex;
|
||||
public int index;
|
||||
public boolean history;
|
||||
public boolean selected;
|
||||
public int dist;
|
||||
public long creationDate;
|
||||
public long visitedDate;
|
||||
public String nextKey;
|
||||
public String groupKey;
|
||||
public String groupName;
|
||||
public WptPt wptPt;
|
||||
public FavouritePoint favouritePoint;
|
||||
public String mapObjectName;
|
||||
|
||||
public MapMarker(LatLon point, PointDescription name, int colorIndex, boolean selected, int index) {
|
||||
this.point = point;
|
||||
this.pointDescription = name;
|
||||
this.colorIndex = colorIndex;
|
||||
this.selected = selected;
|
||||
this.index = index;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return favouritePoint == null ?
|
||||
(wptPt == null ? MapMarkersGroup.ANY_TYPE : MapMarkersGroup.GPX_TYPE) :
|
||||
MapMarkersGroup.FAVORITES_TYPE;
|
||||
}
|
||||
|
||||
public PointDescription getPointDescription(Context ctx) {
|
||||
return new PointDescription(POINT_TYPE_MAP_MARKER, ctx.getString(R.string.map_marker), getOnlyName());
|
||||
}
|
||||
|
||||
public String getName(Context ctx) {
|
||||
String name;
|
||||
PointDescription pd = getPointDescription(ctx);
|
||||
if (Algorithms.isEmpty(pd.getName())) {
|
||||
name = pd.getTypeName();
|
||||
} else {
|
||||
name = pd.getName();
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
public PointDescription getOriginalPointDescription() {
|
||||
return pointDescription;
|
||||
}
|
||||
|
||||
public void setOriginalPointDescription(PointDescription pointDescription) {
|
||||
this.pointDescription = pointDescription;
|
||||
}
|
||||
|
||||
public String getOnlyName() {
|
||||
return pointDescription == null ? "" : pointDescription.getName();
|
||||
}
|
||||
|
||||
public double getLatitude() {
|
||||
return point.getLatitude();
|
||||
}
|
||||
|
||||
public double getLongitude() {
|
||||
return point.getLongitude();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getColor() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
MapMarker mapMarker = (MapMarker) o;
|
||||
|
||||
return colorIndex == mapMarker.colorIndex && point.equals(mapMarker.point);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = point.hashCode();
|
||||
result = 31 * result + colorIndex;
|
||||
return result;
|
||||
}
|
||||
|
||||
private static final int[] colorsIds = new int[]{
|
||||
R.color.marker_blue,
|
||||
R.color.marker_green,
|
||||
R.color.marker_orange,
|
||||
R.color.marker_red,
|
||||
R.color.marker_yellow,
|
||||
R.color.marker_teal,
|
||||
R.color.marker_purple
|
||||
};
|
||||
|
||||
public static int[] getColors(Context context) {
|
||||
if (colors != null) {
|
||||
return colors;
|
||||
}
|
||||
colors = new int[colorsIds.length];
|
||||
for (int i = 0; i < colorsIds.length; i++) {
|
||||
colors[i] = ContextCompat.getColor(context, colorsIds[i]);
|
||||
}
|
||||
return colors;
|
||||
}
|
||||
|
||||
public static int getColorId(int colorIndex) {
|
||||
return (colorIndex >= 0 && colorIndex < colorsIds.length) ? colorsIds[colorIndex] : colorsIds[0];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -20,8 +20,6 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
|
|
|
@ -7,7 +7,6 @@ import net.osmand.data.LatLon;
|
|||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.GPXUtilities.TrkSegment;
|
||||
import net.osmand.GPXUtilities.WptPt;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.routing.RouteCalculationParams;
|
||||
import net.osmand.plus.routing.RouteCalculationResult;
|
||||
|
|
|
@ -4,8 +4,7 @@ import android.graphics.drawable.Drawable;
|
|||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersSortByDef;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkersSortByDef;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
||||
|
|
|
@ -39,8 +39,6 @@ import net.osmand.TspAnt;
|
|||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.data.RotatedTileBox;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
|
|
|
@ -13,8 +13,6 @@ import net.osmand.GPXUtilities.WptPt;
|
|||
import net.osmand.IndexConstants;
|
||||
import net.osmand.plus.GpxSelectionHelper;
|
||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
package net.osmand.plus.mapmarkers;
|
||||
|
||||
public class ShowHideHistoryButton {
|
||||
public boolean showHistory;
|
||||
}
|
|
@ -13,9 +13,8 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
|
@ -215,7 +214,7 @@ public class MapMarkersActiveAdapter extends RecyclerView.Adapter<MapMarkerItemV
|
|||
final int pos = holder.getAdapterPosition();
|
||||
final MapMarker marker = getItem(pos);
|
||||
mapActivity.getMyApplication().getMapMarkersHelper().moveMapMarkerToHistory(marker);
|
||||
MapMarkersHelper.MapMarkersGroup group = mapActivity.getMyApplication().getMapMarkersHelper().getMapMarkerGroupById(marker.groupKey,
|
||||
MapMarkersGroup group = mapActivity.getMyApplication().getMapMarkersHelper().getMapMarkerGroupById(marker.groupKey,
|
||||
MapMarkersGroup.ANY_TYPE);
|
||||
if (group != null) {
|
||||
mapActivity.getMyApplication().getMapMarkersHelper().updateGroup(group);
|
||||
|
|
|
@ -21,11 +21,12 @@ import net.osmand.IndexConstants;
|
|||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.GpxSelectionHelper;
|
||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.GroupHeader;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.MapMarkersHelper.ShowHideHistoryButton;
|
||||
import net.osmand.plus.mapmarkers.CategoriesSubHeader;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.GroupHeader;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.mapmarkers.ShowHideHistoryButton;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
|
@ -159,7 +160,7 @@ public class MapMarkersGroupsAdapter extends RecyclerView.Adapter<RecyclerView.V
|
|||
items.add(header);
|
||||
if (!group.isDisabled()) {
|
||||
if (group.getWptCategories() != null && !group.getWptCategories().isEmpty()) {
|
||||
MapMarkersHelper.CategoriesSubHeader categoriesSubHeader = group.getCategoriesSubHeader();
|
||||
CategoriesSubHeader categoriesSubHeader = group.getCategoriesSubHeader();
|
||||
items.add(categoriesSubHeader);
|
||||
}
|
||||
TravelDbHelper travelDbHelper = mapActivity.getMyApplication().getTravelDbHelper();
|
||||
|
@ -526,8 +527,8 @@ public class MapMarkersGroupsAdapter extends RecyclerView.Adapter<RecyclerView.V
|
|||
} else if (holder instanceof MapMarkerCategoriesViewHolder) {
|
||||
final MapMarkerCategoriesViewHolder categoriesViewHolder = (MapMarkerCategoriesViewHolder) holder;
|
||||
final Object header = getItem(position);
|
||||
if (header instanceof MapMarkersHelper.CategoriesSubHeader) {
|
||||
final MapMarkersHelper.CategoriesSubHeader categoriesSubHeader = (MapMarkersHelper.CategoriesSubHeader) header;
|
||||
if (header instanceof CategoriesSubHeader) {
|
||||
final CategoriesSubHeader categoriesSubHeader = (CategoriesSubHeader) header;
|
||||
final MapMarkersGroup group = categoriesSubHeader.getGroup();
|
||||
View.OnClickListener openChooseCategoriesDialog = new View.OnClickListener() {
|
||||
@Override
|
||||
|
@ -599,7 +600,7 @@ public class MapMarkersGroupsAdapter extends RecyclerView.Adapter<RecyclerView.V
|
|||
return HEADER_TYPE;
|
||||
} else if (item instanceof ShowHideHistoryButton) {
|
||||
return SHOW_HIDE_HISTORY_TYPE;
|
||||
} else if (item instanceof MapMarkersHelper.CategoriesSubHeader) {
|
||||
} else if (item instanceof CategoriesSubHeader) {
|
||||
return CATEGORIES_TYPE;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unsupported view type");
|
||||
|
|
|
@ -10,7 +10,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
|
|
|
@ -17,7 +17,7 @@ import net.osmand.data.LatLon;
|
|||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.plus.GeocodingLookupService.AddressLookupRequest;
|
||||
import net.osmand.plus.GeocodingLookupService.OnAddressLookupResult;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
|
|
|
@ -28,8 +28,8 @@ import net.osmand.GPXUtilities.GPXFile;
|
|||
import net.osmand.GPXUtilities.WptPt;
|
||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
|
||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.EditFavoriteGroupDialogFragment.FavoriteColorAdapter;
|
||||
|
|
|
@ -54,8 +54,8 @@ import net.osmand.plus.GPXDatabase.GpxDataItem;
|
|||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
|
||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItemType;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
|
|
|
@ -27,8 +27,8 @@ import net.osmand.data.FavouritePoint;
|
|||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.plus.FavouritesDbHelper;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmAndLocationProvider;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
|
|
|
@ -51,7 +51,7 @@ import net.osmand.plus.GeocodingLookupService;
|
|||
import net.osmand.plus.GeocodingLookupService.AddressLookupRequest;
|
||||
import net.osmand.plus.GeocodingLookupService.OnAddressLookupResult;
|
||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmAndLocationProvider;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
|
|
|
@ -14,7 +14,7 @@ import androidx.appcompat.view.ContextThemeWrapper;
|
|||
|
||||
import net.osmand.AndroidUtils;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.base.MapViewTrackingUtilities;
|
||||
|
|
|
@ -16,5 +16,7 @@ public enum ExportSettingsType {
|
|||
OFFLINE_MAPS,
|
||||
FAVORITES,
|
||||
TTS_VOICE,
|
||||
VOICE
|
||||
VOICE,
|
||||
ACTIVE_MARKERS,
|
||||
HISTORY_MARKERS
|
||||
}
|
||||
|
|
|
@ -16,10 +16,7 @@ import net.osmand.plus.R;
|
|||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
@ -69,11 +66,6 @@ public class FavoritesSettingsItem extends CollectionSettingsItem<FavoriteGroup>
|
|||
return ctx.getString(R.string.shared_string_favorites);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getDefaultFileName() {
|
||||
return getName() + getDefaultFileExtension();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getDefaultFileExtension() {
|
||||
return GPX_FILE_EXT;
|
||||
|
@ -177,21 +169,9 @@ public class FavoritesSettingsItem extends CollectionSettingsItem<FavoriteGroup>
|
|||
|
||||
@Nullable
|
||||
@Override
|
||||
SettingsItemWriter<FavoritesSettingsItem> getWriter() {
|
||||
return new SettingsItemWriter<FavoritesSettingsItem>(this) {
|
||||
|
||||
@Override
|
||||
public boolean writeToStream(@NonNull OutputStream outputStream) throws IOException {
|
||||
List<FavouritePoint> favourites = getPointsFromGroups(items);
|
||||
GPXFile gpxFile = favoritesHelper.asGpxFile(favourites);
|
||||
Exception error = GPXUtilities.writeGpx(new OutputStreamWriter(outputStream, "UTF-8"), gpxFile);
|
||||
if (error != null) {
|
||||
warnings.add(app.getString(R.string.settings_item_write_error, String.valueOf(getType())));
|
||||
SettingsHelper.LOG.error("Failed write to gpx file", error);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
SettingsItemWriter<? extends SettingsItem> getWriter() {
|
||||
List<FavouritePoint> favourites = getPointsFromGroups(items);
|
||||
GPXFile gpxFile = favoritesHelper.asGpxFile(favourites);
|
||||
return getGpxWriter(gpxFile);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,160 @@
|
|||
package net.osmand.plus.settings.backend.backup;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import net.osmand.GPXUtilities;
|
||||
import net.osmand.GPXUtilities.GPXFile;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersDbHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.settings.backend.ExportSettingsType;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static net.osmand.IndexConstants.GPX_FILE_EXT;
|
||||
|
||||
public class HistoryMarkersSettingsItem extends CollectionSettingsItem<MapMarker> {
|
||||
|
||||
private MapMarkersHelper markersHelper;
|
||||
|
||||
public HistoryMarkersSettingsItem(@NonNull OsmandApplication app, @NonNull List<MapMarker> items) {
|
||||
super(app, null, items);
|
||||
}
|
||||
|
||||
public HistoryMarkersSettingsItem(@NonNull OsmandApplication app, @Nullable HistoryMarkersSettingsItem baseItem, @NonNull List<MapMarker> items) {
|
||||
super(app, baseItem, items);
|
||||
}
|
||||
|
||||
HistoryMarkersSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
|
||||
super(app, json);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void init() {
|
||||
super.init();
|
||||
markersHelper = app.getMapMarkersHelper();
|
||||
existingItems = new ArrayList<>(markersHelper.getMapMarkersHistory());
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public SettingsItemType getType() {
|
||||
return SettingsItemType.HISTORY_MARKERS;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String getName() {
|
||||
return "history_markers";
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String getPublicName(@NonNull Context ctx) {
|
||||
return ctx.getString(R.string.markers_history);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getDefaultFileExtension() {
|
||||
return GPX_FILE_EXT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply() {
|
||||
List<MapMarker> newItems = getNewItems();
|
||||
if (!newItems.isEmpty() || !duplicateItems.isEmpty()) {
|
||||
appliedItems = new ArrayList<>(newItems);
|
||||
|
||||
for (MapMarker duplicate : duplicateItems) {
|
||||
if (shouldReplace) {
|
||||
MapMarker existingMarker = markersHelper.getMapMarker(duplicate.point);
|
||||
markersHelper.removeMarker(existingMarker);
|
||||
}
|
||||
appliedItems.add(shouldReplace ? duplicate : renameItem(duplicate));
|
||||
}
|
||||
|
||||
for (MapMarker marker : appliedItems) {
|
||||
markersHelper.moveMapMarkerToHistory(marker);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDuplicate(@NonNull MapMarker mapMarker) {
|
||||
for (MapMarker marker : existingItems) {
|
||||
if (marker.equals(mapMarker)
|
||||
&& Algorithms.objectEquals(marker.getOriginalPointDescription(), mapMarker.getOriginalPointDescription())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldReadOnCollecting() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public MapMarker renameItem(@NonNull MapMarker item) {
|
||||
int number = 0;
|
||||
while (true) {
|
||||
number++;
|
||||
String name = item.getOnlyName() + "_" + number;
|
||||
PointDescription description = new PointDescription(PointDescription.POINT_TYPE_LOCATION, name);
|
||||
MapMarker renamedMarker = new MapMarker(item.point, description, item.getColor(), item.selected, item.index);
|
||||
if (!isDuplicate(renamedMarker)) {
|
||||
renamedMarker.nextKey = MapMarkersDbHelper.HISTORY_NEXT_VALUE;
|
||||
return renamedMarker;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public MapMarkersGroup getMarkersGroup() {
|
||||
String name = app.getString(R.string.markers_history);
|
||||
String groupId = ExportSettingsType.HISTORY_MARKERS.name();
|
||||
MapMarkersGroup markersGroup = new MapMarkersGroup(groupId, name, MapMarkersGroup.ANY_TYPE);
|
||||
markersGroup.setMarkers(items);
|
||||
return markersGroup;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
SettingsItemReader<HistoryMarkersSettingsItem> getReader() {
|
||||
return new SettingsItemReader<HistoryMarkersSettingsItem>(this) {
|
||||
|
||||
@Override
|
||||
public void readFromStream(@NonNull InputStream inputStream, String entryName) throws IllegalArgumentException {
|
||||
GPXFile gpxFile = GPXUtilities.loadGPXFile(inputStream);
|
||||
if (gpxFile.error != null) {
|
||||
warnings.add(app.getString(R.string.settings_item_read_error, String.valueOf(getType())));
|
||||
SettingsHelper.LOG.error("Failed read gpx file", gpxFile.error);
|
||||
} else {
|
||||
List<MapMarker> mapMarkers = markersHelper.readMarkersFromGpx(gpxFile, true);
|
||||
items.addAll(mapMarkers);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
SettingsItemWriter<? extends SettingsItem> getWriter() {
|
||||
GPXFile gpxFile = markersHelper.generateGpx(items, true);
|
||||
return getGpxWriter(gpxFile);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,160 @@
|
|||
package net.osmand.plus.settings.backend.backup;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import net.osmand.GPXUtilities;
|
||||
import net.osmand.GPXUtilities.GPXFile;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersDbHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.settings.backend.ExportSettingsType;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static net.osmand.IndexConstants.GPX_FILE_EXT;
|
||||
|
||||
public class MarkersSettingsItem extends CollectionSettingsItem<MapMarker> {
|
||||
|
||||
private MapMarkersHelper markersHelper;
|
||||
|
||||
public MarkersSettingsItem(@NonNull OsmandApplication app, @NonNull List<MapMarker> items) {
|
||||
super(app, null, items);
|
||||
}
|
||||
|
||||
public MarkersSettingsItem(@NonNull OsmandApplication app, @Nullable MarkersSettingsItem baseItem, @NonNull List<MapMarker> items) {
|
||||
super(app, baseItem, items);
|
||||
}
|
||||
|
||||
MarkersSettingsItem(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
|
||||
super(app, json);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void init() {
|
||||
super.init();
|
||||
markersHelper = app.getMapMarkersHelper();
|
||||
existingItems = new ArrayList<>(markersHelper.getMapMarkers());
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public SettingsItemType getType() {
|
||||
return SettingsItemType.ACTIVE_MARKERS;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String getName() {
|
||||
return "markers";
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String getPublicName(@NonNull Context ctx) {
|
||||
return ctx.getString(R.string.map_markers);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getDefaultFileExtension() {
|
||||
return GPX_FILE_EXT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply() {
|
||||
List<MapMarker> newItems = getNewItems();
|
||||
if (!newItems.isEmpty() || !duplicateItems.isEmpty()) {
|
||||
appliedItems = new ArrayList<>(newItems);
|
||||
|
||||
for (MapMarker duplicate : duplicateItems) {
|
||||
if (shouldReplace) {
|
||||
MapMarker existingMarker = markersHelper.getMapMarker(duplicate.point);
|
||||
markersHelper.removeMarker(existingMarker);
|
||||
}
|
||||
appliedItems.add(shouldReplace ? duplicate : renameItem(duplicate));
|
||||
}
|
||||
|
||||
for (MapMarker marker : appliedItems) {
|
||||
markersHelper.addMarker(marker);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDuplicate(@NonNull MapMarker mapMarker) {
|
||||
for (MapMarker marker : existingItems) {
|
||||
if (marker.equals(mapMarker)
|
||||
&& Algorithms.objectEquals(marker.getOriginalPointDescription(), mapMarker.getOriginalPointDescription())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldReadOnCollecting() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public MapMarker renameItem(@NonNull MapMarker item) {
|
||||
int number = 0;
|
||||
while (true) {
|
||||
number++;
|
||||
String name = item.getOnlyName() + "_" + number;
|
||||
PointDescription description = new PointDescription(PointDescription.POINT_TYPE_LOCATION, name);
|
||||
MapMarker renamedMarker = new MapMarker(item.point, description, item.getColor(), item.selected, item.index);
|
||||
if (!isDuplicate(renamedMarker)) {
|
||||
renamedMarker.nextKey = MapMarkersDbHelper.TAIL_NEXT_VALUE;
|
||||
return renamedMarker;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public MapMarkersGroup getMarkersGroup() {
|
||||
String name = app.getString(R.string.map_markers);
|
||||
String groupId = ExportSettingsType.ACTIVE_MARKERS.name();
|
||||
MapMarkersGroup markersGroup = new MapMarkersGroup(groupId, name, MapMarkersGroup.ANY_TYPE);
|
||||
markersGroup.setMarkers(items);
|
||||
return markersGroup;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
SettingsItemReader<MarkersSettingsItem> getReader() {
|
||||
return new SettingsItemReader<MarkersSettingsItem>(this) {
|
||||
|
||||
@Override
|
||||
public void readFromStream(@NonNull InputStream inputStream, String entryName) throws IllegalArgumentException {
|
||||
GPXFile gpxFile = GPXUtilities.loadGPXFile(inputStream);
|
||||
if (gpxFile.error != null) {
|
||||
warnings.add(app.getString(R.string.settings_item_read_error, String.valueOf(getType())));
|
||||
SettingsHelper.LOG.error("Failed read gpx file", gpxFile.error);
|
||||
} else {
|
||||
List<MapMarker> mapMarkers = markersHelper.readMarkersFromGpx(gpxFile, false);
|
||||
items.addAll(mapMarkers);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
SettingsItemWriter<? extends SettingsItem> getWriter() {
|
||||
GPXFile gpxFile = markersHelper.generateGpx(items, true);
|
||||
return getGpxWriter(gpxFile);
|
||||
}
|
||||
}
|
|
@ -18,6 +18,7 @@ import net.osmand.map.TileSourceManager.TileSourceTemplate;
|
|||
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.OsmandPlugin;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.SQLiteTileSource;
|
||||
import net.osmand.plus.activities.LocalIndexHelper;
|
||||
import net.osmand.plus.activities.LocalIndexInfo;
|
||||
|
@ -28,6 +29,8 @@ import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
|
|||
import net.osmand.plus.helpers.FileNameTranslationHelper;
|
||||
import net.osmand.plus.helpers.GpxUiHelper;
|
||||
import net.osmand.plus.helpers.GpxUiHelper.GPXInfo;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.osmedit.OpenstreetmapPoint;
|
||||
import net.osmand.plus.osmedit.OsmEditingPlugin;
|
||||
import net.osmand.plus.osmedit.OsmNotesPoint;
|
||||
|
@ -594,6 +597,22 @@ public class SettingsHelper {
|
|||
if (!files.isEmpty()) {
|
||||
dataList.put(ExportSettingsType.VOICE, files);
|
||||
}
|
||||
List<MapMarker> mapMarkers = app.getMapMarkersHelper().getMapMarkers();
|
||||
if (!mapMarkers.isEmpty()) {
|
||||
String name = app.getString(R.string.map_markers);
|
||||
String groupId = ExportSettingsType.ACTIVE_MARKERS.name();
|
||||
MapMarkersGroup markersGroup = new MapMarkersGroup(groupId, name, MapMarkersGroup.ANY_TYPE);
|
||||
markersGroup.setMarkers(mapMarkers);
|
||||
dataList.put(ExportSettingsType.ACTIVE_MARKERS, Collections.singletonList(markersGroup));
|
||||
}
|
||||
List<MapMarker> markersHistory = app.getMapMarkersHelper().getMapMarkersHistory();
|
||||
if (!markersHistory.isEmpty()) {
|
||||
String name = app.getString(R.string.shared_string_history);
|
||||
String groupId = ExportSettingsType.HISTORY_MARKERS.name();
|
||||
MapMarkersGroup markersGroup = new MapMarkersGroup(groupId, name, MapMarkersGroup.ANY_TYPE);
|
||||
markersGroup.setMarkers(markersHistory);
|
||||
dataList.put(ExportSettingsType.HISTORY_MARKERS, Collections.singletonList(markersGroup));
|
||||
}
|
||||
return dataList;
|
||||
}
|
||||
|
||||
|
@ -633,6 +652,8 @@ public class SettingsHelper {
|
|||
List<FavoriteGroup> favoriteGroups = new ArrayList<>();
|
||||
List<OsmNotesPoint> osmNotesPointList = new ArrayList<>();
|
||||
List<OpenstreetmapPoint> osmEditsPointList = new ArrayList<>();
|
||||
List<MapMarkersGroup> markersGroups = new ArrayList<>();
|
||||
List<MapMarkersGroup> markersHistoryGroups = new ArrayList<>();
|
||||
|
||||
for (Object object : data) {
|
||||
if (object instanceof QuickAction) {
|
||||
|
@ -657,6 +678,13 @@ public class SettingsHelper {
|
|||
osmEditsPointList.add((OpenstreetmapPoint) object);
|
||||
} else if (object instanceof FavoriteGroup) {
|
||||
favoriteGroups.add((FavoriteGroup) object);
|
||||
} else if (object instanceof MapMarkersGroup) {
|
||||
MapMarkersGroup markersGroup = (MapMarkersGroup) object;
|
||||
if (ExportSettingsType.ACTIVE_MARKERS.name().equals(markersGroup.getId())) {
|
||||
markersGroups.add((MapMarkersGroup) object);
|
||||
} else if (ExportSettingsType.HISTORY_MARKERS.name().equals(markersGroup.getId())) {
|
||||
markersHistoryGroups.add((MapMarkersGroup) object);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!quickActions.isEmpty()) {
|
||||
|
@ -688,6 +716,20 @@ public class SettingsHelper {
|
|||
if (!favoriteGroups.isEmpty()) {
|
||||
settingsItems.add(new FavoritesSettingsItem(app, favoriteGroups));
|
||||
}
|
||||
if (!markersGroups.isEmpty()) {
|
||||
List<MapMarker> mapMarkers = new ArrayList<>();
|
||||
for (MapMarkersGroup group : markersGroups) {
|
||||
mapMarkers.addAll(group.getMarkers());
|
||||
}
|
||||
settingsItems.add(new MarkersSettingsItem(app, mapMarkers));
|
||||
}
|
||||
if (!markersHistoryGroups.isEmpty()) {
|
||||
List<MapMarker> mapMarkers = new ArrayList<>();
|
||||
for (MapMarkersGroup group : markersHistoryGroups) {
|
||||
mapMarkers.addAll(group.getMarkers());
|
||||
}
|
||||
settingsItems.add(new HistoryMarkersSettingsItem(app, mapMarkers));
|
||||
}
|
||||
return settingsItems;
|
||||
}
|
||||
|
||||
|
@ -709,6 +751,8 @@ public class SettingsHelper {
|
|||
List<OsmNotesPoint> notesPointList = new ArrayList<>();
|
||||
List<OpenstreetmapPoint> editsPointList = new ArrayList<>();
|
||||
List<FavoriteGroup> favoriteGroups = new ArrayList<>();
|
||||
List<MapMarkersGroup> markersGroups = new ArrayList<>();
|
||||
List<MapMarkersGroup> markersHistoryGroups = new ArrayList<>();
|
||||
|
||||
for (SettingsItem item : settingsItems) {
|
||||
switch (item.getType()) {
|
||||
|
@ -788,6 +832,14 @@ public class SettingsHelper {
|
|||
FavoritesSettingsItem favoritesSettingsItem = (FavoritesSettingsItem) item;
|
||||
favoriteGroups.addAll(favoritesSettingsItem.getItems());
|
||||
break;
|
||||
case ACTIVE_MARKERS:
|
||||
MarkersSettingsItem markersSettingsItem = (MarkersSettingsItem) item;
|
||||
markersGroups.add(markersSettingsItem.getMarkersGroup());
|
||||
break;
|
||||
case HISTORY_MARKERS:
|
||||
HistoryMarkersSettingsItem historyMarkersSettingsItem = (HistoryMarkersSettingsItem) item;
|
||||
markersHistoryGroups.add(historyMarkersSettingsItem.getMarkersGroup());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -841,6 +893,12 @@ public class SettingsHelper {
|
|||
if (!voiceFilesList.isEmpty()) {
|
||||
settingsToOperate.put(ExportSettingsType.VOICE, voiceFilesList);
|
||||
}
|
||||
if (!markersGroups.isEmpty()) {
|
||||
settingsToOperate.put(ExportSettingsType.ACTIVE_MARKERS, markersGroups);
|
||||
}
|
||||
if (!markersGroups.isEmpty()) {
|
||||
settingsToOperate.put(ExportSettingsType.HISTORY_MARKERS, markersHistoryGroups);
|
||||
}
|
||||
return settingsToOperate;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,10 @@ import android.content.Context;
|
|||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import net.osmand.GPXUtilities;
|
||||
import net.osmand.GPXUtilities.GPXFile;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import org.json.JSONException;
|
||||
|
@ -17,6 +20,7 @@ import java.io.IOException;
|
|||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -205,6 +209,7 @@ public abstract class SettingsItem {
|
|||
String s = json.toString(2);
|
||||
outputStream.write(s.getBytes("UTF-8"));
|
||||
} catch (JSONException e) {
|
||||
warnings.add(app.getString(R.string.settings_item_write_error, String.valueOf(getType())));
|
||||
SettingsHelper.LOG.error("Failed to write json to stream", e);
|
||||
}
|
||||
return true;
|
||||
|
@ -214,6 +219,22 @@ public abstract class SettingsItem {
|
|||
};
|
||||
}
|
||||
|
||||
@NonNull
|
||||
SettingsItemWriter<? extends SettingsItem> getGpxWriter(@NonNull final GPXFile gpxFile) {
|
||||
return new SettingsItemWriter<SettingsItem>(this) {
|
||||
@Override
|
||||
public boolean writeToStream(@NonNull OutputStream outputStream) throws IOException {
|
||||
Exception error = GPXUtilities.writeGpx(new OutputStreamWriter(outputStream, "UTF-8"), gpxFile);
|
||||
if (error != null) {
|
||||
warnings.add(app.getString(R.string.settings_item_write_error, String.valueOf(getType())));
|
||||
SettingsHelper.LOG.error("Failed write to gpx file", error);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return (getType().name() + getName()).hashCode();
|
||||
|
|
|
@ -15,5 +15,7 @@ public enum SettingsItemType {
|
|||
DOWNLOADS,
|
||||
OSM_NOTES,
|
||||
OSM_EDITS,
|
||||
FAVOURITES
|
||||
FAVOURITES,
|
||||
ACTIVE_MARKERS,
|
||||
HISTORY_MARKERS
|
||||
}
|
|
@ -134,6 +134,12 @@ class SettingsItemsFactory {
|
|||
case FAVOURITES:
|
||||
item = new FavoritesSettingsItem(app, json);
|
||||
break;
|
||||
case ACTIVE_MARKERS:
|
||||
item = new MarkersSettingsItem(app, json);
|
||||
break;
|
||||
case HISTORY_MARKERS:
|
||||
item = new HistoryMarkersSettingsItem(app, json);
|
||||
break;
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
|
|
@ -14,20 +14,21 @@ import net.osmand.IndexConstants;
|
|||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.map.ITileSource;
|
||||
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
|
||||
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
|
||||
import net.osmand.plus.helpers.FileNameTranslationHelper;
|
||||
import net.osmand.plus.helpers.GpxUiHelper;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
|
||||
import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
|
||||
import net.osmand.plus.helpers.FileNameTranslationHelper;
|
||||
import net.osmand.plus.helpers.GpxUiHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.poi.PoiUIFilter;
|
||||
import net.osmand.plus.profiles.ProfileIconColors;
|
||||
import net.osmand.plus.profiles.RoutingProfileDataObject.RoutingProfilesResources;
|
||||
import net.osmand.plus.quickaction.QuickAction;
|
||||
import net.osmand.plus.render.RenderingIcons;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
@ -35,7 +36,7 @@ import org.apache.commons.logging.Log;
|
|||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
import static net.osmand.plus.settings.backend.backup.FileSettingsItem.*;
|
||||
import static net.osmand.plus.settings.backend.backup.FileSettingsItem.FileSubtype;
|
||||
|
||||
public class DuplicatesSettingsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
|
||||
|
@ -155,6 +156,10 @@ public class DuplicatesSettingsAdapter extends RecyclerView.Adapter<RecyclerView
|
|||
} else if (currentItem instanceof FavoriteGroup) {
|
||||
itemHolder.title.setText(((FavoriteGroup) currentItem).getDisplayName(app));
|
||||
itemHolder.icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_favorite, activeColorRes));
|
||||
} else if (currentItem instanceof MapMarkersGroup) {
|
||||
MapMarkersGroup markersGroup = (MapMarkersGroup) currentItem;
|
||||
itemHolder.title.setText(markersGroup.getName());
|
||||
itemHolder.icon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_flag, activeColorRes));
|
||||
}
|
||||
itemHolder.divider.setVisibility(shouldShowDivider(position) ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
|
|
@ -302,6 +302,14 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
|||
title.setText(FileNameTranslationHelper.getFileNameWithRegion(app, file.getName()));
|
||||
setupIcon(icon, R.drawable.ic_action_volume_up, itemSelected);
|
||||
break;
|
||||
case ACTIVE_MARKERS:
|
||||
title.setText(R.string.map_markers);
|
||||
setupIcon(icon, R.drawable.ic_action_flag, itemSelected);
|
||||
break;
|
||||
case HISTORY_MARKERS:
|
||||
title.setText(R.string.markers_history);
|
||||
setupIcon(icon, R.drawable.ic_action_flag, itemSelected);
|
||||
break;
|
||||
default:
|
||||
return child;
|
||||
}
|
||||
|
@ -402,6 +410,10 @@ class ExportImportSettingsAdapter extends OsmandBaseExpandableListAdapter {
|
|||
return R.string.local_indexes_cat_tts;
|
||||
case VOICE:
|
||||
return R.string.local_indexes_cat_voice;
|
||||
case ACTIVE_MARKERS:
|
||||
return R.string.map_markers;
|
||||
case HISTORY_MARKERS:
|
||||
return R.string.markers_history;
|
||||
default:
|
||||
return R.string.access_empty_list;
|
||||
}
|
||||
|
|
|
@ -32,11 +32,13 @@ import net.osmand.plus.R;
|
|||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.base.BaseOsmAndFragment;
|
||||
import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.osmedit.OpenstreetmapPoint;
|
||||
import net.osmand.plus.osmedit.OsmNotesPoint;
|
||||
import net.osmand.plus.poi.PoiUIFilter;
|
||||
import net.osmand.plus.quickaction.QuickAction;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
import net.osmand.plus.settings.backend.ExportSettingsType;
|
||||
import net.osmand.plus.settings.backend.backup.SettingsHelper;
|
||||
import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportAsyncTask;
|
||||
import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportType;
|
||||
|
@ -48,7 +50,7 @@ import java.io.File;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static net.osmand.plus.settings.backend.backup.FileSettingsItem.*;
|
||||
import static net.osmand.plus.settings.backend.backup.FileSettingsItem.FileSubtype;
|
||||
import static net.osmand.plus.settings.fragments.ImportSettingsFragment.IMPORT_SETTINGS_TAG;
|
||||
|
||||
|
||||
|
@ -200,6 +202,8 @@ public class ImportDuplicatesFragment extends BaseOsmAndFragment {
|
|||
List<File> ttsVoiceFilesList = new ArrayList<>();
|
||||
List<File> voiceFilesList = new ArrayList<>();
|
||||
List<File> mapFilesList = new ArrayList<>();
|
||||
List<MapMarkersGroup> markersGroups = new ArrayList<>();
|
||||
List<MapMarkersGroup> markersHistoryGroups = new ArrayList<>();
|
||||
|
||||
for (Object object : duplicatesList) {
|
||||
if (object instanceof ApplicationMode.ApplicationModeBean) {
|
||||
|
@ -236,6 +240,13 @@ public class ImportDuplicatesFragment extends BaseOsmAndFragment {
|
|||
osmNotesPointList.add((OsmNotesPoint) object);
|
||||
} else if (object instanceof OpenstreetmapPoint) {
|
||||
osmEditsPointList.add((OpenstreetmapPoint) object);
|
||||
} else if (object instanceof MapMarkersGroup) {
|
||||
MapMarkersGroup markersGroup = (MapMarkersGroup) object;
|
||||
if (ExportSettingsType.ACTIVE_MARKERS.name().equals(markersGroup.getId())) {
|
||||
markersGroups.add(markersGroup);
|
||||
} else if (ExportSettingsType.HISTORY_MARKERS.name().equals(markersGroup.getId())) {
|
||||
markersHistoryGroups.add(markersGroup);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!profiles.isEmpty()) {
|
||||
|
@ -298,6 +309,14 @@ public class ImportDuplicatesFragment extends BaseOsmAndFragment {
|
|||
duplicates.add(getString(R.string.local_indexes_cat_voice));
|
||||
duplicates.addAll(voiceFilesList);
|
||||
}
|
||||
if (!markersGroups.isEmpty()) {
|
||||
duplicates.add(getString(R.string.map_markers));
|
||||
duplicates.addAll(markersGroups);
|
||||
}
|
||||
if (!markersHistoryGroups.isEmpty()) {
|
||||
duplicates.add(getString(R.string.markers_history));
|
||||
duplicates.addAll(markersHistoryGroups);
|
||||
}
|
||||
return duplicates;
|
||||
}
|
||||
|
||||
|
|
|
@ -41,25 +41,29 @@ import net.osmand.plus.UiUtilities;
|
|||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.base.BaseOsmAndFragment;
|
||||
import net.osmand.plus.helpers.AvoidSpecificRoads.AvoidRoadInfo;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.osmedit.OpenstreetmapPoint;
|
||||
import net.osmand.plus.osmedit.OsmNotesPoint;
|
||||
import net.osmand.plus.poi.PoiUIFilter;
|
||||
import net.osmand.plus.quickaction.QuickAction;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean;
|
||||
import net.osmand.plus.settings.backend.ExportSettingsType;
|
||||
import net.osmand.plus.settings.backend.backup.AvoidRoadsSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.FavoritesSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.FileSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.GlobalSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.HistoryMarkersSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.MapSourcesSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.MarkersSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.OsmEditsSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.OsmNotesSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.SettingsHelper;
|
||||
import net.osmand.plus.settings.backend.backup.AvoidRoadsSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.FileSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportAsyncTask;
|
||||
import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportType;
|
||||
import net.osmand.plus.settings.backend.backup.MapSourcesSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.PoiUiFiltersSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.ProfileSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.QuickActionsSettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.SettingsHelper;
|
||||
import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportAsyncTask;
|
||||
import net.osmand.plus.settings.backend.backup.SettingsHelper.ImportType;
|
||||
import net.osmand.plus.settings.backend.backup.SettingsItem;
|
||||
import net.osmand.plus.settings.backend.backup.SettingsItemType;
|
||||
import net.osmand.plus.widgets.TextViewEx;
|
||||
|
@ -436,6 +440,8 @@ public class ImportSettingsFragment extends BaseOsmAndFragment {
|
|||
List<OsmNotesPoint> osmNotesPointList = new ArrayList<>();
|
||||
List<OpenstreetmapPoint> osmEditsPointList = new ArrayList<>();
|
||||
List<FavoriteGroup> favoriteGroups = new ArrayList<>();
|
||||
List<MapMarkersGroup> markersGroups = new ArrayList<>();
|
||||
List<MapMarkersGroup> markersHistoryGroups = new ArrayList<>();
|
||||
for (Object object : data) {
|
||||
if (object instanceof ApplicationModeBean) {
|
||||
appModeBeans.add((ApplicationModeBean) object);
|
||||
|
@ -459,6 +465,13 @@ public class ImportSettingsFragment extends BaseOsmAndFragment {
|
|||
favoriteGroups.add((FavoriteGroup) object);
|
||||
} else if (object instanceof GlobalSettingsItem) {
|
||||
settingsItems.add((GlobalSettingsItem) object);
|
||||
} else if (object instanceof MapMarkersGroup) {
|
||||
MapMarkersGroup markersGroup = (MapMarkersGroup) object;
|
||||
if (ExportSettingsType.ACTIVE_MARKERS.name().equals(markersGroup.getId())) {
|
||||
markersGroups.add((MapMarkersGroup) object);
|
||||
} else if (ExportSettingsType.HISTORY_MARKERS.name().equals(markersGroup.getId())) {
|
||||
markersHistoryGroups.add((MapMarkersGroup) object);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!appModeBeans.isEmpty()) {
|
||||
|
@ -490,6 +503,23 @@ public class ImportSettingsFragment extends BaseOsmAndFragment {
|
|||
FavoritesSettingsItem baseItem = getBaseItem(SettingsItemType.FAVOURITES, FavoritesSettingsItem.class);
|
||||
settingsItems.add(new FavoritesSettingsItem(app, baseItem, favoriteGroups));
|
||||
}
|
||||
if (!markersGroups.isEmpty()) {
|
||||
List<MapMarker> mapMarkers = new ArrayList<>();
|
||||
for (MapMarkersGroup group : markersGroups) {
|
||||
mapMarkers.addAll(group.getMarkers());
|
||||
}
|
||||
MarkersSettingsItem baseItem = getBaseItem(SettingsItemType.ACTIVE_MARKERS, MarkersSettingsItem.class);
|
||||
settingsItems.add(new MarkersSettingsItem(app, baseItem, mapMarkers));
|
||||
}
|
||||
if (!markersHistoryGroups.isEmpty()) {
|
||||
List<MapMarker> mapMarkers = new ArrayList<>();
|
||||
for (MapMarkersGroup group : markersHistoryGroups) {
|
||||
mapMarkers.addAll(group.getMarkers());
|
||||
}
|
||||
HistoryMarkersSettingsItem baseItem = getBaseItem(SettingsItemType.HISTORY_MARKERS, HistoryMarkersSettingsItem.class);
|
||||
settingsItems.add(new HistoryMarkersSettingsItem(app, baseItem, mapMarkers));
|
||||
}
|
||||
|
||||
return settingsItems;
|
||||
}
|
||||
|
||||
|
|
|
@ -142,6 +142,14 @@ public class ImportedSettingsItemsAdapter extends
|
|||
holder.icon.setImageDrawable(uiUtils.getIcon(R.drawable.ic_action_settings, activeColorRes));
|
||||
holder.title.setText(R.string.general_settings_2);
|
||||
break;
|
||||
case ACTIVE_MARKERS:
|
||||
holder.icon.setImageDrawable(uiUtils.getIcon(R.drawable.ic_action_flag, activeColorRes));
|
||||
holder.title.setText(R.string.map_markers);
|
||||
break;
|
||||
case HISTORY_MARKERS:
|
||||
holder.icon.setImageDrawable(uiUtils.getIcon(R.drawable.ic_action_flag, activeColorRes));
|
||||
holder.title.setText(R.string.markers_history);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -225,6 +225,13 @@ public class AnimateDraggingMapThread {
|
|||
|
||||
if (!stopped) {
|
||||
animatingMoveInThread(mMoveX, mMoveY, animationTime, notifyListener, finishAnimationCallback);
|
||||
} else if (finishAnimationCallback != null) {
|
||||
tileView.getApplication().runInUIThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
finishAnimationCallback.run();
|
||||
}
|
||||
});
|
||||
}
|
||||
if (!stopped) {
|
||||
tileView.setLatLonAnimate(finalLat, finalLon, notifyListener);
|
||||
|
|
|
@ -17,8 +17,8 @@ import net.osmand.data.QuadTree;
|
|||
import net.osmand.data.RotatedTileBox;
|
||||
import net.osmand.plus.FavouritesDbHelper;
|
||||
import net.osmand.plus.FavouritesDbHelper.FavoriteGroup;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.base.PointImageDrawable;
|
||||
|
|
|
@ -37,9 +37,9 @@ import net.osmand.plus.GpxSelectionHelper;
|
|||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
|
||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarkersGroup;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
|
|
|
@ -31,8 +31,8 @@ import net.osmand.data.LatLon;
|
|||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.data.QuadPoint;
|
||||
import net.osmand.data.RotatedTileBox;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmAndConstants;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
|
|
|
@ -9,8 +9,8 @@ import net.osmand.Location;
|
|||
import net.osmand.data.LatLon;
|
||||
import net.osmand.data.PointDescription;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.MapMarkersHelper;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
|
|
|
@ -12,7 +12,7 @@ import android.view.View;
|
|||
import net.osmand.Location;
|
||||
import net.osmand.binary.RouteDataObject;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.MapMarkersHelper.MapMarker;
|
||||
import net.osmand.plus.mapmarkers.MapMarker;
|
||||
import net.osmand.plus.OsmAndFormatter;
|
||||
import net.osmand.plus.OsmAndLocationProvider;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
|
|
Loading…
Reference in a new issue