Update buttons

This commit is contained in:
Victor Shcherb 2015-03-12 00:35:13 +01:00
parent dcb3996a5b
commit 86bbdabb4c
8 changed files with 272 additions and 398 deletions

View file

@ -2,7 +2,7 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"><shape android:shape="oval">
<solid android:color="@color/color_myloc_distance" />
<solid android:color="@color/map_widget_blue_pressed" />
<stroke android:color="@color/map_widget_stroke" android:width="@dimen/map_button_stroke"/>
</shape></item>
<item><shape android:shape="oval">

View file

@ -11,11 +11,12 @@
<color name="list_item_background_dark_pressed">#be39464d</color>
<color name="map_widget_stroke">#333333</color>
<color name="map_widget_light">#aaffffff</color>
<color name="map_widget_light">#eeffffff</color>
<color name="map_widget_dark">#aa3f3f3f</color>
<color name="map_widget_light_trans">#eeffffff</color>
<color name="map_widget_light_trans">#88ffffff</color>
<color name="map_widget_light_pressed">#ddcccccc</color>
<color name="map_widget_blue">#3030FF</color>
<color name="map_widget_blue">#30A0FF</color>
<color name="map_widget_blue_pressed">#dd30D0FF</color>
<color name="actionbar_dark_color">#39464d</color>

View file

@ -55,7 +55,7 @@
<dimen name="map_widget_icon">24dp</dimen>
<dimen name="map_widget_height">32dp</dimen>
<dimen name="map_widget_image">80dp</dimen>
<dimen name="map_button_spacing">20dp</dimen>
<dimen name="map_button_spacing">18dp</dimen>
<dimen name="map_button_margin">4dp</dimen>
<dimen name="map_button_inset">4dp</dimen>
<dimen name="map_button_rect_rad">3dp</dimen>

View file

@ -151,7 +151,6 @@ public class OsmAndAppCustomization {
return osmandSettings.getExternalStorageDirectory();
}
public boolean showNavigationControls() { return true;}
public boolean onlyTourDownload() {
return false;

View file

@ -739,9 +739,5 @@ public class SherpafyCustomization extends OsmAndAppCustomization {
a.startActivityForResult(newIntent, 0);
}
@Override
public boolean showNavigationControls() {
return false;
}
}

View file

