[android] UI switch for bicycle routing.

This commit is contained in:
Dmitry Yunitsky 2016-05-25 16:55:35 +03:00
parent e68b04cdd8
commit bbcfdc3177
12 changed files with 148 additions and 76 deletions

View file

@ -6,41 +6,46 @@
android:id="@+id/planning_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:clickable="true">
android:clickable="true"
android:orientation="vertical">
<FrameLayout
style="@style/MwmWidget.Floating.Panel"
android:layout_width="match_parent"
android:layout_height="@dimen/routing_selector_size"
android:elevation="3dp"
style="@style/MwmWidget.Floating.Panel">
tools:targetApi="lollipop">
<LinearLayout
android:id="@+id/progress_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center"
android:orientation="horizontal"
tools:background="#8000FF00">
<com.mapswithme.maps.widget.WheelProgressView
android:id="@+id/progress_vehicle"
style="@style/MwmWidget.ProgressWheel.RoutingPlan"
tools:visibility="visible"
wheel:centerDrawable="@android:color/transparent"
wheel:wheelProgressColor="?colorAccent"
wheel:wheelSecondaryColor="?dividerHorizontal"
wheel:wheelThickness="@dimen/margin_eighth"/>
tools:visibility="visible"/>
<Space
android:layout_width="32dp"
android:layout_width="@dimen/margin_double"
android:layout_height="0dp"/>
<com.mapswithme.maps.widget.WheelProgressView
android:id="@+id/progress_pedestrian"
style="@style/MwmWidget.ProgressWheel.RoutingPlan"
tools:visibility="visible"
wheel:centerDrawable="@android:color/transparent"
wheel:wheelProgressColor="?colorAccent"
wheel:wheelSecondaryColor="?dividerHorizontal"
wheel:wheelThickness="@dimen/margin_eighth"/>
tools:visibility="visible"/>
<Space
android:layout_width="@dimen/margin_double"
android:layout_height="0dp"/>
<com.mapswithme.maps.widget.WheelProgressView
android:id="@+id/progress_bicycle"
style="@style/MwmWidget.ProgressWheel.RoutingPlan"
tools:visibility="visible"/>
</LinearLayout>
<RadioGroup
@ -49,11 +54,13 @@
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="horizontal">
<RadioButton
android:id="@+id/vehicle"
android:layout_width="@dimen/routing_selector_size"
android:layout_height="@dimen/routing_selector_size"
android:layout_marginRight="32dp"
android:layout_marginEnd="@dimen/margin_double"
android:layout_marginRight="@dimen/margin_double"
tools:button="@drawable/ic_drive"
tools:buttonTint="?colorAccent"/>
@ -61,8 +68,17 @@
android:id="@+id/pedestrian"
android:layout_width="@dimen/routing_selector_size"
android:layout_height="@dimen/routing_selector_size"
android:layout_marginEnd="@dimen/margin_double"
android:layout_marginRight="@dimen/margin_double"
tools:button="@drawable/ic_walk"
tools:buttonTint="?colorAccent"/>
<RadioButton
android:id="@+id/bicycle"
android:layout_width="@dimen/routing_selector_size"
android:layout_height="@dimen/routing_selector_size"
tools:button="@drawable/ic_bicycle"
tools:buttonTint="?colorAccent"/>
</RadioGroup>
</FrameLayout>
@ -70,8 +86,8 @@
android:id="@+id/details_divider"
android:layout_width="match_parent"
android:layout_height="24dp"
android:src="@drawable/shadow_top"
android:scaleType="fitXY"/>
android:scaleType="fitXY"
android:src="@drawable/shadow_top"/>
<FrameLayout
android:id="@+id/details_frame"
@ -81,6 +97,7 @@
android:background="?windowBackgroundForced"
android:visibility="gone"
tools:visibility="visible">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
@ -90,9 +107,10 @@
android:id="@+id/numbers"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_base"
android:layout_gravity="center_vertical"
android:layout_margin="@dimen/margin_base"
tools:background="#4020202F">
<TextView
android:id="@+id/time"
style="@style/MwmWidget.TextView.PlanDetail.Number"
@ -101,11 +119,11 @@
<TextView
android:id="@+id/dot"
style="@style/MwmWidget.TextView.PlanDetail.Number.Secondary"
android:layout_toRightOf="@id/time"
android:text="•"
android:layout_marginLeft="6dp"
android:layout_marginRight="6dp"
android:layout_marginTop="2dp"
android:layout_toRightOf="@id/time"
android:text="•"
tools:ignore="HardcodedText"/>
<TextView
@ -117,8 +135,8 @@
<TextView
android:id="@+id/arrival"
style="@style/MwmWidget.TextView.PlanDetail.Number.Secondary"
android:textSize="@dimen/text_size_routing_plan_detail_arrival"
android:layout_below="@id/time"
android:textSize="@dimen/text_size_routing_plan_detail_arrival"
tools:text="Arrive at 12:34"/>
</RelativeLayout>
@ -130,8 +148,8 @@
android:text="@string/p2p_planning"
android:textColor="?secondary"
android:visibility="gone"
tools:visibility="visible"
tools:layout_gravity="right"/>
tools:layout_gravity="right"
tools:visibility="visible"/>
<TextView
android:id="@+id/error"
@ -140,9 +158,9 @@
android:text="@string/routing_planning_error"
android:textColor="@color/base_red"
android:visibility="gone"
tools:visibility="visible"
tools:layout_gravity="right|bottom"
tools:layout_marginTop="14dp"
tools:layout_gravity="right|bottom"/>
tools:visibility="visible"/>
<View
android:layout_width="match_parent"

