From 40c6ba307b1891b63aff5dcca8413ded017b7781 Mon Sep 17 00:00:00 2001 From: Alexander Sytnyk Date: Tue, 1 Aug 2017 17:23:29 +0300 Subject: [PATCH] Add toolbar --- OsmAnd/res/menu/measurement_tool_menu.xml | 11 +++ OsmAnd/res/values/strings.xml | 1 + .../MeasurementToolFragment.java | 75 ++++++++++++++++++- .../measurementtool/MeasurementToolLayer.java | 1 + .../mapwidgets/MapInfoWidgetsFactory.java | 1 + 5 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 OsmAnd/res/menu/measurement_tool_menu.xml diff --git a/OsmAnd/res/menu/measurement_tool_menu.xml b/OsmAnd/res/menu/measurement_tool_menu.xml new file mode 100644 index 0000000000..c39cdaa767 --- /dev/null +++ b/OsmAnd/res/menu/measurement_tool_menu.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 78393aefe2..59a43ea16a 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 --> + Select a location on the map and click "Add" to add a point to the ruler. Measurement tool Resume/Pause Navigation Press this button to pause the navigation, or to resume it if it was already paused. diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java index ef3eb32057..5320090d2b 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java @@ -5,20 +5,28 @@ import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.ContextThemeWrapper; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; import net.osmand.AndroidUtils; import net.osmand.plus.IconsCache; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.helpers.AndroidUiHelper; +import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory; +import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController; +import net.osmand.plus.widgets.IconPopupMenu; public class MeasurementToolFragment extends Fragment { public static final String TAG = "MeasurementToolFragment"; + private MeasurementToolBarController toolBarController; private TextView distanceTv; private TextView pointsTv; private String pointsSt; @@ -28,11 +36,12 @@ public class MeasurementToolFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - MapActivity mapActivity = (MapActivity) getActivity(); + final MapActivity mapActivity = (MapActivity) getActivity(); final MeasurementToolLayer measurementLayer = mapActivity.getMapLayers().getMeasurementToolLayer(); IconsCache iconsCache = mapActivity.getMyApplication().getIconsCache(); final boolean nightMode = mapActivity.getMyApplication().getDaynightHelper().isNightModeForMapControls(); final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme; + boolean portrait = AndroidUiHelper.isOrientationPortrait(mapActivity); pointsSt = mapActivity.getString(R.string.points).toLowerCase(); @@ -63,6 +72,45 @@ public class MeasurementToolFragment extends Fragment { enterMeasurementMode(); + if (portrait) { + toolBarController = new MeasurementToolBarController(); + toolBarController.setTitle(mapActivity.getString(R.string.measurement_tool_action_bar)); + toolBarController.setOnBackButtonClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mapActivity.onBackPressed(); + } + }); + toolBarController.setOnCloseButtonClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + IconPopupMenu popup = new IconPopupMenu(mapActivity, mapActivity.findViewById(R.id.widget_top_bar_close_button)); + popup.getMenuInflater().inflate(R.menu.measurement_tool_menu, popup.getMenu()); + final Menu menu = popup.getMenu(); + IconsCache ic = mapActivity.getMyApplication().getIconsCache(); + menu.findItem(R.id.action_save_as_gpx).setIcon(ic.getThemedIcon(R.drawable.ic_action_polygom_dark)); + menu.findItem(R.id.action_clear_all).setIcon(ic.getThemedIcon(R.drawable.ic_action_reset_to_default_dark)); + popup.setOnMenuItemClickListener(new IconPopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem menuItem) { + switch (menuItem.getItemId()) { + case R.id.action_save_as_gpx: + Toast.makeText(mapActivity, "Save as gpx", Toast.LENGTH_SHORT).show(); + return true; + case R.id.action_clear_all: + measurementLayer.clearPoints(); + updateText(); + return true; + } + return false; + } + }); + popup.show(); + } + }); + mapActivity.showTopToolbar(toolBarController); + } + return view; } @@ -119,6 +167,9 @@ public class MeasurementToolFragment extends Fragment { MapActivity mapActivity = getMapActivity(); MeasurementToolLayer measurementLayer = getMeasurementLayer(); if (mapActivity != null && measurementLayer != null) { + if (toolBarController != null) { + mapActivity.hideTopToolbar(toolBarController); + } measurementLayer.setInMeasurementMode(false); mapActivity.refreshMap(); mapActivity.enableDrawer(); @@ -146,4 +197,26 @@ public class MeasurementToolFragment extends Fragment { } } } + + private static class MeasurementToolBarController extends TopToolbarController { + + MeasurementToolBarController() { + super(MapInfoWidgetsFactory.TopToolbarControllerType.MEASUREMENT_TOOL); + setBackBtnIconClrIds(0, 0); + setCloseBtnIconClrIds(0, 0); + setTitleTextClrIds(R.color.primary_text_dark, R.color.primary_text_dark); + setDescrTextClrIds(R.color.primary_text_dark, R.color.primary_text_dark); + setBgIds(R.drawable.gradient_toolbar, R.drawable.gradient_toolbar, + R.drawable.gradient_toolbar, R.drawable.gradient_toolbar); + setCloseBtnIconIds(R.drawable.ic_overflow_menu_white, R.drawable.ic_overflow_menu_white); + setBackBtnIconIds(R.drawable.ic_action_remove_dark, R.drawable.ic_action_remove_dark); + setSingleLineTitle(false); + } + + @Override + public void updateToolbar(MapInfoWidgetsFactory.TopToolbarView view) { + super.updateToolbar(view); + view.getShadowView().setVisibility(View.GONE); + } + } } diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java index 73a28ef780..6ec44ab592 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolLayer.java @@ -78,6 +78,7 @@ public class MeasurementToolLayer extends OsmandMapLayer { void clearPoints() { measurementPoints.clear(); + view.refreshMap(); } @Override diff --git a/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapInfoWidgetsFactory.java b/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapInfoWidgetsFactory.java index f77dff5a9d..d0911e299d 100644 --- a/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapInfoWidgetsFactory.java +++ b/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapInfoWidgetsFactory.java @@ -46,6 +46,7 @@ public class MapInfoWidgetsFactory { CONTEXT_MENU, TRACK_DETAILS, DISCOUNT, + MEASUREMENT_TOOL } public TextInfoWidget createAltitudeControl(final MapActivity map) {