From afb7f865d3746bdfeb7c907da146c1bd576a4f12 Mon Sep 17 00:00:00 2001 From: Denis Date: Wed, 15 Oct 2014 13:24:11 +0300 Subject: [PATCH 01/12] Firs implementation of refactor to map settings --- OsmAnd/AndroidManifest.xml | 1 + .../plus/activities/MapActivityActions.java | 5 +- .../plus/activities/MapActivityLayers.java | 2 +- .../plus/activities/SettingsBaseActivity.java | 27 +- .../ConfigureScreenSettingsActivity.java | 390 ++++++++++++++++++ 5 files changed, 416 insertions(+), 9 deletions(-) create mode 100644 OsmAnd/src/net/osmand/plus/configuremap/ConfigureScreenSettingsActivity.java diff --git a/OsmAnd/AndroidManifest.xml b/OsmAnd/AndroidManifest.xml index 8020a1ae85..235b08f9eb 100644 --- a/OsmAnd/AndroidManifest.xml +++ b/OsmAnd/AndroidManifest.xml @@ -130,6 +130,7 @@ + diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 0d43e7fbd0..f3d5ab0c55 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -47,6 +47,7 @@ import net.osmand.plus.activities.actions.ShareLocation; import net.osmand.plus.activities.actions.StartGPSStatus; import net.osmand.plus.activities.search.SearchActivity; import net.osmand.plus.base.FavoriteImageDrawable; +import net.osmand.plus.configuremap.ConfigureScreenSettingsActivity; import net.osmand.plus.development.OsmandDevelopmentPlugin; import net.osmand.plus.helpers.WaypointDialogHelper; import net.osmand.plus.osmo.OsMoPositionLayer; @@ -900,7 +901,9 @@ public class MapActivityActions implements DialogProvider { .listen(new OnContextMenuClick() { @Override public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { - mapActivity.getMapLayers().openLayerSelectionDialog(mapView); + mapActivity.startActivity(new Intent(mapActivity, ConfigureScreenSettingsActivity.class)); + + //mapActivity.getMapLayers().openLayerSelectionDialog(mapView); } }).reg(); diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java index cf4f953713..7f26d1ff90 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java @@ -349,7 +349,7 @@ public class MapActivityLayers { adapter.item(R.string.layer_transport).selected( settings.SHOW_TRANSPORT_OVER_MAP.get() ? 1 : 0) .icons(R.drawable.ic_action_bus_dark, R.drawable.ic_action_bus_light).reg(); if(TransportRouteHelper.getInstance().routeIsCalculated()){ - adapter.item(R.string.layer_transport_route).selected(1 ) + adapter.item(R.string.layer_transport_route).selected(1) .icons(R.drawable.ic_action_bus_dark, R.drawable.ic_action_bus_light).reg(); } diff --git a/OsmAnd/src/net/osmand/plus/activities/SettingsBaseActivity.java b/OsmAnd/src/net/osmand/plus/activities/SettingsBaseActivity.java index 17f9c5292c..f901eeb20a 100644 --- a/OsmAnd/src/net/osmand/plus/activities/SettingsBaseActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/SettingsBaseActivity.java @@ -9,6 +9,8 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import android.os.Build; +import android.preference.*; import net.osmand.access.AccessibleToast; import net.osmand.plus.ApplicationMode; import net.osmand.plus.OsmandApplication; @@ -25,14 +27,8 @@ import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnMultiChoiceClickListener; import android.os.Bundle; -import android.preference.CheckBoxPreference; -import android.preference.EditTextPreference; -import android.preference.ListPreference; -import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceClickListener; -import android.preference.PreferenceGroup; -import android.preference.PreferenceScreen; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Toast; @@ -46,7 +42,7 @@ public abstract class SettingsBaseActivity extends SherlockPreferenceActivity im protected OsmandSettings settings; protected final boolean profileSettings ; - private List modes = new ArrayList(); + protected List modes = new ArrayList(); private ApplicationMode previousAppMode; private Map screenPreferences = new LinkedHashMap(); @@ -74,6 +70,23 @@ public abstract class SettingsBaseActivity extends SherlockPreferenceActivity im return p; } + public CheckBoxPreference createCheckBoxPreference(OsmandPreference b, int title, int darkIcon, int lightIcon){ + CheckBoxPreference p = new CheckBoxPreference(this); + p.setTitle(title); + p.setKey(b.getId()); + p.setOnPreferenceChangeListener(this); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + if (getMyApplication().getSettings().isLightContent()) { + p.setIcon(lightIcon); + } else { + p.setIcon(darkIcon); + } + } + screenPreferences.put(b.getId(), p); + booleanPreferences.put(b.getId(), b); + return p; + } + public CheckBoxPreference createCheckBoxPreference(OsmandPreference b, int title, int summary) { CheckBoxPreference p = new CheckBoxPreference(this); p.setTitle(title); diff --git a/OsmAnd/src/net/osmand/plus/configuremap/ConfigureScreenSettingsActivity.java b/OsmAnd/src/net/osmand/plus/configuremap/ConfigureScreenSettingsActivity.java new file mode 100644 index 0000000000..08d6fe6683 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/configuremap/ConfigureScreenSettingsActivity.java @@ -0,0 +1,390 @@ +package net.osmand.plus.configuremap; + +import android.app.ActionBar; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.preference.*; +import android.view.KeyEvent; +import android.widget.ArrayAdapter; +import android.widget.ListAdapter; +import android.widget.Toast; +import net.osmand.access.AccessibleToast; +import net.osmand.data.AmenityType; +import net.osmand.plus.*; +import net.osmand.plus.activities.*; +import net.osmand.plus.render.RenderingIcons; +import net.osmand.plus.views.MapInfoLayer; +import net.osmand.plus.views.OsmandMapTileView; +import net.osmand.plus.views.mapwidgets.AppearanceWidgetsFactory; +import net.osmand.plus.views.mapwidgets.MapWidgetRegistry; +import net.osmand.render.RenderingRuleProperty; +import net.osmand.render.RenderingRulesStorage; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +/** + * Created by Denis on 14.10.2014. + */ +public class ConfigureScreenSettingsActivity extends SettingsBaseActivity { + + private String ADDITIONAL_VECTOR_RENDERING_CATEGORY; + private ApplicationMode previousMode; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + for (ApplicationMode a : ApplicationMode.values(settings)) { + modes.add(a); + } + getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); + List s = new ArrayList(); + for (ApplicationMode a : modes) { + s.add(a.toHumanString(getMyApplication())); + } + + ArrayAdapter spinnerAdapter = new ArrayAdapter(getSupportActionBar().getThemedContext(), + R.layout.sherlock_spinner_item, s); + spinnerAdapter.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item); + getSupportActionBar().setListNavigationCallbacks(spinnerAdapter, new com.actionbarsherlock.app.ActionBar.OnNavigationListener() { + + @Override + public boolean onNavigationItemSelected(int itemPosition, long itemId) { + settings.APPLICATION_MODE.set(modes.get(itemPosition)); + createAllCategories(); + return true; + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + previousMode = settings.getApplicationMode(); + boolean found = setSelectedAppMode(previousMode); + if (!found) { + getSupportActionBar().setSelectedNavigationItem(0); + } + createAllCategories(); + } + + + @Override + protected void onPause() { + super.onPause(); + settings.APPLICATION_MODE.set(previousMode); + } + + private void createAllCategories() { + getPreferenceScreen().removeAll(); + createLayersPreferences(); + createRenderingAttributePreferences(); + + } + + private void createRenderingAttributePreferences() { + PreferenceCategory renderingCategory = new PreferenceCategory(this); + renderingCategory.setTitle(R.string.map_widget_map_rendering); + PreferenceScreen grp = getPreferenceScreen(); + grp.addPreference(renderingCategory); + Preference p = new Preference(this); + p.setTitle(R.string.map_widget_renderer); + p.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + AlertDialog.Builder bld = new AlertDialog.Builder(getActivity()); + bld.setTitle(R.string.renderers); + Collection rendererNames = getMyApplication().getRendererRegistry().getRendererNames(); + final String[] items = rendererNames.toArray(new String[rendererNames.size()]); + final String[] visibleNames = new String[items.length]; + int selected = -1; + final String selectedName = getMyApplication().getRendererRegistry().getCurrentSelectedRenderer().getName(); + for (int j = 0; j < items.length; j++) { + if (items[j].equals(selectedName)) { + selected = j; + } + visibleNames[j] = items[j].replace('_', ' ').replace( + '-', ' '); + } + bld.setSingleChoiceItems(visibleNames, selected, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + String renderer = items[which]; + RenderingRulesStorage loaded = getMyApplication().getRendererRegistry().getRenderer(renderer); + if (loaded != null) { + getMyApplication().getSettings().RENDERER.set(renderer); + getMyApplication().getRendererRegistry().setCurrentSelectedRender(loaded); + getMyApplication().getResourceManager().getRenderer().clearCache(); + } else { + AccessibleToast.makeText(getMyApplication(), R.string.renderer_load_exception, Toast.LENGTH_SHORT).show(); + } + dialog.dismiss(); + createAllCategories(); + } + }); + bld.show(); + return true; + } + }); + grp.addPreference(p); + + p = new Preference(this); + p.setTitle(R.string.map_widget_day_night); + p.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + AlertDialog.Builder bld = new AlertDialog.Builder(getActivity()); + bld.setTitle(R.string.daynight); + final String[] items = new String[OsmandSettings.DayNightMode.values().length]; + for (int i = 0; i < items.length; i++) { + items[i] = OsmandSettings.DayNightMode.values()[i].toHumanString(getMyApplication()); + } + int i = getMyApplication().getSettings().DAYNIGHT_MODE.get().ordinal(); + bld.setSingleChoiceItems(items, i, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + getMyApplication().getSettings().DAYNIGHT_MODE.set(OsmandSettings.DayNightMode.values()[which]); + getMyApplication().getResourceManager().getRenderer().clearCache(); + dialog.dismiss(); + } + }); + bld.show(); + return true; + } + }); + grp.addPreference(p); + + RenderingRulesStorage renderer = getMyApplication().getRendererRegistry().getCurrentSelectedRenderer(); + if(renderer != null && AppearanceWidgetsFactory.EXTRA_SETTINGS) { + createMapRenderingPreferences(); + } + } + + + private void createMapRenderingPreferences() { + PreferenceCategory renderingCategory = new PreferenceCategory(this); + renderingCategory.setTitle(R.string.map_widget_vector_attributes); + PreferenceScreen grp = getPreferenceScreen(); + grp.addPreference(renderingCategory); + + RenderingRulesStorage renderer = getMyApplication().getRendererRegistry().getCurrentSelectedRenderer(); + final OsmandApplication app = getMyApplication(); + List customRules = renderer.PROPS.getCustomRules(); + for (final RenderingRuleProperty p : customRules) { + String propertyName = SettingsActivity.getStringPropertyName(getActivity(), p.getAttrName(), p.getName()); + //test old descr as title + final String propertyDescr = SettingsActivity.getStringPropertyDescription(getActivity(), p.getAttrName(), p.getName()); + if(p.isBoolean()) { + final OsmandSettings.CommonPreference pref = getMyApplication().getSettings().getCustomRenderBooleanProperty(p.getAttrName()); + CheckBoxPreference preference = createCheckBoxPreference(pref); + preference.setTitle(propertyName); + renderingCategory.addPreference(preference); + preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + pref.set(!pref.get()); + app.getResourceManager().getRenderer().clearCache(); + return true; + } + }); + + } else { + final OsmandSettings.CommonPreference pref = getMyApplication().getSettings().getCustomRenderProperty(p.getAttrName()); + Preference preference = new Preference(getActivity()); + preference.setTitle(propertyName); + renderingCategory.addPreference(preference); + preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + AlertDialog.Builder b = new AlertDialog.Builder(getActivity()); + //test old descr as title + b.setTitle(propertyDescr); + + int i = Arrays.asList(p.getPossibleValues()).indexOf(pref.get()); + + String[] possibleValuesString = new String[p.getPossibleValues().length]; + + for (int j = 0; j < p.getPossibleValues().length; j++) { + possibleValuesString[j] = SettingsActivity.getStringPropertyValue(getApplication(), p.getPossibleValues()[j]); + } + + b.setSingleChoiceItems(possibleValuesString, i, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + pref.set(p.getPossibleValues()[which]); + app.getResourceManager().getRenderer().clearCache(); + dialog.dismiss(); + } + }); + b.show(); + return true; + } + }); + + } + } + } + + + private void createLayersPreferences() { + PreferenceCategory mapLayersCategory = new PreferenceCategory(this); + mapLayersCategory.setTitle(R.string.menu_layers); + PreferenceScreen grp = getPreferenceScreen(); + grp.addPreference(mapLayersCategory); + final CheckBoxPreference poi = new CheckBoxPreference(this); + poi.setTitle(R.string.layer_poi); + poi.setChecked(settings.SHOW_POI_OVER_MAP.get()); + addIcon(poi, R.drawable.ic_action_info_light, R.drawable.ic_action_info_dark); + poi.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + settings.SHOW_POI_OVER_MAP.set(!settings.SHOW_POI_OVER_MAP.get()); + if (settings.SHOW_POI_OVER_MAP.get()) { + selectPOIFilterLayer(null); + } else { + poi.setSummary(""); + } + return true; + } + }); + if (settings.SHOW_POI_OVER_MAP.get()) { + poi.setSummary(settings.getPoiFilterForMap()); + } + mapLayersCategory.addPreference(poi); + CheckBoxPreference p = createCheckBoxPreference(settings.SHOW_POI_LABEL, R.string.layer_amenity_label, + R.drawable.ic_action_text_dark, R.drawable.ic_action_text_light); + mapLayersCategory.addPreference(p); + + p = createCheckBoxPreference(settings.SHOW_FAVORITES, R.string.layer_favorites, + R.drawable.ic_action_fav_dark, R.drawable.ic_action_fav_light); + mapLayersCategory.addPreference(p); + p = createCheckBoxPreference(settings.SHOW_POI_LABEL, R.string.layer_gpx_layer, + R.drawable.ic_action_polygom_dark, R.drawable.ic_action_polygom_light); + mapLayersCategory.addPreference(p); + p = createCheckBoxPreference(settings.SHOW_TRANSPORT_OVER_MAP, R.string.layer_transport, + R.drawable.ic_action_bus_dark, R.drawable.ic_action_bus_light); + mapLayersCategory.addPreference(p); + if (TransportRouteHelper.getInstance().routeIsCalculated()) { + p = new CheckBoxPreference(this); + p.setChecked(true); + addIcon(p, R.drawable.ic_action_bus_light, R.drawable.ic_action_bus_dark); + mapLayersCategory.addPreference(p); + } + } + + public void addIcon(CheckBoxPreference p, int lightIcon, int darkIcon) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + if (getMyApplication().getSettings().isLightContent()) { + p.setIcon(lightIcon); + } else { + p.setIcon(darkIcon); + } + } + } + + public AlertDialog selectPOIFilterLayer(final PoiFilter[] selected) { + final List userDefined = new ArrayList(); + OsmandApplication app = (OsmandApplication) getApplication(); + final PoiFiltersHelper poiFilters = app.getPoiFilters(); + final ContextMenuAdapter adapter = new ContextMenuAdapter(this); + + ContextMenuAdapter.Item is = adapter.item(getString(R.string.any_poi)); + if (RenderingIcons.containsBigIcon("null")) { + is.icon(RenderingIcons.getBigIconResourceId("null")); + } + is.reg(); + // 2nd custom + adapter.item(getString(R.string.poi_filter_custom_filter)).icon(RenderingIcons.getBigIconResourceId("user_defined")).reg(); + + for (PoiFilter f : poiFilters.getUserDefinedPoiFilters()) { + ContextMenuAdapter.Item it = adapter.item(f.getName()); + if (RenderingIcons.containsBigIcon(f.getSimplifiedId())) { + it.icon(RenderingIcons.getBigIconResourceId(f.getSimplifiedId())); + } else { + it.icon(RenderingIcons.getBigIconResourceId("user_defined")); + } + it.reg(); + userDefined.add(f); + } + final AmenityType[] categories = AmenityType.getCategories(); + for (AmenityType t : categories) { + ContextMenuAdapter.Item it = adapter.item(OsmAndFormatter.toPublicString(t, getMyApplication())); + if (RenderingIcons.containsBigIcon(t.toString().toLowerCase())) { + it.icon(RenderingIcons.getBigIconResourceId(t.toString().toLowerCase())); + } + it.reg(); + } + final AlertDialog.Builder builder = new AlertDialog.Builder(this); + ListAdapter listAdapter; + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { + listAdapter = + adapter.createListAdapter(this, R.layout.list_menu_item, app.getSettings().isLightContentMenu()); + } else { + listAdapter = + adapter.createListAdapter(this, R.layout.list_menu_item_native, app.getSettings().isLightContentMenu()); + } + builder.setAdapter(listAdapter, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + if (which == 1) { + String filterId = PoiFilter.CUSTOM_FILTER_ID; + getMyApplication().getSettings().setPoiFilterForMap(filterId); + Intent newIntent = new Intent(getApplication(), EditPOIFilterActivity.class); + newIntent.putExtra(EditPOIFilterActivity.AMENITY_FILTER, filterId); + //newIntent.putExtra(EditPOIFilterActivity.SEARCH_LAT, getMyApplication().getMapActivity().getMapView().getLatitude()); + //newIntent.putExtra(EditPOIFilterActivity.SEARCH_LON, getMyApplication().getMapActivity().getMapView().getLongitude()); + getActivity().startActivity(newIntent); + } else { + String filterId; + if (which == 0) { + filterId = PoiFiltersHelper.getOsmDefinedFilterId(null); + } else if (which <= userDefined.size() + 1) { + filterId = userDefined.get(which - 2).getFilterId(); + } else { + filterId = PoiFiltersHelper.getOsmDefinedFilterId(categories[which - userDefined.size() - 2]); + } + getMyApplication().getSettings().setPoiFilterForMap(filterId); + PoiFilter f = poiFilters.getFilterById(filterId); + if (f != null) { + f.clearNameFilter(); + } + if (selected != null && selected.length > 0) { + selected[0] = f; + } + createAllCategories(); + } + } + + }); + builder.setOnKeyListener(new DialogInterface.OnKeyListener() { + @Override + public boolean onKey(DialogInterface dialogInterface, int i, KeyEvent event) { + if (i == KeyEvent.KEYCODE_BACK && + event.getAction() == KeyEvent.ACTION_UP && + !event.isCanceled()) { + dialogInterface.cancel(); + settings.SHOW_POI_OVER_MAP.set(false); + createAllCategories(); + return true; + } + return false; + } + }); + return builder.show(); + } + + private Activity getActivity() { + return this; + } + +} From f540b3e6fd29c96b90eb23c5566fb26c96b70006 Mon Sep 17 00:00:00 2001 From: Denis Date: Wed, 15 Oct 2014 14:33:48 +0300 Subject: [PATCH 02/12] Updated gpx preference --- .../ConfigureScreenSettingsActivity.java | 68 ++++++++++++++++--- 1 file changed, 60 insertions(+), 8 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/configuremap/ConfigureScreenSettingsActivity.java b/OsmAnd/src/net/osmand/plus/configuremap/ConfigureScreenSettingsActivity.java index 08d6fe6683..2e088d56a8 100644 --- a/OsmAnd/src/net/osmand/plus/configuremap/ConfigureScreenSettingsActivity.java +++ b/OsmAnd/src/net/osmand/plus/configuremap/ConfigureScreenSettingsActivity.java @@ -12,19 +12,17 @@ import android.view.KeyEvent; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.Toast; +import net.osmand.CallbackWithObject; import net.osmand.access.AccessibleToast; import net.osmand.data.AmenityType; import net.osmand.plus.*; import net.osmand.plus.activities.*; +import net.osmand.plus.helpers.GpxUiHelper; import net.osmand.plus.render.RenderingIcons; -import net.osmand.plus.views.MapInfoLayer; -import net.osmand.plus.views.OsmandMapTileView; import net.osmand.plus.views.mapwidgets.AppearanceWidgetsFactory; -import net.osmand.plus.views.mapwidgets.MapWidgetRegistry; import net.osmand.render.RenderingRuleProperty; import net.osmand.render.RenderingRulesStorage; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -35,7 +33,6 @@ import java.util.List; */ public class ConfigureScreenSettingsActivity extends SettingsBaseActivity { - private String ADDITIONAL_VECTOR_RENDERING_CATEGORY; private ApplicationMode previousMode; @Override @@ -267,9 +264,21 @@ public class ConfigureScreenSettingsActivity extends SettingsBaseActivity { p = createCheckBoxPreference(settings.SHOW_FAVORITES, R.string.layer_favorites, R.drawable.ic_action_fav_dark, R.drawable.ic_action_fav_light); mapLayersCategory.addPreference(p); - p = createCheckBoxPreference(settings.SHOW_POI_LABEL, R.string.layer_gpx_layer, - R.drawable.ic_action_polygom_dark, R.drawable.ic_action_polygom_light); - mapLayersCategory.addPreference(p); + final CheckBoxPreference gpx = new CheckBoxPreference(this); + gpx.setTitle(R.string.layer_gpx_layer); + addIcon(gpx, R.drawable.ic_action_polygom_light, R.drawable.ic_action_polygom_dark); + gpx.setChecked(getMyApplication().getSelectedGpxHelper().isShowingAnyGpxFiles()); + gpx.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + if (gpx.isChecked()){ + showGPXFileDialog(getAlreadySelectedGpx()); + } + return true; + } + }); + + mapLayersCategory.addPreference(gpx); p = createCheckBoxPreference(settings.SHOW_TRANSPORT_OVER_MAP, R.string.layer_transport, R.drawable.ic_action_bus_dark, R.drawable.ic_action_bus_light); mapLayersCategory.addPreference(p); @@ -387,4 +396,47 @@ public class ConfigureScreenSettingsActivity extends SettingsBaseActivity { return this; } + public void showGPXFileDialog(List files) { + CallbackWithObject callbackWithObject = new CallbackWithObject() { + @Override + public boolean processResult(GPXUtilities.GPXFile[] result) { + GPXUtilities.WptPt locToShow = null; + for (GPXUtilities.GPXFile g : result) { + if (g.showCurrentTrack) { + if (!settings.SAVE_TRACK_TO_GPX.get() && ! + settings.SAVE_GLOBAL_TRACK_TO_GPX.get()) { + AccessibleToast.makeText(getActivity(), R.string.gpx_monitoring_disabled_warn, Toast.LENGTH_SHORT).show(); + } + break; + } + if (!g.showCurrentTrack || locToShow == null) { + locToShow = g.findPointToShow(); + } + } + getMyApplication().getSelectedGpxHelper().setGpxFileToDisplay(result); + createAllCategories(); + return true; + } + }; + + if (files == null) { + GpxUiHelper.selectGPXFile(getActivity(), true, true, callbackWithObject); + } else { + GpxUiHelper.selectGPXFile(files, getActivity(), true, true, callbackWithObject); + } + } + + private List getAlreadySelectedGpx(){ + GpxSelectionHelper gpxSelectionHelper = getMyApplication().getSelectedGpxHelper(); + if (gpxSelectionHelper == null){ + return null; + } + List selectedGpxFiles = gpxSelectionHelper.getSelectedGPXFiles(); + List files = new ArrayList(); + for (GpxSelectionHelper.SelectedGpxFile file : selectedGpxFiles) { + files.add(file.getGpxFile().path); + } + return files; + } + } From 4604ec38dce3e08acf8f09102349806aaf1ba30f Mon Sep 17 00:00:00 2001 From: Denis Date: Wed, 15 Oct 2014 19:09:16 +0300 Subject: [PATCH 03/12] Implemented search radius for POI in waypoints dialog --- .../drawable-hdpi/ic_sort_waypoint_dark.png | Bin 0 -> 1204 bytes .../drawable-hdpi/ic_sort_waypoint_white.png | Bin 0 -> 1204 bytes .../drawable-xhdpi/ic_sort_waypoint_dark.png | Bin 0 -> 1344 bytes .../drawable-xhdpi/ic_sort_waypoint_white.png | Bin 0 -> 1350 bytes .../drawable-xxhdpi/ic_sort_waypoint_dark.png | Bin 0 -> 1459 bytes .../ic_sort_waypoint_white.png | Bin 0 -> 1460 bytes .../res/layout/radius_search_list_element.xml | 34 +++++++ OsmAnd/res/layout/waypoint_header.xml | 20 ++-- OsmAnd/res/values/strings.xml | 1 + .../plus/helpers/WaypointDialogHelper.java | 87 ++++++++++++++++-- .../osmand/plus/helpers/WaypointHelper.java | 13 ++- 11 files changed, 142 insertions(+), 13 deletions(-) create mode 100644 OsmAnd/res/drawable-hdpi/ic_sort_waypoint_dark.png create mode 100644 OsmAnd/res/drawable-hdpi/ic_sort_waypoint_white.png create mode 100644 OsmAnd/res/drawable-xhdpi/ic_sort_waypoint_dark.png create mode 100644 OsmAnd/res/drawable-xhdpi/ic_sort_waypoint_white.png create mode 100644 OsmAnd/res/drawable-xxhdpi/ic_sort_waypoint_dark.png create mode 100644 OsmAnd/res/drawable-xxhdpi/ic_sort_waypoint_white.png create mode 100644 OsmAnd/res/layout/radius_search_list_element.xml diff --git a/OsmAnd/res/drawable-hdpi/ic_sort_waypoint_dark.png b/OsmAnd/res/drawable-hdpi/ic_sort_waypoint_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b4b0f6f746b777f0fedc0efb599d066cef216acd GIT binary patch literal 1204 zcmbVMU1%It6rOHqD5+^9l!ms{UM3PP&HU}o?EEy_{OoMZq8sC8A)%sne(q+c$;_S3 z+;le~Xy`+!G*BC?lp;kewb+L~C`zG%5EryhLaU%6RVoEvN(~|rqoj8>yQvSM4;`4f z_uPBF^Yfi^=I!C37g}3(w@?(-njO^hWPK)jw=|RQLH^o@WZ8u?V|WA=aoGqU)n_9U zf~;$d!#p(X>0>uxH$^oacM4;8EccRTA(u5G9k$~71Wi%hJr&=uCLjhT9Cy4F{ouxz zG;r(`Ju2n+oS%jzXK*HfBQrw>I$H%#NoFN)aIPGDh!gygv!-5V&D{y@5AP+9gAkQ5^>HtcMK7ZgEAi>fS%iYN#fv0ut0R5=-!WL@s#^-Kes^+IfT7Hs%-i0?W! z`B?_N6wwqJD5(icEGo&OWzu!L{iOVHBq%Owmj5+RJp4=4c_||;yzm?_Nw`SYH>)WcU zb4u*ga>vTweB0`CPw(qo%#VUQTdH(#S9A5%xgXBn`k?qMc+gzkGk1P#c7E%R!A|h` z<=~GKU9WBb?Dstj_kMY&Yx$$h-NW9lmn(!VWOMqaBEY-(P}%{rc(o_Y1jWEmsB(b-ufJ=Ez9;Ou;>P z;rhwhtDOhV-Cq1!Klj`GrPhC5IqhtwVoy<@{QSn*p1XU$i2ftl%#ePq|Hz4l%8HNW literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-hdpi/ic_sort_waypoint_white.png b/OsmAnd/res/drawable-hdpi/ic_sort_waypoint_white.png new file mode 100644 index 0000000000000000000000000000000000000000..d255baea1c03bd21200d6da82ba986ab56e68940 GIT binary patch literal 1204 zcmbVMU1%It6rOI=ppj~{P_Tt$I+0>vXJ=-2X6Gkalg-RFS#XoEUFf!z+WEPgohCDP zGIP_NgtnxbN`pQ$21KMU3I#3NhY|!4^r0(Og!;0g2o?+qVuj#CF%N}!XR{l92z_v1 z=H7Gf`OeRG&Y9)O@zMQVhq?%Y*q%umw*AReNl~2geu2OXk9~DO=RgOXOgvU;_?7IvF}MZlHu2s%clj`{2ijY#+B-wf>?9I0- zN>Mx3@`a@gRYk~C7^YUMC2FYz^rsk3mSu)bGRY*3HRxd8MS4iPL0{W~1_IN!J!C_d zj4bK~oI@E3N4lMY;}r@!hTWh=6sC*`b&uf^EaNy)UQO))6~Vt@?5Z7<<~_g^K>+7` z6W62C*9K$m9`7hp#L*}dzKx5b&uGw`bAXHTT86?m3Cp$=05Ewx%hQ}Bi*!ZcMOtEc zo;Jjk0RSgRdXjJ3*$vN09H;W~h`>uc$L07DA(xWHbW#vCG0SSXHa71DNOw)p_HAR| zEo}C&SVi@Lj-X$HaHib_lU0adP=y|;s?DmCFP^Yn3)X`Es7%{gYrwb91M8R%9kR)@ zV($_|N=zFSQ?lrkZUWlmc$t=XgQtNYr%b*gr7NaEweZ&e<&VKZF;TPpr+L~(xFe(O z&M07EXPAJCC&mx<_4cE~Z~u0GZS0jdSK<#xp8H$9ec?$uet%zmV)4fVSD&GlH})B? zl9#&b11GCzXX8DeT^x?94@!mA*wV^+Y^n33g|&}+E*xB4z1cthOXKd>OU2D+XU_e; za?=?-@WZu<@2wmDsm*sk^smpZWrxmjpAf@~dx$Uk&%A!+`ooUsKa$UlYqv(uzV;6V C5{}UT literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xhdpi/ic_sort_waypoint_dark.png b/OsmAnd/res/drawable-xhdpi/ic_sort_waypoint_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..19e922e93059939acae1cdb80e9ab85264932ce2 GIT binary patch literal 1344 zcmbVMZA{!`9Is=%j0Iy1IGHd@5yLim?X|tTUg5yw%E=)I1a1TICG^_opn+>^TeyRP z$uMye*~rLZSf-PJA27?@RDw)0vn|^tppWKahQ}N&7ti z=lTDB|Mw2m)jXS#zCRs7kPKfXUk}&9*qfFDzk?f}hT)QJRy3InYRHTTIzZf#8U&~> zEVP1pAV}S>Tn8lxlGG&!n#?ADH7BZJixAVXM8g_HBS=YER1?H@V4^|LDl0B*{qt)W zDoZY`(dH-png_JWl|4FW=&1>aJ?)}X!pcg~k|+lW!oU>JXt+Z$xTp(@^Kx(>J0>tR zu41;kuuZ3${B@{D)d6a=*m04xGN{98vD)kor=tj^piGb~L6JD=U25@k|HPyhZ?xit(Za-SB(4w0}l*Qmo-yX z6*R^u1l3N{g+Wg@LkMer|2DB=Y$Xb&jED*vVYQG%I2?;Bu5Fn0;9oa()HVX$8X)R{ zp?2ybtVbw60fxDIu%VbD^oFa|WmpuUgIC4QFi=b%@511XMUo{B0GK?6WN<6%bl@Qy z!>;cy_{*yq#gKENx?0#%ir#+-@EcF%0c>(B-Vxo51=M!xR(| zBy7vj_7;|UAeQs!KrmH3psF2-E~sl$P1R^qHPqvYR~;>Elod&h7zblz+Kie9y4(dM zudasCc%C_V2OnsMJs1*M38w`S;G&gr;w%$naA0%NA`@cmAu)(;;idnZKLR>M#G2(l z&67BS9U0qhj{+37hY2Wff^;}47=5-9K^|)H@$Nu$@y^Jts$K5P*I(K*HtC?$t3Gw@ zhlMx3{AQ_o;!f_^0rc{(U3q=u^LYQr#=yrP<}mwzVlQeB_ZA)twU(ZE=ld1@tC6a+ zdTDgMuralE`H_y-@`rD)_PgqSdwWmu zckheG4u9LSaL)YVXy(-v^?ZN!y%owhS@7r6tJey~*;AfU(td0y*NwMoeRogmGjp@cV}*|;-SSSa-P~CYt}(HfFd1GCwA)b$&mRXy?ZspX-mzTD!; zzu%i30{v5uzPc}SvhQT>;?RVCrTI*e$2NYUDf!4;tGrI;~SU88db{%zR-FHpzejIt~<>5Dv-*9Kd{%O978vcXwmi~VL5?|Ez literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xhdpi/ic_sort_waypoint_white.png b/OsmAnd/res/drawable-xhdpi/ic_sort_waypoint_white.png new file mode 100644 index 0000000000000000000000000000000000000000..1a83dced108f093c79b7bb51fef51e072f9cd407 GIT binary patch literal 1350 zcmbVMeN5bB81IH#7|3+QNv1HH;uubPZLht%ws64h%CW;8u;b6PCg1e+@Z0zIX%#M8tcrT8PLEh|(Ex}?*24hx zt70<<0#WWbcnOpsNLsrRs<-L`yLm}hZDLZ#mQZ65jUXjuiI^xwfrW-av!c1NxpNmV zRFU1-K1YBI#Jr$I+0|))y3Xp5)ESjH87nJAOAC=(=0*h!q^cn8gsc69l{pfy8| z@Ik@1Yzs2B%ogg-0BW z3uj4&!NV>(3;^X|MLUz?Sq)DLPKKpemxEy$imG5d9sv?D4DEB#J6WGEh4pKuC2A5# z*;b(KWvugoSl(*@(bA2OuD7PTpteP~bhAZ|plz!{EvV|5Wzm82wqzW3Q~M={-SiJ-_LN$}`;w?A{xW_tGw9*%HFo z;IrcP;`Uq}9KYF-`Rz4jGd`rIg86us{0;}7*uE`TX{n|JPN zal!n>yPwoe-#Y!rcU@}1$mP4myNB}{VkmE(u^m-bvwGhXvGjg}tE;f@T>oS&(F zXyZ)wfe*Ihg$HW~#M#`c%)x7Ww{7B_U5%fYHzMjtsCM1Zj-S0{&E17hKQha2{HblU zOpWHTefKZkxKZSp+;Av8W1=Cy=eL1h8&ADjQ(bwQy=@Q`bMV C?beh4 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xxhdpi/ic_sort_waypoint_dark.png b/OsmAnd/res/drawable-xxhdpi/ic_sort_waypoint_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..4de1c9e4e394115461e722d68018e334990a35cf GIT binary patch literal 1459 zcmbVMeM}o=7;hnC20;@?7MLMBOBlF#y=!~d_HGmcEsVm7tdvo{GOl-Tp+N7tyMwkw z49)~1W;3uZ3ma3^iT<&$3I>;8fSJGoCb(%bhFRvVVe=(U2@B;A7Y(AR{hN@8M0V-^V6Y zh=((&Do7h{^O-?|r?5=~Wo;!6wylY!I8{zIk`?XyF>ejhGfkaf&8&G_FOq9u@Q^ za&FpgDcJG_S0+`1Ec<8-^ZWg3zfLWP^_YgDC=AzPS}h7KP$|gEOaSGjv?zlGNUZ4b z$sU16B8-enXpv1S80qE}ygr+4o0yljgo2V`0mg@E)Hvq#M((v?Ey;H9Zx}mTOOBuq zV0Iu0Eg}o^;ZBQ!p?1%96fuO+(65Ugm=vbjBCsu9z{^&PNd-^ToQId>NJ{sA}>!v8O^ymW4^ASK#NmR ztd*B!hG#+4w+H&(!s5@w(q<7bvLHGHp*dOwr452CNDYDyF`GBCj$~GNcuw$3uSU|e zd20(0J*|K%5Ct!?p)>8-AqJg6?{c$74%IO%Kv@kzp+>?*pn#-wEa5il-K5?OZUwm5ZYIFP4iaIjOr1);u23kyw_0)?fghGGj1|S^CUx$q z{43#?^nsJ(dA-w3MIT)2cyz4$QQY2RclDW_Nxyv&9uAkj;;gdt{GHHW=yVT{%`Da2 zS)V-4=|)EO>-rY16jI$E*?SrX9pM6ABr;b*?X%xpO&PMQGh>TF zY+P1JdD`Wx^CWm%TfA_o#=du2xxegusAx`i^yd>L08TnhPn7d zms>jT4u17md;uG*nYP}L#ue{gY%dpAb8oI$mF@SQ_tlCIdxk%5nE0e)=t<0-Gn3sv za>sA3U7UE&yz+*U|MTUuimYE#mNJ%u>;q|b_rzPNaqlZ~%33oXWDKkfbmhnDL2_A=FXy_aX;)W`#Y7?s`Yl|mSt0xDWt)G&%n(T#_PNyqklP48%cn4GbX62d0>fuJ4 z-fKNaPNn{Iy}bH6VEgj(Z~a3Hy?oQY?DhKdPgZwV&n`bTb}19;HjwH;v{G~M!YDWO zSxq>7Pr>~V+J_&^Xr8%rbhSKXy-^9}PN?fztmsfGoQt;?$M21-M}DK${1VGhUfs!m E0Drs*mH+?% literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xxhdpi/ic_sort_waypoint_white.png b/OsmAnd/res/drawable-xxhdpi/ic_sort_waypoint_white.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab38b4b05e5fcb6b0f7e7c843990ae7586eaf7f GIT binary patch literal 1460 zcmbVMZA=?w9KUAEvSEihOH}sdQpRFo*SofN?e#+GfWoL<5xQgC=u;>(Zf;u+T>2On~LqJ(JHF0WudkS>=f$W2q+&yo< z-|zo_{xA1TX~~+UDd{N)f-H3xyL@oWNxX{}!7ua2B^eG6s)gn1Iw_<^Ss5UCyc7he zTVyu^A7J_VCk6pzEZ8LY%hhu4T85KEBb&e&V`2odp_nrkVYwQhqCv1x2s`vQ`rp!{ z0`JfVC@xIqT%8cO_JLk(x=_0C*0C&oYl5vVL06Klf?6LaWibQw5LY~y-# z2BOwD^s`QtdrQ#*Nd_oov|=1#B2k;&Xrin(yKNO}hHIRlaWjDtc80Prgc+TC^w65j zhZvu$XwDW~IrP=48ewoe8jTvG7NaC@#7%a)9Vg7V*^EI1rqqX3Him_jjHH4KD4Z-r zR6z=(2}L$2)u|3W^mO(LV#MpcEgV+n0tG{c$JhvNG7`8bChj$ZR#YGO*Nu76ioZSr za34^lI+=s{2xTP6Fm`t~lmJ3+m`7v*CWWnaNnD)>!m8Wl(8CiWFYpWiFnAqYnjyFfT=@*gJjq$`?4n|5JdB-+m+{!jZU}pmkbcP9TmFY zwL3kTtD6GVry|!su#_$tKe2kJt*Yvqiz%+pT9<3rYPE5{$=tPgJ2$0Uzvs$|6WrNr z&Jics{q5$?nu+C)rVe!YUpbVW)`n=Skp9ZY?pfGwY4epBa>t*Ri|Y@Q1M7z}!RjTJ zkK$)vdwg5kt-jXUvhNIE?#~_?Suu9s!&`lWv6Wdl=MENqVI9616HCK}U0Gv?u4Ycw zG>Pu2v#k~8YRzRzd->qWzf%U<-s{?zf7e*X5CsmHCT-21yl`*NVPr$^X~$O=(o?73 z7uYr3gXjDA+XCmVj&J*rPHlKQt?J~d*FEjdtWjt7%gvRVc2B#b>=)hjsP24SApYdC z@*i8Kvqu|m-YT1XG5d`7sUyqc6FFP|Jdk@syCv_pYqpLv%EDi_cRCB5nk|T9ReFb^ zVrb-$Pt($Qw5`oRMLr(+{wGlr#Wc}cxR-hOB3akVd+6sA;aKp%8Dt063%u6a!Q<4W zuFT4dy1MvFr$_f1Yx;I=esj15o9cP>!q1JFyh-+-1 zhTU0r_wer=lYwXD?yUQJ_>p6O9pBy9jU + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/waypoint_header.xml b/OsmAnd/res/layout/waypoint_header.xml index 534d0e80cc..a0b74947ce 100644 --- a/OsmAnd/res/layout/waypoint_header.xml +++ b/OsmAnd/res/layout/waypoint_header.xml @@ -7,12 +7,12 @@ android:layout_marginTop="3dp" android:layout_marginBottom="3dp" android:layout_marginRight="3dp"> - + + \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 06257f9037..abca04b331 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,7 @@ 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> + Search radius Device not found OsMo service is not available:\n- check the connection;\n- check the settings;\n- check out our Twitter: https://twitter.com/OsMomobi An anonymous user can not:\n- create groups;\n- synchronize groups and devices with the server;\n- manage groups and devices in a private office. diff --git a/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java b/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java index ce4b560020..7bf257a9e6 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java @@ -13,6 +13,7 @@ import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener; import net.osmand.plus.OsmandApplication; import net.osmand.plus.PoiFilter; import net.osmand.plus.R; +import net.osmand.plus.activities.IntermediatePointsDialog; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.helpers.WaypointHelper.LocationPointWrapper; import net.osmand.plus.views.AnimateDraggingMapThread; @@ -44,6 +45,8 @@ public class WaypointDialogHelper implements OsmAndLocationListener { private LinearLayout mainLayout; private WaypointHelper waypointHelper; + private final static String POI_RADIUS = "poi_radius"; + public final static boolean OVERLAP_LAYOUT = true; // only true is supported private View closePointDialog; private List many = new ArrayList(); @@ -245,15 +248,30 @@ public class WaypointDialogHelper implements OsmAndLocationListener { } } + private void recalculatePoints(final int[] running, final ArrayAdapter listAdapter, final int type){ + new AsyncTask() { + + @Override + protected Void doInBackground(Void... params) { + app.getWaypointHelper().recalculatePoints(type); + return null; + } + + protected void onPostExecute(Void result) { + running[0] = -1; + listAdapter.clear(); + for (Object point : getPoints()) { + listAdapter.add(point); + } + listAdapter.notifyDataSetChanged(); + } + }.execute((Void) null); + } + private void enableType(final int[] running, final ArrayAdapter listAdapter, final int type, final boolean enable) { new AsyncTask() { - protected void onPreExecute() { - } - - ; - @Override protected Void doInBackground(Void... params) { app.getWaypointHelper().enableWaypointType(type, enable); @@ -356,6 +374,7 @@ public class WaypointDialogHelper implements OsmAndLocationListener { final int[] running = new int[]{-1}; final ArrayAdapter listAdapter = new ArrayAdapter(ctx, R.layout.waypoint_reached, R.id.title, points) { + @Override public View getView(final int position, View convertView, ViewGroup parent) { // User super class to create the View @@ -366,8 +385,60 @@ public class WaypointDialogHelper implements OsmAndLocationListener { if (v == null || viewText != labelView) { v = ctx.getLayoutInflater().inflate(labelView ? R.layout.waypoint_header : R.layout.waypoint_reached, null); } - if (labelView) { + if (getItem(position) instanceof String && getItem(position).equals(POI_RADIUS)){ + v = ctx.getLayoutInflater().inflate(R.layout.radius_search_list_element, null); + v.findViewById(R.id.ProgressBar).setVisibility(position == running[0] ? View.VISIBLE : View.GONE); + final TextView radius = (TextView) v.findViewById(R.id.radius); + radius.setText(OsmAndFormatter.getFormattedDistance(waypointHelper.getSearchDeviationRadius(), app)); + radius.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + int length = WaypointHelper.SEARCH_RADIUS_VALUES.length; + String[] names = new String[length]; + int selected = 0; + for (int i = 0; i < length; i++) { + names[i] = OsmAndFormatter.getFormattedDistance(WaypointHelper.SEARCH_RADIUS_VALUES[i], app); + if (WaypointHelper.SEARCH_RADIUS_VALUES[i] == waypointHelper.getSearchDeviationRadius()){ + selected = i; + } + } + new AlertDialog.Builder(getActivity()) + .setSingleChoiceItems(names, selected, new OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + int value = WaypointHelper.SEARCH_RADIUS_VALUES[i]; + if (waypointHelper.getSearchDeviationRadius() != value){ + running[0] = position; + waypointHelper.setSearchDeviationRadius(value); + radius.setText(OsmAndFormatter.getFormattedDistance(value, app)); + recalculatePoints(running, thisAdapter, WaypointHelper.POI); + dialogInterface.dismiss(); + } + } + }).setTitle(app.getString(R.string.search_radius)+ " " + app.getString(R.string.poi)) + .setNegativeButton(R.string.default_buttons_cancel, null) + .show(); + } + }); + } else if (labelView) { + v = ctx.getLayoutInflater().inflate(R.layout.waypoint_header, null); final int type = (Integer) getItem(position); + ImageView sort = (ImageView) v.findViewById(R.id.sort); + //sort button in Destination header + if (type == 0 && sort != null){ + sort.setVisibility(View.VISIBLE); + if (app.getSettings().isLightContent()){ + sort.setImageResource(R.drawable.ic_sort_waypoint_white); + } else { + sort.setImageResource(R.drawable.ic_sort_waypoint_dark); + } + sort.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + IntermediatePointsDialog.openIntermediatePointsDialog(ctx, app, true); + } + }); + } final CompoundButton btn = (CompoundButton) v.findViewById(R.id.check_item); btn.setVisibility(waypointHelper.isTypeConfigurable(type) ? View.VISIBLE : View.GONE); btn.setOnCheckedChangeListener(null); @@ -392,6 +463,7 @@ public class WaypointDialogHelper implements OsmAndLocationListener { TextView tv = (TextView) v.findViewById(R.id.header_text); tv.setText(getHeader(type, checked)); } else { + v = ctx.getLayoutInflater().inflate(R.layout.waypoint_reached, null); updatePointInfoView(app, ctx, v, (LocationPointWrapper) getItem(position), WaypointDialogFragment.this); View remove = v.findViewById(R.id.info_close); ((ImageButton) remove).setImageDrawable(ctx.getResources().getDrawable( @@ -448,6 +520,9 @@ public class WaypointDialogHelper implements OsmAndLocationListener { List tp = waypointHelper.getWaypoints(i); if (waypointHelper.isTypeVisible(i)) { points.add(new Integer(i)); + if (i == WaypointHelper.POI && waypointHelper.isTypeEnabled(WaypointHelper.POI)){ + points.add(POI_RADIUS); + } if (tp != null && tp.size() > 0) { points.addAll(tp); } diff --git a/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java b/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java index 22eba272f7..f5b0193a41 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java @@ -56,6 +56,7 @@ public class WaypointHelper { public static final int FAVORITES = 3; public static final int ALARMS = 4; public static final int MAX = 5; + public static final int[] SEARCH_RADIUS_VALUES = {50, 100, 250, 500, 1000, 1500}; private List> locationPoints = new ArrayList>(); private ConcurrentHashMap locationPointsStates = new ConcurrentHashMap(); @@ -210,7 +211,9 @@ public class WaypointHelper { recalculatePoints(route, type, locationPoints); } - + public void recalculatePoints(int type){ + recalculatePoints(route, type, locationPoints); + } public boolean isTypeConfigurable(int waypointType) { @@ -705,6 +708,14 @@ public class WaypointHelper { } } + + public int getSearchDeviationRadius(){ + return searchDeviationRadius; + } + + public void setSearchDeviationRadius(int radius){ + this.searchDeviationRadius = radius; + } private class AmenityLocationPoint implements LocationPoint { From 6de2bab53867d7aee135f6f2e4fd71ededc054ac Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 16 Oct 2014 11:48:56 +0300 Subject: [PATCH 04/12] Created two different settings for search radius --- .../plus/helpers/WaypointDialogHelper.java | 42 ++++++++++++++++++- .../osmand/plus/helpers/WaypointHelper.java | 19 +++++---- 2 files changed, 51 insertions(+), 10 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java b/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java index 7bf257a9e6..f14de55997 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java @@ -46,6 +46,7 @@ public class WaypointDialogHelper implements OsmAndLocationListener { private WaypointHelper waypointHelper; private final static String POI_RADIUS = "poi_radius"; + private final static String SEARCH_RADIUS = "favorite_radius"; public final static boolean OVERLAP_LAYOUT = true; // only true is supported private View closePointDialog; @@ -386,6 +387,41 @@ public class WaypointDialogHelper implements OsmAndLocationListener { v = ctx.getLayoutInflater().inflate(labelView ? R.layout.waypoint_header : R.layout.waypoint_reached, null); } if (getItem(position) instanceof String && getItem(position).equals(POI_RADIUS)){ + v = ctx.getLayoutInflater().inflate(R.layout.radius_search_list_element, null); + v.findViewById(R.id.ProgressBar).setVisibility(position == running[0] ? View.VISIBLE : View.GONE); + final TextView radius = (TextView) v.findViewById(R.id.radius); + radius.setText(OsmAndFormatter.getFormattedDistance(waypointHelper.getPoiSearchDeviationRadius(), app)); + radius.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + int length = WaypointHelper.SEARCH_RADIUS_VALUES.length; + String[] names = new String[length]; + int selected = 0; + for (int i = 0; i < length; i++) { + names[i] = OsmAndFormatter.getFormattedDistance(WaypointHelper.SEARCH_RADIUS_VALUES[i], app); + if (WaypointHelper.SEARCH_RADIUS_VALUES[i] == waypointHelper.getPoiSearchDeviationRadius()){ + selected = i; + } + } + new AlertDialog.Builder(getActivity()) + .setSingleChoiceItems(names, selected, new OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + int value = WaypointHelper.SEARCH_RADIUS_VALUES[i]; + if (waypointHelper.getPoiSearchDeviationRadius() != value){ + running[0] = position; + waypointHelper.setPoiSearchDeviationRadius(value); + radius.setText(OsmAndFormatter.getFormattedDistance(value, app)); + recalculatePoints(running, thisAdapter, WaypointHelper.POI); + dialogInterface.dismiss(); + } + } + }).setTitle(app.getString(R.string.search_radius)+ " " + app.getString(R.string.poi)) + .setNegativeButton(R.string.default_buttons_cancel, null) + .show(); + } + }); + } else if (getItem(position) instanceof String && getItem(position).equals(SEARCH_RADIUS)){ v = ctx.getLayoutInflater().inflate(R.layout.radius_search_list_element, null); v.findViewById(R.id.ProgressBar).setVisibility(position == running[0] ? View.VISIBLE : View.GONE); final TextView radius = (TextView) v.findViewById(R.id.radius); @@ -411,11 +447,11 @@ public class WaypointDialogHelper implements OsmAndLocationListener { running[0] = position; waypointHelper.setSearchDeviationRadius(value); radius.setText(OsmAndFormatter.getFormattedDistance(value, app)); - recalculatePoints(running, thisAdapter, WaypointHelper.POI); + recalculatePoints(running, thisAdapter, -1); dialogInterface.dismiss(); } } - }).setTitle(app.getString(R.string.search_radius)+ " " + app.getString(R.string.poi)) + }).setTitle(app.getString(R.string.search_radius)) .setNegativeButton(R.string.default_buttons_cancel, null) .show(); } @@ -522,6 +558,8 @@ public class WaypointDialogHelper implements OsmAndLocationListener { points.add(new Integer(i)); if (i == WaypointHelper.POI && waypointHelper.isTypeEnabled(WaypointHelper.POI)){ points.add(POI_RADIUS); + } else if (i == WaypointHelper.FAVORITES && waypointHelper.isTypeEnabled(WaypointHelper.FAVORITES)){ + points.add(SEARCH_RADIUS); } if (tp != null && tp.size() > 0) { points.addAll(tp); diff --git a/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java b/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java index f5b0193a41..ef6bdd8d43 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java @@ -44,6 +44,7 @@ public class WaypointHelper { private static final int ANNOUNCED_DONE = 2; private int searchDeviationRadius = 500; + private int poiSearchDeviationRadius = 150; private static final int LONG_ANNOUNCE_RADIUS = 700; private static final int SHORT_ANNOUNCE_RADIUS = 150; private static final int ALARMS_ANNOUNCE_RADIUS = 150; @@ -509,7 +510,7 @@ public class WaypointHelper { PoiFilter pf = getPoiFilter(); if (pf != null) { final List locs = route.getImmutableAllLocations(); - List amenities = app.getResourceManager().searchAmenitiesOnThePath(locs, getSearchRadius(POI), + List amenities = app.getResourceManager().searchAmenitiesOnThePath(locs, getPoiSearchDeviationRadius(), pf, new ResultMatcher() { @Override @@ -536,12 +537,6 @@ public class WaypointHelper { } - protected int getSearchRadius(int type) { - // app.getAppCustomization().getWaypointSearchRadius(searchDeviationRadius, type); - return searchDeviationRadius; - } - - private void calculateAlarms(RouteCalculationResult route, List array) { for(AlarmInfo i : route.getAlarmInfo()) { @@ -580,7 +575,7 @@ public class WaypointHelper { int[] ind = new int[1]; for(LocationPoint p : points) { float dist = dist(p, immutableAllLocations, ind); - if(dist <= getSearchRadius(type)) { + if(dist <= getSearchDeviationRadius() && type != POI) { LocationPointWrapper lpw = new LocationPointWrapper(rt, type, p, dist, ind[0]); lpw.setAnnounce(announce); locationPoints.add(lpw); @@ -716,6 +711,14 @@ public class WaypointHelper { public void setSearchDeviationRadius(int radius){ this.searchDeviationRadius = radius; } + + public int getPoiSearchDeviationRadius() { + return poiSearchDeviationRadius; + } + + public void setPoiSearchDeviationRadius(int radius) { + this.poiSearchDeviationRadius = radius; + } private class AmenityLocationPoint implements LocationPoint { From d7ca432c32fb19494876992eb9337b524f4e7182 Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 16 Oct 2014 15:42:46 +0300 Subject: [PATCH 05/12] Updated functionality of waypoints in drawer menu --- .../net/osmand/plus/ContextMenuAdapter.java | 4 +- .../plus/activities/AvailableGPXFragment.java | 6 +- .../activities/FavouritesTreeFragment.java | 6 +- .../plus/activities/MapActivityActions.java | 87 ++- .../plus/activities/SelectedGPXFragment.java | 3 +- .../activities/search/SearchPOIActivity.java | 8 +- .../plus/audionotes/AudioNotesLayer.java | 3 +- .../audionotes/AudioVideoNotesPlugin.java | 19 +- .../DistanceCalculatorPlugin.java | 3 +- .../plus/download/LocalIndexesFragment.java | 6 +- .../plus/helpers/WaypointDialogHelper.java | 515 +++++++++--------- .../monitoring/OsmandMonitoringPlugin.java | 6 +- .../net/osmand/plus/osmedit/OsmBugsLayer.java | 3 +- .../osmand/plus/osmedit/OsmEditingPlugin.java | 12 +- .../src/net/osmand/plus/osmo/OsMoPlugin.java | 15 +- .../parkingpoint/ParkingPositionPlugin.java | 9 +- .../rastermaps/OsmandRasterMapsPlugin.java | 6 +- .../RoutePointsLayer.java | 3 +- .../plus/sherpafy/SherpafyCustomization.java | 18 +- .../osmand/plus/srtmplugin/SRTMPlugin.java | 3 +- .../net/osmand/plus/views/FavoritesLayer.java | 3 +- .../net/osmand/plus/views/POIMapLayer.java | 3 +- .../plus/views/PointNavigationLayer.java | 3 +- .../plus/views/TransportStopsLayer.java | 3 +- 24 files changed, 415 insertions(+), 332 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java b/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java index 6fad1a3191..ff1d4aa75b 100644 --- a/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java +++ b/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java @@ -17,8 +17,8 @@ import android.widget.TextView; public class ContextMenuAdapter { public interface OnContextMenuClick { - - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog); + //boolean return type needed to desribe if drawer needed to be close or not + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog); } private final Context ctx; diff --git a/OsmAnd/src/net/osmand/plus/activities/AvailableGPXFragment.java b/OsmAnd/src/net/osmand/plus/activities/AvailableGPXFragment.java index 228d02be00..e9e3d31d6b 100644 --- a/OsmAnd/src/net/osmand/plus/activities/AvailableGPXFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/AvailableGPXFragment.java @@ -159,7 +159,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { optionsMenuAdapter = new ContextMenuAdapter(getActivity()); OnContextMenuClick listener = new OnContextMenuClick() { @Override - public void onContextMenuClick(final int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(final int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (itemId == R.string.local_index_mi_reload) { asyncLoader = new LoadGpxTask(); asyncLoader.execute(getActivity()); @@ -175,6 +175,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { } }); } + return true; } }; optionsMenuAdapter.item(R.string.show_gpx_route) @@ -395,7 +396,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { private void basicFileOperation(final GpxInfo info, ContextMenuAdapter adapter) { OnContextMenuClick listener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int resId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int resId, int pos, boolean isChecked, DialogInterface dialog) { if (resId == R.string.local_index_mi_rename) { renameFile(info); } else if (resId == R.string.local_index_unselect_gpx_file || @@ -441,6 +442,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { AccessibleToast.makeText(getActivity(), R.string.gpx_file_is_empty, Toast.LENGTH_LONG).show(); } } + return true; } }; if (info.gpx != null && info.file == null) { diff --git a/OsmAnd/src/net/osmand/plus/activities/FavouritesTreeFragment.java b/OsmAnd/src/net/osmand/plus/activities/FavouritesTreeFragment.java index 15fd1714ba..d1524170d2 100644 --- a/OsmAnd/src/net/osmand/plus/activities/FavouritesTreeFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/FavouritesTreeFragment.java @@ -176,8 +176,9 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { editPoint(point); + return true; } }).reg(); Item delete = qa.item(R.string.favourites_context_menu_delete).icons( @@ -186,8 +187,9 @@ public class FavouritesTreeFragment extends OsmandExpandableListFragment { new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { deletePoint(point); + return true; } }).reg(); MapActivityActions.showObjectContextMenu(qa, getActivity(), onshow); diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index f3d5ab0c55..76b8f3f6d1 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -51,6 +51,7 @@ import net.osmand.plus.configuremap.ConfigureScreenSettingsActivity; import net.osmand.plus.development.OsmandDevelopmentPlugin; import net.osmand.plus.helpers.WaypointDialogHelper; import net.osmand.plus.osmo.OsMoPositionLayer; +import net.osmand.plus.helpers.WaypointHelper; import net.osmand.plus.routing.RouteProvider.GPXRouteParamsBuilder; import net.osmand.plus.routing.RoutingHelper; import net.osmand.plus.views.BaseMapLayer; @@ -93,6 +94,9 @@ public class MapActivityActions implements DialogProvider { private final MapActivity mapActivity; private OsmandSettings settings; private RoutingHelper routingHelper; + + DrawerLayout mDrawerLayout; + ListView mDrawerList; public MapActivityActions(MapActivity mapActivity){ @@ -727,8 +731,8 @@ public class MapActivityActions implements DialogProvider { public void createOptionsMenuAsDrawer(boolean show){ final ContextMenuAdapter cm = createOptionsMenu(); - final DrawerLayout mDrawerLayout = (DrawerLayout) mapActivity.findViewById(R.id.drawer_layout); - final ListView mDrawerList = (ListView) mapActivity.findViewById(R.id.left_drawer); + mDrawerLayout = (DrawerLayout) mapActivity.findViewById(R.id.drawer_layout); + mDrawerList = (ListView) mapActivity.findViewById(R.id.left_drawer); mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); ListAdapter listAdapter; if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){ @@ -751,9 +755,12 @@ public class MapActivityActions implements DialogProvider { public void onItemClick(AdapterView parent, View view, int which, long id) { OnContextMenuClick click = cm.getClickAdapter(which); if (click != null) { - click.onContextMenuClick(cm.getItemId(which), which, false, null); + if (click.onContextMenuClick(cm.getItemId(which), which, false, null)){ + mDrawerLayout.closeDrawer(mDrawerList); + } + } else { + mDrawerLayout.closeDrawer(mDrawerList); } - mDrawerLayout.closeDrawer(mDrawerList); } }); @@ -800,12 +807,13 @@ public class MapActivityActions implements DialogProvider { icons(R.drawable.ic_action_gloc_dark, R.drawable.ic_action_gloc_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (getMyApplication().accessibilityEnabled()) { whereAmIDialog(); } else { mapActivity.getMapViewTrackingUtilities().backToLocationImpl(); } + return true; } }).reg(); @@ -826,8 +834,9 @@ public class MapActivityActions implements DialogProvider { optionsMenuHelper.item(t).icons(icon, iconLight) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { routingHelper.getVoiceRouter().setMute(!routingHelper.getVoiceRouter().isMute()); + return true; } }).reg(); } @@ -836,8 +845,9 @@ public class MapActivityActions implements DialogProvider { .icons(R.drawable.ic_action_gdirections_dark, R.drawable.ic_action_gdirections_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { enterRoutePlanningMode(null, null, false); + return true; } }).reg(); } else if(routingHelper.isRouteCalculated()) { @@ -847,7 +857,7 @@ public class MapActivityActions implements DialogProvider { .icons(R.drawable.ic_action_gdirections_dark, R.drawable.ic_action_gdirections_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if(routingHelper.isRoutePlanningMode()) { routingHelper.setRoutePlanningMode(false); routingHelper.setFollowingMode(true); @@ -858,6 +868,7 @@ public class MapActivityActions implements DialogProvider { } mapActivity.getMapViewTrackingUtilities().switchToRoutePlanningMode(); mapActivity.refreshMap(); + return true; } }).reg(); } @@ -873,12 +884,13 @@ public class MapActivityActions implements DialogProvider { optionsMenuHelper.item(nav).icons(R.drawable.ic_action_remove_dark, R.drawable.ic_action_remove_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { stopNavigationActionConfirm(mapView); OsMoPositionLayer osMoPositionLayer = mapActivity.getMapView().getLayerByClass(OsMoPositionLayer.class); if (osMoPositionLayer != null) { OsMoPositionLayer.setFollowDestination(null); } + return true; } }).reg(); } @@ -886,11 +898,18 @@ public class MapActivityActions implements DialogProvider { optionsMenuHelper.item(R.string.target_points).icons(R.drawable.ic_action_flage_dark, R.drawable.ic_action_flage_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (getMyApplication().getWaypointHelper().isRouteCalculated()) { - WaypointDialogHelper.showWaypointsDialog(mapActivity); + + final List deletedPoints = new ArrayList(); + ArrayAdapter adapter = app.getMapActivity().getMapLayers(). + getMapControlsLayer().getWaypointDialogHelper().getWaypointsAdapter(app.getMapActivity(), deletedPoints); + mDrawerList = (ListView) mapActivity.findViewById(R.id.left_drawer); + mDrawerList.setAdapter(adapter); + return false; } else { openIntermediatePointsDialog(); + return true; } } }).reg(); @@ -900,9 +919,9 @@ public class MapActivityActions implements DialogProvider { optionsMenuHelper.item(R.string.menu_layers).icons(R.drawable.ic_action_layers_dark, R.drawable.ic_action_layers_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { mapActivity.startActivity(new Intent(mapActivity, ConfigureScreenSettingsActivity.class)); - + return true; //mapActivity.getMapLayers().openLayerSelectionDialog(mapView); } }).reg(); @@ -910,24 +929,26 @@ public class MapActivityActions implements DialogProvider { optionsMenuHelper.item(R.string.layer_map_appearance).icons(R.drawable.ic_action_settings_dark, R.drawable.ic_action_settings_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { mapActivity.getMapLayers().getMapInfoLayer().openViewConfigureDialog(); + return true; } }).reg(); optionsMenuHelper.item(R.string.settings_Button).icons(R.drawable.ic_action_settings2_dark, R.drawable.ic_action_settings2_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { final Intent intentSettings = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization().getSettingsActivity()); mapActivity.startActivity(intentSettings); + return true; } }).reg(); optionsMenuHelper.item(R.string.search_button).icons(R.drawable.ic_action_search_dark, R.drawable.ic_action_search_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { Intent newIntent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization().getSearchActivity()); // causes wrong position caching: newIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); LatLon loc = mapActivity.getMapLocation(); @@ -935,23 +956,26 @@ public class MapActivityActions implements DialogProvider { newIntent.putExtra(SearchActivity.SEARCH_LON, loc.getLongitude()); newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); mapActivity.startActivity(newIntent); + return true; } }).reg(); optionsMenuHelper.item(R.string.favorites_Button).icons( R.drawable.ic_action_fav_dark, R.drawable.ic_action_fav_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { Intent newIntent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization().getFavoritesActivity()); // causes wrong position caching: newIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); mapActivity.startActivity(newIntent); + return true; } }).reg(); optionsMenuHelper.item(R.string.show_point_options).icons(R.drawable.ic_action_marker_dark, R.drawable.ic_action_marker_light ) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { contextMenuPoint(mapView.getLatitude(), mapView.getLongitude()); + return true; } }).reg(); //////////// Others @@ -960,8 +984,9 @@ public class MapActivityActions implements DialogProvider { .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { new StartGPSStatus(mapActivity).run(); + return true; } }).reg(); } @@ -970,7 +995,7 @@ public class MapActivityActions implements DialogProvider { listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (MainMenuActivity.TIPS_AND_TRICKS) { TipsAndTricksActivity tactivity = new TipsAndTricksActivity(mapActivity); Dialog dlg = tactivity.getDialogToShowTips(false, true); @@ -979,6 +1004,7 @@ public class MapActivityActions implements DialogProvider { final Intent helpIntent = new Intent(mapActivity, HelpActivity.class); mapActivity.startActivity(helpIntent); } + return true; } }).reg(); final OsmAndLocationProvider loc = app.getLocationProvider(); @@ -990,10 +1016,11 @@ public class MapActivityActions implements DialogProvider { .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { // animate moving on route loc.getLocationSimulation().startStopRouteAnimation(mapActivity); + return true; } }).reg(); } @@ -1003,7 +1030,7 @@ public class MapActivityActions implements DialogProvider { optionsMenuHelper.item(R.string.exit_Button).icons(R.drawable.ic_action_quit_dark, R.drawable.ic_action_quit_light ) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { // 1. Work for almost all cases when user open apps from main menu Intent newIntent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization().getMainMenuActivity()); newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); @@ -1011,6 +1038,7 @@ public class MapActivityActions implements DialogProvider { mapActivity.startActivity(newIntent); // In future when map will be main screen this should change // app.closeApplication(mapActivity); + return true; } }).reg(); @@ -1113,8 +1141,9 @@ public class MapActivityActions implements DialogProvider { new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { - MapActivityActions.directionsToDialogAndLaunchMap(activity, location.getLatitude(), location.getLongitude(), name); + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + MapActivityActions.directionsToDialogAndLaunchMap(activity, location.getLatitude(), location.getLongitude(), name); + return true; } }).reg(); Item intermediate; @@ -1127,8 +1156,9 @@ public class MapActivityActions implements DialogProvider { } intermediate.listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { addWaypointDialogAndLaunchMap(activity, location.getLatitude(), location.getLongitude(), name); + return true; } }).reg(); @@ -1138,10 +1168,11 @@ public class MapActivityActions implements DialogProvider { new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { app.getSettings().setMapLocationToShow(location.getLatitude(), location.getLongitude(), z, saveHistory ? name : null, name, obj); //$NON-NLS-1$ MapActivity.launchMapActivityMoveToTop(activity); + return true; } }).reg(); if (favorite) { @@ -1150,13 +1181,13 @@ public class MapActivityActions implements DialogProvider { addToFavorite.listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { Bundle args = new Bundle(); Dialog dlg = createAddFavouriteDialog(activity, args); dlg.show(); prepareAddFavouriteDialog(activity, dlg, args, location.getLatitude(), location.getLongitude(), name); - + return true; } }).reg(); } diff --git a/OsmAnd/src/net/osmand/plus/activities/SelectedGPXFragment.java b/OsmAnd/src/net/osmand/plus/activities/SelectedGPXFragment.java index 27965245cf..e303a783eb 100644 --- a/OsmAnd/src/net/osmand/plus/activities/SelectedGPXFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/SelectedGPXFragment.java @@ -188,13 +188,14 @@ public class SelectedGPXFragment extends OsmandExpandableListFragment { private void basicFileOperation(final GpxDisplayItem gpxDisplayItem, ContextMenuAdapter adapter) { OnContextMenuClick listener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int resId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int resId, int pos, boolean isChecked, DialogInterface dialog) { if (resId == R.string.show_gpx_route) { OsmandSettings settings = app.getSettings(); settings.setMapLocationToShow(gpxDisplayItem.locationStart.lat, gpxDisplayItem.locationStart.lon, settings.getLastKnownMapZoom(), Html.fromHtml(gpxDisplayItem.name).toString()); MapActivity.launchMapActivityMoveToTop(getMyActivity()); } + return true; } }; if (gpxDisplayItem.locationStart != null) { diff --git a/OsmAnd/src/net/osmand/plus/activities/search/SearchPOIActivity.java b/OsmAnd/src/net/osmand/plus/activities/search/SearchPOIActivity.java index d2b9f0b6bf..cc2571bced 100644 --- a/OsmAnd/src/net/osmand/plus/activities/search/SearchPOIActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/search/SearchPOIActivity.java @@ -580,7 +580,7 @@ public class SearchPOIActivity extends OsmandListActivity implements OsmAndCompa poiDescr.listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dlg) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dlg) { // Build text(amenity) // Find and format links @@ -597,7 +597,8 @@ public class SearchPOIActivity extends OsmandListActivity implements OsmAndCompa // Make links clickable TextView textView = (TextView) dialog.findViewById(android.R.id.message); textView.setMovementMethod(LinkMovementMethod.getInstance()); - textView.setLinksClickable(true); + textView.setLinksClickable(true); + return true; } }).reg(); } @@ -606,8 +607,9 @@ public class SearchPOIActivity extends OsmandListActivity implements OsmAndCompa showDetails.listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dlg) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dlg) { showPOIDetails(amenity, settings.usingEnglishNames()); + return true; } }).reg(); } diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java index 5a86d98e4a..e414204e5a 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioNotesLayer.java @@ -118,13 +118,14 @@ public class AudioNotesLayer extends OsmandMapLayer implements IContextMenuProvi final Recording r = (Recording) o; OnContextMenuClick listener = new ContextMenuAdapter.OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (itemId == R.string.recording_context_menu_play || itemId == R.string.recording_context_menu_show) { plugin.playRecording(view.getContext(), r); } else if (itemId == R.string.recording_context_menu_delete) { deleteRecording(r); } + return true; } diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java index 10e6123538..b82a09876d 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java @@ -414,12 +414,13 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { public void registerLayerContextMenuActions(final OsmandMapTileView mapView, ContextMenuAdapter adapter, final MapActivity mapActivity) { OnContextMenuClick listener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (itemId == R.string.layer_recordings) { dialog.dismiss(); SHOW_RECORDINGS.set(!SHOW_RECORDINGS.get()); updateLayers(mapView, mapActivity); } + return true; } }; adapter.item(R.string.layer_recordings).selected(SHOW_RECORDINGS.get() ? 1 : 0) @@ -433,23 +434,26 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { recordAudio(latitude, longitude, mapActivity); + return true; } }).position(6).reg(); adapter.item(R.string.recording_context_menu_vrecord).icons(R.drawable.ic_action_video_dark, R.drawable.ic_action_video_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { recordVideo(latitude, longitude, mapActivity); + return true; } }).position(7).reg(); adapter.item(R.string.recording_context_menu_precord).icons(R.drawable.ic_action_photo_dark, R.drawable.ic_action_photo_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { takePhoto(latitude, longitude, mapActivity); + return true; } }).position(8).reg(); @@ -1101,8 +1105,9 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { final RecordingLocalIndexInfo ri = (RecordingLocalIndexInfo) info; OnContextMenuClick listener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { playRecording(la, ri.rec); + return true; } }; if (ri.rec.isPhoto()) { @@ -1118,13 +1123,13 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { .icons(R.drawable.ic_action_marker_dark, R.drawable.ic_action_marker_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { SHOW_RECORDINGS.set(true); app.getSettings().setMapLocationToShow(ri.rec.lat, ri.rec.lon, app.getSettings().getLastKnownMapZoom()); MapActivity.launchMapActivityMoveToTop(la); - + return true; } }).reg(); } diff --git a/OsmAnd/src/net/osmand/plus/distancecalculator/DistanceCalculatorPlugin.java b/OsmAnd/src/net/osmand/plus/distancecalculator/DistanceCalculatorPlugin.java index 01f967f65f..781f387705 100644 --- a/OsmAnd/src/net/osmand/plus/distancecalculator/DistanceCalculatorPlugin.java +++ b/OsmAnd/src/net/osmand/plus/distancecalculator/DistanceCalculatorPlugin.java @@ -584,7 +584,7 @@ public class DistanceCalculatorPlugin extends OsmandPlugin { OnContextMenuClick listener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (itemId == R.string.delete_point) { for (int i = 0; i < measurementPoints.size(); i++) { Iterator it = measurementPoints.get(i).iterator(); @@ -596,6 +596,7 @@ public class DistanceCalculatorPlugin extends OsmandPlugin { } calculateDistance(); } + return true; } }; adapter.item(R.string.delete_point).icons(R.drawable.ic_action_delete_dark, diff --git a/OsmAnd/src/net/osmand/plus/download/LocalIndexesFragment.java b/OsmAnd/src/net/osmand/plus/download/LocalIndexesFragment.java index c4713e031a..96dcc4b41a 100644 --- a/OsmAnd/src/net/osmand/plus/download/LocalIndexesFragment.java +++ b/OsmAnd/src/net/osmand/plus/download/LocalIndexesFragment.java @@ -158,7 +158,7 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment { private void basicFileOperation(final LocalIndexInfo info, ContextMenuAdapter adapter) { OnContextMenuClick listener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int resId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int resId, int pos, boolean isChecked, DialogInterface dialog) { if (resId == R.string.local_index_mi_rename) { renameFile(info); } else if (resId == R.string.local_index_mi_restore) { @@ -177,6 +177,7 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment { } else if (resId == R.string.local_index_mi_backup) { new LocalIndexOperationTask(BACKUP_OPERATION).execute(info); } + return true; } }; if(info.getType() == LocalIndexType.MAP_DATA || info.getType() == LocalIndexType.SRTM_DATA){ @@ -475,8 +476,9 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment { optionsMenuAdapter = new ContextMenuAdapter(getDownloadActivity()); OnContextMenuClick listener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { localOptionsMenu(itemId); + return true; } }; optionsMenuAdapter.item(R.string.local_index_mi_reload) diff --git a/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java b/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java index f14de55997..b6c410f88d 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java @@ -3,7 +3,6 @@ package net.osmand.plus.helpers; import java.util.ArrayList; import java.util.List; -import android.support.v4.widget.DrawerLayout; import android.widget.*; import net.osmand.Location; import net.osmand.data.LatLon; @@ -195,14 +194,16 @@ public class WaypointDialogHelper implements OsmAndLocationListener { public static void showWaypointsDialogFlat(FragmentActivity fragmentActivity) { Bundle args = new Bundle(); args.putBoolean(WaypointDialogFragment.FLAT_ARG, true); - WaypointDialogFragment wdf = new WaypointDialogFragment(); + //TODO remove this method totally + WaypointDialogFragment wdf = new WaypointDialogFragment(new WaypointDialogHelper(null)); wdf.setArguments(args); fragmentActivity.getSupportFragmentManager().beginTransaction().add(wdf, "tag").commit(); } public static void showWaypointsDialog(FragmentActivity fragmentActivity) { Bundle args = new Bundle(); - WaypointDialogFragment wdf = new WaypointDialogFragment(); + //TODO remove this method totally + WaypointDialogFragment wdf = new WaypointDialogFragment(new WaypointDialogHelper(null)); wdf.setArguments(args); fragmentActivity.getSupportFragmentManager().beginTransaction().add(wdf, "tag").commit(); } @@ -211,9 +212,14 @@ public class WaypointDialogHelper implements OsmAndLocationListener { WaypointHelper waypointHelper; private OsmandApplication app; + private WaypointDialogHelper dialogHelper; public static final String FLAT_ARG = "FLAT_ARG"; + public WaypointDialogFragment(WaypointDialogHelper helper){ + this.dialogHelper = helper; + } + @Override public void onAttach(Activity activity) { super.onAttach(activity); @@ -229,91 +235,6 @@ public class WaypointDialogHelper implements OsmAndLocationListener { return createWaypointsDialog(); } - private void selectPoi(final int[] running, final ArrayAdapter listAdapter, final int type, - final boolean enable) { - if (getActivity() instanceof MapActivity && !PoiFilter.CUSTOM_FILTER_ID.equals(app.getSettings().getPoiFilterForMap())) { - MapActivity map = (MapActivity) getActivity(); - final PoiFilter[] selected = new PoiFilter[1]; - AlertDialog dlg = map.getMapLayers().selectPOIFilterLayer(map.getMapView(), selected); - dlg.setOnDismissListener(new OnDismissListener() { - - @Override - public void onDismiss(DialogInterface dialog) { - if (selected != null) { - enableType(running, listAdapter, type, enable); - } - } - }); - } else { - enableType(running, listAdapter, type, enable); - } - } - - private void recalculatePoints(final int[] running, final ArrayAdapter listAdapter, final int type){ - new AsyncTask() { - - @Override - protected Void doInBackground(Void... params) { - app.getWaypointHelper().recalculatePoints(type); - return null; - } - - protected void onPostExecute(Void result) { - running[0] = -1; - listAdapter.clear(); - for (Object point : getPoints()) { - listAdapter.add(point); - } - listAdapter.notifyDataSetChanged(); - } - }.execute((Void) null); - } - - private void enableType(final int[] running, final ArrayAdapter listAdapter, final int type, - final boolean enable) { - new AsyncTask() { - - @Override - protected Void doInBackground(Void... params) { - app.getWaypointHelper().enableWaypointType(type, enable); - return null; - } - - protected void onPostExecute(Void result) { - running[0] = -1; - listAdapter.clear(); - for (Object point : getPoints()) { - listAdapter.add(point); - } - listAdapter.notifyDataSetChanged(); - } - }.execute((Void) null); - } - - protected String getHeader(int type, boolean checked) { - FragmentActivity ctx = getActivity(); - String str = ctx.getString(R.string.waypoints); - switch (type) { - case WaypointHelper.TARGETS: - str = ctx.getString(R.string.targets); - break; - case WaypointHelper.ALARMS: - str = ctx.getString(R.string.way_alarms); - break; - case WaypointHelper.FAVORITES: - str = ctx.getString(R.string.my_favorites); - break; - case WaypointHelper.WAYPOINTS: - str = ctx.getString(R.string.waypoints); - break; - case WaypointHelper.POI: - str = waypointHelper.getPoiFilter() == null || !checked ? ctx.getString(R.string.poi) : waypointHelper - .getPoiFilter().getName(); - break; - } - return str; - } - public AlertDialog createWaypointsDialogFlat(final List points) { final List deletedPoints = new ArrayList(); final FragmentActivity ctx = getActivity(); @@ -368,156 +289,10 @@ public class WaypointDialogHelper implements OsmAndLocationListener { } public AlertDialog createWaypointsDialog() { - final List points = getPoints(); - final List deletedPoints = new ArrayList(); final FragmentActivity ctx = getActivity(); final ListView listView = new ListView(ctx); - final int[] running = new int[]{-1}; - final ArrayAdapter listAdapter = new ArrayAdapter(ctx, - R.layout.waypoint_reached, R.id.title, points) { - - @Override - public View getView(final int position, View convertView, ViewGroup parent) { - // User super class to create the View - View v = convertView; - final ArrayAdapter thisAdapter = this; - boolean labelView = (getItem(position) instanceof Integer); - boolean viewText = v != null && v.findViewById(R.id.info_close) == null; - if (v == null || viewText != labelView) { - v = ctx.getLayoutInflater().inflate(labelView ? R.layout.waypoint_header : R.layout.waypoint_reached, null); - } - if (getItem(position) instanceof String && getItem(position).equals(POI_RADIUS)){ - v = ctx.getLayoutInflater().inflate(R.layout.radius_search_list_element, null); - v.findViewById(R.id.ProgressBar).setVisibility(position == running[0] ? View.VISIBLE : View.GONE); - final TextView radius = (TextView) v.findViewById(R.id.radius); - radius.setText(OsmAndFormatter.getFormattedDistance(waypointHelper.getPoiSearchDeviationRadius(), app)); - radius.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - int length = WaypointHelper.SEARCH_RADIUS_VALUES.length; - String[] names = new String[length]; - int selected = 0; - for (int i = 0; i < length; i++) { - names[i] = OsmAndFormatter.getFormattedDistance(WaypointHelper.SEARCH_RADIUS_VALUES[i], app); - if (WaypointHelper.SEARCH_RADIUS_VALUES[i] == waypointHelper.getPoiSearchDeviationRadius()){ - selected = i; - } - } - new AlertDialog.Builder(getActivity()) - .setSingleChoiceItems(names, selected, new OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - int value = WaypointHelper.SEARCH_RADIUS_VALUES[i]; - if (waypointHelper.getPoiSearchDeviationRadius() != value){ - running[0] = position; - waypointHelper.setPoiSearchDeviationRadius(value); - radius.setText(OsmAndFormatter.getFormattedDistance(value, app)); - recalculatePoints(running, thisAdapter, WaypointHelper.POI); - dialogInterface.dismiss(); - } - } - }).setTitle(app.getString(R.string.search_radius)+ " " + app.getString(R.string.poi)) - .setNegativeButton(R.string.default_buttons_cancel, null) - .show(); - } - }); - } else if (getItem(position) instanceof String && getItem(position).equals(SEARCH_RADIUS)){ - v = ctx.getLayoutInflater().inflate(R.layout.radius_search_list_element, null); - v.findViewById(R.id.ProgressBar).setVisibility(position == running[0] ? View.VISIBLE : View.GONE); - final TextView radius = (TextView) v.findViewById(R.id.radius); - radius.setText(OsmAndFormatter.getFormattedDistance(waypointHelper.getSearchDeviationRadius(), app)); - radius.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - int length = WaypointHelper.SEARCH_RADIUS_VALUES.length; - String[] names = new String[length]; - int selected = 0; - for (int i = 0; i < length; i++) { - names[i] = OsmAndFormatter.getFormattedDistance(WaypointHelper.SEARCH_RADIUS_VALUES[i], app); - if (WaypointHelper.SEARCH_RADIUS_VALUES[i] == waypointHelper.getSearchDeviationRadius()){ - selected = i; - } - } - new AlertDialog.Builder(getActivity()) - .setSingleChoiceItems(names, selected, new OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - int value = WaypointHelper.SEARCH_RADIUS_VALUES[i]; - if (waypointHelper.getSearchDeviationRadius() != value){ - running[0] = position; - waypointHelper.setSearchDeviationRadius(value); - radius.setText(OsmAndFormatter.getFormattedDistance(value, app)); - recalculatePoints(running, thisAdapter, -1); - dialogInterface.dismiss(); - } - } - }).setTitle(app.getString(R.string.search_radius)) - .setNegativeButton(R.string.default_buttons_cancel, null) - .show(); - } - }); - } else if (labelView) { - v = ctx.getLayoutInflater().inflate(R.layout.waypoint_header, null); - final int type = (Integer) getItem(position); - ImageView sort = (ImageView) v.findViewById(R.id.sort); - //sort button in Destination header - if (type == 0 && sort != null){ - sort.setVisibility(View.VISIBLE); - if (app.getSettings().isLightContent()){ - sort.setImageResource(R.drawable.ic_sort_waypoint_white); - } else { - sort.setImageResource(R.drawable.ic_sort_waypoint_dark); - } - sort.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - IntermediatePointsDialog.openIntermediatePointsDialog(ctx, app, true); - } - }); - } - final CompoundButton btn = (CompoundButton) v.findViewById(R.id.check_item); - btn.setVisibility(waypointHelper.isTypeConfigurable(type) ? View.VISIBLE : View.GONE); - btn.setOnCheckedChangeListener(null); - final boolean checked = waypointHelper.isTypeEnabled(type); - btn.setChecked(checked); - btn.setEnabled(running[0] == -1); - v.findViewById(R.id.ProgressBar).setVisibility(position == running[0] ? View.VISIBLE : View.GONE); - btn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - running[0] = position; - thisAdapter.notifyDataSetInvalidated(); - if (type == WaypointHelper.POI && isChecked) { - selectPoi(running, thisAdapter, type, isChecked); - } else { - enableType(running, thisAdapter, type, isChecked); - } - } - - }); - TextView tv = (TextView) v.findViewById(R.id.header_text); - tv.setText(getHeader(type, checked)); - } else { - v = ctx.getLayoutInflater().inflate(R.layout.waypoint_reached, null); - updatePointInfoView(app, ctx, v, (LocationPointWrapper) getItem(position), WaypointDialogFragment.this); - View remove = v.findViewById(R.id.info_close); - ((ImageButton) remove).setImageDrawable(ctx.getResources().getDrawable( - app.getSettings().isLightContent() ? R.drawable.ic_action_gremove_light - : R.drawable.ic_action_gremove_dark)); - remove.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - LocationPointWrapper point = (LocationPointWrapper) points.get(position); - remove(point); - deletedPoints.add(point); - notifyDataSetChanged(); - } - }); - } - return v; - } - }; + final List deletedPoints = new ArrayList(); + final ArrayAdapter listAdapter = dialogHelper.getWaypointsAdapter(ctx, deletedPoints); listView.setAdapter(listAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @@ -550,24 +325,6 @@ public class WaypointDialogHelper implements OsmAndLocationListener { return builder.create(); } - protected List getPoints() { - final List points = new ArrayList(); - for (int i = 0; i < WaypointHelper.MAX; i++) { - List tp = waypointHelper.getWaypoints(i); - if (waypointHelper.isTypeVisible(i)) { - points.add(new Integer(i)); - if (i == WaypointHelper.POI && waypointHelper.isTypeEnabled(WaypointHelper.POI)){ - points.add(POI_RADIUS); - } else if (i == WaypointHelper.FAVORITES && waypointHelper.isTypeEnabled(WaypointHelper.FAVORITES)){ - points.add(SEARCH_RADIUS); - } - if (tp != null && tp.size() > 0) { - points.addAll(tp); - } - } - } - return points; - } } @@ -603,5 +360,255 @@ public class WaypointDialogHelper implements OsmAndLocationListener { } } + public ArrayAdapter getWaypointsAdapter(final Activity ctx, final List deletedPoints){ + final List points = getPoints(); + final int[] running = new int[]{-1}; + return new ArrayAdapter(ctx, + R.layout.waypoint_reached, R.id.title, points) { + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + // User super class to create the View + View v = convertView; + final ArrayAdapter thisAdapter = this; + boolean labelView = (getItem(position) instanceof Integer); + boolean viewText = v != null && v.findViewById(R.id.info_close) == null; + if (v == null || viewText != labelView) { + v = ctx.getLayoutInflater().inflate(labelView ? R.layout.waypoint_header : R.layout.waypoint_reached, null); + } + if (getItem(position) instanceof String && getItem(position).equals(POI_RADIUS)){ + v = ctx.getLayoutInflater().inflate(R.layout.radius_search_list_element, null); + v.findViewById(R.id.ProgressBar).setVisibility(position == running[0] ? View.VISIBLE : View.GONE); + final TextView radius = (TextView) v.findViewById(R.id.radius); + radius.setText(OsmAndFormatter.getFormattedDistance(waypointHelper.getPoiSearchDeviationRadius(), app)); + radius.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + int length = WaypointHelper.SEARCH_RADIUS_VALUES.length; + String[] names = new String[length]; + int selected = 0; + for (int i = 0; i < length; i++) { + names[i] = OsmAndFormatter.getFormattedDistance(WaypointHelper.SEARCH_RADIUS_VALUES[i], app); + if (WaypointHelper.SEARCH_RADIUS_VALUES[i] == waypointHelper.getPoiSearchDeviationRadius()){ + selected = i; + } + } + new AlertDialog.Builder(ctx) + .setSingleChoiceItems(names, selected, new OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + int value = WaypointHelper.SEARCH_RADIUS_VALUES[i]; + if (waypointHelper.getPoiSearchDeviationRadius() != value){ + running[0] = position; + waypointHelper.setPoiSearchDeviationRadius(value); + radius.setText(OsmAndFormatter.getFormattedDistance(value, app)); + recalculatePoints(running, thisAdapter, WaypointHelper.POI); + dialogInterface.dismiss(); + } + } + }).setTitle(app.getString(R.string.search_radius)+ " " + app.getString(R.string.poi)) + .setNegativeButton(R.string.default_buttons_cancel, null) + .show(); + } + }); + } else if (getItem(position) instanceof String && getItem(position).equals(SEARCH_RADIUS)){ + v = ctx.getLayoutInflater().inflate(R.layout.radius_search_list_element, null); + v.findViewById(R.id.ProgressBar).setVisibility(position == running[0] ? View.VISIBLE : View.GONE); + final TextView radius = (TextView) v.findViewById(R.id.radius); + radius.setText(OsmAndFormatter.getFormattedDistance(waypointHelper.getSearchDeviationRadius(), app)); + radius.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + int length = WaypointHelper.SEARCH_RADIUS_VALUES.length; + String[] names = new String[length]; + int selected = 0; + for (int i = 0; i < length; i++) { + names[i] = OsmAndFormatter.getFormattedDistance(WaypointHelper.SEARCH_RADIUS_VALUES[i], app); + if (WaypointHelper.SEARCH_RADIUS_VALUES[i] == waypointHelper.getSearchDeviationRadius()){ + selected = i; + } + } + new AlertDialog.Builder(ctx) + .setSingleChoiceItems(names, selected, new OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + int value = WaypointHelper.SEARCH_RADIUS_VALUES[i]; + if (waypointHelper.getSearchDeviationRadius() != value){ + running[0] = position; + waypointHelper.setSearchDeviationRadius(value); + radius.setText(OsmAndFormatter.getFormattedDistance(value, app)); + recalculatePoints(running, thisAdapter, -1); + dialogInterface.dismiss(); + } + } + }).setTitle(app.getString(R.string.search_radius)) + .setNegativeButton(R.string.default_buttons_cancel, null) + .show(); + } + }); + } else if (labelView) { + v = ctx.getLayoutInflater().inflate(R.layout.waypoint_header, null); + final int type = (Integer) getItem(position); + ImageView sort = (ImageView) v.findViewById(R.id.sort); + //sort button in Destination header + if (type == 0 && sort != null){ + sort.setVisibility(View.VISIBLE); + if (app.getSettings().isLightContent()){ + sort.setImageResource(R.drawable.ic_sort_waypoint_white); + } else { + sort.setImageResource(R.drawable.ic_sort_waypoint_dark); + } + sort.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + IntermediatePointsDialog.openIntermediatePointsDialog(ctx, app, true); + } + }); + } + final CompoundButton btn = (CompoundButton) v.findViewById(R.id.check_item); + btn.setVisibility(waypointHelper.isTypeConfigurable(type) ? View.VISIBLE : View.GONE); + btn.setOnCheckedChangeListener(null); + final boolean checked = waypointHelper.isTypeEnabled(type); + btn.setChecked(checked); + btn.setEnabled(running[0] == -1); + v.findViewById(R.id.ProgressBar).setVisibility(position == running[0] ? View.VISIBLE : View.GONE); + btn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + running[0] = position; + thisAdapter.notifyDataSetInvalidated(); + if (type == WaypointHelper.POI && isChecked) { + selectPoi(running, thisAdapter, type, isChecked, mapActivity); + } else { + enableType(running, thisAdapter, type, isChecked); + } + } + + }); + TextView tv = (TextView) v.findViewById(R.id.header_text); + tv.setText(getHeader(ctx, type, checked)); + } else { + v = ctx.getLayoutInflater().inflate(R.layout.waypoint_reached, null); + updatePointInfoView(app, ctx, v, (LocationPointWrapper) getItem(position), null); + View remove = v.findViewById(R.id.info_close); + ((ImageButton) remove).setImageDrawable(ctx.getResources().getDrawable( + app.getSettings().isLightContent() ? R.drawable.ic_action_gremove_light + : R.drawable.ic_action_gremove_dark)); + remove.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + LocationPointWrapper point = (LocationPointWrapper) points.get(position); + remove(point); + deletedPoints.add(point); + notifyDataSetChanged(); + } + }); + } + return v; + } + }; + } + + protected String getHeader(Activity ctx, int type, boolean checked) { + String str = ctx.getString(R.string.waypoints); + switch (type) { + case WaypointHelper.TARGETS: + str = ctx.getString(R.string.targets); + break; + case WaypointHelper.ALARMS: + str = ctx.getString(R.string.way_alarms); + break; + case WaypointHelper.FAVORITES: + str = ctx.getString(R.string.my_favorites); + break; + case WaypointHelper.WAYPOINTS: + str = ctx.getString(R.string.waypoints); + break; + case WaypointHelper.POI: + str = waypointHelper.getPoiFilter() == null || !checked ? ctx.getString(R.string.poi) : waypointHelper + .getPoiFilter().getName(); + break; + } + return str; + } + + private void selectPoi(final int[] running, final ArrayAdapter listAdapter, final int type, + final boolean enable, MapActivity map) { + if (!PoiFilter.CUSTOM_FILTER_ID.equals(app.getSettings().getPoiFilterForMap())) { + final PoiFilter[] selected = new PoiFilter[1]; + AlertDialog dlg = map.getMapLayers().selectPOIFilterLayer(map.getMapView(), selected); + dlg.setOnDismissListener(new OnDismissListener() { + + @Override + public void onDismiss(DialogInterface dialog) { + if (selected != null) { + enableType(running, listAdapter, type, enable); + } + } + }); + } else { + enableType(running, listAdapter, type, enable); + } + } + + private void recalculatePoints(final int[] running, final ArrayAdapter listAdapter, final int type){ + new AsyncTask() { + + @Override + protected Void doInBackground(Void... params) { + app.getWaypointHelper().recalculatePoints(type); + return null; + } + + protected void onPostExecute(Void result) { + running[0] = -1; + listAdapter.clear(); + for (Object point : getPoints()) { + listAdapter.add(point); + } + listAdapter.notifyDataSetChanged(); + } + }.execute((Void) null); + } + + protected List getPoints() { + final List points = new ArrayList(); + for (int i = 0; i < WaypointHelper.MAX; i++) { + List tp = waypointHelper.getWaypoints(i); + if (waypointHelper.isTypeVisible(i)) { + points.add(new Integer(i)); + if (i == WaypointHelper.POI && waypointHelper.isTypeEnabled(WaypointHelper.POI)){ + points.add(POI_RADIUS); + } else if (i == WaypointHelper.FAVORITES && waypointHelper.isTypeEnabled(WaypointHelper.FAVORITES)){ + points.add(SEARCH_RADIUS); + } + if (tp != null && tp.size() > 0) { + points.addAll(tp); + } + } + } + return points; + } + + private void enableType(final int[] running, final ArrayAdapter listAdapter, final int type, + final boolean enable) { + new AsyncTask() { + + @Override + protected Void doInBackground(Void... params) { + app.getWaypointHelper().enableWaypointType(type, enable); + return null; + } + + protected void onPostExecute(Void result) { + running[0] = -1; + listAdapter.clear(); + for (Object point : getPoints()) { + listAdapter.add(point); + } + listAdapter.notifyDataSetChanged(); + } + }.execute((Void) null); + } } diff --git a/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java b/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java index 31e9291da8..8df4641293 100644 --- a/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java +++ b/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java @@ -115,10 +115,11 @@ public class OsmandMonitoringPlugin extends OsmandPlugin implements MonitoringIn ContextMenuAdapter adapter, Object selectedObj) { OnContextMenuClick listener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int resId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int resId, int pos, boolean isChecked, DialogInterface dialog) { if (resId == R.string.context_menu_item_add_waypoint) { mapActivity.getMapActions().addWaypoint(latitude, longitude); } + return true; } }; adapter.item(R.string.context_menu_item_add_waypoint).icons(R.drawable.ic_action_gnew_label_dark, R.drawable.ic_action_gnew_label_light) @@ -447,7 +448,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin implements MonitoringIn int draw = !bgoff ? R.drawable.monitoring_rec_big : R.drawable.monitoring_rec_inactive; qa.item(msgId).icon(draw).listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (view.getApplication().getNavigationService() == null) { final ValueHolder vs = new ValueHolder(); final ValueHolder choice = new ValueHolder(); @@ -465,6 +466,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin implements MonitoringIn } else { view.getContext().stopService(serviceIntent); } + return true; } }).position(0).reg(); } diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java index 52fd47762a..080d2c1b9e 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmBugsLayer.java @@ -495,12 +495,13 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider OnContextMenuClick listener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (itemId == R.string.osb_comment_menu_item) { commentBug(bug); } else if (itemId == R.string.osb_close_menu_item) { closeBug(bug); } + return true; } }; adapter.item(R.string.osb_comment_menu_item).icons( diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java index ff8fdfef20..407d1067d6 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java @@ -122,7 +122,7 @@ public class OsmEditingPlugin extends OsmandPlugin { final Object selectedObj) { OnContextMenuClick listener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int resId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int resId, int pos, boolean isChecked, DialogInterface dialog) { if (resId == R.string.context_menu_item_create_poi) { getPoiActions(mapActivity).showCreateDialog(latitude, longitude); } else if (resId == R.string.context_menu_item_open_bug) { @@ -135,6 +135,7 @@ public class OsmEditingPlugin extends OsmandPlugin { } else if (resId == R.string.poi_context_menu_modify) { getPoiActions(mapActivity).showEditDialog((Amenity) selectedObj); } + return true; } }; if(selectedObj instanceof Amenity) { @@ -156,10 +157,11 @@ public class OsmEditingPlugin extends OsmandPlugin { .icons(R.drawable.ic_action_bug_dark, R.drawable.ic_action_bug_light).listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (itemId == R.string.layer_osm_bugs) { settings.SHOW_OSM_BUGS.set(isChecked); } + return true; } }).position(7).reg(); @@ -178,8 +180,9 @@ public class OsmEditingPlugin extends OsmandPlugin { .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { sendGPXFiles(la, (AvailableGPXFragment) fragment, (GpxInfo) info); + return true; } }).reg(); } @@ -194,7 +197,7 @@ public class OsmEditingPlugin extends OsmandPlugin { .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { f.openSelectionMode(R.string.local_index_mi_upload_gpx, R.drawable.ic_action_gup_dark, R.drawable.ic_action_gup_light, new OnClickListener() { @Override @@ -204,6 +207,7 @@ public class OsmEditingPlugin extends OsmandPlugin { selectedItems.toArray(new GpxInfo[selectedItems.size()])); } }); + return true; } }).position(5).reg(); } diff --git a/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java b/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java index fe681a56aa..27a5ce28dd 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java @@ -136,13 +136,14 @@ public class OsMoPlugin extends OsmandPlugin implements MonitoringInfoControlSer R.drawable.ic_action_gloc_light).listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { OsMoDevice o = (OsMoDevice) selectedObj; double lat = o.getLastLocation() == null ? latitude : o.getLastLocation().getLatitude(); double lon = o.getLastLocation() == null ? longitude : o.getLastLocation().getLongitude(); mapActivity.getMapView().setLatLon(lat, lon); MapActivity.getMapViewTrackingUtilities().setMapLinkedToLocation(false); OsMoPositionLayer.setFollowTrackerId(o); + return true; } }).position(0).reg(); if(OsMoPositionLayer.getFollowDestinationId() != null) { @@ -150,9 +151,10 @@ public class OsMoPlugin extends OsmandPlugin implements MonitoringInfoControlSer R.drawable.ic_action_close_light).listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { OsMoPositionLayer.setFollowDestination(null); + return true; } }).position(0).reg(); @@ -161,13 +163,14 @@ public class OsMoPlugin extends OsmandPlugin implements MonitoringInfoControlSer R.drawable.ic_action_flag_light).listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { OsMoDevice o = (OsMoDevice) selectedObj; if(o.getLastLocation() != null) { TargetPointsHelper targets = mapActivity.getMyApplication().getTargetPointsHelper(); targets.navigateToPoint(new LatLon(o.getLastLocation().getLatitude(), o.getLastLocation().getLongitude()), true, -1); } OsMoPositionLayer.setFollowDestination(o); + return true; } }).position(1).reg(); } @@ -291,10 +294,11 @@ public class OsMoPlugin extends OsmandPlugin implements MonitoringInfoControlSer .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { final double lat = view.getLatitude(); final double lon = view.getLongitude(); tracker.sendCoordinate(lat, lon); + return true; } }).reg(); } @@ -321,9 +325,10 @@ public class OsMoPlugin extends OsmandPlugin implements MonitoringInfoControlSer helper.item(R.string.osmo_groups).icons(R.drawable.ic_action_eye_dark, R.drawable.ic_action_eye_light).position(6) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { Intent intent = new Intent(mapActivity, OsMoGroupsActivity.class); mapActivity.startActivity(intent); + return true; } }).reg(); } diff --git a/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java b/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java index 9664add743..459f87049b 100644 --- a/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java +++ b/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java @@ -200,11 +200,12 @@ public class ParkingPositionPlugin extends OsmandPlugin { if (selectedObj == parkingPosition && parkingPosition != null) { OnContextMenuClick removeListener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int resId, int pos, + public boolean onContextMenuClick(int resId, int pos, boolean isChecked, DialogInterface dialog) { if ((resId == R.string.context_menu_item_delete_parking_point)) { showDeleteDialog(mapActivity); } + return true; } }; adapter.item(R.string.context_menu_item_delete_parking_point) @@ -213,11 +214,12 @@ public class ParkingPositionPlugin extends OsmandPlugin { OnContextMenuClick addListener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int resId, int pos, + public boolean onContextMenuClick(int resId, int pos, boolean isChecked, DialogInterface dialog) { if (resId == R.string.context_menu_item_add_parking_point) { showAddParkingDialog(mapActivity, latitude, longitude); } + return true; } }; adapter.item(R.string.context_menu_item_add_parking_point) @@ -419,8 +421,9 @@ public class ParkingPositionPlugin extends OsmandPlugin { helper.item(R.string.osmand_parking_delete) .icons(R.drawable.ic_action_remove_dark, R.drawable.ic_action_remove_light).listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { showDeleteDialog(mapActivity); + return true; } }).reg(); diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/OsmandRasterMapsPlugin.java b/OsmAnd/src/net/osmand/plus/rastermaps/OsmandRasterMapsPlugin.java index 577adeb357..30524217a5 100644 --- a/OsmAnd/src/net/osmand/plus/rastermaps/OsmandRasterMapsPlugin.java +++ b/OsmAnd/src/net/osmand/plus/rastermaps/OsmandRasterMapsPlugin.java @@ -186,7 +186,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin { final MapActivityLayers layers = mapActivity.getMapLayers(); OnContextMenuClick listener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (itemId == R.string.layer_map) { dialog.dismiss(); layers.selectMapLayer(mapView); @@ -210,6 +210,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin { mapActivity); } } + return true; } }; adapter.item(R.string.layer_map).icons(R.drawable.ic_action_globus_dark, R.drawable.ic_action_globus_light) @@ -228,13 +229,14 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin { if (mapView.getMainLayer() instanceof MapTileLayer) { OnContextMenuClick listener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int resId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int resId, int pos, boolean isChecked, DialogInterface dialog) { if (resId == R.string.context_menu_item_update_map) { mapActivity.getMapActions().reloadTile(mapView.getZoom(), latitude, longitude); } else if (resId == R.string.context_menu_item_download_map) { DownloadTilesDialog dlg = new DownloadTilesDialog(mapActivity, (OsmandApplication) mapActivity.getApplication(), mapView); dlg.openDialog(); } + return true; } }; adapter.item(R.string.context_menu_item_update_map).icons(R.drawable.ic_action_refresh_dark, R.drawable.ic_action_refresh_light) diff --git a/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java b/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java index abdea19a7f..d4f4055a42 100644 --- a/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java +++ b/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java @@ -75,7 +75,7 @@ public class RoutePointsLayer extends OsmandMapLayer implements ContextMenuLaye final GPXUtilities.WptPt point = (GPXUtilities.WptPt) o; ContextMenuAdapter.OnContextMenuClick listener = new ContextMenuAdapter.OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (itemId == R.string.mark_as_not_visited){ plugin.getCurrentRoute().markPoint(point,false); plugin.saveCurrentRoute(); @@ -91,6 +91,7 @@ public class RoutePointsLayer extends OsmandMapLayer implements ContextMenuLaye plugin.saveCurrentRoute(); } map.refreshMap(); + return true; } }; diff --git a/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyCustomization.java b/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyCustomization.java index 60cec5bfd6..503610ffd9 100644 --- a/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyCustomization.java +++ b/OsmAnd/src/net/osmand/plus/sherpafy/SherpafyCustomization.java @@ -513,8 +513,9 @@ public class SherpafyCustomization extends OsmAndAppCustomization { adapter.item(R.string.show_waypoint_information).icons(R.drawable.ic_action_info_dark, R.drawable.ic_action_info_light ).position(0) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { showFavoriteDialog(mapActivity, selectedStage, sf); + return true; } }).reg(); @@ -564,19 +565,21 @@ public class SherpafyCustomization extends OsmAndAppCustomization { R.drawable.ic_action_gremove_dark, R.drawable.ic_action_gremove_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { app.getSettings().SHOW_POI_OVER_MAP.set(false); mapActivity.getMapLayers().updateLayers(mapActivity.getMapView()); + return true; } }).reg(); } else { adapter.item(R.string.poi).icons(R.drawable.ic_action_layers_dark, R.drawable.ic_action_layers_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { mapActivity.getMapLayers().selectPOIFilterLayer(mapActivity.getMapView(), null); app.getSettings().SHOW_POI_OVER_MAP.set(true); mapActivity.getMapLayers().updateLayers(mapActivity.getMapView()); + return true; } }).reg(); } @@ -584,10 +587,11 @@ public class SherpafyCustomization extends OsmAndAppCustomization { adapter.item(R.string.sherpafy_tour_info_txt).icons(R.drawable.ic_action_info_dark, R.drawable.ic_action_info_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { Intent newIntent = new Intent(mapActivity, TourViewActivity.class); // newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); mapActivity.startActivity(newIntent); + return true; } }).reg(); //complete stage @@ -597,9 +601,10 @@ public class SherpafyCustomization extends OsmAndAppCustomization { .icons(R.drawable.ic_action_finish_flag_dark, R.drawable.ic_action_finish_flag_light) .listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { markStageAsCompleted(stage); showCompleteStageFragment(mapActivity, stage, false); + return true; } }).reg(); } @@ -607,12 +612,13 @@ public class SherpafyCustomization extends OsmAndAppCustomization { adapter.item(R.string.context_menu_item_share_location).icons( R.drawable.ic_action_gshare_dark, R.drawable.ic_action_gshare_light).listen(new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (app.getLocationProvider().getLastKnownLocation() != null) { new ShareLocation(mapActivity).run(); } else { Toast.makeText(app, R.string.unknown_location, Toast.LENGTH_LONG).show(); } + return true; } }).reg(); } diff --git a/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java b/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java index db28d9df22..bbaf0446f5 100644 --- a/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java +++ b/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java @@ -95,11 +95,12 @@ public class SRTMPlugin extends OsmandPlugin { public void registerLayerContextMenuActions(final OsmandMapTileView mapView, ContextMenuAdapter adapter, final MapActivity mapActivity) { OnContextMenuClick listener = new OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (itemId == R.string.layer_hillshade) { HILLSHADE.set(!HILLSHADE.get()); updateLayers(mapView, mapActivity); } + return true; } }; adapter.item(R.string.layer_hillshade).selected(HILLSHADE.get()? 1 : 0) diff --git a/OsmAnd/src/net/osmand/plus/views/FavoritesLayer.java b/OsmAnd/src/net/osmand/plus/views/FavoritesLayer.java index 5044449f5a..605e2c5048 100644 --- a/OsmAnd/src/net/osmand/plus/views/FavoritesLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/FavoritesLayer.java @@ -198,7 +198,7 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer. final FavouritePoint a = (FavouritePoint) o; OnContextMenuClick listener = new ContextMenuAdapter.OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (itemId == R.string.favourites_context_menu_delete) { final Resources resources = view.getContext().getResources(); Builder builder = new AlertDialog.Builder(view.getContext()); @@ -213,6 +213,7 @@ public class FavoritesLayer extends OsmandMapLayer implements ContextMenuLayer. }); builder.create().show(); } + return true; } }; adapter.item(R.string.favourites_context_menu_delete) diff --git a/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java b/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java index c439d16acf..40e8b07b37 100644 --- a/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/POIMapLayer.java @@ -256,7 +256,7 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon final Amenity a = (Amenity) o; OnContextMenuClick listener = new ContextMenuAdapter.OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (itemId == R.string.poi_context_menu_call) { try { Intent intent = new Intent(Intent.ACTION_VIEW); @@ -278,6 +278,7 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon } else if (itemId == R.string.poi_context_menu_showdescription) { showDescriptionDialog(a); } + return true; } }; if (OsmAndFormatter.getAmenityDescriptionContent(view.getApplication(), a, false).length() > 0) { diff --git a/OsmAnd/src/net/osmand/plus/views/PointNavigationLayer.java b/OsmAnd/src/net/osmand/plus/views/PointNavigationLayer.java index b2752fa749..b766b6bfc0 100644 --- a/OsmAnd/src/net/osmand/plus/views/PointNavigationLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/PointNavigationLayer.java @@ -220,7 +220,7 @@ public class PointNavigationLayer extends OsmandMapLayer implements IContextMenu final TargetPoint a = (TargetPoint) o; OnContextMenuClick listener = new ContextMenuAdapter.OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { if (itemId == R.string.delete_target_point) { TargetPointsHelper targetPointsHelper = map.getMyApplication().getTargetPointsHelper(); if(a.intermediate) { @@ -230,6 +230,7 @@ public class PointNavigationLayer extends OsmandMapLayer implements IContextMenu } } map.getMapLayers().getContextMenuLayer().setLocation(null, ""); + return true; } }; diff --git a/OsmAnd/src/net/osmand/plus/views/TransportStopsLayer.java b/OsmAnd/src/net/osmand/plus/views/TransportStopsLayer.java index 51859ac09f..5d6165e37c 100644 --- a/OsmAnd/src/net/osmand/plus/views/TransportStopsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/TransportStopsLayer.java @@ -216,8 +216,9 @@ public class TransportStopsLayer extends OsmandMapLayer implements ContextMenuLa final TransportStop a = (TransportStop) o; OnContextMenuClick listener = new ContextMenuAdapter.OnContextMenuClick() { @Override - public void onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { + public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { showDescriptionDialog(a); + return true; } }; adapter.item(R.string.poi_context_menu_showdescription) From 7fbda80bc580a847d4150d640c03ce0691bf1c10 Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 16 Oct 2014 16:36:44 +0300 Subject: [PATCH 06/12] Removed unused code. Moved waypointsdialoghelper to mapactivityactions --- .../plus/activities/MapActivityActions.java | 6 ++- .../plus/helpers/WaypointDialogHelper.java | 42 +------------------ .../osmand/plus/views/MapControlsLayer.java | 12 ++---- 3 files changed, 8 insertions(+), 52 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 76b8f3f6d1..93b6cf3b49 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -97,12 +97,15 @@ public class MapActivityActions implements DialogProvider { DrawerLayout mDrawerLayout; ListView mDrawerList; + private WaypointDialogHelper waypointDialogHelper; public MapActivityActions(MapActivity mapActivity){ this.mapActivity = mapActivity; settings = mapActivity.getMyApplication().getSettings(); routingHelper = mapActivity.getMyApplication().getRoutingHelper(); + waypointDialogHelper = new WaypointDialogHelper(mapActivity); + waypointDialogHelper.init(); } protected void addFavouritePoint(final double latitude, final double longitude){ @@ -902,8 +905,7 @@ public class MapActivityActions implements DialogProvider { if (getMyApplication().getWaypointHelper().isRouteCalculated()) { final List deletedPoints = new ArrayList(); - ArrayAdapter adapter = app.getMapActivity().getMapLayers(). - getMapControlsLayer().getWaypointDialogHelper().getWaypointsAdapter(app.getMapActivity(), deletedPoints); + ArrayAdapter adapter = waypointDialogHelper.getWaypointsAdapter(app.getMapActivity(), deletedPoints); mDrawerList = (ListView) mapActivity.findViewById(R.id.left_drawer); mDrawerList.setAdapter(adapter); return false; diff --git a/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java b/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java index b6c410f88d..0446c1570d 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java @@ -229,10 +229,7 @@ public class WaypointDialogHelper implements OsmAndLocationListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - if (getArguments() != null && getArguments().getBoolean(FLAT_ARG)) { - return createWaypointsDialogFlat(waypointHelper.getAllPoints()); - } - return createWaypointsDialog(); + return createWaypointsDialogFlat(waypointHelper.getAllPoints()); } public AlertDialog createWaypointsDialogFlat(final List points) { @@ -288,43 +285,6 @@ public class WaypointDialogHelper implements OsmAndLocationListener { return builder.create(); } - public AlertDialog createWaypointsDialog() { - final FragmentActivity ctx = getActivity(); - final ListView listView = new ListView(ctx); - final List deletedPoints = new ArrayList(); - final ArrayAdapter listAdapter = dialogHelper.getWaypointsAdapter(ctx, deletedPoints); - - listView.setAdapter(listAdapter); - listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView adapterView, View view, int item, long l) { - if (listAdapter.getItem(item) instanceof LocationPointWrapper) { - LocationPointWrapper ps = (LocationPointWrapper) listAdapter.getItem(item); - showOnMap(app, ctx, ps.getPoint(), WaypointDialogFragment.this); - } - } - }); - AlertDialog.Builder builder = new AlertDialog.Builder(ctx); - builder.setView(listView); - builder.setNeutralButton(R.string.flat_list_waypoints, new OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - showWaypointsDialogFlat(getActivity()); - } - - }); - builder.setPositiveButton(R.string.default_buttons_ok, new OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - waypointHelper.removeVisibleLocationPoint(deletedPoints); - } - }); - builder.setNegativeButton(ctx.getString(R.string.default_buttons_cancel), null); - return builder.create(); - } - } diff --git a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java index d6f7645a0d..8d67a10bf2 100644 --- a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java @@ -65,12 +65,11 @@ public class MapControlsLayer extends OsmandMapLayer { private LinearLayout transparencyBarLayout; private static CommonPreference settingsToTransparency; private OsmandSettings settings; - private WaypointDialogHelper waypointDialogHelper; + public MapControlsLayer(MapActivity activity){ this.mapActivity = activity; settings = activity.getMyApplication().getSettings(); - waypointDialogHelper = new WaypointDialogHelper(activity); } @@ -122,8 +121,7 @@ public class MapControlsLayer extends OsmandMapLayer { mapCancelNavigationControl.setMargin(mapSmallMenuControls.getWidth()); mapInfoNavigationControl.setMargin(mapSmallMenuControls.getWidth() + mapCancelNavigationControl.getWidth()); mapAppModeControl.setMargin(mapNavigationControl.getWidth()); - - waypointDialogHelper.init(); + initTransparencyBar(view, parent); } @@ -150,7 +148,7 @@ public class MapControlsLayer extends OsmandMapLayer { @Override public void destroyLayer() { - waypointDialogHelper.removeListener(); + } @Override @@ -337,10 +335,6 @@ public class MapControlsLayer extends OsmandMapLayer { mapInfoNavigationControl.setShowDialog(); } - public WaypointDialogHelper getWaypointDialogHelper() { - return waypointDialogHelper; - } - private int getScreenOrientation() { int rotation = mapActivity.getWindowManager().getDefaultDisplay().getRotation(); DisplayMetrics dm = new DisplayMetrics(); From b7670d168d3e1e97310561ed5fb29f2d413c2ac4 Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 16 Oct 2014 17:09:27 +0300 Subject: [PATCH 07/12] Refactoring map settings --- OsmAnd/AndroidManifest.xml | 2 +- .../plus/activities/MapActivityActions.java | 4 +- ....java => ConfigureSettingsMenuHelper.java} | 105 ++++++------------ 3 files changed, 38 insertions(+), 73 deletions(-) rename OsmAnd/src/net/osmand/plus/configuremap/{ConfigureScreenSettingsActivity.java => ConfigureSettingsMenuHelper.java} (80%) diff --git a/OsmAnd/AndroidManifest.xml b/OsmAnd/AndroidManifest.xml index 235b08f9eb..e8e6b36d20 100644 --- a/OsmAnd/AndroidManifest.xml +++ b/OsmAnd/AndroidManifest.xml @@ -130,7 +130,7 @@ - + diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 93b6cf3b49..231b64a469 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -47,7 +47,7 @@ import net.osmand.plus.activities.actions.ShareLocation; import net.osmand.plus.activities.actions.StartGPSStatus; import net.osmand.plus.activities.search.SearchActivity; import net.osmand.plus.base.FavoriteImageDrawable; -import net.osmand.plus.configuremap.ConfigureScreenSettingsActivity; +import net.osmand.plus.configuremap.ConfigureSettingsMenuHelper; import net.osmand.plus.development.OsmandDevelopmentPlugin; import net.osmand.plus.helpers.WaypointDialogHelper; import net.osmand.plus.osmo.OsMoPositionLayer; @@ -922,7 +922,7 @@ public class MapActivityActions implements DialogProvider { .listen(new OnContextMenuClick() { @Override public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { - mapActivity.startActivity(new Intent(mapActivity, ConfigureScreenSettingsActivity.class)); + mapActivity.startActivity(new Intent(mapActivity, ConfigureSettingsMenuHelper.class)); return true; //mapActivity.getMapLayers().openLayerSelectionDialog(mapView); } diff --git a/OsmAnd/src/net/osmand/plus/configuremap/ConfigureScreenSettingsActivity.java b/OsmAnd/src/net/osmand/plus/configuremap/ConfigureSettingsMenuHelper.java similarity index 80% rename from OsmAnd/src/net/osmand/plus/configuremap/ConfigureScreenSettingsActivity.java rename to OsmAnd/src/net/osmand/plus/configuremap/ConfigureSettingsMenuHelper.java index 2e088d56a8..992046e8ec 100644 --- a/OsmAnd/src/net/osmand/plus/configuremap/ConfigureScreenSettingsActivity.java +++ b/OsmAnd/src/net/osmand/plus/configuremap/ConfigureSettingsMenuHelper.java @@ -1,12 +1,10 @@ package net.osmand.plus.configuremap; -import android.app.ActionBar; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Build; -import android.os.Bundle; import android.preference.*; import android.view.KeyEvent; import android.widget.ArrayAdapter; @@ -31,66 +29,42 @@ import java.util.List; /** * Created by Denis on 14.10.2014. */ -public class ConfigureScreenSettingsActivity extends SettingsBaseActivity { +public class ConfigureSettingsMenuHelper{ - private ApplicationMode previousMode; + public static final int HEADER = 0; + public static final int LAYER = 1; + public static final int MAP_REDNDER = 2; + public static final int RENDERING_ATTR = 3; - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + private OsmandApplication app; - for (ApplicationMode a : ApplicationMode.values(settings)) { - modes.add(a); + public class ConfigureMapMenuItem{ + int type; + int darkIcon = -1; + int whiteIcon = -1; + Object preference; + + ConfigureMapMenuItem(int type, int darkIcon, int whiteIcon, Object preference){ + this.type = type; + this.darkIcon = darkIcon; + this.whiteIcon = whiteIcon; + this.preference = preference; } - getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); - List s = new ArrayList(); - for (ApplicationMode a : modes) { - s.add(a.toHumanString(getMyApplication())); - } - - ArrayAdapter spinnerAdapter = new ArrayAdapter(getSupportActionBar().getThemedContext(), - R.layout.sherlock_spinner_item, s); - spinnerAdapter.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item); - getSupportActionBar().setListNavigationCallbacks(spinnerAdapter, new com.actionbarsherlock.app.ActionBar.OnNavigationListener() { - - @Override - public boolean onNavigationItemSelected(int itemPosition, long itemId) { - settings.APPLICATION_MODE.set(modes.get(itemPosition)); - createAllCategories(); - return true; - } - }); } - @Override - protected void onResume() { - super.onResume(); - previousMode = settings.getApplicationMode(); - boolean found = setSelectedAppMode(previousMode); - if (!found) { - getSupportActionBar().setSelectedNavigationItem(0); - } - createAllCategories(); + public ConfigureSettingsMenuHelper(OsmandApplication app){ + this.app = app; } - - @Override - protected void onPause() { - super.onPause(); - settings.APPLICATION_MODE.set(previousMode); - } - - private void createAllCategories() { - getPreferenceScreen().removeAll(); - createLayersPreferences(); + private ArrayAdapter createAllCategories() { + List items = new ArrayList(); + createLayersItems(items); createRenderingAttributePreferences(); - } private void createRenderingAttributePreferences() { PreferenceCategory renderingCategory = new PreferenceCategory(this); - renderingCategory.setTitle(R.string.map_widget_map_rendering); - PreferenceScreen grp = getPreferenceScreen(); + grp.addPreference(renderingCategory); Preference p = new Preference(this); p.setTitle(R.string.map_widget_renderer); @@ -99,11 +73,11 @@ public class ConfigureScreenSettingsActivity extends SettingsBaseActivity { public boolean onPreferenceClick(Preference preference) { AlertDialog.Builder bld = new AlertDialog.Builder(getActivity()); bld.setTitle(R.string.renderers); - Collection rendererNames = getMyApplication().getRendererRegistry().getRendererNames(); + Collection rendererNames = app.getRendererRegistry().getRendererNames(); final String[] items = rendererNames.toArray(new String[rendererNames.size()]); final String[] visibleNames = new String[items.length]; int selected = -1; - final String selectedName = getMyApplication().getRendererRegistry().getCurrentSelectedRenderer().getName(); + final String selectedName = app.getRendererRegistry().getCurrentSelectedRenderer().getName(); for (int j = 0; j < items.length; j++) { if (items[j].equals(selectedName)) { selected = j; @@ -116,13 +90,13 @@ public class ConfigureScreenSettingsActivity extends SettingsBaseActivity { @Override public void onClick(DialogInterface dialog, int which) { String renderer = items[which]; - RenderingRulesStorage loaded = getMyApplication().getRendererRegistry().getRenderer(renderer); + RenderingRulesStorage loaded = app.getRendererRegistry().getRenderer(renderer); if (loaded != null) { - getMyApplication().getSettings().RENDERER.set(renderer); - getMyApplication().getRendererRegistry().setCurrentSelectedRender(loaded); - getMyApplication().getResourceManager().getRenderer().clearCache(); + app.getSettings().RENDERER.set(renderer); + app.getRendererRegistry().setCurrentSelectedRender(loaded); + app.getResourceManager().getRenderer().clearCache(); } else { - AccessibleToast.makeText(getMyApplication(), R.string.renderer_load_exception, Toast.LENGTH_SHORT).show(); + AccessibleToast.makeText(app, R.string.renderer_load_exception, Toast.LENGTH_SHORT).show(); } dialog.dismiss(); createAllCategories(); @@ -132,7 +106,6 @@ public class ConfigureScreenSettingsActivity extends SettingsBaseActivity { return true; } }); - grp.addPreference(p); p = new Preference(this); p.setTitle(R.string.map_widget_day_night); @@ -168,23 +141,17 @@ public class ConfigureScreenSettingsActivity extends SettingsBaseActivity { private void createMapRenderingPreferences() { - PreferenceCategory renderingCategory = new PreferenceCategory(this); - renderingCategory.setTitle(R.string.map_widget_vector_attributes); - PreferenceScreen grp = getPreferenceScreen(); - grp.addPreference(renderingCategory); - RenderingRulesStorage renderer = getMyApplication().getRendererRegistry().getCurrentSelectedRenderer(); - final OsmandApplication app = getMyApplication(); + RenderingRulesStorage renderer = app.getRendererRegistry().getCurrentSelectedRenderer(); List customRules = renderer.PROPS.getCustomRules(); for (final RenderingRuleProperty p : customRules) { String propertyName = SettingsActivity.getStringPropertyName(getActivity(), p.getAttrName(), p.getName()); //test old descr as title final String propertyDescr = SettingsActivity.getStringPropertyDescription(getActivity(), p.getAttrName(), p.getName()); if(p.isBoolean()) { - final OsmandSettings.CommonPreference pref = getMyApplication().getSettings().getCustomRenderBooleanProperty(p.getAttrName()); - CheckBoxPreference preference = createCheckBoxPreference(pref); + final OsmandSettings.CommonPreference pref = app.getSettings().getCustomRenderBooleanProperty(p.getAttrName()); preference.setTitle(propertyName); - renderingCategory.addPreference(preference); + preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { @@ -232,10 +199,8 @@ public class ConfigureScreenSettingsActivity extends SettingsBaseActivity { } - private void createLayersPreferences() { - PreferenceCategory mapLayersCategory = new PreferenceCategory(this); - mapLayersCategory.setTitle(R.string.menu_layers); - PreferenceScreen grp = getPreferenceScreen(); + private void createLayersItems(List items) { + items.add(new ConfigureMapMenuItem(HEADER,-1,-1,R.string.show)); grp.addPreference(mapLayersCategory); final CheckBoxPreference poi = new CheckBoxPreference(this); poi.setTitle(R.string.layer_poi); From 8554edd9ac61a447db206adfc9de3cb67712ea5e Mon Sep 17 00:00:00 2001 From: Denis Date: Fri, 17 Oct 2014 14:51:05 +0300 Subject: [PATCH 08/12] Updated configure settings screen --- OsmAnd/res/layout/map_settings_item.xml | 43 ++ OsmAnd/res/values/strings.xml | 1 + .../osmand/plus/activities/MapActivity.java | 6 +- .../plus/activities/MapActivityActions.java | 7 +- .../ConfigureSettingsMenuHelper.java | 544 ++++++++++-------- 5 files changed, 363 insertions(+), 238 deletions(-) create mode 100644 OsmAnd/res/layout/map_settings_item.xml diff --git a/OsmAnd/res/layout/map_settings_item.xml b/OsmAnd/res/layout/map_settings_item.xml new file mode 100644 index 0000000000..ee3ac30056 --- /dev/null +++ b/OsmAnd/res/layout/map_settings_item.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index abca04b331..d760bc77ff 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,7 @@ 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> + Configure map Search radius Device not found OsMo service is not available:\n- check the connection;\n- check the settings;\n- check out our Twitter: https://twitter.com/OsMomobi diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index 6b03f75220..71abb48240 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -124,11 +124,11 @@ public class MapActivity extends AccessibleActivity { settings = app.getSettings(); app.applyTheme(this); super.onCreate(savedInstanceState); - - + requestWindowFeature(Window.FEATURE_NO_TITLE); + + mapActions = new MapActivityActions(this); mapLayers = new MapActivityLayers(this); - requestWindowFeature(Window.FEATURE_NO_TITLE); // Full screen is not used here //getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 231b64a469..053329b4fe 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -98,6 +98,7 @@ public class MapActivityActions implements DialogProvider { DrawerLayout mDrawerLayout; ListView mDrawerList; private WaypointDialogHelper waypointDialogHelper; + private ConfigureSettingsMenuHelper configureSettingsMenuHelper; public MapActivityActions(MapActivity mapActivity){ @@ -105,6 +106,7 @@ public class MapActivityActions implements DialogProvider { settings = mapActivity.getMyApplication().getSettings(); routingHelper = mapActivity.getMyApplication().getRoutingHelper(); waypointDialogHelper = new WaypointDialogHelper(mapActivity); + configureSettingsMenuHelper = new ConfigureSettingsMenuHelper(mapActivity.getMyApplication()); waypointDialogHelper.init(); } @@ -906,7 +908,6 @@ public class MapActivityActions implements DialogProvider { final List deletedPoints = new ArrayList(); ArrayAdapter adapter = waypointDialogHelper.getWaypointsAdapter(app.getMapActivity(), deletedPoints); - mDrawerList = (ListView) mapActivity.findViewById(R.id.left_drawer); mDrawerList.setAdapter(adapter); return false; } else { @@ -922,8 +923,8 @@ public class MapActivityActions implements DialogProvider { .listen(new OnContextMenuClick() { @Override public boolean onContextMenuClick(int itemId, int pos, boolean isChecked, DialogInterface dialog) { - mapActivity.startActivity(new Intent(mapActivity, ConfigureSettingsMenuHelper.class)); - return true; + configureSettingsMenuHelper.setListView(mDrawerList); + return false; //mapActivity.getMapLayers().openLayerSelectionDialog(mapView); } }).reg(); diff --git a/OsmAnd/src/net/osmand/plus/configuremap/ConfigureSettingsMenuHelper.java b/OsmAnd/src/net/osmand/plus/configuremap/ConfigureSettingsMenuHelper.java index 992046e8ec..9afab4d621 100644 --- a/OsmAnd/src/net/osmand/plus/configuremap/ConfigureSettingsMenuHelper.java +++ b/OsmAnd/src/net/osmand/plus/configuremap/ConfigureSettingsMenuHelper.java @@ -1,15 +1,16 @@ package net.osmand.plus.configuremap; -import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; +import android.graphics.Typeface; import android.os.Build; import android.preference.*; +import android.util.TypedValue; import android.view.KeyEvent; -import android.widget.ArrayAdapter; -import android.widget.ListAdapter; -import android.widget.Toast; +import android.view.View; +import android.view.ViewGroup; +import android.widget.*; import net.osmand.CallbackWithObject; import net.osmand.access.AccessibleToast; import net.osmand.data.AmenityType; @@ -18,9 +19,11 @@ import net.osmand.plus.activities.*; import net.osmand.plus.helpers.GpxUiHelper; import net.osmand.plus.render.RenderingIcons; import net.osmand.plus.views.mapwidgets.AppearanceWidgetsFactory; +import net.osmand.plus.views.mapwidgets.MapWidgetRegistry; import net.osmand.render.RenderingRuleProperty; import net.osmand.render.RenderingRulesStorage; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -29,255 +32,336 @@ import java.util.List; /** * Created by Denis on 14.10.2014. */ -public class ConfigureSettingsMenuHelper{ +public class ConfigureSettingsMenuHelper { - public static final int HEADER = 0; - public static final int LAYER = 1; - public static final int MAP_REDNDER = 2; - public static final int RENDERING_ATTR = 3; + public static final int BACK_HEADER = 0; + public static final int HEADER = 1; + public static final int LAYER = 2; + public static final int MAP_REDNDER = 3; + public static final int RENDERING_PROPERTY = 4; + + private ListView listView; private OsmandApplication app; - public class ConfigureMapMenuItem{ + public class ConfigureMapMenuItem { + int nameId; int type; int darkIcon = -1; - int whiteIcon = -1; + int lightIcon = -1; Object preference; - ConfigureMapMenuItem(int type, int darkIcon, int whiteIcon, Object preference){ + + ConfigureMapMenuItem(int type, int name, int darkIcon, int whiteIcon, Object preference) { this.type = type; + this.nameId = name; this.darkIcon = darkIcon; - this.whiteIcon = whiteIcon; + this.lightIcon = whiteIcon; this.preference = preference; } } - public ConfigureSettingsMenuHelper(OsmandApplication app){ + public ConfigureSettingsMenuHelper(OsmandApplication app) { this.app = app; } - private ArrayAdapter createAllCategories() { + public void setListView(ListView listView){ + this.listView = listView; + listView.setAdapter(createSettingsAdapter()); + } + + + private ArrayAdapter createSettingsAdapter() { List items = new ArrayList(); + items.add(new ConfigureMapMenuItem(BACK_HEADER, R.string.configure_map, R.drawable.ic_action_undo_dark, R.drawable.ic_action_undo_light, null)); createLayersItems(items); - createRenderingAttributePreferences(); - } - - private void createRenderingAttributePreferences() { - PreferenceCategory renderingCategory = new PreferenceCategory(this); - - grp.addPreference(renderingCategory); - Preference p = new Preference(this); - p.setTitle(R.string.map_widget_renderer); - p.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + createRenderingAttributeItems(items); + return new ArrayAdapter(app, R.layout.map_settings_item, items) { @Override - public boolean onPreferenceClick(Preference preference) { - AlertDialog.Builder bld = new AlertDialog.Builder(getActivity()); - bld.setTitle(R.string.renderers); - Collection rendererNames = app.getRendererRegistry().getRendererNames(); - final String[] items = rendererNames.toArray(new String[rendererNames.size()]); - final String[] visibleNames = new String[items.length]; - int selected = -1; - final String selectedName = app.getRendererRegistry().getCurrentSelectedRenderer().getName(); - for (int j = 0; j < items.length; j++) { - if (items[j].equals(selectedName)) { - selected = j; - } - visibleNames[j] = items[j].replace('_', ' ').replace( - '-', ' '); + public View getView(int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = app.getMapActivity().getLayoutInflater().inflate(R.layout.map_settings_item, null); } - bld.setSingleChoiceItems(visibleNames, selected, new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - String renderer = items[which]; - RenderingRulesStorage loaded = app.getRendererRegistry().getRenderer(renderer); - if (loaded != null) { - app.getSettings().RENDERER.set(renderer); - app.getRendererRegistry().setCurrentSelectedRender(loaded); - app.getResourceManager().getRenderer().clearCache(); - } else { - AccessibleToast.makeText(app, R.string.renderer_load_exception, Toast.LENGTH_SHORT).show(); - } - dialog.dismiss(); - createAllCategories(); - } - }); - bld.show(); - return true; - } - }); - - p = new Preference(this); - p.setTitle(R.string.map_widget_day_night); - p.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - AlertDialog.Builder bld = new AlertDialog.Builder(getActivity()); - bld.setTitle(R.string.daynight); - final String[] items = new String[OsmandSettings.DayNightMode.values().length]; - for (int i = 0; i < items.length; i++) { - items[i] = OsmandSettings.DayNightMode.values()[i].toHumanString(getMyApplication()); - } - int i = getMyApplication().getSettings().DAYNIGHT_MODE.get().ordinal(); - bld.setSingleChoiceItems(items, i, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - getMyApplication().getSettings().DAYNIGHT_MODE.set(OsmandSettings.DayNightMode.values()[which]); - getMyApplication().getResourceManager().getRenderer().clearCache(); - dialog.dismiss(); - } - }); - bld.show(); - return true; - } - }); - grp.addPreference(p); - - RenderingRulesStorage renderer = getMyApplication().getRendererRegistry().getCurrentSelectedRenderer(); - if(renderer != null && AppearanceWidgetsFactory.EXTRA_SETTINGS) { - createMapRenderingPreferences(); - } - } - - - private void createMapRenderingPreferences() { - - RenderingRulesStorage renderer = app.getRendererRegistry().getCurrentSelectedRenderer(); - List customRules = renderer.PROPS.getCustomRules(); - for (final RenderingRuleProperty p : customRules) { - String propertyName = SettingsActivity.getStringPropertyName(getActivity(), p.getAttrName(), p.getName()); - //test old descr as title - final String propertyDescr = SettingsActivity.getStringPropertyDescription(getActivity(), p.getAttrName(), p.getName()); - if(p.isBoolean()) { - final OsmandSettings.CommonPreference pref = app.getSettings().getCustomRenderBooleanProperty(p.getAttrName()); - preference.setTitle(propertyName); - - preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - pref.set(!pref.get()); - app.getResourceManager().getRenderer().clearCache(); - return true; - } - }); - - } else { - final OsmandSettings.CommonPreference pref = getMyApplication().getSettings().getCustomRenderProperty(p.getAttrName()); - Preference preference = new Preference(getActivity()); - preference.setTitle(propertyName); - renderingCategory.addPreference(preference); - preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - AlertDialog.Builder b = new AlertDialog.Builder(getActivity()); - //test old descr as title - b.setTitle(propertyDescr); - - int i = Arrays.asList(p.getPossibleValues()).indexOf(pref.get()); - - String[] possibleValuesString = new String[p.getPossibleValues().length]; - - for (int j = 0; j < p.getPossibleValues().length; j++) { - possibleValuesString[j] = SettingsActivity.getStringPropertyValue(getApplication(), p.getPossibleValues()[j]); - } - - b.setSingleChoiceItems(possibleValuesString, i, new DialogInterface.OnClickListener() { + ConfigureMapMenuItem item = getItem(position); + prepareView(convertView, item); + if (item.type == BACK_HEADER){ + ((TextView) convertView.findViewById(R.id.name)).setText(item.nameId); + ImageButton button = (ImageButton) convertView.findViewById(R.id.back); + button.setImageResource(getIcon(item)); + } else if (item.type == HEADER) { + ((TextView) convertView.findViewById(R.id.name)).setText((String) item.preference); + } else if (item.type == LAYER) { + ((TextView) convertView.findViewById(R.id.name)).setText(item.nameId); + setLayersCheckBox(item, (CheckBox) convertView.findViewById(R.id.check)); + } else if (item.type == MAP_REDNDER) { + ((TextView) convertView.findViewById(R.id.name)).setText(item.nameId); + if (item.nameId == R.string.map_widget_renderer) { + convertView.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(DialogInterface dialog, int which) { - pref.set(p.getPossibleValues()[which]); - app.getResourceManager().getRenderer().clearCache(); - dialog.dismiss(); + public void onClick(View view) { + AlertDialog.Builder bld = new AlertDialog.Builder(app.getMapActivity()); + bld.setTitle(R.string.renderers); + Collection rendererNames = app.getRendererRegistry().getRendererNames(); + final String[] items = rendererNames.toArray(new String[rendererNames.size()]); + final String[] visibleNames = new String[items.length]; + int selected = -1; + final String selectedName = app.getRendererRegistry().getCurrentSelectedRenderer().getName(); + for (int j = 0; j < items.length; j++) { + if (items[j].equals(selectedName)) { + selected = j; + } + visibleNames[j] = items[j].replace('_', ' ').replace( + '-', ' '); + } + bld.setSingleChoiceItems(visibleNames, selected, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + String renderer = items[which]; + RenderingRulesStorage loaded = app.getRendererRegistry().getRenderer(renderer); + if (loaded != null) { + app.getSettings().RENDERER.set(renderer); + app.getRendererRegistry().setCurrentSelectedRender(loaded); + app.getResourceManager().getRenderer().clearCache(); + } else { + AccessibleToast.makeText(app, R.string.renderer_load_exception, Toast.LENGTH_SHORT).show(); + } + dialog.dismiss(); + createSettingsAdapter(); + } + }); + bld.show(); + } + }); + } else if (item.nameId == R.string.map_widget_day_night) { + convertView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + AlertDialog.Builder bld = new AlertDialog.Builder(app.getMapActivity()); + bld.setTitle(R.string.daynight); + final String[] items = new String[OsmandSettings.DayNightMode.values().length]; + for (int i = 0; i < items.length; i++) { + items[i] = OsmandSettings.DayNightMode.values()[i].toHumanString(app); + } + int i = app.getSettings().DAYNIGHT_MODE.get().ordinal(); + bld.setSingleChoiceItems(items, i, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + app.getSettings().DAYNIGHT_MODE.set(OsmandSettings.DayNightMode.values()[which]); + app.getResourceManager().getRenderer().clearCache(); + dialog.dismiss(); + } + }); + bld.show(); } }); - b.show(); - return true; } - }); + } else if (item.type == RENDERING_PROPERTY) { + convertView.findViewById(R.id.icon).setVisibility(View.GONE); + final RenderingRuleProperty p = (RenderingRuleProperty) item.preference; + String propertyName = SettingsActivity.getStringPropertyName(app, p.getAttrName(), p.getName()); + TextView header = (TextView) convertView.findViewById(R.id.name); + header.setText(propertyName); + header.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16); + convertView.findViewById(R.id.icon).setVisibility(View.GONE); + final String propertyDescription = SettingsActivity.getStringPropertyDescription(app, p.getAttrName(), p.getName()); + if (p.isBoolean()) { + final OsmandSettings.CommonPreference pref = app.getSettings().getCustomRenderBooleanProperty(p.getAttrName()); + CheckBox ch = (CheckBox) convertView.findViewById(R.id.check); + ch.setChecked(pref.get()); + ch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + pref.set(!pref.get()); + app.getResourceManager().getRenderer().clearCache(); + //view.refreshMap(true); + } + }); + } else { + final OsmandSettings.CommonPreference pref = app.getSettings().getCustomRenderProperty(p.getAttrName()); + convertView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + AlertDialog.Builder b = new AlertDialog.Builder(app.getMapActivity()); + //test old descr as title + b.setTitle(propertyDescription); + int i = Arrays.asList(p.getPossibleValues()).indexOf(pref.get()); + + String[] possibleValuesString = new String[p.getPossibleValues().length]; + + for (int j = 0; j < p.getPossibleValues().length; j++) { + possibleValuesString[j] = SettingsActivity.getStringPropertyValue(app, p.getPossibleValues()[j]); + } + + b.setSingleChoiceItems(possibleValuesString, i, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + pref.set(p.getPossibleValues()[which]); + app.getResourceManager().getRenderer().clearCache(); + //view.refreshMap(true); + dialog.dismiss(); + } + }); + b.show(); + } + }); + } + } + return convertView; } - } - } + //Hiding and showing items based on current item + //setting proper visual property + private void prepareView(View convertView, ConfigureMapMenuItem item) { + int type = item.type; + //setting name textview + if (type == BACK_HEADER) { + TextView header = (TextView) convertView.findViewById(R.id.name); + header.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22); + header.setTypeface(Typeface.DEFAULT_BOLD); + } else if (type == HEADER) { + TextView header = (TextView) convertView.findViewById(R.id.name); + header.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20); + header.setTypeface(Typeface.DEFAULT_BOLD); + } else { + ((TextView) convertView.findViewById(R.id.name)).setTextSize(TypedValue.COMPLEX_UNIT_SP, 16); + } + + //setting backbutton + if (type == BACK_HEADER) { + convertView.findViewById(R.id.back).setVisibility(View.VISIBLE); + } else { + convertView.findViewById(R.id.back).setVisibility(View.GONE); + } + + //other elements + if (type == BACK_HEADER) { + convertView.findViewById(R.id.check).setVisibility(View.GONE); + convertView.findViewById(R.id.descr).setVisibility(View.GONE); + convertView.findViewById(R.id.icon).setVisibility(View.GONE); + } else if (type == HEADER) { + convertView.findViewById(R.id.icon).setVisibility(View.GONE); + convertView.findViewById(R.id.check).setVisibility(View.GONE); + convertView.findViewById(R.id.descr).setVisibility(View.GONE); + } else if (type == LAYER) { + ((ImageView) convertView.findViewById(R.id.icon)).setImageResource(getIcon(item)); + convertView.findViewById(R.id.icon).setVisibility(View.VISIBLE); + } else if (type == MAP_REDNDER) { + convertView.findViewById(R.id.icon).setVisibility(View.GONE); + convertView.findViewById(R.id.check).setVisibility(View.GONE); + } else if (type == RENDERING_PROPERTY) { + final RenderingRuleProperty p = (RenderingRuleProperty) item.preference; + if (p.isBoolean()) { + convertView.findViewById(R.id.check).setVisibility(View.VISIBLE); + } else { + convertView.findViewById(R.id.check).setVisibility(View.GONE); + } + + } + } + + private int getIcon(ConfigureMapMenuItem item) { + if (app.getSettings().isLightContent()) { + return item.lightIcon; + } else { + return item.darkIcon; + } + } + + private void setLayersCheckBox(ConfigureMapMenuItem item, CheckBox check) { + check.setVisibility(View.VISIBLE); + if (item.nameId == R.string.layer_poi) { + final OsmandSettings.OsmandPreference pref = (OsmandSettings.OsmandPreference) item.preference; + check.setChecked(pref.get()); + check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if (b) { + selectPOIFilterLayer(null); + } else { + pref.set(b); + } + } + }); + } else if (item.nameId == R.string.layer_gpx_layer) { + check.setChecked(app.getSelectedGpxHelper().isShowingAnyGpxFiles()); + check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if (b) { + showGPXFileDialog(null); + } + } + }); + } else if (item.nameId == R.string.layer_transport && TransportRouteHelper.getInstance().routeIsCalculated()) { + check.setChecked(true); + } else { + final OsmandSettings.OsmandPreference pref = (OsmandSettings.OsmandPreference) item.preference; + check.setChecked(pref.get()); + check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + pref.set(b); + } + }); + } + } + + + }; + } private void createLayersItems(List items) { - items.add(new ConfigureMapMenuItem(HEADER,-1,-1,R.string.show)); - grp.addPreference(mapLayersCategory); - final CheckBoxPreference poi = new CheckBoxPreference(this); - poi.setTitle(R.string.layer_poi); - poi.setChecked(settings.SHOW_POI_OVER_MAP.get()); - addIcon(poi, R.drawable.ic_action_info_light, R.drawable.ic_action_info_dark); - poi.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - settings.SHOW_POI_OVER_MAP.set(!settings.SHOW_POI_OVER_MAP.get()); - if (settings.SHOW_POI_OVER_MAP.get()) { - selectPOIFilterLayer(null); - } else { - poi.setSummary(""); - } - return true; - } - }); - if (settings.SHOW_POI_OVER_MAP.get()) { - poi.setSummary(settings.getPoiFilterForMap()); - } - mapLayersCategory.addPreference(poi); - CheckBoxPreference p = createCheckBoxPreference(settings.SHOW_POI_LABEL, R.string.layer_amenity_label, - R.drawable.ic_action_text_dark, R.drawable.ic_action_text_light); - mapLayersCategory.addPreference(p); - - p = createCheckBoxPreference(settings.SHOW_FAVORITES, R.string.layer_favorites, - R.drawable.ic_action_fav_dark, R.drawable.ic_action_fav_light); - mapLayersCategory.addPreference(p); - final CheckBoxPreference gpx = new CheckBoxPreference(this); - gpx.setTitle(R.string.layer_gpx_layer); - addIcon(gpx, R.drawable.ic_action_polygom_light, R.drawable.ic_action_polygom_dark); - gpx.setChecked(getMyApplication().getSelectedGpxHelper().isShowingAnyGpxFiles()); - gpx.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - if (gpx.isChecked()){ - showGPXFileDialog(getAlreadySelectedGpx()); - } - return true; - } - }); - - mapLayersCategory.addPreference(gpx); - p = createCheckBoxPreference(settings.SHOW_TRANSPORT_OVER_MAP, R.string.layer_transport, - R.drawable.ic_action_bus_dark, R.drawable.ic_action_bus_light); - mapLayersCategory.addPreference(p); + items.add(new ConfigureMapMenuItem(HEADER, -1, -1, -1, "Show:")); + items.add(new ConfigureMapMenuItem(LAYER, R.string.layer_poi, R.drawable.ic_action_info_dark, + R.drawable.ic_action_info_light, app.getSettings().SHOW_POI_OVER_MAP)); + items.add(new ConfigureMapMenuItem(LAYER, R.string.layer_amenity_label, R.drawable.ic_action_text_dark, + R.drawable.ic_action_text_light, app.getSettings().SHOW_POI_LABEL)); + items.add(new ConfigureMapMenuItem(LAYER, R.string.layer_favorites, R.drawable.ic_action_fav_dark, + R.drawable.ic_action_fav_light, app.getSettings().SHOW_FAVORITES)); + items.add(new ConfigureMapMenuItem(LAYER, R.string.layer_gpx_layer, R.drawable.ic_action_polygom_dark, + R.drawable.ic_action_polygom_light, null)); + items.add(new ConfigureMapMenuItem(LAYER, R.string.layer_transport, R.drawable.ic_action_bus_dark, + R.drawable.ic_action_bus_light, app.getSettings().SHOW_TRANSPORT_OVER_MAP)); if (TransportRouteHelper.getInstance().routeIsCalculated()) { - p = new CheckBoxPreference(this); - p.setChecked(true); - addIcon(p, R.drawable.ic_action_bus_light, R.drawable.ic_action_bus_dark); - mapLayersCategory.addPreference(p); + items.add(new ConfigureMapMenuItem(R.string.layer_transport, LAYER, + R.drawable.ic_action_bus_dark, R.drawable.ic_action_bus_light, 1)); } } - public void addIcon(CheckBoxPreference p, int lightIcon, int darkIcon) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { - if (getMyApplication().getSettings().isLightContent()) { - p.setIcon(lightIcon); - } else { - p.setIcon(darkIcon); - } + private void createRenderingAttributeItems(List items) { + items.add(new ConfigureMapMenuItem(HEADER, -1, -1, -1, app.getString(R.string.map_widget_map_rendering))); + items.add(new ConfigureMapMenuItem(MAP_REDNDER, R.string.map_widget_renderer, -1, -1, null)); + items.add(new ConfigureMapMenuItem(MAP_REDNDER, R.string.map_widget_day_night, -1, -1, null)); + + RenderingRulesStorage renderer = app.getRendererRegistry().getCurrentSelectedRenderer(); + if (renderer != null && AppearanceWidgetsFactory.EXTRA_SETTINGS) { + createMapRenderingPreferences(items); + } + } + + private void createMapRenderingPreferences(List items) { + items.add(new ConfigureMapMenuItem(HEADER, -1, -1, -1, app.getString(R.string.map_widget_vector_attributes))); + RenderingRulesStorage renderer = app.getRendererRegistry().getCurrentSelectedRenderer(); + List customRules = renderer.PROPS.getCustomRules(); + for (RenderingRuleProperty p : customRules) { + items.add(new ConfigureMapMenuItem(RENDERING_PROPERTY, -1, -1, -1, p)); } } public AlertDialog selectPOIFilterLayer(final PoiFilter[] selected) { final List userDefined = new ArrayList(); - OsmandApplication app = (OsmandApplication) getApplication(); final PoiFiltersHelper poiFilters = app.getPoiFilters(); - final ContextMenuAdapter adapter = new ContextMenuAdapter(this); + final ContextMenuAdapter adapter = new ContextMenuAdapter(app.getMapActivity()); - ContextMenuAdapter.Item is = adapter.item(getString(R.string.any_poi)); + ContextMenuAdapter.Item is = adapter.item(app.getString(R.string.any_poi)); if (RenderingIcons.containsBigIcon("null")) { is.icon(RenderingIcons.getBigIconResourceId("null")); } is.reg(); // 2nd custom - adapter.item(getString(R.string.poi_filter_custom_filter)).icon(RenderingIcons.getBigIconResourceId("user_defined")).reg(); + adapter.item(app.getString(R.string.poi_filter_custom_filter)).icon(RenderingIcons.getBigIconResourceId("user_defined")).reg(); for (PoiFilter f : poiFilters.getUserDefinedPoiFilters()) { ContextMenuAdapter.Item it = adapter.item(f.getName()); @@ -291,20 +375,20 @@ public class ConfigureSettingsMenuHelper{ } final AmenityType[] categories = AmenityType.getCategories(); for (AmenityType t : categories) { - ContextMenuAdapter.Item it = adapter.item(OsmAndFormatter.toPublicString(t, getMyApplication())); + ContextMenuAdapter.Item it = adapter.item(OsmAndFormatter.toPublicString(t, app)); if (RenderingIcons.containsBigIcon(t.toString().toLowerCase())) { it.icon(RenderingIcons.getBigIconResourceId(t.toString().toLowerCase())); } it.reg(); } - final AlertDialog.Builder builder = new AlertDialog.Builder(this); + final AlertDialog.Builder builder = new AlertDialog.Builder(app.getMapActivity()); ListAdapter listAdapter; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { listAdapter = - adapter.createListAdapter(this, R.layout.list_menu_item, app.getSettings().isLightContentMenu()); + adapter.createListAdapter(app.getMapActivity(), R.layout.list_menu_item, app.getSettings().isLightContentMenu()); } else { listAdapter = - adapter.createListAdapter(this, R.layout.list_menu_item_native, app.getSettings().isLightContentMenu()); + adapter.createListAdapter(app.getMapActivity(), R.layout.list_menu_item_native, app.getSettings().isLightContentMenu()); } builder.setAdapter(listAdapter, new DialogInterface.OnClickListener() { @@ -312,12 +396,12 @@ public class ConfigureSettingsMenuHelper{ public void onClick(DialogInterface dialog, int which) { if (which == 1) { String filterId = PoiFilter.CUSTOM_FILTER_ID; - getMyApplication().getSettings().setPoiFilterForMap(filterId); - Intent newIntent = new Intent(getApplication(), EditPOIFilterActivity.class); + app.getSettings().setPoiFilterForMap(filterId); + Intent newIntent = new Intent(app, EditPOIFilterActivity.class); newIntent.putExtra(EditPOIFilterActivity.AMENITY_FILTER, filterId); //newIntent.putExtra(EditPOIFilterActivity.SEARCH_LAT, getMyApplication().getMapActivity().getMapView().getLatitude()); //newIntent.putExtra(EditPOIFilterActivity.SEARCH_LON, getMyApplication().getMapActivity().getMapView().getLongitude()); - getActivity().startActivity(newIntent); + app.getMapActivity().startActivity(newIntent); } else { String filterId; if (which == 0) { @@ -327,7 +411,7 @@ public class ConfigureSettingsMenuHelper{ } else { filterId = PoiFiltersHelper.getOsmDefinedFilterId(categories[which - userDefined.size() - 2]); } - getMyApplication().getSettings().setPoiFilterForMap(filterId); + app.getSettings().setPoiFilterForMap(filterId); PoiFilter f = poiFilters.getFilterById(filterId); if (f != null) { f.clearNameFilter(); @@ -335,7 +419,7 @@ public class ConfigureSettingsMenuHelper{ if (selected != null && selected.length > 0) { selected[0] = f; } - createAllCategories(); + createSettingsAdapter(); } } @@ -347,8 +431,8 @@ public class ConfigureSettingsMenuHelper{ event.getAction() == KeyEvent.ACTION_UP && !event.isCanceled()) { dialogInterface.cancel(); - settings.SHOW_POI_OVER_MAP.set(false); - createAllCategories(); + app.getSettings().SHOW_POI_OVER_MAP.set(false); + createSettingsAdapter(); return true; } return false; @@ -357,10 +441,6 @@ public class ConfigureSettingsMenuHelper{ return builder.show(); } - private Activity getActivity() { - return this; - } - public void showGPXFileDialog(List files) { CallbackWithObject callbackWithObject = new CallbackWithObject() { @Override @@ -368,9 +448,9 @@ public class ConfigureSettingsMenuHelper{ GPXUtilities.WptPt locToShow = null; for (GPXUtilities.GPXFile g : result) { if (g.showCurrentTrack) { - if (!settings.SAVE_TRACK_TO_GPX.get() && ! - settings.SAVE_GLOBAL_TRACK_TO_GPX.get()) { - AccessibleToast.makeText(getActivity(), R.string.gpx_monitoring_disabled_warn, Toast.LENGTH_SHORT).show(); + if (!app.getSettings().SAVE_TRACK_TO_GPX.get() && ! + app.getSettings().SAVE_GLOBAL_TRACK_TO_GPX.get()) { + AccessibleToast.makeText(app.getMapActivity(), R.string.gpx_monitoring_disabled_warn, Toast.LENGTH_SHORT).show(); } break; } @@ -378,22 +458,22 @@ public class ConfigureSettingsMenuHelper{ locToShow = g.findPointToShow(); } } - getMyApplication().getSelectedGpxHelper().setGpxFileToDisplay(result); - createAllCategories(); + app.getSelectedGpxHelper().setGpxFileToDisplay(result); + createSettingsAdapter(); return true; } }; if (files == null) { - GpxUiHelper.selectGPXFile(getActivity(), true, true, callbackWithObject); + GpxUiHelper.selectGPXFile(app.getMapActivity(), true, true, callbackWithObject); } else { - GpxUiHelper.selectGPXFile(files, getActivity(), true, true, callbackWithObject); + GpxUiHelper.selectGPXFile(files, app.getMapActivity(), true, true, callbackWithObject); } } - private List getAlreadySelectedGpx(){ - GpxSelectionHelper gpxSelectionHelper = getMyApplication().getSelectedGpxHelper(); - if (gpxSelectionHelper == null){ + private List getAlreadySelectedGpx() { + GpxSelectionHelper gpxSelectionHelper = app.getSelectedGpxHelper(); + if (gpxSelectionHelper == null) { return null; } List selectedGpxFiles = gpxSelectionHelper.getSelectedGPXFiles(); From d98a9a359c6217239fcefd2bd97d198cc8a42e28 Mon Sep 17 00:00:00 2001 From: Denis Date: Fri, 17 Oct 2014 19:42:15 +0300 Subject: [PATCH 09/12] Added new icon for back button in menu --- OsmAnd/res/drawable-hdpi/ic_back_drawer_dark.png | Bin 0 -> 1270 bytes .../res/drawable-hdpi/ic_back_drawer_white.png | Bin 0 -> 1270 bytes OsmAnd/res/drawable-mdpi/ic_back_drawer_dark.png | Bin 0 -> 1160 bytes .../res/drawable-mdpi/ic_back_drawer_white.png | Bin 0 -> 1160 bytes .../res/drawable-xhdpi/ic_back_drawer_dark.png | Bin 0 -> 1273 bytes .../res/drawable-xhdpi/ic_back_drawer_white.png | Bin 0 -> 1271 bytes .../res/drawable-xxhdpi/ic_back_drawer_dark.png | Bin 0 -> 1361 bytes .../res/drawable-xxhdpi/ic_back_drawer_white.png | Bin 0 -> 1361 bytes OsmAnd/res/layout/map_settings_item.xml | 6 ++++-- .../net/osmand/plus/activities/MapActivity.java | 7 +++++++ .../plus/activities/MapActivityActions.java | 13 +++++++++++-- .../ConfigureSettingsMenuHelper.java | 15 ++++++++++++--- 12 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 OsmAnd/res/drawable-hdpi/ic_back_drawer_dark.png create mode 100644 OsmAnd/res/drawable-hdpi/ic_back_drawer_white.png create mode 100644 OsmAnd/res/drawable-mdpi/ic_back_drawer_dark.png create mode 100644 OsmAnd/res/drawable-mdpi/ic_back_drawer_white.png create mode 100644 OsmAnd/res/drawable-xhdpi/ic_back_drawer_dark.png create mode 100644 OsmAnd/res/drawable-xhdpi/ic_back_drawer_white.png create mode 100644 OsmAnd/res/drawable-xxhdpi/ic_back_drawer_dark.png create mode 100644 OsmAnd/res/drawable-xxhdpi/ic_back_drawer_white.png diff --git a/OsmAnd/res/drawable-hdpi/ic_back_drawer_dark.png b/OsmAnd/res/drawable-hdpi/ic_back_drawer_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..bc26173a816fbd1471adb81da80411821e2432cb GIT binary patch literal 1270 zcmbVMZD<>196#4~Erm#zcAKq8&#TKU^Ky5&OLBK4%iA?;w8=siZ1zF6%iWXaXzsyj2>X_1+M;tFF*i$W=L$RJEqoC=OfoC-2uzBu+t%D^v9Klw$}`COV*Ka_p&;O=?; z&-45J-~V?$n>pqh92-Os#Fd&Ba&X=6yaRjT_uYe+FTrKho+{WU^paf_O@PE?y$H~h zD$ao%5aq=ezXl-$={ck13w9wr!%MpA6&;MXrW%lqAfZUj5T$uwqeU>MXkqNPPj6tT zB8RbAf0|4i2~bw1mrQVCDU+9$<|R(XB1h3sjfVBS;_N^WhMITZ@`4)^N?5=xPvvC7Ft0E4qd{ z8pWc%V23g2>2?UJkxuU@)~rsVV9JP^Xb_Z_BvjRjtBtno9QfCbUC~y4(EvmaSo(q~ z!FrS?x@4HUhZ}N$&>Q}^slcL$6+xF4RG`@@A&kKrudK*?krtUEC`ovb1`JM<41;sP zN8_yI19ZU0$TA!3>e-E-q=O6-XF0z=8KkHwhKOxsZlz*NovIce%D z+Riht?BWB-1}MN312~{$KkhFvKAa6wGER#{juS~zBw2uU`11eF9|4^roM!n?^K_43 zM>^Y`QGmkEFaZrtkO@a+B$m03AdehK39)?bZt>3t4g0fUMn1Ie)Z(7Z1&#FO*ePH_0)b( zXjOXE^L(8!8`K9wubq9o5!|=_oH2U$^;@%j#Z%9^-s)@p{9Vhlhw49c?(e>>3Yzq) zBg@xU+=196$TAmP#aRyUkWc&#TKU^K!4r<&I>{%Qb7<(uFM8?1OCg@}xPMd-3kN zq*bsjGE-1o-I&s%&=1=XAtijb|Ko~(f&uF>4n@=AT6jS$04UE5{Tab+);qi(kDYL*uWiX=|5$xAbKEqH= zjbPJ(G?}&%pr}nQ*xAt@H+cs~^gay<70N<*0-Lj+CYBrgOQfuzyagF$PyS`e~g zvSkZO5v=ICmOv2Ya@k*I{H8raP(05QBu&sX4iUIBZ@5wgH=NP71`#-lty!*S8fZhK zB%5dLKkr^fx2V zelYTJ+_!5pc5rQJd@(e#9+y4uBb#09yAPqC90V|o{xU+>>s)PSL(v>pTpI+zpX#F_`^B`o%VT8MF-Yj zAik?ogM-@1;_BtDI=Jv~U&r;O%I>xNf!gHgC1LD~er@2Lv94Yc*?*Vv_1t*%eB)1) MnwS!6@zcxy0K=Z1mjD0& literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-mdpi/ic_back_drawer_dark.png b/OsmAnd/res/drawable-mdpi/ic_back_drawer_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..19a15264e6b8e25893c11db1755948c6253b5a28 GIT binary patch literal 1160 zcmbVMTWHi+7>-sJt#&B|b?vTeOkZ3ylY24=ovocr#~J9OirC? zLG~gGx}c!=>Rv=qPz3iu3nKMF3WBUu#OsUf`Y0^*!G+z`?#Xnf`cQl@keu_M^MC*U z{kI$)9@^8<-rY`7R7XCSDU$W$_+9%E`EJXx^JLkA2g-N^Rd5Z2km`4k1?jv8#$XWw zXX?Oh*h^7u2i;N`mkWc2jl2YibrN+iAZUu}?W+gC9*3B=;F#;Dn7^*iGPLWYm{Fy` z7XlMj-Q08tN2Z5L_Vl=|J51k~bZ^}t20VxXUH2yZ$f&27hFyc~<71AY8!C7_#VnC3 z7lvsQg^*SfDr@tCOlx{VP*hFVcF`h{IX=mWJj?5bA{o3$Hy?(03!REl%w(Ish?HWg z7zYN&)oQgwO-i6}j1zQS=XjA5MV4r=(Ugxto%N%hmW2$A?9dIci+nn^2rM*-Qw(9c z6oMBN3d@H5sF^5|GOi8+PDt>a=f!a~v?E-EZ)vQk9hIg6$Q5CPCPSOlqtep?lia=E zQLISV7<)sP6a`FVkUi-^ALlbEhTJ3^*D)*!$QG>FtR_L3m3UcZbtp<~(iWklin8M* zwU(Wg@Yw+~si$R4QL>sK49IDPPo@<~HC0~Ic+G5K^L~VZZ^M>vm-udC)%RizGlT%6 zu!PV=s|$v!2&1Tq0@^eiRi}51y1s*I(HC)QAiy78m>4#7DE=^obAGAGwx({PeS}TW^4_!3{I3c6R=qemwi# z%qRQ0ex4hoAAI}U`L=})OKxvFkUI5x(~(c-H$J=fh`N=|y{O%)-e3L4h8_QQciz2O z5!GXdcHdbIH?LaQW+@_bW%18;eWLq>*MIf&FLM`jZ|-GZa`V6b^Z8LWcPaaP#ymc9 yrue&j_WsEqPW`y{>ow=@cAdpf5ARynxt|*PY5SJ)LeH!C-;f^|%3MzG|Neg|WP4Qr literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-mdpi/ic_back_drawer_white.png b/OsmAnd/res/drawable-mdpi/ic_back_drawer_white.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea5a84f6c9f24753181641460cca83660afa1a1 GIT binary patch literal 1160 zcmbVMU1$_n6rPwOHkc9uMopoP<4Z(m=YMBs$TZE)?z#)v7&eQEZ{C@?o1G>zcbvI# zHz|eIBB-EX@ud&a9~1>eP@x2h=tB?$F(icI&r7M|lOXY>&}!2=o87bzArBpxx#!&b zednBee&)=`@S)C*-VTbQIt%$siL4*R@3yVvyC=^sl4Uo}j^j~O!8H&2iKyE>8MZH}QE5Ikux zYe9_{M`#m;kX8~&*5(D7R<(qnBvnm4NQ*@0_!KAdEU)Q`r1K)(d>G;_bSio&lWY1S zn!!{t4s?#I)oO{FltAGGCuo|+@ggUREJ3i*jE_N`^`m_)3mF*Mp&MWq`E+a%SZEp> z42g8@3SLkwt{e8FW}-;SxH}e1BxR5aza*}XdN4F#(Td-oYssv?L;$@lDpeV5^TZB?l zlpQCfw(M-g&t=V&mX_0sl2ZjCO9VcZR-~kvkJIt6VS~Uo2){&9HFgO>!)|_g6^U1b8QE@{zyN) z_x0Saqut*>7@~ju>h{(4l}=0UXg_XTeBX2Wa~FXznj zqd%1%%a@nGJ$3Qyw$DGfve11QKmX?7hh4`gp=a-IP3+qd{~HR~;mpnSv6KG*+gy4e literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xhdpi/ic_back_drawer_dark.png b/OsmAnd/res/drawable-xhdpi/ic_back_drawer_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..17ca3bb76b484d43a48329fa8fd883ead8373287 GIT binary patch literal 1273 zcmbVMZD<>19KR7(YatV5lXX@(t{`)Gxy!vIxwCOi^WuU_TW`T;A1pq(dy*XKy?A$R z(x6yZUr?!7mNMtd>V^aDpyH@g(6K7`p+Q|lm@^E9IFy3e4=o}C#plwb`l0ND2Y1i& zf1dyE|Ns5p?&aaZN4#D8x-bm$CJ)6VwD!1fX9xOP-s@GgbUX2kbHvCwC161;q8M3- zCpD0V5(LWRQ!B6!!#opeI^$$gheg@Ye8AQ5l{FKgF|6-k*#vSCI(Qc5RXt3seRhe! zRV7S}@F_ZFMqxocRI%WZ%3xZq6lFmn4nBiV(y4^|?N*PrKCgu0hl%~0HHMMO=g8$OkR@+Wbnvjy9ZH!wo zszRLma~}1EDrHsoM_FW!Uzu zBHt~na7(NhwIFZ|D{UBK?JgKD7>;2V3=@w=n^nj6kEpt0lFV7G8Rdf8%uMMU0?L?e(@X_>NyspzMGjjHU0d( zSC+0^oi$%;T-~^9&g=w3lJUpdhpTV>ko^0b`LCZouzpe99slX{96UL4K2fc%QebbQ zaC~j$@mJ5on|HvY7ar?+Te^Ap+4rt}{M-|@H&^GYH?HSyulF=SWxaQ_vAhF*xe=_b z{4%w$96r0UVb@0PDR6tOeZz|vUix#qi0^!be;u3Y@YnIh%2&@k>TUE-e-fx4onGkA zdzW$_l>hShmQVb)eBvRGT|2qzseQV5$=Rv@+;MF*k5?w@>{(0QRlV)|%lj{iQ-$1_ z?sI42U865_eoh>?Pb^A%-k6@fd+N^j8MR&?9OGuOcevSarH}5H-pw4J$2{1=sXqSl Suj^^|XOxT&#uf*jJoXRxB)T^M literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xhdpi/ic_back_drawer_white.png b/OsmAnd/res/drawable-xhdpi/ic_back_drawer_white.png new file mode 100644 index 0000000000000000000000000000000000000000..e70772a78d82b1d79d7ffc709d56fabdbe67bdff GIT binary patch literal 1271 zcmbVMU2NM_6gDkNr$WaALqOC?#ua0MId=S$#HOK5j0vPM*5+j(q%qL6O)44^hzTAT*J)CCsP=#* z``&Z!`Of*ypATe)p6%-Nc48RTl^m3^Xzh02bsqFJyROvG@~9mjwTEHBuF59BqAJV- zJgLh?kOi_j@$%Q87sJ~3YPnH+G__4spzfDl9lxVj5E{dJ`<#lbl!1-sK~Xaz#H~-x z5V)pBh!H+Trz$Z}(gr6@Fg!VwQzpxbpb~x0;JuEB4Cug?aYr9BEYXP&4Z9-RyT=rP zH&pC$gjgXpn#$lYXabz~2T6qvaCk`Y2l!w}2yMX`BvW*lVrY^UM4lCC25&wD@@A?9 zF)JmSzK|3lO151QDXLnn`m3xTnnfxg2m(bj6vL26gR~|LTXsmp>SDk3&w+SE`{* z>PUCHItoZw9VTF)2{O^B)EBN^#jtxGPD;_7^Zml1==!t$8}^-))7`VuxAGVK*3Z|M zcb1n2Z}5A5?mkpmC#SRUk6Z9*xa)~OL(|M}CobHcKY0E0{vD6(+jZ9ae0KiKrX-U% zGL`;lXKiDB+IRB!TiGAqTq^$c;I(62%h}+zJIBv~Baio6rTsU*dB-WYchr3KE57Sb zc3f_Ipth+_ZSK?O7I%N8^`G7zIrrfU?Y_*ZnR`pzYp-|?{_@c6r}kX(c&8R-E_yGw z9px__e($I4o)>4S?_Q;$RnBUwZ!C;mL7q z@q)zeh`+Jn(@y2r*WY(;oH{_#?L8#clL1R}$2N{EN^SO%BtG}$;lY`F>hHGuG5B^b U|Jc;|JMOP286T297}!1g4_VHzqyPW_ literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xxhdpi/ic_back_drawer_dark.png b/OsmAnd/res/drawable-xxhdpi/ic_back_drawer_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..4022c1b4221f5ca6a7ab238f402efae50238108f GIT binary patch literal 1361 zcmbVMZ%i9y7(XCvTK*)8Og4u(k4)I$dUx&h&z*Fv^jaucSuI7{IO49oxAcVGb$2hc zbeOp<(Tp#{i7uPOkl|S36400}na(Wgh(lyDLiSz@RGat zdEWQ;d!FZg{@hW2Yg36~ivh#15^u8*KMYL>&?htHKV=yIZ0CP%e z1mNC;*aZSWl=}BigL(`r=#zsX81n7rqiVt^W--QeB8k`-R^O0LiqUQW@d)UW6$kP2 zCzlCamK;Qf#Yg*+E)bWSGa6{iv<9P@?kFb_4LkArG>;4<02J|bqDRsBw1Zf-%Og3v zO%eDq1a>=!m7qdCKkiaBfLn}KGD@DjBuPt(;{sL#42CA{?k0UE!2@&acvZkvNlXWK@+5*QK^4zeiFm-_Im|qFn#mN$=Q<6>0(d8;lh27 zR*czr!>6BNcm<}=EeGyY+*LFVgY5+br}*~`Z_{&d;#!Lc_-GK)f0Z1hNJ{<(|49e-+J`rhv?zHR)BVes4Un;VASJMjLQ z=l*)~3=D^zt`V%$LBjH)!M!K0o_}X?c39}xH0p)m*NL-tzA_9?)Xu1TEWZrZ9@_X! z}(qnq(hr60?7qFd<>v;$Bi?Le`;pcDjv+rhqa$a|< JFwwa0@IM@5(ZT=# literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xxhdpi/ic_back_drawer_white.png b/OsmAnd/res/drawable-xxhdpi/ic_back_drawer_white.png new file mode 100644 index 0000000000000000000000000000000000000000..cab4e58f7af534d643b661946ee0cb15610540d7 GIT binary patch literal 1361 zcmbVMZ%i9y7(XC51xlg>baR;V$Oao+@2=m)Y7UUK(7 z&-?y<&-1*`pL^Bc+GHr&QiNfc!P_hZ(7H4GKKu~+PJKGPA1#}qy94f1qcA0E0CP%e z7~o!6>;eHGN_~f?K|O{Q^u~i7u*0{9kEpUy%wmjbIf2+1R^O0Lh>>mp@i6F$D-Po4 zkFF4STyhZY79Z_PxIir4oYBC(OlvTb>5gy`(Xb1zPxHut44{ao{ph#D*ASZmjb;F9jmMD}mDlH}`#z<4LoW0iyT89DfZx|b*^C<{c<@O!m5DvH=6sF9=$6zCNk1UfNFafuI`MK%ng5z=M` zENP}$mgIoROxhzRV78iANwV8=b~fU>8K=F`= zucAXyiGZB%IP$&5wLg%{yEGs|RST+WPp%96F%_zMOikb}*Gkp#n)bLNsVRL&woI$H z7JwG-1(HWoWqc*ie0+l#XuFjGY}iTyMzWBWC~G3^Hbx@NVwmGZnigq0AlCTO|IHtT zf}*m`@}K6(ZK00LitD3*l=Wc(3Ys7djmmZT>Mab*JM0yl!StPLr)LdU=@L)DK;gkh zzIv&2zTo3eF#HKjNi5;Z+m{~$c{|?}?ruKPc7NN+{`byK+`nvJ4xicniYIhZ@oeq4 zw)pmcnLJkVJ{;-zv%khNcFWA;#rKx<3k#QD?B$%cT^CwruYV`s94(o{F0~!XUmPlf z)iZxnnNaVkGIs0e#Xwo$cX!kG1#G9|cHWWv5^P{1^sJ%kgSWFkIj_4_ Jm~1>a@DHj7(lh`7 literal 0 HcmV?d00001 diff --git a/OsmAnd/res/layout/map_settings_item.xml b/OsmAnd/res/layout/map_settings_item.xml index ee3ac30056..4fef20cc9b 100644 --- a/OsmAnd/res/layout/map_settings_item.xml +++ b/OsmAnd/res/layout/map_settings_item.xml @@ -9,7 +9,9 @@ + android:layout_gravity="center_vertical" + android:background="@null" + android:layout_marginRight="10dp"/> diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index 71abb48240..f7c9e14254 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -272,6 +272,13 @@ public class MapActivity extends AccessibleActivity { setIntent(intent); } + @Override + public void onBackPressed() { + if (!mapActions.onBackPressed()) { + super.onBackPressed(); + } + } + @Override protected void onResume() { super.onResume(); diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 053329b4fe..15f5317fcc 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -440,8 +440,17 @@ public class MapActivityActions implements DialogProvider { return dlg; } - - + + public boolean onBackPressed() { + if (mDrawerLayout.isDrawerOpen(GravityCompat.START)){ + mDrawerLayout.closeDrawer(mDrawerList); + + return true; + } + return false; + } + + private static class SaveDirectionsAsyncTask extends AsyncTask { private final OsmandApplication app; diff --git a/OsmAnd/src/net/osmand/plus/configuremap/ConfigureSettingsMenuHelper.java b/OsmAnd/src/net/osmand/plus/configuremap/ConfigureSettingsMenuHelper.java index 9afab4d621..8c6f944263 100644 --- a/OsmAnd/src/net/osmand/plus/configuremap/ConfigureSettingsMenuHelper.java +++ b/OsmAnd/src/net/osmand/plus/configuremap/ConfigureSettingsMenuHelper.java @@ -73,7 +73,7 @@ public class ConfigureSettingsMenuHelper { private ArrayAdapter createSettingsAdapter() { List items = new ArrayList(); - items.add(new ConfigureMapMenuItem(BACK_HEADER, R.string.configure_map, R.drawable.ic_action_undo_dark, R.drawable.ic_action_undo_light, null)); + items.add(new ConfigureMapMenuItem(BACK_HEADER, R.string.configure_map, R.drawable.ic_back_drawer_dark, R.drawable.ic_back_drawer_white, null)); createLayersItems(items); createRenderingAttributeItems(items); return new ArrayAdapter(app, R.layout.map_settings_item, items) { @@ -96,6 +96,7 @@ public class ConfigureSettingsMenuHelper { } else if (item.type == MAP_REDNDER) { ((TextView) convertView.findViewById(R.id.name)).setText(item.nameId); if (item.nameId == R.string.map_widget_renderer) { + ((TextView)convertView.findViewById(R.id.descr)).setText(app.getSettings().RENDERER.get()); convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -134,6 +135,7 @@ public class ConfigureSettingsMenuHelper { } }); } else if (item.nameId == R.string.map_widget_day_night) { + ((TextView)convertView.findViewById(R.id.descr)).setText(app.getSettings().DAYNIGHT_MODE.get().toHumanString(app)); convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -174,7 +176,6 @@ public class ConfigureSettingsMenuHelper { public void onCheckedChanged(CompoundButton compoundButton, boolean b) { pref.set(!pref.get()); app.getResourceManager().getRenderer().clearCache(); - //view.refreshMap(true); } }); } else { @@ -214,6 +215,8 @@ public class ConfigureSettingsMenuHelper { //Hiding and showing items based on current item //setting proper visual property private void prepareView(View convertView, ConfigureMapMenuItem item) { + ((TextView)convertView.findViewById(R.id.descr)).setTypeface(null,Typeface.ITALIC); + int type = item.type; //setting name textview if (type == BACK_HEADER) { @@ -225,7 +228,10 @@ public class ConfigureSettingsMenuHelper { header.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20); header.setTypeface(Typeface.DEFAULT_BOLD); } else { - ((TextView) convertView.findViewById(R.id.name)).setTextSize(TypedValue.COMPLEX_UNIT_SP, 16); + TextView header = ((TextView) convertView.findViewById(R.id.name)); + header.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16); + header.setTypeface(Typeface.DEFAULT); + } //setting backbutton @@ -250,6 +256,7 @@ public class ConfigureSettingsMenuHelper { } else if (type == MAP_REDNDER) { convertView.findViewById(R.id.icon).setVisibility(View.GONE); convertView.findViewById(R.id.check).setVisibility(View.GONE); + convertView.findViewById(R.id.descr).setVisibility(View.VISIBLE); } else if (type == RENDERING_PROPERTY) { final RenderingRuleProperty p = (RenderingRuleProperty) item.preference; if (p.isBoolean()) { @@ -281,6 +288,7 @@ public class ConfigureSettingsMenuHelper { selectPOIFilterLayer(null); } else { pref.set(b); + app.getMapActivity().getMapView().refreshMap(true); } } }); @@ -303,6 +311,7 @@ public class ConfigureSettingsMenuHelper { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { pref.set(b); + app.getMapActivity().getMapView().refreshMap(true); } }); } From 6d855daa4d8fa8d94311771519b96bb16d19d09b Mon Sep 17 00:00:00 2001 From: Denis Date: Mon, 20 Oct 2014 11:50:50 +0300 Subject: [PATCH 10/12] Added back button and menu iteraction for drawer --- .../osmand/plus/activities/MapActivity.java | 10 +++++++++- .../plus/activities/MapActivityActions.java | 19 ++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index f7c9e14254..75d057c5fd 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -127,6 +127,7 @@ public class MapActivity extends AccessibleActivity { requestWindowFeature(Window.FEATURE_NO_TITLE); + mapActions = new MapActivityActions(this); mapLayers = new MapActivityLayers(this); // Full screen is not used here @@ -279,6 +280,13 @@ public class MapActivity extends AccessibleActivity { } } + @Override + public void onBackPressed() { + if (!mapActions.onBackPressed()){ + super.onBackPressed(); + } + } + @Override protected void onResume() { super.onResume(); @@ -472,7 +480,7 @@ public class MapActivity extends AccessibleActivity { } return true; } else if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0) { - mapActions.createOptionsMenuAsDrawer(true); + mapActions.onMenuPressed(); return true; } else if (keyCode == KeyEvent.KEYCODE_SEARCH && event.getRepeatCount() == 0) { Intent newIntent = new Intent(MapActivity.this, getMyApplication().getAppCustomization().getSearchActivity()); diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 15f5317fcc..044e6a3d72 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -742,7 +742,24 @@ public class MapActivityActions implements DialogProvider { break; } } - + + public boolean onBackPressed(){ + if (mDrawerLayout.isDrawerOpen(mDrawerList)){ + mDrawerLayout.closeDrawer(mDrawerList); + return true; + } + return false; + } + + public void onMenuPressed(){ + if (mDrawerLayout.isDrawerOpen(mDrawerList)){ + mDrawerLayout.closeDrawer(mDrawerList); + } else { + createOptionsMenuAsDrawer(true); + } + + } + public void createOptionsMenuAsDrawer(boolean show){ final ContextMenuAdapter cm = createOptionsMenu(); mDrawerLayout = (DrawerLayout) mapActivity.findViewById(R.id.drawer_layout); From 8c546712b47b373fe74f68a3c5055f09f2d7ba3e Mon Sep 17 00:00:00 2001 From: Denis Date: Mon, 20 Oct 2014 17:36:43 +0300 Subject: [PATCH 11/12] Updated all on click events for configure map menu --- OsmAnd/AndroidManifest.xml | 1 - OsmAnd/res/layout/map_settings_item.xml | 4 +- .../plus/activities/MapActivityActions.java | 27 +- .../plus/activities/MapActivityLayers.java | 4 + ...Helper.java => ConfigureSettingsMenu.java} | 334 ++++++++++-------- .../net/osmand/plus/helpers/GpxUiHelper.java | 13 +- 6 files changed, 209 insertions(+), 174 deletions(-) rename OsmAnd/src/net/osmand/plus/configuremap/{ConfigureSettingsMenuHelper.java => ConfigureSettingsMenu.java} (63%) diff --git a/OsmAnd/AndroidManifest.xml b/OsmAnd/AndroidManifest.xml index e8e6b36d20..8020a1ae85 100644 --- a/OsmAnd/AndroidManifest.xml +++ b/OsmAnd/AndroidManifest.xml @@ -130,7 +130,6 @@ - diff --git a/OsmAnd/res/layout/map_settings_item.xml b/OsmAnd/res/layout/map_settings_item.xml index 4fef20cc9b..17b2a553f5 100644 --- a/OsmAnd/res/layout/map_settings_item.xml +++ b/OsmAnd/res/layout/map_settings_item.xml @@ -7,11 +7,12 @@ android:paddingLeft="8dp" android:paddingRight="8dp"> + android:layout_marginRight="10dp"/> items = new ArrayList(); public class ConfigureMapMenuItem { int nameId; @@ -61,102 +62,179 @@ public class ConfigureSettingsMenuHelper { } } - public ConfigureSettingsMenuHelper(OsmandApplication app) { + public ConfigureSettingsMenu(OsmandApplication app) { this.app = app; } - public void setListView(ListView listView){ - this.listView = listView; + public void setListView(ListView list) { + this.listView = list; listView.setAdapter(createSettingsAdapter()); + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int pos, long l) { + onMenuItemClick(items.get(pos), (CheckBox) view.findViewById(R.id.check)); + + } + }); } + //checkBox should be set only if u have checkBox preference + private void onMenuItemClick(ConfigureMapMenuItem item, CheckBox ch) { + if (item.type == LAYER) { + if (ch != null){ + ch.setChecked(!ch.isChecked()); + } + if (item.nameId == R.string.layer_poi) { + final OsmandSettings.OsmandPreference pref = (OsmandSettings.OsmandPreference) item.preference; + boolean value = !pref.get(); + if (value) { + selectPOIFilterLayer(null); + } + } else { + showGPXFileDialog(getAlreadySelectedGpx()); + } + } else { + final OsmandSettings.OsmandPreference pref = (OsmandSettings.OsmandPreference) item.preference; + pref.set(!pref.get()); + } else if (item.type == MAP_REDNDER) { + if (item.nameId == R.string.map_widget_renderer) { + AlertDialog.Builder bld = new AlertDialog.Builder(app.getMapActivity()); + bld.setTitle(R.string.renderers); + Collection rendererNames = app.getRendererRegistry().getRendererNames(); + final String[] items = rendererNames.toArray(new String[rendererNames.size()]); + final String[] visibleNames = new String[items.length]; + int selected = -1; + final String selectedName = app.getRendererRegistry().getCurrentSelectedRenderer().getName(); + for (int j = 0; j < items.length; j++) { + if (items[j].equals(selectedName)) { + selected = j; + } + visibleNames[j] = items[j].replace('_', ' ').replace( + '-', ' '); + } + bld.setSingleChoiceItems(visibleNames, selected, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + String renderer = items[which]; + RenderingRulesStorage loaded = app.getRendererRegistry().getRenderer(renderer); + if (loaded != null) { + app.getSettings().RENDERER.set(renderer); + app.getRendererRegistry().setCurrentSelectedRender(loaded); + app.getResourceManager().getRenderer().clearCache(); + listView.setAdapter(createSettingsAdapter()); + } else { + AccessibleToast.makeText(app, R.string.renderer_load_exception, Toast.LENGTH_SHORT).show(); + } + dialog.dismiss(); + createSettingsAdapter(); + } + }); + bld.show(); + } else if (item.nameId == R.string.map_widget_day_night) { + AlertDialog.Builder bld = new AlertDialog.Builder(app.getMapActivity()); + bld.setTitle(R.string.daynight); + final String[] items = new String[OsmandSettings.DayNightMode.values().length]; + for (int i = 0; i < items.length; i++) { + items[i] = OsmandSettings.DayNightMode.values()[i].toHumanString(app); + } + int i = app.getSettings().DAYNIGHT_MODE.get().ordinal(); + bld.setSingleChoiceItems(items, i, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + app.getSettings().DAYNIGHT_MODE.set(OsmandSettings.DayNightMode.values()[which]); + app.getResourceManager().getRenderer().clearCache(); + dialog.dismiss(); + } + }); + bld.show(); + } + } else if (item.type == RENDERING_PROPERTY) { + if (ch != null){ + ch.setChecked(!ch.isChecked()); + } + final RenderingRuleProperty p = (RenderingRuleProperty) item.preference; + final String propertyDescription = SettingsActivity.getStringPropertyDescription(app, p.getAttrName(), p.getName()); + if (p.isBoolean()) { + final OsmandSettings.CommonPreference pref = app.getSettings().getCustomRenderBooleanProperty(p.getAttrName()); + pref.set(!pref.get()); + app.getResourceManager().getRenderer().clearCache(); + } else { + final OsmandSettings.CommonPreference pref = app.getSettings().getCustomRenderProperty(p.getAttrName()); + AlertDialog.Builder b = new AlertDialog.Builder(app.getMapActivity()); + //test old descr as title + b.setTitle(propertyDescription); + + int i = Arrays.asList(p.getPossibleValues()).indexOf(pref.get()); + + String[] possibleValuesString = new String[p.getPossibleValues().length]; + + for (int j = 0; j < p.getPossibleValues().length; j++) { + possibleValuesString[j] = SettingsActivity.getStringPropertyValue(app, p.getPossibleValues()[j]); + } + + b.setSingleChoiceItems(possibleValuesString, i, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + pref.set(p.getPossibleValues()[which]); + app.getResourceManager().getRenderer().clearCache(); + dialog.dismiss(); + } + }); + b.show(); + + } + } + app.getMapActivity().getMapLayers().updateLayers(app.getMapActivity().getMapView()); + app.getMapActivity().getMapView().refreshMap(); + } private ArrayAdapter createSettingsAdapter() { - List items = new ArrayList(); + items.clear(); items.add(new ConfigureMapMenuItem(BACK_HEADER, R.string.configure_map, R.drawable.ic_back_drawer_dark, R.drawable.ic_back_drawer_white, null)); createLayersItems(items); createRenderingAttributeItems(items); return new ArrayAdapter(app, R.layout.map_settings_item, items) { @Override - public View getView(int position, View convertView, ViewGroup parent) { + public View getView(int position,View convertView, ViewGroup parent) { if (convertView == null) { convertView = app.getMapActivity().getLayoutInflater().inflate(R.layout.map_settings_item, null); } - ConfigureMapMenuItem item = getItem(position); + final ConfigureMapMenuItem item = getItem(position); prepareView(convertView, item); - if (item.type == BACK_HEADER){ + if (item.type == BACK_HEADER) { ((TextView) convertView.findViewById(R.id.name)).setText(item.nameId); ImageButton button = (ImageButton) convertView.findViewById(R.id.back); button.setImageResource(getIcon(item)); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + app.getMapActivity().getMapActions().createOptionsMenuAsDrawer(false); + } + }); } else if (item.type == HEADER) { ((TextView) convertView.findViewById(R.id.name)).setText((String) item.preference); } else if (item.type == LAYER) { ((TextView) convertView.findViewById(R.id.name)).setText(item.nameId); - setLayersCheckBox(item, (CheckBox) convertView.findViewById(R.id.check)); + final CheckBox ch = (CheckBox) convertView.findViewById(R.id.check); + ch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + onMenuItemClick(item, null); + } + }); + if (item.nameId == R.string.layer_gpx_layer){ + ch.setChecked(app.getSelectedGpxHelper().isShowingAnyGpxFiles()); + } else { + OsmandSettings.OsmandPreference pref = (OsmandSettings.OsmandPreference) item.preference; + ch.setChecked(pref.get()); + } } else if (item.type == MAP_REDNDER) { ((TextView) convertView.findViewById(R.id.name)).setText(item.nameId); if (item.nameId == R.string.map_widget_renderer) { - ((TextView)convertView.findViewById(R.id.descr)).setText(app.getSettings().RENDERER.get()); - convertView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - AlertDialog.Builder bld = new AlertDialog.Builder(app.getMapActivity()); - bld.setTitle(R.string.renderers); - Collection rendererNames = app.getRendererRegistry().getRendererNames(); - final String[] items = rendererNames.toArray(new String[rendererNames.size()]); - final String[] visibleNames = new String[items.length]; - int selected = -1; - final String selectedName = app.getRendererRegistry().getCurrentSelectedRenderer().getName(); - for (int j = 0; j < items.length; j++) { - if (items[j].equals(selectedName)) { - selected = j; - } - visibleNames[j] = items[j].replace('_', ' ').replace( - '-', ' '); - } - bld.setSingleChoiceItems(visibleNames, selected, new DialogInterface.OnClickListener() { - - @Override - public void onClick(DialogInterface dialog, int which) { - String renderer = items[which]; - RenderingRulesStorage loaded = app.getRendererRegistry().getRenderer(renderer); - if (loaded != null) { - app.getSettings().RENDERER.set(renderer); - app.getRendererRegistry().setCurrentSelectedRender(loaded); - app.getResourceManager().getRenderer().clearCache(); - } else { - AccessibleToast.makeText(app, R.string.renderer_load_exception, Toast.LENGTH_SHORT).show(); - } - dialog.dismiss(); - createSettingsAdapter(); - } - }); - bld.show(); - } - }); + ((TextView) convertView.findViewById(R.id.descr)).setText(app.getSettings().RENDERER.get()); } else if (item.nameId == R.string.map_widget_day_night) { - ((TextView)convertView.findViewById(R.id.descr)).setText(app.getSettings().DAYNIGHT_MODE.get().toHumanString(app)); - convertView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - AlertDialog.Builder bld = new AlertDialog.Builder(app.getMapActivity()); - bld.setTitle(R.string.daynight); - final String[] items = new String[OsmandSettings.DayNightMode.values().length]; - for (int i = 0; i < items.length; i++) { - items[i] = OsmandSettings.DayNightMode.values()[i].toHumanString(app); - } - int i = app.getSettings().DAYNIGHT_MODE.get().ordinal(); - bld.setSingleChoiceItems(items, i, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - app.getSettings().DAYNIGHT_MODE.set(OsmandSettings.DayNightMode.values()[which]); - app.getResourceManager().getRenderer().clearCache(); - dialog.dismiss(); - } - }); - bld.show(); - } - }); + ((TextView) convertView.findViewById(R.id.descr)).setText(app.getSettings().DAYNIGHT_MODE.get().toHumanString(app)); } } else if (item.type == RENDERING_PROPERTY) { convertView.findViewById(R.id.icon).setVisibility(View.GONE); @@ -168,43 +246,13 @@ public class ConfigureSettingsMenuHelper { convertView.findViewById(R.id.icon).setVisibility(View.GONE); final String propertyDescription = SettingsActivity.getStringPropertyDescription(app, p.getAttrName(), p.getName()); if (p.isBoolean()) { - final OsmandSettings.CommonPreference pref = app.getSettings().getCustomRenderBooleanProperty(p.getAttrName()); - CheckBox ch = (CheckBox) convertView.findViewById(R.id.check); + OsmandSettings.CommonPreference pref = app.getSettings().getCustomRenderBooleanProperty(p.getAttrName()); + final CheckBox ch = (CheckBox) convertView.findViewById(R.id.check); ch.setChecked(pref.get()); - ch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton compoundButton, boolean b) { - pref.set(!pref.get()); - app.getResourceManager().getRenderer().clearCache(); - } - }); - } else { - final OsmandSettings.CommonPreference pref = app.getSettings().getCustomRenderProperty(p.getAttrName()); - convertView.setOnClickListener(new View.OnClickListener() { + ch.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - AlertDialog.Builder b = new AlertDialog.Builder(app.getMapActivity()); - //test old descr as title - b.setTitle(propertyDescription); - - int i = Arrays.asList(p.getPossibleValues()).indexOf(pref.get()); - - String[] possibleValuesString = new String[p.getPossibleValues().length]; - - for (int j = 0; j < p.getPossibleValues().length; j++) { - possibleValuesString[j] = SettingsActivity.getStringPropertyValue(app, p.getPossibleValues()[j]); - } - - b.setSingleChoiceItems(possibleValuesString, i, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - pref.set(p.getPossibleValues()[which]); - app.getResourceManager().getRenderer().clearCache(); - //view.refreshMap(true); - dialog.dismiss(); - } - }); - b.show(); + onMenuItemClick(item, null); } }); } @@ -215,7 +263,7 @@ public class ConfigureSettingsMenuHelper { //Hiding and showing items based on current item //setting proper visual property private void prepareView(View convertView, ConfigureMapMenuItem item) { - ((TextView)convertView.findViewById(R.id.descr)).setTypeface(null,Typeface.ITALIC); + ((TextView) convertView.findViewById(R.id.descr)).setTypeface(null, Typeface.ITALIC); int type = item.type; //setting name textview @@ -240,7 +288,6 @@ public class ConfigureSettingsMenuHelper { } else { convertView.findViewById(R.id.back).setVisibility(View.GONE); } - //other elements if (type == BACK_HEADER) { convertView.findViewById(R.id.check).setVisibility(View.GONE); @@ -253,6 +300,7 @@ public class ConfigureSettingsMenuHelper { } else if (type == LAYER) { ((ImageView) convertView.findViewById(R.id.icon)).setImageResource(getIcon(item)); convertView.findViewById(R.id.icon).setVisibility(View.VISIBLE); + convertView.findViewById(R.id.check).setVisibility(View.VISIBLE); } else if (type == MAP_REDNDER) { convertView.findViewById(R.id.icon).setVisibility(View.GONE); convertView.findViewById(R.id.check).setVisibility(View.GONE); @@ -276,48 +324,6 @@ public class ConfigureSettingsMenuHelper { } } - private void setLayersCheckBox(ConfigureMapMenuItem item, CheckBox check) { - check.setVisibility(View.VISIBLE); - if (item.nameId == R.string.layer_poi) { - final OsmandSettings.OsmandPreference pref = (OsmandSettings.OsmandPreference) item.preference; - check.setChecked(pref.get()); - check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton compoundButton, boolean b) { - if (b) { - selectPOIFilterLayer(null); - } else { - pref.set(b); - app.getMapActivity().getMapView().refreshMap(true); - } - } - }); - } else if (item.nameId == R.string.layer_gpx_layer) { - check.setChecked(app.getSelectedGpxHelper().isShowingAnyGpxFiles()); - check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton compoundButton, boolean b) { - if (b) { - showGPXFileDialog(null); - } - } - }); - } else if (item.nameId == R.string.layer_transport && TransportRouteHelper.getInstance().routeIsCalculated()) { - check.setChecked(true); - } else { - final OsmandSettings.OsmandPreference pref = (OsmandSettings.OsmandPreference) item.preference; - check.setChecked(pref.get()); - check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton compoundButton, boolean b) { - pref.set(b); - app.getMapActivity().getMapView().refreshMap(true); - } - }); - } - } - - }; } @@ -391,7 +397,7 @@ public class ConfigureSettingsMenuHelper { it.reg(); } final AlertDialog.Builder builder = new AlertDialog.Builder(app.getMapActivity()); - ListAdapter listAdapter; + final ListAdapter listAdapter; if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { listAdapter = adapter.createListAdapter(app.getMapActivity(), R.layout.list_menu_item, app.getSettings().isLightContentMenu()); @@ -408,8 +414,8 @@ public class ConfigureSettingsMenuHelper { app.getSettings().setPoiFilterForMap(filterId); Intent newIntent = new Intent(app, EditPOIFilterActivity.class); newIntent.putExtra(EditPOIFilterActivity.AMENITY_FILTER, filterId); - //newIntent.putExtra(EditPOIFilterActivity.SEARCH_LAT, getMyApplication().getMapActivity().getMapView().getLatitude()); - //newIntent.putExtra(EditPOIFilterActivity.SEARCH_LON, getMyApplication().getMapActivity().getMapView().getLongitude()); + newIntent.putExtra(EditPOIFilterActivity.SEARCH_LAT, app.getMapActivity().getMapView().getLatitude()); + newIntent.putExtra(EditPOIFilterActivity.SEARCH_LON, app.getMapActivity().getMapView().getLongitude()); app.getMapActivity().startActivity(newIntent); } else { String filterId; @@ -425,10 +431,12 @@ public class ConfigureSettingsMenuHelper { if (f != null) { f.clearNameFilter(); } + app.getMapActivity().getMapLayers().setPoiFilter(f); + app.getMapActivity().getMapView().refreshMap(); if (selected != null && selected.length > 0) { selected[0] = f; } - createSettingsAdapter(); + listView.setAdapter(createSettingsAdapter()); } } @@ -441,7 +449,7 @@ public class ConfigureSettingsMenuHelper { !event.isCanceled()) { dialogInterface.cancel(); app.getSettings().SHOW_POI_OVER_MAP.set(false); - createSettingsAdapter(); + listView.setAdapter(createSettingsAdapter()); return true; } return false; @@ -468,15 +476,31 @@ public class ConfigureSettingsMenuHelper { } } app.getSelectedGpxHelper().setGpxFileToDisplay(result); - createSettingsAdapter(); + listView.setAdapter(createSettingsAdapter()); return true; } }; + AlertDialog dialog; if (files == null) { - GpxUiHelper.selectGPXFile(app.getMapActivity(), true, true, callbackWithObject); + dialog = GpxUiHelper.selectGPXFile(app.getMapActivity(), true, true, callbackWithObject); } else { - GpxUiHelper.selectGPXFile(files, app.getMapActivity(), true, true, callbackWithObject); + dialog = GpxUiHelper.selectGPXFile(files, app.getMapActivity(), true, true, callbackWithObject); + } + if (dialog != null) { + dialog.setOnKeyListener(new DialogInterface.OnKeyListener() { + @Override + public boolean onKey(DialogInterface dialogInterface, int i, KeyEvent event) { + if (i == KeyEvent.KEYCODE_BACK && + event.getAction() == KeyEvent.ACTION_UP && + !event.isCanceled()) { + dialogInterface.cancel(); + listView.setAdapter(createSettingsAdapter()); + return true; + } + return false; + } + }); } } diff --git a/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java b/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java index 0366481bad..8638557d74 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java @@ -128,7 +128,7 @@ public class GpxUiHelper { return description.toString(); } - public static void selectGPXFile(List selectedGpxList, final Activity activity, + public static AlertDialog selectGPXFile(List selectedGpxList, final Activity activity, final boolean showCurrentGpx, final boolean multipleChoice, final CallbackWithObject callbackWithObject){ OsmandApplication app = (OsmandApplication) activity.getApplication(); final File dir = app.getAppPath(IndexConstants.GPX_INDEX_DIR); @@ -142,11 +142,12 @@ public class GpxUiHelper { allGpxList.add(0, activity.getString(R.string.show_current_gpx_title)); } final ContextMenuAdapter adapter = createGpxContextMenuAdapter(activity,allGpxList, selectedGpxList, multipleChoice); - createDialog(activity, showCurrentGpx, multipleChoice, callbackWithObject, allGpxList, adapter); + return createDialog(activity, showCurrentGpx, multipleChoice, callbackWithObject, allGpxList, adapter); } + return null; } - public static void selectGPXFile(final Activity activity, + public static AlertDialog selectGPXFile(final Activity activity, final boolean showCurrentGpx, final boolean multipleChoice, final CallbackWithObject callbackWithObject) { OsmandApplication app = (OsmandApplication) activity.getApplication(); final File dir = app.getAppPath(IndexConstants.GPX_INDEX_DIR); @@ -160,8 +161,9 @@ public class GpxUiHelper { } final ContextMenuAdapter adapter = createGpxContextMenuAdapter(activity, list, null, multipleChoice); - createDialog(activity, showCurrentGpx, multipleChoice, callbackWithObject, list, adapter); + return createDialog(activity, showCurrentGpx, multipleChoice, callbackWithObject, list, adapter); } + return null; } private static ContextMenuAdapter createGpxContextMenuAdapter(Activity activity, List allGpxList, List selectedGpxList, boolean multipleChoice) { @@ -207,7 +209,7 @@ public class GpxUiHelper { }, dir, null, filename); } - private static void createDialog(final Activity activity, final boolean showCurrentGpx, + private static AlertDialog createDialog(final Activity activity, final boolean showCurrentGpx, final boolean multipleChoice, final CallbackWithObject callbackWithObject, final List list, final ContextMenuAdapter adapter) { final OsmandApplication app = (OsmandApplication) activity.getApplication(); @@ -336,6 +338,7 @@ public class GpxUiHelper { // java.lang.ClassCastException: com.android.internal.widget.RoundCornerListAdapter // Unknown reason but on some devices fail } + return dlg; } private static List getSortedGPXFilenames(File dir,String sub) { From bfdbb6ec100ac8358c624b7d74b0bc68639fbe48 Mon Sep 17 00:00:00 2001 From: Denis Date: Mon, 20 Oct 2014 18:43:34 +0300 Subject: [PATCH 12/12] Changed string, fixed some UI issues with loading indicator on radius --- OsmAnd/res/layout/radius_search_list_element.xml | 6 +++--- OsmAnd/res/layout/waypoint_header.xml | 4 ++-- .../net/osmand/plus/configuremap/ConfigureSettingsMenu.java | 5 +++-- .../src/net/osmand/plus/helpers/WaypointDialogHelper.java | 6 ++++-- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/OsmAnd/res/layout/radius_search_list_element.xml b/OsmAnd/res/layout/radius_search_list_element.xml index a558a98657..51e1700893 100644 --- a/OsmAnd/res/layout/radius_search_list_element.xml +++ b/OsmAnd/res/layout/radius_search_list_element.xml @@ -4,8 +4,8 @@ android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="3dp" - android:layout_marginBottom="3dp"> + android:layout_marginTop="5dp" + android:layout_marginBottom="5dp"> adapterView, View view, int pos, long l) { onMenuItemClick(items.get(pos), (CheckBox) view.findViewById(R.id.check)); - } }); } //checkBox should be set only if u have checkBox preference private void onMenuItemClick(ConfigureMapMenuItem item, CheckBox ch) { - if (item.type == LAYER) { + if (item.type == BACK_HEADER){ + app.getMapActivity().getMapActions().createOptionsMenuAsDrawer(false); + } else if (item.type == LAYER) { if (ch != null){ ch.setChecked(!ch.isChecked()); } diff --git a/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java b/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java index 0446c1570d..f7053535f8 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/WaypointDialogHelper.java @@ -360,13 +360,14 @@ public class WaypointDialogHelper implements OsmAndLocationListener { int value = WaypointHelper.SEARCH_RADIUS_VALUES[i]; if (waypointHelper.getPoiSearchDeviationRadius() != value){ running[0] = position; + thisAdapter.notifyDataSetInvalidated(); waypointHelper.setPoiSearchDeviationRadius(value); radius.setText(OsmAndFormatter.getFormattedDistance(value, app)); recalculatePoints(running, thisAdapter, WaypointHelper.POI); dialogInterface.dismiss(); } } - }).setTitle(app.getString(R.string.search_radius)+ " " + app.getString(R.string.poi)) + }).setTitle(app.getString(R.string.search_radius_proximity)+ " " + app.getString(R.string.poi)) .setNegativeButton(R.string.default_buttons_cancel, null) .show(); } @@ -395,13 +396,14 @@ public class WaypointDialogHelper implements OsmAndLocationListener { int value = WaypointHelper.SEARCH_RADIUS_VALUES[i]; if (waypointHelper.getSearchDeviationRadius() != value){ running[0] = position; + thisAdapter.notifyDataSetInvalidated(); waypointHelper.setSearchDeviationRadius(value); radius.setText(OsmAndFormatter.getFormattedDistance(value, app)); recalculatePoints(running, thisAdapter, -1); dialogInterface.dismiss(); } } - }).setTitle(app.getString(R.string.search_radius)) + }).setTitle(app.getString(R.string.search_radius_proximity)) .setNegativeButton(R.string.default_buttons_cancel, null) .show(); }