View file

@ -7,8 +7,10 @@
style="@style/MwmWidget.Floating.Panel"
android:layout_width="match_parent"
android:layout_height="@dimen/routing_selector_size"
android:paddingLeft="8dp"
android:paddingRight="12dp"
android:paddingLeft="@dimen/margin_half"
android:paddingStart="@dimen/margin_half"
android:paddingRight="@dimen/margin_half_plus"
android:paddingEnd="@dimen/margin_half_plus"
android:clickable="true">
<LinearLayout
android:id="@+id/progress_frame"
@ -20,20 +22,17 @@
<com.mapswithme.maps.widget.WheelProgressView
android:id="@+id/progress_vehicle"
style="@style/MwmWidget.ProgressWheel.RoutingPlan"
tools:visibility="visible"
wheel:centerDrawable="@android:color/transparent"
wheel:wheelProgressColor="?colorAccent"
wheel:wheelSecondaryColor="?dividerHorizontal"
wheel:wheelThickness="@dimen/margin_eighth"/>
tools:visibility="visible"/>
<com.mapswithme.maps.widget.WheelProgressView
android:id="@+id/progress_pedestrian"
style="@style/MwmWidget.ProgressWheel.RoutingPlan"
tools:visibility="visible"
wheel:centerDrawable="@android:color/transparent"
wheel:wheelProgressColor="?colorAccent"
wheel:wheelSecondaryColor="?dividerHorizontal"
wheel:wheelThickness="@dimen/margin_eighth"/>
tools:visibility="visible"/>
<com.mapswithme.maps.widget.WheelProgressView
android:id="@+id/progress_bicycle"
style="@style/MwmWidget.ProgressWheel.RoutingPlan"
tools:visibility="visible"/>
</LinearLayout>
<RadioGroup
@ -41,6 +40,7 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignLeft="@id/progress_frame"
android:layout_alignStart="@id/progress_frame"
android:orientation="horizontal">
<RadioButton
android:id="@+id/vehicle"
@ -55,6 +55,13 @@
android:layout_height="@dimen/routing_selector_size"
tools:button="@drawable/ic_walk"
tools:buttonTint="?iconTintLight"/>
<RadioButton
android:id="@+id/bicycle"
android:layout_width="@dimen/routing_selector_size"
android:layout_height="@dimen/routing_selector_size"
tools:button="@drawable/ic_bicycle"
tools:buttonTint="?iconTintLight"/>
</RadioGroup>
<LinearLayout
@ -62,11 +69,13 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="right|center_vertical"
android:gravity="center_vertical|end"
android:layout_toRightOf="@id/progress_frame"
android:layout_toEndOf="@id/progress_frame"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical|right"
android:layout_gravity="center_vertical|end"
tools:layout_gravity="bottom|right">
<TextView
android:id="@+id/time"
@ -91,10 +100,12 @@
android:id="@+id/planning"
style="@style/MwmWidget.TextView.PlanDetail.Status"
android:layout_toRightOf="@id/progress_frame"
android:layout_toEndOf="@id/progress_frame"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:text="@string/p2p_planning"
android:textColor="?secondary"
android:gravity="right"
android:gravity="end"
android:visibility="gone"
tools:visibility="visible"
tools:layout_centerVertical="false"/>
@ -103,10 +114,12 @@
android:id="@+id/error"
style="@style/MwmWidget.TextView.PlanDetail.Status"
android:layout_toRightOf="@id/route_type"
android:layout_toEndOf="@id/route_type"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:text="@string/routing_planning_error"
android:textColor="@color/base_red"
android:gravity="right"
android:gravity="end"
android:visibility="gone"
tools:visibility="visible"
tools:layout_centerVertical="false"