@ -48,7 +48,7 @@ import android.widget.SeekBar;
public class MapControlsLayer extends OsmandMapLayer {
private static final int TIMEOUT_TO_SHOW_BUTTONS = 5000;
private static class MapControl {
private static class MapHudButton {
ImageView iv;
int bgDark;
int bgLight;
@ -60,12 +60,12 @@ public class MapControlsLayer extends OsmandMapLayer {
boolean f = true;
public MapControl setRoundTransparent() {
public MapHudButton setRoundTransparent() {
setBg(R.drawable.btn_circle_trans);
return this;
}
public MapControl setBg(int dayBg, int nightBg) {
public MapHudButton setBg(int dayBg, int nightBg) {
bgDark = nightBg;
bgLight = dayBg;
f = true;
@ -73,15 +73,15 @@ public class MapControlsLayer extends OsmandMapLayer {
}
public MapControl setBg(int bg) {
public MapHudButton setBg(int bg) {
bgDark = bg;
bgLight = bg;
f = true;
return this;
}
public static MapControl create(ImageView iv, int resId) {
MapControl mc = new MapControl();
public static MapHudButton create(ImageView iv, int resId) {
MapHudButton mc = new MapHudButton();
mc.iv = iv;
mc.resId = resId;
mc.setBg(R.drawable.btn_circle);
@ -113,7 +113,9 @@ public class MapControlsLayer extends OsmandMapLayer {
}
f = false;
nightMode = night;
iv.setBackgroundDrawable(ctx.getResources().getDrawable(night ? bgDark : bgLight));
if(bgDark != 0 && bgLight != 0) {
iv.setBackgroundDrawable(ctx.getResources().getDrawable(night ? bgDark : bgLight));
}
iv.setImageDrawable(ctx.getIconsCache().getIcon(resId, nightMode ? resDark : resLight));
}
@ -121,25 +123,11 @@ public class MapControlsLayer extends OsmandMapLayer {
}
private List<MapControl> controls = new ArrayList<MapControlsLayer.MapControl>();
private List<MapHudButton> controls = new ArrayList<MapControlsLayer.MapHudButton>();
private final MapActivity mapActivity;
private int shadowColor = -1;
private MapZoomControls zoomControls;
private MapZoomControls zoomSideControls;
private MapMenuControls mapMenuControls;
private RulerControl rulerControl;
private SmallMapMenuControls mapSmallMenuControls;
private MapCancelControl mapCancelNavigationControl;
private MapRouteInfoControl mapInfoNavigationControl;
private MapNavigateControl mapNavigationControl;
private MapRoutePlanControl mapRoutePlanControl;
private MapRoutePreferencesControl mapAppModeControl;
private List<MapControls> allControls = new ArrayList<MapControls>();
// private RulerControl rulerControl;
// private List<MapControls> allControls = new ArrayList<MapControls>();
private float scaleCoefficient;
@ -148,11 +136,14 @@ public class MapControlsLayer extends OsmandMapLayer {
private static CommonPreference<Integer> settingsToTransparency;
private OsmandSettings settings;
private MapControl backToLocationControl;
private MapHudButton backToLocationControl;
private MapHudButton menuControl;
private View routePreparationLayout;
private MapRouteInfoControl mapRouteInfoControl;
private MapHudButton optionsRouteControl;
private MapControl menuControl;
private MapRoutePreferencesControl optionsRouteControlDialog;
public MapControlsLayer(MapActivity activity){
@ -173,62 +164,69 @@ public class MapControlsLayer extends OsmandMapLayer {
public void initLayer(final OsmandMapTileView view) {
scaleCoefficient = view.getScaleCoefficient();
FrameLayout parent = getParent();
Handler showUIHandler = new Handler();
int rightGravity = Gravity.RIGHT | Gravity.BOTTOM;
int leftGravity = Gravity.LEFT | Gravity.BOTTOM;
int rightCenterGravity = Gravity.RIGHT | Gravity.CENTER;
int leftCenterGravity = Gravity.LEFT | Gravity.CENTER;
initNewControls();
// default buttons
zoomControls = init(new MapZoomControls(mapActivity, showUIHandler, scaleCoefficient), parent,
rightGravity);
if (ScreenOrientationHelper.getScreenOrientation(mapActivity) == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){
zoomSideControls = init(new MapZoomControls(mapActivity, showUIHandler, scaleCoefficient), parent,
rightCenterGravity);
} else {
zoomSideControls = init(new MapZoomControls(mapActivity, showUIHandler, scaleCoefficient), parent,
leftCenterGravity);
}
mapMenuControls = init(new MapMenuControls(mapActivity, showUIHandler, scaleCoefficient), parent,
leftGravity);
mapRoutePlanControl = init(new MapRoutePlanControl(mapActivity, showUIHandler, scaleCoefficient), parent,
leftGravity);
// calculate route buttons
mapSmallMenuControls = init(new SmallMapMenuControls(mapActivity, showUIHandler, scaleCoefficient), parent,
leftGravity);
mapCancelNavigationControl = init(new MapCancelControl(mapActivity, showUIHandler, scaleCoefficient), parent,
leftGravity);
mapInfoNavigationControl = init(new MapRouteInfoControl(mapActivity.getMapLayers().getContextMenuLayer(),
mapActivity, showUIHandler, scaleCoefficient), parent,
leftGravity);
mapNavigationControl = init(new MapNavigateControl(mapInfoNavigationControl, mapActivity, showUIHandler, scaleCoefficient), parent,
rightGravity);
mapAppModeControl = init(new MapRoutePreferencesControl(mapActivity, showUIHandler, scaleCoefficient), parent,
rightGravity);
rulerControl = init(new RulerControl(zoomControls, mapActivity, showUIHandler, scaleCoefficient), parent,
rightGravity);
// TODO
// rulerControl = init(new RulerControl(zoomControls, mapActivity, showUIHandler, scaleCoefficient), parent,
// rightGravity);
initTransparencyBar(view, parent);
mapRoutePlanControl.setMargin(mapMenuControls.getWidth());
mapCancelNavigationControl.setMargin(mapSmallMenuControls.getWidth());
mapInfoNavigationControl.setMargin(mapSmallMenuControls.getWidth() + mapCancelNavigationControl.getWidth());
mapAppModeControl.setMargin(mapNavigationControl.getWidth());
;
}
private void initNewControls() {
initZooms();
initControls();
initRouteControls();
}
private void initRouteControls() {
routePreparationLayout = mapActivity.findViewById(R.id.map_route_preparation_layout);
View cancelRouteButton = mapActivity.findViewById(R.id.map_cancel_route_button);
controls.add(MapHudButton.create((ImageView) cancelRouteButton, R.drawable.ic_action_remove_dark));
cancelRouteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notifyClicked();
if(mapActivity.getRoutingHelper().isFollowingMode()) {
mapActivity.getMapActions().stopNavigationActionConfirm(mapActivity.getMapView());
} else {
mapActivity.getMapActions().stopNavigationWithoutConfirm();
}
}
});
mapRouteInfoControl = new MapRouteInfoControl(mapActivity.getMapLayers().getContextMenuLayer(),
mapActivity);
View waypointsButton = mapActivity.findViewById(R.id.map_waypoints_route_button);
controls.add(MapHudButton.create((ImageView) waypointsButton, R.drawable.ic_action_flage_dark));
waypointsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notifyClicked();
mapRouteInfoControl.showHideDialog();
}
});
View optionsRouteButton = mapActivity.findViewById(R.id.map_options_route_button);
optionsRouteControl = MapHudButton.create((ImageView) optionsRouteButton, settings.getApplicationMode().getSmallIcon(false));
optionsRouteControlDialog = new MapRoutePreferencesControl(mapActivity);
controls.add(optionsRouteControl);
optionsRouteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notifyClicked();
optionsRouteControlDialog.showAndHideDialog();
}
});
}
public void showDialog(){
mapRouteInfoControl.setShowDialog();
}
private void initControls() {
View backToLocation = mapActivity.findViewById(R.id.map_my_location_button);
backToLocationControl = MapControl.create((ImageView) backToLocation, R.drawable.ic_action_get_my_location).setBg(R.drawable.btn_circle_blue)
backToLocationControl = MapHudButton.create((ImageView) backToLocation, R.drawable.ic_action_get_my_location).setBg(R.drawable.btn_circle_blue)
;
controls.add(backToLocationControl);
@ -240,7 +238,7 @@ public class MapControlsLayer extends OsmandMapLayer {
});
View backToMenuButton = mapActivity.findViewById(R.id.map_menu_button);
menuControl = MapControl.create((ImageView) backToMenuButton, R.drawable.ic_navigation_drawer).
menuControl = MapHudButton.create((ImageView) backToMenuButton, R.drawable.ic_navigation_drawer).
setBg(R.drawable.btn_round, R.drawable.btn_round_night);
controls.add(menuControl);
backToMenuButton.setOnClickListener(new View.OnClickListener() {
@ -260,7 +258,7 @@ public class MapControlsLayer extends OsmandMapLayer {
});
View routePlanButton = mapActivity.findViewById(R.id.map_route_info_button);
controls.add(MapControl.create((ImageView) routePlanButton, R.drawable.ic_action_info_dark).
controls.add(MapHudButton.create((ImageView) routePlanButton, R.drawable.ic_action_info_dark).
setBg(R.drawable.btn_round, R.drawable.btn_round_night));
routePlanButton.setOnClickListener(new View.OnClickListener() {
@Override
@ -277,7 +275,7 @@ public class MapControlsLayer extends OsmandMapLayer {
private void initZooms() {
final OsmandMapTileView view = mapActivity.getMapView();
View zoomInButton = mapActivity.findViewById(R.id.map_zoom_in_button);
controls.add(MapControl.create((ImageView) zoomInButton, R.drawable.ic_action_zoom_in).setRoundTransparent()
controls.add(MapHudButton.create((ImageView) zoomInButton, R.drawable.ic_action_zoom_in).setRoundTransparent()
);
zoomInButton.setOnClickListener(new View.OnClickListener() {
@Override
@ -294,7 +292,7 @@ public class MapControlsLayer extends OsmandMapLayer {
final View.OnLongClickListener listener = MapZoomControls.getOnClickMagnifierListener(view);
zoomInButton.setOnLongClickListener(listener);
View zoomOutButton = mapActivity.findViewById(R.id.map_zoom_out_button);
controls.add(MapControl.create((ImageView) zoomOutButton, R.drawable.ic_action_zoom_out).setRoundTransparent()
controls.add(MapHudButton.create((ImageView) zoomOutButton, R.drawable.ic_action_zoom_out).setRoundTransparent()
);
zoomOutButton.setOnClickListener(new View.OnClickListener() {
@Override
@ -308,35 +306,25 @@ public class MapControlsLayer extends OsmandMapLayer {
public void startNavigation() {
if (mapNavigationControl == null) {
return;
}
mapNavigationControl.startNavigation();
// TODO
// if (mapNavigationControl == null) {
// return;
// }
// mapNavigationControl.startNavigation();
}
private <T extends MapControls> T init(final T c, FrameLayout parent, int gravity) {
c.setGravity(gravity);
c.init(parent);
allControls.add(c);
c.setNotifyClick(new Runnable() {
@Override
public void run() {
notifyClicked(c);
}
});
return c;
}
protected void notifyClicked(MapControls m) {
notifyClicked();
}
protected void notifyClicked() {
if(mapNavigationControl != null) {
mapNavigationControl.stopCounter();
}
// TODO
// if(mapNavigationControl != null) {
// mapNavigationControl.stopCounter();
// }
}
@Override
@ -348,50 +336,26 @@ public class MapControlsLayer extends OsmandMapLayer {
public void onDraw(Canvas canvas, RotatedTileBox tileBox, DrawSettings nightMode) {
boolean isNight = nightMode != null && nightMode.isNightMode();
int shadw = isNight ? Color.TRANSPARENT : Color.WHITE;
int textColor = isNight ? mapActivity.getResources().getColor(R.color.widgettext_night) : Color.BLACK ;
if(shadowColor != shadw) {
int textColor = isNight ? mapActivity.getResources().getColor(R.color.widgettext_night) : Color.BLACK;
if (shadowColor != shadw) {
shadowColor = shadw;
updatextColor(textColor, shadw, rulerControl, zoomControls, mapMenuControls);
// TODO
// updatextColor(textColor, shadw, rulerControl, zoomControls, mapMenuControls);
}
// default buttons
boolean routePlanningMode = false;
RoutingHelper rh = mapActivity.getRoutingHelper();
if(rh.isRoutePlanningMode() ) {
if (rh.isRoutePlanningMode()) {
routePlanningMode = true;
} else if((rh.isRouteCalculated() || rh.isRouteBeingCalculated()) &&
!rh.isFollowingMode()){
} else if ((rh.isRouteCalculated() || rh.isRouteBeingCalculated()) && !rh.isFollowingMode()) {
routePlanningMode = true;
}
boolean routeFollowingMode = !routePlanningMode && rh.isFollowingMode();
boolean showDefaultButtons = !routePlanningMode && (!routeFollowingMode || settings.SHOW_ZOOM_BUTTONS_NAVIGATION.get());
if(routePlanningMode) {
forceHideView(zoomControls);
forceHideView(mapMenuControls);
forceHideView(mapRoutePlanControl);
}
checkVisibilityAndDraw(showDefaultButtons, zoomControls, canvas, tileBox, nightMode);
checkVisibilityAndDraw(showDefaultButtons, mapMenuControls, canvas, tileBox, nightMode);
// show only on touch
checkVisibilityAndDraw(false, mapRoutePlanControl, canvas, tileBox, nightMode);
// route calculation buttons
boolean showRouteCalculationControls = routePlanningMode;
boolean showNavigationControls = mapActivity.getMyApplication().getAppCustomization().showNavigationControls();
checkVisibilityAndDraw(showRouteCalculationControls, mapSmallMenuControls, canvas, tileBox, nightMode);
checkVisibilityAndDraw(showNavigationControls && showRouteCalculationControls, mapCancelNavigationControl, canvas, tileBox, nightMode);
checkVisibilityAndDraw(showNavigationControls && showRouteCalculationControls, mapInfoNavigationControl, canvas, tileBox, nightMode);
checkVisibilityAndDraw(showNavigationControls && showRouteCalculationControls, mapAppModeControl, canvas, tileBox, nightMode);
checkVisibilityAndDraw(showRouteCalculationControls, mapNavigationControl, canvas, tileBox, nightMode);
checkVisibilityAndDraw(showRouteCalculationControls, zoomSideControls, canvas, tileBox, nightMode);
// the last one to check other controls visibility
int vmargin = mapNavigationControl.isVisible() || zoomControls.isVisible() ?
(zoomControls.getHeight() + zoomControls.getTotalVerticalMargin()) : 0;
rulerControl.setVerticalMargin(vmargin);
checkVisibilityAndDraw(true, rulerControl, canvas, tileBox, nightMode);
///////////////////////////////////////////////
boolean showDefaultButtons = !routePlanningMode
&& (!routeFollowingMode || settings.SHOW_ZOOM_BUTTONS_NAVIGATION.get());
// /////////////////////////////////////////////
// new update
boolean enabled = mapActivity.getMyApplication().getLocationProvider().getLastKnownLocation() != null;
boolean tracked = mapActivity.getMapViewTrackingUtilities().isMapLinkedToLocation();
@ -402,14 +366,19 @@ public class MapControlsLayer extends OsmandMapLayer {
} else {
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);
for(MapControl mc : controls) {
mc.update(mapActivity.getMyApplication(),
nightMode == null ? false : nightMode.isNightMode());
menuControl.setIconResId(mapActivity.getMyApplication().getSettings().USE_DASHBOARD_INSTEAD_OF_DRAWER.get() ? R.drawable.ic_dashboard_dark
: R.drawable.ic_navigation_drawer);
optionsRouteControl.setIconResId(settings.getApplicationMode().getSmallIcon(false));
int vis = showRouteCalculationControls? View.VISIBLE : View.GONE;
if(routePreparationLayout.getVisibility() != vis) {
routePreparationLayout.setVisibility(vis);
mapRouteInfoControl.setVisible(showRouteCalculationControls);
}
for (MapHudButton mc : controls) {
mc.update(mapActivity.getMyApplication(), nightMode == null ? false : nightMode.isNightMode());
}
}
@ -419,57 +388,32 @@ public class MapControlsLayer extends OsmandMapLayer {
m.updateTextColor(textColor, shadowColor);
}
}
private void checkVisibilityAndDraw(boolean visibility, MapControls controls, Canvas canvas,
RotatedTileBox tileBox, DrawSettings nightMode) {
if(visibility != controls.isVisible() ){
if(visibility) {
controls.show(getParent());
} else {
controls.hide(getParent());
}
}
if(controls.isVisible()) {
// FIXME
// controls.onDraw(canvas, tileBox, nightMode);
}
}
private FrameLayout getParent() {
return (FrameLayout) mapActivity.findViewById(R.id.MapButtons);
}
private void forceHideView(MapControls controls) {
if (controls.isVisible()) {
controls.forceHide(getParent());
}
}
@Override
public boolean onSingleTap(PointF point, RotatedTileBox tileBox) {
for(MapControls m : allControls) {
if(m.isVisible() && m.onSingleTap(point, tileBox)){
return true;
}
}
// TODO stop counter & show buttons
// for(MapControls m : allControls) {
// if(m.isVisible() && m.onSingleTap(point, tileBox)){
// return true;
// }
// }
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event, RotatedTileBox tileBox) {
if(!mapActivity.getRoutingHelper().isRoutePlanningMode() && mapActivity.getRoutingHelper().isFollowingMode()) {
if(!settings.SHOW_ZOOM_BUTTONS_NAVIGATION.get()) {
zoomControls.showWithDelay(getParent(), TIMEOUT_TO_SHOW_BUTTONS);
mapMenuControls.showWithDelay(getParent(), TIMEOUT_TO_SHOW_BUTTONS);
}
mapRoutePlanControl.showWithDelay(getParent(), TIMEOUT_TO_SHOW_BUTTONS);
}
for(MapControls m : allControls) {
if(m.isVisible() && m.onTouchEvent(event, tileBox)){
return true;
}
}
// TODO stop counter & show buttons
// if(!mapActivity.getRoutingHelper().isRoutePlanningMode() && mapActivity.getRoutingHelper().isFollowingMode()) {
// if(!settings.SHOW_ZOOM_BUTTONS_NAVIGATION.get()) {
// zoomControls.showWithDelay(getParent(), TIMEOUT_TO_SHOW_BUTTONS);
// mapMenuControls.showWithDelay(getParent(), TIMEOUT_TO_SHOW_BUTTONS);
// }
// mapRoutePlanControl.showWithDelay(getParent(), TIMEOUT_TO_SHOW_BUTTONS);
// }
return false;
}
@ -539,22 +483,10 @@ public class MapControlsLayer extends OsmandMapLayer {
}
public void shiftLayout(int height) {
FrameLayout parent = getParent();
parent.requestLayout();
for(MapControls mc : allControls) {
if(mc.isBottom()){
mc.setExtraVerticalMargin(height);
if( mc.isVisible()) {
mc.forceHide(parent);
mc.show(parent);
}
}
}
// TODO
}
public void showDialog(){
mapInfoNavigationControl.setShowDialog();
}
}

View file

@ -31,7 +31,6 @@ import android.content.Intent;
import android.graphics.Canvas;
import android.graphics.PointF;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
@ -45,11 +44,9 @@ import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
public class MapRouteInfoControl extends MapControls implements IRouteInformationListener {
private Button infoButton;
public class MapRouteInfoControl implements IRouteInformationListener {
public static int directionInfo = -1;
public static boolean controlVisible = false;
private final ContextMenuLayer contextMenu;
private final RoutingHelper routingHelper;
private OsmandMapTileView mapView;
@ -59,17 +56,17 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio
private boolean selectFromMapForTarget;
private boolean showDialog = false;
private MapActivity mapActivity;
public MapRouteInfoControl(ContextMenuLayer contextMenu,
MapActivity mapActivity, Handler showUIHandler, float scaleCoefficient) {
super(mapActivity, showUIHandler, scaleCoefficient);
MapActivity mapActivity) {
this.contextMenu = contextMenu;
this.mapActivity = mapActivity;
routingHelper = mapActivity.getRoutingHelper();
mapView = mapActivity.getMapView();
routingHelper.addListener(this);
}
@Override
public boolean onSingleTap(PointF point, RotatedTileBox tileBox) {
if(selectFromMapTouch) {
LatLon latlon = tileBox.getLatLonFromPixel(point.x, point.y);
@ -83,30 +80,31 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio
showDialog();
return true;
}
return super.onSingleTap(point, tileBox);
return false;
}
@Override
public void showControls(FrameLayout parent) {
infoButton = addButton(parent, R.string.route_info, R.drawable.map_btn_signpost);
if (showDialog){
if (getTargets().getPointToNavigate() == null){
showDialog();
}
showDialog = false;
}
controlVisible = true;
infoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notifyClicked();
if(dialog != null) {
hideDialog();
} else {
public void setVisible(boolean visible) {
if(visible) {
if (showDialog){
if (getTargets().getPointToNavigate() == null){
showDialog();
}
showDialog = false;
}
});
controlVisible = true;
} else {
hideDialog();
controlVisible = false;
}
}
public void showHideDialog() {
if(dialog != null) {
hideDialog();
} else {
showDialog();
}
}
private Dialog createDialog() {
@ -137,7 +135,8 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio
lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.BOTTOM;
lp.y = (int) (infoButton.getBottom() - infoButton.getTop() + scaleCoefficient * 5 + getExtraVerticalMargin());
// TODO
// lp.y = (int) (infoButton.getBottom() - infoButton.getTop() + scaleCoefficient * 5 + getExtraVerticalMargin());
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setAttributes(lp);
@ -253,26 +252,6 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio
return controlVisible;
}
@Override
public void hideControls(FrameLayout layout) {
removeButton(layout, infoButton);
hideDialog();
controlVisible = false;
}
@Override
public void onDraw(Canvas canvas, RotatedTileBox tileBox, DrawSettings nightMode) {
}
public int getWidth() {
if (width == 0) {
Drawable buttonDrawable = mapActivity.getResources().getDrawable(R.drawable.map_btn_info);
width = buttonDrawable.getMinimumWidth();
}
return width ;
}
private void attachListeners(final View mainView) {
final OsmandApplication ctx = mapActivity.getMyApplication();
final Button simulateRoute = (Button) mainView.findViewById(R.id.SimulateRoute);
@ -449,11 +428,9 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio
public void showDialog() {
dialog = createDialog();
dialog.show();
infoButton.setBackgroundResource(R.drawable.map_btn_signpost_p);
dialog.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dlg) {
infoButton.setBackgroundResource(R.drawable.map_btn_signpost);
dialog = null;
}
});
@ -463,7 +440,6 @@ public class MapRouteInfoControl extends MapControls implements IRouteInformatio
if (dialog != null) {
dialog.hide();
dialog = null;
infoButton.setBackgroundResource(R.drawable.map_btn_signpost);
}
}

View file

@ -9,14 +9,13 @@ import java.util.Set;
import net.osmand.CallbackWithObject;
import net.osmand.Location;
import net.osmand.data.LatLon;
import net.osmand.data.RotatedTileBox;
import net.osmand.plus.ApplicationMode;
import net.osmand.plus.GPXUtilities;
import net.osmand.plus.TargetPointsHelper;
import net.osmand.plus.GPXUtilities.GPXFile;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.OsmandSettings.CommonPreference;
import net.osmand.plus.R;
import net.osmand.plus.TargetPointsHelper;
import net.osmand.plus.TargetPointsHelper.TargetPoint;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.SettingsBaseActivity;
@ -25,7 +24,6 @@ import net.osmand.plus.activities.actions.AppModeDialog;
import net.osmand.plus.helpers.GpxUiHelper;
import net.osmand.plus.routing.RouteProvider.GPXRouteParamsBuilder;
import net.osmand.plus.routing.RouteProvider.RouteService;
import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
import net.osmand.router.GeneralRouter;
import net.osmand.router.GeneralRouter.RoutingParameter;
import net.osmand.router.GeneralRouter.RoutingParameterType;
@ -35,8 +33,6 @@ import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.graphics.Canvas;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
@ -47,120 +43,107 @@ import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
public class MapRoutePreferencesControl extends MapControls {
private ImageButton settingsAppModeButton;
public class MapRoutePreferencesControl {
private OsmandSettings settings;
private int cachedId;
private Dialog dialog;
private ArrayAdapter<LocalRoutingParameter> listAdapter;
public MapRoutePreferencesControl(MapActivity mapActivity, Handler showUIHandler, float scaleCoefficient) {
super(mapActivity, showUIHandler, scaleCoefficient);
private MapActivity mapActivity;
public MapRoutePreferencesControl(MapActivity mapActivity) {
this.mapActivity = mapActivity;
settings = mapActivity.getMyApplication().getSettings();
}
private static class LocalRoutingParameter {
public RoutingParameter routingParameter;
public String getText(MapActivity mapActivity) {
return SettingsBaseActivity.getRoutingStringPropertyName(mapActivity, routingParameter.getId(), routingParameter.getName());
return SettingsBaseActivity.getRoutingStringPropertyName(mapActivity, routingParameter.getId(),
routingParameter.getName());
}
public boolean isSelected(OsmandSettings settings) {
final CommonPreference<Boolean> property = settings.getCustomRoutingBooleanProperty(routingParameter.getId());
final CommonPreference<Boolean> property = settings.getCustomRoutingBooleanProperty(routingParameter
.getId());
return property.get();
}
public void setSelected(OsmandSettings settings, boolean isChecked) {
final CommonPreference<Boolean> property = settings.getCustomRoutingBooleanProperty(routingParameter.getId());
property.set(isChecked);
final CommonPreference<Boolean> property = settings.getCustomRoutingBooleanProperty(routingParameter
.getId());
property.set(isChecked);
}
}
private static class OtherLocalRoutingParameter extends LocalRoutingParameter {
public String text;
public boolean selected;
public int id;
public OtherLocalRoutingParameter(int id, String text, boolean selected) {
this.text = text;
this.selected = selected;
this.id = id;
}
@Override
public String getText(MapActivity mapActivity) {
return text;
}
@Override
public boolean isSelected(OsmandSettings settings) {
return selected;
}
@Override
public void setSelected(OsmandSettings settings, boolean isChecked) {
selected = isChecked;
}
}
@Override
public void showControls(FrameLayout parent) {
settingsAppModeButton = addImageButton(parent, R.string.route_preferences, R.drawable.map_btn_plain);
cachedId = 0;
settingsAppModeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notifyClicked();
if(dialog != null) {
dialog.hide();
public void showAndHideDialog() {
if (dialog != null) {
dialog.hide();
dialog = null;
} else {
dialog = showDialog();
dialog.show();
dialog.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dlg) {
dialog = null;
settingsAppModeButton.setBackgroundResource(R.drawable.map_btn_plain);
} else {
dialog = showDialog();
dialog.show();
settingsAppModeButton.setBackgroundResource(R.drawable.map_btn_plain_p);
dialog.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dlg) {
settingsAppModeButton.setBackgroundResource(R.drawable.map_btn_plain);
dialog = null;
}
});
}
}
});
});
}
}
private Dialog showDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(mapActivity);
View ll = createLayout();
builder.setView(ll);
//builder.setTitle(R.string.route_preferences);
Dialog dialog = builder.create();
dialog.setCanceledOnTouchOutside(true);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.BOTTOM;
lp.y = (int) (settingsAppModeButton.getBottom() - settingsAppModeButton.getTop() + scaleCoefficient * 5);
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setAttributes(lp);
return dialog;
AlertDialog.Builder builder = new AlertDialog.Builder(mapActivity);
View ll = createLayout();
builder.setView(ll);
// builder.setTitle(R.string.route_preferences);
Dialog dialog = builder.create();
dialog.setCanceledOnTouchOutside(true);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.BOTTOM;
// TODO
// lp.y = (int) (settingsAppModeButton.getBottom() - settingsAppModeButton.getTop() + scaleCoefficient * 5);
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setAttributes(lp);
return dialog;
}
private void updateGpxRoutingParameter(OtherLocalRoutingParameter gpxParam) {
GPXRouteParamsBuilder rp = mapActivity.getRoutingHelper().getCurrentGPXRoute();
boolean selected = gpxParam.isSelected(settings);
@ -174,17 +157,18 @@ public class MapRoutePreferencesControl extends MapControls {
Location end = ps.get(ps.size() - 1);
TargetPoint pn = tg.getPointToNavigate();
boolean update = false;
if (pn == null ||
MapUtils.getDistance(pn.point, new LatLon(first.getLatitude(), first.getLongitude())) < 10) {
if (pn == null
|| MapUtils.getDistance(pn.point, new LatLon(first.getLatitude(), first.getLongitude())) < 10) {
tg.navigateToPoint(new LatLon(end.getLatitude(), end.getLongitude()), false, -1);
update = true;
}
if (tg.getPointToStart() == null ||
MapUtils.getDistance(tg.getPointToStart().point, new LatLon(end.getLatitude(), end.getLongitude())) < 10) {
if (tg.getPointToStart() == null
|| MapUtils.getDistance(tg.getPointToStart().point,
new LatLon(end.getLatitude(), end.getLongitude())) < 10) {
tg.setStartPoint(new LatLon(first.getLatitude(), first.getLongitude()), false, null);
update = true;
}
if(update) {
if (update) {
tg.updateRouteAndReferesh(true);
}
}
@ -208,45 +192,47 @@ public class MapRoutePreferencesControl extends MapControls {
if (gpxParam.id == R.string.fast_route_mode) {
settings.FAST_ROUTE_MODE.set(selected);
}
if (gpxParam.id == R.string.speak_favorites){
if (gpxParam.id == R.string.speak_favorites) {
settings.ANNOUNCE_NEARBY_FAVORITES.set(selected);
}
}
private List<LocalRoutingParameter> getRoutingParameters(ApplicationMode am) {
List<LocalRoutingParameter> list = new ArrayList<LocalRoutingParameter>();
GPXRouteParamsBuilder rparams = mapActivity.getRoutingHelper().getCurrentGPXRoute();
boolean osmandRouter = settings.ROUTER_SERVICE.get() == RouteService.OSMAND ;
if(!osmandRouter) {
list.add(new OtherLocalRoutingParameter(R.string.calculate_osmand_route_without_internet,
getString(R.string.calculate_osmand_route_without_internet), settings.GPX_ROUTE_CALC_OSMAND_PARTS.get()));
list.add(new OtherLocalRoutingParameter(R.string.fast_route_mode,
getString(R.string.fast_route_mode), settings.FAST_ROUTE_MODE.get()));
boolean osmandRouter = settings.ROUTER_SERVICE.get() == RouteService.OSMAND;
if (!osmandRouter) {
list.add(new OtherLocalRoutingParameter(R.string.calculate_osmand_route_without_internet,
getString(R.string.calculate_osmand_route_without_internet), settings.GPX_ROUTE_CALC_OSMAND_PARTS
.get()));
list.add(new OtherLocalRoutingParameter(R.string.fast_route_mode, getString(R.string.fast_route_mode),
settings.FAST_ROUTE_MODE.get()));
return list;
}
if(rparams != null) {
if (rparams != null) {
GPXFile fl = rparams.getFile();
if (fl.hasRtePt()) {
list.add(new OtherLocalRoutingParameter(R.string.use_points_as_intermediates,
getString(R.string.use_points_as_intermediates), rparams.isUseIntermediatePointsRTE()));
}
list.add(new OtherLocalRoutingParameter(R.string.gpx_option_reverse_route,
list.add(new OtherLocalRoutingParameter(R.string.gpx_option_reverse_route,
getString(R.string.gpx_option_reverse_route), rparams.isReverse()));
if (!rparams.isUseIntermediatePointsRTE()) {
list.add(new OtherLocalRoutingParameter(R.string.gpx_option_from_start_point,
getString(R.string.gpx_option_from_start_point), rparams.isPassWholeRoute()));
list.add(new OtherLocalRoutingParameter(R.string.gpx_option_from_start_point,
getString(R.string.gpx_option_from_start_point), rparams.isPassWholeRoute()));
list.add(new OtherLocalRoutingParameter(R.string.gpx_option_calculate_first_last_segment,
getString(R.string.gpx_option_calculate_first_last_segment), rparams.isCalculateOsmAndRouteParts()));
getString(R.string.gpx_option_calculate_first_last_segment), rparams
.isCalculateOsmAndRouteParts()));
}
// list.add(new OtherLocalRoutingParameter(R.string.announce_gpx_waypoints,
// getString(R.string.announce_gpx_waypoints), rparams.isAnnounceWaypoints()));
// list.add(new OtherLocalRoutingParameter(R.string.announce_gpx_waypoints,
// getString(R.string.announce_gpx_waypoints), rparams.isAnnounceWaypoints()));
// Temporary disabled
// list.add(new GPXLocalRoutingParameter(R.string.calculate_osmand_route_gpx,
// getString(R.string.calculate_osmand_route_gpx), rparams.isCalculateOsmAndRoute()));
// list.add(new GPXLocalRoutingParameter(R.string.calculate_osmand_route_gpx,
// getString(R.string.calculate_osmand_route_gpx), rparams.isCalculateOsmAndRoute()));
}
GeneralRouter rm = SettingsNavigationActivity.getRouter(mapActivity.getMyApplication().getDefaultRoutingConfig(), am);
if(rm == null || (rparams != null && !rparams.isCalculateOsmAndRoute())) {
GeneralRouter rm = SettingsNavigationActivity.getRouter(mapActivity.getMyApplication()
.getDefaultRoutingConfig(), am);
if (rm == null || (rparams != null && !rparams.isCalculateOsmAndRoute())) {
return list;
}
for (RoutingParameter r : rm.getParameters().values()) {
@ -259,6 +245,7 @@ public class MapRoutePreferencesControl extends MapControls {
return list;
}
private String getString(int id) {
return mapActivity.getString(id);
}
@ -271,12 +258,12 @@ public class MapRoutePreferencesControl extends MapControls {
final ListView lv = (ListView) settingsDlg.findViewById(android.R.id.list);
final Set<ApplicationMode> selected = new HashSet<ApplicationMode>();
selected.add(am);
setupSpinner(settingsDlg);
listAdapter = new ArrayAdapter<LocalRoutingParameter>(ctx,
R.layout.layers_list_activity_item, R.id.title, getRoutingParameters(am)) {
final float scaleCoefficient = mapActivity.getMapView().getScaleCoefficient();
listAdapter = new ArrayAdapter<LocalRoutingParameter>(ctx, R.layout.layers_list_activity_item, R.id.title,
getRoutingParameters(am)) {
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View v = mapActivity.getLayoutInflater().inflate(R.layout.layers_list_activity_item, null);
@ -285,8 +272,8 @@ public class MapRoutePreferencesControl extends MapControls {
final LocalRoutingParameter rp = getItem(position);
tv.setText(rp.getText(mapActivity));
tv.setPadding((int) (5 * scaleCoefficient), 0, 0, 0);
if (rp.routingParameter != null && rp.routingParameter.getId().equals("short_way")){
//if short route settings - it should be inverse of fast_route_mode
if (rp.routingParameter != null && rp.routingParameter.getId().equals("short_way")) {
// if short route settings - it should be inverse of fast_route_mode
ch.setChecked(!settings.FAST_ROUTE_MODE.get());
} else {
ch.setChecked(rp.isSelected(settings));
@ -295,13 +282,13 @@ public class MapRoutePreferencesControl extends MapControls {
ch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//if short way that it should set valut to fast mode opposite of current
if (rp.routingParameter != null && rp.routingParameter.getId().equals("short_way")){
// if short way that it should set valut to fast mode opposite of current
if (rp.routingParameter != null && rp.routingParameter.getId().equals("short_way")) {
settings.FAST_ROUTE_MODE.set(!isChecked);
}
rp.setSelected(settings, isChecked);
if(rp instanceof OtherLocalRoutingParameter) {
if (rp instanceof OtherLocalRoutingParameter) {
updateGpxRoutingParameter((OtherLocalRoutingParameter) rp);
}
mapActivity.getRoutingHelper().recalculateRouteDueToSettingsChange();
@ -310,31 +297,29 @@ public class MapRoutePreferencesControl extends MapControls {
return v;
}
};
AppModeDialog.prepareAppModeView(mapActivity, selected, false,
(ViewGroup) settingsDlg.findViewById(R.id.TopBar), true,
new View.OnClickListener() {
@Override
public void onClick(View v) {
if(selected.size() > 0) {
ApplicationMode next = selected.iterator().next();
settings.APPLICATION_MODE.set(next);
mapActivity.getRoutingHelper().recalculateRouteDueToSettingsChange();
updateParameters();
}
}
});
AppModeDialog.prepareAppModeView(mapActivity, selected, false,
(ViewGroup) settingsDlg.findViewById(R.id.TopBar), true, new View.OnClickListener() {
@Override
public void onClick(View v) {
if (selected.size() > 0) {
ApplicationMode next = selected.iterator().next();
settings.APPLICATION_MODE.set(next);
mapActivity.getRoutingHelper().recalculateRouteDueToSettingsChange();
updateParameters();
}
}
});
lv.setAdapter(listAdapter);
return settingsDlg;
}
private void updateParameters() {
ApplicationMode am = settings.APPLICATION_MODE.get();
listAdapter.setNotifyOnChange(false);
listAdapter.clear();
for(LocalRoutingParameter r : getRoutingParameters(am)) {
for (LocalRoutingParameter r : getRoutingParameters(am)) {
listAdapter.add(r);
}
listAdapter.notifyDataSetChanged();
@ -347,19 +332,19 @@ public class MapRoutePreferencesControl extends MapControls {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if(position == 0) {
if(mapActivity.getRoutingHelper().getCurrentGPXRoute() != null) {
if (position == 0) {
if (mapActivity.getRoutingHelper().getCurrentGPXRoute() != null) {
mapActivity.getRoutingHelper().setGpxParams(null);
settings.FOLLOW_THE_GPX_ROUTE.set(null);
mapActivity.getRoutingHelper().recalculateRouteDueToSettingsChange();
}
updateParameters();
} else if(position == 1) {
} else if (position == 1) {
openGPXFileSelection(gpxSpinner);
} else if(position == 2) {
// nothing to change
}
} else if (position == 2) {
// nothing to change
}
}
@Override
@ -370,7 +355,7 @@ public class MapRoutePreferencesControl extends MapControls {
protected void openGPXFileSelection(final Spinner gpxSpinner) {
GpxUiHelper.selectGPXFile(mapActivity, false, false, new CallbackWithObject<GPXUtilities.GPXFile[]>() {
@Override
public boolean processResult(GPXFile[] result) {
mapActivity.getMapActions().setGPXRouteParams(result[0]);
@ -388,34 +373,19 @@ public class MapRoutePreferencesControl extends MapControls {
gpxActions.add(mapActivity.getString(R.string.shared_string_none));
gpxActions.add(mapActivity.getString(R.string.select_gpx));
GPXRouteParamsBuilder rp = mapActivity.getRoutingHelper().getCurrentGPXRoute();
if(rp != null) {
if (rp != null) {
gpxActions.add(new File(rp.getFile().path).getName());
}
ArrayAdapter<String> gpxAdapter = new ArrayAdapter<String>(mapActivity,
android.R.layout.simple_spinner_item,
gpxActions
);
ArrayAdapter<String> gpxAdapter = new ArrayAdapter<String>(mapActivity, android.R.layout.simple_spinner_item,
gpxActions);
gpxAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
gpxSpinner.setAdapter(gpxAdapter);
if(rp != null) {
if (rp != null) {
gpxSpinner.setSelection(2);
} else {
gpxSpinner.setSelection(0);
}
}
@Override
public void hideControls(FrameLayout layout) {
removeButton(layout, settingsAppModeButton);
}
@Override
public void onDraw(Canvas canvas, RotatedTileBox tileBox, DrawSettings nightMode) {
int id = settings.getApplicationMode().getSmallIcon(false); // settingsAppModeButton.isPressed() || dialog != null
if(cachedId != id && settingsAppModeButton.getLeft() > 0) {
cachedId = id;
settingsAppModeButton.setImageResource(id);
}
}
}