Merge branch 'master' of https://github.com/osmandapp/Osmand
This commit is contained in:
commit
a38cf3d368
20 changed files with 193 additions and 161 deletions
|
@ -2411,7 +2411,7 @@
|
|||
<string name="poi_cross">Kors</string>
|
||||
<string name="poi_summit_cross">Topkors: ja</string>
|
||||
|
||||
<string name="poi_prison_camp">Fangelejr</string>
|
||||
<string name="poi_prison_camp">Tidligere fangelejr</string>
|
||||
<string name="poi_concentration_camp">Type: koncentrationslejr</string>
|
||||
<string name="poi_pow_camp">Type: krigsfangelejr</string>
|
||||
<string name="poi_labor_camp">Type: arbejdslejr</string>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -950,4 +950,16 @@
|
|||
<string name="poi_denomination_greek_catholic">東方典礼カトリック教会(Greek catholic)</string>
|
||||
<string name="poi_denomination_united_reformed">アメリカ・オランダ改革派(United reformed)</string>
|
||||
<string name="poi_denomination_church_of_scotland">スコットランド国教会(Church of Scotland)</string>
|
||||
<string name="poi_denomination_tibetan">チベット仏教(Tibetan)</string>
|
||||
<string name="poi_denomination_salvation_army">救世軍(Salvation army)</string>
|
||||
<string name="poi_denomination_iglesia_ni_cristo">イグレシア・ニ・クリスト(Iglesia ni cristo)</string>
|
||||
<string name="poi_denomination_uniting">オーストラリア連合教会(Uniting)</string>
|
||||
<string name="poi_denomination_mennonite">メノナイト・メノー派(Mennonite)</string>
|
||||
<string name="poi_denomination_quaker">クエーカー・キリスト友会(Quaker)</string>
|
||||
<string name="poi_denomination_bulgarian_orthodox">ブルガリア正教会(Bulgarian orthodox)</string>
|
||||
<string name="poi_denomination_assemblies_of_god">アッセンブリーズ・オブ・ゴッド教団(Assemblies of god)</string>
|
||||
<string name="poi_denomination_nondenominational">無教会主義・特定の宗派に属さない教会(Nondenominational)</string>
|
||||
<string name="poi_denomination_adventist">アドベンチスト・安息日再臨派(Adventist)</string>
|
||||
<string name="poi_denomination_nazarene">ナザレン教会(Nazarene)</string>
|
||||
<string name="poi_denomination_united_methodist">統一メソジスト教会(United methodist)</string>
|
||||
</resources>
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
<string name="poi_baby_goods">Товары для детей</string>
|
||||
<string name="poi_bag">Сумки, чемоданы</string>
|
||||
<string name="poi_bathroom_furnishing">Сантехника, ванные</string>
|
||||
<string name="poi_bed">Спальные принадлежности</string>
|
||||
<string name="poi_bed">Магазин постельного белья</string>
|
||||
<string name="poi_boutique">Бутик</string>
|
||||
<string name="poi_carpet">Магазин ковров</string>
|
||||
<string name="poi_charity">Благотворительный магазин</string>
|
||||
|
@ -415,7 +415,7 @@
|
|||
<string name="poi_croquet">Крокет</string>
|
||||
<string name="poi_cycling">Велосипедный спорт</string>
|
||||
<string name="poi_diving">Прыжки в воду</string>
|
||||
<string name="poi_scuba_diving">Подводное плавание</string>
|
||||
<string name="poi_scuba_diving">Плавание с аквалангом</string>
|
||||
<string name="poi_dog_racing">Собачьи бега</string>
|
||||
<string name="poi_equestrian">Верховая езда</string>
|
||||
<string name="poi_golf">Гольф</string>
|
||||
|
@ -454,7 +454,7 @@
|
|||
<string name="poi_attraction">Достопримечательность</string>
|
||||
<string name="poi_memorial">Памятник, мемориал</string>
|
||||
<string name="poi_artwork">Произведение искусства</string>
|
||||
<string name="poi_archaeological_site">Раскопки</string>
|
||||
<string name="poi_archaeological_site">Археологические раскопки</string>
|
||||
<string name="poi_battlefield">Поле битвы</string>
|
||||
<string name="poi_boundary_stone">Межевой камень</string>
|
||||
<string name="poi_castle">Замок</string>
|
||||
|
@ -848,23 +848,23 @@
|
|||
<string name="poi_public_transport_stop_position">Остановка общественного транспорта</string>
|
||||
<string name="poi_railway_buffer_stop">Железнодорожный буфер</string>
|
||||
<string name="poi_junction">Перекрёсток</string>
|
||||
<string name="poi_observation_tower">Смотровая башня</string>
|
||||
<string name="poi_observation_tower">Наблюдательная башня</string>
|
||||
<string name="poi_bell_tower">Колокольня</string>
|
||||
<string name="poi_industrial">Промышленный район</string>
|
||||
<string name="poi_industrial">Промышленная зона</string>
|
||||
<string name="poi_allotments">Сады</string>
|
||||
<string name="poi_farmyard">Сельскохозяйственный двор</string>
|
||||
<string name="poi_farmyard">Фермерское хозяйство</string>
|
||||
<string name="poi_meadow">Луг</string>
|
||||
<string name="poi_landuse_railway">Территория железной дороги</string>
|
||||
<string name="poi_basin">Искусственный водоём</string>
|
||||
|
||||
<string name="poi_storage_tank">Резервуар</string>
|
||||
<string name="poi_storage_tank">Бак для жидкости</string>
|
||||
|
||||
<string name="poi_neighbourhood">Микрорайон</string>
|
||||
<string name="poi_residential">Жилой район</string>
|
||||
<string name="poi_religious">Религиозное землепользование</string>
|
||||
|
||||
<!-- <string name="poi_general_tourist_attraction_yes">Достопримечательность (тип неизвестен)</string>-->
|
||||
<string name="poi_attraction_amusement_ride">Парк атракционов</string>
|
||||
<string name="poi_attraction_amusement_ride">Атракцион</string>
|
||||
<string name="poi_wilderness_hut">Лесной домик</string>
|
||||
<string name="poi_hunting_lodge">Охотничий домик</string>
|
||||
|
||||
|
@ -2358,7 +2358,7 @@
|
|||
<string name="poi_cross">Крест</string>
|
||||
<string name="poi_summit_cross">Крест на вершине: есть</string>
|
||||
|
||||
<string name="poi_prison_camp">Бывший лагерь военнопленных</string>
|
||||
<string name="poi_prison_camp">Бывший тюремный лагерь</string>
|
||||
<string name="poi_concentration_camp">Тип: концентрационный лагерь</string>
|
||||
<string name="poi_pow_camp">Тип: для военнопленных</string>
|
||||
<string name="poi_labor_camp">Тип: исправительно-трудовой</string>
|
||||
|
@ -2369,4 +2369,4 @@
|
|||
<string name="poi_bathing_yes">Купание: да</string>
|
||||
<string name="poi_bathing_no">Купание: нет</string>
|
||||
|
||||
</resources>
|
||||
</resources>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<resources>
|
||||
<string name="osmo_use_https_descr">Использовать безопасное подключение к серверу</string>
|
||||
<string name="osmo_use_https">Использовать HTTPS</string>
|
||||
<string name="srtm_plugin_description">"Плагин обеспечивает наложение контурных линий и (рельефа) затемняющего слоя, которые будут отображаться поверх оффлайн карт OsmAnd. Эта функция высоко оценится спортсменами, туристами, путешественниками и всеми, кто заинтересован в рельефной структуре ландшафта.\n\nГлобальные данные (между 70 градусов на севере и 70 градусов на юге) основываются на измерениях SRTM (Shuttle Radar Topography Mission) и ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), инструментом визуализации Terra, флагманского спутника Земли системы наблюдения NASA. ASTER является результатом совместных усилий NASA, министерства экономики Японии, торговли и промышленности (METI), космических систем Японии (J-spacesystems). "</string>
|
||||
<string name="srtm_plugin_description">"Этот плагин обеспечивает как наложение контурных линий, так и отображения затеняющего слоя рельефа поверх стандартных карт OsmAnd. Эта функция высоко оценится спортсменами, туристами, путешественниками и всеми, кто заинтересован в рельефной структуре ландшафта.\n\nГлобальные данные (между 70 градусами на севере и 70 градусами на юге) основываются на измерениях SRTM (Shuttle Radar Topography Mission) и ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer) — инструментом визуализации Terra, флагманского спутника Системы Наблюдения Земли NASA. ASTER является результатом совместных усилий NASA, министерства экономики Японии, торговли и промышленности (METI), а также Космических Систем Японии (J-spacesystems). "</string>
|
||||
<string name="srtm_paid_version_msg">Рассмотрите, пожалуйста, покупку плагина \"Линии высот\" в Google Play, чтобы поддержать последующую разработку.</string>
|
||||
<string name="srtm_paid_version_title">Линии высот</string>
|
||||
<string name="av_def_action_video">Запись видео</string>
|
||||
|
@ -89,8 +89,7 @@
|
|||
<string name="online_map_settings_descr">Настройки источников онлайн карт и слоёв</string>
|
||||
|
||||
|
||||
<string name="osmand_rastermaps_plugin_description">"С помощью этого плагина вы можете получить доступ ко множеству видов интернет карт (тайловых или растровых), от предопределенных тайловых OpenStreetMap (Mapnik) до спутниковых изображений и специальных слоев назначения, таких как карты погоды, климатические карты, геологических карты, слои затемнения высот и т.д.
|
||||
\nЛюбая из этих карт может быть использована в качестве основной (базовой) карты для отображения на экране OsmAnd или в виде наложения/подложки к другой базовой карте (обычной оффлайн карте OsmAnd). Для того чтобы сделать любую подложку более видимой, некоторые элементы векторной карты OsmAnd могут быть по желанию легко скрыты через меню \"Настройка карты\".\nТайловые карты могут быть получены непосредственно с помощью онлайн-источников или могут быть подготовлены для использования в автономном режиме (и вручную скопированы в папку данных OsmAnd) в качестве базы данных SQLite, которая может быть получена с помощью различных инструментов подготовки карт сторонних производителей. "</string>
|
||||
<string name="osmand_rastermaps_plugin_description">"С помощью этого плагина можно получить доступ ко множеству видов онлайн-карт (тайловых или растровых), от предопределенных тайловых OpenStreetMap (Mapnik) до спутниковых снимков и слоев специального назначения, таких как карты погоды, климатические карты, геологических карты, слои затемнения высот и т. д.\n\nЛюбая из этих карт может быть использована в качестве основной (базовой) карты для отображения на экране OsmAnd или в виде наложения или подложки к другой базовой карте (например стандартной офлайн-карте OsmAnd). Чтобы сделать какую-либо подложку лучше видимой, некоторые элементы векторной карты OsmAnd могут быть по желанию легко скрыты через меню «Настройка карты».\n\nТайловые карты можно получить непосредственно с помощью онлайн-источников или подготовить для использования в автономном режиме (и вручную скопировать в папку данных OsmAnd) в виде базы данных sqlite, которая может быть создана с помощью различных инструментов подготовки карт сторонних производителей. "</string>
|
||||
<string name="osmand_background_plugin_description">Этот плагин предоставляет навигацию и запись маршрутов в энергосберегающем режиме. Плагин работает в фоновом режиме и периодически активизирует GPS для записи маршрута или воспроизведения голосовых команд.</string>
|
||||
<string name="osmand_accessibility_description">"Плагин добавляет поддержку специальных возможностей устройства непосредственно в OsmAnd. Это облегчает, например, регулировку скорости речи для голоса TTS, настройку направленности экрана навигации, управление масштабом при помощи трекбола или использование голосовых команд обратной связи для авто аннотации вашего местоположения."</string>
|
||||
|
||||
|
@ -1045,7 +1044,7 @@
|
|||
<string name="precise_routing_mode_descr">Включите, для расчёта точных маршрутов без затруднений. Всё ещё ограниченн расстоянием и медленный.</string>
|
||||
|
||||
|
||||
<string name="download_hillshade_maps">Карты с рельефом местности</string>
|
||||
<string name="download_hillshade_maps">Затемнение рельефа</string>
|
||||
<string name="av_use_external_camera_descr">Использовать системную программу для фото</string>
|
||||
<string name="av_use_external_camera">Использовать приложение Камера</string>
|
||||
<string name="index_name_openmaps">OpenMaps - Европа</string>
|
||||
|
@ -1359,7 +1358,7 @@
|
|||
<string name="osmo_group_name">Название группы</string>
|
||||
<string name="osmo_connect_to_group">Подключиться к группе</string>
|
||||
<string name="osmo_create_group">Создать группу</string>
|
||||
<string name="osmo_enable_tracker">Отправить моё местоположение</string>
|
||||
<string name="osmo_enable_tracker">Отправить мои местоположения</string>
|
||||
<string name="osmo_group_description">Описание</string>
|
||||
<string name="int_days">дней</string>
|
||||
<string name="osmo_track_interval">Интервал отправки</string>
|
||||
|
@ -1645,7 +1644,7 @@
|
|||
<string name="version_settings_descr">Скачать ночные сборки</string>
|
||||
<string name="version_settings">Сборки</string>
|
||||
|
||||
<string name="shared_string_my_location">Мое местоположение</string>
|
||||
<string name="shared_string_my_location">Моё местоположение</string>
|
||||
<string name="gps_status">Статус GPS</string>
|
||||
<string name="points">Точки</string>
|
||||
<string name="parking_place">Место для парковки</string>
|
||||
|
@ -1924,7 +1923,7 @@
|
|||
<string name="address_unknown">Адрес неизвестен</string>
|
||||
<string name="are_you_sure">Вы уверены?</string>
|
||||
<string name="unsaved_changes_will_be_lost">Все несохраненные изменения будут потеряны. Продолжить?</string>
|
||||
<string name="simulate_your_location_descr">Моделировать используя записанный GPX или рассчитанный маршрут</string>
|
||||
<string name="simulate_your_location_descr">Моделировать, используя рассчитанный маршрут или записанный GPX</string>
|
||||
<string name="simulate_your_location_stop_descr">Остановить моделирование</string>
|
||||
<string name="favorite_category_add_new">Добавить новую</string>
|
||||
<string name="favorite_category_select">Выберите категорию</string>
|
||||
|
@ -1952,7 +1951,7 @@
|
|||
<string name="world_maps">Карты мира</string>
|
||||
|
||||
<string name="favourites_context_menu_add">Добавить избранное</string>
|
||||
<string name="region_maps">Карты региона</string>
|
||||
<string name="region_maps">Региональные карты</string>
|
||||
<string name="favorite_category_dublicate_message">Категория с таким названием уже существует. Введите другое название.</string>
|
||||
<string name="favorite_category_name">Название категории</string>
|
||||
<string name="favorite_category_add_new_title">Добавить новую категорию</string>
|
||||
|
|
|
@ -2138,4 +2138,13 @@
|
|||
<string name="poi_shower_outdoor">淋浴:戶外</string>
|
||||
<string name="poi_shower_cold">淋浴:冷的</string>
|
||||
<string name="poi_shower_indoor">淋浴:室內</string>
|
||||
<string name="poi_caravans_yes">露營拖車:可以</string>
|
||||
<string name="poi_caravans_no">露營拖車:不可</string>
|
||||
<string name="poi_power_supply_yes">電源供應:有</string>
|
||||
<string name="poi_power_supply_no">電源供應:無</string>
|
||||
<string name="poi_power_supply_cee_17_blue">電源供應(插座):CEE 17 藍色</string>
|
||||
<string name="poi_power_supply_cee_7_4">電源供應(插座):CEE 7/4</string>
|
||||
<string name="poi_power_supply_cee_7_5">電源供應(插座):CEE 7/5</string>
|
||||
<string name="poi_power_supply_nema_5_15">電源供應(插座):NEMA 5-15</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -2362,7 +2362,7 @@
|
|||
<string name="poi_cross">Cross</string>
|
||||
<string name="poi_summit_cross">Summit cross: yes</string>
|
||||
|
||||
<string name="poi_prison_camp">Prison camp</string>
|
||||
<string name="poi_prison_camp">Former prison camp</string>
|
||||
<string name="poi_concentration_camp">Type: concentration camp</string>
|
||||
<string name="poi_pow_camp">Type: pow camp</string>
|
||||
<string name="poi_labor_camp">Type: labor camp</string>
|
||||
|
|
|
@ -66,6 +66,7 @@ import net.osmand.plus.helpers.WakeLockHelper;
|
|||
import net.osmand.plus.mapcontextmenu.MapContextMenu;
|
||||
import net.osmand.plus.mapcontextmenu.editors.FavoritePointEditor;
|
||||
import net.osmand.plus.mapcontextmenu.editors.PointEditor;
|
||||
import net.osmand.plus.mapcontextmenu.other.MapMultiSelectionMenu;
|
||||
import net.osmand.plus.render.RendererRegistry;
|
||||
import net.osmand.plus.resources.ResourceManager;
|
||||
import net.osmand.plus.routing.RoutingHelper;
|
||||
|
@ -99,6 +100,7 @@ public class MapActivity extends AccessibleActivity {
|
|||
|
||||
private static MapViewTrackingUtilities mapViewTrackingUtilities;
|
||||
private static MapContextMenu mapContextMenu = new MapContextMenu();
|
||||
private static MapMultiSelectionMenu mapMultiSelectionMenu;
|
||||
|
||||
/**
|
||||
* Called when the activity is first created.
|
||||
|
@ -162,7 +164,14 @@ public class MapActivity extends AccessibleActivity {
|
|||
settings = app.getSettings();
|
||||
app.applyTheme(this);
|
||||
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||
|
||||
if (mapMultiSelectionMenu == null) {
|
||||
mapMultiSelectionMenu = new MapMultiSelectionMenu(this);
|
||||
} else {
|
||||
mapMultiSelectionMenu.setMapActivity(this);
|
||||
}
|
||||
mapContextMenu.setMapActivity(this);
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
// Full screen is not used here
|
||||
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||
|
@ -970,6 +979,10 @@ public class MapActivity extends AccessibleActivity {
|
|||
return mapContextMenu;
|
||||
}
|
||||
|
||||
public MapMultiSelectionMenu getMultiSelectionMenu() {
|
||||
return mapMultiSelectionMenu;
|
||||
}
|
||||
|
||||
public FavoritePointEditor getFavoritePointEditor() {
|
||||
if (favoritePointEditor == null) {
|
||||
favoritePointEditor = new FavoritePointEditor(app, this);
|
||||
|
|
|
@ -19,6 +19,10 @@ public abstract class BaseMenuController {
|
|||
|
||||
public BaseMenuController(MapActivity mapActivity) {
|
||||
this.mapActivity = mapActivity;
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
portraitMode = AndroidUiHelper.isOrientationPortrait(mapActivity);
|
||||
largeDevice = AndroidUiHelper.isXLargeDevice(mapActivity);
|
||||
light = mapActivity.getMyApplication().getSettings().isLightContent();
|
||||
|
@ -28,6 +32,11 @@ public abstract class BaseMenuController {
|
|||
return mapActivity;
|
||||
}
|
||||
|
||||
public void setMapActivity(MapActivity mapActivity) {
|
||||
this.mapActivity = mapActivity;
|
||||
init();
|
||||
}
|
||||
|
||||
public boolean isLight() {
|
||||
return light;
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ public class AudioVideoNoteMenuController extends MenuController {
|
|||
private Recording recording;
|
||||
|
||||
private DateFormat dateFormat;
|
||||
private DateFormat timeFormat;
|
||||
private AudioVideoNotesPlugin plugin;
|
||||
|
||||
public AudioVideoNoteMenuController(OsmandApplication app, MapActivity mapActivity, final Recording recording) {
|
||||
|
@ -30,6 +31,7 @@ public class AudioVideoNoteMenuController extends MenuController {
|
|||
this.recording = recording;
|
||||
plugin = OsmandPlugin.getPlugin(AudioVideoNotesPlugin.class);
|
||||
dateFormat = android.text.format.DateFormat.getMediumDateFormat(mapActivity);
|
||||
timeFormat = android.text.format.DateFormat.getTimeFormat(mapActivity);
|
||||
|
||||
if (!recording.isPhoto()) {
|
||||
titleButtonController = new TitleButtonController() {
|
||||
|
@ -71,7 +73,7 @@ public class AudioVideoNoteMenuController extends MenuController {
|
|||
String recName = recording.getName(getMapActivity());
|
||||
if (file != null && recType.equals(recName)) {
|
||||
Date date = new Date(recording.getFile().lastModified());
|
||||
return dateFormat.format(date);
|
||||
return dateFormat.format(date) + " " + timeFormat.format(date);
|
||||
} else {
|
||||
return recording.getName(getMapActivity());
|
||||
}
|
||||
|
|
|
@ -68,11 +68,16 @@ public class MapDataMenuController extends MenuController {
|
|||
|
||||
@Override
|
||||
public String getTypeStr() {
|
||||
String res;
|
||||
if (region != null && region.getSuperregion() != null) {
|
||||
return region.getSuperregion().getLocaleName() + "\n";
|
||||
res = region.getSuperregion().getLocaleName();
|
||||
} else {
|
||||
return getMapActivity().getString(R.string.shared_string_map) + "\n";
|
||||
res = getMapActivity().getString(R.string.shared_string_map);
|
||||
}
|
||||
if (getMenuType() == MenuType.STANDARD) {
|
||||
res += "\n";
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package net.osmand.plus.mapcontextmenu.other;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
|
||||
import net.osmand.data.LatLon;
|
||||
|
@ -12,32 +11,30 @@ import net.osmand.plus.mapcontextmenu.MenuController.MenuType;
|
|||
import net.osmand.plus.mapcontextmenu.MenuTitleController;
|
||||
import net.osmand.plus.views.ContextMenuLayer;
|
||||
import net.osmand.plus.views.ContextMenuLayer.IContextMenuProvider;
|
||||
import net.osmand.plus.views.OsmandMapLayer;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class ObjectSelectionMenu extends BaseMenuController {
|
||||
|
||||
private static final String KEY_OBJ_SEL_MENU_LATLON = "key_obj_sel_menu_latlon";
|
||||
private static final String KEY_OBJ_SEL_MENU_OBJECTS = "key_obj_sel_menu_objects";
|
||||
public class MapMultiSelectionMenu extends BaseMenuController {
|
||||
|
||||
private LatLon latLon;
|
||||
private LinkedList<MenuObject> objects = new LinkedList<>();
|
||||
private Map<Object, IContextMenuProvider> selectedObjects = new HashMap<>();
|
||||
|
||||
public static class MenuObject extends MenuTitleController implements Serializable {
|
||||
public static class MenuObject extends MenuTitleController {
|
||||
|
||||
private LatLon latLon;
|
||||
private PointDescription pointDescription;
|
||||
private Object object;
|
||||
|
||||
private transient MapActivity mapActivity;
|
||||
private transient MenuController controller;
|
||||
private MapActivity mapActivity;
|
||||
private MenuController controller;
|
||||
|
||||
public MenuObject(LatLon latLon, PointDescription pointDescription, Object object, MapActivity mapActivity) {
|
||||
this.latLon = latLon;
|
||||
|
@ -87,9 +84,16 @@ public class ObjectSelectionMenu extends BaseMenuController {
|
|||
}
|
||||
}
|
||||
|
||||
private ObjectSelectionMenu(LatLon latLon, MapActivity mapActivity) {
|
||||
public MapMultiSelectionMenu(MapActivity mapActivity) {
|
||||
super(mapActivity);
|
||||
this.latLon = latLon;
|
||||
}
|
||||
|
||||
public void setMapActivity(MapActivity mapActivity) {
|
||||
super.setMapActivity(mapActivity);
|
||||
for (MenuObject o : objects) {
|
||||
o.mapActivity = mapActivity;
|
||||
o.init();
|
||||
}
|
||||
}
|
||||
|
||||
public List<MenuObject> getObjects() {
|
||||
|
@ -102,7 +106,9 @@ public class ObjectSelectionMenu extends BaseMenuController {
|
|||
}
|
||||
|
||||
private void createCollection(Map<Object, IContextMenuProvider> selectedObjects) {
|
||||
this.selectedObjects.clear();
|
||||
this.selectedObjects.putAll(selectedObjects);
|
||||
objects.clear();
|
||||
int order = Integer.MAX_VALUE;
|
||||
MenuObject topObject = null;
|
||||
for (Map.Entry<Object, IContextMenuProvider> e : selectedObjects.entrySet()) {
|
||||
|
@ -147,39 +153,50 @@ public class ObjectSelectionMenu extends BaseMenuController {
|
|||
}
|
||||
}
|
||||
|
||||
public static void show(LatLon latLon, Map<Object, IContextMenuProvider> selectedObjects, MapActivity mapActivity) {
|
||||
|
||||
if (isVisible(mapActivity)) {
|
||||
hide(mapActivity);
|
||||
}
|
||||
|
||||
ObjectSelectionMenu menu = new ObjectSelectionMenu(latLon, mapActivity);
|
||||
menu.createCollection(selectedObjects);
|
||||
ObjectSelectionMenuFragment.showInstance(menu);
|
||||
private void clearMenu() {
|
||||
clearSelectedObjects();
|
||||
objects.clear();
|
||||
}
|
||||
|
||||
public static boolean isVisible(MapActivity mapActivity) {
|
||||
Fragment fragment = mapActivity.getSupportFragmentManager().findFragmentByTag(ObjectSelectionMenuFragment.TAG);
|
||||
public void show(LatLon latLon, Map<Object, IContextMenuProvider> selectedObjects) {
|
||||
if (isVisible()) {
|
||||
hide();
|
||||
}
|
||||
|
||||
for (Map.Entry<Object, IContextMenuProvider> e : selectedObjects.entrySet()) {
|
||||
if (e.getValue() instanceof ContextMenuLayer.IContextMenuProviderSelection) {
|
||||
((ContextMenuLayer.IContextMenuProviderSelection) e.getValue()).setSelectedObject(e.getKey());
|
||||
}
|
||||
}
|
||||
|
||||
this.latLon = latLon;
|
||||
createCollection(selectedObjects);
|
||||
MapMultiSelectionMenuFragment.showInstance(getMapActivity());
|
||||
}
|
||||
|
||||
public boolean isVisible() {
|
||||
Fragment fragment = getMapActivity().getSupportFragmentManager().findFragmentByTag(MapMultiSelectionMenuFragment.TAG);
|
||||
return fragment != null;
|
||||
}
|
||||
|
||||
public static void hide(MapActivity mapActivity) {
|
||||
Fragment fragment = mapActivity.getSupportFragmentManager().findFragmentByTag(ObjectSelectionMenuFragment.TAG);
|
||||
public void hide() {
|
||||
clearMenu();
|
||||
Fragment fragment = getMapActivity().getSupportFragmentManager().findFragmentByTag(MapMultiSelectionMenuFragment.TAG);
|
||||
if (fragment != null) {
|
||||
ObjectSelectionMenuFragment menuFragment = (ObjectSelectionMenuFragment) fragment;
|
||||
MapMultiSelectionMenuFragment menuFragment = (MapMultiSelectionMenuFragment) fragment;
|
||||
menuFragment.dismissMenu();
|
||||
}
|
||||
}
|
||||
|
||||
public void onDismiss() {
|
||||
public void onStop() {
|
||||
clearSelectedObjects();
|
||||
}
|
||||
|
||||
public void openContextMenu(MenuObject menuObject) {
|
||||
if (selectedObjects.containsKey(menuObject.getObject())) {
|
||||
selectedObjects.remove(menuObject.getObject());
|
||||
}
|
||||
clearSelectedObjects();
|
||||
hide(getMapActivity());
|
||||
hide();
|
||||
getMapActivity().getContextMenu()
|
||||
.show(menuObject.getLatLon(), menuObject.getPointDescription(), menuObject.getObject());
|
||||
}
|
||||
|
@ -190,32 +207,6 @@ public class ObjectSelectionMenu extends BaseMenuController {
|
|||
((ContextMenuLayer.IContextMenuProviderSelection) p).clearSelectedObject();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void saveMenu(Bundle bundle) {
|
||||
bundle.putSerializable(KEY_OBJ_SEL_MENU_LATLON, latLon);
|
||||
bundle.putSerializable(KEY_OBJ_SEL_MENU_OBJECTS, objects);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static ObjectSelectionMenu restoreMenu(Bundle bundle, MapActivity mapActivity) {
|
||||
|
||||
LatLon latLon = null;
|
||||
Object latLonObj = bundle.getSerializable(KEY_OBJ_SEL_MENU_LATLON);
|
||||
if (latLonObj != null) {
|
||||
latLon = (LatLon) latLonObj;
|
||||
}
|
||||
Object objects = bundle.getSerializable(KEY_OBJ_SEL_MENU_OBJECTS);
|
||||
|
||||
ObjectSelectionMenu menu = new ObjectSelectionMenu(latLon, mapActivity);
|
||||
if (objects != null) {
|
||||
menu.objects = (LinkedList<MenuObject>) objects;
|
||||
for (MenuObject menuObject : menu.objects) {
|
||||
menuObject.mapActivity = mapActivity;
|
||||
menuObject.init();
|
||||
}
|
||||
}
|
||||
|
||||
return menu;
|
||||
selectedObjects.clear();
|
||||
}
|
||||
}
|
|
@ -22,34 +22,27 @@ import android.widget.TextView;
|
|||
import net.osmand.plus.IconsCache;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.mapcontextmenu.other.ObjectSelectionMenu.MenuObject;
|
||||
import net.osmand.plus.mapcontextmenu.other.MapMultiSelectionMenu.MenuObject;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
|
||||
|
||||
public class ObjectSelectionMenuFragment extends Fragment implements AdapterView.OnItemClickListener {
|
||||
public static final String TAG = "ObjectSelectionMenuFragment";
|
||||
public class MapMultiSelectionMenuFragment extends Fragment implements AdapterView.OnItemClickListener {
|
||||
public static final String TAG = "MapMultiSelectionMenuFragment";
|
||||
|
||||
private View view;
|
||||
private ArrayAdapter<MenuObject> listAdapter;
|
||||
private ObjectSelectionMenu menu;
|
||||
|
||||
public ObjectSelectionMenu getMenu() {
|
||||
return menu;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (savedInstanceState != null && getActivity() instanceof MapActivity) {
|
||||
menu = ObjectSelectionMenu.restoreMenu(savedInstanceState, (MapActivity) getActivity());
|
||||
}
|
||||
}
|
||||
private MapMultiSelectionMenu menu;
|
||||
private boolean dismissing = false;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
|
||||
menu = ((MapActivity) getActivity()).getMultiSelectionMenu();
|
||||
|
||||
view = inflater.inflate(R.layout.menu_obj_selection_fragment, container, false);
|
||||
|
||||
ListView listView = (ListView) view.findViewById(R.id.list);
|
||||
|
@ -72,21 +65,19 @@ public class ObjectSelectionMenuFragment extends Fragment implements AdapterView
|
|||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
menu.onDismiss();
|
||||
if (!dismissing) {
|
||||
menu.onStop();
|
||||
}
|
||||
menu.getMapActivity().getContextMenu().setBaseFragmentVisibility(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
menu.saveMenu(outState);
|
||||
}
|
||||
public static void showInstance(final MapActivity mapActivity) {
|
||||
MapMultiSelectionMenu menu = mapActivity.getMultiSelectionMenu();
|
||||
|
||||
public static void showInstance(ObjectSelectionMenu menu) {
|
||||
int slideInAnim = menu.getSlideInAnimation();
|
||||
int slideOutAnim = menu.getSlideOutAnimation();
|
||||
|
||||
ObjectSelectionMenuFragment fragment = new ObjectSelectionMenuFragment();
|
||||
fragment.menu = menu;
|
||||
MapMultiSelectionMenuFragment fragment = new MapMultiSelectionMenuFragment();
|
||||
menu.getMapActivity().getSupportFragmentManager().beginTransaction()
|
||||
.setCustomAnimations(slideInAnim, slideOutAnim, slideInAnim, slideOutAnim)
|
||||
.add(R.id.fragmentContainer, fragment, TAG)
|
||||
|
@ -122,7 +113,7 @@ public class ObjectSelectionMenuFragment extends Fragment implements AdapterView
|
|||
}
|
||||
|
||||
private ArrayAdapter<MenuObject> createAdapter() {
|
||||
final List<MenuObject> items = menu.getObjects();
|
||||
final List<MenuObject> items = new LinkedList<>(menu.getObjects());
|
||||
return new ArrayAdapter<MenuObject>(menu.getMapActivity(), R.layout.menu_obj_list_item, items) {
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
|
@ -175,6 +166,7 @@ public class ObjectSelectionMenuFragment extends Fragment implements AdapterView
|
|||
}
|
||||
|
||||
public void dismissMenu() {
|
||||
dismissing = true;
|
||||
if (menu.getMapActivity().getContextMenu().isVisible()) {
|
||||
menu.getMapActivity().getContextMenu().hide();
|
||||
} else {
|
|
@ -21,7 +21,6 @@ import android.widget.Button;
|
|||
import android.widget.ImageButton;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.StringMatcher;
|
||||
import net.osmand.osm.AbstractPoiType;
|
||||
|
@ -32,7 +31,6 @@ import net.osmand.osm.PoiType;
|
|||
import net.osmand.osm.edit.OSMSettings;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.osmedit.data.EditPoiData;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
|
|
@ -20,13 +20,11 @@ import android.widget.ImageButton;
|
|||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.osm.edit.OSMSettings;
|
||||
import net.osmand.plus.IconsCache;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.osmedit.data.EditPoiData;
|
||||
import net.osmand.plus.osmedit.dialogs.OpeningHoursDaysDialogFragment;
|
||||
import net.osmand.plus.osmedit.dialogs.OpeningHoursHoursDialogFragment;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package net.osmand.plus.osmedit.data;
|
||||
package net.osmand.plus.osmedit;
|
||||
|
||||
import net.osmand.data.Amenity;
|
||||
import net.osmand.osm.PoiType;
|
|
@ -42,7 +42,6 @@ import android.widget.EditText;
|
|||
import android.widget.ImageButton;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.access.AccessibleToast;
|
||||
import net.osmand.data.Amenity;
|
||||
|
@ -56,7 +55,6 @@ import net.osmand.plus.OsmandPlugin;
|
|||
import net.osmand.plus.OsmandSettings;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.osmedit.data.EditPoiData;
|
||||
import net.osmand.plus.osmedit.dialogs.DeletePoiDialogFragment;
|
||||
import net.osmand.plus.osmedit.dialogs.PoiSubTypeDialogFragment;
|
||||
import net.osmand.plus.osmedit.dialogs.PoiTypeDialogFragment;
|
||||
|
|
|
@ -16,7 +16,7 @@ import net.osmand.data.RotatedTileBox;
|
|||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.mapcontextmenu.MapContextMenu;
|
||||
import net.osmand.plus.mapcontextmenu.other.ObjectSelectionMenu;
|
||||
import net.osmand.plus.mapcontextmenu.other.MapMultiSelectionMenu;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
@ -48,6 +48,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
|||
|
||||
private final MapActivity activity;
|
||||
private MapContextMenu menu;
|
||||
private MapMultiSelectionMenu multiSelectionMenu;
|
||||
private CallbackWithObject<LatLon> selectOnMap = null;
|
||||
|
||||
private ImageView contextMarker;
|
||||
|
@ -57,6 +58,7 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
|||
public ContextMenuLayer(MapActivity activity){
|
||||
this.activity = activity;
|
||||
menu = activity.getContextMenu();
|
||||
multiSelectionMenu = activity.getMultiSelectionMenu();
|
||||
movementListener = new GestureDetector(activity, new MenuLayerOnGestureListener());
|
||||
}
|
||||
|
||||
|
@ -190,9 +192,9 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
|||
l.collectObjectsFromPoint(point, tileBox, s);
|
||||
for (Object o : s) {
|
||||
selectedObjects.put(o, l);
|
||||
if (l instanceof IContextMenuProviderSelection) {
|
||||
((IContextMenuProviderSelection) l).setSelectedObject(o);
|
||||
}
|
||||
// if (l instanceof IContextMenuProviderSelection) {
|
||||
// ((IContextMenuProviderSelection) l).setSelectedObject(o);
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -247,13 +249,13 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
|||
}
|
||||
|
||||
private void hideVisibleMenues() {
|
||||
if (ObjectSelectionMenu.isVisible(activity)) {
|
||||
ObjectSelectionMenu.hide(activity);
|
||||
if (multiSelectionMenu.isVisible()) {
|
||||
multiSelectionMenu.hide();
|
||||
}
|
||||
}
|
||||
|
||||
private void showContextMenuForSelectedObjects(final LatLon latLon, final Map<Object, IContextMenuProvider> selectedObjects) {
|
||||
ObjectSelectionMenu.show(latLon, selectedObjects, activity);
|
||||
multiSelectionMenu.show(latLon, selectedObjects);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -263,8 +265,8 @@ public class ContextMenuLayer extends OsmandMapLayer {
|
|||
if (menu.isVisible()) {
|
||||
menu.hide();
|
||||
}
|
||||
if (ObjectSelectionMenu.isVisible(activity)) {
|
||||
ObjectSelectionMenu.hide(activity);
|
||||
if (multiSelectionMenu.isVisible()) {
|
||||
multiSelectionMenu.hide();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -123,51 +123,53 @@ public class DownloadedRegionsLayer extends OsmandMapLayer implements IContextMe
|
|||
}
|
||||
private static int ZOOM_TO_SHOW_BORDERS_ST = 5;
|
||||
private static int ZOOM_TO_SHOW_BORDERS = 7;
|
||||
|
||||
private static int ZOOM_TO_SHOW_SELECTION_ST = 3;
|
||||
private static int ZOOM_TO_SHOW_SELECTION = 10;
|
||||
|
||||
@Override
|
||||
public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) {
|
||||
final int zoom = tileBox.getZoom();
|
||||
if(zoom < ZOOM_TO_SHOW_BORDERS_ST) {
|
||||
if(zoom < ZOOM_TO_SHOW_SELECTION_ST) {
|
||||
return;
|
||||
}
|
||||
// draw objects
|
||||
final List<BinaryMapDataObject> currentObjects = data.results;
|
||||
final List<BinaryMapDataObject> selectedObjects = this.selectedObjects;
|
||||
if (zoom >= ZOOM_TO_SHOW_BORDERS_ST && zoom < ZOOM_TO_SHOW_BORDERS && osmandRegions.isInitialized() &&
|
||||
(currentObjects != null || selectedObjects != null)) {
|
||||
if (currentObjects != null) {
|
||||
path.reset();
|
||||
for (BinaryMapDataObject o : currentObjects) {
|
||||
String downloadName = osmandRegions.getDownloadName(o);
|
||||
boolean downloaded = checkIfObjectDownloaded(downloadName);
|
||||
if (!downloaded) {
|
||||
continue;
|
||||
}
|
||||
double lat = MapUtils.get31LatitudeY(o.getPoint31YTile(0));
|
||||
double lon = MapUtils.get31LongitudeX(o.getPoint31XTile(0));
|
||||
path.moveTo(tileBox.getPixXFromLonNoRot(lon), tileBox.getPixYFromLatNoRot(lat));
|
||||
for (int j = 1; j < o.getPointsLength(); j++) {
|
||||
lat = MapUtils.get31LatitudeY(o.getPoint31YTile(j));
|
||||
lon = MapUtils.get31LongitudeX(o.getPoint31XTile(j));
|
||||
path.lineTo(tileBox.getPixXFromLonNoRot(lon), tileBox.getPixYFromLatNoRot(lat));
|
||||
}
|
||||
currentObjects != null) {
|
||||
path.reset();
|
||||
for (BinaryMapDataObject o : currentObjects) {
|
||||
String downloadName = osmandRegions.getDownloadName(o);
|
||||
boolean downloaded = checkIfObjectDownloaded(downloadName);
|
||||
if (!downloaded) {
|
||||
continue;
|
||||
}
|
||||
canvas.drawPath(path, paint);
|
||||
}
|
||||
if (selectedObjects != null) {
|
||||
pathSelected.reset();
|
||||
for (BinaryMapDataObject o : selectedObjects) {
|
||||
double lat = MapUtils.get31LatitudeY(o.getPoint31YTile(0));
|
||||
double lon = MapUtils.get31LongitudeX(o.getPoint31XTile(0));
|
||||
pathSelected.moveTo(tileBox.getPixXFromLonNoRot(lon), tileBox.getPixYFromLatNoRot(lat));
|
||||
for (int j = 1; j < o.getPointsLength(); j++) {
|
||||
lat = MapUtils.get31LatitudeY(o.getPoint31YTile(j));
|
||||
lon = MapUtils.get31LongitudeX(o.getPoint31XTile(j));
|
||||
pathSelected.lineTo(tileBox.getPixXFromLonNoRot(lon), tileBox.getPixYFromLatNoRot(lat));
|
||||
}
|
||||
double lat = MapUtils.get31LatitudeY(o.getPoint31YTile(0));
|
||||
double lon = MapUtils.get31LongitudeX(o.getPoint31XTile(0));
|
||||
path.moveTo(tileBox.getPixXFromLonNoRot(lon), tileBox.getPixYFromLatNoRot(lat));
|
||||
for (int j = 1; j < o.getPointsLength(); j++) {
|
||||
lat = MapUtils.get31LatitudeY(o.getPoint31YTile(j));
|
||||
lon = MapUtils.get31LongitudeX(o.getPoint31XTile(j));
|
||||
path.lineTo(tileBox.getPixXFromLonNoRot(lon), tileBox.getPixYFromLatNoRot(lat));
|
||||
}
|
||||
canvas.drawPath(pathSelected, paintSelected);
|
||||
}
|
||||
canvas.drawPath(path, paint);
|
||||
}
|
||||
|
||||
final List<BinaryMapDataObject> selectedObjects = this.selectedObjects;
|
||||
if (zoom >= ZOOM_TO_SHOW_SELECTION_ST && zoom < ZOOM_TO_SHOW_SELECTION && osmandRegions.isInitialized() &&
|
||||
selectedObjects != null) {
|
||||
pathSelected.reset();
|
||||
for (BinaryMapDataObject o : selectedObjects) {
|
||||
double lat = MapUtils.get31LatitudeY(o.getPoint31YTile(0));
|
||||
double lon = MapUtils.get31LongitudeX(o.getPoint31XTile(0));
|
||||
pathSelected.moveTo(tileBox.getPixXFromLonNoRot(lon), tileBox.getPixYFromLatNoRot(lat));
|
||||
for (int j = 1; j < o.getPointsLength(); j++) {
|
||||
lat = MapUtils.get31LatitudeY(o.getPoint31YTile(j));
|
||||
lon = MapUtils.get31LongitudeX(o.getPoint31XTile(j));
|
||||
pathSelected.lineTo(tileBox.getPixXFromLonNoRot(lon), tileBox.getPixYFromLatNoRot(lat));
|
||||
}
|
||||
}
|
||||
canvas.drawPath(pathSelected, paintSelected);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -370,7 +372,7 @@ public class DownloadedRegionsLayer extends OsmandMapLayer implements IContextMe
|
|||
|
||||
private void getWorldRegionFromPoint(RotatedTileBox tb, PointF point, List<? super BinaryMapDataObject> dataObjects) {
|
||||
int zoom = tb.getZoom();
|
||||
if (zoom >= ZOOM_TO_SHOW_BORDERS_ST && zoom < ZOOM_TO_SHOW_BORDERS && osmandRegions.isInitialized()) {
|
||||
if (zoom >= ZOOM_TO_SHOW_SELECTION_ST && zoom < ZOOM_TO_SHOW_SELECTION && osmandRegions.isInitialized()) {
|
||||
LatLon pointLatLon = tb.getLatLonFromPixel(point.x, point.y);
|
||||
int point31x = MapUtils.get31TileNumberX(pointLatLon.getLongitude());
|
||||
int point31y = MapUtils.get31TileNumberY(pointLatLon.getLatitude());
|
||||
|
|
|
@ -188,7 +188,9 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer.
|
|||
|
||||
@Override
|
||||
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> res) {
|
||||
getFavoriteFromPoint(tileBox, point, res);
|
||||
if (this.settings.SHOW_FAVORITES.get()) {
|
||||
getFavoriteFromPoint(tileBox, point, res);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in a new issue