View file

@ -37,6 +37,10 @@
<item name="android:layout_margin">@dimen/routing_selector_wheel_margin</item>
<item name="android:visibility">invisible</item>
<item name="android:background">?selectableItemBackgroundBorderless</item>
<item name="centerDrawable">@android:color/transparent</item>
<item name="wheelProgressColor">?colorAccent</item>
<item name="wheelSecondaryColor">?dividerHorizontal</item>
<item name="wheelThickness">@dimen/margin_eighth</item>
</style>
<style name="MwmWidget.Floating">

View file

@ -1,10 +1,14 @@
package com.mapswithme.maps;
import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.Size;
import android.support.annotation.UiThread;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import com.mapswithme.maps.bookmarks.data.DistanceAndAzimut;
import com.mapswithme.maps.bookmarks.data.MapObject;
import com.mapswithme.maps.routing.RoutingInfo;
@ -20,8 +24,13 @@ public class Framework
public static final int MAP_STYLE_DARK = 1;
public static final int MAP_STYLE_CLEAR = 2;
@Retention(RetentionPolicy.SOURCE)
@IntDef({ROUTER_TYPE_VEHICLE, ROUTER_TYPE_PEDESTRIAN, ROUTER_TYPE_BICYCLE})
public @interface RouterType {}
public static final int ROUTER_TYPE_VEHICLE = 0;
public static final int ROUTER_TYPE_PEDESTRIAN = 1;
public static final int ROUTER_TYPE_BICYCLE = 2;
@SuppressWarnings("unused")
public interface MapObjectListener
@ -154,15 +163,12 @@ public class Framework
*/
public static native void nativeMarkMapStyle(int mapStyle);
public static native void nativeSetRouter(int routerType);
public static native void nativeSetRouter(@RouterType int routerType);
@RouterType
public static native int nativeGetRouter();
@RouterType
public static native int nativeGetLastUsedRouter();
/**
* @return {@link Framework#ROUTER_TYPE_VEHICLE} or {@link Framework#ROUTER_TYPE_PEDESTRIAN}
*/
@RouterType
public static native int nativeGetBestRouter(double srcLat, double srcLon, double dstLat, double dstLon);
public static native void nativeSetRouteStartPoint(double lat, double lon, boolean valid);

View file

