From 7f93abc33209081d58c2df9c8efdaf4018305006 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Sat, 14 Mar 2015 01:02:35 +0100 Subject: [PATCH] Fix issues --- OsmAnd/res/drawable/btn_round_trans.xml | 15 + OsmAnd/res/layout/map_hud_bottom.xml | 121 +++++--- OsmAnd/res/values/sizes.xml | 6 + .../net/londatiga/android/QuickAction.java | 8 +- .../osmand/plus/dashboard/DashboardOnMap.java | 1 + .../osmand/plus/views/MapControlsLayer.java | 246 +++++++++++---- .../plus/views/controls/MapMenuControls.java | 139 --------- .../plus/views/controls/MapZoomControls.java | 288 ------------------ .../plus/views/controls/RulerControl.java | 30 +- 9 files changed, 312 insertions(+), 542 deletions(-) create mode 100644 OsmAnd/res/drawable/btn_round_trans.xml delete mode 100644 OsmAnd/src/net/osmand/plus/views/controls/MapMenuControls.java delete mode 100644 OsmAnd/src/net/osmand/plus/views/controls/MapZoomControls.java diff --git a/OsmAnd/res/drawable/btn_round_trans.xml b/OsmAnd/res/drawable/btn_round_trans.xml new file mode 100644 index 0000000000..24682aaa11 --- /dev/null +++ b/OsmAnd/res/drawable/btn_round_trans.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/map_hud_bottom.xml b/OsmAnd/res/layout/map_hud_bottom.xml index 97c1d72d54..51ff0465bd 100644 --- a/OsmAnd/res/layout/map_hud_bottom.xml +++ b/OsmAnd/res/layout/map_hud_bottom.xml @@ -2,13 +2,64 @@ + android:layout_gravity="bottom" + android:orientation="vertical" > + + + + + + + + + + + + + + @@ -62,7 +113,7 @@ android:src="@drawable/ic_action_remove_light" /> - - - - + + - - - - + + + android:textStyle="bold" /> - + + android:layout_gravity="bottom" + android:background="@drawable/btn_flat" + android:visibility="gone" > + android:gravity="center" > 16dp 48dp + + 80dp + 18sp 60dp 54dp 40dp 48dp + 52dp + 85dp 24dp 32dp 80dp 15dp 4dp + 2dp 4dp 3dp 1px diff --git a/OsmAnd/src/net/londatiga/android/QuickAction.java b/OsmAnd/src/net/londatiga/android/QuickAction.java index 3f4f505f3c..d95e2427fe 100644 --- a/OsmAnd/src/net/londatiga/android/QuickAction.java +++ b/OsmAnd/src/net/londatiga/android/QuickAction.java @@ -48,6 +48,7 @@ public class QuickAction extends CustomPopupWindow { private boolean animateTrack; private ViewGroup mTrack; private ArrayList actionList; + private boolean top; /** * Constructor @@ -85,6 +86,11 @@ public class QuickAction extends CustomPopupWindow { animStyle = ANIM_AUTO; animateTrack = true; } + + public void setOnAnchorOnTop(boolean top) { + this.top = top; + + } /** * Animate track @@ -150,7 +156,7 @@ public class QuickAction extends CustomPopupWindow { boolean onTop = true; // display on bottom - if (rootHeight > anchor.getTop()) { + if (rootHeight > anchor.getTop() || onTop) { yPos = anchorRect.bottom; onTop = false; } diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java b/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java index 8e4b14d554..3388e9e0c7 100644 --- a/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java +++ b/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java @@ -291,6 +291,7 @@ public class DashboardOnMap { if(!routingHelper.isFollowingMode() && !routingHelper.isRoutePlanningMode()) { mapActivity.getMapActions().enterRoutePlanningMode(null, null, false); } else { + mapActivity.getRoutingHelper().setRoutePlanningMode(true); mapActivity.getMapViewTrackingUtilities().switchToRoutePlanningMode(); mapActivity.refreshMap(); } diff --git a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java index a1d6202396..69cc64dd47 100644 --- a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java @@ -1,10 +1,17 @@ package net.osmand.plus.views; +import gnu.trove.list.array.TIntArrayList; + import java.util.ArrayList; import java.util.List; +import net.londatiga.android.ActionItem; +import net.londatiga.android.QuickAction; +import net.osmand.core.android.MapRendererContext; import net.osmand.data.RotatedTileBox; +import net.osmand.plus.ApplicationMode; import net.osmand.plus.OsmandApplication; +import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandSettings; import net.osmand.plus.OsmandSettings.CommonPreference; import net.osmand.plus.R; @@ -13,19 +20,18 @@ import net.osmand.plus.routing.RoutingHelper; import net.osmand.plus.views.controls.MapControls; import net.osmand.plus.views.controls.MapRouteInfoControl; import net.osmand.plus.views.controls.MapRoutePreferencesControl; -import net.osmand.plus.views.controls.MapZoomControls; +import net.osmand.plus.views.corenative.NativeCoreContext; +import android.app.AlertDialog; +import android.content.DialogInterface; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.PointF; import android.graphics.drawable.Drawable; import android.os.Handler; -import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; -import android.view.ViewGroup.LayoutParams; -import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; @@ -36,8 +42,6 @@ public class MapControlsLayer extends OsmandMapLayer { private static final int TIMEOUT_TO_SHOW_BUTTONS = 5000; - - public MapHudButton createHudButton(View iv, int resId) { MapHudButton mc = new MapHudButton(); mc.iv = iv; @@ -70,11 +74,18 @@ public class MapControlsLayer extends OsmandMapLayer { private static long startCounter; private Runnable delayStart; private Handler showUIHandler; + private ImageView appModeIcon; + private TextView zoomText; + private OsmandMapTileView mapView; + private OsmandApplication app; + private View mapAppModeShadow; public MapControlsLayer(MapActivity activity) { this.mapActivity = activity; + app = activity.getMyApplication(); settings = activity.getMyApplication().getSettings(); - + mapView = mapActivity.getMapView(); + } @Override @@ -85,18 +96,17 @@ public class MapControlsLayer extends OsmandMapLayer { @Override public void initLayer(final OsmandMapTileView view) { scaleCoefficient = view.getScaleCoefficient(); - FrameLayout parent = getParent(); // TODO // rulerControl = init(new RulerControl(zoomControls, mapActivity, showUIHandler, scaleCoefficient), parent, // rightGravity); showUIHandler = new Handler(); - initTransparencyBar(view, parent); + initTransparencyBar(); initZooms(); initControls(); initRouteControls(); initTopControls(); } - + private class CompassDrawable extends Drawable { private Drawable original; @@ -112,33 +122,33 @@ public class MapControlsLayer extends OsmandMapLayer { original.draw(canvas); canvas.restore(); } - + @Override public int getMinimumHeight() { return original.getMinimumHeight(); } - + @Override public int getMinimumWidth() { return original.getMinimumWidth(); } - + @Override public int getIntrinsicHeight() { return original.getIntrinsicHeight(); } - + @Override public int getIntrinsicWidth() { return original.getIntrinsicWidth(); } - + @Override public void setChangingConfigurations(int configs) { super.setChangingConfigurations(configs); original.setChangingConfigurations(configs); } - + @Override public void setBounds(int left, int top, int right, int bottom) { super.setBounds(left, top, right, bottom); @@ -175,10 +185,10 @@ public class MapControlsLayer extends OsmandMapLayer { }); View compass = mapActivity.findViewById(R.id.map_compass_button); -// protected void onDraw(Canvas canvas) { - // } - compassHud = createHudButton((ImageView) compass, R.drawable.map_compass).setIconColorId(0) - .setBg(R.drawable.btn_inset_circle, R.drawable.btn_inset_circle_night); + // protected void onDraw(Canvas canvas) { + // } + compassHud = createHudButton((ImageView) compass, R.drawable.map_compass).setIconColorId(0).setBg( + R.drawable.btn_inset_circle, R.drawable.btn_inset_circle_night); compassHud.compass = true; controls.add(compassHud); compass.setOnClickListener(new View.OnClickListener() { @@ -245,7 +255,7 @@ public class MapControlsLayer extends OsmandMapLayer { public void onClick(View v) { notifyClicked(); RoutingHelper routingHelper = mapActivity.getMyApplication().getRoutingHelper(); - if(!routingHelper.isFollowingMode() && !routingHelper.isRoutePlanningMode()) { + if (!routingHelper.isFollowingMode() && !routingHelper.isRoutePlanningMode()) { mapActivity.getMapActions().enterRoutePlanningMode(null, null, false); } else { startNavigation(); @@ -290,6 +300,16 @@ public class MapControlsLayer extends OsmandMapLayer { } } }); + mapAppModeShadow = mapActivity.findViewById(R.id.map_app_mode_shadow); + mapAppModeShadow.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + onApplicationModePress(v); + } + }); + appModeIcon = (ImageView) mapActivity.findViewById(R.id.map_app_mode_icon); + zoomText = (TextView) mapActivity.findViewById(R.id.map_app_mode_text); View routePlanButton = mapActivity.findViewById(R.id.map_route_info_button); controls.add(createHudButton((ImageView) routePlanButton, R.drawable.ic_action_gdirections_dark).setBg( @@ -298,9 +318,14 @@ public class MapControlsLayer extends OsmandMapLayer { @Override public void onClick(View v) { notifyClicked(); - mapActivity.getRoutingHelper().setRoutePlanningMode(true); - mapActivity.getMapViewTrackingUtilities().switchToRoutePlanningMode(); - mapActivity.refreshMap(); + RoutingHelper routingHelper = mapActivity.getRoutingHelper(); + if (!routingHelper.isFollowingMode() && !routingHelper.isRoutePlanningMode()) { + mapActivity.getMapActions().enterRoutePlanningMode(null, null, false); + } else { + mapActivity.getRoutingHelper().setRoutePlanningMode(true); + mapActivity.getMapViewTrackingUtilities().switchToRoutePlanningMode(); + mapActivity.refreshMap(); + } } }); @@ -322,11 +347,10 @@ public class MapControlsLayer extends OsmandMapLayer { } }); - final View.OnLongClickListener listener = MapZoomControls.getOnClickMagnifierListener(view); + final View.OnLongClickListener listener = MapControlsLayer.getOnClickMagnifierListener(view); zoomInButton.setOnLongClickListener(listener); View zoomOutButton = mapActivity.findViewById(R.id.map_zoom_out_button); - controls.add(createHudButton((ImageView) zoomOutButton, R.drawable.ic_action_zoom_out) - .setRoundTransparent()); + controls.add(createHudButton((ImageView) zoomOutButton, R.drawable.ic_action_zoom_out).setRoundTransparent()); zoomOutButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -363,11 +387,11 @@ public class MapControlsLayer extends OsmandMapLayer { startCounter = 0; } - + public void startCounter() { OsmandSettings settings = mapActivity.getMyApplication().getSettings(); int del = settings.DELAY_TO_START_NAVIGATION.get(); - if(del <= 0) { + if (del <= 0) { return; } if (startCounter <= 0) { @@ -388,7 +412,7 @@ public class MapControlsLayer extends OsmandMapLayer { }; delayStart.run(); } - + } protected void notifyClicked(MapControls m) { @@ -440,20 +464,33 @@ public class MapControlsLayer extends OsmandMapLayer { backToLocationControl.setIconColorId(R.color.color_white); } - menuControl - .setIconResId(mapActivity.getMyApplication().getSettings().USE_DASHBOARD_INSTEAD_OF_DRAWER.get() ? R.drawable.ic_dashboard_dark - : R.drawable.ic_navigation_drawer); + menuControl.setIconResId(settings.USE_DASHBOARD_INSTEAD_OF_DRAWER.get() ? R.drawable.ic_dashboard_dark + : R.drawable.ic_navigation_drawer); + if(routeFollowingMode || routePlanningMode) { + mapAppModeShadow.setVisibility(View.GONE); + } else { + mapAppModeShadow.setVisibility(View.VISIBLE); + if (!mapView.isZooming() || !OsmandPlugin.isDevelopment()) { + zoomText.setVisibility(View.GONE); + appModeIcon.setVisibility(View.VISIBLE); + appModeIcon.setImageResource(settings.getApplicationMode().getSmallIcon(isNight)); + } else { + zoomText.setVisibility(View.VISIBLE); + appModeIcon.setVisibility(View.GONE); + zoomText.setText(getZoomLevel(tileBox)); + } + } optionsRouteControl.setIconResId(settings.getApplicationMode().getSmallIcon(true)); int vis = showRouteCalculationControls ? View.VISIBLE : View.GONE; if (showRouteCalculationControls) { ((TextView) routeGoControl.iv).setTextColor(textColor); - final String text ; + final String text; if (startCounter > 0) { int get = (int) ((startCounter - System.currentTimeMillis()) / 1000l); text = mapActivity.getString(R.string.shared_string_go) + " (" + get + ")"; } else { - text = mapActivity.getString(R.string.shared_string_go) ; + text = mapActivity.getString(R.string.shared_string_go); } ((TextView) routeGoControl.iv).setText(text); } @@ -461,8 +498,9 @@ public class MapControlsLayer extends OsmandMapLayer { if (routePreparationLayout.getVisibility() != vis) { routePreparationLayout.setVisibility(vis); mapRouteInfoControlDialog.setVisible(showRouteCalculationControls); - if(showRouteCalculationControls) { - if(!mapActivity.getRoutingHelper().isFollowingMode() && !mapActivity.getRoutingHelper().isPauseNavigation()) { + if (showRouteCalculationControls) { + if (!mapActivity.getRoutingHelper().isFollowingMode() + && !mapActivity.getRoutingHelper().isPauseNavigation()) { startCounter(); } } else { @@ -474,7 +512,7 @@ public class MapControlsLayer extends OsmandMapLayer { if (mapRotate != cachedRotate) { cachedRotate = mapRotate; // Aply animation to image view - compassHud.iv.invalidate(); + compassHud.iv.invalidate(); } if (settings.ROTATE_MAP.get() == OsmandSettings.ROTATE_MAP_NONE) { compassHud.setIconResId(isNight ? R.drawable.map_compass_niu_white : R.drawable.map_compass_niu); @@ -489,12 +527,9 @@ public class MapControlsLayer extends OsmandMapLayer { } } - private FrameLayout getParent() { - return (FrameLayout) mapActivity.findViewById(R.id.MapButtons); - } public boolean onSingleTap(PointF point, RotatedTileBox tileBox) { - if(mapRouteInfoControlDialog.onSingleTap(point, tileBox)) { + if (mapRouteInfoControlDialog.onSingleTap(point, tileBox)) { return true; } stopCounter(); @@ -508,16 +543,9 @@ public class MapControlsLayer extends OsmandMapLayer { } // /////////////// Transparency bar ///////////////////////// - private void initTransparencyBar(final OsmandMapTileView view, FrameLayout parent) { - int minimumHeight = view.getResources().getDrawable(R.drawable.map_zoom_in).getMinimumHeight(); - android.widget.FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, - LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER); - params.setMargins(0, 0, 0, minimumHeight + 3); - transparencyBarLayout = new LinearLayout(view.getContext()); - transparencyBarLayout.setVisibility(settingsToTransparency != null ? View.VISIBLE : View.GONE); - parent.addView(transparencyBarLayout, params); - - transparencyBar = new SeekBar(view.getContext()); + private void initTransparencyBar() { + transparencyBarLayout = (LinearLayout) mapActivity.findViewById(R.id.map_transparency_layout); + transparencyBar = (SeekBar) mapActivity.findViewById(R.id.map_transparency_seekbar); transparencyBar.setMax(255); if (settingsToTransparency != null) { transparencyBar.setProgress(settingsToTransparency.get()); @@ -540,12 +568,7 @@ public class MapControlsLayer extends OsmandMapLayer { } } }); - android.widget.LinearLayout.LayoutParams prms = new LinearLayout.LayoutParams((int) (scaleCoefficient * 100), - LayoutParams.WRAP_CONTENT); - transparencyBarLayout.addView(transparencyBar, prms); - ImageButton imageButton = new ImageButton(view.getContext()); - prms = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); - prms.setMargins((int) (2 * scaleCoefficient), (int) (2 * scaleCoefficient), 0, 0); + ImageButton imageButton = (ImageButton) mapActivity.findViewById(R.id.map_transparency_hide); imageButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -553,9 +576,6 @@ public class MapControlsLayer extends OsmandMapLayer { hideTransparencyBar(settingsToTransparency); } }); - imageButton.setContentDescription(view.getContext().getString(R.string.shared_string_close)); - imageButton.setBackgroundResource(R.drawable.headliner_close); - transparencyBarLayout.addView(imageButton, prms); } public void showTransparencyBar(CommonPreference transparenPreference) { @@ -575,7 +595,6 @@ public class MapControlsLayer extends OsmandMapLayer { // TODO } - private class MapHudButton { View iv; int bgDark; @@ -637,10 +656,12 @@ public class MapControlsLayer extends OsmandMapLayer { iv.setBackgroundDrawable(ctx.getResources().getDrawable(night ? bgDark : bgLight)); } if (iv instanceof ImageView) { - if(compass) { - ((ImageView) iv).setImageDrawable(new CompassDrawable(ctx.getIconsCache().getIcon(resId, nightMode ? resDark : resLight))); + if (compass) { + ((ImageView) iv).setImageDrawable(new CompassDrawable(ctx.getIconsCache().getIcon(resId, + nightMode ? resDark : resLight))); } else { - ((ImageView) iv).setImageDrawable(ctx.getIconsCache().getIcon(resId, nightMode ? resDark : resLight)); + ((ImageView) iv).setImageDrawable(ctx.getIconsCache() + .getIcon(resId, nightMode ? resDark : resLight)); } } else if (iv instanceof TextView) { ((TextView) iv).setCompoundDrawablesWithIntrinsicBounds( @@ -649,4 +670,99 @@ public class MapControlsLayer extends OsmandMapLayer { } } + + private void onApplicationModePress(View v) { + final QuickAction mQuickAction = new QuickAction(v); + mQuickAction.setOnAnchorOnTop(true); + List vls = ApplicationMode.values(mapActivity.getMyApplication().getSettings()); + final ApplicationMode[] modes = vls.toArray(new ApplicationMode[vls.size()]); + int[] icons = new int[vls.size()]; + int[] values = new int[vls.size()]; + for (int k = 0; k < modes.length; k++) { + icons[k] = modes[k].getSmallIcon(false); + values[k] = modes[k].getStringResource(); + } + for (int i = 0; i < modes.length; i++) { + final ActionItem action = new ActionItem(); + action.setTitle(mapActivity.getResources().getString(values[i])); + action.setIcon(mapActivity.getResources().getDrawable(icons[i])); + final int j = i; + action.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + mapActivity.getMyApplication().getSettings().APPLICATION_MODE.set(modes[j]); + mQuickAction.dismiss(); + } + }); + mQuickAction.addActionItem(action); + } + mQuickAction.setAnimStyle(QuickAction.ANIM_AUTO); + mQuickAction.show(); + } + + private String getZoomLevel(RotatedTileBox tb) { + String zoomText = tb.getZoom() + ""; + double frac = tb.getMapDensity(); + if (frac != 0) { + int ifrac = (int) (frac * 10); + zoomText += " "; + zoomText += Math.abs(ifrac) / 10; + if (ifrac % 10 != 0) { + zoomText += "." + Math.abs(ifrac) % 10; + } + } + return zoomText; + } + + public static View.OnLongClickListener getOnClickMagnifierListener(final OsmandMapTileView view) { + final View.OnLongClickListener listener = new View.OnLongClickListener() { + + @Override + public boolean onLongClick(View notUseCouldBeNull) { + final OsmandSettings.OsmandPreference mapDensity = view.getSettings().MAP_DENSITY; + final AlertDialog.Builder bld = new AlertDialog.Builder(view.getContext()); + int p = (int) (mapDensity.get() * 100); + final TIntArrayList tlist = new TIntArrayList(new int[] { 33, 50, 75, 100, 150, 200, 300, 400 }); + final List values = new ArrayList(); + int i = -1; + for (int k = 0; k <= tlist.size(); k++) { + final boolean end = k == tlist.size(); + if (i == -1) { + if ((end || p < tlist.get(k))) { + values.add(p + "%"); + i = k; + } else if (p == tlist.get(k)) { + i = k; + } + + } + if (k < tlist.size()) { + values.add(tlist.get(k) + "%"); + } + } + if (values.size() != tlist.size()) { + tlist.insert(i, p); + } + + bld.setTitle(R.string.map_magnifier); + bld.setSingleChoiceItems(values.toArray(new String[values.size()]), i, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + int p = tlist.get(which); + mapDensity.set(p / 100.0f); + view.setComplexZoom(view.getZoom(), view.getSettingsMapDensity()); + MapRendererContext mapContext = NativeCoreContext.getMapRendererContext(); + if (mapContext != null) { + mapContext.updateMapSettings(); + } + dialog.dismiss(); + } + }); + bld.show(); + return true; + } + }; + return listener; + } } diff --git a/OsmAnd/src/net/osmand/plus/views/controls/MapMenuControls.java b/OsmAnd/src/net/osmand/plus/views/controls/MapMenuControls.java deleted file mode 100644 index df1490434d..0000000000 --- a/OsmAnd/src/net/osmand/plus/views/controls/MapMenuControls.java +++ /dev/null @@ -1,139 +0,0 @@ -package net.osmand.plus.views.controls; - -import java.util.List; - -import net.londatiga.android.ActionItem; -import net.londatiga.android.QuickAction; -import net.osmand.data.RotatedTileBox; -import net.osmand.plus.ApplicationMode; -import net.osmand.plus.R; -import net.osmand.plus.activities.MapActivity; -import net.osmand.plus.views.OsmandMapLayer.DrawSettings; -import net.osmand.plus.views.OsmandMapTileView; -import android.graphics.Canvas; -import android.graphics.PointF; -import android.graphics.drawable.Drawable; -import android.os.Handler; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.Button; -import android.widget.FrameLayout; - -public class MapMenuControls extends MapControls { - private Button backToMenuButton; - private Drawable modeShadow; - private Drawable cacheAppModeIcon = null; - private ApplicationMode cacheApplicationMode = null; - - - public MapMenuControls(MapActivity mapActivity, Handler showUIHandler, float scaleCoefficient) { - super(mapActivity, showUIHandler, scaleCoefficient); - } - - private void initBackToMenuButton(final OsmandMapTileView view, FrameLayout parent) { - backToMenuButton = addButton(parent, R.string.backToMenu, R.drawable.map_btn_menu); - modeShadow = view.getResources().getDrawable(R.drawable.zoom_background); - backToMenuButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - // double lat = activity.getMapView().getLatitude(); - // double lon = activity.getMapView().getLongitude(); - // MainMenuActivity.backToMainMenuDialog(activity, new LatLon(lat, lon)); - notifyClicked(); - if(mapActivity.getMyApplication().getSettings().USE_DASHBOARD_INSTEAD_OF_DRAWER.get()) { - mapActivity.getDashboard().setDashboardVisibility(true); - } else { - mapActivity.getMapActions().onDrawerBack(); - mapActivity.getMapActions().toggleDrawer(); - } - } - }); - } - - @Override - public void showControls(FrameLayout layout) { - initBackToMenuButton(mapActivity.getMapView(), layout); - } - - @Override - public void hideControls(FrameLayout layout) { - removeButton(layout, backToMenuButton); - } - - @Override - public void onDraw(Canvas canvas, RotatedTileBox tileBox, DrawSettings nightMode) { - if(mapActivity.findViewById(R.id.MapButtons).getVisibility() == View.GONE) { - return; - } - drawApplicationMode(canvas, nightMode != null && nightMode.isNightMode()); - } - - - private void drawApplicationMode(Canvas canvas, boolean nightMode) { - OsmandMapTileView view = mapActivity.getMapView(); - ApplicationMode appMode = view.getSettings().getApplicationMode(); - if(appMode != cacheApplicationMode){ - modeShadow.setBounds(backToMenuButton.getLeft() + (int) (2 * scaleCoefficient), backToMenuButton.getTop() - (int) (24 * scaleCoefficient), - backToMenuButton.getRight() - (int) (4 * scaleCoefficient), backToMenuButton.getBottom()); - cacheAppModeIcon = view.getResources().getDrawable(appMode.getSmallIcon(nightMode)); - int l = modeShadow.getBounds().left + (modeShadow.getBounds().width() - cacheAppModeIcon.getMinimumWidth()) / 2; - int t = (int) (modeShadow.getBounds().top + 2 * scaleCoefficient); - cacheAppModeIcon.setBounds(l, t, l + cacheAppModeIcon.getMinimumWidth(), t + cacheAppModeIcon.getMinimumHeight()); - } - modeShadow.draw(canvas); - if(cacheAppModeIcon != null){ - cacheAppModeIcon.draw(canvas); - } - - } - - @Override - public boolean onSingleTap(PointF point, RotatedTileBox tileBox) { - if (modeShadow.getBounds().contains((int) point.x, (int) point.y)) { - onApplicationModePress(); - return true; - } - return false; - } - - - - private void onApplicationModePress() { - final QuickAction mQuickAction = new QuickAction(backToMenuButton); - List vls = ApplicationMode.values(mapActivity.getMyApplication().getSettings()); - final ApplicationMode[] modes = vls.toArray(new ApplicationMode[vls.size()]); - int[] icons = new int[vls.size()]; - int[] values = new int[vls.size()]; - for(int k = 0; k < modes.length; k++) { - icons[k] = modes[k].getSmallIcon(false); - values[k] = modes[k].getStringResource(); - } - for (int i = 0; i < modes.length; i++) { - final ActionItem action = new ActionItem(); - action.setTitle(mapActivity.getResources().getString(values[i])); - action.setIcon(mapActivity.getResources().getDrawable(icons[i])); - final int j = i; - action.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - mapActivity.getMyApplication().getSettings().APPLICATION_MODE.set(modes[j]); - mQuickAction.dismiss(); - } - }); - mQuickAction.addActionItem(action); - } - mQuickAction.setAnimStyle(QuickAction.ANIM_AUTO); - mQuickAction.show(); - } - - public int getWidth() { - if (width == 0) { - Drawable buttonDrawable = mapActivity.getResources().getDrawable(R.drawable.map_btn_menu); - width = buttonDrawable.getMinimumWidth(); - } - return width ; - } - - - -} diff --git a/OsmAnd/src/net/osmand/plus/views/controls/MapZoomControls.java b/OsmAnd/src/net/osmand/plus/views/controls/MapZoomControls.java deleted file mode 100644 index 9721b59418..0000000000 --- a/OsmAnd/src/net/osmand/plus/views/controls/MapZoomControls.java +++ /dev/null @@ -1,288 +0,0 @@ -package net.osmand.plus.views.controls; - -import gnu.trove.list.array.TIntArrayList; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; - -import net.osmand.core.android.MapRendererContext; -import net.osmand.core.android.MapRendererView; -import net.osmand.data.RotatedTileBox; -import net.osmand.plus.OsmAndConstants; -import net.osmand.plus.OsmandSettings; -import net.osmand.plus.R; -import net.osmand.plus.activities.MapActivity; -import net.osmand.plus.views.BaseMapLayer; -import net.osmand.plus.views.OsmandMapLayer.DrawSettings; -import net.osmand.plus.views.OsmandMapTileView; -import net.osmand.plus.views.ShadowText; -import net.osmand.plus.views.corenative.NativeCoreContext; -import android.app.AlertDialog; -import android.content.DialogInterface; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.PointF; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextPaint; -import android.view.View; -import android.widget.Button; -import android.widget.FrameLayout; - -public class MapZoomControls extends MapControls { - private static final int SHOW_ZOOM_LEVEL_MSG_ID = OsmAndConstants.UI_HANDLER_MAP_CONTROLS + 1; - private static final int SHOW_ZOOM_BUTTON_MSG_ID = OsmAndConstants.UI_HANDLER_MAP_CONTROLS + 2; - private static final int SHOW_ZOOM_LEVEL_DELAY = 1000; - private static final int SHOW_ZOOM_LEVEL_BUTTON_DELAY = 1500; - - private Button zoomInButton; - private Button zoomOutButton; - - private TextPaint zoomTextPaint; - private Drawable zoomShadow; - private Bitmap mapMagnifier; - private Paint bitmapPaint; - private boolean showZoomLevel = false; - private boolean showZoomLevelButton = false; - private OsmandMapTileView view; - - public MapZoomControls(MapActivity mapActivity, Handler showUIHandler, float scaleCoefficient) { - super(mapActivity, showUIHandler, scaleCoefficient); - view = mapActivity.getMapView(); - zoomTextPaint = new TextPaint(); - zoomTextPaint.setTextSize(18 * scaleCoefficient); - zoomTextPaint.setAntiAlias(true); - zoomTextPaint.setFakeBoldText(true); - } - - public boolean onSingleTap(PointF point, RotatedTileBox tileBox) { - if (isShowZoomLevel() && zoomShadow.getBounds().contains((int) point.x, (int) point.y)) { - getOnClickMagnifierListener(view).onLongClick(null); - return true; - } - return false; - } - - - @Override - protected void showControls(FrameLayout parent) { - int minimumWidth = view.getResources().getDrawable(R.drawable.map_zoom_in).getMinimumWidth(); - int minimumHeight = view.getResources().getDrawable(R.drawable.map_zoom_in).getMinimumWidth(); - vmargin = 0; - zoomInButton = addButton(parent, R.string.zoomIn, R.drawable.map_zoom_in); - if(isBottom()) { - zoomOutButton = addButton(parent, R.string.zoomOut, R.drawable.map_zoom_out, minimumWidth); - } else { - vmargin = minimumHeight - (minimumHeight / 6); - zoomOutButton = addButton(parent, R.string.zoomOut, R.drawable.map_zoom_out); - } - zoomInButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - notifyClicked(); - if (view.isZooming()) { - mapActivity.changeZoom(2, System.currentTimeMillis()); - } else { - mapActivity.changeZoom(1, System.currentTimeMillis()); - } - - } - }); - final View.OnLongClickListener listener = getOnClickMagnifierListener(view); - zoomInButton.setOnLongClickListener(listener); - zoomOutButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - long time = Calendar.getInstance().getTime().getTime(); - notifyClicked(); - mapActivity.changeZoom(-1, System.currentTimeMillis()); - } - }); - zoomOutButton.setOnLongClickListener(listener); - } - - @Override - public void initControls(FrameLayout parent) { - if(isBottom()) { - zoomShadow = view.getResources().getDrawable(R.drawable.zoom_background).mutate(); - } - mapMagnifier = BitmapFactory.decodeResource(view.getResources(), R.drawable.map_magnifier); - bitmapPaint = new Paint(); - } - - @Override - public void hideControls(FrameLayout layout) { - removeButton(layout, zoomInButton); - removeButton(layout, zoomOutButton); - } - - private void drawZoomLevel(Canvas canvas, RotatedTileBox tb, boolean drawZoomLevel) { - if (zoomShadow.getBounds().width() == 0) { - zoomShadow.setBounds(zoomInButton.getLeft() - 2, zoomInButton.getTop() - (int) (18 * scaleCoefficient), - zoomInButton.getRight(), zoomInButton.getBottom()); - } - zoomShadow.draw(canvas); - if (drawZoomLevel) { - String zoomText = tb.getZoom() + ""; - double frac = tb.getMapDensity(); - if (frac != 0) { - int ifrac = (int) (frac * 10); - zoomText += " "; - zoomText += Math.abs(ifrac) / 10; - if (ifrac % 10 != 0) { - zoomText += "." + Math.abs(ifrac) % 10; - } - } - float length = zoomTextPaint.measureText(zoomText); - - ShadowText.draw(zoomText, canvas, zoomInButton.getLeft() + (zoomInButton.getWidth() - length - 2) / 2, - zoomInButton.getTop() + 4 * scaleCoefficient, zoomTextPaint, shadowColor); - } else { - int size = (int) (16 * scaleCoefficient); - int top = (int) (zoomInButton.getTop() - size - 4 * scaleCoefficient); - int left = (int) (zoomInButton.getLeft() + (zoomInButton.getWidth() - mapMagnifier.getWidth() - 2 * scaleCoefficient) / 2); - // canvas density /2 ? size * 2 - canvas.drawBitmap(mapMagnifier, null, new Rect(left, top, left + size * 2, top + size * 2), bitmapPaint); - } - } - - @Override - public void onDraw(Canvas canvas, RotatedTileBox tileBox, DrawSettings nightMode) { - BaseMapLayer mainLayer = view.getMainLayer(); - boolean zoomInEnabled = mainLayer != null && tileBox.getZoom() < mainLayer.getMaximumShownMapZoom(); - boolean zoomOutEnabled = mainLayer != null && tileBox.getZoom() > mainLayer.getMinimumShownMapZoom(); - if (zoomInButton.isEnabled() != zoomInEnabled) { - zoomInButton.setEnabled(zoomInEnabled); - } - if (zoomOutButton.isEnabled() != zoomOutEnabled) { - zoomOutButton.setEnabled(zoomOutEnabled); - } - if (isBottom()) { - if (view.isZooming()) { - showZoomLevel = true; - showZoomLevelButton = false; - showUIHandler.removeMessages(SHOW_ZOOM_LEVEL_MSG_ID); - showUIHandler.removeMessages(SHOW_ZOOM_BUTTON_MSG_ID); - } else { - if (isShowZoomLevel() && view.getSettings().SHOW_RULER.get()) { - hideZoomLevelInTime(); - } - } - boolean drawZoomLevel = isShowZoomLevel() || !view.getSettings().SHOW_RULER.get(); - if (drawZoomLevel) { - drawZoomLevel(canvas, tileBox, !showZoomLevelButton); - } - } - } - - private void sendMessageToShowZoomLevel() { - Message msg = Message.obtain(showUIHandler, new Runnable() { - @Override - public void run() { - showZoomLevelButton = true; - sendMessageToShowZoomButton(); - view.refreshMap(); - } - - }); - msg.what = SHOW_ZOOM_LEVEL_MSG_ID; - showUIHandler.sendMessageDelayed(msg, SHOW_ZOOM_LEVEL_DELAY); - } - - private void sendMessageToShowZoomButton() { - Message msg = Message.obtain(showUIHandler, new Runnable() { - @Override - public void run() { - showZoomLevelButton = false; - showZoomLevel = false; - view.refreshMap(); - } - - }); - msg.what = SHOW_ZOOM_BUTTON_MSG_ID; - showUIHandler.sendMessageDelayed(msg, SHOW_ZOOM_LEVEL_BUTTON_DELAY); - } - - private void hideZoomLevelInTime() { - if (!showUIHandler.hasMessages(SHOW_ZOOM_LEVEL_MSG_ID) && !showUIHandler.hasMessages(SHOW_ZOOM_BUTTON_MSG_ID)) { - sendMessageToShowZoomLevel(); - } - } - - @Override - public void updateTextColor(int textColor, int shadowColor) { - super.updateTextColor(textColor, shadowColor); - zoomTextPaint.setColor(textColor); - } - - public boolean isShowZoomLevel() { - return showZoomLevel; - } - - public int getHeight() { - if (height == 0) { - Drawable buttonDrawable = view.getResources().getDrawable(R.drawable.map_zoom_in); - height = buttonDrawable.getMinimumHeight(); - } - return height; - } - - - public static View.OnLongClickListener getOnClickMagnifierListener(final OsmandMapTileView view) { - final View.OnLongClickListener listener = new View.OnLongClickListener() { - - @Override - public boolean onLongClick(View notUseCouldBeNull) { - final OsmandSettings.OsmandPreference mapDensity = view.getSettings().MAP_DENSITY; - final AlertDialog.Builder bld = new AlertDialog.Builder(view.getContext()); - int p = (int) (mapDensity.get() * 100); - final TIntArrayList tlist = new TIntArrayList(new int[] {33, 50, 75, 100, 150, 200, 300, 400 }); - final List values = new ArrayList(); - int i = -1; - for (int k = 0; k <= tlist.size(); k++) { - final boolean end = k == tlist.size(); - if (i == -1) { - if ((end || p < tlist.get(k))) { - values.add(p + "%"); - i = k; - } else if (p == tlist.get(k)) { - i = k; - } - - } - if (k < tlist.size()) { - values.add(tlist.get(k) + "%"); - } - } - if (values.size() != tlist.size()) { - tlist.insert(i, p); - } - - bld.setTitle(R.string.map_magnifier); - bld.setSingleChoiceItems(values.toArray(new String[values.size()]), i, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - int p = tlist.get(which); - mapDensity.set(p / 100.0f); - view.setComplexZoom(view.getZoom(), view.getSettingsMapDensity()); - MapRendererContext mapContext = NativeCoreContext.getMapRendererContext(); - if(mapContext != null) { - mapContext.updateMapSettings(); - } - dialog.dismiss(); - } - }); - bld.show(); - return true; - } - }; - return listener; - } - -} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/views/controls/RulerControl.java b/OsmAnd/src/net/osmand/plus/views/controls/RulerControl.java index d01f32d917..91ea3968b3 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/RulerControl.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/RulerControl.java @@ -27,15 +27,13 @@ public class RulerControl extends MapControls { double cacheRulerTileX = 0; double cacheRulerTileY = 0; float cacheRulerTextLen = 0; - MapZoomControls zoomControls; Drawable rulerDrawable; TextPaint rulerTextPaint; final static double screenRulerPercent = 0.25; boolean isNightRemembered = false; - public RulerControl(MapZoomControls zoomControls, MapActivity mapActivity, Handler showUIHandler, float scaleCoefficient) { + public RulerControl(MapActivity mapActivity, Handler showUIHandler, float scaleCoefficient) { super(mapActivity, showUIHandler, scaleCoefficient); - this.zoomControls = zoomControls; rulerTextPaint = new TextPaint(); rulerTextPaint.setTextSize(20 * scaleCoefficient); rulerTextPaint.setAntiAlias(true); @@ -58,10 +56,10 @@ public class RulerControl extends MapControls { @Override public void onDraw(Canvas canvas, RotatedTileBox tb, DrawSettings nightMode) { - if( (zoomControls.isVisible() && zoomControls.isShowZoomLevel()) || !mapActivity.getMyApplication().getSettings().SHOW_RULER.get()){ + if (!mapActivity.getMyApplication().getSettings().SHOW_RULER.get()) { return; } - if(mapActivity.findViewById(R.id.MapButtons).getVisibility() == View.GONE) { + if (mapActivity.findViewById(R.id.MapButtons).getVisibility() == View.GONE) { return; } OsmandMapTileView view = mapActivity.getMapView(); @@ -69,9 +67,10 @@ public class RulerControl extends MapControls { // update cache if (view.isZooming()) { cacheRulerText = null; - } else if (((isNight != isNightRemembered) || (tb.getZoom() != cacheRulerZoom) || - Math.abs(tb.getCenterTileX() - cacheRulerTileX) + Math.abs(tb.getCenterTileY() - cacheRulerTileY) > 1) && - tb.getPixWidth() > 0){ + } else if (((isNight != isNightRemembered) || (tb.getZoom() != cacheRulerZoom) || Math.abs(tb.getCenterTileX() + - cacheRulerTileX) + + Math.abs(tb.getCenterTileY() - cacheRulerTileY) > 1) + && tb.getPixWidth() > 0) { cacheRulerZoom = (tb.getZoom()); cacheRulerTileX = tb.getCenterTileX(); cacheRulerTileY = tb.getCenterTileY(); @@ -80,9 +79,11 @@ public class RulerControl extends MapControls { double roundedDist = OsmAndFormatter.calculateRoundedDist(dist * screenRulerPercent, view.getApplication()); int cacheRulerDistPix = (int) (pixDensity * roundedDist); - cacheRulerText = ShadowText.create(OsmAndFormatter.getFormattedDistance((float) roundedDist, view.getApplication())); + cacheRulerText = ShadowText.create(OsmAndFormatter.getFormattedDistance((float) roundedDist, + view.getApplication())); cacheRulerTextLen = rulerTextPaint.measureText(cacheRulerText.getText()); - rulerDrawable = (isNight ? mapActivity.getResources().getDrawable(R.drawable.ruler_night) : mapActivity.getResources().getDrawable(R.drawable.ruler)); + rulerDrawable = (isNight ? mapActivity.getResources().getDrawable(R.drawable.ruler_night) : mapActivity + .getResources().getDrawable(R.drawable.ruler)); Rect bounds = rulerDrawable.getBounds(); bounds.right = (int) (view.getWidth() - 7 * scaleCoefficient); bounds.left = bounds.right - cacheRulerDistPix; @@ -93,16 +94,17 @@ public class RulerControl extends MapControls { if (cacheRulerText != null) { Rect bounds = rulerDrawable.getBounds(); int bottom = (int) (view.getHeight() - vmargin); - if(bounds.bottom != bottom) { + if (bounds.bottom != bottom) { bounds.bottom = bottom; bounds.top = bounds.bottom - rulerDrawable.getMinimumHeight(); rulerDrawable.setBounds(bounds); rulerDrawable.invalidateSelf(); } rulerDrawable.draw(canvas); - int shadowColor = isNight == true ? mapActivity.getResources().getColor(R.color.widgettext_shadow_night) : Color.WHITE; - cacheRulerText.draw(canvas, bounds.left + (bounds.width() - cacheRulerTextLen) / 2, bounds.bottom - 8 * scaleCoefficient, - rulerTextPaint, shadowColor); + int shadowColor = isNight == true ? mapActivity.getResources().getColor(R.color.widgettext_shadow_night) + : Color.WHITE; + cacheRulerText.draw(canvas, bounds.left + (bounds.width() - cacheRulerTextLen) / 2, bounds.bottom - 8 + * scaleCoefficient, rulerTextPaint, shadowColor); } isNightRemembered = isNight; }