Merge pull request #4449 from alexzatsepin/MAPSME-2593-uber-integration
Mapsme 2593 uber integration
4
.gitignore
vendored
|
@ -133,3 +133,7 @@ android/fabric.properties
|
|||
android/pushwoosh.properties
|
||||
android/res/values/google-service.xml
|
||||
server
|
||||
|
||||
*.li
|
||||
|
||||
*.autosave
|
||||
|
|
|
@ -93,6 +93,7 @@ LOCAL_SRC_FILES := \
|
|||
com/mapswithme/maps/settings/UnitLocale.cpp \
|
||||
com/mapswithme/maps/sound/tts.cpp \
|
||||
com/mapswithme/maps/SponsoredHotel.cpp \
|
||||
com/mapswithme/maps/uber/Uber.cpp \
|
||||
com/mapswithme/maps/TrackRecorder.cpp \
|
||||
com/mapswithme/maps/UserMarkHelper.cpp \
|
||||
com/mapswithme/opengl/android_gl_utils.cpp \
|
||||
|
|
|
@ -513,6 +513,17 @@ void Framework::EnableDownloadOn3g()
|
|||
m_work.GetDownloadingPolicy().EnableCellularDownload(true);
|
||||
}
|
||||
|
||||
uint64_t Framework::RequestUberProducts(ms::LatLon const & from, ms::LatLon const & to,
|
||||
uber::ProductsCallback const & callback)
|
||||
{
|
||||
return m_work.GetUberApi().GetAvailableProducts(from, to, callback);
|
||||
}
|
||||
|
||||
uber::RideRequestLinks Framework::GetUberLinks(string const & productId, ms::LatLon const & from, ms::LatLon const & to)
|
||||
{
|
||||
return uber::Api::GetRideRequestLinks(productId, from, to);
|
||||
}
|
||||
|
||||
|
||||
} // namespace android
|
||||
|
||||
|
@ -1182,5 +1193,4 @@ Java_com_mapswithme_maps_Framework_nativeSetVisibleRect(JNIEnv * env, jclass, ji
|
|||
{
|
||||
frm()->SetVisibleViewport(m2::RectD(left, top, right, bottom));
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
} // extern "C"
|
||||
|
|
|
@ -166,6 +166,9 @@ namespace android
|
|||
bool IsAutoRetryDownloadFailed();
|
||||
bool IsDownloadOn3gEnabled();
|
||||
void EnableDownloadOn3g();
|
||||
|
||||
uint64_t RequestUberProducts(ms::LatLon const & from, ms::LatLon const & to, uber::ProductsCallback const & callback);
|
||||
static uber::RideRequestLinks GetUberLinks(string const & productId, ms::LatLon const & from, ms::LatLon const & to);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -2,9 +2,7 @@
|
|||
|
||||
#include "../core/jni_helper.hpp"
|
||||
#include "../platform/Platform.hpp"
|
||||
|
||||
#include "map/place_page_info.hpp"
|
||||
|
||||
#include "partners_api/booking_api.hpp"
|
||||
|
||||
#include "std/bind.hpp"
|
||||
|
|
99
android/jni/com/mapswithme/maps/uber/Uber.cpp
Normal file
|
@ -0,0 +1,99 @@
|
|||
#include "../Framework.hpp"
|
||||
|
||||
#include "../../core/jni_helper.hpp"
|
||||
#include "partners_api/uber_api.hpp"
|
||||
|
||||
namespace
|
||||
{
|
||||
jclass g_uberClass;
|
||||
jclass g_productClass;
|
||||
jclass g_routingControllerClass;
|
||||
jclass g_uberInfoClass;
|
||||
jmethodID g_uberInfoConstructor;
|
||||
jobject g_routingControllerInstance;
|
||||
jmethodID g_productConstructor;
|
||||
jmethodID g_routingControllerGetMethod;
|
||||
jmethodID g_uberInfoCallbackMethod;
|
||||
jclass g_uberLinksClass;
|
||||
jmethodID g_uberLinksConstructor;
|
||||
uint64_t g_lastRequestId;
|
||||
|
||||
void PrepareClassRefs(JNIEnv * env)
|
||||
{
|
||||
if (g_uberClass)
|
||||
return;
|
||||
|
||||
g_uberClass = jni::GetGlobalClassRef(env, "com/mapswithme/maps/uber/UberInfo");
|
||||
g_productClass = jni::GetGlobalClassRef(env, "com/mapswithme/maps/uber/UberInfo$Product");
|
||||
g_routingControllerClass =
|
||||
jni::GetGlobalClassRef(env, "com/mapswithme/maps/routing/RoutingController");
|
||||
g_productConstructor = jni::GetConstructorID(
|
||||
env, g_productClass,
|
||||
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
|
||||
g_uberInfoClass = jni::GetGlobalClassRef(env, "com/mapswithme/maps/uber/UberInfo");
|
||||
g_routingControllerGetMethod = jni::GetStaticMethodID(
|
||||
env, g_routingControllerClass, "get", "()Lcom/mapswithme/maps/routing/RoutingController;");
|
||||
g_routingControllerInstance =
|
||||
env->CallStaticObjectMethod(g_routingControllerClass, g_routingControllerGetMethod);
|
||||
g_uberInfoCallbackMethod =
|
||||
jni::GetMethodID(env, g_routingControllerInstance, "onUberInfoReceived",
|
||||
"(Lcom/mapswithme/maps/uber/UberInfo;)V");
|
||||
g_uberInfoConstructor = jni::GetConstructorID(env, g_uberInfoClass,
|
||||
"([Lcom/mapswithme/maps/uber/UberInfo$Product;)V");
|
||||
g_uberLinksClass = jni::GetGlobalClassRef(env, "com/mapswithme/maps/uber/UberLinks");
|
||||
g_uberLinksConstructor =
|
||||
jni::GetConstructorID(env, g_uberLinksClass, "(Ljava/lang/String;Ljava/lang/String;)V");
|
||||
}
|
||||
} // namespace
|
||||
|
||||
extern "C" {
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_mapswithme_maps_uber_Uber_nativeRequestUberProducts(
|
||||
JNIEnv * env, jclass clazz, jdouble srcLat, jdouble srcLon, jdouble dstLat, jdouble dstLon)
|
||||
{
|
||||
PrepareClassRefs(env);
|
||||
|
||||
ms::LatLon const from(srcLat, srcLon);
|
||||
ms::LatLon const to(dstLat, dstLon);
|
||||
|
||||
g_lastRequestId = g_framework->RequestUberProducts(
|
||||
from, to, [](vector<uber::Product> const & products, uint64_t const requestId) {
|
||||
GetPlatform().RunOnGuiThread([=]() {
|
||||
|
||||
if (g_lastRequestId != requestId)
|
||||
return;
|
||||
|
||||
JNIEnv * env = jni::GetEnv();
|
||||
|
||||
auto uberProducts = jni::ToJavaArray(
|
||||
env, g_productClass, products, [](JNIEnv * env, uber::Product const & item) {
|
||||
return env->NewObject(
|
||||
g_productClass, g_productConstructor, jni::ToJavaString(env, item.m_productId),
|
||||
jni::ToJavaString(env, item.m_name), jni::ToJavaString(env, item.m_time),
|
||||
jni::ToJavaString(env, item.m_price));
|
||||
});
|
||||
|
||||
jobject const routingControllerInstance =
|
||||
env->CallStaticObjectMethod(g_routingControllerClass, g_routingControllerGetMethod);
|
||||
env->CallVoidMethod(routingControllerInstance, g_uberInfoCallbackMethod,
|
||||
env->NewObject(g_uberInfoClass, g_uberInfoConstructor, uberProducts));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
JNIEXPORT jobject JNICALL Java_com_mapswithme_maps_uber_Uber_nativeGetUberLinks(
|
||||
JNIEnv * env, jclass clazz, jstring productId, jdouble srcLat, jdouble srcLon, jdouble dstLat,
|
||||
jdouble dstLon)
|
||||
{
|
||||
PrepareClassRefs(env);
|
||||
|
||||
ms::LatLon const from(srcLat, srcLon);
|
||||
ms::LatLon const to(dstLat, dstLon);
|
||||
|
||||
uber::RideRequestLinks const links =
|
||||
android::Framework::GetUberLinks(jni::ToNativeString(env, productId), from, to);
|
||||
return env->NewObject(g_uberLinksClass, g_uberLinksConstructor,
|
||||
jni::ToJavaString(env, links.m_deepLink),
|
||||
jni::ToJavaString(env, links.m_universalLink));
|
||||
}
|
||||
} // extern "C"
|
BIN
android/res/drawable-hdpi/ic_logo_uber.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
android/res/drawable-hdpi/ic_taxi.png
Normal file
After Width: | Height: | Size: 475 B |
BIN
android/res/drawable-mdpi/ic_logo_uber.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
android/res/drawable-mdpi/ic_taxi.png
Normal file
After Width: | Height: | Size: 496 B |
BIN
android/res/drawable-xhdpi/ic_logo_uber.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
android/res/drawable-xhdpi/ic_taxi.png
Normal file
After Width: | Height: | Size: 520 B |
BIN
android/res/drawable-xxhdpi/ic_logo_uber.png
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
android/res/drawable-xxhdpi/ic_taxi.png
Normal file
After Width: | Height: | Size: 787 B |
BIN
android/res/drawable-xxxhdpi/ic_logo_uber.png
Normal file
After Width: | Height: | Size: 9.5 KiB |
BIN
android/res/drawable-xxxhdpi/ic_taxi.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@drawable/button_accent_pressed_night"
|
||||
<item android:drawable="@drawable/button_start_pressed_night"
|
||||
android:state_pressed="true"/>
|
||||
|
||||
<item android:drawable="@drawable/button_accent_normal_night"
|
||||
android:state_enabled="true"/>
|
||||
<item android:drawable="@drawable/button_start_normal_night"
|
||||
android:state_enabled="true"/>
|
||||
|
||||
<item android:drawable="@drawable/button_accent_disabled_night"/>
|
||||
<item android:drawable="@drawable/button_start_disabled_night"/>
|
||||
</selector>
|
|
@ -9,9 +9,14 @@
|
|||
<include layout="@layout/routing_plan"/>
|
||||
|
||||
<include
|
||||
layout="@layout/altitude_chart_panel"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
layout="@layout/altitude_chart_panel"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<include
|
||||
layout="@layout/uber_panel"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<Space
|
||||
android:layout_width="match_parent"
|
||||
|
@ -23,7 +28,9 @@
|
|||
android:layout_height="1dp"
|
||||
android:background="?dividerHorizontal"/>
|
||||
|
||||
<include layout="@layout/start_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"/>
|
||||
<include
|
||||
layout="@layout/start_button"
|
||||
android:visibility="gone"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"/>
|
||||
</LinearLayout>
|
|
@ -6,7 +6,23 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<include layout="@layout/altitude_chart_panel"/>
|
||||
<include layout="@layout/altitude_chart_panel"
|
||||
tools:visibility="gone"/>
|
||||
|
||||
<include layout="@layout/uber_panel"/>
|
||||
|
||||
<include layout="@layout/start_button"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/error"
|
||||
android:paddingLeft="@dimen/margin_base"
|
||||
android:paddingStart="@dimen/margin_base"
|
||||
android:paddingRight="@dimen/margin_base"
|
||||
android:paddingEnd="@dimen/margin_base"
|
||||
android:paddingTop="@dimen/margin_half_plus"
|
||||
android:paddingBottom="@dimen/margin_half_plus"
|
||||
android:textAppearance="@style/MwmTextAppearance.Body3"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"/>
|
||||
</LinearLayout>
|
|
@ -55,9 +55,9 @@
|
|||
android:id="@+id/progress_vehicle"
|
||||
style="@style/MwmWidget.ProgressWheel.RoutingPlan"
|
||||
android:layout_marginLeft="@dimen/routing_selector_wheel_margin"
|
||||
android:layout_marginStart="@dimen/routing_selector_wheel_margin"
|
||||
android:layout_marginTop="@dimen/routing_selector_wheel_margin"
|
||||
android:layout_marginBottom="@dimen/routing_selector_wheel_margin"
|
||||
tools:visibility="visible" />
|
||||
android:layout_marginBottom="@dimen/routing_selector_wheel_margin"/>
|
||||
|
||||
<com.mapswithme.maps.widget.WheelProgressView
|
||||
android:id="@+id/progress_bicycle"
|
||||
|
@ -65,16 +65,23 @@
|
|||
android:layout_marginTop="@dimen/routing_selector_wheel_margin"
|
||||
android:layout_marginBottom="@dimen/routing_selector_wheel_margin"
|
||||
android:layout_marginLeft="12dp"
|
||||
android:layout_marginRight="12dp"
|
||||
tools:visibility="visible" />
|
||||
android:layout_marginRight="12dp"/>
|
||||
|
||||
<com.mapswithme.maps.widget.WheelProgressView
|
||||
android:id="@+id/progress_pedestrian"
|
||||
style="@style/MwmWidget.ProgressWheel.RoutingPlan"
|
||||
android:layout_marginTop="@dimen/routing_selector_wheel_margin"
|
||||
android:layout_marginBottom="@dimen/routing_selector_wheel_margin"
|
||||
android:layout_marginRight="@dimen/routing_selector_wheel_margin"
|
||||
tools:visibility="visible" />
|
||||
android:layout_marginRight="12dp"
|
||||
android:layout_marginEnd="12dp"/>
|
||||
|
||||
<com.mapswithme.maps.widget.WheelProgressView
|
||||
android:id="@+id/progress_taxi"
|
||||
style="@style/MwmWidget.ProgressWheel.RoutingPlan"
|
||||
android:layout_marginTop="@dimen/routing_selector_wheel_margin"
|
||||
android:layout_marginBottom="@dimen/routing_selector_wheel_margin"
|
||||
android:layout_marginRight="@dimen/routing_selector_wheel_margin"
|
||||
android:layout_marginEnd="@dimen/routing_selector_wheel_margin"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
@ -106,8 +113,16 @@
|
|||
android:id="@+id/pedestrian"
|
||||
android:layout_width="@dimen/routing_selector_size"
|
||||
android:layout_height="@dimen/routing_selector_size"
|
||||
android:layout_marginRight="@dimen/routing_selector_wheel_margin"
|
||||
tools:button="@drawable/ic_walk"
|
||||
tools:buttonTint="?iconTintLight" />
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/taxi"
|
||||
android:layout_width="@dimen/routing_selector_size"
|
||||
android:layout_height="@dimen/routing_selector_size"
|
||||
tools:button="@drawable/ic_route_type_taxi"
|
||||
tools:buttonTint="?iconTintLight" />
|
||||
</RadioGroup>
|
||||
|
||||
<ImageView
|
||||
|
|
23
android/res/layout/uber_pager_item.xml
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<TextView
|
||||
android:id="@+id/product_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="@style/MwmTextAppearance.RoutingDetail"
|
||||
tools:text="UberX"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/arrival_time_price"
|
||||
android:layout_marginTop="@dimen/margin_quarter"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="@style/MwmTextAppearance.Body3"
|
||||
android:maxLines="2"
|
||||
tools:text="Ожидание 10 мин • 350-400 \u20BD"/>
|
||||
</LinearLayout>
|
44
android/res/layout/uber_panel.xml
Normal file
|
@ -0,0 +1,44 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/uber_panel"
|
||||
android:paddingLeft="@dimen/margin_base"
|
||||
android:paddingStart="@dimen/margin_base"
|
||||
android:paddingEnd="@dimen/margin_base"
|
||||
android:paddingRight="@dimen/margin_base"
|
||||
android:paddingTop="@dimen/margin_base"
|
||||
android:paddingBottom="@dimen/margin_half"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content">
|
||||
<ImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/ic_logo_uber"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"/>
|
||||
|
||||
<android.support.v4.view.ViewPager
|
||||
android:id="@+id/pager"
|
||||
android:layout_marginStart="@dimen/margin_double"
|
||||
android:layout_marginLeft="@dimen/margin_double"
|
||||
android:layout_toRightOf="@id/icon"
|
||||
android:layout_toEndOf="@id/icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="64dp"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_below="@id/pager"
|
||||
android:layout_marginTop="@dimen/margin_half"
|
||||
tools:background="?secondary"
|
||||
tools:layout_height="4dp"
|
||||
tools:layout_width="16dp"/>
|
||||
</RelativeLayout>
|
|
@ -36,7 +36,8 @@
|
|||
</style>
|
||||
|
||||
<style name="MwmWidget.Button.Start">
|
||||
<item name="android:background">@drawable/button_start</item>
|
||||
<item name="android:background">?startButtonBackground</item>
|
||||
<item name="android:textColor">?accentButtonTextColor</item>
|
||||
<item name="android:textSize">14sp</item>
|
||||
</style>
|
||||
|
||||
|
|
|
@ -47,6 +47,8 @@
|
|||
<attr name="redButtonTextColor" format="color"/>
|
||||
<attr name="redButtonTextColorDisabled" format="color"/>
|
||||
|
||||
<attr name="startButtonBackground" format="reference"/>
|
||||
|
||||
<attr name="circleAccent" format="reference"/>
|
||||
|
||||
<attr name="menuBackground" format="color"/>
|
||||
|
|
|
@ -59,6 +59,8 @@
|
|||
<item name="redButtonTextColor">@color/button_red_text</item>
|
||||
<item name="redButtonTextColorDisabled">@color/button_red_text_disabled</item>
|
||||
|
||||
<item name="startButtonBackground">@drawable/button_start</item>
|
||||
|
||||
<item name="circleAccent">@drawable/circle_accent</item>
|
||||
|
||||
<item name="menuBackground">@color/bg_menu</item>
|
||||
|
@ -141,6 +143,8 @@
|
|||
<item name="redButtonTextColor">@color/button_red_text</item>
|
||||
<item name="redButtonTextColorDisabled">@color/button_red_text_disabled</item>
|
||||
|
||||
<item name="startButtonBackground">@drawable/button_start_night</item>
|
||||
|
||||
<item name="circleAccent">@drawable/circle_accent_night</item>
|
||||
|
||||
<item name="menuBackground">@color/bg_menu_night</item>
|
||||
|
|
|
@ -7,9 +7,6 @@ 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.api.ParsedRoutingData;
|
||||
import com.mapswithme.maps.api.ParsedUrlMwmRequest;
|
||||
import com.mapswithme.maps.bookmarks.data.DistanceAndAzimut;
|
||||
|
@ -17,6 +14,9 @@ import com.mapswithme.maps.bookmarks.data.MapObject;
|
|||
import com.mapswithme.maps.routing.RoutingInfo;
|
||||
import com.mapswithme.util.Constants;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
/**
|
||||
* This class wraps android::Framework.cpp class
|
||||
* via static methods
|
||||
|
@ -28,12 +28,14 @@ public class Framework
|
|||
public static final int MAP_STYLE_CLEAR = 2;
|
||||
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef({ROUTER_TYPE_VEHICLE, ROUTER_TYPE_PEDESTRIAN, ROUTER_TYPE_BICYCLE})
|
||||
@IntDef({ROUTER_TYPE_VEHICLE, ROUTER_TYPE_PEDESTRIAN, ROUTER_TYPE_BICYCLE, ROUTER_TYPE_TAXI})
|
||||
|
||||
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;
|
||||
public static final int ROUTER_TYPE_TAXI = 3;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public interface MapObjectListener
|
||||
|
|
|
@ -28,6 +28,7 @@ import com.mapswithme.maps.api.ParsedMwmRequest;
|
|||
import com.mapswithme.maps.api.ParsedRoutingData;
|
||||
import com.mapswithme.maps.api.ParsedUrlMwmRequest;
|
||||
import com.mapswithme.maps.api.RoutePoint;
|
||||
import com.mapswithme.maps.uber.UberInfo;
|
||||
import com.mapswithme.maps.base.BaseMwmFragmentActivity;
|
||||
import com.mapswithme.maps.base.OnBackPressListener;
|
||||
import com.mapswithme.maps.bookmarks.BookmarkCategoriesActivity;
|
||||
|
@ -745,7 +746,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
{
|
||||
RoutingPlanFragment fragment = (RoutingPlanFragment) getFragment(RoutingPlanFragment.class);
|
||||
if (fragment != null)
|
||||
fragment.saveAltitudeChartState(outState);
|
||||
fragment.saveRoutingPanelState(outState);
|
||||
}
|
||||
|
||||
if (mNavigationController != null)
|
||||
|
@ -904,8 +905,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
{
|
||||
super.onStart();
|
||||
RoutingController.get().attach(this);
|
||||
if (!mIsFragmentContainer)
|
||||
mRoutingPlanInplaceController.setStartButton();
|
||||
|
||||
if (MapFragment.nativeIsEngineCreated())
|
||||
LocationHelper.INSTANCE.attach(this);
|
||||
|
@ -1405,21 +1404,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRouteBuilt(@Framework.RouterType int router)
|
||||
{
|
||||
if (mIsFragmentContainer)
|
||||
{
|
||||
RoutingPlanFragment fragment = (RoutingPlanFragment) getFragment(RoutingPlanFragment.class);
|
||||
if (fragment != null)
|
||||
fragment.showRouteAltitudeChart(router != Framework.ROUTER_TYPE_VEHICLE);
|
||||
}
|
||||
else
|
||||
{
|
||||
mRoutingPlanInplaceController.showRouteAltitudeChart(router != Framework.ROUTER_TYPE_VEHICLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateBuildProgress(int progress, @Framework.RouterType int router)
|
||||
{
|
||||
|
@ -1435,6 +1419,22 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUberInfoReceived(@NonNull UberInfo info)
|
||||
{
|
||||
if (mIsFragmentContainer)
|
||||
{
|
||||
RoutingPlanFragment fragment = (RoutingPlanFragment) getFragment(RoutingPlanFragment.class);
|
||||
if (fragment != null)
|
||||
fragment.showUberInfo(info);
|
||||
}
|
||||
else
|
||||
{
|
||||
mRoutingPlanInplaceController.showUberInfo(info);
|
||||
mMainMenu.showLineFrame(true);
|
||||
}
|
||||
}
|
||||
|
||||
boolean isFirstStart()
|
||||
{
|
||||
boolean res = mFirstStart;
|
||||
|
|
|
@ -5,25 +5,27 @@ import android.content.Context;
|
|||
import android.content.DialogInterface;
|
||||
import android.support.annotation.DimenRes;
|
||||
import android.support.annotation.IntRange;
|
||||
import android.support.annotation.MainThread;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.mapswithme.maps.Framework;
|
||||
import com.mapswithme.maps.MwmApplication;
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.uber.Uber;
|
||||
import com.mapswithme.maps.uber.UberInfo;
|
||||
import com.mapswithme.maps.uber.UberLinks;
|
||||
import com.mapswithme.maps.bookmarks.data.MapObject;
|
||||
import com.mapswithme.maps.downloader.MapManager;
|
||||
import com.mapswithme.maps.location.LocationHelper;
|
||||
import com.mapswithme.util.Config;
|
||||
import com.mapswithme.util.StringUtils;
|
||||
import com.mapswithme.util.ThemeSwitcher;
|
||||
import com.mapswithme.util.UiUtils;
|
||||
import com.mapswithme.util.Utils;
|
||||
import com.mapswithme.util.concurrency.UiThread;
|
||||
import com.mapswithme.util.log.DebugLogger;
|
||||
|
@ -63,7 +65,7 @@ public class RoutingController
|
|||
void showDownloader(boolean openDownloaded);
|
||||
void updateMenu();
|
||||
void updatePoints();
|
||||
void onRouteBuilt(@Framework.RouterType int router);
|
||||
void onUberInfoReceived(@NonNull UberInfo info);
|
||||
|
||||
/**
|
||||
* @param progress progress to be displayed.
|
||||
|
@ -73,15 +75,16 @@ public class RoutingController
|
|||
|
||||
private static final RoutingController sInstance = new RoutingController();
|
||||
private final Logger mLogger = new DebugLogger("RCSTATE");
|
||||
|
||||
@Nullable
|
||||
private Container mContainer;
|
||||
private Button mStartButton;
|
||||
|
||||
private BuildState mBuildState = BuildState.NONE;
|
||||
private State mState = State.NONE;
|
||||
private int mWaitingPoiPickSlot = NO_SLOT;
|
||||
|
||||
@Nullable
|
||||
private MapObject mStartPoint;
|
||||
@Nullable
|
||||
private MapObject mEndPoint;
|
||||
|
||||
private int mLastBuildProgress;
|
||||
|
@ -117,8 +120,6 @@ public class RoutingController
|
|||
mCachedRoutingInfo = Framework.nativeGetRouteFollowingInfo();
|
||||
setBuildState(BuildState.BUILT);
|
||||
mLastBuildProgress = 100;
|
||||
if (mContainer != null)
|
||||
mContainer.onRouteBuilt(mLastRouterType);
|
||||
}
|
||||
|
||||
processRoutingEvent();
|
||||
|
@ -227,7 +228,6 @@ public class RoutingController
|
|||
public void detach()
|
||||
{
|
||||
mContainer = null;
|
||||
mStartButton = null;
|
||||
}
|
||||
|
||||
public void restore()
|
||||
|
@ -259,6 +259,8 @@ public class RoutingController
|
|||
org.alohalytics.Statistics.logEvent(AlohaHelper.ROUTING_BUILD, new String[] {Statistics.EventParam.FROM, Statistics.getPointType(mStartPoint),
|
||||
Statistics.EventParam.TO, Statistics.getPointType(mEndPoint)});
|
||||
Framework.nativeBuildRoute(mStartPoint.getLat(), mStartPoint.getLon(), mEndPoint.getLat(), mEndPoint.getLon());
|
||||
if (mLastRouterType == Framework.ROUTER_TYPE_TAXI)
|
||||
requestUberInfo();
|
||||
}
|
||||
|
||||
private void showDisclaimer(final MapObject startPoint, final MapObject endPoint)
|
||||
|
@ -400,25 +402,6 @@ public class RoutingController
|
|||
private void updatePlan()
|
||||
{
|
||||
updateProgress();
|
||||
updateStartButton();
|
||||
}
|
||||
|
||||
private void updateStartButton()
|
||||
{
|
||||
mLogger.d("updateStartButton" + (mStartButton == null ? ": SKIP" : ""));
|
||||
|
||||
if (mStartButton == null)
|
||||
return;
|
||||
|
||||
mStartButton.setEnabled(mState == State.PREPARE && mBuildState == BuildState.BUILT);
|
||||
UiUtils.updateAccentButton(mStartButton);
|
||||
}
|
||||
|
||||
void setStartButton(@Nullable Button button)
|
||||
{
|
||||
mLogger.d("setStartButton");
|
||||
mStartButton = button;
|
||||
updateStartButton();
|
||||
}
|
||||
|
||||
private void cancelInternal()
|
||||
|
@ -730,7 +713,7 @@ public class RoutingController
|
|||
mContainer.updatePoints();
|
||||
}
|
||||
|
||||
static CharSequence formatRoutingTime(Context context, int seconds, @DimenRes int unitsSize)
|
||||
public static CharSequence formatRoutingTime(Context context, int seconds, @DimenRes int unitsSize)
|
||||
{
|
||||
long minutes = TimeUnit.SECONDS.toMinutes(seconds) % 60;
|
||||
long hours = TimeUnit.SECONDS.toHours(seconds);
|
||||
|
@ -767,4 +750,27 @@ public class RoutingController
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void requestUberInfo()
|
||||
{
|
||||
Uber.nativeRequestUberProducts(mStartPoint.getLat(), mStartPoint.getLon(), mEndPoint.getLat(), mEndPoint.getLon());
|
||||
}
|
||||
|
||||
@NonNull
|
||||
UberLinks getUberLink(@NonNull String productId)
|
||||
{
|
||||
return Uber.nativeGetUberLinks(productId, mStartPoint.getLat(), mStartPoint.getLon(), mStartPoint.getLat(), mEndPoint.getLon());
|
||||
}
|
||||
|
||||
/**
|
||||
* Called from the native code
|
||||
* @param info this object contains information about Uber products
|
||||
*/
|
||||
@MainThread
|
||||
private void onUberInfoReceived(@NonNull UberInfo info)
|
||||
{
|
||||
mLogger.d("onUberInfoReceived uberInfo = " + info);
|
||||
if (mContainer != null)
|
||||
mContainer.onUberInfoReceived(info);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,8 +7,13 @@ import android.os.Bundle;
|
|||
import android.support.annotation.DrawableRes;
|
||||
import android.support.annotation.IdRes;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.StringRes;
|
||||
import android.support.v4.view.PagerAdapter;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.RadioButton;
|
||||
|
@ -16,20 +21,28 @@ import android.widget.RadioGroup;
|
|||
import android.widget.TextView;
|
||||
|
||||
import com.mapswithme.maps.Framework;
|
||||
import com.mapswithme.maps.MwmActivity;
|
||||
import com.mapswithme.maps.MwmApplication;
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.uber.UberAdapter;
|
||||
import com.mapswithme.maps.uber.UberInfo;
|
||||
import com.mapswithme.maps.uber.UberLinks;
|
||||
import com.mapswithme.maps.widget.DotPager;
|
||||
import com.mapswithme.maps.widget.RotateDrawable;
|
||||
import com.mapswithme.maps.widget.ToolbarController;
|
||||
import com.mapswithme.maps.widget.WheelProgressView;
|
||||
import com.mapswithme.util.Graphics;
|
||||
import com.mapswithme.util.UiUtils;
|
||||
import com.mapswithme.util.Utils;
|
||||
import com.mapswithme.util.statistics.AlohaHelper;
|
||||
import com.mapswithme.util.statistics.Statistics;
|
||||
|
||||
public class RoutingPlanController extends ToolbarController
|
||||
{
|
||||
static final int ANIM_TOGGLE = MwmApplication.get().getResources().getInteger(R.integer.anim_slots_toggle);
|
||||
private static final String STATE_ALTITUDE_CHART_SHOWN = "altitude chart shown";
|
||||
private static final String STATE_ALTITUDE_CHART_SHOWN = "altitude_chart_shown";
|
||||
private static final String STATE_TAXI_INFO = "taxi_info";
|
||||
|
||||
|
||||
protected final View mFrame;
|
||||
private final ImageView mToggle;
|
||||
|
@ -38,13 +51,19 @@ public class RoutingPlanController extends ToolbarController
|
|||
private final WheelProgressView mProgressVehicle;
|
||||
private final WheelProgressView mProgressPedestrian;
|
||||
private final WheelProgressView mProgressBicycle;
|
||||
private final WheelProgressView mProgressTaxi;
|
||||
private final View mAltitudeChartFrame;
|
||||
private final View mUberFrame;
|
||||
|
||||
private final RotateDrawable mToggleImage = new RotateDrawable(R.drawable.ic_down);
|
||||
private int mFrameHeight;
|
||||
private int mToolbarHeight;
|
||||
private boolean mOpen;
|
||||
private boolean mAltitudeChartShown;
|
||||
@Nullable
|
||||
private UberInfo mUberInfo;
|
||||
|
||||
@Nullable
|
||||
private UberInfo.Product mUberProduct;
|
||||
|
||||
private RadioButton setupRouterButton(@IdRes int buttonId, final @DrawableRes int iconRes, View.OnClickListener clickListener)
|
||||
{
|
||||
|
@ -66,7 +85,7 @@ public class RoutingPlanController extends ToolbarController
|
|||
return rb;
|
||||
}
|
||||
|
||||
public RoutingPlanController(View root, Activity activity)
|
||||
RoutingPlanController(View root, Activity activity)
|
||||
{
|
||||
super(root, activity);
|
||||
mFrame = root;
|
||||
|
@ -108,18 +127,29 @@ public class RoutingPlanController extends ToolbarController
|
|||
}
|
||||
});
|
||||
|
||||
setupRouterButton(R.id.taxi, R.drawable.ic_taxi, new View.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
AlohaHelper.logClick(AlohaHelper.ROUTING_TAXI_SET);
|
||||
Statistics.INSTANCE.trackEvent(Statistics.EventName.ROUTING_TAXI_SET);
|
||||
RoutingController.get().setRouterType(Framework.ROUTER_TYPE_TAXI);
|
||||
}
|
||||
});
|
||||
|
||||
View progressFrame = mToolbar.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);
|
||||
mProgressTaxi = (WheelProgressView) progressFrame.findViewById(R.id.progress_taxi);
|
||||
|
||||
View altitudeChartFrame = mFrame.findViewById(R.id.altitude_chart_panel);
|
||||
if (altitudeChartFrame == null)
|
||||
altitudeChartFrame = mActivity.findViewById(R.id.altitude_chart_panel);
|
||||
|
||||
mAltitudeChartFrame = altitudeChartFrame;
|
||||
mAltitudeChartFrame = getViewById(R.id.altitude_chart_panel);
|
||||
UiUtils.hide(mAltitudeChartFrame);
|
||||
|
||||
mUberFrame = getViewById(R.id.uber_panel);
|
||||
UiUtils.hide(mUberFrame);
|
||||
|
||||
mToggle.setImageDrawable(mToggleImage);
|
||||
mToggle.setOnClickListener(new View.OnClickListener()
|
||||
{
|
||||
|
@ -173,14 +203,22 @@ public class RoutingPlanController extends ToolbarController
|
|||
return;
|
||||
}
|
||||
|
||||
if (!isTaxiRouteChecked())
|
||||
setStartButton();
|
||||
showAltitudeChartAndRoutingDetails();
|
||||
}
|
||||
|
||||
private void showAltitudeChartAndRoutingDetails()
|
||||
{
|
||||
UiUtils.show(mAltitudeChartFrame);
|
||||
mAltitudeChartShown = true;
|
||||
if (isTaxiRouteChecked())
|
||||
return;
|
||||
|
||||
UiUtils.hide(getViewById(R.id.error));
|
||||
UiUtils.hide(mUberFrame);
|
||||
|
||||
showRouteAltitudeChart();
|
||||
showRoutingDetails();
|
||||
UiUtils.show(mAltitudeChartFrame);
|
||||
}
|
||||
|
||||
private void showRoutingDetails()
|
||||
|
@ -213,13 +251,11 @@ public class RoutingPlanController extends ToolbarController
|
|||
return;
|
||||
|
||||
UiUtils.hide(mAltitudeChartFrame);
|
||||
mAltitudeChartShown = false;
|
||||
}
|
||||
|
||||
public void updateBuildProgress(int progress, @Framework.RouterType int router)
|
||||
{
|
||||
updateProgressLabels();
|
||||
UiUtils.invisible(mProgressVehicle, mProgressPedestrian, mProgressBicycle);
|
||||
UiUtils.invisible(mProgressVehicle, mProgressPedestrian, mProgressBicycle, mProgressTaxi);
|
||||
WheelProgressView progressView;
|
||||
if (router == Framework.ROUTER_TYPE_VEHICLE)
|
||||
{
|
||||
|
@ -231,12 +267,19 @@ public class RoutingPlanController extends ToolbarController
|
|||
mRouterTypes.check(R.id.pedestrian);
|
||||
progressView = mProgressPedestrian;
|
||||
}
|
||||
else if (router == Framework.ROUTER_TYPE_TAXI)
|
||||
{
|
||||
mRouterTypes.check(R.id.taxi);
|
||||
progressView = mProgressTaxi;
|
||||
}
|
||||
else
|
||||
{
|
||||
mRouterTypes.check(R.id.bicycle);
|
||||
progressView = mProgressBicycle;
|
||||
}
|
||||
|
||||
updateProgressLabels();
|
||||
|
||||
if (!RoutingController.get().isBuilding())
|
||||
return;
|
||||
|
||||
|
@ -253,7 +296,7 @@ public class RoutingPlanController extends ToolbarController
|
|||
showSlots(!mOpen, true);
|
||||
}
|
||||
|
||||
protected void showSlots(final boolean show, final boolean animate)
|
||||
void showSlots(final boolean show, final boolean animate)
|
||||
{
|
||||
if (!checkFrameHeight())
|
||||
{
|
||||
|
@ -296,12 +339,17 @@ public class RoutingPlanController extends ToolbarController
|
|||
}
|
||||
}
|
||||
|
||||
protected boolean isVehicleRouteChecked()
|
||||
private boolean isVehicleRouteChecked()
|
||||
{
|
||||
return mRouterTypes.getCheckedRadioButtonId() == R.id.vehicle;
|
||||
}
|
||||
|
||||
public void disableToggle()
|
||||
private boolean isTaxiRouteChecked()
|
||||
{
|
||||
return mRouterTypes.getCheckedRadioButtonId() == R.id.taxi;
|
||||
}
|
||||
|
||||
void disableToggle()
|
||||
{
|
||||
UiUtils.hide(mToggle);
|
||||
showSlots(true, false);
|
||||
|
@ -312,15 +360,15 @@ public class RoutingPlanController extends ToolbarController
|
|||
return mOpen;
|
||||
}
|
||||
|
||||
public void showRouteAltitudeChart(boolean show)
|
||||
public void showRouteAltitudeChart()
|
||||
{
|
||||
ImageView altitudeChart = (ImageView) mFrame.findViewById(R.id.altitude_chart);
|
||||
showRouteAltitudeChartInternal(show, altitudeChart);
|
||||
showRouteAltitudeChartInternal(altitudeChart);
|
||||
}
|
||||
|
||||
protected void showRouteAltitudeChartInternal(boolean show, ImageView altitudeChart)
|
||||
void showRouteAltitudeChartInternal(@NonNull ImageView altitudeChart)
|
||||
{
|
||||
if (!show)
|
||||
if (isVehicleRouteChecked())
|
||||
{
|
||||
UiUtils.hide(altitudeChart);
|
||||
return;
|
||||
|
@ -336,14 +384,112 @@ public class RoutingPlanController extends ToolbarController
|
|||
}
|
||||
}
|
||||
|
||||
public void saveAltitudeChartState(@NonNull Bundle outState)
|
||||
public void showUberInfo(@NonNull UberInfo info)
|
||||
{
|
||||
outState.putBoolean(STATE_ALTITUDE_CHART_SHOWN, mAltitudeChartShown);
|
||||
final UberInfo.Product[] products = info.getProducts();
|
||||
if (products == null || products.length == 0)
|
||||
{
|
||||
UiUtils.hide(mUberFrame);
|
||||
showError(R.string.taxi_not_found);
|
||||
return;
|
||||
}
|
||||
|
||||
UiUtils.hide(getViewById(R.id.error));
|
||||
mUberInfo = info;
|
||||
mUberProduct = products[0];
|
||||
final PagerAdapter adapter = new UberAdapter(mActivity, products);
|
||||
DotPager pager = new DotPager.Builder(mActivity, (ViewPager) mUberFrame.findViewById(R.id.pager), adapter)
|
||||
.setIndicatorContainer((ViewGroup) mUberFrame.findViewById(R.id.indicator))
|
||||
.setPageChangedListener(new DotPager.OnPageChangedListener()
|
||||
{
|
||||
@Override
|
||||
public void onPageChanged(int position)
|
||||
{
|
||||
mUberProduct = products[position];
|
||||
}
|
||||
}).build();
|
||||
pager.show();
|
||||
|
||||
setStartButton();
|
||||
|
||||
UiUtils.hide(mAltitudeChartFrame);
|
||||
UiUtils.show(mUberFrame);
|
||||
}
|
||||
|
||||
public void restoreAltitudeChartState(@NonNull Bundle state)
|
||||
private void showError(@StringRes int message)
|
||||
{
|
||||
TextView error = (TextView) getViewById(R.id.error);
|
||||
error.setText(message);
|
||||
error.setVisibility(View.VISIBLE);
|
||||
getViewById(R.id.start).setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private View getViewById(@IdRes int resourceId)
|
||||
{
|
||||
View view = mFrame.findViewById(resourceId);
|
||||
if (view == null)
|
||||
view = mActivity.findViewById(resourceId);
|
||||
return view;
|
||||
}
|
||||
|
||||
void saveRoutingPanelState(@NonNull Bundle outState)
|
||||
{
|
||||
outState.putBoolean(STATE_ALTITUDE_CHART_SHOWN, UiUtils.isVisible(mAltitudeChartFrame));
|
||||
outState.putParcelable(STATE_TAXI_INFO, mUberInfo);
|
||||
}
|
||||
|
||||
void restoreRoutingPanelState(@NonNull Bundle state)
|
||||
{
|
||||
if (state.getBoolean(STATE_ALTITUDE_CHART_SHOWN))
|
||||
showRouteAltitudeChart(!isVehicleRouteChecked());
|
||||
showRouteAltitudeChart();
|
||||
|
||||
UberInfo info = state.getParcelable(STATE_TAXI_INFO);
|
||||
if (info != null)
|
||||
showUberInfo(info);
|
||||
}
|
||||
|
||||
private void setStartButton()
|
||||
{
|
||||
Button start = (Button) getViewById(R.id.start);
|
||||
|
||||
if (isTaxiRouteChecked())
|
||||
{
|
||||
start.setText(R.string.taxi_order);
|
||||
start.setOnClickListener(new View.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
if (mUberProduct != null)
|
||||
{
|
||||
UberLinks links = RoutingController.get().getUberLink(mUberProduct.getProductId());
|
||||
Utils.launchUber(mActivity, links);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else
|
||||
{
|
||||
start.setText(mActivity.getText(R.string.p2p_start));
|
||||
start.setOnClickListener(new View.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
((MwmActivity)mActivity).closeMenu(Statistics.EventName.ROUTING_START, AlohaHelper.ROUTING_START, new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
RoutingController.get().start();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
UiUtils.updateAccentButton(start);
|
||||
UiUtils.show(start);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,16 +6,17 @@ import android.support.annotation.Nullable;
|
|||
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.uber.UberInfo;
|
||||
import com.mapswithme.maps.base.BaseMwmFragment;
|
||||
import com.mapswithme.maps.base.OnBackPressListener;
|
||||
|
||||
public class RoutingPlanFragment extends BaseMwmFragment
|
||||
implements OnBackPressListener
|
||||
{
|
||||
|
||||
private RoutingPlanController mPlanController;
|
||||
|
||||
@Override
|
||||
|
@ -26,20 +27,9 @@ public class RoutingPlanFragment extends BaseMwmFragment
|
|||
mPlanController = new RoutingPlanController(res, getActivity());
|
||||
updatePoints();
|
||||
|
||||
Button start = (Button) res.findViewById(R.id.start);
|
||||
RoutingController.get().setStartButton(start);
|
||||
start.setOnClickListener(new View.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
RoutingController.get().start();
|
||||
}
|
||||
});
|
||||
|
||||
Bundle activityState = getMwmActivity().getSavedInstanceState();
|
||||
if (activityState != null)
|
||||
restoreAltitudeChartState(activityState);
|
||||
restoreRoutingPanelState(activityState);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -50,13 +40,6 @@ public class RoutingPlanFragment extends BaseMwmFragment
|
|||
mPlanController.disableToggle();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView()
|
||||
{
|
||||
super.onDestroyView();
|
||||
RoutingController.get().setStartButton(null);
|
||||
}
|
||||
|
||||
public void updatePoints()
|
||||
{
|
||||
mPlanController.updatePoints();
|
||||
|
@ -67,24 +50,24 @@ public class RoutingPlanFragment extends BaseMwmFragment
|
|||
mPlanController.updateBuildProgress(progress, router);
|
||||
}
|
||||
|
||||
public void showUberInfo(@NonNull UberInfo info)
|
||||
{
|
||||
mPlanController.showUberInfo(info);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBackPressed()
|
||||
{
|
||||
return RoutingController.get().cancelPlanning();
|
||||
}
|
||||
|
||||
public void showRouteAltitudeChart(boolean show)
|
||||
public void restoreRoutingPanelState(@NonNull Bundle state)
|
||||
{
|
||||
mPlanController.showRouteAltitudeChart(show);
|
||||
mPlanController.restoreRoutingPanelState(state);
|
||||
}
|
||||
|
||||
public void restoreAltitudeChartState(@NonNull Bundle state)
|
||||
public void saveRoutingPanelState(@NonNull Bundle outState)
|
||||
{
|
||||
mPlanController.restoreAltitudeChartState(state);
|
||||
}
|
||||
|
||||
public void saveAltitudeChartState(@NonNull Bundle outState)
|
||||
{
|
||||
mPlanController.saveAltitudeChartState(outState);
|
||||
mPlanController.saveRoutingPanelState(outState);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,8 +3,6 @@ package com.mapswithme.maps.routing;
|
|||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.mapswithme.maps.MwmActivity;
|
||||
|
@ -12,8 +10,6 @@ import com.mapswithme.maps.R;
|
|||
import com.mapswithme.maps.bookmarks.data.MapObject;
|
||||
import com.mapswithme.util.ThemeUtils;
|
||||
import com.mapswithme.util.UiUtils;
|
||||
import com.mapswithme.util.statistics.AlohaHelper;
|
||||
import com.mapswithme.util.statistics.Statistics;
|
||||
|
||||
public class RoutingPlanInplaceController extends RoutingPlanController
|
||||
{
|
||||
|
@ -56,33 +52,10 @@ public class RoutingPlanInplaceController extends RoutingPlanController
|
|||
updatePoints();
|
||||
}
|
||||
|
||||
public void setStartButton()
|
||||
{
|
||||
final MwmActivity activity = (MwmActivity) mActivity;
|
||||
|
||||
Button start = activity.getMainMenu().getRouteStartButton();
|
||||
RoutingController.get().setStartButton(start);
|
||||
start.setOnClickListener(new View.OnClickListener()
|
||||
{
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
activity.closeMenu(Statistics.EventName.ROUTING_START, AlohaHelper.ROUTING_START, new Runnable()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
RoutingController.get().start();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void onSaveState(@NonNull Bundle outState)
|
||||
{
|
||||
outState.putBoolean(STATE_OPEN, isOpen());
|
||||
saveAltitudeChartState(outState);
|
||||
saveRoutingPanelState(outState);
|
||||
}
|
||||
|
||||
public void restoreState(@NonNull Bundle state)
|
||||
|
@ -90,13 +63,13 @@ public class RoutingPlanInplaceController extends RoutingPlanController
|
|||
if (state.containsKey(STATE_OPEN))
|
||||
mSlotsRestoredState = state.getBoolean(STATE_OPEN);
|
||||
|
||||
restoreAltitudeChartState(state);
|
||||
restoreRoutingPanelState(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showRouteAltitudeChart(boolean show)
|
||||
public void showRouteAltitudeChart()
|
||||
{
|
||||
ImageView altitudeChart = (ImageView) mActivity.findViewById(R.id.altitude_chart);
|
||||
showRouteAltitudeChartInternal(show, altitudeChart);
|
||||
showRouteAltitudeChartInternal(altitudeChart);
|
||||
}
|
||||
}
|
||||
|
|
12
android/src/com/mapswithme/maps/uber/Uber.java
Normal file
|
@ -0,0 +1,12 @@
|
|||
package com.mapswithme.maps.uber;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
public class Uber
|
||||
{
|
||||
public static native void nativeRequestUberProducts(double srcLat, double srcLon, double dstLat, double dstLon);
|
||||
|
||||
@NonNull
|
||||
public static native UberLinks nativeGetUberLinks(@NonNull String productId, double srcLon, double srcLat,
|
||||
double dstLat, double dstLon);
|
||||
}
|
60
android/src/com/mapswithme/maps/uber/UberAdapter.java
Normal file
|
@ -0,0 +1,60 @@
|
|||
package com.mapswithme.maps.uber;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.view.PagerAdapter;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.routing.RoutingController;
|
||||
|
||||
public class UberAdapter extends PagerAdapter
|
||||
{
|
||||
@NonNull
|
||||
private final Context mContext;
|
||||
@NonNull
|
||||
private final UberInfo.Product[] mProducts;
|
||||
|
||||
public UberAdapter(@NonNull Context context, @NonNull UberInfo.Product[] products)
|
||||
{
|
||||
mContext = context;
|
||||
mProducts = products;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount()
|
||||
{
|
||||
return mProducts.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isViewFromObject(View view, Object object)
|
||||
{
|
||||
return view == object;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object instantiateItem(ViewGroup container, int position)
|
||||
{
|
||||
UberInfo.Product product = mProducts[position];
|
||||
|
||||
View v = LayoutInflater.from(mContext).inflate(R.layout.uber_pager_item, container, false);
|
||||
TextView name = (TextView) v.findViewById(R.id.product_name);
|
||||
name.setText(product.getName());
|
||||
TextView timeAndPrice = (TextView) v.findViewById(R.id.arrival_time_price);
|
||||
int time = Integer.parseInt(product.getTime());
|
||||
CharSequence waitTime = RoutingController.formatRoutingTime(mContext, time, R.dimen.text_size_body_3);
|
||||
timeAndPrice.setText(mContext.getString(R.string.taxi_wait, waitTime + " • " + product.getPrice()));
|
||||
container.addView(v, 0);
|
||||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroyItem(ViewGroup container, int position, Object object)
|
||||
{
|
||||
container.removeView((View) object);
|
||||
}
|
||||
}
|
159
android/src/com/mapswithme/maps/uber/UberInfo.java
Normal file
|
@ -0,0 +1,159 @@
|
|||
package com.mapswithme.maps.uber;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class UberInfo implements Parcelable
|
||||
{
|
||||
public static final Parcelable.Creator<UberInfo> CREATOR = new Parcelable.Creator<UberInfo>()
|
||||
{
|
||||
@Override
|
||||
public UberInfo createFromParcel(Parcel source)
|
||||
{
|
||||
return new UberInfo(source);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UberInfo[] newArray(int size)
|
||||
{
|
||||
return new UberInfo[size];
|
||||
}
|
||||
};
|
||||
|
||||
@Nullable
|
||||
private final Product[] mProducts;
|
||||
|
||||
private UberInfo(@Nullable Product[] products)
|
||||
{
|
||||
mProducts = products;
|
||||
}
|
||||
|
||||
private UberInfo(@NonNull Parcel parcel)
|
||||
{
|
||||
mProducts = (Product[]) parcel.readParcelableArray(Product.class.getClassLoader());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Product[] getProducts()
|
||||
{
|
||||
return mProducts;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "UberInfo{" +
|
||||
"mProducts=" + Arrays.toString(mProducts) +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags)
|
||||
{
|
||||
dest.writeParcelableArray(mProducts, 0);
|
||||
}
|
||||
|
||||
public static class Product implements Parcelable
|
||||
{
|
||||
public static final Parcelable.Creator<Product> CREATOR = new Parcelable.Creator<Product>()
|
||||
{
|
||||
@Override
|
||||
public Product createFromParcel(Parcel source)
|
||||
{
|
||||
return new Product(source);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Product[] newArray(int size)
|
||||
{
|
||||
return new Product[size];
|
||||
}
|
||||
};
|
||||
|
||||
@NonNull
|
||||
private final String mProductId;
|
||||
@NonNull
|
||||
private final String mName;
|
||||
@NonNull
|
||||
private final String mTime;
|
||||
@NonNull
|
||||
private final String mPrice;
|
||||
|
||||
private Product(@NonNull String productId, @NonNull String name, @NonNull String time, @NonNull String price)
|
||||
{
|
||||
mProductId = productId;
|
||||
mName = name;
|
||||
mTime = time;
|
||||
mPrice = price;
|
||||
}
|
||||
|
||||
private Product(@NonNull Parcel parcel)
|
||||
{
|
||||
mProductId = parcel.readString();
|
||||
mName = parcel.readString();
|
||||
mTime = parcel.readString();
|
||||
mPrice = parcel.readString();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getProductId()
|
||||
{
|
||||
return mProductId;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getName()
|
||||
{
|
||||
return mName;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getTime()
|
||||
{
|
||||
return mTime;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getPrice()
|
||||
{
|
||||
return mPrice;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "Product{" +
|
||||
"mProductId='" + mProductId + '\'' +
|
||||
", mName='" + mName + '\'' +
|
||||
", mTime='" + mTime + '\'' +
|
||||
", mPrice='" + mPrice + '\'' +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags)
|
||||
{
|
||||
dest.writeString(mProductId);
|
||||
dest.writeString(mName);
|
||||
dest.writeString(mTime);
|
||||
dest.writeString(mPrice);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
29
android/src/com/mapswithme/maps/uber/UberLinks.java
Normal file
|
@ -0,0 +1,29 @@
|
|||
package com.mapswithme.maps.uber;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
public class UberLinks
|
||||
{
|
||||
@NonNull
|
||||
private final String mDeepLink;
|
||||
@NonNull
|
||||
private final String mUniversalLink;
|
||||
|
||||
public UberLinks(@NonNull String deepLink, @NonNull String universalLink)
|
||||
{
|
||||
mDeepLink = deepLink;
|
||||
mUniversalLink = universalLink;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getDeepLink()
|
||||
{
|
||||
return mDeepLink;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getUniversalLink()
|
||||
{
|
||||
return mUniversalLink;
|
||||
}
|
||||
}
|
182
android/src/com/mapswithme/maps/widget/DotPager.java
Normal file
|
@ -0,0 +1,182 @@
|
|||
package com.mapswithme.maps.widget;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.DrawableRes;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.view.PagerAdapter;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.util.Log;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.util.ThemeUtils;
|
||||
import com.mapswithme.util.UiUtils;
|
||||
|
||||
/**
|
||||
* This widget allows the user to flip left and right through pages of data.
|
||||
* Also it can be configured with indicator view that will be placed below of pages.
|
||||
* The indicator will be drawn as the gray dots. A dots count will be equal page count.
|
||||
* The bold dot corresponds the current page.
|
||||
* <p>
|
||||
* There are few dependencies that should be provided to get this
|
||||
* widget work:
|
||||
* <p>
|
||||
* <ul>
|
||||
* <li>@see {@link ViewPager}</li>
|
||||
* <li>@see {@link PagerAdapter}</li>
|
||||
* <li>An indicator. It's a {@link ViewGroup} which will consist dots. If the indicator
|
||||
* is not needed this dependency can be missed or <code>null</code></li>
|
||||
* <li>@see {@link Context}</li>
|
||||
* <li>A page listener is an observable mechanism for listening page changing. It can be missed or null</li>
|
||||
* </ul>
|
||||
*/
|
||||
public class DotPager implements ViewPager.OnPageChangeListener
|
||||
{
|
||||
@NonNull
|
||||
private final ViewPager mPager;
|
||||
@NonNull
|
||||
private final PagerAdapter mAdapter;
|
||||
@Nullable
|
||||
private final ViewGroup mIndicator;
|
||||
@NonNull
|
||||
private final ImageView[] mDots;
|
||||
@NonNull
|
||||
private final Context mContext;
|
||||
@Nullable
|
||||
private final OnPageChangedListener mListener;
|
||||
|
||||
private DotPager(@NonNull Builder builder)
|
||||
{
|
||||
mContext = builder.mContext;
|
||||
mPager = builder.mPager;
|
||||
mAdapter = builder.mAdapter;
|
||||
mIndicator = builder.mIndicatorContainer;
|
||||
mListener = builder.mListener;
|
||||
mDots = new ImageView[mAdapter.getCount()];
|
||||
}
|
||||
|
||||
public void show()
|
||||
{
|
||||
configure();
|
||||
updateIndicator();
|
||||
}
|
||||
|
||||
private void configure()
|
||||
{
|
||||
configurePager();
|
||||
configureIndicator();
|
||||
}
|
||||
|
||||
private void configurePager()
|
||||
{
|
||||
mPager.setAdapter(mAdapter);
|
||||
mPager.clearOnPageChangeListeners();
|
||||
mPager.addOnPageChangeListener(this);
|
||||
}
|
||||
|
||||
private void configureIndicator()
|
||||
{
|
||||
if (mIndicator == null)
|
||||
return;
|
||||
|
||||
mIndicator.removeAllViews();
|
||||
|
||||
if (mAdapter.getCount() == 1)
|
||||
return;
|
||||
|
||||
for (int i = 0; i < mDots.length; i++)
|
||||
{
|
||||
mDots[i] = new ImageView(mContext);
|
||||
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||
layoutParams.setMargins(0, 0, UiUtils.dimen(mContext, R.dimen.margin_half), 0);
|
||||
mIndicator.addView(mDots[i], i, layoutParams);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageSelected(int position)
|
||||
{
|
||||
if (mIndicator != null)
|
||||
updateIndicator();
|
||||
|
||||
if (mListener != null)
|
||||
mListener.onPageChanged(position);
|
||||
}
|
||||
|
||||
private void updateIndicator()
|
||||
{
|
||||
if (mAdapter.getCount() == 1)
|
||||
return;
|
||||
|
||||
int currentPage = mPager.getCurrentItem();
|
||||
for (int i = 0; i < mAdapter.getCount(); i++)
|
||||
{
|
||||
boolean isCurPage = i == currentPage;
|
||||
@DrawableRes int dotDrawable;
|
||||
if (ThemeUtils.isNightTheme())
|
||||
dotDrawable = isCurPage ? R.drawable.news_marker_active_night : R.drawable.news_marker_inactive_night;
|
||||
else
|
||||
dotDrawable = isCurPage ? R.drawable.news_marker_active : R.drawable.news_marker_inactive;
|
||||
mDots[i].setImageResource(dotDrawable);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
|
||||
{
|
||||
//no op
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageScrollStateChanged(int state)
|
||||
{
|
||||
//no op
|
||||
}
|
||||
|
||||
public static class Builder
|
||||
{
|
||||
@NonNull
|
||||
private final ViewPager mPager;
|
||||
@NonNull
|
||||
private final PagerAdapter mAdapter;
|
||||
@Nullable
|
||||
private ViewGroup mIndicatorContainer;
|
||||
@NonNull
|
||||
private final Context mContext;
|
||||
@Nullable
|
||||
private OnPageChangedListener mListener;
|
||||
|
||||
public Builder(@NonNull Context context, @NonNull ViewPager pager, @NonNull PagerAdapter adapter)
|
||||
{
|
||||
mContext = context;
|
||||
mPager = pager;
|
||||
mAdapter = adapter;
|
||||
}
|
||||
|
||||
public Builder setIndicatorContainer(@NonNull ViewGroup indicatorContainer)
|
||||
{
|
||||
mIndicatorContainer = indicatorContainer;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setPageChangedListener(@Nullable OnPageChangedListener listener)
|
||||
{
|
||||
mListener = listener;
|
||||
return this;
|
||||
}
|
||||
|
||||
public DotPager build()
|
||||
{
|
||||
return new DotPager(this);
|
||||
}
|
||||
}
|
||||
|
||||
public interface OnPageChangedListener
|
||||
{
|
||||
void onPageChanged(int position);
|
||||
}
|
||||
}
|
|
@ -13,6 +13,7 @@ import com.mapswithme.maps.downloader.UpdateInfo;
|
|||
import com.mapswithme.maps.routing.RoutingController;
|
||||
import com.mapswithme.util.Graphics;
|
||||
import com.mapswithme.util.UiUtils;
|
||||
import ru.mail.android.mytarget.core.models.Stat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
@ -24,15 +25,22 @@ public class MainMenu extends BaseMenu
|
|||
public enum State
|
||||
{
|
||||
MENU
|
||||
{
|
||||
@Override
|
||||
boolean showToggle()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
},
|
||||
{
|
||||
@Override
|
||||
boolean showToggle()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
},
|
||||
NAVIGATION,
|
||||
ROUTE_PREPARE;
|
||||
ROUTE_PREPARE
|
||||
{
|
||||
@Override
|
||||
boolean showToggle()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
boolean showToggle()
|
||||
{
|
||||
|
@ -57,7 +65,6 @@ public class MainMenu extends BaseMenu
|
|||
private final List<View> mCollapseViews = new ArrayList<>();
|
||||
|
||||
private final MenuToggle mToggle;
|
||||
private Button mRouteStartButton;
|
||||
|
||||
// Maps Item into button view placed on mContentFrame
|
||||
private final Map<Item, View> mItemViews = new HashMap<>();
|
||||
|
@ -234,9 +241,6 @@ public class MainMenu extends BaseMenu
|
|||
mNewsMarker = mButtonsFrame.findViewById(R.id.marker);
|
||||
mNewsCounter = (TextView) mContentFrame.findViewById(R.id.counter);
|
||||
|
||||
if (mRoutePlanFrame != null)
|
||||
mRouteStartButton = (Button) mRoutePlanFrame.findViewById(R.id.start);
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
|
@ -261,8 +265,11 @@ public class MainMenu extends BaseMenu
|
|||
expandContent = false;
|
||||
} else
|
||||
{
|
||||
|
||||
UiUtils.showIf(state == State.MENU, mButtonsFrame);
|
||||
UiUtils.showIf(state == State.ROUTE_PREPARE, mRoutePlanFrame);
|
||||
UiUtils.showIf(isRouting, mRoutePlanFrame);
|
||||
if (isRouting)
|
||||
mToggle.hide();
|
||||
expandContent = isRouting;
|
||||
}
|
||||
|
||||
|
@ -306,11 +313,6 @@ public class MainMenu extends BaseMenu
|
|||
return mAnimationTrackListener;
|
||||
}
|
||||
|
||||
public Button getRouteStartButton()
|
||||
{
|
||||
return mRouteStartButton;
|
||||
}
|
||||
|
||||
public void showLineFrame(boolean show)
|
||||
{
|
||||
UiUtils.showIf(show, mLineFrame);
|
||||
|
|
|
@ -26,7 +26,7 @@ class MenuToggle
|
|||
this(frame, heightRes, R.drawable.ic_menu_open, R.drawable.ic_menu_close);
|
||||
}
|
||||
|
||||
MenuToggle(View frame, @DimenRes int heightRes, @DrawableRes int src, @DrawableRes int dst)
|
||||
private MenuToggle(View frame, @DimenRes int heightRes, @DrawableRes int src, @DrawableRes int dst)
|
||||
{
|
||||
mButton = (ImageView) frame.findViewById(R.id.toggle);
|
||||
mAlwaysShow = (frame.findViewById(R.id.disable_toggle) == null);
|
||||
|
@ -67,9 +67,17 @@ class MenuToggle
|
|||
|
||||
void show(boolean show)
|
||||
{
|
||||
//TODO: refactor mAlwaysShow logic, because now we shouldn't display
|
||||
// the toggle button when we are in prepare routing state (create JIRA item for that)
|
||||
// A temporary solution is the hide() method.
|
||||
UiUtils.showIf(mAlwaysShow || show, mButton);
|
||||
}
|
||||
|
||||
void hide()
|
||||
{
|
||||
UiUtils.hide(mButton);
|
||||
}
|
||||
|
||||
void setOpen(boolean open, boolean animate)
|
||||
{
|
||||
transitImage(mOpenImage, open, animate);
|
||||
|
|
|
@ -31,6 +31,7 @@ import com.mapswithme.maps.BuildConfig;
|
|||
import com.mapswithme.maps.MwmApplication;
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.activity.CustomNavigateUpListener;
|
||||
import com.mapswithme.maps.uber.UberLinks;
|
||||
import com.mapswithme.util.statistics.AlohaHelper;
|
||||
|
||||
import java.io.Closeable;
|
||||
|
@ -399,4 +400,22 @@ public class Utils
|
|||
|
||||
return installationId;
|
||||
}
|
||||
|
||||
public static void launchUber(@NonNull Activity context, @NonNull UberLinks links)
|
||||
{
|
||||
try
|
||||
{
|
||||
PackageManager pm = context.getPackageManager();
|
||||
pm.getPackageInfo("com.ubercab", PackageManager.GET_ACTIVITIES);
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setData(Uri.parse(links.getDeepLink()));
|
||||
context.startActivity(intent);
|
||||
} catch (PackageManager.NameNotFoundException e)
|
||||
{
|
||||
// No Uber app! Open mobile website.
|
||||
Intent i = new Intent(Intent.ACTION_VIEW);
|
||||
i.setData(Uri.parse(links.getUniversalLink()));
|
||||
context.startActivity(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -74,6 +74,7 @@ public class AlohaHelper
|
|||
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_TAXI_SET = "routerSetTaxi";
|
||||
public static final String ROUTING_SWAP_POINTS = "routeSwapPoints";
|
||||
public static final String ROUTING_TOGGLE = "routeToggle";
|
||||
public static final String ROUTING_SEARCH_POINT = "routSearchPoint";
|
||||
|
|
|
@ -110,6 +110,7 @@ public enum Statistics
|
|||
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_TAXI_SET = "Routing. Set taxi";
|
||||
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";
|
||||
|
|