@ -1516,7 +1516,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
}
@Override
public void updateBuildProgress(int progress, int router)
public void updateBuildProgress(int progress, @Framework.RouterType int router)
{
if (mIsFragmentContainer)
{

View file

@ -337,8 +337,15 @@ public enum LocationHelper implements SensorEventListener
mHighAccuracy = true;
if (RoutingController.get().isNavigating())
{
mInterval = (Framework.nativeGetRouter() == Framework.ROUTER_TYPE_VEHICLE ? INTERVAL_NAVIGATION_VEHICLE_MS
: INTERVAL_NAVIGATION_PEDESTRIAN_MS);
final @Framework.RouterType int router = Framework.nativeGetRouter();
if (router == Framework.ROUTER_TYPE_PEDESTRIAN)
mInterval = INTERVAL_NAVIGATION_PEDESTRIAN_MS;
else if (router == Framework.ROUTER_TYPE_VEHICLE)
mInterval = INTERVAL_NAVIGATION_VEHICLE_MS;
else
// TODO yunikkk determine correct interval for bicycle
mInterval = INTERVAL_NAVIGATION_VEHICLE_MS;
return;
}

View file

@ -111,10 +111,10 @@ public class NavigationController
if (info == null)
return;
if (Framework.nativeGetRouter() == Framework.ROUTER_TYPE_VEHICLE)
updateVehicle(info);
else
if (Framework.nativeGetRouter() == Framework.ROUTER_TYPE_PEDESTRIAN)
updatePedestrian(info);
else
updateVehicle(info);
mTimeTotal.setText(RoutingController.formatRoutingTime(info.totalTimeInSeconds, R.dimen.text_size_routing_dimension));
mDistanceTotal.setText(Utils.formatUnitsText(R.dimen.text_size_routing_number, R.dimen.text_size_routing_dimension,

View file

@ -66,10 +66,8 @@ public class RoutingController
/**
* @param progress progress to be displayed.
* @param router selected router type. One of {@link Framework#ROUTER_TYPE_VEHICLE} and {@link Framework#ROUTER_TYPE_PEDESTRIAN}.
* */
void updateBuildProgress(@IntRange(from = 0, to = 100) int progress,
@IntRange(from = Framework.ROUTER_TYPE_VEHICLE, to = Framework.ROUTER_TYPE_PEDESTRIAN) int router);
void updateBuildProgress(@IntRange(from = 0, to = 100) int progress, @Framework.RouterType int router);
}
private static final RoutingController sInstance = new RoutingController();
@ -85,6 +83,7 @@ public class RoutingController
private MapObject mEndPoint;
private int mLastBuildProgress;
@Framework.RouterType
private int mLastRouterType = Framework.nativeGetLastUsedRouter();
private boolean mHasContainerSavedState;
@ -656,7 +655,7 @@ public class RoutingController
checkAndBuildRoute();
}
public void setRouterType(int router)
public void setRouterType(@Framework.RouterType int router)
{
Log.d(TAG, "setRouterType: " + mLastRouterType + " -> " + router);

View file

@ -34,6 +34,7 @@ public class RoutingPlanController extends ToolbarController
private final RadioGroup mRouterTypes;
private final WheelProgressView mProgressVehicle;
private final WheelProgressView mProgressPedestrian;
private final WheelProgressView mProgressBicycle;
private final View mPlanningLabel;
private final View mErrorLabel;
private final View mDetailsFrame;
@ -59,7 +60,7 @@ public class RoutingPlanController extends ToolbarController
}
};
RadioButton rb = (RadioButton)mRouterTypes.findViewById(buttonId);
RadioButton rb = (RadioButton) mRouterTypes.findViewById(buttonId);
listener.onCheckedChanged(rb, false);
rb.setOnCheckedChangeListener(listener);
rb.setOnClickListener(clickListener);
@ -101,9 +102,21 @@ public class RoutingPlanController extends ToolbarController
}
});
setupRouterButton(R.id.bicycle, R.drawable.ic_bicycle, new View.OnClickListener()
{
@Override
public void onClick(View v)
{
AlohaHelper.logClick(AlohaHelper.ROUTING_BICYCLE_SET);
Statistics.INSTANCE.trackEvent(Statistics.EventName.ROUTING_BICYCLE_SET);
RoutingController.get().setRouterType(Framework.ROUTER_TYPE_BICYCLE);
}
});
View progressFrame = planFrame.findViewById(R.id.progress_frame);
mProgressVehicle = (WheelProgressView) progressFrame.findViewById(R.id.progress_vehicle);
mProgressPedestrian = (WheelProgressView) progressFrame.findViewById(R.id.progress_pedestrian);
mProgressBicycle = (WheelProgressView) progressFrame.findViewById(R.id.progress_bicycle);
mPlanningLabel = planFrame.findViewById(R.id.planning);
mErrorLabel = planFrame.findViewById(R.id.error);
@ -188,26 +201,34 @@ public class RoutingPlanController extends ToolbarController
RoutingController.formatArrivalTime(rinfo.totalTimeInSeconds)));
}
public void updateBuildProgress(int progress, int router)
public void updateBuildProgress(int progress, @Framework.RouterType int router)
{
updateProgressLabels();
boolean vehicle = (router == Framework.ROUTER_TYPE_VEHICLE);
mRouterTypes.check(vehicle ? R.id.vehicle : R.id.pedestrian);
if (!RoutingController.get().isBuilding())
UiUtils.invisible(mProgressVehicle, mProgressPedestrian, mProgressBicycle);
WheelProgressView progressView;
if (router == Framework.ROUTER_TYPE_VEHICLE)
{
UiUtils.hide(mProgressVehicle, mProgressPedestrian);
return;
mRouterTypes.check(R.id.vehicle);
progressView = mProgressVehicle;
}
else if (router == Framework.ROUTER_TYPE_PEDESTRIAN)
{
mRouterTypes.check(R.id.pedestrian);
progressView = mProgressPedestrian;
}
else
{
mRouterTypes.check(R.id.bicycle);
progressView = mProgressBicycle;
}
UiUtils.visibleIf(vehicle, mProgressVehicle);
UiUtils.visibleIf(!vehicle, mProgressPedestrian);
if (!RoutingController.get().isBuilding())
return;
WheelProgressView view = (vehicle ? mProgressVehicle : mProgressPedestrian);
view.setPending(progress == 0);
UiUtils.show(progressView);
progressView.setPending(progress == 0);
if (progress != 0)
view.setProgress(progress);
progressView.setProgress(progress);
}
private void toggleSlots()

