Merge branch 'master' into Unbookmark_gpx
This commit is contained in:
commit
08e2c4ed26
68 changed files with 1740 additions and 574 deletions
|
@ -64,4 +64,37 @@
|
||||||
<string name="shared_string_end">Fino</string>
|
<string name="shared_string_end">Fino</string>
|
||||||
<string name="time_zone">Horzono</string>
|
<string name="time_zone">Horzono</string>
|
||||||
<string name="send_report">Sendi raporton</string>
|
<string name="send_report">Sendi raporton</string>
|
||||||
|
<string name="search_contacts">Serĉi kontaktojn</string>
|
||||||
|
<string name="bearing">Direkto</string>
|
||||||
|
<string name="proxy_settings">Agordoj pri la Retperanto</string>
|
||||||
|
<string name="proxy_type">Tipo de retperanto</string>
|
||||||
|
<string name="units_and_formats">Mezurunuoj & formoj</string>
|
||||||
|
<string name="shared_string_export">Elporti</string>
|
||||||
|
<string name="points_size">%1$d punktoj</string>
|
||||||
|
<string name="shared_string_appearance">Aspekto</string>
|
||||||
|
<string name="telegram_privacy_policy">Reguloj pri Privateco de Telegram</string>
|
||||||
|
<string name="osmand_privacy_policy">Reguloj pri Privateco de OsmAnd</string>
|
||||||
|
<string name="shared_string_update">Ĝisdatigi</string>
|
||||||
|
<string name="shared_string_collected">Kolektita</string>
|
||||||
|
<string name="open_in_osmand">Montri per OsmAnd</string>
|
||||||
|
<string name="background_work">Fona laboro</string>
|
||||||
|
<string name="no_internet_connection">Sen interreta konekto</string>
|
||||||
|
<string name="shared_string_status">Stato</string>
|
||||||
|
<string name="proxy">Retperanto</string>
|
||||||
|
<string name="gpx_settings">Agordoj pri GPX</string>
|
||||||
|
<string name="start_end_date">Komenca – Fina datoj</string>
|
||||||
|
<string name="unit_of_speed_system_descr">Difinu la mezurunuon de rapido.</string>
|
||||||
|
<string name="unit_of_length">Mezurunuoj de longo</string>
|
||||||
|
<string name="unit_of_speed_system">Mezurunuo de rapido</string>
|
||||||
|
<string name="shared_string_error_short">ERARO</string>
|
||||||
|
<string name="back_to_osmand">Reen al OsmAnd</string>
|
||||||
|
<string name="duration_ago">antaŭ %1$s</string>
|
||||||
|
<string name="last_response_duration">Lasta respondo: antaŭ %1$s</string>
|
||||||
|
<string name="last_update_from_telegram_duration">Lasta ĝisdatigo de Telegram: antaŭ %1$s</string>
|
||||||
|
<string name="last_update_from_telegram_date">Lasta ĝisdatigo de Telegram: %1$s</string>
|
||||||
|
<string name="last_response_date">Lasta respondo: %1$s</string>
|
||||||
|
<string name="show_users_on_map">Montri uzantojn sur la mapo</string>
|
||||||
|
<string name="install_osmand">Instali OsmAnd</string>
|
||||||
|
<string name="shared_string_suggested">Sugestataj</string>
|
||||||
|
<string name="average_speed">Mezuma rapido</string>
|
||||||
</resources>
|
</resources>
|
|
@ -237,7 +237,7 @@
|
||||||
<string name="not_possible_to_send_to_telegram_chats">Impossible d\'envoyer dans les discussions Telegram :</string>
|
<string name="not_possible_to_send_to_telegram_chats">Impossible d\'envoyer dans les discussions Telegram :</string>
|
||||||
<string name="successfully_sent_and_updated">Envoyé et mis à jour avec succès</string>
|
<string name="successfully_sent_and_updated">Envoyé et mis à jour avec succès</string>
|
||||||
<string name="last_updated_location">Dernière position mise à jour :</string>
|
<string name="last_updated_location">Dernière position mise à jour :</string>
|
||||||
<string name="share_location_as_description">Si vous voulez connecter plusieurs appareils à un même compte Telegram, vous devez utiliser un appareil différent pour partager votre position.</string>
|
<string name="share_location_as_description">Si vous souhaitez connecter plusieurs appareils à un même compte Telegram, vous devez partager votre position depuis chaque appareil.</string>
|
||||||
<string name="share_location_as_description_second_line">Vous pouvez créer et visualiser l\'identifiant du périphérique dans le client Telegram en utilisant le chat-bot %1$s. %2$s</string>
|
<string name="share_location_as_description_second_line">Vous pouvez créer et visualiser l\'identifiant du périphérique dans le client Telegram en utilisant le chat-bot %1$s. %2$s</string>
|
||||||
<string name="enter_device_name_description">Nommez votre nouveau périphérique en max 200 symboles.</string>
|
<string name="enter_device_name_description">Nommez votre nouveau périphérique en max 200 symboles.</string>
|
||||||
<string name="enter_another_device_name">Choisissez un nom que vous n\'avez pas encore utilisé</string>
|
<string name="enter_another_device_name">Choisissez un nom que vous n\'avez pas encore utilisé</string>
|
||||||
|
@ -266,7 +266,7 @@
|
||||||
<string name="location_history_desc">Cacher les contacts qui ne se sont pas déplacés depuis un temps donné.</string>
|
<string name="location_history_desc">Cacher les contacts qui ne se sont pas déplacés depuis un temps donné.</string>
|
||||||
<string name="set_time_description">Définissez l\'heure à laquelle les contacts et groupes sélectionnés verront votre position en temps réel.</string>
|
<string name="set_time_description">Définissez l\'heure à laquelle les contacts et groupes sélectionnés verront votre position en temps réel.</string>
|
||||||
<string name="osmand_connect">OsmAnd connect</string>
|
<string name="osmand_connect">OsmAnd connect</string>
|
||||||
<string name="time_ago">depuis</string>
|
<string name="time_ago">il y a</string>
|
||||||
<string name="logcat_buffer">Buffer Logcat</string>
|
<string name="logcat_buffer">Buffer Logcat</string>
|
||||||
<string name="logcat_buffer_descr">Vérifier et partager les logs détaillés de l\'application</string>
|
<string name="logcat_buffer_descr">Vérifier et partager les logs détaillés de l\'application</string>
|
||||||
<string name="shared_string_export">Exporter</string>
|
<string name="shared_string_export">Exporter</string>
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
<resources>
|
<resources>
|
||||||
<string name="timeline_no_data">Sem dados</string>
|
<string name="timeline_no_data">Sem dados</string>
|
||||||
<string name="shared_string_select">Selecionar</string>
|
<string name="shared_string_select">Selecionar</string>
|
||||||
<string name="min_logging_distance">Distância mínima de registro</string>
|
<string name="min_logging_distance">Distância mínima de registo</string>
|
||||||
<string name="min_logging_distance_descr">Filtro: distância mínima para registrar um novo ponto</string>
|
<string name="min_logging_distance_descr">Filtro: distância mínima para registar um novo ponto</string>
|
||||||
<string name="min_logging_accuracy">Precisão mínima de registro</string>
|
<string name="min_logging_accuracy">Precisão mínima de registo</string>
|
||||||
<string name="min_logging_accuracy_descr">Filtro: sem registro, a menos que a precisão seja atingida</string>
|
<string name="min_logging_accuracy_descr">Filtro: sem registo, a não ser que seja atingida a precisão</string>
|
||||||
<string name="min_logging_speed">Velocidade mínima de registro</string>
|
<string name="min_logging_speed">Velocidade mínima de registo</string>
|
||||||
<string name="min_logging_speed_descr">Filtro: sem registro abaixo da velocidade selecionada</string>
|
<string name="min_logging_speed_descr">Filtro: sem registo abaixo da velocidade selecionada</string>
|
||||||
<string name="proxy_password">Palavra-passe</string>
|
<string name="proxy_password">Palavra-passe</string>
|
||||||
<string name="proxy_username">Nome de utilizador</string>
|
<string name="proxy_username">Nome de utilizador</string>
|
||||||
<string name="shared_string_enable">Ativar</string>
|
<string name="shared_string_enable">Ativar</string>
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
<string name="altitude">Altitude</string>
|
<string name="altitude">Altitude</string>
|
||||||
<string name="shared_string_search">Pesquisar</string>
|
<string name="shared_string_search">Pesquisar</string>
|
||||||
<string name="shared_string_ok">Ok</string>
|
<string name="shared_string_ok">Ok</string>
|
||||||
<string name="app_name_short">Rastreador OsmAnd</string>
|
<string name="app_name_short">OsmAnd Tracker</string>
|
||||||
<string name="shared_string_telegram">Telegram</string>
|
<string name="shared_string_telegram">Telegram</string>
|
||||||
<string name="shared_string_appearance">Aparência</string>
|
<string name="shared_string_appearance">Aparência</string>
|
||||||
<string name="shared_string_update">Atualizar</string>
|
<string name="shared_string_update">Atualizar</string>
|
||||||
|
@ -35,13 +35,13 @@
|
||||||
<string name="shared_string_end">Fim</string>
|
<string name="shared_string_end">Fim</string>
|
||||||
<string name="shared_string_start">Iniciar</string>
|
<string name="shared_string_start">Iniciar</string>
|
||||||
<string name="shared_string_apply">Aplicar</string>
|
<string name="shared_string_apply">Aplicar</string>
|
||||||
<string name="set_time_timeline_descr">Selecionar a hora para exibir</string>
|
<string name="set_time_timeline_descr">Selecionar a hora de visualização</string>
|
||||||
<string name="start_end_date">Data de início - fim</string>
|
<string name="start_end_date">Data de início - fim</string>
|
||||||
<string name="timeline_no_data_descr">Não coletamos dados para o dia selecionado</string>
|
<string name="timeline_no_data_descr">Não temos dados recolhidos para o dia selecionado</string>
|
||||||
<string name="gpx_settings">Configurações de GPX</string>
|
<string name="gpx_settings">Configurações de GPX</string>
|
||||||
<string name="proxy_key">Chave</string>
|
<string name="proxy_key">Chave</string>
|
||||||
<string name="proxy_credentials">Credenciais</string>
|
<string name="proxy_credentials">Credenciais</string>
|
||||||
<string name="proxy_port">Port</string>
|
<string name="proxy_port">Porta</string>
|
||||||
<string name="proxy_server">Servidor</string>
|
<string name="proxy_server">Servidor</string>
|
||||||
<string name="shared_string_connection">Conexão</string>
|
<string name="shared_string_connection">Conexão</string>
|
||||||
<string name="proxy_type">Tipo de proxy</string>
|
<string name="proxy_type">Tipo de proxy</string>
|
||||||
|
@ -50,16 +50,16 @@
|
||||||
<string name="proxy_settings">Configurações de proxy</string>
|
<string name="proxy_settings">Configurações de proxy</string>
|
||||||
<string name="proxy">Proxy</string>
|
<string name="proxy">Proxy</string>
|
||||||
<string name="precision">Precisão</string>
|
<string name="precision">Precisão</string>
|
||||||
<string name="bearing">Rolamento</string>
|
<string name="bearing">Rumo</string>
|
||||||
<string name="search_contacts">Pesquisar contatos</string>
|
<string name="search_contacts">Pesquisar contactos</string>
|
||||||
<string name="search_contacts_descr">Pesquise em todos os seus grupos e contatos.</string>
|
<string name="search_contacts_descr">Pesquise em todos os seus grupos e contactos.</string>
|
||||||
<string name="type_contact_or_group_name">Digite o nome do contato ou do grupo</string>
|
<string name="type_contact_or_group_name">Digite o nome do contacto ou do grupo</string>
|
||||||
<string name="timeline_available_for_free_now">Linha do tempo é um recurso disponível agora gratuitamente.</string>
|
<string name="timeline_available_for_free_now">Linha do tempo é um recurso disponível agora gratuitamente.</string>
|
||||||
<string name="disable_monitoring">Desativar monitoramento</string>
|
<string name="disable_monitoring">Desativar monitorização</string>
|
||||||
<string name="location_recording_enabled">Gravação de localização ativada</string>
|
<string name="location_recording_enabled">Gravação de localização ativada</string>
|
||||||
<string name="timeline_description">Ative o monitoramento para gravar todos os locais no histórico.</string>
|
<string name="timeline_description">Ative a monitorização para gravar todos os locais no histórico.</string>
|
||||||
<string name="privacy_policy_use_telegram">Telegram (a app de mensagens) é usado para conectar e comunicar com as pessoas.</string>
|
<string name="privacy_policy_use_telegram">O Telegram (a aplicação de mensagens) é usado para conectar e comunicar com outras pessoas.</string>
|
||||||
<string name="privacy_policy_telegram_client">OsmAnd tracker é um dos clientes que usam a Plataforma aberta do Telegram . Seus contatos podem usar qualquer outro cliente Telegram.</string>
|
<string name="privacy_policy_telegram_client">OsmAnd Tracker é um dos clientes que usam a Plataforma aberta do Telegram. Os seus contactos podem usar qualquer outro cliente Telegram.</string>
|
||||||
<string name="privacy_policy_agree">Ao clicar em \"Continuar\" concorda com as condições da política de privacidade do Telegram e OsmAnd.</string>
|
<string name="privacy_policy_agree">Ao clicar em \"Continuar\" concorda com as condições da política de privacidade do Telegram e OsmAnd.</string>
|
||||||
<string name="shared_string_accept">Aceitar</string>
|
<string name="shared_string_accept">Aceitar</string>
|
||||||
<string name="telegram_privacy_policy">Política de privacidade do Telegram</string>
|
<string name="telegram_privacy_policy">Política de privacidade do Telegram</string>
|
||||||
|
@ -67,68 +67,68 @@
|
||||||
<string name="how_it_works">Como funciona</string>
|
<string name="how_it_works">Como funciona</string>
|
||||||
<string name="received_gps_points">Pontos GPX recebidos: %1$s</string>
|
<string name="received_gps_points">Pontos GPX recebidos: %1$s</string>
|
||||||
<string name="show_gps_points">Mostrar pontos de GPS</string>
|
<string name="show_gps_points">Mostrar pontos de GPS</string>
|
||||||
<string name="show_gps_points_descr">Mostrar quantidade de pontos de GPS coletados e enviados.</string>
|
<string name="show_gps_points_descr">Mostrar quantidade de pontos de GPS recolhidos e enviados.</string>
|
||||||
<string name="please_update_osmand">Por favor, atualize o OsmAnd para ver os dados no mapa</string>
|
<string name="please_update_osmand">Por favor, atualize o OsmAnd para ver os dados no mapa</string>
|
||||||
<string name="gps_points_in_buffer">enviado (%1$d em buffer)</string>
|
<string name="gps_points_in_buffer">enviado (%1$d em buffer)</string>
|
||||||
<string name="points_size">%1$d pontos</string>
|
<string name="points_size">%1$d pontos</string>
|
||||||
<string name="shared_string_collected">Coletado</string>
|
<string name="shared_string_collected">Recolhidos</string>
|
||||||
<string name="gps_points">Pontos de GPS</string>
|
<string name="gps_points">Pontos de GPS</string>
|
||||||
<string name="shared_string_sent">Enviado</string>
|
<string name="shared_string_sent">Enviado</string>
|
||||||
<string name="monitoring_is_enabled">Monitoramento está ativado</string>
|
<string name="monitoring_is_enabled">A monitorização está ativada</string>
|
||||||
<string name="monitoring_is_disabled">Monitoramento está desativado</string>
|
<string name="monitoring_is_disabled">A monitorização está desativada</string>
|
||||||
<string name="open_in_osmand">Mostrar no OsmAnd</string>
|
<string name="open_in_osmand">Mostrar no OsmAnd</string>
|
||||||
<string name="end_date">Data final</string>
|
<string name="end_date">Data de fim</string>
|
||||||
<string name="send_location_as">Enviar localização como</string>
|
<string name="send_location_as">Enviar localização como</string>
|
||||||
<string name="send_location_as_descr">Escolha como as mensagens com sua localização serão exibidas.</string>
|
<string name="send_location_as_descr">Escolha a forma como as mensagens com a sua localização serão mostradas.</string>
|
||||||
<string name="map_and_text">Mapa e texto</string>
|
<string name="map_and_text">Mapa e texto</string>
|
||||||
<string name="last_update_from_telegram">Última atualização do Telegram</string>
|
<string name="last_update_from_telegram">Última atualização do Telegram</string>
|
||||||
<string name="enter_another_device_name">Escolha um nome que ainda não usou</string>
|
<string name="enter_another_device_name">Escolha um nome que ainda não usou</string>
|
||||||
<string name="device_added_successfully">%1$s adicionado.</string>
|
<string name="device_added_successfully">%1$s adicionado.</string>
|
||||||
<string name="error_adding_new_device">Não foi possível adicionar novo aparelho</string>
|
<string name="error_adding_new_device">Não foi possível adicionar o novo dispositivo</string>
|
||||||
<string name="enter_device_name_description">Nomeie seu novo aparelho no máximo 200 símbolos.</string>
|
<string name="enter_device_name_description">Atribua um nome a seu novo dispositivo com o máximo de 200 caracteres.</string>
|
||||||
<string name="device_name_is_too_long">Nome do aparelho muito longo</string>
|
<string name="device_name_is_too_long">Nome do dispositivo muito longo</string>
|
||||||
<string name="device_name_cannot_be_empty">O nome do aparelho não pode estar vazio</string>
|
<string name="device_name_cannot_be_empty">O nome do dispositivo não pode estar vazio</string>
|
||||||
<string name="device_name">Nome do aparelho</string>
|
<string name="device_name">Nome do dispositivo</string>
|
||||||
<string name="share_location_as_description_second_line">Pode criar e visualizar o ID do aparelho no cliente de telegrama usando o bot de bate-papo %1$s. %2$s</string>
|
<string name="share_location_as_description_second_line">Pode criar e visualizar o ID do dispositivo no cliente de Telegram usando o robô de bate-papo %1$s. %2$s</string>
|
||||||
<string name="share_location_as_description">Se deseja conectar vários aparelhos a uma conta de telegrama, é necessário usar um aparelho diferente para compartilhar a sua localização.</string>
|
<string name="share_location_as_description">Se quer conectar vários dispositivos a uma conta no Telegram, é necessário usar um dispositivo diferente para partilhar a sua localização.</string>
|
||||||
<string name="last_updated_location">Última localização atualizada:</string>
|
<string name="last_updated_location">Última localização atualizada:</string>
|
||||||
<string name="successfully_sent_and_updated">Enviado e atualizado com sucesso</string>
|
<string name="successfully_sent_and_updated">Enviado e atualizado com sucesso</string>
|
||||||
<string name="not_possible_to_send_to_telegram_chats">Não é possível enviar para bate-papo do Telegram:</string>
|
<string name="not_possible_to_send_to_telegram_chats">Não é possível enviar para bate-papo do Telegram:</string>
|
||||||
<string name="waiting_for_response_from_telegram">Aguardando resposta do Telegram</string>
|
<string name="waiting_for_response_from_telegram">A aguardar a resposta do Telegram</string>
|
||||||
<string name="sending_location_messages">enviando localização</string>
|
<string name="sending_location_messages">A enviar a localização</string>
|
||||||
<string name="initializing">Iniciando</string>
|
<string name="initializing">A iniciar</string>
|
||||||
<string name="searching_for_gps">Posicionando…</string>
|
<string name="searching_for_gps">A posicionar…</string>
|
||||||
<string name="connecting_to_the_internet">Conectando-se à Internet</string>
|
<string name="connecting_to_the_internet">Conectando-se à Internet</string>
|
||||||
<string name="background_work_description">Altere as configurações de otimização da bateria para estabilizar o compartilhamento de local.</string>
|
<string name="background_work_description">Altere as configurações de otimização da bateria para estabilizar a partilha da localização.</string>
|
||||||
<string name="background_work">Funcionamento em segundo plano</string>
|
<string name="background_work">Funcionamento em segundo plano</string>
|
||||||
<string name="battery_optimization_description">Desative a otimização da bateria do OsmAnd Tracker para que ele não seja desligado repentinamente quando estiver em segundo plano.</string>
|
<string name="battery_optimization_description">Desative a otimização da bateria do OsmAnd Tracker para que ele não seja desligado repentinamente quando estiver em segundo plano.</string>
|
||||||
<string name="sharing_in_background">Compartilhando em segundo plano</string>
|
<string name="sharing_in_background">Partilha em segundo plano</string>
|
||||||
<string name="go_to_settings">Vá para as configurações</string>
|
<string name="go_to_settings">Ir às configurações</string>
|
||||||
<string name="not_sent_yet">Ainda não enviado</string>
|
<string name="not_sent_yet">Ainda não enviado</string>
|
||||||
<string name="not_found_yet">Ainda não encontrado</string>
|
<string name="not_found_yet">Ainda não encontrado</string>
|
||||||
<string name="re_send_location">Reenvie o local</string>
|
<string name="re_send_location">Reenvie o local</string>
|
||||||
<string name="last_available_location">Última localização disponível</string>
|
<string name="last_available_location">Última localização disponível</string>
|
||||||
<string name="sharing_status">Estado de compartilhamento</string>
|
<string name="sharing_status">Estado da partilha</string>
|
||||||
<string name="location_sharing_status">Compartilhamento: %1$s</string>
|
<string name="location_sharing_status">Partilha: %1$s</string>
|
||||||
<string name="shared_string_enabled">Ativado</string>
|
<string name="shared_string_enabled">Ativado</string>
|
||||||
<string name="no_gps_connection">Sem conexão GPS</string>
|
<string name="no_gps_connection">Sem conexão GPS</string>
|
||||||
<string name="no_internet_connection">Sem conexão com a internet</string>
|
<string name="no_internet_connection">Sem ligação à Internet</string>
|
||||||
<string name="shared_string_disable">Desativar</string>
|
<string name="shared_string_disable">Desativar</string>
|
||||||
<string name="shared_string_save">Gravar</string>
|
<string name="shared_string_save">Gravar</string>
|
||||||
<string name="add_device">Adicionar aparelho</string>
|
<string name="add_device">Adicionar dispositivo</string>
|
||||||
<string name="share_location_as">Compartilhar localização como</string>
|
<string name="share_location_as">Partilhar localização como</string>
|
||||||
<string name="live_now_description">Contatos e grupos compartilhando o local consigo.</string>
|
<string name="live_now_description">Contactos e grupos partilhando a localização consigo.</string>
|
||||||
<string name="logout_from_osmand_telegram_descr">Tem certeza de que deseja sair do OsmAnd Tracker para que não possa compartilhar o local ou ver a localização de outras pessoas\?</string>
|
<string name="logout_from_osmand_telegram_descr">Tem a certeza de que quer sair do OsmAnd Tracker para que não possa partilhar a localização ou ver a localização de outras pessoas\?</string>
|
||||||
<string name="logout_from_osmand_telegram">Sair do OsmAnd Tracker\?</string>
|
<string name="logout_from_osmand_telegram">Sair do OsmAnd Tracker\?</string>
|
||||||
<string name="shared_string_name">Nome</string>
|
<string name="shared_string_name">Nome</string>
|
||||||
<string name="by_distance">Pela distância</string>
|
<string name="by_distance">Pela distância</string>
|
||||||
<string name="by_name">Por nome</string>
|
<string name="by_name">Por nome</string>
|
||||||
<string name="by_group">Por grupo</string>
|
<string name="by_group">Por grupo</string>
|
||||||
<string name="shared_string_sort">Ordenar</string>
|
<string name="shared_string_sort">Ordenar</string>
|
||||||
<string name="choose_osmand_desc">Selecione a versão OsmAnd, onde os contatos serão exibidos no mapa.</string>
|
<string name="choose_osmand_desc">Selecione a versão OsmAnd onde os contactos serão mostrados no mapa.</string>
|
||||||
<string name="choose_osmand">Selecione a versão do OsmAnd para usar</string>
|
<string name="choose_osmand">Selecione a versão do OsmAnd para usar</string>
|
||||||
<string name="disable_all_sharing_desc">Desativa o compartilhamento de local para todos os bate-papos selecionados (%1$d).</string>
|
<string name="disable_all_sharing_desc">Desativa a partilha da localização para todos os bate-papos selecionados (%1$d).</string>
|
||||||
<string name="disable_all_sharing">Desativar todo o compartilhamento</string>
|
<string name="disable_all_sharing">Desativar todas as partilhas</string>
|
||||||
<string name="turn_off_all">Desligue todos</string>
|
<string name="turn_off_all">Desligue todos</string>
|
||||||
<string name="shared_string_exit">Sair</string>
|
<string name="shared_string_exit">Sair</string>
|
||||||
<string name="time_ago">atrás</string>
|
<string name="time_ago">atrás</string>
|
||||||
|
@ -136,34 +136,34 @@
|
||||||
<string name="shared_string_group">Grupo</string>
|
<string name="shared_string_group">Grupo</string>
|
||||||
<string name="logout_no_internet_msg">Conecte-se à Internet para efetuar a saída do Telegram corretamente.</string>
|
<string name="logout_no_internet_msg">Conecte-se à Internet para efetuar a saída do Telegram corretamente.</string>
|
||||||
<string name="shared_string_close">Fechar</string>
|
<string name="shared_string_close">Fechar</string>
|
||||||
<string name="disconnect_from_telegram_desc">Para revogar o acesso ao compartilhamento de local. Abra o Telegram, vá para Configurações → Privacidade e Segurança → Sessões e termine a sessão do OsmAnd Tracker.</string>
|
<string name="disconnect_from_telegram_desc">Para revogar o acesso à partilha da localização. Abra o Telegram, vá para Configurações → Privacidade e Segurança → Sessões e termine a sessão do OsmAnd Tracker.</string>
|
||||||
<string name="disconnect_from_telegram">Como desativar o OsmAnd Tracker para Telegram</string>
|
<string name="disconnect_from_telegram">Como desativar o OsmAnd Tracker para Telegram</string>
|
||||||
<string name="logout_help_desc">Como desativar o OsmAnd Tracker para Telegram</string>
|
<string name="logout_help_desc">Como desativar o OsmAnd Tracker para Telegram</string>
|
||||||
<string name="connected_account">Conta conectada</string>
|
<string name="connected_account">Conta conectada</string>
|
||||||
<string name="shared_string_account">Conta</string>
|
<string name="shared_string_account">Conta</string>
|
||||||
<string name="in_time">no %1$s</string>
|
<string name="in_time">no %1$s</string>
|
||||||
<string name="osmand_connect_desc">Escolha a versão OsmAnd que OsmAnd Tracker usa para exibir posições.</string>
|
<string name="osmand_connect_desc">Escolha a versão OsmAnd que OsmAnd Tracker usa para mostrar posições.</string>
|
||||||
<string name="osmand_connect">Conectar OsmAnd</string>
|
<string name="osmand_connect">Conectar OsmAnd</string>
|
||||||
<string name="location_history_desc">Ocultar contactos que não foram movidos num determinado momento.</string>
|
<string name="location_history_desc">Ocultar contactos que não foram movidos num determinado momento.</string>
|
||||||
<string name="location_history">Histórico de localização</string>
|
<string name="location_history">Histórico de localização</string>
|
||||||
<string name="stale_location_desc">A última vez que um contato foi movido.</string>
|
<string name="stale_location_desc">A última vez que um contacto foi movido.</string>
|
||||||
<string name="stale_location">Parado</string>
|
<string name="stale_location">Parado</string>
|
||||||
<string name="send_my_location_desc">Defina o intervalo mínimo para o compartilhamento de local.</string>
|
<string name="send_my_location_desc">Defina o intervalo mínimo para a partilha da localização.</string>
|
||||||
<string name="send_my_location">Enviar minha localização</string>
|
<string name="send_my_location">Enviar a minha localização</string>
|
||||||
<string name="gps_and_location">Posição</string>
|
<string name="gps_and_location">Posição</string>
|
||||||
<string name="sharing_time">Tempo de compartilhamento</string>
|
<string name="sharing_time">Tempo de partilha</string>
|
||||||
<string name="expire_at">Expira</string>
|
<string name="expire_at">Expira</string>
|
||||||
<string name="stop_sharing_all">O compartilhamento está ativado (desativado)</string>
|
<string name="stop_sharing_all">A partilha está ativada (desativar)</string>
|
||||||
<string name="turn_off_location_sharing">Desativar o compartilhamento de local</string>
|
<string name="turn_off_location_sharing">Desativar a partilha da localização</string>
|
||||||
<string name="open_osmand">Abrir OsmAnd</string>
|
<string name="open_osmand">Abrir OsmAnd</string>
|
||||||
<string name="shared_string_live">Vivo</string>
|
<string name="shared_string_live">Tempo real</string>
|
||||||
<string name="shared_string_bot">Robô</string>
|
<string name="shared_string_bot">Robô</string>
|
||||||
<string name="get_telegram_title">Registro no Telegram</string>
|
<string name="get_telegram_title">Registo no Telegram</string>
|
||||||
<string name="get_telegram_account_first">Precisa de uma conta do Telegram para usar o compartilhamento de local.</string>
|
<string name="get_telegram_account_first">Precisa de uma conta do Telegram para usar a partilha de localização.</string>
|
||||||
<string name="get_telegram_description_continue">Por favor, instale o Telegram e configure uma conta.</string>
|
<string name="get_telegram_description_continue">Por favor, instale o Telegram e configure uma conta.</string>
|
||||||
<string name="get_telegram_after_creating_account">Então pode usar esta app.</string>
|
<string name="get_telegram_after_creating_account">Depois pode usar esta aplicação.</string>
|
||||||
<string name="shared_string_all">Todos</string>
|
<string name="shared_string_all">Tudo</string>
|
||||||
<string name="shared_string_off">Desligado</string>
|
<string name="shared_string_off">Desativado</string>
|
||||||
<string name="already_registered_in_telegram">Precisa de uma conta e número de telefone registados no Telegram</string>
|
<string name="already_registered_in_telegram">Precisa de uma conta e número de telefone registados no Telegram</string>
|
||||||
<string name="do_not_have_telegram">Não tenho uma conta do Telegram</string>
|
<string name="do_not_have_telegram">Não tenho uma conta do Telegram</string>
|
||||||
<string name="enter_phone_number">Digite o número de telefone</string>
|
<string name="enter_phone_number">Digite o número de telefone</string>
|
||||||
|
@ -173,42 +173,42 @@
|
||||||
<string name="minutes_format">%1$d m</string>
|
<string name="minutes_format">%1$d m</string>
|
||||||
<string name="hours_format">%1$d h</string>
|
<string name="hours_format">%1$d h</string>
|
||||||
<string name="shared_string_install">Instalar</string>
|
<string name="shared_string_install">Instalar</string>
|
||||||
<string name="shared_string_share">Compartilhar</string>
|
<string name="shared_string_share">Partilhar</string>
|
||||||
<string name="shared_string_back">Voltar</string>
|
<string name="shared_string_back">Voltar</string>
|
||||||
<string name="visible_time_for_all">Hora visível para todos</string>
|
<string name="visible_time_for_all">Hora visível para todos</string>
|
||||||
<string name="set_time_description">Defina a hora em que seus contatos e grupos selecionados verão sua localização em tempo real.</string>
|
<string name="set_time_description">Defina a hora em que os seus contactos e grupos selecionados verão a sua localização em tempo real.</string>
|
||||||
<string name="set_time">Definir tempo</string>
|
<string name="set_time">Definir hora</string>
|
||||||
<string name="location_sharing_description">Selecione os contactos e grupos com os quais deseja compartilhar sua localização.</string>
|
<string name="location_sharing_description">Selecione os contactos e grupos com os quais deseja partilhar a sua localização.</string>
|
||||||
<string name="my_location_search_hint">Pesquisa: Grupo ou contato</string>
|
<string name="my_location_search_hint">Pesquisa: grupo ou contacto</string>
|
||||||
<string name="start_location_sharing">Compartilhar localização</string>
|
<string name="start_location_sharing">Partilhar localização</string>
|
||||||
<string name="show_on_map">Mostrar no mapa</string>
|
<string name="show_on_map">Mostrar no mapa</string>
|
||||||
<string name="app_name">OsmAnd Online GPS Tracker</string>
|
<string name="app_name">OsmAnd Online GPS Tracker</string>
|
||||||
<string name="phone_number_title">Número de telefone</string>
|
<string name="phone_number_title">Número de telefone</string>
|
||||||
<string name="phone_number_descr">Número de telefone no formato internacional</string>
|
<string name="phone_number_descr">Número de telefone no formato internacional</string>
|
||||||
<string name="shared_string_password">Palavra-passe</string>
|
<string name="shared_string_password">Palavra-passe</string>
|
||||||
<string name="enter_code">Digite o código</string>
|
<string name="enter_code">Digite o código</string>
|
||||||
<string name="authentication_code">Código de Autenticação</string>
|
<string name="authentication_code">Código de autenticação</string>
|
||||||
<string name="authentication_code_descr">Uma faixa GPX é salva automaticamente durante a navegação.</string>
|
<string name="authentication_code_descr">O Telegram enviou-lhe um código para o OsmAnd para iniciar sessão na sua conta.</string>
|
||||||
<string name="enter_password">Digite a palavra-passe</string>
|
<string name="enter_password">Digite a palavra-passe</string>
|
||||||
<string name="password_descr">Palavra-passe do telegrama</string>
|
<string name="password_descr">Palavra-passe do Telegram</string>
|
||||||
<string name="shared_string_login">Entrar</string>
|
<string name="shared_string_login">Entrar</string>
|
||||||
<string name="shared_string_logout">Sair</string>
|
<string name="shared_string_logout">Sair</string>
|
||||||
<string name="initialization">Iniciando</string>
|
<string name="initialization">A iniciar</string>
|
||||||
<string name="logging_out">Saindo</string>
|
<string name="logging_out">A terminar sessão</string>
|
||||||
<string name="closing">Fechando</string>
|
<string name="closing">A fechar</string>
|
||||||
<string name="gps_network_not_enabled">Ativar \"Localização\"\?</string>
|
<string name="gps_network_not_enabled">Ativar \"Localização\"\?</string>
|
||||||
<string name="not_logged_in">você não está logado no</string>
|
<string name="not_logged_in">Não tem a sessão iniciada</string>
|
||||||
<string name="shared_string_continue">Continuar</string>
|
<string name="shared_string_continue">Continuar</string>
|
||||||
<string name="shared_string_cancel">Cancelar</string>
|
<string name="shared_string_cancel">Cancelar</string>
|
||||||
<string name="shared_string_settings">Configurações</string>
|
<string name="shared_string_settings">Configurações</string>
|
||||||
<string name="no_location_permission">A app não tem permissão para acessar os dados de localização.</string>
|
<string name="no_location_permission">A aplicação não tem permissão para aceder aos dados de localização.</string>
|
||||||
<string name="gps_not_available">Por favor, ligue \"Localização\" nas configurações do sistema</string>
|
<string name="gps_not_available">Por favor, ative a \"Localização\" nas configurações do sistema</string>
|
||||||
<string name="location_service_no_gps_available">Selecione um dos provedores de localização para compartilhar sua localização.</string>
|
<string name="location_service_no_gps_available">Selecione um dos fornecedores de localização para partilhar a sua localização.</string>
|
||||||
<string name="osmand_service">Modo em segundo plano</string>
|
<string name="osmand_service">Modo em segundo plano</string>
|
||||||
<string name="osmand_service_descr">OsmAnd Tracker é executado em segundo plano com o ecrã desligado.</string>
|
<string name="osmand_service_descr">O OsmAnd Tracker é executado em segundo plano com o ecrã desligado.</string>
|
||||||
<string name="shared_string_distance">Distância</string>
|
<string name="shared_string_distance">Distância</string>
|
||||||
<string name="share_location">Compartilhar localização</string>
|
<string name="share_location">Partilhar localização</string>
|
||||||
<string name="sharing_location">Compartilhando localização</string>
|
<string name="sharing_location">A partilhar a localização</string>
|
||||||
<string name="process_service">Serviço OsmAnd Tracker</string>
|
<string name="process_service">Serviço OsmAnd Tracker</string>
|
||||||
<string name="osmand_logo">Logotipo do OsmAnd</string>
|
<string name="osmand_logo">Logotipo do OsmAnd</string>
|
||||||
<string name="install_osmand_dialog_message">Precisa instalar a versão gratuita ou paga do OsmAnd primeiro</string>
|
<string name="install_osmand_dialog_message">Precisa instalar a versão gratuita ou paga do OsmAnd primeiro</string>
|
||||||
|
@ -235,7 +235,7 @@
|
||||||
<string name="si_m_s">Metros por segundo</string>
|
<string name="si_m_s">Metros por segundo</string>
|
||||||
<string name="si_min_km">Minutos por quilómetro</string>
|
<string name="si_min_km">Minutos por quilómetro</string>
|
||||||
<string name="si_min_m">Minutos por milha</string>
|
<string name="si_min_m">Minutos por milha</string>
|
||||||
<string name="si_nm_h">Milhas náuticas por hora (nó)</string>
|
<string name="si_nm_h">Milhas náuticas por hora (nós)</string>
|
||||||
<string name="si_mi_feet">Milhas/pés</string>
|
<string name="si_mi_feet">Milhas/pés</string>
|
||||||
<string name="si_mi_yard">Milhas/jardas</string>
|
<string name="si_mi_yard">Milhas/jardas</string>
|
||||||
<string name="si_km_m">Quilómetros/metros</string>
|
<string name="si_km_m">Quilómetros/metros</string>
|
||||||
|
@ -244,8 +244,8 @@
|
||||||
<string name="shared_string_hour_short">h</string>
|
<string name="shared_string_hour_short">h</string>
|
||||||
<string name="shared_string_minute_short">min</string>
|
<string name="shared_string_minute_short">min</string>
|
||||||
<string name="shared_string_second_short">seg</string>
|
<string name="shared_string_second_short">seg</string>
|
||||||
<string name="welcome_descr"><b>OsmAnd Tracker</b> permite que partilhe a sua localização e veja a dos outros no OsmAnd.<br/> <br/>O app usa a API Telegram e precisa de uma conta do Telegram.</string>
|
<string name="welcome_descr"><b>OsmAnd Tracker</b> permite que partilhe a sua localização e veja a dos outros no OsmAnd.<br/> <br/>A aplicação usa a API do Telegram e é necessário ter uma conta no Telegram.</string>
|
||||||
<string name="my_location">Minha localização</string>
|
<string name="my_location">A minha posição</string>
|
||||||
<string name="live_now">Ao vivo agora</string>
|
<string name="live_now">Ao vivo agora</string>
|
||||||
<string name="timeline">Cronologia</string>
|
<string name="timeline">Cronologia</string>
|
||||||
<string name="saved_messages">Mensagens gravadas</string>
|
<string name="saved_messages">Mensagens gravadas</string>
|
||||||
|
@ -259,7 +259,7 @@
|
||||||
<string name="buffer_time_descr">Tempo máximo para armazenar pontos no buffer</string>
|
<string name="buffer_time_descr">Tempo máximo para armazenar pontos no buffer</string>
|
||||||
<string name="buffer_time">Tempo de expiração do buffer</string>
|
<string name="buffer_time">Tempo de expiração do buffer</string>
|
||||||
<string name="shared_string_suggested">Sugerido</string>
|
<string name="shared_string_suggested">Sugerido</string>
|
||||||
<string name="status_widget_title">Estado do Rastreador de OsmAnd</string>
|
<string name="status_widget_title">Estado do OsmAnd Tracker</string>
|
||||||
<string name="back_to_osmand">Voltar para OsmAnd</string>
|
<string name="back_to_osmand">Voltar para OsmAnd</string>
|
||||||
<string name="duration_ago">%1$s atrás</string>
|
<string name="duration_ago">%1$s atrás</string>
|
||||||
<string name="last_response_duration">Última resposta: %1$s atrás</string>
|
<string name="last_response_duration">Última resposta: %1$s atrás</string>
|
||||||
|
|
|
@ -1026,6 +1026,7 @@
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity android:name="net.osmand.plus.development.TestVoiceActivity" />
|
<activity android:name="net.osmand.plus.development.TestVoiceActivity" />
|
||||||
|
<activity android:name="net.osmand.plus.development.TestBackupActivity" />
|
||||||
<activity android:name="net.osmand.plus.development.LogcatActivity" />
|
<activity android:name="net.osmand.plus.development.LogcatActivity" />
|
||||||
<activity android:name="net.osmand.plus.download.DownloadActivity" android:label="" />
|
<activity android:name="net.osmand.plus.download.DownloadActivity" android:label="" />
|
||||||
|
|
||||||
|
|
151
OsmAnd/res/layout/test_backup_layout.xml
Normal file
151
OsmAnd/res/layout/test_backup_layout.xml
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?attr/activity_background_basic"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
|
android:id="@+id/appbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.Toolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/colorPrimary"
|
||||||
|
android:minHeight="?attr/actionBarSize"
|
||||||
|
android:theme="?attr/toolbar_theme">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="right"
|
||||||
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding">
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progress_bar"
|
||||||
|
android:layout_width="@dimen/card_button_progress_size"
|
||||||
|
android:layout_height="@dimen/card_button_progress_size"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</androidx.appcompat.widget.Toolbar>
|
||||||
|
|
||||||
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
|
<ScrollView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="@dimen/content_padding"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingBottom="@dimen/content_padding">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.OsmandTextFieldBoxes
|
||||||
|
android:id="@+id/edit_email_label"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:focusable="true"
|
||||||
|
android:focusableInTouchMode="true"
|
||||||
|
android:paddingBottom="@dimen/content_padding_small"
|
||||||
|
app:errorColor="@color/color_invalid"
|
||||||
|
app:hasClearButton="true"
|
||||||
|
app:labelText="Email"
|
||||||
|
app:primaryColor="@color/active_color_primary_dark"
|
||||||
|
app:secondaryColor="?android:textColorSecondary">
|
||||||
|
|
||||||
|
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
|
||||||
|
android:id="@+id/edit_email"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:imeOptions="actionNext"
|
||||||
|
android:inputType="textEmailAddress"
|
||||||
|
android:maxLines="1"
|
||||||
|
tools:text="test@test.com" />
|
||||||
|
|
||||||
|
</net.osmand.plus.widgets.OsmandTextFieldBoxes>
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/btn_register"
|
||||||
|
layout="@layout/bottom_sheet_dialog_button"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/dialog_button_height" />
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.OsmandTextFieldBoxes
|
||||||
|
android:id="@+id/edit_token_label"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:focusable="true"
|
||||||
|
android:focusableInTouchMode="true"
|
||||||
|
android:paddingTop="@dimen/content_padding_small"
|
||||||
|
android:paddingBottom="@dimen/content_padding_small"
|
||||||
|
app:errorColor="@color/color_invalid"
|
||||||
|
app:hasClearButton="true"
|
||||||
|
app:labelText="Token"
|
||||||
|
app:primaryColor="@color/active_color_primary_dark"
|
||||||
|
app:secondaryColor="?android:textColorSecondary">
|
||||||
|
|
||||||
|
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
|
||||||
|
android:id="@+id/edit_token"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:imeOptions="actionNext"
|
||||||
|
android:inputType="numberDecimal"
|
||||||
|
android:maxLines="1"
|
||||||
|
tools:text="123456" />
|
||||||
|
|
||||||
|
</net.osmand.plus.widgets.OsmandTextFieldBoxes>
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/btn_verify"
|
||||||
|
layout="@layout/bottom_sheet_dialog_button"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/dialog_button_height" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/content_padding"
|
||||||
|
android:text="Actions"
|
||||||
|
android:textColor="?android:textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_list_text_size" />
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/btn_backup"
|
||||||
|
layout="@layout/bottom_sheet_dialog_button"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/dialog_button_height"
|
||||||
|
android:layout_marginTop="@dimen/content_padding_half" />
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/btn_restore"
|
||||||
|
layout="@layout/bottom_sheet_dialog_button"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/dialog_button_height"
|
||||||
|
android:layout_marginTop="@dimen/content_padding_half" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/text_info"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/content_padding"
|
||||||
|
android:textColor="?android:textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
tools:text="Last backup time: 2021-04-01 10:10:00\nModified files: 3" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -998,7 +998,7 @@
|
||||||
<string name="get_directions">التوجيه مع الطرق</string>
|
<string name="get_directions">التوجيه مع الطرق</string>
|
||||||
<string name="show_point_options">استخدام الموقع…</string>
|
<string name="show_point_options">استخدام الموقع…</string>
|
||||||
<string name="favorite">مفضلة</string>
|
<string name="favorite">مفضلة</string>
|
||||||
<string name="speak_favorites">نقاط مفضلة مجاورة</string>
|
<string name="speak_favorites">مفضلة مجاورة</string>
|
||||||
<string name="save_as_favorites_points">حفظ كمجموعة مفضلة</string>
|
<string name="save_as_favorites_points">حفظ كمجموعة مفضلة</string>
|
||||||
<string name="add_favorite_dialog_top_text">أدخل اسم المفضلة</string>
|
<string name="add_favorite_dialog_top_text">أدخل اسم المفضلة</string>
|
||||||
<string name="add_favorite_dialog_favourite_added_template">تم إضافة إحداثية المفضلة \'\'{0}\'\' بنجاح.</string>
|
<string name="add_favorite_dialog_favourite_added_template">تم إضافة إحداثية المفضلة \'\'{0}\'\' بنجاح.</string>
|
||||||
|
@ -4075,7 +4075,7 @@
|
||||||
<string name="activity_type_car_name">سيارة</string>
|
<string name="activity_type_car_name">سيارة</string>
|
||||||
<string name="copy_poi_name">نسخ اسم POI</string>
|
<string name="copy_poi_name">نسخ اسم POI</string>
|
||||||
<string name="select_another_colorization">الرجاء اختيار أنواع أخرى من التلوين.</string>
|
<string name="select_another_colorization">الرجاء اختيار أنواع أخرى من التلوين.</string>
|
||||||
<string name="snap_to_road_descr">سيتم التقاط الرمز إلى مسار التنقل الحالي</string>
|
<string name="snap_to_road_descr">سيتم القاط أيقونة المكان الحالي إلى مسار التنقل الحالي</string>
|
||||||
<string name="select_segments">حدد الجزء</string>
|
<string name="select_segments">حدد الجزء</string>
|
||||||
<string name="select_segments_description">%1$s يحتوي على أكثر من مقطع ، تحتاج إلى تحديد الجزء المطلوب للتنقل.</string>
|
<string name="select_segments_description">%1$s يحتوي على أكثر من مقطع ، تحتاج إلى تحديد الجزء المطلوب للتنقل.</string>
|
||||||
<string name="segments_count">الجزء %1$d</string>
|
<string name="segments_count">الجزء %1$d</string>
|
||||||
|
@ -4094,7 +4094,7 @@
|
||||||
<string name="on_pause">عند الإيقاف المؤقت</string>
|
<string name="on_pause">عند الإيقاف المؤقت</string>
|
||||||
<string name="app_restart_required">يلزم إعادة تشغيل التطبيق لتطبيق بعض الإعدادات.</string>
|
<string name="app_restart_required">يلزم إعادة تشغيل التطبيق لتطبيق بعض الإعدادات.</string>
|
||||||
<string name="routing_attr_height_obstacles_description">التوجيه يمكن أن يتجنب المرتفعات القوية.</string>
|
<string name="routing_attr_height_obstacles_description">التوجيه يمكن أن يتجنب المرتفعات القوية.</string>
|
||||||
<string name="quick_action_coordinates_widget_descr">تبديل لإظهار أو إخفاء أداة الإحداثيات على الخريطة.</string>
|
<string name="quick_action_coordinates_widget_descr">مقبس لإظهار أو إخفاء أداة الإحداثيات على الخريطة.</string>
|
||||||
<string name="map_widget_distance_by_tap">المسافة عن طريق الضغط</string>
|
<string name="map_widget_distance_by_tap">المسافة عن طريق الضغط</string>
|
||||||
<string name="latest_openstreetmap_update">آخر تحديث خريطة الشارع المفتوح المتاحة:</string>
|
<string name="latest_openstreetmap_update">آخر تحديث خريطة الشارع المفتوح المتاحة:</string>
|
||||||
<string name="updated">تحديث: %s</string>
|
<string name="updated">تحديث: %s</string>
|
||||||
|
@ -4153,6 +4153,5 @@
|
||||||
<string name="exit_number">رقم الخروج</string>
|
<string name="exit_number">رقم الخروج</string>
|
||||||
<string name="announce_when_exceeded">الإعلان عند التجاوز</string>
|
<string name="announce_when_exceeded">الإعلان عند التجاوز</string>
|
||||||
<string name="user_points">نقاط المستخدم</string>
|
<string name="user_points">نقاط المستخدم</string>
|
||||||
<string name="output">المخرج</string>
|
<string name="output">الإخراج</string>
|
||||||
<string name="map_quick_action_pattern">%1$s ← …</string>
|
|
||||||
</resources>
|
</resources>
|
|
@ -4089,5 +4089,4 @@
|
||||||
<string name="announce_when_exceeded">Meldung bei Überschreitung</string>
|
<string name="announce_when_exceeded">Meldung bei Überschreitung</string>
|
||||||
<string name="user_points">Anwenderpunkte</string>
|
<string name="user_points">Anwenderpunkte</string>
|
||||||
<string name="output">Leistung</string>
|
<string name="output">Leistung</string>
|
||||||
<string name="map_quick_action_pattern">%1$s → …</string>
|
|
||||||
</resources>
|
</resources>
|
|
@ -1526,7 +1526,7 @@
|
||||||
<string name="error_doing_search">Okazis eraro dum malkonekta serĉado.</string>
|
<string name="error_doing_search">Okazis eraro dum malkonekta serĉado.</string>
|
||||||
<string name="search_osm_offline">Serĉi per pozici-trova servo</string>
|
<string name="search_osm_offline">Serĉi per pozici-trova servo</string>
|
||||||
<string name="preferred_locale_descr">Elekti lingvon de fasado (post ŝanĝi necesas restarti la aplikaĵon).</string>
|
<string name="preferred_locale_descr">Elekti lingvon de fasado (post ŝanĝi necesas restarti la aplikaĵon).</string>
|
||||||
<string name="unit_of_length">Unuoj de longo</string>
|
<string name="unit_of_length">Mezurunuoj de longo</string>
|
||||||
<string name="unit_of_length_descr">Ŝanĝi unuojn por reprezenti distancoj.</string>
|
<string name="unit_of_length_descr">Ŝanĝi unuojn por reprezenti distancoj.</string>
|
||||||
<string name="si_mi_feet">Mejloj/futoj</string>
|
<string name="si_mi_feet">Mejloj/futoj</string>
|
||||||
<string name="si_mi_yard">Mejloj/jardoj</string>
|
<string name="si_mi_yard">Mejloj/jardoj</string>
|
||||||
|
@ -3137,7 +3137,7 @@
|
||||||
<string name="turn_screen_on_info">Montri mapon sur la ŝlos‑ekrano dum navigado.</string>
|
<string name="turn_screen_on_info">Montri mapon sur la ŝlos‑ekrano dum navigado.</string>
|
||||||
<string name="route_parameters_info">Agordoj pri kurs‑difinado por la elektita profilo: “%1$s”.</string>
|
<string name="route_parameters_info">Agordoj pri kurs‑difinado por la elektita profilo: “%1$s”.</string>
|
||||||
<string name="wake_time">Aktiveca periodo de ekrano</string>
|
<string name="wake_time">Aktiveca periodo de ekrano</string>
|
||||||
<string name="units_and_formats">Unuoj kaj formoj</string>
|
<string name="units_and_formats">Mezurunuoj & formoj</string>
|
||||||
<string name="map_look_descr">Alĝustigi mapon</string>
|
<string name="map_look_descr">Alĝustigi mapon</string>
|
||||||
<string name="map_look">Map‑aspekto</string>
|
<string name="map_look">Map‑aspekto</string>
|
||||||
<string name="list_of_installed_plugins">Instalitaj kromprogramoj</string>
|
<string name="list_of_installed_plugins">Instalitaj kromprogramoj</string>
|
||||||
|
@ -4085,5 +4085,4 @@
|
||||||
<string name="exit_number">Numero de elirejo</string>
|
<string name="exit_number">Numero de elirejo</string>
|
||||||
<string name="user_points">Poentoj de uzanto</string>
|
<string name="user_points">Poentoj de uzanto</string>
|
||||||
<string name="output">Eligo</string>
|
<string name="output">Eligo</string>
|
||||||
<string name="map_quick_action_pattern">%1$s → …</string>
|
|
||||||
</resources>
|
</resources>
|
|
@ -3924,4 +3924,6 @@
|
||||||
<string name="poi_jiu_jitsu">Jiu-jitsu</string>
|
<string name="poi_jiu_jitsu">Jiu-jitsu</string>
|
||||||
<string name="poi_karate">Kárate</string>
|
<string name="poi_karate">Kárate</string>
|
||||||
<string name="poi_hoops">Aros</string>
|
<string name="poi_hoops">Aros</string>
|
||||||
|
<string name="poi_office_diplomatic">Oficina diplomática</string>
|
||||||
|
<string name="poi_bay_filter">Tipo de bahía</string>
|
||||||
</resources>
|
</resources>
|
|
@ -4087,5 +4087,4 @@
|
||||||
<string name="announce_when_exceeded">Anunciar al excederse</string>
|
<string name="announce_when_exceeded">Anunciar al excederse</string>
|
||||||
<string name="user_points">Puntos de usuario</string>
|
<string name="user_points">Puntos de usuario</string>
|
||||||
<string name="output">Salida</string>
|
<string name="output">Salida</string>
|
||||||
<string name="map_quick_action_pattern">%1$s → …</string>
|
|
||||||
</resources>
|
</resources>
|
|
@ -1294,7 +1294,7 @@
|
||||||
<string name="download_additional_maps">¿Descargar los %1$s mapas que faltan (%2$d MB)?</string>
|
<string name="download_additional_maps">¿Descargar los %1$s mapas que faltan (%2$d MB)?</string>
|
||||||
<string name="shared_string_waypoints">Puntos de referencia</string>
|
<string name="shared_string_waypoints">Puntos de referencia</string>
|
||||||
<string name="way_alarms">Advertencias de tráfico</string>
|
<string name="way_alarms">Advertencias de tráfico</string>
|
||||||
<string name="speak_favorites">Favoritos cerca</string>
|
<string name="speak_favorites">Favoritos cercanos</string>
|
||||||
<string name="speak_poi">PDI cercanos</string>
|
<string name="speak_poi">PDI cercanos</string>
|
||||||
<string name="shared_string_all">Todos</string>
|
<string name="shared_string_all">Todos</string>
|
||||||
<string name="index_tours">Excursiones</string>
|
<string name="index_tours">Excursiones</string>
|
||||||
|
@ -1988,7 +1988,7 @@
|
||||||
<string name="update_all_maps_now">¿Actualizar todos los mapas ahora?</string>
|
<string name="update_all_maps_now">¿Actualizar todos los mapas ahora?</string>
|
||||||
<string name="clear_tile_data">Limpiar todas las teselas</string>
|
<string name="clear_tile_data">Limpiar todas las teselas</string>
|
||||||
<string name="routing_attr_short_way_name">Ruta de bajo consumo (corta)</string>
|
<string name="routing_attr_short_way_name">Ruta de bajo consumo (corta)</string>
|
||||||
<string name="replace_favorite_confirmation">¿Reemplazar el Favorito «%1$s»?</string>
|
<string name="replace_favorite_confirmation">¿Seguro que quieres reemplazar el favorito «%1$s»\?</string>
|
||||||
<string name="rendering_attr_hideOverground_name">Objetos en superficie</string>
|
<string name="rendering_attr_hideOverground_name">Objetos en superficie</string>
|
||||||
<string name="shared_string_change">Cambiar</string>
|
<string name="shared_string_change">Cambiar</string>
|
||||||
<string name="get_started">Empezar</string>
|
<string name="get_started">Empezar</string>
|
||||||
|
@ -2000,12 +2000,12 @@
|
||||||
<string name="location_not_found">Ubicación no encontrada</string>
|
<string name="location_not_found">Ubicación no encontrada</string>
|
||||||
<string name="no_inet_connection">Sin conexión a Internet</string>
|
<string name="no_inet_connection">Sin conexión a Internet</string>
|
||||||
<string name="no_inet_connection_desc_map">Necesario para descargar mapas.</string>
|
<string name="no_inet_connection_desc_map">Necesario para descargar mapas.</string>
|
||||||
<string name="search_location">Buscando la ubicación…</string>
|
<string name="search_location">Buscando ubicación…</string>
|
||||||
<string name="storage_free_space">Espacio libre</string>
|
<string name="storage_free_space">Espacio libre</string>
|
||||||
<string name="storage_place_description">Almacenamiento de datos de OsmAnd (para mapas, trazas, etc.): %1$s.</string>
|
<string name="storage_place_description">Almacenamiento de datos de OsmAnd (para mapas, trazas, etc.): %1$s.</string>
|
||||||
<string name="give_permission">Conceder permiso</string>
|
<string name="give_permission">Conceder permiso</string>
|
||||||
<string name="allow_access_location">Permitir el acceso a la ubicación</string>
|
<string name="allow_access_location">Permitir el acceso a la ubicación</string>
|
||||||
<string name="first_usage_greeting">Obtén direcciones y descubre sitios nuevos sin una conexión a Internet</string>
|
<string name="first_usage_greeting">Obtén indicaciones y descubre lugares nuevos sin conexión a Internet</string>
|
||||||
<string name="search_my_location">Encontrar mi ubicación</string>
|
<string name="search_my_location">Encontrar mi ubicación</string>
|
||||||
<string name="osm_live_payment_desc">La suscripción se cobra por el período elegido. Puedes cancelarlo en cualquier momento en Google Play.</string>
|
<string name="osm_live_payment_desc">La suscripción se cobra por el período elegido. Puedes cancelarlo en cualquier momento en Google Play.</string>
|
||||||
<string name="donation_to_osm">Donaciones a la comunidad de OSM</string>
|
<string name="donation_to_osm">Donaciones a la comunidad de OSM</string>
|
||||||
|
@ -2066,7 +2066,7 @@
|
||||||
<string name="save_filter">Guardar filtro</string>
|
<string name="save_filter">Guardar filtro</string>
|
||||||
<string name="delete_filter">Borrar filtro</string>
|
<string name="delete_filter">Borrar filtro</string>
|
||||||
<string name="new_filter">Nuevo filtro</string>
|
<string name="new_filter">Nuevo filtro</string>
|
||||||
<string name="new_filter_desc">Ingresa el nombre del nuevo filtro, que se añadirá en tu pestaña «Categorías».</string>
|
<string name="new_filter_desc">Escribe el nombre del nuevo filtro, que se añadirá en tu pestaña «Categorías».</string>
|
||||||
<string name="rendering_value_fine_name">Muy fino</string>
|
<string name="rendering_value_fine_name">Muy fino</string>
|
||||||
<string name="lang_sr_latn">Serbio (latino)</string>
|
<string name="lang_sr_latn">Serbio (latino)</string>
|
||||||
<string name="lang_zh_hk">Chino (Hong Kong)</string>
|
<string name="lang_zh_hk">Chino (Hong Kong)</string>
|
||||||
|
@ -2385,12 +2385,12 @@
|
||||||
<string name="restart_search">Reiniciar búsqueda</string>
|
<string name="restart_search">Reiniciar búsqueda</string>
|
||||||
<string name="increase_search_radius">Aumentar radio de búsqueda</string>
|
<string name="increase_search_radius">Aumentar radio de búsqueda</string>
|
||||||
<string name="nothing_found">Nada encontrado</string>
|
<string name="nothing_found">Nada encontrado</string>
|
||||||
<string name="nothing_found_descr">Cambiar la búsqueda o aumentar su radio.</string>
|
<string name="nothing_found_descr">Cambia la búsqueda o aumenta su radio.</string>
|
||||||
<string name="hillshade_menu_download_descr">Descarga la capa superpuesta del mapa «Sombreado» para mostrar el sombreado vertical.</string>
|
<string name="hillshade_menu_download_descr">Descarga la capa superpuesta del mapa «Sombreado» para mostrar el sombreado vertical.</string>
|
||||||
<string name="hillshade_purchase_header">Instala el complemento «Curvas de nivel» para mostrar las áreas verticales graduadas.</string>
|
<string name="hillshade_purchase_header">Instala el complemento «Curvas de nivel» para mostrar las áreas verticales graduadas.</string>
|
||||||
<string name="private_access_routing_req">El destino se ubica en un área de acceso privado. ¿Permitir el uso de caminos privados para este viaje\?</string>
|
<string name="private_access_routing_req">El destino se ubica en un área de acceso privado. ¿Permitir el uso de caminos privados para este viaje\?</string>
|
||||||
<string name="mapillary_widget">Widget de Mapillary</string>
|
<string name="mapillary_widget">Widget de Mapillary</string>
|
||||||
<string name="mapillary_descr">Fotos a nivel de calle en línea para todos. Descubre sitios, colabora, captura el mundo.</string>
|
<string name="mapillary_descr">Fotos a nivel de calle en línea para todos. Descubre lugares, colabora, captura el mundo.</string>
|
||||||
<string name="mapillary">Mapillary</string>
|
<string name="mapillary">Mapillary</string>
|
||||||
<string name="shared_string_add_photos">Añadir fotos</string>
|
<string name="shared_string_add_photos">Añadir fotos</string>
|
||||||
<string name="mapillary_action_descr">Comparte tus imágenes a nivel de calle a través de Mapillary.</string>
|
<string name="mapillary_action_descr">Comparte tus imágenes a nivel de calle a través de Mapillary.</string>
|
||||||
|
@ -2858,7 +2858,7 @@
|
||||||
<string name="rendering_attr_surface_concrete_name">Hormigón</string>
|
<string name="rendering_attr_surface_concrete_name">Hormigón</string>
|
||||||
<string name="rendering_attr_surface_sett_name">Adoquín</string>
|
<string name="rendering_attr_surface_sett_name">Adoquín</string>
|
||||||
<string name="rendering_attr_surface_cobblestone_name">Empedrado (adoquín)</string>
|
<string name="rendering_attr_surface_cobblestone_name">Empedrado (adoquín)</string>
|
||||||
<string name="rendering_attr_surface_paving_stones_name">Pavimento intertrabado / Adoquín prefabricado</string>
|
<string name="rendering_attr_surface_paving_stones_name">Adoquinado</string>
|
||||||
<string name="rendering_attr_surface_pebblestone_name">Canto rodado</string>
|
<string name="rendering_attr_surface_pebblestone_name">Canto rodado</string>
|
||||||
<string name="rendering_attr_surface_stone_name">Piedra</string>
|
<string name="rendering_attr_surface_stone_name">Piedra</string>
|
||||||
<string name="rendering_attr_surface_metal_name">Metal</string>
|
<string name="rendering_attr_surface_metal_name">Metal</string>
|
||||||
|
@ -2875,7 +2875,7 @@
|
||||||
<string name="rendering_attr_smoothness_very_horrible_name">Muy horrible</string>
|
<string name="rendering_attr_smoothness_very_horrible_name">Muy horrible</string>
|
||||||
<string name="rendering_attr_smoothness_impassable_name">Intransitable</string>
|
<string name="rendering_attr_smoothness_impassable_name">Intransitable</string>
|
||||||
<string name="rendering_attr_highway_class_motorway_name">Autopista</string>
|
<string name="rendering_attr_highway_class_motorway_name">Autopista</string>
|
||||||
<string name="rendering_attr_highway_class_state_road_name">Carretera/ruta estatal</string>
|
<string name="rendering_attr_highway_class_state_road_name">Carretera estatal</string>
|
||||||
<string name="rendering_attr_highway_class_road_name">Carretera principal</string>
|
<string name="rendering_attr_highway_class_road_name">Carretera principal</string>
|
||||||
<string name="rendering_attr_highway_class_street_name">Calle</string>
|
<string name="rendering_attr_highway_class_street_name">Calle</string>
|
||||||
<string name="rendering_attr_highway_class_service_name">Vía de servicio</string>
|
<string name="rendering_attr_highway_class_service_name">Vía de servicio</string>
|
||||||
|
@ -2884,7 +2884,7 @@
|
||||||
<string name="rendering_attr_highway_class_bridleway_name">Camino ecuestre</string>
|
<string name="rendering_attr_highway_class_bridleway_name">Camino ecuestre</string>
|
||||||
<string name="rendering_attr_highway_class_steps_name">Escalera</string>
|
<string name="rendering_attr_highway_class_steps_name">Escalera</string>
|
||||||
<string name="rendering_attr_highway_class_path_name">Sendero</string>
|
<string name="rendering_attr_highway_class_path_name">Sendero</string>
|
||||||
<string name="rendering_attr_highway_class_cycleway_name">Ciclovía/Bicisenda</string>
|
<string name="rendering_attr_highway_class_cycleway_name">Ciclovía</string>
|
||||||
<string name="rendering_attr_undefined_name">Indefinido</string>
|
<string name="rendering_attr_undefined_name">Indefinido</string>
|
||||||
<string name="public_transport_warning_descr_blog">Lea más sobre el cálculo de las rutas de OsmAnd en nuestro blog.</string>
|
<string name="public_transport_warning_descr_blog">Lea más sobre el cálculo de las rutas de OsmAnd en nuestro blog.</string>
|
||||||
<string name="public_transport_warning_title">La navegación en transporte público se encuentra actualmente en fase de pruebas beta, se esperan errores e imprecisiones.</string>
|
<string name="public_transport_warning_title">La navegación en transporte público se encuentra actualmente en fase de pruebas beta, se esperan errores e imprecisiones.</string>
|
||||||
|
@ -2898,7 +2898,7 @@
|
||||||
<string name="routing_attr_avoid_sett_name">Sin empedrado y adoquinado</string>
|
<string name="routing_attr_avoid_sett_name">Sin empedrado y adoquinado</string>
|
||||||
<string name="routing_attr_avoid_sett_description">Evitar las calles empedradas y adoquinadas</string>
|
<string name="routing_attr_avoid_sett_description">Evitar las calles empedradas y adoquinadas</string>
|
||||||
<string name="shared_string_degrees">Grados</string>
|
<string name="shared_string_degrees">Grados</string>
|
||||||
<string name="shared_string_milliradians">Milésimas angulares</string>
|
<string name="shared_string_milliradians">Milirradianes</string>
|
||||||
<string name="angular_measeurement">Unidad angular</string>
|
<string name="angular_measeurement">Unidad angular</string>
|
||||||
<string name="angular_measeurement_descr">Cambiar el acimut en el que se mide.</string>
|
<string name="angular_measeurement_descr">Cambiar el acimut en el que se mide.</string>
|
||||||
<string name="routing_attr_avoid_tram_name">Sin tranvías</string>
|
<string name="routing_attr_avoid_tram_name">Sin tranvías</string>
|
||||||
|
@ -2927,7 +2927,7 @@
|
||||||
<string name="public_transport_calc_pedestrian">Calcular la ruta a pie</string>
|
<string name="public_transport_calc_pedestrian">Calcular la ruta a pie</string>
|
||||||
<string name="public_transport_type">Tipo de transporte</string>
|
<string name="public_transport_type">Tipo de transporte</string>
|
||||||
<string name="searching_gps">Buscando GPS</string>
|
<string name="searching_gps">Buscando GPS</string>
|
||||||
<string name="coordinates_widget">Widget de coordenadas</string>
|
<string name="coordinates_widget">Control de coordenadas</string>
|
||||||
<string name="app_mode_ufo">OVNI</string>
|
<string name="app_mode_ufo">OVNI</string>
|
||||||
<string name="release_3_4">• Perfiles de aplicación: crea un perfil personalizado según tus necesidades, con un icono y color personalizado.
|
<string name="release_3_4">• Perfiles de aplicación: crea un perfil personalizado según tus necesidades, con un icono y color personalizado.
|
||||||
\n
|
\n
|
||||||
|
@ -3414,7 +3414,7 @@
|
||||||
<string name="shared_string_profiles">Perfiles</string>
|
<string name="shared_string_profiles">Perfiles</string>
|
||||||
<string name="shared_string_quick_actions">Acciones rápidas</string>
|
<string name="shared_string_quick_actions">Acciones rápidas</string>
|
||||||
<string name="shared_string_nothing_selected">No hay nada seleccionado</string>
|
<string name="shared_string_nothing_selected">No hay nada seleccionado</string>
|
||||||
<string name="shared_string_poi_types">Tipo de PDI</string>
|
<string name="shared_string_poi_types">Tipos de PDI</string>
|
||||||
<string name="shared_string_preparing">Preparando</string>
|
<string name="shared_string_preparing">Preparando</string>
|
||||||
<string name="recalc_angle_dialog_title">Ángulo mínimo entre mi ubicación y ruta</string>
|
<string name="recalc_angle_dialog_title">Ángulo mínimo entre mi ubicación y ruta</string>
|
||||||
<string name="recalc_angle_dialog_descr">Se mostrará un segmento recto adicional entre mi ubicación y la ruta calculada hasta que se vuelva a calcular la ruta</string>
|
<string name="recalc_angle_dialog_descr">Se mostrará un segmento recto adicional entre mi ubicación y la ruta calculada hasta que se vuelva a calcular la ruta</string>
|
||||||
|
@ -3496,7 +3496,7 @@
|
||||||
<string name="navigation_profiles_item">Perfiles de navegación</string>
|
<string name="navigation_profiles_item">Perfiles de navegación</string>
|
||||||
<string name="create_edit_poi">Crear o editar PDI</string>
|
<string name="create_edit_poi">Crear o editar PDI</string>
|
||||||
<string name="add_edit_favorite">Añadir o editar favorito</string>
|
<string name="add_edit_favorite">Añadir o editar favorito</string>
|
||||||
<string name="shared_string_add_profile">Agregar perfil</string>
|
<string name="shared_string_add_profile">Añadir perfil</string>
|
||||||
<string name="lang_an">Aragonés</string>
|
<string name="lang_an">Aragonés</string>
|
||||||
<string name="custom_color">Color personalizado</string>
|
<string name="custom_color">Color personalizado</string>
|
||||||
<string name="ltr_or_rtl_combine_via_slash_with_space">%1$s / %2$s</string>
|
<string name="ltr_or_rtl_combine_via_slash_with_space">%1$s / %2$s</string>
|
||||||
|
@ -3668,8 +3668,8 @@
|
||||||
<string name="clear_tiles_warning">Al aplicar estos cambios, los datos almacenados serán borrados para este repositorio de teselas</string>
|
<string name="clear_tiles_warning">Al aplicar estos cambios, los datos almacenados serán borrados para este repositorio de teselas</string>
|
||||||
<string name="vessel_height_warning_link">Fijar la altura del navío</string>
|
<string name="vessel_height_warning_link">Fijar la altura del navío</string>
|
||||||
<string name="vessel_height_warning">Puedes establecer la altura del navío para evitar los puentes bajos. Ten en cuenta que si el puente es móvil, usaremos su altura en estado abierto.</string>
|
<string name="vessel_height_warning">Puedes establecer la altura del navío para evitar los puentes bajos. Ten en cuenta que si el puente es móvil, usaremos su altura en estado abierto.</string>
|
||||||
<string name="vessel_height_limit_description">Fija la altura del navío para evitar los puentes bajos. Ten en cuenta que si el puente es móvil, usaremos su altura en estado abierto.</string>
|
<string name="vessel_height_limit_description">Define la altura de la embarcación para evitar los puentes bajos. Ten en cuenta que si el puente es móvil, usaremos su altura en estado abierto.</string>
|
||||||
<string name="vessel_width_limit_description">Fija el ancho del navío para evitar puentes estrechos</string>
|
<string name="vessel_width_limit_description">Define el ancho de la embarcación para evitar puentes estrechos</string>
|
||||||
<string name="quick_action_showhide_mapillary_descr">Un botón que alterna la capa de Mapillary en el mapa.</string>
|
<string name="quick_action_showhide_mapillary_descr">Un botón que alterna la capa de Mapillary en el mapa.</string>
|
||||||
<string name="routing_attr_length_description">Especifica la longitud del vehículo que se permitirá en las rutas.</string>
|
<string name="routing_attr_length_description">Especifica la longitud del vehículo que se permitirá en las rutas.</string>
|
||||||
<string name="routing_attr_length_name">Límite de longitud</string>
|
<string name="routing_attr_length_name">Límite de longitud</string>
|
||||||
|
@ -3695,11 +3695,11 @@
|
||||||
<string name="access_hint_enter_address">Ingresar dirección</string>
|
<string name="access_hint_enter_address">Ingresar dirección</string>
|
||||||
<string name="shared_string_done">Hecho</string>
|
<string name="shared_string_done">Hecho</string>
|
||||||
<string name="simplified_track">Traza simplificada</string>
|
<string name="simplified_track">Traza simplificada</string>
|
||||||
<string name="simplified_track_description">Sólo se grabará la línea de la ruta, los puntos intermedios (waypoints) se borrarán.</string>
|
<string name="simplified_track_description">Sólo se grabará la línea de la ruta, los puntos intermedios se borrarán.</string>
|
||||||
<string name="shared_string_file_name">Nombre de archivo</string>
|
<string name="shared_string_file_name">Nombre de archivo</string>
|
||||||
<string name="number_of_gpx_files_selected_pattern">%s archivos de trazas marcados</string>
|
<string name="number_of_gpx_files_selected_pattern">%s archivos de trazas marcados</string>
|
||||||
<string name="monitoring_control_start">Grabar</string>
|
<string name="monitoring_control_start">Grabar</string>
|
||||||
<string name="save_global_track_interval_descr">Especifica el intervalo de grabación general para trazas (activado a través del widget de grabación en el mapa).</string>
|
<string name="save_global_track_interval_descr">Especifica el intervalo de registro para la grabación general de trazas (activado a través del control \'Grabación de viaje\' en el mapa).</string>
|
||||||
<string name="gpx_monitoring_stop">Pausar grabación del viaje</string>
|
<string name="gpx_monitoring_stop">Pausar grabación del viaje</string>
|
||||||
<string name="gpx_monitoring_start">Reanudar grabación del viaje</string>
|
<string name="gpx_monitoring_start">Reanudar grabación del viaje</string>
|
||||||
<string name="system_default_theme">Predeterminado del sistema</string>
|
<string name="system_default_theme">Predeterminado del sistema</string>
|
||||||
|
@ -3765,7 +3765,7 @@
|
||||||
<string name="follow_track">Seguir traza</string>
|
<string name="follow_track">Seguir traza</string>
|
||||||
<string name="follow_track_descr">Elige el archivo de la traza a seguir</string>
|
<string name="follow_track_descr">Elige el archivo de la traza a seguir</string>
|
||||||
<string name="import_track_descr">Elige el archivo de la traza a seguir o impórtala desde el dispositivo.</string>
|
<string name="import_track_descr">Elige el archivo de la traza a seguir o impórtala desde el dispositivo.</string>
|
||||||
<string name="select_another_track">Selecciona otra traza</string>
|
<string name="select_another_track">Seleccionar otra traza</string>
|
||||||
<string name="navigate_to_track_descr">Navegar desde mi ubicación a la traza</string>
|
<string name="navigate_to_track_descr">Navegar desde mi ubicación a la traza</string>
|
||||||
<string name="pass_whole_track_descr">Apuntar a la traza para navegar</string>
|
<string name="pass_whole_track_descr">Apuntar a la traza para navegar</string>
|
||||||
<string name="start_of_the_track">Inicio de la traza</string>
|
<string name="start_of_the_track">Inicio de la traza</string>
|
||||||
|
@ -3924,15 +3924,15 @@
|
||||||
\nPuedes leer más en: https://openplacereviews.org</string>
|
\nPuedes leer más en: https://openplacereviews.org</string>
|
||||||
<string name="open_place_reviews">OpenPlaceReviews</string>
|
<string name="open_place_reviews">OpenPlaceReviews</string>
|
||||||
<string name="online_routing_example_hint">La URL con todos los parámetros se verá así:</string>
|
<string name="online_routing_example_hint">La URL con todos los parámetros se verá así:</string>
|
||||||
<string name="online_routing_engines">Motores de navegación en línea</string>
|
<string name="online_routing_engines">Enrutadores en línea</string>
|
||||||
<string name="online_routing_engine">Motor de navegación en línea</string>
|
<string name="online_routing_engine">Enrutadores en línea</string>
|
||||||
<string name="message_server_error">Error de servidor: %1$s</string>
|
<string name="message_server_error">Error de servidor: %1$s</string>
|
||||||
<string name="message_name_is_already_exists">El nombre ya existe</string>
|
<string name="message_name_is_already_exists">El nombre ya existe</string>
|
||||||
<string name="login_open_place_reviews">Acceder a OpenPlaceReviews</string>
|
<string name="login_open_place_reviews">Acceder a OpenPlaceReviews</string>
|
||||||
<string name="keep_it_empty_if_not">Si no, mantenerlo vacío</string>
|
<string name="keep_it_empty_if_not">Mantenerlo vación si no</string>
|
||||||
<string name="hillshade_slope_contour_lines">Sombreado / Pendiente / Curvas de nivel</string>
|
<string name="hillshade_slope_contour_lines">Sombreado / Pendiente / Curvas de nivel</string>
|
||||||
<string name="edit_track">Editar traza</string>
|
<string name="edit_track">Editar traza</string>
|
||||||
<string name="edit_online_routing_engine">Editar motor de navegación en línea</string>
|
<string name="edit_online_routing_engine">Editar enrutador en linea</string>
|
||||||
<string name="delete_waypoints">Borrar puntos de referencia</string>
|
<string name="delete_waypoints">Borrar puntos de referencia</string>
|
||||||
<string name="delete_online_routing_engine">¿Borrar este motor de navegación en línea\?</string>
|
<string name="delete_online_routing_engine">¿Borrar este motor de navegación en línea\?</string>
|
||||||
<string name="copy_to_map_markers">Copiar a «Marcadores del mapa»</string>
|
<string name="copy_to_map_markers">Copiar a «Marcadores del mapa»</string>
|
||||||
|
@ -3951,7 +3951,7 @@
|
||||||
<string name="announcement_time_arrive">Has llegado al destino</string>
|
<string name="announcement_time_arrive">Has llegado al destino</string>
|
||||||
<string name="announcement_time_approach">Acercarse</string>
|
<string name="announcement_time_approach">Acercarse</string>
|
||||||
<string name="analyze_by_intervals">Analizar intervalos divididos</string>
|
<string name="analyze_by_intervals">Analizar intervalos divididos</string>
|
||||||
<string name="add_online_routing_engine">Añadir motor de navegación en línea</string>
|
<string name="add_online_routing_engine">Agregar enrutador en linea</string>
|
||||||
<string name="activity_type_winter_name">Invierno</string>
|
<string name="activity_type_winter_name">Invierno</string>
|
||||||
<string name="activity_type_water_name">Agua</string>
|
<string name="activity_type_water_name">Agua</string>
|
||||||
<string name="activity_type_walking_name">Peatón</string>
|
<string name="activity_type_walking_name">Peatón</string>
|
||||||
|
@ -3965,4 +3965,124 @@
|
||||||
<string name="activity_type_hiking_name">Senderismo</string>
|
<string name="activity_type_hiking_name">Senderismo</string>
|
||||||
<string name="activity_type_cycling_name">Bicicleta</string>
|
<string name="activity_type_cycling_name">Bicicleta</string>
|
||||||
<string name="activity_type_car_name">Automóvil</string>
|
<string name="activity_type_car_name">Automóvil</string>
|
||||||
|
<string name="shared_string_api_key">Clave API</string>
|
||||||
|
<string name="uploaded_count">Subido %1$d de %2$d</string>
|
||||||
|
<string name="rendering_attr_noNatureReserveBoundaries_name">Límites de reservas naturales</string>
|
||||||
|
<string name="map_quick_action_pattern">%1$s → …</string>
|
||||||
|
<string name="shared_string_subtype">Subtipo</string>
|
||||||
|
<string name="shared_string_vehicle">Vehículo</string>
|
||||||
|
<string name="shared_string_server_url">URL del servidor</string>
|
||||||
|
<string name="shared_string_enter_param">Introduce parámetro</string>
|
||||||
|
<string name="test_route_calculation">Cálculo de la ruta de prueba</string>
|
||||||
|
<string name="routing_engine_vehicle_type_driving">Conduciendo</string>
|
||||||
|
<string name="routing_engine_vehicle_type_foot">A pie</string>
|
||||||
|
<string name="routing_engine_vehicle_type_bike">Bicicleta</string>
|
||||||
|
<string name="routing_engine_vehicle_type_car">Coche</string>
|
||||||
|
<string name="shared_string_folders">Carpetas</string>
|
||||||
|
<string name="select_folder">Seleccionar carpeta</string>
|
||||||
|
<string name="select_folder_descr">Selecciona carpeta o agrega una nueva</string>
|
||||||
|
<string name="shared_string_empty">Vacío</string>
|
||||||
|
<string name="upload_to_openstreetmap">Subir a OpenStreetMap</string>
|
||||||
|
<string name="rename_track">Renombrar traza</string>
|
||||||
|
<string name="shared_string_sec">seg</string>
|
||||||
|
<string name="shared_string_turn">Giro</string>
|
||||||
|
<string name="start_recording">Iniciar grabación</string>
|
||||||
|
<string name="show_track_on_map">Mostrar pista en el mapa</string>
|
||||||
|
<string name="routing_engine_vehicle_type_wheelchair">Silla de ruedas</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hiking">Senderismo</string>
|
||||||
|
<string name="routing_engine_vehicle_type_walking">Andando</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_electric">Ciclismo eléctrico</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_mountain">Ciclismo de montaña</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_road">Ciclismo de carretera</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_regular">Ciclismo normal</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hgv">Vehículo pesado</string>
|
||||||
|
<string name="routing_engine_vehicle_type_small_truck">Camión pequeño</string>
|
||||||
|
<string name="routing_engine_vehicle_type_truck">Camión</string>
|
||||||
|
<string name="routing_engine_vehicle_type_scooter">Escúter</string>
|
||||||
|
<string name="routing_engine_vehicle_type_racingbike">Bicicleta de carreras</string>
|
||||||
|
<string name="routing_engine_vehicle_type_mtb">MTB</string>
|
||||||
|
<string name="upload_photo">Subiendo</string>
|
||||||
|
<string name="upload_photo_completed">Subida completa</string>
|
||||||
|
<string name="uploading_count">Subiendo %1$d de %2$d</string>
|
||||||
|
<string name="select_segments">Seleccionar segmentos</string>
|
||||||
|
<string name="select_segments_description">%1$s contiene más de un segmento, necesitas seleccionar la parte necesaria para la navegación.</string>
|
||||||
|
<string name="segments_count">Segmento %1$d</string>
|
||||||
|
<string name="toast_select_edits_for_upload">Seleccionar ediciones a subir</string>
|
||||||
|
<string name="temporary_conditional_routing_descr">Utiliza las restricciones viales que están activas ahora en el mapa</string>
|
||||||
|
<string name="routing_attr_short_way_description">Ruta más corta optimizada (ahorro de energía)</string>
|
||||||
|
<string name="routing_attr_driving_style_description">Selecciona el propósito de conducción para obtener una ruta más corta, más rápida o más segura</string>
|
||||||
|
<string name="snap_to_road_descr">El icono de ubicación actual seguirá la ruta de navegación actual</string>
|
||||||
|
<string name="map_orientation_threshold_descr">No gira la vista del mapa si la velocidad es inferior a un umbral</string>
|
||||||
|
<string name="restart">Reiniciar</string>
|
||||||
|
<string name="shared_strings_all_regions">Todas las regiones</string>
|
||||||
|
<string name="delete_number_files_question">¿Borrar %1$d archivos\?</string>
|
||||||
|
<string name="track_recording_stop_without_saving">Parar sin guardar</string>
|
||||||
|
<string name="track_recording_save_and_stop">Guardar y detener la grabación</string>
|
||||||
|
<string name="track_recording_title">Grabación de traza detenida</string>
|
||||||
|
<string name="track_recording_description">¿Seguro que quieres dejar de grabar\?
|
||||||
|
\nSe perderán todos los datos no guardados.</string>
|
||||||
|
<string name="on_pause">En pausa</string>
|
||||||
|
<string name="app_restart_required">Es necesario reiniciar la aplicación para aplicar algunos ajustes.</string>
|
||||||
|
<string name="routing_attr_height_obstacles_description">El enrutamiento podría evitar fuertes subidas.</string>
|
||||||
|
<string name="quick_action_coordinates_widget_descr">Un conmutador para mostrar u ocultar el control de coordenadas en el mapa.</string>
|
||||||
|
<string name="map_widget_distance_by_tap">Distancia por toque</string>
|
||||||
|
<string name="latest_openstreetmap_update">Última actualización de OpenStreetMap disponible:</string>
|
||||||
|
<string name="updated">Actualizado: %s</string>
|
||||||
|
<string name="last_time_checked">Última verificación: %s</string>
|
||||||
|
<string name="update_frequency">Frecuencia de actualización</string>
|
||||||
|
<string name="live_update_frequency_week_variant">Las actualizaciones de los mapas se revisarán cada semana. La próxima vez %1$s en %2$s.</string>
|
||||||
|
<string name="live_update_frequency_day_variant">Las actualizaciones del mapa se comprobarán cada día. La próxima vez %1$s en %2$s.</string>
|
||||||
|
<string name="live_update_frequency_hour_variant">Las actualizaciones del mapa se comprobarán cada hora. La próxima vez %1$s en %2$s.</string>
|
||||||
|
<string name="delete_updates">Borrar las actualizaciones</string>
|
||||||
|
<string name="live_update_delete_updates_msg">¿Seguro que deseas eliminar todas las %s actualizaciones en vivo\?</string>
|
||||||
|
<string name="purchases">Compras</string>
|
||||||
|
<string name="select_category_descr">Selecciona una categoría o añada una nueva</string>
|
||||||
|
<string name="track_recording_will_be_continued">La grabación continuará.</string>
|
||||||
|
<string name="copy_poi_name">Copiar nombre de PDI</string>
|
||||||
|
<string name="quick_action_show_hide_title">Mostrar/Ocultar</string>
|
||||||
|
<string name="shared_string_interval">Intervalo</string>
|
||||||
|
<string name="rendering_attr_noNatureReserveBoundaries_description">Ocultar los límites de las reservas naturales, las áreas protegidas y los parques nacionales</string>
|
||||||
|
<string name="track_has_no_altitude">La traza no contiene dato de altitud.</string>
|
||||||
|
<string name="track_has_no_speed">La traza no contiene datos de velocidad.</string>
|
||||||
|
<string name="select_another_colorization">Selecciona otro tipo de coloración.</string>
|
||||||
|
<string name="trip_recording_logging_interval_info">El intervalo de registro establece el periodo de tiempo en el que OsmAnd pedirá los datos de la posición actual.</string>
|
||||||
|
<string name="trip_recording_save_and_continue">Guardar y continuar</string>
|
||||||
|
<string name="lost_data_warning">Todos los datos no guardados se perderán.</string>
|
||||||
|
<string name="show_start_dialog">Mostrar cuadro de diálogo de inicio</string>
|
||||||
|
<string name="trip_recording_show_start_dialog_setting">Si se desactiva, la grabación se iniciará justo después de tocar el control o el elemento de menú, saltándose el diálogo de confirmación.</string>
|
||||||
|
<string name="customize_route_line">Personalizar la línea de ruta</string>
|
||||||
|
<string name="shared_string_route_line">Línea de ruta</string>
|
||||||
|
<string name="route_line_use_map_style_appearance">La línea de ruta sería usar %1$s especificada en el estilo de mapa seleccionado: %2$s.</string>
|
||||||
|
<string name="specify_color_for_map_mode">Especifica el color para el modo de mapa: %1$s.</string>
|
||||||
|
<string name="no_purchases">No tienes compras</string>
|
||||||
|
<string name="new_device_account">Nuevo dispositivo / nueva cuenta</string>
|
||||||
|
<string name="contact_support_description">Si tienes alguna duda, ponte en contacto con nosotros en %1$s.</string>
|
||||||
|
<string name="troubleshooting_description">Por favor, sigue este enlace si tiense algún problema con las compras.</string>
|
||||||
|
<string name="contact_support">Contacta con asistencia</string>
|
||||||
|
<string name="empty_purchases_description">Si tus compras no aparecen aquí, pulsa sobre \"%1$s\", o ponte en contacto con nuestro equipo de asistencia.</string>
|
||||||
|
<string name="troubleshooting">Solución de problemas</string>
|
||||||
|
<string name="osmand_live">OsmAnd En vivo</string>
|
||||||
|
<string name="annual_subscription">Suscripción anual</string>
|
||||||
|
<string name="monthly_subscription">Suscripción mensual</string>
|
||||||
|
<string name="three_months_subscription">Suscripción de tres meses</string>
|
||||||
|
<string name="next_billing_date">Próxima fecha de facturación: %1$s</string>
|
||||||
|
<string name="osmand_live_cancelled">Cancelado</string>
|
||||||
|
<string name="renew_subscription">Renovar la suscripción</string>
|
||||||
|
<string name="in_grace_period">En periodo de gracia</string>
|
||||||
|
<string name="on_hold">En espera</string>
|
||||||
|
<string name="expired">Expirado</string>
|
||||||
|
<string name="release_4_0_beta">- Las actualizaciones de OsmAnd Live se han movido a \"Descargas > Actualizaciones\".
|
||||||
|
\n
|
||||||
|
\n - Los tracks ahora pueden ser coloreados por altitud, velocidad o pendiente.
|
||||||
|
\n
|
||||||
|
\n - Añadida la opción de cambiar la apariencia de la línea de la ruta de navegación
|
||||||
|
\n
|
||||||
|
\n - Actualizado el cuadro de diálogo \"Grabación del viaje\".
|
||||||
|
\n
|
||||||
|
\n</string>
|
||||||
|
<string name="update_all_maps_added">¿Actualizar todos los mapas añadidos a %1$s\?</string>
|
||||||
|
<string name="exit_number">Número de salida</string>
|
||||||
|
<string name="announce_when_exceeded">Anunciar cuando se excede</string>
|
||||||
|
<string name="user_points">Puntos de usuario</string>
|
||||||
|
<string name="output">Salida</string>
|
||||||
</resources>
|
</resources>
|
|
@ -4094,7 +4094,7 @@
|
||||||
<string name="empty_purchases_description">اگر خریدهای شما اینجا نمایش داده نمیشود، روی «%1$s» بزنید یا با تیم پشتیبانی ما تماس بگیرید.</string>
|
<string name="empty_purchases_description">اگر خریدهای شما اینجا نمایش داده نمیشود، روی «%1$s» بزنید یا با تیم پشتیبانی ما تماس بگیرید.</string>
|
||||||
<string name="contact_support">تماس با پشتیبانی</string>
|
<string name="contact_support">تماس با پشتیبانی</string>
|
||||||
<string name="troubleshooting">عیبیابی</string>
|
<string name="troubleshooting">عیبیابی</string>
|
||||||
<string name="troubleshooting_description">اگر با مسئلهای در خرید مواجه شدید این پیوند را دنبال کنید.</string>
|
<string name="troubleshooting_description">اگر در خرید با مسئلهای مواجه هستید این پیوند را دنبال کنید.</string>
|
||||||
<string name="osmand_live">OsmAnd Live</string>
|
<string name="osmand_live">OsmAnd Live</string>
|
||||||
<string name="annual_subscription">اشتراک سالانه</string>
|
<string name="annual_subscription">اشتراک سالانه</string>
|
||||||
<string name="monthly_subscription">اشتراک ماهانه</string>
|
<string name="monthly_subscription">اشتراک ماهانه</string>
|
||||||
|
@ -4105,4 +4105,6 @@
|
||||||
<string name="in_grace_period">در مهلت اضافه</string>
|
<string name="in_grace_period">در مهلت اضافه</string>
|
||||||
<string name="expired">منقضی شده</string>
|
<string name="expired">منقضی شده</string>
|
||||||
<string name="update_all_maps_added">همهٔ نقشههای اضافهشده به %1$s روزآمد شود؟</string>
|
<string name="update_all_maps_added">همهٔ نقشههای اضافهشده به %1$s روزآمد شود؟</string>
|
||||||
|
<string name="exit_number">شمارهٔ خروج</string>
|
||||||
|
<string name="output">خروجی</string>
|
||||||
</resources>
|
</resources>
|
|
@ -4075,5 +4075,4 @@
|
||||||
<string name="exit_number">Numéro de sortie</string>
|
<string name="exit_number">Numéro de sortie</string>
|
||||||
<string name="announce_when_exceeded">Annoncer en cas de dépassement</string>
|
<string name="announce_when_exceeded">Annoncer en cas de dépassement</string>
|
||||||
<string name="output">Sortie</string>
|
<string name="output">Sortie</string>
|
||||||
<string name="map_quick_action_pattern">%1$s → …</string>
|
|
||||||
</resources>
|
</resources>
|
|
@ -4074,7 +4074,6 @@
|
||||||
<string name="on_hold">Várakoztatva</string>
|
<string name="on_hold">Várakoztatva</string>
|
||||||
<string name="expired">Lejárt</string>
|
<string name="expired">Lejárt</string>
|
||||||
<string name="update_all_maps_added">Frissüljön minden térkép, amely hozzá lett adva ehhez: %1$s\?</string>
|
<string name="update_all_maps_added">Frissüljön minden térkép, amely hozzá lett adva ehhez: %1$s\?</string>
|
||||||
<string name="map_quick_action_pattern">%1$s → …</string>
|
|
||||||
<string name="exit_number">Kijárat száma</string>
|
<string name="exit_number">Kijárat száma</string>
|
||||||
<string name="announce_when_exceeded">Értesítés túllépéskor</string>
|
<string name="announce_when_exceeded">Értesítés túllépéskor</string>
|
||||||
<string name="user_points">Felhasználói pontok</string>
|
<string name="user_points">Felhasználói pontok</string>
|
||||||
|
|
|
@ -4071,4 +4071,9 @@
|
||||||
<string name="on_hold">In attesa</string>
|
<string name="on_hold">In attesa</string>
|
||||||
<string name="expired">Scaduto</string>
|
<string name="expired">Scaduto</string>
|
||||||
<string name="update_all_maps_added">Aggiornare tutte le mappe aggiunte a %1$s\?</string>
|
<string name="update_all_maps_added">Aggiornare tutte le mappe aggiunte a %1$s\?</string>
|
||||||
|
<string name="exit_number">Numero uscita</string>
|
||||||
|
<string name="announce_when_exceeded">Annuncia quando si supera</string>
|
||||||
|
<string name="user_points">Punti utente</string>
|
||||||
|
<string name="output">Output</string>
|
||||||
|
<string name="map_quick_action_pattern">%1$s → …</string>
|
||||||
</resources>
|
</resources>
|
|
@ -4087,5 +4087,4 @@
|
||||||
<string name="announce_when_exceeded">להכריז בחריגה</string>
|
<string name="announce_when_exceeded">להכריז בחריגה</string>
|
||||||
<string name="user_points">נקודות משתמש</string>
|
<string name="user_points">נקודות משתמש</string>
|
||||||
<string name="output">פלט</string>
|
<string name="output">פלט</string>
|
||||||
<string name="map_quick_action_pattern">%1$s ← …</string>
|
|
||||||
</resources>
|
</resources>
|
|
@ -4044,4 +4044,26 @@
|
||||||
<string name="osmand_live_cancelled">Anulowano</string>
|
<string name="osmand_live_cancelled">Anulowano</string>
|
||||||
<string name="renew_subscription">Odnów subskrypcję</string>
|
<string name="renew_subscription">Odnów subskrypcję</string>
|
||||||
<string name="update_all_maps_added">Zaktualizować wszystkie mapy dodane do %1$s\?</string>
|
<string name="update_all_maps_added">Zaktualizować wszystkie mapy dodane do %1$s\?</string>
|
||||||
|
<string name="routing_attr_height_obstacles_description">Trasa mogłaby unikać silnych podjazdów.</string>
|
||||||
|
<string name="select_another_colorization">Proszę wybrać inny typ barwy.</string>
|
||||||
|
<string name="shared_string_interval">Interwał</string>
|
||||||
|
<string name="rendering_attr_noNatureReserveBoundaries_name">Naturalne granice</string>
|
||||||
|
<string name="track_has_no_altitude">Ślady nie zawierają danych o wysokości.</string>
|
||||||
|
<string name="track_has_no_speed">Ślady nie zawierają informacji o prędkości.</string>
|
||||||
|
<string name="trip_recording_logging_interval_info">Interwały logowania ustala okres czasu, w któtym OsmAnd będzie prosił o dane obecnej lokalizacji pozycji.</string>
|
||||||
|
<string name="show_start_dialog">Pokaż okno rozpocznij</string>
|
||||||
|
<string name="trip_recording_show_start_dialog_setting">Gdy wyłączone, nagrywanie rozpocznie się niezwłocznie po naciśnięciu w widżet lub w menu, pomijając okno potwierdzenia.</string>
|
||||||
|
<string name="customize_route_line">Zmień trasę nawigacji</string>
|
||||||
|
<string name="shared_string_route_line">Trasa nawigacji</string>
|
||||||
|
<string name="expired">Wygasł</string>
|
||||||
|
<string name="release_4_0_beta">• OsmAnd Live aktualizacje przeniesiono do \"Pobrane > Aktualizacje\"
|
||||||
|
\n
|
||||||
|
\n •Ślady mogą być pokolorowane względem wysokości, prędkości, wzniesień.
|
||||||
|
\n
|
||||||
|
\n • Dodano opcję zmiany wyglądu trasy nawigacji
|
||||||
|
\n
|
||||||
|
\n • zaktualizowano okno \"Nagrywanie Trasy\"
|
||||||
|
\n
|
||||||
|
\n</string>
|
||||||
|
<string name="map_quick_action_pattern">%1$s → …</string>
|
||||||
</resources>
|
</resources>
|
|
@ -4064,7 +4064,7 @@
|
||||||
<string name="empty_purchases_description">Se suas compras não aparecerem aqui, toque em \"%1$s\", ou entre em contato com nossa equipe de suporte.</string>
|
<string name="empty_purchases_description">Se suas compras não aparecerem aqui, toque em \"%1$s\", ou entre em contato com nossa equipe de suporte.</string>
|
||||||
<string name="contact_support">Contato com o suporte</string>
|
<string name="contact_support">Contato com o suporte</string>
|
||||||
<string name="troubleshooting">Solução de problemas</string>
|
<string name="troubleshooting">Solução de problemas</string>
|
||||||
<string name="troubleshooting_description">Por favor, siga este link se você tiver algum problema com compras.</string>
|
<string name="troubleshooting_description">Por favor, siga este link se tiver problemas com as compras.</string>
|
||||||
<string name="osmand_live">OsmAnd Live</string>
|
<string name="osmand_live">OsmAnd Live</string>
|
||||||
<string name="annual_subscription">Assinatura anual</string>
|
<string name="annual_subscription">Assinatura anual</string>
|
||||||
<string name="monthly_subscription">Assinatura mensal</string>
|
<string name="monthly_subscription">Assinatura mensal</string>
|
||||||
|
@ -4076,4 +4076,9 @@
|
||||||
<string name="on_hold">Em espera</string>
|
<string name="on_hold">Em espera</string>
|
||||||
<string name="expired">Expirado</string>
|
<string name="expired">Expirado</string>
|
||||||
<string name="update_all_maps_added">Atualizar todos os mapas adicionados a %1$s\?</string>
|
<string name="update_all_maps_added">Atualizar todos os mapas adicionados a %1$s\?</string>
|
||||||
|
<string name="exit_number">Número de saída</string>
|
||||||
|
<string name="announce_when_exceeded">Anunciar quando ultrapassado</string>
|
||||||
|
<string name="user_points">Pontos do usuário</string>
|
||||||
|
<string name="output">Saída</string>
|
||||||
|
<string name="map_quick_action_pattern">%1$s → …</string>
|
||||||
</resources>
|
</resources>
|
|
@ -1409,7 +1409,7 @@
|
||||||
<string name="poi_fireplace_yes">Sim</string>
|
<string name="poi_fireplace_yes">Sim</string>
|
||||||
<string name="poi_fireplace_no">Sem lareira</string>
|
<string name="poi_fireplace_no">Sem lareira</string>
|
||||||
<string name="poi_covered_yes">Sim</string>
|
<string name="poi_covered_yes">Sim</string>
|
||||||
<string name="poi_covered_no">Descoberto</string>
|
<string name="poi_covered_no">Não coberto</string>
|
||||||
<string name="poi_smoking_no">Não permitido</string>
|
<string name="poi_smoking_no">Não permitido</string>
|
||||||
<string name="poi_smoking_outside">Apenas do lado de fora</string>
|
<string name="poi_smoking_outside">Apenas do lado de fora</string>
|
||||||
<string name="poi_smoking_yes">Permitido</string>
|
<string name="poi_smoking_yes">Permitido</string>
|
||||||
|
@ -1959,8 +1959,8 @@
|
||||||
<string name="poi_surface_paved">Superfície: pavimentada</string>
|
<string name="poi_surface_paved">Superfície: pavimentada</string>
|
||||||
<string name="poi_surface_asphalt">Superfície: asfalto</string>
|
<string name="poi_surface_asphalt">Superfície: asfalto</string>
|
||||||
<string name="poi_surface_concrete">Superfície: cimento</string>
|
<string name="poi_surface_concrete">Superfície: cimento</string>
|
||||||
<string name="poi_surface_sett">Superfície: paralelepípedo</string>
|
<string name="poi_surface_sett">Superfície: paralelos</string>
|
||||||
<string name="poi_surface_cobblestone">Superfície: piso de seixos</string>
|
<string name="poi_surface_cobblestone">Superfície: pedras irregulares</string>
|
||||||
<string name="poi_surface_paving_stones">Superfície: piso intertravado</string>
|
<string name="poi_surface_paving_stones">Superfície: piso intertravado</string>
|
||||||
<string name="poi_surface_pebblestone">Superfície: cascalho</string>
|
<string name="poi_surface_pebblestone">Superfície: cascalho</string>
|
||||||
<string name="poi_surface_stone">Superfície: pedra</string>
|
<string name="poi_surface_stone">Superfície: pedra</string>
|
||||||
|
@ -2789,7 +2789,7 @@
|
||||||
<string name="poi_crossing_supervision_attendant">Cruzamento vigiado: pessoa física</string>
|
<string name="poi_crossing_supervision_attendant">Cruzamento vigiado: pessoa física</string>
|
||||||
<string name="poi_crossing_supervision_camera">Cruzamento vigiado: câmara</string>
|
<string name="poi_crossing_supervision_camera">Cruzamento vigiado: câmara</string>
|
||||||
<string name="poi_dispensing_yes">Sim</string>
|
<string name="poi_dispensing_yes">Sim</string>
|
||||||
<string name="poi_dispensing_no">Emite receitas: não</string>
|
<string name="poi_dispensing_no">Não vende medicamentos sujeitos a receita médica</string>
|
||||||
<string name="poi_aerodrome_type_international">Internacional</string>
|
<string name="poi_aerodrome_type_international">Internacional</string>
|
||||||
<string name="poi_aerodrome_type_regional">Regional</string>
|
<string name="poi_aerodrome_type_regional">Regional</string>
|
||||||
<string name="poi_aerodrome_type_public">Público</string>
|
<string name="poi_aerodrome_type_public">Público</string>
|
||||||
|
@ -3488,7 +3488,7 @@
|
||||||
<string name="poi_checkpoint_type_electronic">Eletrónico</string>
|
<string name="poi_checkpoint_type_electronic">Eletrónico</string>
|
||||||
<string name="poi_course">Curso</string>
|
<string name="poi_course">Curso</string>
|
||||||
<string name="poi_rock">Rocha</string>
|
<string name="poi_rock">Rocha</string>
|
||||||
<string name="poi_end_date">Data final</string>
|
<string name="poi_end_date">Data de fim</string>
|
||||||
<string name="poi_appliance">Loja de eletrodomésticos</string>
|
<string name="poi_appliance">Loja de eletrodomésticos</string>
|
||||||
<string name="poi_outcrop">Afloramento</string>
|
<string name="poi_outcrop">Afloramento</string>
|
||||||
<string name="poi_payment_contactless_yes">Sem contacto</string>
|
<string name="poi_payment_contactless_yes">Sem contacto</string>
|
||||||
|
@ -3704,7 +3704,7 @@
|
||||||
<string name="poi_craft_floorer">Assentador de piso</string>
|
<string name="poi_craft_floorer">Assentador de piso</string>
|
||||||
<string name="poi_craft_bakery">Padaria</string>
|
<string name="poi_craft_bakery">Padaria</string>
|
||||||
<string name="poi_craft_cabinet_maker">Marceneiro</string>
|
<string name="poi_craft_cabinet_maker">Marceneiro</string>
|
||||||
<string name="poi_charge">Cobrança</string>
|
<string name="poi_charge">Custo</string>
|
||||||
<string name="poi_pet_grooming">Banho e tosquia de animais</string>
|
<string name="poi_pet_grooming">Banho e tosquia de animais</string>
|
||||||
<string name="poi_atm_yes">Caixa automática: sim</string>
|
<string name="poi_atm_yes">Caixa automática: sim</string>
|
||||||
<string name="poi_cash_withdrawal_bank_card">Levantamento de dinheiro</string>
|
<string name="poi_cash_withdrawal_bank_card">Levantamento de dinheiro</string>
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -3908,4 +3908,5 @@
|
||||||
<string name="poi_pilates">Пилатес</string>
|
<string name="poi_pilates">Пилатес</string>
|
||||||
<string name="poi_karate">Каратэ</string>
|
<string name="poi_karate">Каратэ</string>
|
||||||
<string name="poi_jiu_jitsu">Джиу-джитсу</string>
|
<string name="poi_jiu_jitsu">Джиу-джитсу</string>
|
||||||
|
<string name="poi_mobile_library">Место остановки передвижной библиотеки</string>
|
||||||
</resources>
|
</resources>
|
|
@ -1545,7 +1545,7 @@
|
||||||
<string name="download_additional_maps">Скачать недостающие карты %1$s (%2$d МБ)\?</string>
|
<string name="download_additional_maps">Скачать недостающие карты %1$s (%2$d МБ)\?</string>
|
||||||
<string name="shared_string_waypoints">Путевые точки</string>
|
<string name="shared_string_waypoints">Путевые точки</string>
|
||||||
<string name="way_alarms">Дорожные предупреждения</string>
|
<string name="way_alarms">Дорожные предупреждения</string>
|
||||||
<string name="speak_favorites">Мои места рядом</string>
|
<string name="speak_favorites">Ближайшие избранные</string>
|
||||||
<string name="speak_poi">Ближайшие POI</string>
|
<string name="speak_poi">Ближайшие POI</string>
|
||||||
<string name="index_tours">Туры</string>
|
<string name="index_tours">Туры</string>
|
||||||
<string name="shared_string_all">Все</string>
|
<string name="shared_string_all">Все</string>
|
||||||
|
@ -4082,4 +4082,8 @@
|
||||||
<string name="expired">Срок истёк</string>
|
<string name="expired">Срок истёк</string>
|
||||||
<string name="on_hold">Приостановлено</string>
|
<string name="on_hold">Приостановлено</string>
|
||||||
<string name="renew_subscription">Продление подписки</string>
|
<string name="renew_subscription">Продление подписки</string>
|
||||||
|
<string name="announce_when_exceeded">Объявлять о превышении</string>
|
||||||
|
<string name="user_points">Точки пользователя</string>
|
||||||
|
<string name="output">Вывод</string>
|
||||||
|
<string name="map_quick_action_pattern">%1$s → …</string>
|
||||||
</resources>
|
</resources>
|
|
@ -4076,4 +4076,9 @@
|
||||||
<string name="on_hold">Pozdržané</string>
|
<string name="on_hold">Pozdržané</string>
|
||||||
<string name="expired">Expirované</string>
|
<string name="expired">Expirované</string>
|
||||||
<string name="update_all_maps_added">Aktualizovať všetky mapy pridané do %1$s\?</string>
|
<string name="update_all_maps_added">Aktualizovať všetky mapy pridané do %1$s\?</string>
|
||||||
|
<string name="exit_number">Číslo výjazdu</string>
|
||||||
|
<string name="announce_when_exceeded">Hlásiť keď je prekročené</string>
|
||||||
|
<string name="user_points">Body používateľa</string>
|
||||||
|
<string name="output">Výstup</string>
|
||||||
|
<string name="map_quick_action_pattern">%1$s → …</string>
|
||||||
</resources>
|
</resources>
|
|
@ -24,7 +24,7 @@
|
||||||
<string name="snap_to_road">Fäst på vägen</string>
|
<string name="snap_to_road">Fäst på vägen</string>
|
||||||
<string name="filterpoi_activity">Skapa POI-filter</string>
|
<string name="filterpoi_activity">Skapa POI-filter</string>
|
||||||
<string name="recalculate_route_to_your_location">Transportsätt:</string>
|
<string name="recalculate_route_to_your_location">Transportsätt:</string>
|
||||||
<string name="select_navigation_mode">Välj transportsätt</string>
|
<string name="select_navigation_mode">Transportsätt:</string>
|
||||||
<string name="day_night_info_description">Soluppgång: %1$s
|
<string name="day_night_info_description">Soluppgång: %1$s
|
||||||
\nSolnedgång: %2$s</string>
|
\nSolnedgång: %2$s</string>
|
||||||
<string name="day_night_info">Dag-/nattinformation</string>
|
<string name="day_night_info">Dag-/nattinformation</string>
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
<string name="osmand_parking_hours">timmar</string>
|
<string name="osmand_parking_hours">timmar</string>
|
||||||
<string name="osmand_parking_minutes">minuter</string>
|
<string name="osmand_parking_minutes">minuter</string>
|
||||||
<string name="osmand_parking_position_description_add_time">Bilen är parkerad vid</string>
|
<string name="osmand_parking_position_description_add_time">Bilen är parkerad vid</string>
|
||||||
<string name="select_animate_speedup">Välj animerad ruttacceleration</string>
|
<string name="select_animate_speedup">Ruttsimuleringshastighet:</string>
|
||||||
<string name="global_app_allocated_memory_descr">Allokerat minne %1$s MB (Android-gräns %2$s MB, Dalvik %3$s MB).</string>
|
<string name="global_app_allocated_memory_descr">Allokerat minne %1$s MB (Android-gräns %2$s MB, Dalvik %3$s MB).</string>
|
||||||
<string name="global_app_allocated_memory">Allokerat minne</string>
|
<string name="global_app_allocated_memory">Allokerat minne</string>
|
||||||
<string name="native_app_allocated_memory_descr">Totalt inbyggt minne allokerat av appen %1$s MB (Dalvik %2$s MB, övrigt %3$s MB).
|
<string name="native_app_allocated_memory_descr">Totalt inbyggt minne allokerat av appen %1$s MB (Dalvik %2$s MB, övrigt %3$s MB).
|
||||||
|
@ -112,8 +112,8 @@
|
||||||
<string name="offline_navigation_not_available">OsmAnd offlinenavigering är inte tillgänglig för tillfället.</string>
|
<string name="offline_navigation_not_available">OsmAnd offlinenavigering är inte tillgänglig för tillfället.</string>
|
||||||
<string name="left_side_navigation">Vänstertrafik</string>
|
<string name="left_side_navigation">Vänstertrafik</string>
|
||||||
<string name="left_side_navigation_descr">Välj för länder med vänstertrafik.</string>
|
<string name="left_side_navigation_descr">Välj för länder med vänstertrafik.</string>
|
||||||
<string name="unknown_from_location">Startpunkten är ännu inte bestämd</string>
|
<string name="unknown_from_location">Avgångspunkten är ännu inte fastställd.</string>
|
||||||
<string name="unknown_location">Positionen är ännu inte känd</string>
|
<string name="unknown_location">Positionen är ännu inte känd.</string>
|
||||||
<string name="confirm_interrupt_download">Avbryt filhämtningen?</string>
|
<string name="confirm_interrupt_download">Avbryt filhämtningen?</string>
|
||||||
<string name="local_indexes_cat_tile">Online-kartor och mellanlagrade kartrutor</string>
|
<string name="local_indexes_cat_tile">Online-kartor och mellanlagrade kartrutor</string>
|
||||||
<string name="local_indexes_cat_map">Standardkartor (vektor)</string>
|
<string name="local_indexes_cat_map">Standardkartor (vektor)</string>
|
||||||
|
@ -210,7 +210,7 @@
|
||||||
<string name="prefs_plugins">Insticksmoduler</string>
|
<string name="prefs_plugins">Insticksmoduler</string>
|
||||||
<string name="osm_editing_plugin_description">Ge OSM-bidrag som att skapa eller modifiera OSM POI-objekt, öppna eller kommentera OSM-anteckningar och bidra med inspelade GPX-filer i OsmAnd genom att ange ditt användarnamn och lösenord. OpenStreetMap.org är ett community-driven, globalt kartläggningsprojekt för allmän domän.</string>
|
<string name="osm_editing_plugin_description">Ge OSM-bidrag som att skapa eller modifiera OSM POI-objekt, öppna eller kommentera OSM-anteckningar och bidra med inspelade GPX-filer i OsmAnd genom att ange ditt användarnamn och lösenord. OpenStreetMap.org är ett community-driven, globalt kartläggningsprojekt för allmän domän.</string>
|
||||||
<string name="vector_maps_may_display_faster_on_some_devices">Vektorkartor ritas sannolikt upp snabbare. Fungerar kanske inte så bra på vissa enheter.</string>
|
<string name="vector_maps_may_display_faster_on_some_devices">Vektorkartor ritas sannolikt upp snabbare. Fungerar kanske inte så bra på vissa enheter.</string>
|
||||||
<string name="play_commands_of_currently_selected_voice">Spela upp kommandon med vald röst</string>
|
<string name="play_commands_of_currently_selected_voice">Välj en röst och testa genom att spela meddelanden:</string>
|
||||||
<string name="test_voice_prompts">Test av röstmeddelanden</string>
|
<string name="test_voice_prompts">Test av röstmeddelanden</string>
|
||||||
<string name="switch_to_raster_map_to_see">Det finns ingen offline vektorkarta för den här platsen. Du kan hämta en i Inställningar (Hantera kartfiler) eller byta till online-kartor (aktivera modulen för online-kartor för detta).</string>
|
<string name="switch_to_raster_map_to_see">Det finns ingen offline vektorkarta för den här platsen. Du kan hämta en i Inställningar (Hantera kartfiler) eller byta till online-kartor (aktivera modulen för online-kartor för detta).</string>
|
||||||
<string name="osmand_long_description_1000_chars">OsmAnd (OSM Automated Navigation Directions)
|
<string name="osmand_long_description_1000_chars">OsmAnd (OSM Automated Navigation Directions)
|
||||||
|
@ -247,7 +247,7 @@
|
||||||
<string name="direction_style_sidewise">Sidled (8 sektorer)</string>
|
<string name="direction_style_sidewise">Sidled (8 sektorer)</string>
|
||||||
<string name="direction_style_clockwise">Medurs (12 sektorer)</string>
|
<string name="direction_style_clockwise">Medurs (12 sektorer)</string>
|
||||||
<string name="settings_direction_style">Riktningsstil</string>
|
<string name="settings_direction_style">Riktningsstil</string>
|
||||||
<string name="settings_direction_style_descr">Välj sätt att uttrycka relativa riktningar under rörelse.</string>
|
<string name="settings_direction_style_descr">Välj sätt att uttrycka relativa riktningar under rörelse</string>
|
||||||
<string name="auto_announce_on">Börja meddela automatiskt</string>
|
<string name="auto_announce_on">Börja meddela automatiskt</string>
|
||||||
<string name="auto_announce_off">Sluta meddela automatiskt</string>
|
<string name="auto_announce_off">Sluta meddela automatiskt</string>
|
||||||
<string name="i_am_here">Jag är här</string>
|
<string name="i_am_here">Jag är här</string>
|
||||||
|
@ -335,7 +335,7 @@
|
||||||
<string name="animate_route">Starta simuleringen</string>
|
<string name="animate_route">Starta simuleringen</string>
|
||||||
<string name="file_can_not_be_renamed">Filen kan inte döpas om.</string>
|
<string name="file_can_not_be_renamed">Filen kan inte döpas om.</string>
|
||||||
<string name="file_with_name_already_exists">En fil med det namnet finns redan.</string>
|
<string name="file_with_name_already_exists">En fil med det namnet finns redan.</string>
|
||||||
<string name="poi_query_by_name_matches_categories">Hittade flera POI-kategorier som matchar frågan:</string>
|
<string name="poi_query_by_name_matches_categories">Hittade flera relaterade IP-kategorier.</string>
|
||||||
<string name="data_to_search_poi_not_available">Lokala data för att söka POI är inte tillgängliga.</string>
|
<string name="data_to_search_poi_not_available">Lokala data för att söka POI är inte tillgängliga.</string>
|
||||||
<string name="poi_filter_by_name">Sök efter namn</string>
|
<string name="poi_filter_by_name">Sök efter namn</string>
|
||||||
<string name="old_poi_file_should_be_deleted">POI-datafilen \'%1$s\' är överflödig och kan tas bort.</string>
|
<string name="old_poi_file_should_be_deleted">POI-datafilen \'%1$s\' är överflödig och kan tas bort.</string>
|
||||||
|
@ -388,7 +388,7 @@
|
||||||
<string name="local_indexes_cat_poi">Intressepunktsdata</string>
|
<string name="local_indexes_cat_poi">Intressepunktsdata</string>
|
||||||
<string name="ttsvoice">TTS-röst</string>
|
<string name="ttsvoice">TTS-röst</string>
|
||||||
<string name="search_offline_clear_search">Ny sökning</string>
|
<string name="search_offline_clear_search">Ny sökning</string>
|
||||||
<string name="map_text_size_descr">Välj textstorlek för namn på kartan.</string>
|
<string name="map_text_size_descr">Textstorlek för namn på kartan:</string>
|
||||||
<string name="map_text_size">Teckenstorlek på karta</string>
|
<string name="map_text_size">Teckenstorlek på karta</string>
|
||||||
<string name="trace_rendering">Renderingsfelsökningsinformation</string>
|
<string name="trace_rendering">Renderingsfelsökningsinformation</string>
|
||||||
<string name="trace_rendering_descr">Visa renderingsprestanda.</string>
|
<string name="trace_rendering_descr">Visa renderingsprestanda.</string>
|
||||||
|
@ -415,10 +415,10 @@
|
||||||
<string name="map_transparency">Transparens för baskartan</string>
|
<string name="map_transparency">Transparens för baskartan</string>
|
||||||
<string name="layer_underlay">Underläggskarta …</string>
|
<string name="layer_underlay">Underläggskarta …</string>
|
||||||
<string name="map_underlay">Underläggskarta</string>
|
<string name="map_underlay">Underläggskarta</string>
|
||||||
<string name="map_underlay_descr">Välj underläggskarta.</string>
|
<string name="map_underlay_descr">Välj underläggskarta</string>
|
||||||
<string name="layer_overlay">Överläggskarta …</string>
|
<string name="layer_overlay">Överläggskarta …</string>
|
||||||
<string name="map_overlay">Överläggskarta</string>
|
<string name="map_overlay">Överläggskarta</string>
|
||||||
<string name="map_overlay_descr">Välj överläggskarta.</string>
|
<string name="map_overlay_descr">Välj överläggskarta</string>
|
||||||
<string name="tile_source_already_installed">Kartan är redan installerad; inställningarna kommer att uppdateras.</string>
|
<string name="tile_source_already_installed">Kartan är redan installerad; inställningarna kommer att uppdateras.</string>
|
||||||
<string name="select_tile_source_to_install">Välj kartor/kartrutor att installera eller uppdatera.</string>
|
<string name="select_tile_source_to_install">Välj kartor/kartrutor att installera eller uppdatera.</string>
|
||||||
<string name="internet_not_available">En anslutning till Internet krävs för denna åtgärd men någon sådan är inte tillgänglig.</string>
|
<string name="internet_not_available">En anslutning till Internet krävs för denna åtgärd men någon sådan är inte tillgänglig.</string>
|
||||||
|
@ -538,12 +538,12 @@
|
||||||
<string name="maps_could_not_be_downloaded">Denna karta kunde inte laddas ner</string>
|
<string name="maps_could_not_be_downloaded">Denna karta kunde inte laddas ner</string>
|
||||||
<string name="continuous_rendering">Kontinuerlig rendering</string>
|
<string name="continuous_rendering">Kontinuerlig rendering</string>
|
||||||
<string name="continuous_rendering_descr">Visa kontinuerlig rendering istället för direkt-bild.</string>
|
<string name="continuous_rendering_descr">Visa kontinuerlig rendering istället för direkt-bild.</string>
|
||||||
<string name="rendering_exception">Ett fel uppstod vid renderingen av valt område</string>
|
<string name="rendering_exception">Det gick inte att rita valt område.</string>
|
||||||
<string name="show_point_options">Använd platsen …</string>
|
<string name="show_point_options">Använd platsen …</string>
|
||||||
<string name="renderer_load_sucess">Renderaren lästes in</string>
|
<string name="renderer_load_sucess">Renderaren lästes in</string>
|
||||||
<string name="renderer_load_exception">Kunde inte läsa in renderaren</string>
|
<string name="renderer_load_exception">Kunde inte ladda renderaren.</string>
|
||||||
<string name="renderers">Vektorrenderare</string>
|
<string name="renderers">Vektorrenderare</string>
|
||||||
<string name="renderers_descr">Välj renderingsutseende.</string>
|
<string name="renderers_descr">Välj renderingsutseende</string>
|
||||||
<string name="poi_context_menu_website">Visa POI-webbplats</string>
|
<string name="poi_context_menu_website">Visa POI-webbplats</string>
|
||||||
<string name="poi_context_menu_call">Visa POI-telefon</string>
|
<string name="poi_context_menu_call">Visa POI-telefon</string>
|
||||||
<string name="osmand_routing_experimental">OsmAnd offline-navigering är en experimentell funktion och den fungerar inte för sträckor över c:a 20 km.\n\nNavigeringstjänsten är tillfälligt kopplad till online CloudMade.</string>
|
<string name="osmand_routing_experimental">OsmAnd offline-navigering är en experimentell funktion och den fungerar inte för sträckor över c:a 20 km.\n\nNavigeringstjänsten är tillfälligt kopplad till online CloudMade.</string>
|
||||||
|
@ -559,7 +559,7 @@
|
||||||
<string name="voice">Inspelad röst</string>
|
<string name="voice">Inspelad röst</string>
|
||||||
<string name="no_vector_map_loaded">Vektorkartorna lästes inte in</string>
|
<string name="no_vector_map_loaded">Vektorkartorna lästes inte in</string>
|
||||||
<string name="gpx_files_not_found">Hittar inga GPX-filer i spårmappen</string>
|
<string name="gpx_files_not_found">Hittar inga GPX-filer i spårmappen</string>
|
||||||
<string name="error_reading_gpx">Kunde inte läsa GPX-data</string>
|
<string name="error_reading_gpx">Kunde inte läsa GPX-data.</string>
|
||||||
<string name="vector_data">Offline vektorkartor</string>
|
<string name="vector_data">Offline vektorkartor</string>
|
||||||
<string name="transport_context_menu">Sök transport vid stopp</string>
|
<string name="transport_context_menu">Sök transport vid stopp</string>
|
||||||
<string name="poi_context_menu_modify">Ändra Intressepunkt</string>
|
<string name="poi_context_menu_modify">Ändra Intressepunkt</string>
|
||||||
|
@ -567,14 +567,14 @@
|
||||||
<string name="rotate_map_compass_opt">Till kompass</string>
|
<string name="rotate_map_compass_opt">Till kompass</string>
|
||||||
<string name="rotate_map_bearing_opt">I färdriktningen</string>
|
<string name="rotate_map_bearing_opt">I färdriktningen</string>
|
||||||
<string name="rotate_map_none_opt">Vrid inte (norr är uppåt)</string>
|
<string name="rotate_map_none_opt">Vrid inte (norr är uppåt)</string>
|
||||||
<string name="rotate_map_to_bearing_descr">Välj justering av kartskärmen.</string>
|
<string name="rotate_map_to_bearing_descr">Kartjustering:</string>
|
||||||
<string name="rotate_map_to_bearing">Kartorientering</string>
|
<string name="rotate_map_to_bearing">Kartorientering</string>
|
||||||
<string name="show_route">Ruttdetaljer</string>
|
<string name="show_route">Ruttdetaljer</string>
|
||||||
<string name="fav_imported_sucessfully">Favoriterna importerades utan problem</string>
|
<string name="fav_imported_sucessfully">Favoriterna importerades utan problem</string>
|
||||||
<string name="fav_file_to_load_not_found">GPX-fil med favoriter finns inte på {0}</string>
|
<string name="fav_file_to_load_not_found">GPX-fil med favoriter finns inte på {0}</string>
|
||||||
<string name="fav_saved_sucessfully">Favoriterna sparade utan problem i {0}</string>
|
<string name="fav_saved_sucessfully">Favoriterna sparade utan problem i {0}</string>
|
||||||
<string name="no_fav_to_save">Inga favoritpunkter att spara</string>
|
<string name="no_fav_to_save">Inga favoritpunkter att spara</string>
|
||||||
<string name="error_occurred_loading_gpx">Kunde inte läsa in GPX</string>
|
<string name="error_occurred_loading_gpx">Kunde inte läsa in GPX.</string>
|
||||||
<string name="send_report">Skicka rapport</string>
|
<string name="send_report">Skicka rapport</string>
|
||||||
<string name="none_region_found">Det gick inte att hitta några hämtade kartor på minneskortet.</string>
|
<string name="none_region_found">Det gick inte att hitta några hämtade kartor på minneskortet.</string>
|
||||||
<string name="poi_namefinder_query_empty">Ange sökfråga för att hitta POI</string>
|
<string name="poi_namefinder_query_empty">Ange sökfråga för att hitta POI</string>
|
||||||
|
@ -596,9 +596,9 @@
|
||||||
<string name="network_provider">Nätverk</string>
|
<string name="network_provider">Nätverk</string>
|
||||||
<string name="gps_provider">GPS</string>
|
<string name="gps_provider">GPS</string>
|
||||||
<string name="int_seconds">sekunder</string>
|
<string name="int_seconds">sekunder</string>
|
||||||
<string name="background_service_int_descr">Ange väckningsintervall som används av bakgrundstjänsten.</string>
|
<string name="background_service_int_descr">Väckningsintervall som används av bakgrundstjänsten:</string>
|
||||||
<string name="background_service_int">GPS-väckningsintervall</string>
|
<string name="background_service_int">GPS-väckningsintervall</string>
|
||||||
<string name="background_service_provider_descr">Välj platsleverantör för bakgrundstjänsten.</string>
|
<string name="background_service_provider_descr">Platsmetod som används av bakgrundstjänsten:</string>
|
||||||
<string name="background_service_provider">Platsleverantör</string>
|
<string name="background_service_provider">Platsleverantör</string>
|
||||||
<string name="background_router_service_descr">Kör OsmAnd i bakgrunden för att spåra din position medan skärmen är avstängd.</string>
|
<string name="background_router_service_descr">Kör OsmAnd i bakgrunden för att spåra din position medan skärmen är avstängd.</string>
|
||||||
<string name="background_router_service">Kör OsmAnd i bakgrunden</string>
|
<string name="background_router_service">Kör OsmAnd i bakgrunden</string>
|
||||||
|
@ -635,7 +635,7 @@
|
||||||
<string name="map_orientation_landscape">Liggande</string>
|
<string name="map_orientation_landscape">Liggande</string>
|
||||||
<string name="map_screen_orientation">Skärmorientering</string>
|
<string name="map_screen_orientation">Skärmorientering</string>
|
||||||
<string name="map_screen_orientation_descr">Stående, liggande eller som enheten.</string>
|
<string name="map_screen_orientation_descr">Stående, liggande eller som enheten.</string>
|
||||||
<string name="opening_hours_not_supported">Öppettider format stöds inte för redigering</string>
|
<string name="opening_hours_not_supported">Det går inte att ändra format för öppettider.</string>
|
||||||
<string name="add_new_rule">Lägg till en ny regel</string>
|
<string name="add_new_rule">Lägg till en ny regel</string>
|
||||||
<string name="transport_Routes">Rutter</string>
|
<string name="transport_Routes">Rutter</string>
|
||||||
<string name="transport_Stop">Hållplats</string>
|
<string name="transport_Stop">Hållplats</string>
|
||||||
|
@ -654,8 +654,8 @@
|
||||||
<string name="show_transport_over_map">Visa hållplatser</string>
|
<string name="show_transport_over_map">Visa hållplatser</string>
|
||||||
<string name="hello">Navigationsappen OsmAnd</string>
|
<string name="hello">Navigationsappen OsmAnd</string>
|
||||||
<string name="update_poi_success">POI-data uppdaterades ({0} lästes in)</string>
|
<string name="update_poi_success">POI-data uppdaterades ({0} lästes in)</string>
|
||||||
<string name="update_poi_error_local">Fel vid uppdatering av lokal POI-lista</string>
|
<string name="update_poi_error_local">Det gick inte att uppdatera den lokala POI-listan.</string>
|
||||||
<string name="update_poi_error_loading">Kunde inte läsa in data från servern</string>
|
<string name="update_poi_error_loading">Kunde inte läsa in data från servern.</string>
|
||||||
<string name="update_poi_no_offline_poi_index">Inga offline POI-data tillgängliga för detta område</string>
|
<string name="update_poi_no_offline_poi_index">Inga offline POI-data tillgängliga för detta område</string>
|
||||||
<string name="update_poi_is_not_available_for_zoom">Det går inte att uppdatera POI för små zoomnivåer</string>
|
<string name="update_poi_is_not_available_for_zoom">Det går inte att uppdatera POI för små zoomnivåer</string>
|
||||||
<string name="context_menu_item_update_poi">Uppdatera intressepunkt</string>
|
<string name="context_menu_item_update_poi">Uppdatera intressepunkt</string>
|
||||||
|
@ -699,7 +699,7 @@
|
||||||
<string name="loading_streets">Läser in gator…</string>
|
<string name="loading_streets">Läser in gator…</string>
|
||||||
<string name="loading_cities">Läser in städer…</string>
|
<string name="loading_cities">Läser in städer…</string>
|
||||||
<string name="poi">POI</string>
|
<string name="poi">POI</string>
|
||||||
<string name="arrived_at_destination">Du har anlänt till din destination</string>
|
<string name="arrived_at_destination">Du har anlänt.</string>
|
||||||
<string name="loading_data">Läser in data…</string>
|
<string name="loading_data">Läser in data…</string>
|
||||||
<string name="reading_indexes">Läser lokala data …</string>
|
<string name="reading_indexes">Läser lokala data …</string>
|
||||||
<string name="zxing_barcode_scanner_not_found">Appen ZXing Barcode Scanner är inte installerad. Vill du söka på Google Play?</string>
|
<string name="zxing_barcode_scanner_not_found">Appen ZXing Barcode Scanner är inte installerad. Vill du söka på Google Play?</string>
|
||||||
|
@ -737,7 +737,7 @@
|
||||||
<string name="osb_comment_dialog_message">Meddelande</string>
|
<string name="osb_comment_dialog_message">Meddelande</string>
|
||||||
<string name="osb_comment_dialog_author">Författarnamn</string>
|
<string name="osb_comment_dialog_author">Författarnamn</string>
|
||||||
<string name="osb_comment_dialog_success">Kommentaren lades till utan problem</string>
|
<string name="osb_comment_dialog_success">Kommentaren lades till utan problem</string>
|
||||||
<string name="osb_comment_dialog_error">Ett undantagsfel inträffade: kommentaren lades inte till</string>
|
<string name="osb_comment_dialog_error">Det gick inte att lägga till kommentar.</string>
|
||||||
<string name="poi_edit_title">Redigera POI</string>
|
<string name="poi_edit_title">Redigera POI</string>
|
||||||
<string name="poi_create_title">Skapa POI</string>
|
<string name="poi_create_title">Skapa POI</string>
|
||||||
<string name="poi_remove_confirm_template">Ta bort {0} (ange kommentar)?</string>
|
<string name="poi_remove_confirm_template">Ta bort {0} (ange kommentar)?</string>
|
||||||
|
@ -750,7 +750,7 @@
|
||||||
<string name="recording_context_menu_arecord">Gör en ljudanteckning</string>
|
<string name="recording_context_menu_arecord">Gör en ljudanteckning</string>
|
||||||
<string name="recording_context_menu_vrecord">Gör en videoanteckning</string>
|
<string name="recording_context_menu_vrecord">Gör en videoanteckning</string>
|
||||||
<string name="layer_recordings">Inspelningsskikt</string>
|
<string name="layer_recordings">Inspelningsskikt</string>
|
||||||
<string name="recording_can_not_be_played">Inspelningen kan inte spelas upp</string>
|
<string name="recording_can_not_be_played">Det gick inte att spela upp inspelningen.</string>
|
||||||
<string name="recording_context_menu_delete">Ta bort inspelningen</string>
|
<string name="recording_context_menu_delete">Ta bort inspelningen</string>
|
||||||
<string name="recording_context_menu_play">Spela upp</string>
|
<string name="recording_context_menu_play">Spela upp</string>
|
||||||
<string name="recording_description">Inspelning %1$s %3$s %2$s</string>
|
<string name="recording_description">Inspelning %1$s %3$s %2$s</string>
|
||||||
|
@ -786,9 +786,9 @@
|
||||||
<string name="dropbox_plugin_description">Dropbox-modulen låter dig synkronisera spår och ljud-/videoanteckningar med ditt Dropbox-konto.</string>
|
<string name="dropbox_plugin_description">Dropbox-modulen låter dig synkronisera spår och ljud-/videoanteckningar med ditt Dropbox-konto.</string>
|
||||||
<string name="srtm_paid_version_msg">Köp gärna pluginen Höjdkurvor på Market för att stödja fortsatt utveckling.</string>
|
<string name="srtm_paid_version_msg">Köp gärna pluginen Höjdkurvor på Market för att stödja fortsatt utveckling.</string>
|
||||||
<string name="av_def_action_audio">Spela in ljud</string>
|
<string name="av_def_action_audio">Spela in ljud</string>
|
||||||
<string name="av_widget_action_descr">Välj standardåtgärd för widget.</string>
|
<string name="av_widget_action_descr">Standardåtgärd för widget:</string>
|
||||||
<string name="av_widget_action">Standardåtgärd för widget</string>
|
<string name="av_widget_action">Standardåtgärd för widget</string>
|
||||||
<string name="av_video_format_descr">Välj videoformat.</string>
|
<string name="av_video_format_descr">Videoformat:</string>
|
||||||
<string name="av_video_format">Videoformat</string>
|
<string name="av_video_format">Videoformat</string>
|
||||||
<string name="av_use_external_recorder_descr">Använd systemets inspelare för video.</string>
|
<string name="av_use_external_recorder_descr">Använd systemets inspelare för video.</string>
|
||||||
<string name="av_use_external_recorder">Använd systemets inspelare</string>
|
<string name="av_use_external_recorder">Använd systemets inspelare</string>
|
||||||
|
@ -811,10 +811,10 @@
|
||||||
<string name="auth_failed">Åtkomst nekades</string>
|
<string name="auth_failed">Åtkomst nekades</string>
|
||||||
<string name="failed_op">misslyckades</string>
|
<string name="failed_op">misslyckades</string>
|
||||||
<string name="converting_names">Konverterar inhemska/engelska namn…</string>
|
<string name="converting_names">Konverterar inhemska/engelska namn…</string>
|
||||||
<string name="error_occurred_saving_gpx">Ett fel uppstod när GPX sparades</string>
|
<string name="error_occurred_saving_gpx">Det gick inte att spara GPX-filen.</string>
|
||||||
<string name="error_calculating_route">Fel vid ruttberäkningen</string>
|
<string name="error_calculating_route">Det gick inte att beräkna rutten.</string>
|
||||||
<string name="error_calculating_route_occured">Ett fel uppstod vid ruttberäkningen</string>
|
<string name="error_calculating_route_occured">Det gick inte att beräkna rutten.</string>
|
||||||
<string name="empty_route_calculated">Fel: Den beräknade rutten är tom</string>
|
<string name="empty_route_calculated">Den beräknade rutten är tom.</string>
|
||||||
<string name="invalid_locations">Ogiltiga koordinater</string>
|
<string name="invalid_locations">Ogiltiga koordinater</string>
|
||||||
<string name="go_back_to_osmand">Tillbaka till OsmAnd-kartan</string>
|
<string name="go_back_to_osmand">Tillbaka till OsmAnd-kartan</string>
|
||||||
<string name="previous_run_crashed">Den senaste körningen av OsmAnd kraschade. Loggen finns i {0}. Rapportera felet och bifoga gärna loggfilen.</string>
|
<string name="previous_run_crashed">Den senaste körningen av OsmAnd kraschade. Loggen finns i {0}. Rapportera felet och bifoga gärna loggfilen.</string>
|
||||||
|
@ -830,7 +830,7 @@
|
||||||
<string name="save_current_track_descr">Spara aktuellt spår till SD-kortet nu.</string>
|
<string name="save_current_track_descr">Spara aktuellt spår till SD-kortet nu.</string>
|
||||||
<string name="save_current_track">Spara aktuellt GPX-spår</string>
|
<string name="save_current_track">Spara aktuellt GPX-spår</string>
|
||||||
<string name="save_track_interval">Loggningsintervall under navigering</string>
|
<string name="save_track_interval">Loggningsintervall under navigering</string>
|
||||||
<string name="save_track_interval_descr">Välj loggningsintervall för inspelning av spår under navigering.</string>
|
<string name="save_track_interval_descr">Ange loggningsintervallet för spårinspelning under navigering</string>
|
||||||
<string name="save_track_to_gpx_descrp">Ett GPX-spår sparas automatiskt i spårmappen under navigering.</string>
|
<string name="save_track_to_gpx_descrp">Ett GPX-spår sparas automatiskt i spårmappen under navigering.</string>
|
||||||
<string name="save_track_to_gpx">Spela in spår automatiskt under navigering</string>
|
<string name="save_track_to_gpx">Spela in spår automatiskt under navigering</string>
|
||||||
<string name="update_tile">Uppdatera kartan</string>
|
<string name="update_tile">Uppdatera kartan</string>
|
||||||
|
@ -928,7 +928,7 @@
|
||||||
<string name="search_street_in_neighborhood_cities">Sök gator i grannstäder</string>
|
<string name="search_street_in_neighborhood_cities">Sök gator i grannstäder</string>
|
||||||
<string name="intermediate_items_sort_return">Mellanliggande mål ordnade för att optimera deras ordning från aktuell position till destinationen.</string>
|
<string name="intermediate_items_sort_return">Mellanliggande mål ordnade för att optimera deras ordning från aktuell position till destinationen.</string>
|
||||||
<string name="intermediate_items_sort_by_distance">Sortera dörr-till-dörr</string>
|
<string name="intermediate_items_sort_by_distance">Sortera dörr-till-dörr</string>
|
||||||
<string name="local_osm_changes_backup_failed">Säkerhetskopieringen av OSM-ändringar misslyckades</string>
|
<string name="local_osm_changes_backup_failed">Det gick inte att säkerhetskopiera OSM-ändringar.</string>
|
||||||
<string name="local_osm_changes_backup">Säkerhetskopiera som OSM-förändring</string>
|
<string name="local_osm_changes_backup">Säkerhetskopiera som OSM-förändring</string>
|
||||||
<string name="delete_point">Ta bort punkt</string>
|
<string name="delete_point">Ta bort punkt</string>
|
||||||
<string name="plugin_distance_point_time">tid</string>
|
<string name="plugin_distance_point_time">tid</string>
|
||||||
|
@ -996,7 +996,7 @@
|
||||||
<string name="maps_define_edit">Definiera/Redigera …</string>
|
<string name="maps_define_edit">Definiera/Redigera …</string>
|
||||||
<string name="base_world_map">Baskarta (världen)</string>
|
<string name="base_world_map">Baskarta (världen)</string>
|
||||||
<string name="av_camera_focus">Typ av kamerafokus</string>
|
<string name="av_camera_focus">Typ av kamerafokus</string>
|
||||||
<string name="av_camera_focus_descr">Välj läge för intern kamerafokus.</string>
|
<string name="av_camera_focus_descr">Kamerafokusläge:</string>
|
||||||
<string name="av_camera_focus_auto">Autofokus</string>
|
<string name="av_camera_focus_auto">Autofokus</string>
|
||||||
<string name="av_camera_focus_hiperfocal">Hyperfokal fokus</string>
|
<string name="av_camera_focus_hiperfocal">Hyperfokal fokus</string>
|
||||||
<string name="av_camera_focus_edof">Utökat skärpedjup (EDOF)</string>
|
<string name="av_camera_focus_edof">Utökat skärpedjup (EDOF)</string>
|
||||||
|
@ -1038,11 +1038,11 @@
|
||||||
<string name="calculate_osmand_route_gpx">Beräkna OsmAnd offline-rutt</string>
|
<string name="calculate_osmand_route_gpx">Beräkna OsmAnd offline-rutt</string>
|
||||||
<string name="app_mode_truck">Lastbil</string>
|
<string name="app_mode_truck">Lastbil</string>
|
||||||
<string name="routing_attr_prefer_motorway_name">Föredra motorvägar</string>
|
<string name="routing_attr_prefer_motorway_name">Föredra motorvägar</string>
|
||||||
<string name="routing_attr_prefer_motorway_description">Föredra motorvägar.</string>
|
<string name="routing_attr_prefer_motorway_description">Föredra motorvägar</string>
|
||||||
<string name="routing_attr_avoid_toll_name">Undvik vägtullar</string>
|
<string name="routing_attr_avoid_toll_name">Undvik vägtullar</string>
|
||||||
<string name="routing_attr_avoid_toll_description">Undvik vägtullar</string>
|
<string name="routing_attr_avoid_toll_description">Undvik vägtullar</string>
|
||||||
<string name="routing_attr_avoid_unpaved_name">Undvik oasfalterade vägar</string>
|
<string name="routing_attr_avoid_unpaved_name">Undvik oasfalterade vägar</string>
|
||||||
<string name="routing_attr_avoid_unpaved_description">Undvik oasfalterade vägar.</string>
|
<string name="routing_attr_avoid_unpaved_description">Undvik oasfalterade vägar</string>
|
||||||
<string name="routing_attr_avoid_ferries_name">Undvik färjor</string>
|
<string name="routing_attr_avoid_ferries_name">Undvik färjor</string>
|
||||||
<string name="routing_attr_avoid_ferries_description">Undvik färjor</string>
|
<string name="routing_attr_avoid_ferries_description">Undvik färjor</string>
|
||||||
<string name="routing_attr_avoid_motorway_name">Undvik motorvägar</string>
|
<string name="routing_attr_avoid_motorway_name">Undvik motorvägar</string>
|
||||||
|
@ -1219,7 +1219,7 @@
|
||||||
<string name="arrival_distance_factor_late">Sent</string>
|
<string name="arrival_distance_factor_late">Sent</string>
|
||||||
<string name="arrival_distance_factor_at_last">De sista metrarna</string>
|
<string name="arrival_distance_factor_at_last">De sista metrarna</string>
|
||||||
<string name="av_camera_pic_size">Fotostorlek</string>
|
<string name="av_camera_pic_size">Fotostorlek</string>
|
||||||
<string name="av_camera_pic_size_descr">Välj fotostorlek för den interna kameran.</string>
|
<string name="av_camera_pic_size_descr">Ställ in kamerans bildstorlek</string>
|
||||||
<string name="rendering_value_car_name">Bil</string>
|
<string name="rendering_value_car_name">Bil</string>
|
||||||
<string name="rendering_value_bicycle_name">Cykel</string>
|
<string name="rendering_value_bicycle_name">Cykel</string>
|
||||||
<string name="rendering_value_pedestrian_name">Fotgängare</string>
|
<string name="rendering_value_pedestrian_name">Fotgängare</string>
|
||||||
|
@ -1347,8 +1347,8 @@
|
||||||
<string name="get_plugin">Hämta</string>
|
<string name="get_plugin">Hämta</string>
|
||||||
<string name="plugin_ski_name">Skidkartsvy</string>
|
<string name="plugin_ski_name">Skidkartsvy</string>
|
||||||
<string name="plugin_nautical_name">Sjökortsvy</string>
|
<string name="plugin_nautical_name">Sjökortsvy</string>
|
||||||
<string name="world_ski_missing">För att kunna visa skidkartor måste den speciella offline-kartan hämtas</string>
|
<string name="world_ski_missing">Ladda ner den speciella offline-kartan för att visa skidåkning.</string>
|
||||||
<string name="nautical_maps_missing">För att kunna visa sjökort måste den speciella offline-kartan hämtas</string>
|
<string name="nautical_maps_missing">Ladda ner den speciella offline-kartan för att visa nautiska detaljer.</string>
|
||||||
<string name="rendering_attr_pisteGrooming_name">Pist- och spårpreparering</string>
|
<string name="rendering_attr_pisteGrooming_name">Pist- och spårpreparering</string>
|
||||||
<string name="free">Ledigt %1$s</string>
|
<string name="free">Ledigt %1$s</string>
|
||||||
<string name="device_memory">Intern lagring</string>
|
<string name="device_memory">Intern lagring</string>
|
||||||
|
@ -1639,7 +1639,7 @@
|
||||||
<string name="favorite_category_select">Välj kategori</string>
|
<string name="favorite_category_select">Välj kategori</string>
|
||||||
<string name="count_of_lines">Antal rader</string>
|
<string name="count_of_lines">Antal rader</string>
|
||||||
<string name="nm">di</string>
|
<string name="nm">di</string>
|
||||||
<string name="nm_h">M</string>
|
<string name="nm_h">knop</string>
|
||||||
<string name="min_mile">min/mi</string>
|
<string name="min_mile">min/mi</string>
|
||||||
<string name="min_km">min/km</string>
|
<string name="min_km">min/km</string>
|
||||||
<string name="m_s">m/s</string>
|
<string name="m_s">m/s</string>
|
||||||
|
@ -1722,12 +1722,12 @@
|
||||||
<string name="osn_reopen_dialog_title">Öppna anteckning igen</string>
|
<string name="osn_reopen_dialog_title">Öppna anteckning igen</string>
|
||||||
<string name="osn_close_dialog_title">Stäng anteckning</string>
|
<string name="osn_close_dialog_title">Stäng anteckning</string>
|
||||||
<string name="osn_add_dialog_success">En anteckning har skapats utan problem</string>
|
<string name="osn_add_dialog_success">En anteckning har skapats utan problem</string>
|
||||||
<string name="osn_add_dialog_error">Ett undantag uppstod: anteckningen skapades inte</string>
|
<string name="osn_add_dialog_error">Det gick inte att skapa anteckningen.</string>
|
||||||
<string name="osn_close_dialog_success">Anteckningen stängdes utan problem</string>
|
<string name="osn_close_dialog_success">Anteckningen stängdes utan problem</string>
|
||||||
<string name="osn_close_dialog_error">Ett undantag uppstod: anteckningen stängdes inte</string>
|
<string name="osn_close_dialog_error">Det gick inte att stänga anteckningen.</string>
|
||||||
<string name="context_menu_item_delete_waypoint">Ta bort GPX-waypoint?</string>
|
<string name="context_menu_item_delete_waypoint">Ta bort GPX-waypoint?</string>
|
||||||
<string name="context_menu_item_edit_waypoint">Redigera GPX-waypoint</string>
|
<string name="context_menu_item_edit_waypoint">Redigera GPX-waypoint</string>
|
||||||
<string name="access_from_map_description">Menyknapp visar panelen och inte menyn.</string>
|
<string name="access_from_map_description">Menyknappen startar instrumentpanelen snarare än menyn</string>
|
||||||
<string name="access_from_map">Tillgång från kartan</string>
|
<string name="access_from_map">Tillgång från kartan</string>
|
||||||
<string name="rendering_attr_currentTrackColor_description">GPX-färg</string>
|
<string name="rendering_attr_currentTrackColor_description">GPX-färg</string>
|
||||||
<string name="rendering_attr_currentTrackWidth_description">GPX-bredd</string>
|
<string name="rendering_attr_currentTrackWidth_description">GPX-bredd</string>
|
||||||
|
@ -1766,7 +1766,7 @@
|
||||||
<string name="route_distance">Avstånd:</string>
|
<string name="route_distance">Avstånd:</string>
|
||||||
<string name="route_duration">Tid:</string>
|
<string name="route_duration">Tid:</string>
|
||||||
<string name="missing_write_external_storage_permission">Appen har inte tillåtelse att använda SD-kortet</string>
|
<string name="missing_write_external_storage_permission">Appen har inte tillåtelse att använda SD-kortet</string>
|
||||||
<string name="no_location_permission">Appen saknar behörigheter för att komma åt platsdata.</string>
|
<string name="no_location_permission">Ge platsåtkomst.</string>
|
||||||
<string name="no_camera_permission">Appen har inte tillräckliga behörigheter för att komma åt kameran.</string>
|
<string name="no_camera_permission">Appen har inte tillräckliga behörigheter för att komma åt kameran.</string>
|
||||||
<string name="no_microphone_permission">Appen har inte tillräckliga behörigheter för att komma åt mikrofonen.</string>
|
<string name="no_microphone_permission">Appen har inte tillräckliga behörigheter för att komma åt mikrofonen.</string>
|
||||||
<string name="select_voice_provider">Välj röstvägledning</string>
|
<string name="select_voice_provider">Välj röstvägledning</string>
|
||||||
|
@ -1785,7 +1785,7 @@
|
||||||
<string name="weekly">Varje vecka</string>
|
<string name="weekly">Varje vecka</string>
|
||||||
<string name="morning">Morgon</string>
|
<string name="morning">Morgon</string>
|
||||||
<string name="shared_string_not_selected">Inte markerad</string>
|
<string name="shared_string_not_selected">Inte markerad</string>
|
||||||
<string name="select_month_and_country">Välj månad och land</string>
|
<string name="select_month_and_country">Månad och land:</string>
|
||||||
<string name="shared_string_type">Typ</string>
|
<string name="shared_string_type">Typ</string>
|
||||||
<string name="starting_point">Startpunkt</string>
|
<string name="starting_point">Startpunkt</string>
|
||||||
<string name="item_removed">Post borttagen</string>
|
<string name="item_removed">Post borttagen</string>
|
||||||
|
@ -1846,7 +1846,7 @@
|
||||||
<string name="osm_live_user_public_name">Publikt namn</string>
|
<string name="osm_live_user_public_name">Publikt namn</string>
|
||||||
<string name="osm_live_hide_user_name">Visa inte mitt namn i rapporter</string>
|
<string name="osm_live_hide_user_name">Visa inte mitt namn i rapporter</string>
|
||||||
<string name="osm_live_month_cost">Månadskostnad</string>
|
<string name="osm_live_month_cost">Månadskostnad</string>
|
||||||
<string name="osm_live_month_cost_desc">Månadsbetalning.</string>
|
<string name="osm_live_month_cost_desc">Månadsbetalning</string>
|
||||||
<string name="osm_live_active">Aktiv</string>
|
<string name="osm_live_active">Aktiv</string>
|
||||||
<string name="osm_live_not_active">Inaktiv</string>
|
<string name="osm_live_not_active">Inaktiv</string>
|
||||||
<string name="osm_live_enter_email">Ange en giltig e-postadress</string>
|
<string name="osm_live_enter_email">Ange en giltig e-postadress</string>
|
||||||
|
@ -2141,13 +2141,13 @@
|
||||||
<string name="select_city">Välj stad</string>
|
<string name="select_city">Välj stad</string>
|
||||||
<string name="select_postcode">Välj postnummer</string>
|
<string name="select_postcode">Välj postnummer</string>
|
||||||
<string name="quick_action_auto_zoom">Autozoomning på/av</string>
|
<string name="quick_action_auto_zoom">Autozoomning på/av</string>
|
||||||
<string name="quick_action_showhide_osmbugs_descr">Ett tryck på denna åtgärdsknapp visar eller döljer OSM-anteckningar på kartan.</string>
|
<string name="quick_action_showhide_osmbugs_descr">Knapp för att visa eller dölja OSM-anteckningar på kartan.</string>
|
||||||
<string name="restart_search">Starta om sökningen</string>
|
<string name="restart_search">Starta om sökningen</string>
|
||||||
<string name="increase_search_radius">Utöka sökradien</string>
|
<string name="increase_search_radius">Utöka sökradien</string>
|
||||||
<string name="nothing_found">Hittade ingenting</string>
|
<string name="nothing_found">Hittade ingenting</string>
|
||||||
<string name="nothing_found_descr">Ändra sökord eller utöka sökradien.</string>
|
<string name="nothing_found_descr">Ändra sökningen eller utöka sökradien.</string>
|
||||||
<string name="sorted_by_distance">Sorterat efter avstånd</string>
|
<string name="sorted_by_distance">Sorterat efter avstånd</string>
|
||||||
<string name="search_favorites">Sök Favoriter</string>
|
<string name="search_favorites">Sök i Favoriter</string>
|
||||||
<string name="shared_string_plugin">Insticksmodul</string>
|
<string name="shared_string_plugin">Insticksmodul</string>
|
||||||
<string name="srtm_color_scheme">Färgschema</string>
|
<string name="srtm_color_scheme">Färgschema</string>
|
||||||
<string name="favorite_group_name">Gruppnamn</string>
|
<string name="favorite_group_name">Gruppnamn</string>
|
||||||
|
@ -2162,12 +2162,12 @@
|
||||||
<string name="shared_string_visible">Synlig</string>
|
<string name="shared_string_visible">Synlig</string>
|
||||||
<string name="online_photos">Online-foton</string>
|
<string name="online_photos">Online-foton</string>
|
||||||
<string name="shared_string_add_photos">Lägg till foton</string>
|
<string name="shared_string_add_photos">Lägg till foton</string>
|
||||||
<string name="no_photos_descr">Vi har inga foton från denna plats.</string>
|
<string name="no_photos_descr">Inga foton här.</string>
|
||||||
<string name="mapillary_widget">Mapillary-widget</string>
|
<string name="mapillary_widget">Mapillary-widget</string>
|
||||||
<string name="mapillary">Mapillary</string>
|
<string name="mapillary">Mapillary</string>
|
||||||
<string name="shared_string_install">Installera</string>
|
<string name="shared_string_install">Installera</string>
|
||||||
<string name="shared_string_permissions">Tillstånd</string>
|
<string name="shared_string_permissions">Tillstånd</string>
|
||||||
<string name="import_gpx_failed_descr">OsmAnd kan inte importera filen. Kolla om OsmAnd har tillåtelse att läsa filen från sin plats.</string>
|
<string name="import_gpx_failed_descr">Kan inte importera filen. Kolla om OsmAnd har tillåtelse att läsa filen.</string>
|
||||||
<string name="distance_moving">Distansen korrigerad</string>
|
<string name="distance_moving">Distansen korrigerad</string>
|
||||||
<string name="enter_new_name">Ange nytt namn</string>
|
<string name="enter_new_name">Ange nytt namn</string>
|
||||||
<string name="shared_string_back">Bakåt</string>
|
<string name="shared_string_back">Bakåt</string>
|
||||||
|
@ -2179,15 +2179,15 @@
|
||||||
<string name="round_trip">Rundtur</string>
|
<string name="round_trip">Rundtur</string>
|
||||||
<string name="make_round_trip">Gör en rundtur</string>
|
<string name="make_round_trip">Gör en rundtur</string>
|
||||||
<string name="shared_string_markers">Markörer</string>
|
<string name="shared_string_markers">Markörer</string>
|
||||||
<string name="routing_attr_avoid_ice_roads_fords_name">Undvik isvägar och vadställen</string>
|
<string name="routing_attr_avoid_ice_roads_fords_name">Inga isvägar eller vadställen</string>
|
||||||
<string name="routing_attr_avoid_ice_roads_fords_description">Undvik isvägar och vadställen.</string>
|
<string name="routing_attr_avoid_ice_roads_fords_description">Undviker isvägar och vadställen.</string>
|
||||||
<string name="my_location">Min plats</string>
|
<string name="my_location">Min plats</string>
|
||||||
<string name="shared_string_sort">Sortera</string>
|
<string name="shared_string_sort">Sortera</string>
|
||||||
<string name="move_to_history">Flytta till historiken</string>
|
<string name="move_to_history">Flytta till historiken</string>
|
||||||
<string name="show_arrows_on_the_map">Visa pilar på kartan</string>
|
<string name="show_arrows_on_the_map">Visa pilar på kartan</string>
|
||||||
<string name="show_passed">Visa passerade</string>
|
<string name="show_passed">Visa passerade</string>
|
||||||
<string name="hide_passed">Dölj passerade</string>
|
<string name="hide_passed">Dölj passerade</string>
|
||||||
<string name="remove_from_map_markers">Tag bort från kartmarkörer\'</string>
|
<string name="remove_from_map_markers">Tag bort från \'Kartmarkörer\'</string>
|
||||||
<string name="shared_string_list">Lista</string>
|
<string name="shared_string_list">Lista</string>
|
||||||
<string name="shared_string_groups">Grupper</string>
|
<string name="shared_string_groups">Grupper</string>
|
||||||
<string name="passed">Senast använt: %1$s</string>
|
<string name="passed">Senast använt: %1$s</string>
|
||||||
|
@ -2229,12 +2229,12 @@
|
||||||
<string name="plan_route">Planera rutt</string>
|
<string name="plan_route">Planera rutt</string>
|
||||||
<string name="marker_save_as_track_descr">Exportera dina markörer till följande GPX-fil:</string>
|
<string name="marker_save_as_track_descr">Exportera dina markörer till följande GPX-fil:</string>
|
||||||
<string name="group_will_be_removed_after_restart">Gruppen kommer att försvinna nästa gång du startar appen.</string>
|
<string name="group_will_be_removed_after_restart">Gruppen kommer att försvinna nästa gång du startar appen.</string>
|
||||||
<string name="date_added">Datum tillagd</string>
|
<string name="date_added">Tillagd</string>
|
||||||
<string name="order_by">Ordna efter:</string>
|
<string name="order_by">Ordna efter:</string>
|
||||||
<string name="all_markers_moved_to_history">Alla kartmarkörer har flyttats till historiken</string>
|
<string name="all_markers_moved_to_history">Alla kartmarkörer har flyttats till historiken</string>
|
||||||
<string name="marker_moved_to_history">Kartmarkören har flyttats till historiken</string>
|
<string name="marker_moved_to_history">Kartmarkören har flyttats till historiken</string>
|
||||||
<string name="do_not_use_animations">Inga animeringar</string>
|
<string name="do_not_use_animations">Inga animeringar</string>
|
||||||
<string name="do_not_use_animations_descr">Inaktiverar animeringar i appen.</string>
|
<string name="do_not_use_animations_descr">Stänger av kartanimationer.</string>
|
||||||
<string name="line">Linje</string>
|
<string name="line">Linje</string>
|
||||||
<string name="save_as_route_point">Spara som ruttpunkter</string>
|
<string name="save_as_route_point">Spara som ruttpunkter</string>
|
||||||
<string name="save_as_line">Spara som linje</string>
|
<string name="save_as_line">Spara som linje</string>
|
||||||
|
@ -2245,14 +2245,14 @@
|
||||||
<string name="measurement_tool_save_as_new_track_descr">Spara punkterna antingen som ruttpunkter eller som en linje.</string>
|
<string name="measurement_tool_save_as_new_track_descr">Spara punkterna antingen som ruttpunkter eller som en linje.</string>
|
||||||
<string name="none_point_error">Lägg till minst en punkt.</string>
|
<string name="none_point_error">Lägg till minst en punkt.</string>
|
||||||
<string name="show_on_map_after_saving">Visa på kartan när den sparats</string>
|
<string name="show_on_map_after_saving">Visa på kartan när den sparats</string>
|
||||||
<string name="quick_action_resume_pause_navigation_descr">Peta på denna knapp för att pausa eller fortsätta med navigeringen.</string>
|
<string name="quick_action_resume_pause_navigation_descr">Knapp för att pausa eller fortsätta med navigeringen.</string>
|
||||||
<string name="quick_action_start_stop_navigation_descr">Peta på denna knapp för att starta eller avsluta navigeringen.</string>
|
<string name="quick_action_start_stop_navigation_descr">Knapp för att starta eller avsluta navigeringen.</string>
|
||||||
<string name="mapillary_image">Mapillary-bild</string>
|
<string name="mapillary_image">Mapillary-bild</string>
|
||||||
<string name="open_mapillary">Öppna Mapillary</string>
|
<string name="open_mapillary">Öppna Mapillary</string>
|
||||||
<string name="improve_coverage_mapillary">Förbättra fototäckning med Mapillary</string>
|
<string name="improve_coverage_mapillary">Förbättra fototäckning med Mapillary</string>
|
||||||
<string name="mapillary_widget_descr">Möjliggör snabba bidrag till Mapillary.</string>
|
<string name="mapillary_widget_descr">Möjliggör snabba bidrag till Mapillary.</string>
|
||||||
<string name="descendingly">nedåt</string>
|
<string name="descendingly">Z-A</string>
|
||||||
<string name="ascendingly">uppåt</string>
|
<string name="ascendingly">A-Z</string>
|
||||||
<string name="marker_moved_to_active">Kartmarkören flyttad till aktiva</string>
|
<string name="marker_moved_to_active">Kartmarkören flyttad till aktiva</string>
|
||||||
<string name="move_all_to_history">Flytta alla till historiken</string>
|
<string name="move_all_to_history">Flytta alla till historiken</string>
|
||||||
<string name="keep_showing_on_map">Fortsätt att visa på kartan</string>
|
<string name="keep_showing_on_map">Fortsätt att visa på kartan</string>
|
||||||
|
@ -2268,9 +2268,9 @@
|
||||||
<string name="import_file">Importera fil</string>
|
<string name="import_file">Importera fil</string>
|
||||||
<string name="wrong_input">Felaktig inmatning</string>
|
<string name="wrong_input">Felaktig inmatning</string>
|
||||||
<string name="waypoints_added_to_map_markers">Waypoints tillagda i kartmarkörer</string>
|
<string name="waypoints_added_to_map_markers">Waypoints tillagda i kartmarkörer</string>
|
||||||
<string name="make_round_trip_descr">Lägg till kopia av startpunkten som destination.</string>
|
<string name="make_round_trip_descr">Lägg till kopia av avgångspunkten som destination.</string>
|
||||||
<string name="fast_coordinates_input">Snabbinmatning av koordinater</string>
|
<string name="fast_coordinates_input">Snabbinmatning av koordinater</string>
|
||||||
<string name="add_location_as_first_point_descr">Lägg till din position som första punkt för att planera den perfekta rutten.</string>
|
<string name="add_location_as_first_point_descr">Lägg till din position som avgångspunkt för att planera den perfekta rutten.</string>
|
||||||
<string name="coordinate_input">Koordinatinmatning</string>
|
<string name="coordinate_input">Koordinatinmatning</string>
|
||||||
<string name="modify_the_search_query">Ändra sökningen.</string>
|
<string name="modify_the_search_query">Ändra sökningen.</string>
|
||||||
<string name="empty_state_osm_edits">Skapa eller ändra OSM-objekt</string>
|
<string name="empty_state_osm_edits">Skapa eller ändra OSM-objekt</string>
|
||||||
|
@ -2380,18 +2380,18 @@
|
||||||
<string name="measurement_tool_snap_to_road_descr">Charlott ansluter punkter med vägar för den valda profilen.</string>
|
<string name="measurement_tool_snap_to_road_descr">Charlott ansluter punkter med vägar för den valda profilen.</string>
|
||||||
<string name="mapillary_menu_descr_tile_cache">Uppdatera rutor för att se aktuell data.</string>
|
<string name="mapillary_menu_descr_tile_cache">Uppdatera rutor för att se aktuell data.</string>
|
||||||
<string name="mapillary_menu_title_tile_cache">Tile-cache</string>
|
<string name="mapillary_menu_title_tile_cache">Tile-cache</string>
|
||||||
<string name="mapillary_menu_filter_description">Filtrera bilderna enligt inlämnare eller datum. Filter tillämpas endast för närbildszoom.</string>
|
<string name="mapillary_menu_filter_description">Filtrera bilder efter avsändare, efter datum eller typ. Endast aktiv i närbildszoom.</string>
|
||||||
<string name="map_widget_ruler_control">Radielinjal</string>
|
<string name="map_widget_ruler_control">Radielinjal</string>
|
||||||
<string name="improve_coverage_install_mapillary_desc">Installera Mapillary för att lägga till en eller flera bilder till denna plats på kartan.</string>
|
<string name="improve_coverage_install_mapillary_desc">Installera Mapillary för att lägga till bilder till denna plats på kartan.</string>
|
||||||
<string name="mapillary_action_descr">Bidra med din egen gatnivåvy på denna plats via Mapillary.</string>
|
<string name="mapillary_action_descr">Dela din vy på gatunivå via Mapillary.</string>
|
||||||
<string name="mapillary_descr">Online gatunivåbilder för alla. Upptäck platser, samarbeta, fånga världen.</string>
|
<string name="mapillary_descr">Online gatunivåbilder för alla. Upptäck platser, samarbeta, fånga världen.</string>
|
||||||
<string name="plugin_mapillary_descr">Gatunivå bilder för alla. Upptäck platser, samarbeta, fånga världen.</string>
|
<string name="plugin_mapillary_descr">Gatunivå bilder för alla. Upptäck platser, samarbeta, fånga världen.</string>
|
||||||
<string name="private_access_routing_req">Din destination är belägen i ett område med privat tillträde. Tillåt tillgång till privata vägar för denna resa?</string>
|
<string name="private_access_routing_req">Din destination är belägen i ett område med privat tillträde. Tillåt anvädning av privata vägar för denna resa\?</string>
|
||||||
<string name="hillshade_menu_download_descr">För att se relief-höjdskuggning på kartan, hämta höjdskuggskartan för denna region.</string>
|
<string name="hillshade_menu_download_descr">Ladda ner \'Hillshade\' överläggskartan för att visa vertikal skuggning.</string>
|
||||||
<string name="hillshade_purchase_header">För att se höjdskuggningsrelief på kartan, behöver du köpa och installera insticksmodulen \'Konturlinjer\'</string>
|
<string name="hillshade_purchase_header">Installera plugin-programmet \'Contour lines\' för att visa graderade vertikala områden.</string>
|
||||||
<string name="hide_from_zoom_level">Dölja från zoom-nivå</string>
|
<string name="hide_from_zoom_level">Dölj start från zoomnivå</string>
|
||||||
<string name="srtm_menu_download_descr">Hämta \'konturlinjekarta\' över denna region.</string>
|
<string name="srtm_menu_download_descr">Ladda ner kartan \"Konturlinje\" för användning i denna region.</string>
|
||||||
<string name="srtm_purchase_header">För att se höjdkurvor på kartan, behöver du köpa och installera insticksmodulen \'Konturlinjer\'</string>
|
<string name="srtm_purchase_header">Köp och installera pluginprogrammet \'Contour lines\' för att visa graderade vertikala områden.</string>
|
||||||
<string name="show_from_zoom_level">Visa från zoom-nivå</string>
|
<string name="show_from_zoom_level">Visa från zoom-nivå</string>
|
||||||
<string name="routing_attr_allow_private_name">Tillåt privat åtkomst</string>
|
<string name="routing_attr_allow_private_name">Tillåt privat åtkomst</string>
|
||||||
<string name="routing_attr_allow_private_description">Tillåta åtkomst till privata områden.</string>
|
<string name="routing_attr_allow_private_description">Tillåta åtkomst till privata områden.</string>
|
||||||
|
@ -2692,7 +2692,7 @@
|
||||||
\nFrån Afghanistan till Zimbabwe, från Australien till USA. Argentina, Brasilien, Kanada, Frankrike, Tyskland, Mexiko, Storbritannien, Spanien, ...
|
\nFrån Afghanistan till Zimbabwe, från Australien till USA. Argentina, Brasilien, Kanada, Frankrike, Tyskland, Mexiko, Storbritannien, Spanien, ...
|
||||||
\n</string>
|
\n</string>
|
||||||
<string name="quick_action_bug_descr">Detta meddelande ingår i kommentarsfältet.</string>
|
<string name="quick_action_bug_descr">Detta meddelande ingår i kommentarsfältet.</string>
|
||||||
<string name="quick_action_category_descr">Välj kategorin du vill spara favoriten i.</string>
|
<string name="quick_action_category_descr">Kategori för att spara favoriten i:</string>
|
||||||
<string name="quick_action_gpx_category_descr">Välj en valfri kategori.</string>
|
<string name="quick_action_gpx_category_descr">Välj en valfri kategori.</string>
|
||||||
<string name="quick_action_poi_list">POI-lista</string>
|
<string name="quick_action_poi_list">POI-lista</string>
|
||||||
<string name="quick_action_sh_poi_descr">Lägga till en eller flera POI-kategorier som ska visas på kartan.</string>
|
<string name="quick_action_sh_poi_descr">Lägga till en eller flera POI-kategorier som ska visas på kartan.</string>
|
||||||
|
|
|
@ -425,7 +425,7 @@
|
||||||
<string name="fav_file_to_load_not_found">GPX-файл з Закладками не знайдено в {0}</string>
|
<string name="fav_file_to_load_not_found">GPX-файл з Закладками не знайдено в {0}</string>
|
||||||
<string name="fav_saved_sucessfully">Закладки збережено в {0}</string>
|
<string name="fav_saved_sucessfully">Закладки збережено в {0}</string>
|
||||||
<string name="no_fav_to_save">Відсутні точки Закладок для збереження</string>
|
<string name="no_fav_to_save">Відсутні точки Закладок для збереження</string>
|
||||||
<string name="shared_string_import">Імпортувати</string>
|
<string name="shared_string_import">Імпорт</string>
|
||||||
<string name="error_occurred_loading_gpx">Не вдалося завантажити GPX.</string>
|
<string name="error_occurred_loading_gpx">Не вдалося завантажити GPX.</string>
|
||||||
<string name="send_report">Надіслати звіт</string>
|
<string name="send_report">Надіслати звіт</string>
|
||||||
<string name="none_region_found">Не знайдено завантаженої мапи на карті пам\'яті.</string>
|
<string name="none_region_found">Не знайдено завантаженої мапи на карті пам\'яті.</string>
|
||||||
|
@ -3851,7 +3851,7 @@
|
||||||
<string name="login_account">Обліковий запис</string>
|
<string name="login_account">Обліковий запис</string>
|
||||||
<string name="user_login">Ім\'я користувача</string>
|
<string name="user_login">Ім\'я користувача</string>
|
||||||
<string name="sign_in_with_open_street_map">Увійти за допомогою OpenStreetMap</string>
|
<string name="sign_in_with_open_street_map">Увійти за допомогою OpenStreetMap</string>
|
||||||
<string name="markers_history">Історія маркерів</string>
|
<string name="markers_history">Історія позначок</string>
|
||||||
<string name="send_files_to_openstreetmap">Надіслати файл GPX на OpenStreetMap</string>
|
<string name="send_files_to_openstreetmap">Надіслати файл GPX на OpenStreetMap</string>
|
||||||
<string name="enter_text_separated">Введіть мітки через коми.</string>
|
<string name="enter_text_separated">Введіть мітки через коми.</string>
|
||||||
<string name="gpx_upload_public_visibility_descr">«Загальнодоступне» означає, що трасування показано загальнодоступно у ваших GPS-трасуваннях та у загальнодоступних списках GPS-трасування, а також у загальнодоступному списку трасування з позначками часу в необробленому вигляді.. Дані, що подаються через API, не посилаються на вашу сторінку трасування. Мітки часу точок трасування недоступні через загальнодоступний API GPS і не впорядковані хронологічно.</string>
|
<string name="gpx_upload_public_visibility_descr">«Загальнодоступне» означає, що трасування показано загальнодоступно у ваших GPS-трасуваннях та у загальнодоступних списках GPS-трасування, а також у загальнодоступному списку трасування з позначками часу в необробленому вигляді.. Дані, що подаються через API, не посилаються на вашу сторінку трасування. Мітки часу точок трасування недоступні через загальнодоступний API GPS і не впорядковані хронологічно.</string>
|
||||||
|
@ -4084,5 +4084,4 @@
|
||||||
<string name="announce_when_exceeded">Повідомляти про перевищення</string>
|
<string name="announce_when_exceeded">Повідомляти про перевищення</string>
|
||||||
<string name="user_points">Користувацькі точки</string>
|
<string name="user_points">Користувацькі точки</string>
|
||||||
<string name="output">Вивід</string>
|
<string name="output">Вивід</string>
|
||||||
<string name="map_quick_action_pattern">%1$s → …</string>
|
|
||||||
</resources>
|
</resources>
|
|
@ -3924,4 +3924,6 @@
|
||||||
<string name="poi_jiu_jitsu">柔術</string>
|
<string name="poi_jiu_jitsu">柔術</string>
|
||||||
<string name="poi_karate">空手道</string>
|
<string name="poi_karate">空手道</string>
|
||||||
<string name="poi_hoops">籃圈</string>
|
<string name="poi_hoops">籃圈</string>
|
||||||
|
<string name="poi_office_diplomatic">外交部</string>
|
||||||
|
<string name="poi_bay_filter">海灣類型</string>
|
||||||
</resources>
|
</resources>
|
|
@ -4074,4 +4074,9 @@
|
||||||
<string name="on_hold">保留</string>
|
<string name="on_hold">保留</string>
|
||||||
<string name="expired">過期</string>
|
<string name="expired">過期</string>
|
||||||
<string name="update_all_maps_added">更新所有新增至 %1$s 的地圖?</string>
|
<string name="update_all_maps_added">更新所有新增至 %1$s 的地圖?</string>
|
||||||
|
<string name="exit_number">出口編號</string>
|
||||||
|
<string name="announce_when_exceeded">超過時宣佈</string>
|
||||||
|
<string name="user_points">使用者點</string>
|
||||||
|
<string name="output">輸出</string>
|
||||||
|
<string name="map_quick_action_pattern">%1$s → …</string>
|
||||||
</resources>
|
</resources>
|
|
@ -12,7 +12,6 @@
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<string name="map_quick_action_pattern">%1$s → …</string>
|
|
||||||
<string name="output">Output</string>
|
<string name="output">Output</string>
|
||||||
<string name="user_points">User points</string>
|
<string name="user_points">User points</string>
|
||||||
<string name="announce_when_exceeded">Announce when exceeded</string>
|
<string name="announce_when_exceeded">Announce when exceeded</string>
|
||||||
|
|
|
@ -70,6 +70,13 @@
|
||||||
android:summary="@string/play_commands_of_currently_selected_voice"
|
android:summary="@string/play_commands_of_currently_selected_voice"
|
||||||
android:title="@string/test_voice_prompts" />
|
android:title="@string/test_voice_prompts" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="test_backup"
|
||||||
|
android:layout="@layout/preference_with_descr"
|
||||||
|
android:persistent="false"
|
||||||
|
android:summary="Register and backup/restore tracks and favorites"
|
||||||
|
android:title="Test backup" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:key="logcat_buffer"
|
android:key="logcat_buffer"
|
||||||
android:layout="@layout/preference_with_descr"
|
android:layout="@layout/preference_with_descr"
|
||||||
|
|
|
@ -3,6 +3,7 @@ package net.osmand;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
|
import android.util.Pair;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
@ -33,8 +34,10 @@ import java.net.URLEncoder;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
import java.util.zip.GZIPOutputStream;
|
import java.util.zip.GZIPOutputStream;
|
||||||
|
|
||||||
public class AndroidNetworkUtils {
|
public class AndroidNetworkUtils {
|
||||||
|
@ -46,6 +49,13 @@ public class AndroidNetworkUtils {
|
||||||
void onResult(String result);
|
void onResult(String result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface OnFilesUploadCallback {
|
||||||
|
@Nullable
|
||||||
|
Map<String, String> getAdditionalParams(@NonNull File file);
|
||||||
|
void onFileUploadProgress(@NonNull File file, int percent);
|
||||||
|
void onFilesUploadDone(@NonNull Map<File, String> errors);
|
||||||
|
}
|
||||||
|
|
||||||
public static class RequestResponse {
|
public static class RequestResponse {
|
||||||
private Request request;
|
private Request request;
|
||||||
private String response;
|
private String response;
|
||||||
|
@ -156,7 +166,7 @@ public class AndroidNetworkUtils {
|
||||||
String params = null;
|
String params = null;
|
||||||
if (parameters != null && parameters.size() > 0) {
|
if (parameters != null && parameters.size() > 0) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
for (Map.Entry<String, String> entry : parameters.entrySet()) {
|
for (Entry<String, String> entry : parameters.entrySet()) {
|
||||||
if (sb.length() > 0) {
|
if (sb.length() > 0) {
|
||||||
sb.append("&");
|
sb.append("&");
|
||||||
}
|
}
|
||||||
|
@ -296,16 +306,18 @@ public class AndroidNetworkUtils {
|
||||||
|
|
||||||
private static final String BOUNDARY = "CowMooCowMooCowCowCow";
|
private static final String BOUNDARY = "CowMooCowMooCowCowCow";
|
||||||
|
|
||||||
public static String uploadFile(String urlText, File file, boolean gzip, Map<String, String> additionalParams) throws IOException {
|
public static String uploadFile(@NonNull String urlText, @NonNull File file, boolean gzip,
|
||||||
return uploadFile(urlText, new FileInputStream(file), file.getName(), gzip, additionalParams);
|
@NonNull Map<String, String> additionalParams, @Nullable Map<String, String> headers) throws IOException {
|
||||||
|
return uploadFile(urlText, new FileInputStream(file), file.getName(), gzip, additionalParams, headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String uploadFile(String urlText, InputStream inputStream, String fileName, boolean gzip, Map<String, String> additionalParams) {
|
public static String uploadFile(@NonNull String urlText, @NonNull InputStream inputStream, @NonNull String fileName, boolean gzip,
|
||||||
|
Map<String, String> additionalParams, @Nullable Map<String, String> headers) {
|
||||||
URL url;
|
URL url;
|
||||||
try {
|
try {
|
||||||
boolean firstPrm = !urlText.contains("?");
|
boolean firstPrm = !urlText.contains("?");
|
||||||
StringBuilder sb = new StringBuilder(urlText);
|
StringBuilder sb = new StringBuilder(urlText);
|
||||||
for (Map.Entry<String, String> entry : additionalParams.entrySet()) {
|
for (Entry<String, String> entry : additionalParams.entrySet()) {
|
||||||
sb.append(firstPrm ? "?" : "&").append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8"));
|
sb.append(firstPrm ? "?" : "&").append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8"));
|
||||||
firstPrm = false;
|
firstPrm = false;
|
||||||
}
|
}
|
||||||
|
@ -320,6 +332,11 @@ public class AndroidNetworkUtils {
|
||||||
conn.setRequestMethod("POST");
|
conn.setRequestMethod("POST");
|
||||||
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
|
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
|
||||||
conn.setRequestProperty("User-Agent", "OsmAnd");
|
conn.setRequestProperty("User-Agent", "OsmAnd");
|
||||||
|
if (headers != null) {
|
||||||
|
for (Entry<String, String> header : headers.entrySet()) {
|
||||||
|
conn.setRequestProperty(header.getKey(), header.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
OutputStream ous = conn.getOutputStream();
|
OutputStream ous = conn.getOutputStream();
|
||||||
ous.write(("--" + BOUNDARY + "\r\n").getBytes());
|
ous.write(("--" + BOUNDARY + "\r\n").getBytes());
|
||||||
|
@ -376,6 +393,58 @@ public class AndroidNetworkUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void uploadFilesAsync(final @NonNull String url,
|
||||||
|
final @NonNull List<File> files,
|
||||||
|
final boolean gzip,
|
||||||
|
final @NonNull Map<String, String> parameters,
|
||||||
|
final @Nullable Map<String, String> headers,
|
||||||
|
final OnFilesUploadCallback callback) {
|
||||||
|
|
||||||
|
new AsyncTask<Void, Object, Map<File, String>>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@NonNull
|
||||||
|
protected Map<File, String> doInBackground(Void... v) {
|
||||||
|
Map<File, String> errors = new HashMap<>();
|
||||||
|
for (File file : files) {
|
||||||
|
publishProgress(file, 0);
|
||||||
|
try {
|
||||||
|
Map<String, String> params = new HashMap<>(parameters);
|
||||||
|
if (callback != null) {
|
||||||
|
Map<String, String> additionalParams = callback.getAdditionalParams(file);
|
||||||
|
if (additionalParams != null) {
|
||||||
|
params.putAll(additionalParams);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String res = uploadFile(url, file, gzip, params, headers);
|
||||||
|
if (res != null) {
|
||||||
|
errors.put(file, res);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
errors.put(file, e.getMessage());
|
||||||
|
}
|
||||||
|
publishProgress(file, 100);
|
||||||
|
}
|
||||||
|
return errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onProgressUpdate(Object... objects) {
|
||||||
|
if (callback != null) {
|
||||||
|
callback.onFileUploadProgress((File) objects[0], (Integer) objects[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(@NonNull Map<File, String> errors) {
|
||||||
|
if (callback != null) {
|
||||||
|
callback.onFilesUploadDone(errors);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null);
|
||||||
|
}
|
||||||
|
|
||||||
private static void showToast(OsmandApplication ctx, String message) {
|
private static void showToast(OsmandApplication ctx, String message) {
|
||||||
ctx.showToastMessage(message);
|
ctx.showToastMessage(message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -184,7 +184,7 @@ public class AnalyticsHelper extends SQLiteOpenHelper {
|
||||||
|
|
||||||
String jsonStr = json.toString();
|
String jsonStr = json.toString();
|
||||||
InputStream inputStream = new ByteArrayInputStream(jsonStr.getBytes());
|
InputStream inputStream = new ByteArrayInputStream(jsonStr.getBytes());
|
||||||
String res = AndroidNetworkUtils.uploadFile(ANALYTICS_UPLOAD_URL, inputStream, ANALYTICS_FILE_NAME, true, additionalData);
|
String res = AndroidNetworkUtils.uploadFile(ANALYTICS_UPLOAD_URL, inputStream, ANALYTICS_FILE_NAME, true, additionalData, null);
|
||||||
if (res != null) {
|
if (res != null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,7 +155,7 @@ public class AudioNotesLayer extends OsmandMapLayer implements
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,6 +169,11 @@ public class AudioNotesLayer extends OsmandMapLayer implements
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> objects, boolean unknownLocation) {
|
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> objects, boolean unknownLocation) {
|
||||||
if (tileBox.getZoom() >= startZoom) {
|
if (tileBox.getZoom() >= startZoom) {
|
||||||
|
|
|
@ -48,6 +48,7 @@ public class DevelopmentSettingsFragment extends BaseSettingsFragment {
|
||||||
setupSimulateInitialStartupPref();
|
setupSimulateInitialStartupPref();
|
||||||
setupShouldShowFreeVersionBannerPref();
|
setupShouldShowFreeVersionBannerPref();
|
||||||
setupTestVoiceCommandsPref();
|
setupTestVoiceCommandsPref();
|
||||||
|
setupTestBackupsPref();
|
||||||
setupLogcatBufferPref();
|
setupLogcatBufferPref();
|
||||||
|
|
||||||
Preference info = findPreference("info");
|
Preference info = findPreference("info");
|
||||||
|
@ -117,6 +118,12 @@ public class DevelopmentSettingsFragment extends BaseSettingsFragment {
|
||||||
testVoiceCommands.setIconSpaceReserved(false);
|
testVoiceCommands.setIconSpaceReserved(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setupTestBackupsPref() {
|
||||||
|
Preference testBackups = findPreference("test_backup");
|
||||||
|
testBackups.setIntent(new Intent(getActivity(), TestBackupActivity.class));
|
||||||
|
testBackups.setIconSpaceReserved(false);
|
||||||
|
}
|
||||||
|
|
||||||
private void setupLogcatBufferPref() {
|
private void setupLogcatBufferPref() {
|
||||||
Preference logcatBuffer = findPreference("logcat_buffer");
|
Preference logcatBuffer = findPreference("logcat_buffer");
|
||||||
logcatBuffer.setIntent(new Intent(getActivity(), LogcatActivity.class));
|
logcatBuffer.setIntent(new Intent(getActivity(), LogcatActivity.class));
|
||||||
|
|
595
OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java
Normal file
595
OsmAnd/src/net/osmand/plus/development/TestBackupActivity.java
Normal file
|
@ -0,0 +1,595 @@
|
||||||
|
package net.osmand.plus.development;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.ProgressDialog;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.os.AsyncTask;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.util.Patterns;
|
||||||
|
import android.util.TypedValue;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.appcompat.widget.Toolbar;
|
||||||
|
|
||||||
|
import net.osmand.AndroidNetworkUtils;
|
||||||
|
import net.osmand.AndroidNetworkUtils.OnFilesUploadCallback;
|
||||||
|
import net.osmand.AndroidNetworkUtils.OnRequestResultListener;
|
||||||
|
import net.osmand.AndroidUtils;
|
||||||
|
import net.osmand.IndexConstants;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.ProgressImplementation;
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.UiUtilities;
|
||||||
|
import net.osmand.plus.UiUtilities.DialogButtonType;
|
||||||
|
import net.osmand.plus.activities.OsmandActionBarActivity;
|
||||||
|
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||||
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class TestBackupActivity extends OsmandActionBarActivity {
|
||||||
|
|
||||||
|
// TODO pass actual sub order id!
|
||||||
|
private static final String TEST_ORDER_ID = "";
|
||||||
|
|
||||||
|
private OsmandApplication app;
|
||||||
|
private OsmandSettings settings;
|
||||||
|
|
||||||
|
private ProgressBar progressBar;
|
||||||
|
private View buttonRegister;
|
||||||
|
private View buttonVerify;
|
||||||
|
private View buttonBackup;
|
||||||
|
private View buttonRestore;
|
||||||
|
private EditText emailEditText;
|
||||||
|
private EditText tokenEditText;
|
||||||
|
private TextView infoView;
|
||||||
|
|
||||||
|
public interface OnResultListener {
|
||||||
|
void onResult(boolean success, @Nullable String result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
app = getMyApplication();
|
||||||
|
settings = app.getSettings();
|
||||||
|
final WeakReference<TestBackupActivity> activityRef = new WeakReference<>(this);
|
||||||
|
|
||||||
|
boolean nightMode = !app.getSettings().isLightContent();
|
||||||
|
int themeId = nightMode ? R.style.OsmandDarkTheme_NoActionbar : R.style.OsmandLightTheme_NoActionbar;
|
||||||
|
setTheme(themeId);
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.test_backup_layout);
|
||||||
|
Toolbar tb = findViewById(R.id.toolbar);
|
||||||
|
tb.setTitle("Backup test");
|
||||||
|
|
||||||
|
tb.setClickable(true);
|
||||||
|
Drawable icBack = ((OsmandApplication) getApplication()).getUIUtilities().getIcon(AndroidUtils.getNavigationIconResId(app));
|
||||||
|
tb.setNavigationIcon(icBack);
|
||||||
|
tb.setNavigationContentDescription(R.string.access_shared_string_navigate_up);
|
||||||
|
tb.setBackgroundColor(getResources().getColor(resolveResourceId(this, R.attr.pstsTabBackground)));
|
||||||
|
tb.setTitleTextColor(getResources().getColor(resolveResourceId(this, R.attr.pstsTextColor)));
|
||||||
|
tb.setNavigationOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(final View v) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
buttonRegister = findViewById(R.id.btn_register);
|
||||||
|
UiUtilities.setupDialogButton(nightMode, buttonRegister, DialogButtonType.PRIMARY, "Register");
|
||||||
|
buttonVerify = findViewById(R.id.btn_verify);
|
||||||
|
UiUtilities.setupDialogButton(nightMode, buttonVerify, DialogButtonType.PRIMARY, "Verify");
|
||||||
|
buttonBackup = findViewById(R.id.btn_backup);
|
||||||
|
UiUtilities.setupDialogButton(nightMode, buttonBackup, DialogButtonType.PRIMARY, "Backup");
|
||||||
|
buttonRestore = findViewById(R.id.btn_restore);
|
||||||
|
UiUtilities.setupDialogButton(nightMode, buttonRestore, DialogButtonType.PRIMARY, "Restore");
|
||||||
|
|
||||||
|
tokenEditText = findViewById(R.id.edit_token);
|
||||||
|
infoView = findViewById(R.id.text_info);
|
||||||
|
progressBar = findViewById(R.id.progress_bar);
|
||||||
|
|
||||||
|
buttonVerify.setEnabled(false);
|
||||||
|
emailEditText = findViewById(R.id.edit_email);
|
||||||
|
String email = settings.BACKUP_USER_EMAIL.get();
|
||||||
|
if (!Algorithms.isEmpty(email)) {
|
||||||
|
emailEditText.setText(email);
|
||||||
|
}
|
||||||
|
buttonRegister.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
String email = emailEditText.getText().toString();
|
||||||
|
if (isEmailValid(email)) {
|
||||||
|
buttonRegister.setEnabled(false);
|
||||||
|
settings.BACKUP_USER_EMAIL.set(email);
|
||||||
|
progressBar.setVisibility(View.VISIBLE);
|
||||||
|
registerUser(email, new OnResultListener() {
|
||||||
|
@Override
|
||||||
|
public void onResult(boolean success, @Nullable String result) {
|
||||||
|
TestBackupActivity a = activityRef.get();
|
||||||
|
if (AndroidUtils.isActivityNotDestroyed(a)) {
|
||||||
|
a.progressBar.setVisibility(View.GONE);
|
||||||
|
a.buttonRegister.setEnabled(!success);
|
||||||
|
a.buttonVerify.setEnabled(success);
|
||||||
|
a.tokenEditText.requestFocus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
emailEditText.requestFocus();
|
||||||
|
emailEditText.setError(getString(R.string.osm_live_enter_email));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
buttonVerify.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
String token = tokenEditText.getText().toString();
|
||||||
|
if (isTokenValid(token)) {
|
||||||
|
buttonVerify.setEnabled(false);
|
||||||
|
progressBar.setVisibility(View.VISIBLE);
|
||||||
|
registerDevice(token, new OnResultListener() {
|
||||||
|
@Override
|
||||||
|
public void onResult(boolean success, @Nullable String result) {
|
||||||
|
TestBackupActivity a = activityRef.get();
|
||||||
|
if (AndroidUtils.isActivityNotDestroyed(a)) {
|
||||||
|
a.progressBar.setVisibility(View.GONE);
|
||||||
|
a.buttonVerify.setEnabled(!success);
|
||||||
|
a.loadBackupInfo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
tokenEditText.requestFocus();
|
||||||
|
tokenEditText.setError("Token is not valid");
|
||||||
|
buttonVerify.setEnabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
buttonBackup.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
uploadFiles();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
buttonRestore.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
loadBackupInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadBackupInfo() {
|
||||||
|
if (!Algorithms.isEmpty(getDeviceId()) && !Algorithms.isEmpty(getAccessToken())) {
|
||||||
|
final WeakReference<TestBackupActivity> activityRef = new WeakReference<>(this);
|
||||||
|
progressBar.setVisibility(View.VISIBLE);
|
||||||
|
loadBackupInfo(new OnResultListener() {
|
||||||
|
@Override
|
||||||
|
public void onResult(boolean success, @Nullable String result) {
|
||||||
|
TestBackupActivity a = activityRef.get();
|
||||||
|
if (AndroidUtils.isActivityNotDestroyed(a)) {
|
||||||
|
a.progressBar.setVisibility(View.GONE);
|
||||||
|
a.infoView.setText(result);
|
||||||
|
a.infoView.requestFocus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isEmailValid(CharSequence target) {
|
||||||
|
return (!TextUtils.isEmpty(target) && Patterns.EMAIL_ADDRESS.matcher(target).matches());
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getOrderId() {
|
||||||
|
return TEST_ORDER_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getDeviceId() {
|
||||||
|
return settings.BACKUP_DEVICE_ID.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getAccessToken() {
|
||||||
|
return settings.BACKUP_ACCESS_TOKEN.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerUser(@NonNull String email, @Nullable final OnResultListener listener) {
|
||||||
|
Map<String, String> params = new HashMap<>();
|
||||||
|
params.put("email", email);
|
||||||
|
params.put("orderid", getOrderId());
|
||||||
|
params.put("deviceid", app.getUserAndroidId());
|
||||||
|
AndroidNetworkUtils.sendRequestAsync(app, "https://osmand.net/userdata/user-register", params, "Register user", true, true, new OnRequestResultListener() {
|
||||||
|
@Override
|
||||||
|
public void onResult(String resultJson) {
|
||||||
|
boolean success = false;
|
||||||
|
if (!Algorithms.isEmpty(resultJson)) {
|
||||||
|
try {
|
||||||
|
// {"status":"ok"}
|
||||||
|
JSONObject result = new JSONObject(resultJson);
|
||||||
|
String status = result.getString("status");
|
||||||
|
success = status.equals("ok");
|
||||||
|
app.showToastMessage(success
|
||||||
|
? "You have been registered successfully. Please check for email with activation code."
|
||||||
|
: "User registration error: " + status);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
app.showToastMessage("User registration error: json parsing");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
app.showToastMessage("User registration error: empty response");
|
||||||
|
}
|
||||||
|
if (listener != null) {
|
||||||
|
listener.onResult(success, resultJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerDevice(String token, @Nullable final OnResultListener listener) {
|
||||||
|
Map<String, String> params = new HashMap<>();
|
||||||
|
params.put("email", settings.BACKUP_USER_EMAIL.get());
|
||||||
|
params.put("orderid", getOrderId());
|
||||||
|
params.put("deviceid", app.getUserAndroidId());
|
||||||
|
params.put("token", token);
|
||||||
|
AndroidNetworkUtils.sendRequestAsync(app, "https://osmand.net/userdata/device-register", params, "Register device", true, true, new OnRequestResultListener() {
|
||||||
|
@Override
|
||||||
|
public void onResult(String resultJson) {
|
||||||
|
boolean success = false;
|
||||||
|
if (!Algorithms.isEmpty(resultJson)) {
|
||||||
|
try {
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
"id": 1034,
|
||||||
|
"userid": 1033,
|
||||||
|
"deviceid": "2fa8080d2985a777",
|
||||||
|
"orderid": "460000687003939",
|
||||||
|
"accesstoken": "4bc0a61f-397a-4c3e-9ffc-db382ec00372",
|
||||||
|
"udpatetime": "Apr 11, 2021, 11:32:20 AM"
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
JSONObject result = new JSONObject(resultJson);
|
||||||
|
settings.BACKUP_DEVICE_ID.set(result.getString("id"));
|
||||||
|
settings.BACKUP_USER_ID.set(result.getString("userid"));
|
||||||
|
settings.BACKUP_NATIVE_DEVICE_ID.set(result.getString("deviceid"));
|
||||||
|
settings.BACKUP_ACCESS_TOKEN.set(result.getString("accesstoken"));
|
||||||
|
settings.BACKUP_ACCESS_TOKEN_UPDATE_TIME.set(result.getString("udpatetime"));
|
||||||
|
success = true;
|
||||||
|
app.showToastMessage("Device have been registered successfully");
|
||||||
|
} catch (JSONException e) {
|
||||||
|
app.showToastMessage("Device registration error: json parsing");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
app.showToastMessage("Device registration error: empty response");
|
||||||
|
}
|
||||||
|
if (listener != null) {
|
||||||
|
listener.onResult(success, resultJson);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void uploadFiles() {
|
||||||
|
LoadGpxTask loadGpxTask = new LoadGpxTask(this, new LoadGpxTask.OnLoadGpxListener() {
|
||||||
|
@Override
|
||||||
|
public void onLoadGpxDone(@NonNull List<GpxInfo> result) {
|
||||||
|
uploadFiles(result);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
loadGpxTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void uploadFiles(List<GpxInfo> gpxFiles) {
|
||||||
|
//{"status":"ok"}
|
||||||
|
final WeakReference<TestBackupActivity> activityRef = new WeakReference<>(this);
|
||||||
|
|
||||||
|
Map<String, String> params = new HashMap<>();
|
||||||
|
params.put("deviceid", getDeviceId());
|
||||||
|
params.put("accessToken", getAccessToken());
|
||||||
|
Map<String, String> headers = new HashMap<>();
|
||||||
|
headers.put("Accept-Encoding", "deflate, gzip");
|
||||||
|
|
||||||
|
final Map<File, GpxInfo> gpxInfos = new HashMap<>();
|
||||||
|
for (GpxInfo gpxFile : gpxFiles) {
|
||||||
|
gpxInfos.put(gpxFile.file, gpxFile);
|
||||||
|
}
|
||||||
|
final List<File> files = new ArrayList<>(gpxInfos.keySet());
|
||||||
|
File favoritesFile = app.getFavorites().getExternalFile();
|
||||||
|
files.add(favoritesFile);
|
||||||
|
|
||||||
|
final ProgressImplementation progress = ProgressImplementation.createProgressDialog(this,
|
||||||
|
"Create backup", "Uploading " + files.size() + " file(s) to server", ProgressDialog.STYLE_HORIZONTAL);
|
||||||
|
|
||||||
|
AndroidNetworkUtils.uploadFilesAsync("https://osmand.net/userdata/upload-file", files, true, params, headers, new OnFilesUploadCallback() {
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public Map<String, String> getAdditionalParams(@NonNull File file) {
|
||||||
|
GpxInfo gpxInfo = gpxInfos.get(file);
|
||||||
|
Map<String, String> additionaParams = new HashMap<>();
|
||||||
|
additionaParams.put("name", gpxInfo == null ? file.getName() : gpxInfo.getFileName(true));
|
||||||
|
additionaParams.put("type", Algorithms.getFileExtension(file));
|
||||||
|
return additionaParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFileUploadProgress(@NonNull File file, int percent) {
|
||||||
|
Activity a = activityRef.get();
|
||||||
|
if (AndroidUtils.isActivityNotDestroyed(a)) {
|
||||||
|
if (percent < 100) {
|
||||||
|
progress.startTask(file.getName(), percent);
|
||||||
|
} else {
|
||||||
|
progress.finishTask();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFilesUploadDone(@NonNull Map<File, String> errors) {
|
||||||
|
Activity a = activityRef.get();
|
||||||
|
if (AndroidUtils.isActivityNotDestroyed(a)) {
|
||||||
|
app.runInUIThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
if (progress.getDialog().isShowing()) {
|
||||||
|
progress.getDialog().dismiss();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
//ignored
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 300);
|
||||||
|
app.showToastMessage("Uploaded " + (files.size() - errors.size() + " files" +
|
||||||
|
(errors.size() > 0 ? ". Errors: " + errors.size() : "")));
|
||||||
|
loadBackupInfo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadBackupInfo(@Nullable final OnResultListener listener) {
|
||||||
|
Map<String, String> params = new HashMap<>();
|
||||||
|
params.put("deviceid", getDeviceId());
|
||||||
|
params.put("accessToken", getAccessToken());
|
||||||
|
AndroidNetworkUtils.sendRequestAsync(app, "https://osmand.net/userdata/list-files", params, "Get backup info", true, false, new OnRequestResultListener() {
|
||||||
|
@Override
|
||||||
|
public void onResult(String resultJson) {
|
||||||
|
boolean success = false;
|
||||||
|
StringBuilder resultString = new StringBuilder();
|
||||||
|
if (!Algorithms.isEmpty(resultJson)) {
|
||||||
|
try {
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
"totalZipSize": 21792,
|
||||||
|
"totalFileSize": 185920,
|
||||||
|
"totalFiles": 1,
|
||||||
|
"totalFileVersions": 2,
|
||||||
|
"uniqueFiles": [
|
||||||
|
{
|
||||||
|
"userid": 1033,
|
||||||
|
"id": 7,
|
||||||
|
"deviceid": 1034,
|
||||||
|
"filesize": 92960,
|
||||||
|
"type": "gpx",
|
||||||
|
"name": "test/Day 2.gpx",
|
||||||
|
"updatetime": "Apr 11, 2021, 1:49:01 PM",
|
||||||
|
"updatetimems": 1618141741822,
|
||||||
|
"zipSize": 10896
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"deviceid": 1034
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
JSONObject result = new JSONObject(resultJson);
|
||||||
|
String totalZipSize = result.getString("totalZipSize");
|
||||||
|
String totalFiles = result.getString("totalFiles");
|
||||||
|
String totalFileVersions = result.getString("totalFileVersions");
|
||||||
|
JSONArray files = result.getJSONArray("uniqueFiles");
|
||||||
|
resultString.append("Total files: ").append(totalFiles).append("\n");
|
||||||
|
resultString.append("Total zip size: ").append(AndroidUtils.formatSize(app, Long.parseLong(totalZipSize))).append("\n");
|
||||||
|
resultString.append("Total file versions: ").append(totalFileVersions);
|
||||||
|
|
||||||
|
success = true;
|
||||||
|
} catch (JSONException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (listener != null) {
|
||||||
|
listener.onResult(success, resultString.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isTokenValid(String token) {
|
||||||
|
return token.matches("[0-9]+");
|
||||||
|
}
|
||||||
|
|
||||||
|
private int resolveResourceId(final Activity activity, final int attr) {
|
||||||
|
final TypedValue typedvalueattr = new TypedValue();
|
||||||
|
activity.getTheme().resolveAttribute(attr, typedvalueattr, true);
|
||||||
|
return typedvalueattr.resourceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class LoadGpxTask extends AsyncTask<Activity, GpxInfo, List<GpxInfo>> {
|
||||||
|
|
||||||
|
private final OsmandApplication app;
|
||||||
|
private final OnLoadGpxListener listener;
|
||||||
|
private final WeakReference<Activity> activityRef;
|
||||||
|
private List<GpxInfo> result;
|
||||||
|
private ProgressImplementation progress;
|
||||||
|
|
||||||
|
interface OnLoadGpxListener {
|
||||||
|
void onLoadGpxDone(@NonNull List<GpxInfo> result);
|
||||||
|
}
|
||||||
|
|
||||||
|
LoadGpxTask(@NonNull Activity activity, @Nullable OnLoadGpxListener listener) {
|
||||||
|
this.activityRef = new WeakReference<>(activity);
|
||||||
|
this.app = (OsmandApplication) activity.getApplication();
|
||||||
|
this.listener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<GpxInfo> getResult() {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
protected List<GpxInfo> doInBackground(Activity... params) {
|
||||||
|
List<GpxInfo> result = new ArrayList<>();
|
||||||
|
loadGPXData(app.getAppPath(IndexConstants.GPX_INDEX_DIR), result, this);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadFile(GpxInfo... loaded) {
|
||||||
|
publishProgress(loaded);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPreExecute() {
|
||||||
|
Activity a = activityRef.get();
|
||||||
|
if (AndroidUtils.isActivityNotDestroyed(a)) {
|
||||||
|
progress = ProgressImplementation.createProgressDialog(a,
|
||||||
|
"Create backup", "Collecting gpx files...", ProgressDialog.STYLE_HORIZONTAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onProgressUpdate(GpxInfo... values) {
|
||||||
|
Activity a = activityRef.get();
|
||||||
|
if (AndroidUtils.isActivityNotDestroyed(a)) {
|
||||||
|
progress.startTask(values[0].getFileName(true), -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(@NonNull List<GpxInfo> result) {
|
||||||
|
this.result = result;
|
||||||
|
if (listener != null) {
|
||||||
|
listener.onLoadGpxDone(result);
|
||||||
|
}
|
||||||
|
Activity a = activityRef.get();
|
||||||
|
if (AndroidUtils.isActivityNotDestroyed(a)) {
|
||||||
|
progress.finishTask();
|
||||||
|
app.runInUIThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
if (progress.getDialog().isShowing()) {
|
||||||
|
progress.getDialog().dismiss();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
//ignored
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 300);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadGPXData(File mapPath, List<GpxInfo> result, LoadGpxTask loadTask) {
|
||||||
|
if (mapPath.canRead()) {
|
||||||
|
List<GpxInfo> progress = new ArrayList<>();
|
||||||
|
loadGPXFolder(mapPath, result, loadTask, progress, "");
|
||||||
|
if (!progress.isEmpty()) {
|
||||||
|
loadTask.loadFile(progress.toArray(new GpxInfo[0]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadGPXFolder(File mapPath, List<GpxInfo> result, LoadGpxTask loadTask, List<GpxInfo> progress,
|
||||||
|
String gpxSubfolder) {
|
||||||
|
File[] listFiles = mapPath.listFiles();
|
||||||
|
if (listFiles != null) {
|
||||||
|
for (File gpxFile : listFiles) {
|
||||||
|
if (gpxFile.isDirectory()) {
|
||||||
|
String sub = gpxSubfolder.length() == 0 ? gpxFile.getName() : gpxSubfolder + "/"
|
||||||
|
+ gpxFile.getName();
|
||||||
|
loadGPXFolder(gpxFile, result, loadTask, progress, sub);
|
||||||
|
} else if (gpxFile.isFile() && gpxFile.getName().toLowerCase().endsWith(IndexConstants.GPX_FILE_EXT)) {
|
||||||
|
GpxInfo info = new GpxInfo();
|
||||||
|
info.subfolder = gpxSubfolder;
|
||||||
|
info.file = gpxFile;
|
||||||
|
result.add(info);
|
||||||
|
progress.add(info);
|
||||||
|
if (progress.size() > 7) {
|
||||||
|
loadTask.loadFile(progress.toArray(new GpxInfo[0]));
|
||||||
|
progress.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class GpxInfo {
|
||||||
|
public File file;
|
||||||
|
public String subfolder;
|
||||||
|
|
||||||
|
private String name = null;
|
||||||
|
private int sz = -1;
|
||||||
|
private String fileName = null;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
if (name == null) {
|
||||||
|
name = formatName(file.getName());
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String formatName(String name) {
|
||||||
|
int ext = name.lastIndexOf('.');
|
||||||
|
if (ext != -1) {
|
||||||
|
name = name.substring(0, ext);
|
||||||
|
}
|
||||||
|
return name.replace('_', ' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Usage: AndroidUtils.formatSize(v.getContext(), getSize() * 1024l);
|
||||||
|
public int getSize() {
|
||||||
|
if (sz == -1) {
|
||||||
|
if (file == null) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
sz = (int) ((file.length() + 512) >> 10);
|
||||||
|
}
|
||||||
|
return sz;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getFileDate() {
|
||||||
|
if (file == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return file.lastModified();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFileName(boolean includeSubfolder) {
|
||||||
|
String result;
|
||||||
|
if (fileName != null) {
|
||||||
|
result = fileName;
|
||||||
|
} else {
|
||||||
|
if (file == null) {
|
||||||
|
result = "";
|
||||||
|
} else {
|
||||||
|
result = fileName = file.getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (includeSubfolder && !Algorithms.isEmpty(subfolder)) {
|
||||||
|
result = subfolder + "/" + result;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,8 +18,8 @@ import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.PluginsFragment;
|
import net.osmand.plus.activities.PluginsFragment;
|
||||||
import net.osmand.plus.dashboard.DashboardOnMap.DashboardType;
|
import net.osmand.plus.dashboard.DashboardOnMap.DashboardType;
|
||||||
import net.osmand.plus.mapmarkers.MapMarkersDialogFragment;
|
|
||||||
import net.osmand.plus.itinerary.ItineraryGroup;
|
import net.osmand.plus.itinerary.ItineraryGroup;
|
||||||
|
import net.osmand.plus.mapmarkers.MapMarkersDialogFragment;
|
||||||
import net.osmand.plus.mapsource.EditMapSourceDialogFragment;
|
import net.osmand.plus.mapsource.EditMapSourceDialogFragment;
|
||||||
import net.osmand.plus.openplacereviews.OPRConstants;
|
import net.osmand.plus.openplacereviews.OPRConstants;
|
||||||
import net.osmand.plus.openplacereviews.OprAuthHelper.OprAuthorizationListener;
|
import net.osmand.plus.openplacereviews.OprAuthHelper.OprAuthorizationListener;
|
||||||
|
@ -259,7 +259,7 @@ public class IntentHelper {
|
||||||
String path = intent.getStringExtra(TRACK_FILE_NAME);
|
String path = intent.getStringExtra(TRACK_FILE_NAME);
|
||||||
String name = intent.getStringExtra(RETURN_SCREEN_NAME);
|
String name = intent.getStringExtra(RETURN_SCREEN_NAME);
|
||||||
boolean currentRecording = intent.getBooleanExtra(CURRENT_RECORDING, false);
|
boolean currentRecording = intent.getBooleanExtra(CURRENT_RECORDING, false);
|
||||||
TrackMenuFragment.showInstance(mapActivity, path, currentRecording, null, name, null);
|
TrackMenuFragment.showInstance(mapActivity, path, currentRecording, name, null);
|
||||||
mapActivity.setIntent(null);
|
mapActivity.setIntent(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,10 +153,12 @@ public class SelectedGpxMenuBuilder extends MenuBuilder {
|
||||||
OsmAndFormatter.getFormattedSpeed((float) selectedPoint.speed, app), 0, null,
|
OsmAndFormatter.getFormattedSpeed((float) selectedPoint.speed, app), 0, null,
|
||||||
false, null, false, 0, false, false, false, null, false);
|
false, null, false, 0, false, false, false, null, false);
|
||||||
}
|
}
|
||||||
|
if (!Float.isNaN(selectedGpxPoint.getBearing())) {
|
||||||
buildRow(view, getThemedIcon(R.drawable.ic_action_relative_bearing), null, app.getString(R.string.shared_string_bearing),
|
buildRow(view, getThemedIcon(R.drawable.ic_action_relative_bearing), null, app.getString(R.string.shared_string_bearing),
|
||||||
OsmAndFormatter.getFormattedAzimuth(selectedGpxPoint.getBearing(), app), 0, null,
|
OsmAndFormatter.getFormattedAzimuth(selectedGpxPoint.getBearing(), app), 0, null,
|
||||||
false, null, false, 0, false, false, false, null, false);
|
false, null, false, 0, false, false, false, null, false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void buildCategoryView(View view, String name) {
|
private void buildCategoryView(View view, String name) {
|
||||||
if (!isFirstRow()) {
|
if (!isFirstRow()) {
|
||||||
|
|
|
@ -43,11 +43,8 @@ public class SelectedGpxMenuController extends MenuController {
|
||||||
@Override
|
@Override
|
||||||
public void buttonPressed() {
|
public void buttonPressed() {
|
||||||
mapContextMenu.close();
|
mapContextMenu.close();
|
||||||
WptPt wptPt = selectedGpxPoint.selectedPoint;
|
|
||||||
LatLon latLon = new LatLon(wptPt.lat, wptPt.lon);
|
|
||||||
SelectedGpxFile selectedGpxFile = selectedGpxPoint.getSelectedGpxFile();
|
SelectedGpxFile selectedGpxFile = selectedGpxPoint.getSelectedGpxFile();
|
||||||
String path = selectedGpxFile.getGpxFile().path;
|
TrackMenuFragment.showInstance(mapActivity, selectedGpxFile, selectedGpxPoint, null, null, false);
|
||||||
TrackMenuFragment.showInstance(mapActivity, path, selectedGpxFile.isShowCurrentTrack(), latLon, null, null);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
leftTitleButtonController.caption = mapActivity.getString(R.string.shared_string_open_track);
|
leftTitleButtonController.caption = mapActivity.getString(R.string.shared_string_open_track);
|
||||||
|
@ -215,11 +212,15 @@ public class SelectedGpxMenuController extends MenuController {
|
||||||
|
|
||||||
public static class SelectedGpxPoint {
|
public static class SelectedGpxPoint {
|
||||||
|
|
||||||
|
private final WptPt prevPoint;
|
||||||
|
private final WptPt nextPoint;
|
||||||
private final WptPt selectedPoint;
|
private final WptPt selectedPoint;
|
||||||
private final SelectedGpxFile selectedGpxFile;
|
private final SelectedGpxFile selectedGpxFile;
|
||||||
private final float bearing;
|
private final float bearing;
|
||||||
|
|
||||||
public SelectedGpxPoint(SelectedGpxFile selectedGpxFile, WptPt selectedPoint, float bearing) {
|
public SelectedGpxPoint(SelectedGpxFile selectedGpxFile, WptPt selectedPoint, WptPt prevPoint, WptPt nextPoint, float bearing) {
|
||||||
|
this.prevPoint = prevPoint;
|
||||||
|
this.nextPoint = nextPoint;
|
||||||
this.selectedPoint = selectedPoint;
|
this.selectedPoint = selectedPoint;
|
||||||
this.selectedGpxFile = selectedGpxFile;
|
this.selectedGpxFile = selectedGpxFile;
|
||||||
this.bearing = bearing;
|
this.bearing = bearing;
|
||||||
|
@ -236,5 +237,13 @@ public class SelectedGpxMenuController extends MenuController {
|
||||||
public float getBearing() {
|
public float getBearing() {
|
||||||
return bearing;
|
return bearing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public WptPt getPrevPoint() {
|
||||||
|
return prevPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public WptPt getNextPoint() {
|
||||||
|
return nextPoint;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -17,6 +17,7 @@ import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.base.PointImageDrawable;
|
import net.osmand.plus.base.PointImageDrawable;
|
||||||
import net.osmand.plus.mapcontextmenu.MenuBuilder;
|
import net.osmand.plus.mapcontextmenu.MenuBuilder;
|
||||||
import net.osmand.plus.mapcontextmenu.MenuController;
|
import net.osmand.plus.mapcontextmenu.MenuController;
|
||||||
|
import net.osmand.plus.mapcontextmenu.controllers.SelectedGpxMenuController.SelectedGpxPoint;
|
||||||
import net.osmand.plus.mapmarkers.MapMarker;
|
import net.osmand.plus.mapmarkers.MapMarker;
|
||||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||||
import net.osmand.plus.track.TrackMenuFragment;
|
import net.osmand.plus.track.TrackMenuFragment;
|
||||||
|
@ -49,8 +50,8 @@ public class WptPtMenuController extends MenuController {
|
||||||
GpxSelectionHelper selectionHelper = mapActivity.getMyApplication().getSelectedGpxHelper();
|
GpxSelectionHelper selectionHelper = mapActivity.getMyApplication().getSelectedGpxHelper();
|
||||||
SelectedGpxFile selectedGpxFile = selectionHelper.getSelectedGPXFile(wpt);
|
SelectedGpxFile selectedGpxFile = selectionHelper.getSelectedGPXFile(wpt);
|
||||||
if (selectedGpxFile != null) {
|
if (selectedGpxFile != null) {
|
||||||
String path = selectedGpxFile.getGpxFile().path;
|
SelectedGpxPoint gpxPoint = new SelectedGpxPoint(selectedGpxFile, wpt, null, null, Float.NaN);
|
||||||
TrackMenuFragment.showInstance(mapActivity, path, selectedGpxFile.isShowCurrentTrack(), new LatLon(wpt.lon, wpt.lat), null, null);
|
TrackMenuFragment.showInstance(mapActivity, selectedGpxFile, gpxPoint, null, null, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,6 @@ import com.github.mikephil.charting.listener.OnChartGestureListener;
|
||||||
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
|
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.GPXUtilities;
|
|
||||||
import net.osmand.GPXUtilities.GPXFile;
|
import net.osmand.GPXUtilities.GPXFile;
|
||||||
import net.osmand.GPXUtilities.GPXTrackAnalysis;
|
import net.osmand.GPXUtilities.GPXTrackAnalysis;
|
||||||
import net.osmand.GPXUtilities.TrkSegment;
|
import net.osmand.GPXUtilities.TrkSegment;
|
||||||
|
@ -43,6 +42,7 @@ import net.osmand.plus.helpers.GpxUiHelper;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetAxisType;
|
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetAxisType;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType;
|
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper.OrderedLineDataSet;
|
import net.osmand.plus.helpers.GpxUiHelper.OrderedLineDataSet;
|
||||||
|
import net.osmand.plus.myplaces.GPXItemPagerAdapter;
|
||||||
import net.osmand.plus.views.layers.GPXLayer;
|
import net.osmand.plus.views.layers.GPXLayer;
|
||||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory;
|
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory;
|
||||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController;
|
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController;
|
||||||
|
@ -299,18 +299,7 @@ public class TrackDetailsMenu {
|
||||||
List<ILineDataSet> ds = lineData != null ? lineData.getDataSets() : null;
|
List<ILineDataSet> ds = lineData != null ? lineData.getDataSets() : null;
|
||||||
GpxDisplayItem gpxItem = getGpxItem();
|
GpxDisplayItem gpxItem = getGpxItem();
|
||||||
if (ds != null && ds.size() > 0 && gpxItem != null) {
|
if (ds != null && ds.size() > 0 && gpxItem != null) {
|
||||||
for (GPXUtilities.Track t : gpxItem.group.getGpx().tracks) {
|
this.segment = GPXItemPagerAdapter.getSegmentForAnalysis(gpxItem, gpxItem.analysis);
|
||||||
for (TrkSegment s : t.segments) {
|
|
||||||
if (s.points.size() > 0 && s.points.get(0).equals(gpxItem.analysis.locationStart)) {
|
|
||||||
segment = s;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (segment != null) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.segment = segment;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return segment;
|
return segment;
|
||||||
|
|
|
@ -6,6 +6,7 @@ import android.graphics.Canvas;
|
||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
import android.graphics.PointF;
|
import android.graphics.PointF;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
import com.vividsolutions.jts.geom.Coordinate;
|
import com.vividsolutions.jts.geom.Coordinate;
|
||||||
|
@ -316,7 +317,7 @@ class MapillaryVectorLayer extends MapTileLayer implements MapillaryLayer, ICont
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -346,6 +347,11 @@ class MapillaryVectorLayer extends MapTileLayer implements MapillaryLayer, ICont
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private void getImagesFromPoint(RotatedTileBox tb, PointF point, List<? super MapillaryImage> images) {
|
private void getImagesFromPoint(RotatedTileBox tb, PointF point, List<? super MapillaryImage> images) {
|
||||||
Map<QuadPointDouble, Map> points = this.visiblePoints;
|
Map<QuadPointDouble, Map> points = this.visiblePoints;
|
||||||
if (points != null) {
|
if (points != null) {
|
||||||
|
|
|
@ -7,6 +7,7 @@ import android.graphics.Paint;
|
||||||
import android.graphics.Path;
|
import android.graphics.Path;
|
||||||
import android.graphics.PointF;
|
import android.graphics.PointF;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
import net.osmand.GPXUtilities.TrkSegment;
|
import net.osmand.GPXUtilities.TrkSegment;
|
||||||
|
@ -502,7 +503,7 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return isInMeasurementMode();
|
return isInMeasurementMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -516,6 +517,11 @@ public class MeasurementToolLayer extends OsmandMapLayer implements ContextMenuL
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private Location getLocationFromLL(double lat, double lon) {
|
private Location getLocationFromLL(double lat, double lon) {
|
||||||
Location l = new Location("");
|
Location l = new Location("");
|
||||||
l.setLatitude(lat);
|
l.setLatitude(lat);
|
||||||
|
|
|
@ -26,7 +26,6 @@ import com.github.mikephil.charting.listener.OnChartGestureListener;
|
||||||
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
|
import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.GPXUtilities;
|
|
||||||
import net.osmand.GPXUtilities.GPXFile;
|
import net.osmand.GPXUtilities.GPXFile;
|
||||||
import net.osmand.GPXUtilities.GPXTrackAnalysis;
|
import net.osmand.GPXUtilities.GPXTrackAnalysis;
|
||||||
import net.osmand.GPXUtilities.Track;
|
import net.osmand.GPXUtilities.Track;
|
||||||
|
@ -34,7 +33,6 @@ import net.osmand.GPXUtilities.TrkSegment;
|
||||||
import net.osmand.GPXUtilities.WptPt;
|
import net.osmand.GPXUtilities.WptPt;
|
||||||
import net.osmand.plus.GPXDatabase.GpxDataItem;
|
import net.osmand.plus.GPXDatabase.GpxDataItem;
|
||||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
||||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
|
||||||
import net.osmand.plus.OsmAndFormatter;
|
import net.osmand.plus.OsmAndFormatter;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
@ -52,7 +50,6 @@ import net.osmand.plus.views.controls.WrapContentHeightViewPager.ViewAtPositionI
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
import net.osmand.util.MapUtils;
|
import net.osmand.util.MapUtils;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -181,17 +178,7 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid
|
||||||
LineData lineData = chart.getLineData();
|
LineData lineData = chart.getLineData();
|
||||||
List<ILineDataSet> ds = lineData != null ? lineData.getDataSets() : null;
|
List<ILineDataSet> ds = lineData != null ? lineData.getDataSets() : null;
|
||||||
if (ds != null && ds.size() > 0) {
|
if (ds != null && ds.size() > 0) {
|
||||||
for (GPXUtilities.Track t : gpxItem.group.getGpx().tracks) {
|
segment = getSegmentForAnalysis(gpxItem, analysis);
|
||||||
for (TrkSegment s : t.segments) {
|
|
||||||
if (s.points.size() > 0 && s.points.get(0).equals(analysis.locationStart)) {
|
|
||||||
segment = s;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (segment != null) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return segment;
|
return segment;
|
||||||
|
@ -741,6 +728,14 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid
|
||||||
}
|
}
|
||||||
if (gpxItem.chartHighlightPos != -1) {
|
if (gpxItem.chartHighlightPos != -1) {
|
||||||
chart.highlightValue(gpxItem.chartHighlightPos, 0);
|
chart.highlightValue(gpxItem.chartHighlightPos, 0);
|
||||||
|
} else if (gpxItem.locationOnMap != null) {
|
||||||
|
LineData lineData = chart.getLineData();
|
||||||
|
List<ILineDataSet> ds = lineData != null ? lineData.getDataSets() : null;
|
||||||
|
if (ds != null && ds.size() > 0) {
|
||||||
|
OrderedLineDataSet dataSet = (OrderedLineDataSet) ds.get(0);
|
||||||
|
gpxItem.chartHighlightPos = (float) (gpxItem.locationOnMap.distance / dataSet.getDivX());
|
||||||
|
chart.highlightValue(gpxItem.chartHighlightPos, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
chart.highlightValue(null);
|
chart.highlightValue(null);
|
||||||
|
@ -818,18 +813,7 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid
|
||||||
gpxItem.chartTypes[i] = orderedDataSet.getDataSetType();
|
gpxItem.chartTypes[i] = orderedDataSet.getDataSetType();
|
||||||
}
|
}
|
||||||
if (gpxItem.chartHighlightPos != -1) {
|
if (gpxItem.chartHighlightPos != -1) {
|
||||||
TrkSegment segment = null;
|
TrkSegment segment = getSegmentForAnalysis(gpxItem, gpxItem.analysis);
|
||||||
for (Track t : gpxItem.group.getGpx().tracks) {
|
|
||||||
for (TrkSegment s : t.segments) {
|
|
||||||
if (s.points.size() > 0 && s.points.get(0).equals(gpxItem.analysis.locationStart)) {
|
|
||||||
segment = s;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (segment != null) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (segment != null) {
|
if (segment != null) {
|
||||||
OrderedLineDataSet dataSet = (OrderedLineDataSet) dataSets.get(0);
|
OrderedLineDataSet dataSet = (OrderedLineDataSet) dataSets.get(0);
|
||||||
float distance = gpxItem.chartHighlightPos * dataSet.getDivX();
|
float distance = gpxItem.chartHighlightPos * dataSet.getDivX();
|
||||||
|
@ -849,7 +833,16 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openSplitIntervalScreen() {
|
public static TrkSegment getSegmentForAnalysis(GpxDisplayItem gpxItem, GPXTrackAnalysis analysis) {
|
||||||
actionsListener.openSplitInterval(gpxItem, getTrkSegment());
|
for (Track track : gpxItem.group.getGpx().tracks) {
|
||||||
|
for (TrkSegment segment : track.segments) {
|
||||||
|
int size = segment.points.size();
|
||||||
|
if (size > 0 && segment.points.get(0).equals(analysis.locationStart)
|
||||||
|
&& segment.points.get(size - 1).equals(analysis.locationEnd)) {
|
||||||
|
return segment;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import android.view.View;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
|
@ -453,7 +454,7 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -467,6 +468,11 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> res, boolean unknownLocation) {
|
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> res, boolean unknownLocation) {
|
||||||
if (tileBox.getZoom() >= startZoom) {
|
if (tileBox.getZoom() >= startZoom) {
|
||||||
|
|
|
@ -180,7 +180,7 @@ public class OsmEditsLayer extends OsmandMapLayer implements ContextMenuLayer.IC
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,6 +194,11 @@ public class OsmEditsLayer extends OsmandMapLayer implements ContextMenuLayer.IC
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o, boolean unknownLocation) {
|
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o, boolean unknownLocation) {
|
||||||
if (tileBox.getZoom() >= startZoom) {
|
if (tileBox.getZoom() >= startZoom) {
|
||||||
|
|
|
@ -13,7 +13,6 @@ import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.ColorInt;
|
import androidx.annotation.ColorInt;
|
||||||
import androidx.annotation.ColorRes;
|
|
||||||
import androidx.annotation.DrawableRes;
|
import androidx.annotation.DrawableRes;
|
||||||
import androidx.annotation.StringRes;
|
import androidx.annotation.StringRes;
|
||||||
import androidx.appcompat.widget.SwitchCompat;
|
import androidx.appcompat.widget.SwitchCompat;
|
||||||
|
@ -32,6 +31,8 @@ import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static net.osmand.AndroidUtils.isLayoutRtl;
|
||||||
|
|
||||||
public abstract class SwitchableAction<T> extends QuickAction {
|
public abstract class SwitchableAction<T> extends QuickAction {
|
||||||
|
|
||||||
public static final String KEY_ID = "id";
|
public static final String KEY_ID = "id";
|
||||||
|
@ -62,7 +63,7 @@ public abstract class SwitchableAction<T> extends QuickAction {
|
||||||
View view = LayoutInflater.from(parent.getContext())
|
View view = LayoutInflater.from(parent.getContext())
|
||||||
.inflate(R.layout.quick_action_switchable_action, parent, false);
|
.inflate(R.layout.quick_action_switchable_action, parent, false);
|
||||||
|
|
||||||
final SwitchCompat showDialog = (SwitchCompat) view.findViewById(R.id.saveButton);
|
final SwitchCompat showDialog = view.findViewById(R.id.saveButton);
|
||||||
if (!getParams().isEmpty()) {
|
if (!getParams().isEmpty()) {
|
||||||
showDialog.setChecked(Boolean.valueOf(getParams().get(KEY_DIALOG)));
|
showDialog.setChecked(Boolean.valueOf(getParams().get(KEY_DIALOG)));
|
||||||
}
|
}
|
||||||
|
@ -74,7 +75,7 @@ public abstract class SwitchableAction<T> extends QuickAction {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
RecyclerView list = (RecyclerView) view.findViewById(R.id.list);
|
RecyclerView list = view.findViewById(R.id.list);
|
||||||
adapter = new Adapter(activity, new QuickActionListFragment.OnStartDragListener() {
|
adapter = new Adapter(activity, new QuickActionListFragment.OnStartDragListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onStartDrag(RecyclerView.ViewHolder viewHolder) {
|
public void onStartDrag(RecyclerView.ViewHolder viewHolder) {
|
||||||
|
@ -92,9 +93,9 @@ public abstract class SwitchableAction<T> extends QuickAction {
|
||||||
|
|
||||||
list.setAdapter(adapter);
|
list.setAdapter(adapter);
|
||||||
|
|
||||||
TextView dscrTitle = (TextView) view.findViewById(R.id.textDscrTitle);
|
TextView dscrTitle = view.findViewById(R.id.textDscrTitle);
|
||||||
TextView dscrHint = (TextView) view.findViewById(R.id.textDscrHint);
|
TextView dscrHint = view.findViewById(R.id.textDscrHint);
|
||||||
Button addBtn = (Button) view.findViewById(R.id.btnAdd);
|
Button addBtn = view.findViewById(R.id.btnAdd);
|
||||||
|
|
||||||
dscrTitle.setText(parent.getContext().getString(getDiscrTitle()) + ":");
|
dscrTitle.setText(parent.getContext().getString(getDiscrTitle()) + ":");
|
||||||
dscrHint.setText(getDiscrHint());
|
dscrHint.setText(getDiscrHint());
|
||||||
|
@ -104,10 +105,18 @@ public abstract class SwitchableAction<T> extends QuickAction {
|
||||||
parent.addView(view);
|
parent.addView(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getActionText(OsmandApplication application) {
|
||||||
|
String item = getSelectedItem(application);
|
||||||
|
String arrowDirection = isLayoutRtl(application) ? "\u25c0" : "\u25b6";
|
||||||
|
|
||||||
|
return application.getString(R.string.ltr_or_rtl_combine_via_space, getTranslatedItemName(application, item), arrowDirection + "\u2026");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean fillParams(View root, MapActivity activity) {
|
public boolean fillParams(View root, MapActivity activity) {
|
||||||
|
|
||||||
final RecyclerView list = (RecyclerView) root.findViewById(R.id.list);
|
final RecyclerView list = root.findViewById(R.id.list);
|
||||||
final Adapter adapter = (Adapter) list.getAdapter();
|
final Adapter adapter = (Adapter) list.getAdapter();
|
||||||
|
|
||||||
boolean hasParams = adapter.itemsList != null && !adapter.itemsList.isEmpty();
|
boolean hasParams = adapter.itemsList != null && !adapter.itemsList.isEmpty();
|
||||||
|
@ -143,7 +152,7 @@ public abstract class SwitchableAction<T> extends QuickAction {
|
||||||
|
|
||||||
private List<T> itemsList = new ArrayList<>();
|
private List<T> itemsList = new ArrayList<>();
|
||||||
private final QuickActionListFragment.OnStartDragListener onStartDragListener;
|
private final QuickActionListFragment.OnStartDragListener onStartDragListener;
|
||||||
private Context context;
|
private final Context context;
|
||||||
|
|
||||||
public Adapter(Context context, QuickActionListFragment.OnStartDragListener onStartDragListener) {
|
public Adapter(Context context, QuickActionListFragment.OnStartDragListener onStartDragListener) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
@ -293,10 +302,10 @@ public abstract class SwitchableAction<T> extends QuickAction {
|
||||||
public ItemHolder(View itemView) {
|
public ItemHolder(View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
|
|
||||||
title = (TextView) itemView.findViewById(R.id.title);
|
title = itemView.findViewById(R.id.title);
|
||||||
handleView = (ImageView) itemView.findViewById(R.id.handle_view);
|
handleView = itemView.findViewById(R.id.handle_view);
|
||||||
closeBtn = (ImageView) itemView.findViewById(R.id.closeImageButton);
|
closeBtn = itemView.findViewById(R.id.closeImageButton);
|
||||||
icon = (ImageView) itemView.findViewById(R.id.imageView);
|
icon = itemView.findViewById(R.id.imageView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -246,10 +246,4 @@ public class MapStyleAction extends SwitchableAction<String> {
|
||||||
: filters.get(0);
|
: filters.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getActionText(OsmandApplication application) {
|
|
||||||
String currentSource = application.getSettings().RENDERER.get();
|
|
||||||
|
|
||||||
return application.getString(R.string.map_quick_action_pattern, getTranslatedItemName(application, currentSource));
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -27,6 +27,8 @@ import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static net.osmand.AndroidUtils.isLayoutRtl;
|
||||||
|
|
||||||
public class SwitchProfileAction extends SwitchableAction<String> {
|
public class SwitchProfileAction extends SwitchableAction<String> {
|
||||||
|
|
||||||
private final static String KEY_PROFILES = "profiles";
|
private final static String KEY_PROFILES = "profiles";
|
||||||
|
@ -230,4 +232,9 @@ public class SwitchProfileAction extends SwitchableAction<String> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getActionText(OsmandApplication application) {
|
||||||
|
return getName(application);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,13 +15,13 @@ import com.google.gson.reflect.TypeToken;
|
||||||
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandPlugin;
|
import net.osmand.plus.OsmandPlugin;
|
||||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.UiUtilities;
|
import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.quickaction.QuickAction;
|
import net.osmand.plus.quickaction.QuickAction;
|
||||||
import net.osmand.plus.quickaction.QuickActionType;
|
import net.osmand.plus.quickaction.QuickActionType;
|
||||||
import net.osmand.plus.quickaction.SwitchableAction;
|
import net.osmand.plus.quickaction.SwitchableAction;
|
||||||
|
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -59,7 +59,7 @@ public class MapOverlayAction extends SwitchableAction<Pair<String, String>> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSelectedItem(OsmandApplication app) {
|
public String getSelectedItem(OsmandApplication app) {
|
||||||
return app.getSettings().MAP_OVERLAY.get();
|
return app.getSettings().MAP_OVERLAY.get() != null ? app.getSettings().MAP_OVERLAY.get() : KEY_NO_OVERLAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -224,12 +224,4 @@ public class MapOverlayAction extends SwitchableAction<Pair<String, String>> {
|
||||||
getParams().put(KEY_DIALOG, Boolean.toString(((SwitchCompat) root.findViewById(R.id.saveButton)).isChecked()));
|
getParams().put(KEY_DIALOG, Boolean.toString(((SwitchCompat) root.findViewById(R.id.saveButton)).isChecked()));
|
||||||
return super.fillParams(root, activity);
|
return super.fillParams(root, activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getActionText(OsmandApplication application) {
|
|
||||||
String currentSource = application.getSettings().MAP_OVERLAY.get() == null ? KEY_NO_OVERLAY
|
|
||||||
: application.getSettings().MAP_OVERLAY.get();
|
|
||||||
|
|
||||||
return application.getString(R.string.map_quick_action_pattern, getTranslatedItemName(application, currentSource));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,13 +15,13 @@ import com.google.gson.reflect.TypeToken;
|
||||||
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandPlugin;
|
import net.osmand.plus.OsmandPlugin;
|
||||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.UiUtilities;
|
import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.quickaction.QuickAction;
|
import net.osmand.plus.quickaction.QuickAction;
|
||||||
import net.osmand.plus.quickaction.QuickActionType;
|
import net.osmand.plus.quickaction.QuickActionType;
|
||||||
import net.osmand.plus.quickaction.SwitchableAction;
|
import net.osmand.plus.quickaction.SwitchableAction;
|
||||||
|
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -214,13 +214,4 @@ public class MapSourceAction extends SwitchableAction<Pair<String, String>> {
|
||||||
getParams().put(KEY_DIALOG, Boolean.toString(((SwitchCompat) root.findViewById(R.id.saveButton)).isChecked()));
|
getParams().put(KEY_DIALOG, Boolean.toString(((SwitchCompat) root.findViewById(R.id.saveButton)).isChecked()));
|
||||||
return super.fillParams(root, activity);
|
return super.fillParams(root, activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getActionText(OsmandApplication application) {
|
|
||||||
String currentSource = application.getSettings().MAP_ONLINE_DATA.get()
|
|
||||||
? application.getSettings().MAP_TILE_SOURCES.get()
|
|
||||||
: application.getString(R.string.vector_data);
|
|
||||||
|
|
||||||
return application.getString(R.string.map_quick_action_pattern, getTranslatedItemName(application, currentSource));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ public class MapUnderlayAction extends SwitchableAction<Pair<String, String>> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSelectedItem(OsmandApplication app) {
|
public String getSelectedItem(OsmandApplication app) {
|
||||||
return app.getSettings().MAP_UNDERLAY.get();
|
return app.getSettings().MAP_UNDERLAY.get() != null ? app.getSettings().MAP_UNDERLAY.get() : KEY_NO_UNDERLAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -226,12 +226,4 @@ public class MapUnderlayAction extends SwitchableAction<Pair<String, String>> {
|
||||||
getParams().put(KEY_DIALOG, Boolean.toString(((SwitchCompat) root.findViewById(R.id.saveButton)).isChecked()));
|
getParams().put(KEY_DIALOG, Boolean.toString(((SwitchCompat) root.findViewById(R.id.saveButton)).isChecked()));
|
||||||
return super.fillParams(root, activity);
|
return super.fillParams(root, activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getActionText(OsmandApplication application) {
|
|
||||||
String currentSource = application.getSettings().MAP_UNDERLAY.get() == null ? KEY_NO_UNDERLAY
|
|
||||||
: application.getSettings().MAP_UNDERLAY.get();
|
|
||||||
|
|
||||||
return application.getString(R.string.map_quick_action_pattern, getTranslatedItemName(application, currentSource));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -306,7 +306,7 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment {
|
||||||
SearchHistoryHelper.getInstance(app).addNewItemToHistory(gpxInfo);
|
SearchHistoryHelper.getInstance(app).addNewItemToHistory(gpxInfo);
|
||||||
File file = new File(app.getAppPath(IndexConstants.GPX_INDEX_DIR), gpxInfo.getFileName());
|
File file = new File(app.getAppPath(IndexConstants.GPX_INDEX_DIR), gpxInfo.getFileName());
|
||||||
String path = file.getAbsolutePath();
|
String path = file.getAbsolutePath();
|
||||||
TrackMenuFragment.showInstance(mapActivity, path, false, null, null, QuickSearchDialogFragment.TAG);
|
TrackMenuFragment.showInstance(mapActivity, path, false, null, QuickSearchDialogFragment.TAG);
|
||||||
dialogFragment.dismiss();
|
dialogFragment.dismiss();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1165,6 +1165,13 @@ public class OsmandSettings {
|
||||||
public final OsmandPreference<Integer> DISCOUNT_TOTAL_SHOW = new IntPreference(this, "discount_total_show", 0).makeGlobal();
|
public final OsmandPreference<Integer> DISCOUNT_TOTAL_SHOW = new IntPreference(this, "discount_total_show", 0).makeGlobal();
|
||||||
public final OsmandPreference<Long> DISCOUNT_SHOW_DATETIME_MS = new LongPreference(this, "show_discount_datetime_ms", 0).makeGlobal();
|
public final OsmandPreference<Long> DISCOUNT_SHOW_DATETIME_MS = new LongPreference(this, "show_discount_datetime_ms", 0).makeGlobal();
|
||||||
|
|
||||||
|
public final OsmandPreference<String> BACKUP_USER_EMAIL = new StringPreference(this, "backup_user_email", "").makeGlobal();
|
||||||
|
public final OsmandPreference<String> BACKUP_USER_ID = new StringPreference(this, "backup_user_id", "").makeGlobal();
|
||||||
|
public final OsmandPreference<String> BACKUP_DEVICE_ID = new StringPreference(this, "backup_device_id", "").makeGlobal();
|
||||||
|
public final OsmandPreference<String> BACKUP_NATIVE_DEVICE_ID = new StringPreference(this, "backup_native_device_id", "").makeGlobal();
|
||||||
|
public final OsmandPreference<String> BACKUP_ACCESS_TOKEN = new StringPreference(this, "backup_access_token", "").makeGlobal();
|
||||||
|
public final OsmandPreference<String> BACKUP_ACCESS_TOKEN_UPDATE_TIME = new StringPreference(this, "backup_access_token_update_time", "").makeGlobal();
|
||||||
|
|
||||||
// this value string is synchronized with settings_pref.xml preference name
|
// this value string is synchronized with settings_pref.xml preference name
|
||||||
public final OsmandPreference<String> USER_OSM_BUG_NAME =
|
public final OsmandPreference<String> USER_OSM_BUG_NAME =
|
||||||
new StringPreference(this, "user_osm_bug_name", "NoName/OsmAnd").makeGlobal().makeShared();
|
new StringPreference(this, "user_osm_bug_name", "NoName/OsmAnd").makeGlobal().makeShared();
|
||||||
|
|
|
@ -4,11 +4,14 @@ import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import net.osmand.GPXUtilities.TrkSegment;
|
||||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
||||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItemType;
|
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItemType;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
import net.osmand.plus.mapcontextmenu.controllers.SelectedGpxMenuController.SelectedGpxPoint;
|
||||||
import net.osmand.plus.myplaces.GPXItemPagerAdapter;
|
import net.osmand.plus.myplaces.GPXItemPagerAdapter;
|
||||||
import net.osmand.plus.myplaces.SegmentActionsListener;
|
import net.osmand.plus.myplaces.SegmentActionsListener;
|
||||||
import net.osmand.plus.myplaces.SegmentGPXAdapter;
|
import net.osmand.plus.myplaces.SegmentGPXAdapter;
|
||||||
|
@ -23,12 +26,14 @@ public class SegmentsCard extends BaseCard {
|
||||||
private TrackDisplayHelper displayHelper;
|
private TrackDisplayHelper displayHelper;
|
||||||
private GpxDisplayItemType[] filterTypes = new GpxDisplayItemType[] {GpxDisplayItemType.TRACK_SEGMENT};
|
private GpxDisplayItemType[] filterTypes = new GpxDisplayItemType[] {GpxDisplayItemType.TRACK_SEGMENT};
|
||||||
private SegmentActionsListener listener;
|
private SegmentActionsListener listener;
|
||||||
|
private SelectedGpxPoint gpxPoint;
|
||||||
|
|
||||||
public SegmentsCard(@NonNull MapActivity mapActivity, @NonNull TrackDisplayHelper displayHelper,
|
public SegmentsCard(@NonNull MapActivity mapActivity, @NonNull TrackDisplayHelper displayHelper,
|
||||||
@NonNull SegmentActionsListener listener) {
|
@Nullable SelectedGpxPoint gpxPoint, @NonNull SegmentActionsListener listener) {
|
||||||
super(mapActivity);
|
super(mapActivity);
|
||||||
this.displayHelper = displayHelper;
|
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
|
this.displayHelper = displayHelper;
|
||||||
|
this.gpxPoint = gpxPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -42,6 +47,8 @@ public class SegmentsCard extends BaseCard {
|
||||||
container.removeAllViews();
|
container.removeAllViews();
|
||||||
List<GpxDisplayItem> items = TrackDisplayHelper.flatten(displayHelper.getOriginalGroups(filterTypes));
|
List<GpxDisplayItem> items = TrackDisplayHelper.flatten(displayHelper.getOriginalGroups(filterTypes));
|
||||||
for (GpxDisplayItem displayItem : items) {
|
for (GpxDisplayItem displayItem : items) {
|
||||||
|
updateLocationOnMap(displayItem);
|
||||||
|
|
||||||
View segmentView = SegmentGPXAdapter.createGpxTabsView(displayHelper, container, listener, nightMode);
|
View segmentView = SegmentGPXAdapter.createGpxTabsView(displayHelper, container, listener, nightMode);
|
||||||
|
|
||||||
WrapContentHeightViewPager pager = segmentView.findViewById(R.id.pager);
|
WrapContentHeightViewPager pager = segmentView.findViewById(R.id.pager);
|
||||||
|
@ -53,4 +60,16 @@ public class SegmentsCard extends BaseCard {
|
||||||
container.addView(segmentView);
|
container.addView(segmentView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateLocationOnMap(GpxDisplayItem item) {
|
||||||
|
if (gpxPoint != null) {
|
||||||
|
TrkSegment segment = GPXItemPagerAdapter.getSegmentForAnalysis(item, item.analysis);
|
||||||
|
if (segment != null && (segment.points.contains(gpxPoint.getSelectedPoint())
|
||||||
|
|| segment.points.contains(gpxPoint.getPrevPoint())
|
||||||
|
&& segment.points.contains(gpxPoint.getNextPoint()))) {
|
||||||
|
item.locationOnMap = gpxPoint.getSelectedPoint();
|
||||||
|
listener.onPointSelected(segment, item.locationOnMap.lat, item.locationOnMap.lon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -39,6 +39,7 @@ import net.osmand.FileUtils;
|
||||||
import net.osmand.FileUtils.RenameCallback;
|
import net.osmand.FileUtils.RenameCallback;
|
||||||
import net.osmand.GPXUtilities.GPXFile;
|
import net.osmand.GPXUtilities.GPXFile;
|
||||||
import net.osmand.GPXUtilities.TrkSegment;
|
import net.osmand.GPXUtilities.TrkSegment;
|
||||||
|
import net.osmand.GPXUtilities.WptPt;
|
||||||
import net.osmand.Location;
|
import net.osmand.Location;
|
||||||
import net.osmand.PlatformUtil;
|
import net.osmand.PlatformUtil;
|
||||||
import net.osmand.data.LatLon;
|
import net.osmand.data.LatLon;
|
||||||
|
@ -66,6 +67,7 @@ import net.osmand.plus.helpers.AndroidUiHelper;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper;
|
import net.osmand.plus.helpers.GpxUiHelper;
|
||||||
import net.osmand.plus.mapcontextmenu.MapContextMenu;
|
import net.osmand.plus.mapcontextmenu.MapContextMenu;
|
||||||
import net.osmand.plus.mapcontextmenu.controllers.SelectedGpxMenuController.OpenGpxDetailsTask;
|
import net.osmand.plus.mapcontextmenu.controllers.SelectedGpxMenuController.OpenGpxDetailsTask;
|
||||||
|
import net.osmand.plus.mapcontextmenu.controllers.SelectedGpxMenuController.SelectedGpxPoint;
|
||||||
import net.osmand.plus.mapcontextmenu.other.TrackChartPoints;
|
import net.osmand.plus.mapcontextmenu.other.TrackChartPoints;
|
||||||
import net.osmand.plus.mapcontextmenu.other.TrackDetailsMenu;
|
import net.osmand.plus.mapcontextmenu.other.TrackDetailsMenu;
|
||||||
import net.osmand.plus.measurementtool.GpxData;
|
import net.osmand.plus.measurementtool.GpxData;
|
||||||
|
@ -154,6 +156,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
private String gpxTitle;
|
private String gpxTitle;
|
||||||
private String returnScreenName;
|
private String returnScreenName;
|
||||||
private String callingFragmentTag;
|
private String callingFragmentTag;
|
||||||
|
private SelectedGpxPoint gpxPoint;
|
||||||
private TrackChartPoints trackChartPoints;
|
private TrackChartPoints trackChartPoints;
|
||||||
|
|
||||||
private Float heading;
|
private Float heading;
|
||||||
|
@ -165,7 +168,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
private int menuTitleHeight;
|
private int menuTitleHeight;
|
||||||
private int menuHeaderHeight;
|
private int menuHeaderHeight;
|
||||||
private int toolbarHeightPx;
|
private int toolbarHeightPx;
|
||||||
private boolean mapPositionAdjusted;
|
private boolean adjustMapPosition = true;
|
||||||
|
|
||||||
|
|
||||||
public enum TrackMenuType {
|
public enum TrackMenuType {
|
||||||
|
@ -320,6 +323,14 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
this.callingFragmentTag = callingFragmentTag;
|
this.callingFragmentTag = callingFragmentTag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setGpxPoint(SelectedGpxPoint point) {
|
||||||
|
this.gpxPoint = point;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAdjustMapPosition(boolean adjustMapPosition) {
|
||||||
|
this.adjustMapPosition = adjustMapPosition;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View view = super.onCreateView(inflater, container, savedInstanceState);
|
View view = super.onCreateView(inflater, container, savedInstanceState);
|
||||||
|
@ -506,7 +517,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
}
|
}
|
||||||
cardsContainer.addView(segmentsCard.getView());
|
cardsContainer.addView(segmentsCard.getView());
|
||||||
} else {
|
} else {
|
||||||
segmentsCard = new SegmentsCard(mapActivity, displayHelper, this);
|
segmentsCard = new SegmentsCard(mapActivity, displayHelper, gpxPoint, this);
|
||||||
segmentsCard.setListener(this);
|
segmentsCard.setListener(this);
|
||||||
cardsContainer.addView(segmentsCard.build(mapActivity));
|
cardsContainer.addView(segmentsCard.build(mapActivity));
|
||||||
}
|
}
|
||||||
|
@ -596,7 +607,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
boolean backButtonVisible = !Algorithms.isEmpty(returnScreenName) && currentMenuState == MenuState.HALF_SCREEN;
|
boolean backButtonVisible = !Algorithms.isEmpty(returnScreenName) && currentMenuState == MenuState.HALF_SCREEN;
|
||||||
AndroidUiHelper.updateVisibility(backButtonContainer, backButtonVisible);
|
AndroidUiHelper.updateVisibility(backButtonContainer, backButtonVisible);
|
||||||
}
|
}
|
||||||
if (currentMenuState != MenuState.FULL_SCREEN && (changed || !mapPositionAdjusted)) {
|
if (currentMenuState != MenuState.FULL_SCREEN && (changed || adjustMapPosition)) {
|
||||||
adjustMapPosition(getMenuStatePosY(currentMenuState));
|
adjustMapPosition(getMenuStatePosY(currentMenuState));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -750,7 +761,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getStatusBarColorId() {
|
public int getStatusBarColorId() {
|
||||||
if (getViewY() <= getFullScreenTopPosY() || !isPortrait()) {
|
if (getView() != null && getViewY() <= getFullScreenTopPosY() || !isPortrait()) {
|
||||||
return isNightMode() ? R.color.status_bar_color_dark : R.color.status_bar_color_light;
|
return isNightMode() ? R.color.status_bar_color_dark : R.color.status_bar_color_light;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -841,9 +852,9 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
osmEditingPlugin.sendGPXFiles(mapActivity, this, gpxInfo);
|
osmEditingPlugin.sendGPXFiles(mapActivity, this, gpxInfo);
|
||||||
}
|
}
|
||||||
} else if (buttonIndex == EDIT_BUTTON_INDEX) {
|
} else if (buttonIndex == EDIT_BUTTON_INDEX) {
|
||||||
|
dismiss();
|
||||||
String fileName = Algorithms.getFileWithoutDirs(gpxFile.path);
|
String fileName = Algorithms.getFileWithoutDirs(gpxFile.path);
|
||||||
MeasurementToolFragment.showInstance(mapActivity.getSupportFragmentManager(), fileName);
|
MeasurementToolFragment.showInstance(mapActivity.getSupportFragmentManager(), fileName);
|
||||||
dismiss();
|
|
||||||
} else if (buttonIndex == RENAME_BUTTON_INDEX) {
|
} else if (buttonIndex == RENAME_BUTTON_INDEX) {
|
||||||
FileUtils.renameFile(mapActivity, new File(gpxFile.path), this, true);
|
FileUtils.renameFile(mapActivity, new File(gpxFile.path), this, true);
|
||||||
} else if (buttonIndex == CHANGE_FOLDER_BUTTON_INDEX) {
|
} else if (buttonIndex == CHANGE_FOLDER_BUTTON_INDEX) {
|
||||||
|
@ -971,7 +982,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
if (r.left != 0 && r.right != 0) {
|
if (r.left != 0 && r.right != 0) {
|
||||||
mapActivity.getMapView().fitRectToMap(r.left, r.right, r.top, r.bottom, tileBoxWidthPx, tileBoxHeightPx, 0);
|
mapActivity.getMapView().fitRectToMap(r.left, r.right, r.top, r.bottom, tileBoxWidthPx, tileBoxHeightPx, 0);
|
||||||
}
|
}
|
||||||
mapPositionAdjusted = true;
|
adjustMapPosition = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1258,7 +1269,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
boolean currentRecording = file == null;
|
boolean currentRecording = file == null;
|
||||||
String path = file != null ? file.getAbsolutePath() : null;
|
String path = file != null ? file.getAbsolutePath() : null;
|
||||||
if (context instanceof MapActivity) {
|
if (context instanceof MapActivity) {
|
||||||
TrackMenuFragment.showInstance((MapActivity) context, path, currentRecording, null, null, null);
|
TrackMenuFragment.showInstance((MapActivity) context, path, currentRecording, null, null);
|
||||||
} else {
|
} else {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putString(TRACK_FILE_NAME, path);
|
bundle.putString(TRACK_FILE_NAME, path);
|
||||||
|
@ -1309,7 +1320,6 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
public static void showInstance(@NonNull MapActivity mapActivity,
|
public static void showInstance(@NonNull MapActivity mapActivity,
|
||||||
@Nullable String path,
|
@Nullable String path,
|
||||||
boolean showCurrentTrack,
|
boolean showCurrentTrack,
|
||||||
@Nullable final LatLon latLon,
|
|
||||||
@Nullable final String returnScreenName,
|
@Nullable final String returnScreenName,
|
||||||
@Nullable final String callingFragmentTag) {
|
@Nullable final String callingFragmentTag) {
|
||||||
final WeakReference<MapActivity> mapActivityRef = new WeakReference<>(mapActivity);
|
final WeakReference<MapActivity> mapActivityRef = new WeakReference<>(mapActivity);
|
||||||
|
@ -1318,7 +1328,7 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
public boolean processResult(SelectedGpxFile selectedGpxFile) {
|
public boolean processResult(SelectedGpxFile selectedGpxFile) {
|
||||||
MapActivity mapActivity = mapActivityRef.get();
|
MapActivity mapActivity = mapActivityRef.get();
|
||||||
if (mapActivity != null && selectedGpxFile != null) {
|
if (mapActivity != null && selectedGpxFile != null) {
|
||||||
showInstance(mapActivity, selectedGpxFile, latLon, returnScreenName, callingFragmentTag);
|
showInstance(mapActivity, selectedGpxFile, null, returnScreenName, callingFragmentTag, true);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1327,9 +1337,10 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
|
|
||||||
public static boolean showInstance(@NonNull MapActivity mapActivity,
|
public static boolean showInstance(@NonNull MapActivity mapActivity,
|
||||||
@NonNull SelectedGpxFile selectedGpxFile,
|
@NonNull SelectedGpxFile selectedGpxFile,
|
||||||
@Nullable LatLon latLon,
|
@Nullable SelectedGpxPoint gpxPoint,
|
||||||
@Nullable String returnScreenName,
|
@Nullable String returnScreenName,
|
||||||
@Nullable String callingFragmentTag) {
|
@Nullable String callingFragmentTag,
|
||||||
|
boolean adjustMapPosition) {
|
||||||
try {
|
try {
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putInt(ContextMenuFragment.MENU_STATE_KEY, MenuState.HEADER_ONLY);
|
args.putInt(ContextMenuFragment.MENU_STATE_KEY, MenuState.HEADER_ONLY);
|
||||||
|
@ -1340,9 +1351,12 @@ public class TrackMenuFragment extends ContextMenuScrollFragment implements Card
|
||||||
fragment.setSelectedGpxFile(selectedGpxFile);
|
fragment.setSelectedGpxFile(selectedGpxFile);
|
||||||
fragment.setReturnScreenName(returnScreenName);
|
fragment.setReturnScreenName(returnScreenName);
|
||||||
fragment.setCallingFragmentTag(callingFragmentTag);
|
fragment.setCallingFragmentTag(callingFragmentTag);
|
||||||
|
fragment.setAdjustMapPosition(adjustMapPosition);
|
||||||
|
|
||||||
if (latLon != null) {
|
if (gpxPoint != null) {
|
||||||
fragment.setLatLon(latLon);
|
WptPt wptPt = gpxPoint.getSelectedPoint();
|
||||||
|
fragment.setLatLon(new LatLon(wptPt.lat, wptPt.lon));
|
||||||
|
fragment.setGpxPoint(gpxPoint);
|
||||||
} else {
|
} else {
|
||||||
QuadRect rect = selectedGpxFile.getGpxFile().getRect();
|
QuadRect rect = selectedGpxFile.getGpxFile().getRect();
|
||||||
LatLon latLonRect = new LatLon(rect.centerY(), rect.centerX());
|
LatLon latLonRect = new LatLon(rect.centerY(), rect.centerX());
|
||||||
|
|
|
@ -24,13 +24,14 @@ import net.osmand.data.LatLon;
|
||||||
import net.osmand.data.PointDescription;
|
import net.osmand.data.PointDescription;
|
||||||
import net.osmand.data.RotatedTileBox;
|
import net.osmand.data.RotatedTileBox;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.settings.backend.CommonPreference;
|
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.mapcontextmenu.MapContextMenu;
|
import net.osmand.plus.mapcontextmenu.MapContextMenu;
|
||||||
|
import net.osmand.plus.settings.backend.CommonPreference;
|
||||||
import net.osmand.plus.views.OsmandMapLayer;
|
import net.osmand.plus.views.OsmandMapLayer;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
import net.osmand.plus.views.layers.ContextMenuLayer.IContextMenuProvider;
|
import net.osmand.plus.views.layers.ContextMenuLayer.IContextMenuProvider;
|
||||||
|
import net.osmand.plus.views.layers.MapTextLayer.MapTextProvider;
|
||||||
import net.osmand.plus.widgets.tools.CropCircleTransformation;
|
import net.osmand.plus.widgets.tools.CropCircleTransformation;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -46,7 +47,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
import static net.osmand.aidl.ConnectedApp.AIDL_LAYERS_PREFIX;
|
import static net.osmand.aidl.ConnectedApp.AIDL_LAYERS_PREFIX;
|
||||||
|
|
||||||
public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider, MapTextLayer.MapTextProvider<AidlMapPointWrapper> {
|
public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider, MapTextProvider<AidlMapPointWrapper> {
|
||||||
|
|
||||||
private static final float POINT_IMAGE_VERTICAL_OFFSET = 0.91f;
|
private static final float POINT_IMAGE_VERTICAL_OFFSET = 0.91f;
|
||||||
|
|
||||||
|
@ -267,7 +268,7 @@ public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -281,6 +282,11 @@ public class AidlMapLayer extends OsmandMapLayer implements IContextMenuProvider
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o, boolean unknownLocation) {
|
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o, boolean unknownLocation) {
|
||||||
if (isLayerEnabled()) {
|
if (isLayerEnabled()) {
|
||||||
|
|
|
@ -320,7 +320,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
||||||
@Override
|
@Override
|
||||||
@RequiresPermission(Manifest.permission.VIBRATE)
|
@RequiresPermission(Manifest.permission.VIBRATE)
|
||||||
public boolean onLongPressEvent(PointF point, RotatedTileBox tileBox) {
|
public boolean onLongPressEvent(PointF point, RotatedTileBox tileBox) {
|
||||||
if (disableLongPressOnMap()) {
|
if (disableLongPressOnMap(point, tileBox)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (pressedContextMarker(tileBox, point.x, point.y)) {
|
if (pressedContextMarker(tileBox, point.x, point.y)) {
|
||||||
|
@ -609,7 +609,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
||||||
String title = pointDescription == null ? "" : pointDescription.getName();
|
String title = pointDescription == null ? "" : pointDescription.getName();
|
||||||
mAddGpxPointBottomSheetHelper.setTitle(title);
|
mAddGpxPointBottomSheetHelper.setTitle(title);
|
||||||
view.getAnimatedDraggingThread().startMoving(latLon.getLatitude(), latLon.getLongitude(), view.getZoom(), true);
|
view.getAnimatedDraggingThread().startMoving(latLon.getLatitude(), latLon.getLongitude(), view.getZoom(), true);
|
||||||
} else {
|
} else if (provider == null || !provider.showMenuAction(object)) {
|
||||||
selectedObjectContextMenuProvider = provider;
|
selectedObjectContextMenuProvider = provider;
|
||||||
hideVisibleMenues();
|
hideVisibleMenues();
|
||||||
activity.getMapViewTrackingUtilities().setMapLinkedToLocation(false);
|
activity.getMapViewTrackingUtilities().setMapLinkedToLocation(false);
|
||||||
|
@ -877,7 +877,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
if (mInChangeMarkerPositionMode || mInGpxDetailsMode || mInAddGpxPointMode ||
|
if (mInChangeMarkerPositionMode || mInGpxDetailsMode || mInAddGpxPointMode ||
|
||||||
activity.getMapRouteInfoMenu().isVisible() || MapRouteInfoMenu.waypointsVisible
|
activity.getMapRouteInfoMenu().isVisible() || MapRouteInfoMenu.waypointsVisible
|
||||||
|| MapRouteInfoMenu.followTrackVisible) {
|
|| MapRouteInfoMenu.followTrackVisible) {
|
||||||
|
@ -886,7 +886,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
||||||
boolean res = false;
|
boolean res = false;
|
||||||
for (OsmandMapLayer lt : view.getLayers()) {
|
for (OsmandMapLayer lt : view.getLayers()) {
|
||||||
if (lt instanceof IContextMenuProvider) {
|
if (lt instanceof IContextMenuProvider) {
|
||||||
if (((IContextMenuProvider) lt).disableLongPressOnMap()) {
|
if (((IContextMenuProvider) lt).disableLongPressOnMap(point, tileBox)) {
|
||||||
res = true;
|
res = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1101,11 +1101,13 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
||||||
|
|
||||||
boolean disableSingleTap();
|
boolean disableSingleTap();
|
||||||
|
|
||||||
boolean disableLongPressOnMap();
|
boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox);
|
||||||
|
|
||||||
boolean isObjectClickable(Object o);
|
boolean isObjectClickable(Object o);
|
||||||
|
|
||||||
boolean runExclusiveAction(@Nullable Object o, boolean unknownLocation);
|
boolean runExclusiveAction(@Nullable Object o, boolean unknownLocation);
|
||||||
|
|
||||||
|
boolean showMenuAction(@Nullable Object o);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IMoveObjectProvider {
|
public interface IMoveObjectProvider {
|
||||||
|
|
|
@ -13,6 +13,7 @@ import android.util.DisplayMetrics;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import net.osmand.IndexConstants;
|
import net.osmand.IndexConstants;
|
||||||
import net.osmand.binary.BinaryMapDataObject;
|
import net.osmand.binary.BinaryMapDataObject;
|
||||||
|
@ -566,7 +567,7 @@ public class DownloadedRegionsLayer extends OsmandMapLayer implements IContextMe
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -580,6 +581,11 @@ public class DownloadedRegionsLayer extends OsmandMapLayer implements IContextMe
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private void getWorldRegionFromPoint(RotatedTileBox tb, PointF point, List<? super DownloadMapObject> dataObjects) {
|
private void getWorldRegionFromPoint(RotatedTileBox tb, PointF point, List<? super DownloadMapObject> dataObjects) {
|
||||||
int zoom = tb.getZoom();
|
int zoom = tb.getZoom();
|
||||||
if (zoom >= ZOOM_TO_SHOW_SELECTION_ST && zoom < ZOOM_TO_SHOW_SELECTION
|
if (zoom >= ZOOM_TO_SHOW_SELECTION_ST && zoom < ZOOM_TO_SHOW_SELECTION
|
||||||
|
|
|
@ -213,7 +213,7 @@ public class FavouritesLayer extends OsmandMapLayer implements IContextMenuProvi
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -227,6 +227,11 @@ public class FavouritesLayer extends OsmandMapLayer implements IContextMenuProvi
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> res, boolean unknownLocation) {
|
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> res, boolean unknownLocation) {
|
||||||
if (this.settings.SHOW_FAVORITES.get() && tileBox.getZoom() >= startZoom) {
|
if (this.settings.SHOW_FAVORITES.get() && tileBox.getZoom() >= startZoom) {
|
||||||
|
|
|
@ -44,10 +44,10 @@ import net.osmand.plus.R;
|
||||||
import net.osmand.plus.UiUtilities;
|
import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.base.PointImageDrawable;
|
import net.osmand.plus.base.PointImageDrawable;
|
||||||
|
import net.osmand.plus.itinerary.ItineraryGroup;
|
||||||
import net.osmand.plus.mapcontextmenu.controllers.SelectedGpxMenuController.SelectedGpxPoint;
|
import net.osmand.plus.mapcontextmenu.controllers.SelectedGpxMenuController.SelectedGpxPoint;
|
||||||
import net.osmand.plus.mapcontextmenu.other.TrackChartPoints;
|
import net.osmand.plus.mapcontextmenu.other.TrackChartPoints;
|
||||||
import net.osmand.plus.mapmarkers.MapMarker;
|
import net.osmand.plus.mapmarkers.MapMarker;
|
||||||
import net.osmand.plus.itinerary.ItineraryGroup;
|
|
||||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||||
import net.osmand.plus.render.OsmandRenderer;
|
import net.osmand.plus.render.OsmandRenderer;
|
||||||
import net.osmand.plus.render.OsmandRenderer.RenderingContext;
|
import net.osmand.plus.render.OsmandRenderer.RenderingContext;
|
||||||
|
@ -56,6 +56,7 @@ import net.osmand.plus.settings.backend.CommonPreference;
|
||||||
import net.osmand.plus.track.GradientScaleType;
|
import net.osmand.plus.track.GradientScaleType;
|
||||||
import net.osmand.plus.track.SaveGpxAsyncTask;
|
import net.osmand.plus.track.SaveGpxAsyncTask;
|
||||||
import net.osmand.plus.track.TrackDrawInfo;
|
import net.osmand.plus.track.TrackDrawInfo;
|
||||||
|
import net.osmand.plus.track.TrackMenuFragment;
|
||||||
import net.osmand.plus.views.OsmandMapLayer;
|
import net.osmand.plus.views.OsmandMapLayer;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
import net.osmand.plus.views.Renderable;
|
import net.osmand.plus.views.Renderable;
|
||||||
|
@ -1024,7 +1025,7 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM
|
||||||
|
|
||||||
float bearing = prevPointLocation.bearingTo(nextPointLocation);
|
float bearing = prevPointLocation.bearingTo(nextPointLocation);
|
||||||
|
|
||||||
return new SelectedGpxPoint(selectedGpxFile, projectionPoint, bearing);
|
return new SelectedGpxPoint(selectedGpxFile, projectionPoint, prevPoint, nextPoint, bearing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static WptPt createProjectionPoint(WptPt prevPoint, WptPt nextPoint, LatLon latLon) {
|
public static WptPt createProjectionPoint(WptPt prevPoint, WptPt nextPoint, LatLon latLon) {
|
||||||
|
@ -1088,8 +1089,16 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return isInTrackAppearanceMode();
|
if (isInTrackAppearanceMode()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (tileBox.getZoom() >= START_ZOOM) {
|
||||||
|
List<Object> res = new ArrayList<>();
|
||||||
|
getTracksFromPoint(tileBox, point, res);
|
||||||
|
return !Algorithms.isEmpty(res);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1098,7 +1107,7 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean runExclusiveAction(Object o, boolean unknownLocation) {
|
public boolean runExclusiveAction(Object object, boolean unknownLocation) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1134,9 +1143,33 @@ public class GPXLayer extends OsmandMapLayer implements IContextMenuProvider, IM
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onLongPressEvent(PointF point, RotatedTileBox tileBox) {
|
public boolean onLongPressEvent(PointF point, RotatedTileBox tileBox) {
|
||||||
|
if (tileBox.getZoom() >= START_ZOOM) {
|
||||||
|
List<Object> trackPoints = new ArrayList<>();
|
||||||
|
getTracksFromPoint(tileBox, point, trackPoints);
|
||||||
|
|
||||||
|
if (!Algorithms.isEmpty(trackPoints)) {
|
||||||
|
MapActivity mapActivity = (MapActivity) view.getContext();
|
||||||
|
SelectedGpxPoint selectedGpxPoint = (SelectedGpxPoint) trackPoints.get(0);
|
||||||
|
WptPt wptPt = selectedGpxPoint.getSelectedPoint();
|
||||||
|
PointDescription description = getObjectName(selectedGpxPoint);
|
||||||
|
mapActivity.getContextMenu().show(new LatLon(wptPt.lat, wptPt.lon), description, selectedGpxPoint);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object object) {
|
||||||
|
if (!(object instanceof SelectedGpxPoint)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
MapActivity mapActivity = (MapActivity) view.getContext();
|
||||||
|
SelectedGpxPoint point = (SelectedGpxPoint) object;
|
||||||
|
TrackMenuFragment.showInstance(mapActivity, point.getSelectedGpxFile(), point, null, null, false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LatLon getTextLocation(WptPt o) {
|
public LatLon getTextLocation(WptPt o) {
|
||||||
return new LatLon(o.lat, o.lon);
|
return new LatLon(o.lat, o.lon);
|
||||||
|
|
|
@ -128,7 +128,7 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,6 +142,11 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o, boolean unknownLocation) {
|
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o, boolean unknownLocation) {
|
||||||
if (tileBox.getZoom() >= START_ZOOM) {
|
if (tileBox.getZoom() >= START_ZOOM) {
|
||||||
|
|
|
@ -497,7 +497,7 @@ public class MapMarkersLayer extends OsmandMapLayer implements IContextMenuProvi
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return inPlanRouteMode;
|
return inPlanRouteMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -531,6 +531,11 @@ public class MapMarkersLayer extends OsmandMapLayer implements IContextMenuProvi
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o, boolean unknownLocation) {
|
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o, boolean unknownLocation) {
|
||||||
if (tileBox.getZoom() < 3 || !map.getMyApplication().getSettings().SHOW_MAP_MARKERS.get()) {
|
if (tileBox.getZoom() < 3 || !map.getMyApplication().getSettings().SHOW_MAP_MARKERS.get()) {
|
||||||
|
|
|
@ -16,6 +16,7 @@ import android.widget.LinearLayout.LayoutParams;
|
||||||
import android.widget.ScrollView;
|
import android.widget.ScrollView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
|
@ -379,7 +380,7 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -408,6 +409,11 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LatLon getTextLocation(Amenity o) {
|
public LatLon getTextLocation(Amenity o) {
|
||||||
return o.getLocation();
|
return o.getLocation();
|
||||||
|
|
|
@ -13,6 +13,7 @@ import android.graphics.RectF;
|
||||||
import android.graphics.drawable.LayerDrawable;
|
import android.graphics.drawable.LayerDrawable;
|
||||||
|
|
||||||
import androidx.annotation.ColorInt;
|
import androidx.annotation.ColorInt;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.content.res.AppCompatResources;
|
import androidx.appcompat.content.res.AppCompatResources;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.core.graphics.drawable.DrawableCompat;
|
import androidx.core.graphics.drawable.DrawableCompat;
|
||||||
|
@ -22,14 +23,15 @@ import net.osmand.PlatformUtil;
|
||||||
import net.osmand.data.LatLon;
|
import net.osmand.data.LatLon;
|
||||||
import net.osmand.data.PointDescription;
|
import net.osmand.data.PointDescription;
|
||||||
import net.osmand.data.RotatedTileBox;
|
import net.osmand.data.RotatedTileBox;
|
||||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
|
||||||
import net.osmand.plus.OsmAndLocationProvider;
|
import net.osmand.plus.OsmAndLocationProvider;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.UiUtilities;
|
import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.base.MapViewTrackingUtilities;
|
import net.osmand.plus.base.MapViewTrackingUtilities;
|
||||||
import net.osmand.plus.profiles.ProfileIconColors;
|
import net.osmand.plus.profiles.ProfileIconColors;
|
||||||
|
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||||
import net.osmand.plus.views.OsmandMapLayer;
|
import net.osmand.plus.views.OsmandMapLayer;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
|
import net.osmand.plus.views.layers.ContextMenuLayer.IContextMenuProvider;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
|
||||||
|
@ -38,7 +40,7 @@ import java.util.List;
|
||||||
import static android.graphics.Paint.ANTI_ALIAS_FLAG;
|
import static android.graphics.Paint.ANTI_ALIAS_FLAG;
|
||||||
import static android.graphics.Paint.FILTER_BITMAP_FLAG;
|
import static android.graphics.Paint.FILTER_BITMAP_FLAG;
|
||||||
|
|
||||||
public class PointLocationLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider {
|
public class PointLocationLayer extends OsmandMapLayer implements IContextMenuProvider {
|
||||||
private static final Log LOG = PlatformUtil.getLog(PointLocationLayer.class);
|
private static final Log LOG = PlatformUtil.getLog(PointLocationLayer.class);
|
||||||
|
|
||||||
protected final static int RADIUS = 7;
|
protected final static int RADIUS = 7;
|
||||||
|
@ -226,7 +228,7 @@ public class PointLocationLayer extends OsmandMapLayer implements ContextMenuLay
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,6 +242,11 @@ public class PointLocationLayer extends OsmandMapLayer implements ContextMenuLay
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private LatLon getMyLocation() {
|
private LatLon getMyLocation() {
|
||||||
Location location = locationProvider.getLastKnownLocation();
|
Location location = locationProvider.getLastKnownLocation();
|
||||||
if (location != null) {
|
if (location != null) {
|
||||||
|
|
|
@ -23,11 +23,13 @@ import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.views.OsmandMapLayer;
|
import net.osmand.plus.views.OsmandMapLayer;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
import net.osmand.plus.views.layers.ContextMenuLayer.IContextMenuProvider;
|
import net.osmand.plus.views.layers.ContextMenuLayer.IContextMenuProvider;
|
||||||
|
import net.osmand.plus.views.layers.ContextMenuLayer.IMoveObjectProvider;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class PointNavigationLayer extends OsmandMapLayer implements
|
public class PointNavigationLayer extends OsmandMapLayer implements
|
||||||
IContextMenuProvider, ContextMenuLayer.IMoveObjectProvider {
|
IContextMenuProvider, IMoveObjectProvider {
|
||||||
|
|
||||||
protected final static int DIST_TO_SHOW = 80;
|
protected final static int DIST_TO_SHOW = 80;
|
||||||
|
|
||||||
private Paint mPoint;
|
private Paint mPoint;
|
||||||
|
@ -172,7 +174,7 @@ public class PointNavigationLayer extends OsmandMapLayer implements
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,6 +188,11 @@ public class PointNavigationLayer extends OsmandMapLayer implements
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o, boolean unknownLocation) {
|
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o, boolean unknownLocation) {
|
||||||
if (tileBox.getZoom() >= 3) {
|
if (tileBox.getZoom() >= 3) {
|
||||||
|
|
|
@ -46,6 +46,7 @@ import net.osmand.plus.routing.TransportRoutingHelper;
|
||||||
import net.osmand.plus.settings.backend.CommonPreference;
|
import net.osmand.plus.settings.backend.CommonPreference;
|
||||||
import net.osmand.plus.views.OsmandMapLayer;
|
import net.osmand.plus.views.OsmandMapLayer;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
|
import net.osmand.plus.views.layers.ContextMenuLayer.IContextMenuProvider;
|
||||||
import net.osmand.plus.views.layers.geometry.PublicTransportGeometryWay;
|
import net.osmand.plus.views.layers.geometry.PublicTransportGeometryWay;
|
||||||
import net.osmand.plus.views.layers.geometry.PublicTransportGeometryWayContext;
|
import net.osmand.plus.views.layers.geometry.PublicTransportGeometryWayContext;
|
||||||
import net.osmand.plus.views.layers.geometry.RouteGeometryWay;
|
import net.osmand.plus.views.layers.geometry.RouteGeometryWay;
|
||||||
|
@ -67,7 +68,7 @@ import java.util.Map;
|
||||||
|
|
||||||
import static net.osmand.plus.dialogs.ConfigureMapMenu.CURRENT_TRACK_WIDTH_ATTR;
|
import static net.osmand.plus.dialogs.ConfigureMapMenu.CURRENT_TRACK_WIDTH_ATTR;
|
||||||
|
|
||||||
public class RouteLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider {
|
public class RouteLayer extends OsmandMapLayer implements IContextMenuProvider {
|
||||||
|
|
||||||
private static final Log log = PlatformUtil.getLog(RouteLayer.class);
|
private static final Log log = PlatformUtil.getLog(RouteLayer.class);
|
||||||
|
|
||||||
|
@ -802,7 +803,7 @@ public class RouteLayer extends OsmandMapLayer implements ContextMenuLayer.ICont
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return isInRouteLineAppearanceMode();
|
return isInRouteLineAppearanceMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -815,4 +816,9 @@ public class RouteLayer extends OsmandMapLayer implements ContextMenuLayer.ICont
|
||||||
public boolean runExclusiveAction(@Nullable Object o, boolean unknownLocation) {
|
public boolean runExclusiveAction(@Nullable Object o, boolean unknownLocation) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import android.util.DisplayMetrics;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
|
||||||
import androidx.annotation.DrawableRes;
|
import androidx.annotation.DrawableRes;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
import net.osmand.ResultMatcher;
|
import net.osmand.ResultMatcher;
|
||||||
|
@ -21,16 +22,17 @@ import net.osmand.data.TransportStop;
|
||||||
import net.osmand.osm.edit.Node;
|
import net.osmand.osm.edit.Node;
|
||||||
import net.osmand.osm.edit.Way;
|
import net.osmand.osm.edit.Way;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.base.PointImageDrawable;
|
|
||||||
import net.osmand.plus.settings.backend.CommonPreference;
|
|
||||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
import net.osmand.plus.base.PointImageDrawable;
|
||||||
import net.osmand.plus.render.RenderingIcons;
|
import net.osmand.plus.render.RenderingIcons;
|
||||||
|
import net.osmand.plus.settings.backend.CommonPreference;
|
||||||
|
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||||
import net.osmand.plus.transport.TransportStopRoute;
|
import net.osmand.plus.transport.TransportStopRoute;
|
||||||
import net.osmand.plus.transport.TransportStopType;
|
import net.osmand.plus.transport.TransportStopType;
|
||||||
import net.osmand.plus.views.OsmandMapLayer;
|
import net.osmand.plus.views.OsmandMapLayer;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
|
import net.osmand.plus.views.layers.ContextMenuLayer.IContextMenuProvider;
|
||||||
import net.osmand.plus.views.layers.geometry.GeometryWay;
|
import net.osmand.plus.views.layers.geometry.GeometryWay;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -40,7 +42,7 @@ import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
|
||||||
public class TransportStopsLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider {
|
public class TransportStopsLayer extends OsmandMapLayer implements IContextMenuProvider {
|
||||||
|
|
||||||
public static final String TRANSPORT_STOPS_OVER_MAP = "transportStops";
|
public static final String TRANSPORT_STOPS_OVER_MAP = "transportStops";
|
||||||
|
|
||||||
|
@ -294,7 +296,7 @@ public class TransportStopsLayer extends OsmandMapLayer implements ContextMenuLa
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disableLongPressOnMap() {
|
public boolean disableLongPressOnMap(PointF point, RotatedTileBox tileBox) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,6 +310,11 @@ public class TransportStopsLayer extends OsmandMapLayer implements ContextMenuLa
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean showMenuAction(@Nullable Object o) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> res, boolean unknownLocation) {
|
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> res, boolean unknownLocation) {
|
||||||
if(tileBox.getZoom() >= startZoomRoute && stopRoute != null) {
|
if(tileBox.getZoom() >= startZoomRoute && stopRoute != null) {
|
||||||
|
|
|
@ -21,10 +21,10 @@ import java.lang.ref.WeakReference;
|
||||||
|
|
||||||
public class WidgetsVisibilityHelper {
|
public class WidgetsVisibilityHelper {
|
||||||
|
|
||||||
private MapActivity mapActivity;
|
private final MapActivity mapActivity;
|
||||||
private OsmandSettings settings;
|
private final OsmandSettings settings;
|
||||||
private RoutingHelper routingHelper;
|
private final RoutingHelper routingHelper;
|
||||||
private MapActivityLayers mapLayers;
|
private final MapActivityLayers mapLayers;
|
||||||
|
|
||||||
public WidgetsVisibilityHelper(@NonNull MapActivity mapActivity) {
|
public WidgetsVisibilityHelper(@NonNull MapActivity mapActivity) {
|
||||||
this.mapActivity = mapActivity;
|
this.mapActivity = mapActivity;
|
||||||
|
@ -104,7 +104,6 @@ public class WidgetsVisibilityHelper {
|
||||||
public boolean shouldHideCompass() {
|
public boolean shouldHideCompass() {
|
||||||
return mapActivity.shouldHideTopControls()
|
return mapActivity.shouldHideTopControls()
|
||||||
|| isTrackDetailsMenuOpened()
|
|| isTrackDetailsMenuOpened()
|
||||||
|| isInMeasurementToolMode()
|
|
||||||
|| isInPlanRouteMode()
|
|| isInPlanRouteMode()
|
||||||
|| isInChoosingRoutesMode()
|
|| isInChoosingRoutesMode()
|
||||||
|| isInTrackAppearanceMode()
|
|| isInTrackAppearanceMode()
|
||||||
|
@ -116,7 +115,6 @@ public class WidgetsVisibilityHelper {
|
||||||
public boolean shouldShowTopButtons() {
|
public boolean shouldShowTopButtons() {
|
||||||
return !mapActivity.shouldHideTopControls()
|
return !mapActivity.shouldHideTopControls()
|
||||||
&& !isTrackDetailsMenuOpened()
|
&& !isTrackDetailsMenuOpened()
|
||||||
&& !isInMeasurementToolMode()
|
|
||||||
&& !isInPlanRouteMode()
|
&& !isInPlanRouteMode()
|
||||||
&& !isInChoosingRoutesMode()
|
&& !isInChoosingRoutesMode()
|
||||||
&& !isInTrackAppearanceMode()
|
&& !isInTrackAppearanceMode()
|
||||||
|
|
|
@ -10,7 +10,7 @@ buildscript {
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
//classpath 'com.android.tools.build:gradle:2.+'
|
//classpath 'com.android.tools.build:gradle:2.+'
|
||||||
classpath 'com.android.tools.build:gradle:4.1.2'
|
classpath 'com.android.tools.build:gradle:4.1.3'
|
||||||
classpath 'com.google.gms:google-services:3.0.0'
|
classpath 'com.google.gms:google-services:3.0.0'
|
||||||
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
|
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
|
|
Loading…
Reference in a new issue