diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 64f426f57f..0dd37df103 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,8 @@ 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 --> + Automatically start navigation after specified interval + Skip route planning Go Action create Action modify @@ -32,6 +34,7 @@ Cancel Dismiss Yes + Not use No On Off diff --git a/OsmAnd/res/xml/navigation_settings.xml b/OsmAnd/res/xml/navigation_settings.xml index 88ca9de0e7..e88306ffb9 100644 --- a/OsmAnd/res/xml/navigation_settings.xml +++ b/OsmAnd/res/xml/navigation_settings.xml @@ -32,5 +32,10 @@ android:key="wake_on_voice_int" android:title="@string/wake_on_voice" android:summary="@string/wake_on_voice_descr" /> + + diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index 56896d6c13..22317d1e74 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -160,10 +160,10 @@ public class MapActivity extends AccessibleActivity { if (tn != null) { ((TextView) findViewById(R.id.ProgressMessage)).setText(tn); } - if(event == InitEvents.NATIVE_INITIALIZED) { - setupOpenGLView(); - openGlSetup = true; - } +// if(event == InitEvents.NATIVE_INITIALIZED) { +// setupOpenGLView(); +// openGlSetup = true; +// } if(event == InitEvents.MAPS_INITIALIZED) { mapView.refreshMap(true); } diff --git a/OsmAnd/src/net/osmand/plus/activities/SettingsNavigationActivity.java b/OsmAnd/src/net/osmand/plus/activities/SettingsNavigationActivity.java index f0e5706f9e..af798a857c 100644 --- a/OsmAnd/src/net/osmand/plus/activities/SettingsNavigationActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/SettingsNavigationActivity.java @@ -5,9 +5,14 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import net.osmand.plus.*; +import net.osmand.plus.ApplicationMode; +import net.osmand.plus.DeviceAdminRecv; +import net.osmand.plus.OsmandApplication; +import net.osmand.plus.OsmandSettings; import net.osmand.plus.OsmandSettings.AutoZoomMap; import net.osmand.plus.OsmandSettings.OsmandPreference; +import net.osmand.plus.R; +import net.osmand.plus.Version; import net.osmand.plus.routing.RouteProvider.RouteService; import net.osmand.router.GeneralRouter; import net.osmand.router.GeneralRouter.RoutingParameter; @@ -184,13 +189,22 @@ public class SettingsNavigationActivity extends SettingsBaseActivity { if (!mode.isDerivedRoutingFrom(ApplicationMode.CAR)) { category.removePreference(speedLimitExceed); } + + Integer[] delayIntervals = new Integer[] { -1, 3, 5, 7, 10, 15, 20 }; + String[] delayIntervalNames = new String[delayIntervals.length]; + for (int i = 0; i < delayIntervals.length; i++) { + if (i == 0) { + delayIntervalNames[i] = getString(R.string.shared_string_not_use); + } else { + delayIntervalNames[i] = delayIntervals[i] + " " + getString(R.string.int_seconds); + } + } + registerListPreference(settings.DELAY_TO_START_NAVIGATION, screen, delayIntervalNames, delayIntervals); profileDialog(); } - - private void prepareRoutingPrefs(PreferenceScreen screen) { PreferenceCategory cat = (PreferenceCategory) screen.findPreference("routing_preferences"); diff --git a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java index 47fd4ef2a1..a1d6202396 100644 --- a/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/MapControlsLayer.java @@ -19,6 +19,7 @@ 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; @@ -66,10 +67,14 @@ public class MapControlsLayer extends OsmandMapLayer { private MapHudButton routeGoControl; private MapHudButton compassHud; private float cachedRotate = 0; + private static long startCounter; + private Runnable delayStart; + private Handler showUIHandler; public MapControlsLayer(MapActivity activity) { this.mapActivity = activity; settings = activity.getMyApplication().getSettings(); + } @Override @@ -84,6 +89,7 @@ public class MapControlsLayer extends OsmandMapLayer { // TODO // rulerControl = init(new RulerControl(zoomControls, mapActivity, showUIHandler, scaleCoefficient), parent, // rightGravity); + showUIHandler = new Handler(); initTransparencyBar(view, parent); initZooms(); initControls(); @@ -102,10 +108,41 @@ public class MapControlsLayer extends OsmandMapLayer { @Override public void draw(Canvas canvas) { canvas.save(); - canvas.rotate(cachedRotate, canvas.getWidth() / 2, canvas.getHeight() / 2); + canvas.rotate(cachedRotate, getIntrinsicWidth() / 2, getIntrinsicHeight() / 2); 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); + original.setBounds(left, top, right, bottom); } @Override @@ -207,7 +244,12 @@ public class MapControlsLayer extends OsmandMapLayer { @Override public void onClick(View v) { notifyClicked(); - startNavigation(); + RoutingHelper routingHelper = mapActivity.getMyApplication().getRoutingHelper(); + if(!routingHelper.isFollowingMode() && !routingHelper.isRoutePlanningMode()) { + mapActivity.getMapActions().enterRoutePlanningMode(null, null, false); + } else { + startNavigation(); + } } }); } @@ -318,9 +360,36 @@ public class MapControlsLayer extends OsmandMapLayer { } private void stopCounter() { - // TODO stop counter + startCounter = 0; } + + public void startCounter() { + OsmandSettings settings = mapActivity.getMyApplication().getSettings(); + int del = settings.DELAY_TO_START_NAVIGATION.get(); + if(del <= 0) { + return; + } + if (startCounter <= 0) { + startCounter = System.currentTimeMillis() + del * 1000; + delayStart = new Runnable() { + @Override + public void run() { + if (startCounter > 0) { + if (System.currentTimeMillis() > startCounter) { + startCounter = 0; + startNavigation(); + } else { + mapActivity.refreshMap(); + showUIHandler.postDelayed(delayStart, 1000); + } + } + } + }; + delayStart.run(); + } + + } protected void notifyClicked(MapControls m) { notifyClicked(); @@ -379,16 +448,30 @@ public class MapControlsLayer extends OsmandMapLayer { int vis = showRouteCalculationControls ? View.VISIBLE : View.GONE; if (showRouteCalculationControls) { ((TextView) routeGoControl.iv).setTextColor(textColor); + 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) ; + } + ((TextView) routeGoControl.iv).setText(text); } if (routePreparationLayout.getVisibility() != vis) { routePreparationLayout.setVisibility(vis); mapRouteInfoControlDialog.setVisible(showRouteCalculationControls); + if(showRouteCalculationControls) { + if(!mapActivity.getRoutingHelper().isFollowingMode() && !mapActivity.getRoutingHelper().isPauseNavigation()) { + startCounter(); + } + } else { + stopCounter(); + } } float mapRotate = mapActivity.getMapView().getRotate(); if (mapRotate != cachedRotate) { - float c = cachedRotate - mapRotate; cachedRotate = mapRotate; // Aply animation to image view compassHud.iv.invalidate(); @@ -411,26 +494,16 @@ public class MapControlsLayer extends OsmandMapLayer { } public boolean onSingleTap(PointF point, RotatedTileBox tileBox) { - // TODO stop counter & show buttons - // for(MapControls m : allControls) { - // if(m.isVisible() && m.onSingleTap(point, tileBox)){ - // return true; - // } - // } + if(mapRouteInfoControlDialog.onSingleTap(point, tileBox)) { + return true; + } + stopCounter(); return false; } @Override public boolean onTouchEvent(MotionEvent event, RotatedTileBox tileBox) { - // 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); - // } + stopCounter(); return false; } @@ -570,7 +643,7 @@ public class MapControlsLayer extends OsmandMapLayer { ((ImageView) iv).setImageDrawable(ctx.getIconsCache().getIcon(resId, nightMode ? resDark : resLight)); } } else if (iv instanceof TextView) { - ((TextView) iv).setCompoundDrawables( + ((TextView) iv).setCompoundDrawablesWithIntrinsicBounds( ctx.getIconsCache().getIcon(resId, nightMode ? resDark : resLight), null, null, null); } } diff --git a/OsmAnd/src/net/osmand/plus/views/controls/MapRouteInfoControl.java b/OsmAnd/src/net/osmand/plus/views/controls/MapRouteInfoControl.java index b8482ffd0a..3ba2641917 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/MapRouteInfoControl.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/MapRouteInfoControl.java @@ -20,7 +20,6 @@ import net.osmand.plus.routing.RouteDirectionInfo; import net.osmand.plus.routing.RoutingHelper; import net.osmand.plus.routing.RoutingHelper.IRouteInformationListener; import net.osmand.plus.views.ContextMenuLayer; -import net.osmand.plus.views.OsmandMapLayer.DrawSettings; import net.osmand.plus.views.OsmandMapTileView; import android.app.AlertDialog; import android.app.AlertDialog.Builder; @@ -28,9 +27,7 @@ import android.app.Dialog; import android.content.DialogInterface; import android.content.DialogInterface.OnDismissListener; import android.content.Intent; -import android.graphics.Canvas; import android.graphics.PointF; -import android.graphics.drawable.Drawable; import android.view.Gravity; import android.view.View; import android.view.Window; @@ -38,7 +35,6 @@ import android.view.WindowManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; -import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ListView; import android.widget.Spinner;