View file

@ -6,6 +6,8 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import com.mapswithme.maps.Framework;
import com.mapswithme.maps.R;
import com.mapswithme.maps.base.BaseMwmFragment;
import com.mapswithme.maps.base.OnBackPressListener;
@ -55,7 +57,7 @@ public class RoutingPlanFragment extends BaseMwmFragment
mPlanController.updatePoints();
}
public void updateBuildProgress(int progress, int router)
public void updateBuildProgress(int progress, @Framework.RouterType int router)
{
mPlanController.updateBuildProgress(progress, router);
}

View file

@ -72,8 +72,9 @@ public class AlohaHelper
public static final String ROUTING_START = "routeGo";
public static final String ROUTING_START_SUGGEST_REBUILD = "routeGoRebuild";
public static final String ROUTING_CANCEL = "routeCancel";
public static final String ROUTING_PEDESTRIAN_SET = "routerSetPedestrian";
public static final String ROUTING_VEHICLE_SET = "routerSetVehicle";
public static final String ROUTING_PEDESTRIAN_SET = "routerSetPedestrian";
public static final String ROUTING_BICYCLE_SET = "routerSetBicycle";
public static final String ROUTING_SWAP_POINTS = "routeSwapPoints";
public static final String ROUTING_TOGGLE = "routeToggle";
public static final String ROUTING_SEARCH_POINT = "routSearchPoint";

View file

@ -105,8 +105,9 @@ public enum Statistics
public static final String ROUTING_START = "Routing. Start";
public static final String ROUTING_CLOSE = "Routing. Close";
public static final String ROUTING_CANCEL = "Routing. Cancel";
public static final String ROUTING_PEDESTRIAN_SET = "Routing. Set pedestrian";
public static final String ROUTING_VEHICLE_SET = "Routing. Set vehicle";
public static final String ROUTING_PEDESTRIAN_SET = "Routing. Set pedestrian";
public static final String ROUTING_BICYCLE_SET = "Routing. Set bicycle";
public static final String ROUTING_SWAP_POINTS = "Routing. Swap points";
public static final String ROUTING_TOGGLE = "Routing. Toggle";
public static final String ROUTING_SEARCH_POINT = "Routing. Search point";