Merge pull request #5878 from alexzatsepin/MAPSME-4328-transliteration-in-PP

[android] Added transliteration in PP
This commit is contained in:
Aleksandr Zatsepin 2017-04-21 10:40:44 +03:00 committed by GitHub
commit 60353ef637
9 changed files with 92 additions and 36 deletions

View file

@ -36,26 +36,29 @@ jobject CreateBanner(JNIEnv * env, string const & id, jint type)
}
jobject CreateMapObject(JNIEnv * env, int mapObjectType, string const & title,
string const & subtitle, double lat, double lon, string const & address,
Metadata const & metadata, string const & apiId, jobjectArray jbanners,
bool isReachableByTaxi, string const & bookingSearchUrl)
string const & secondaryTitle, string const & subtitle, double lat,
double lon, string const & address, Metadata const & metadata,
string const & apiId, jobjectArray jbanners, bool isReachableByTaxi,
string const & bookingSearchUrl)
{
// public MapObject(@MapObjectType int mapObjectType, String title, String subtitle, double lat,
// double lon, String address, String apiId, @NonNull Banner banner, boolean reachableByTaxi,
// @Nullable String bookingSearchUrl)
static jmethodID const ctorId =
jni::GetConstructorID(env, g_mapObjectClazz,
"(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;DDLjava/lang/"
"(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;DDLjava/lang/"
"String;[Lcom/mapswithme/maps/ads/Banner;ZLjava/lang/String;)V");
jni::TScopedLocalRef jTitle(env, jni::ToJavaString(env, title));
jni::TScopedLocalRef jSecondaryTitle(env, jni::ToJavaString(env, secondaryTitle));
jni::TScopedLocalRef jSubtitle(env, jni::ToJavaString(env, subtitle));
jni::TScopedLocalRef jAddress(env, jni::ToJavaString(env, address));
jni::TScopedLocalRef jApiId(env, jni::ToJavaString(env, apiId));
jni::TScopedLocalRef jBookingSearchUrl(env, jni::ToJavaString(env, bookingSearchUrl));
jobject mapObject = env->NewObject(g_mapObjectClazz, ctorId, mapObjectType, jTitle.get(),
jSubtitle.get(), jAddress.get(), lat, lon, jApiId.get(),
jbanners, isReachableByTaxi, jBookingSearchUrl.get());
jSecondaryTitle.get(), jSubtitle.get(), jAddress.get(), lat,
lon, jApiId.get(), jbanners, isReachableByTaxi,
jBookingSearchUrl.get());
InjectMetadata(env, g_mapObjectClazz, mapObject, metadata);
return mapObject;
@ -73,8 +76,8 @@ jobject CreateMapObject(JNIEnv * env, place_page::Info const & info)
// String name, @Nullable String objectTitle, @NonNull Banner banner, boolean reachableByTaxi)
static jmethodID const ctorId =
jni::GetConstructorID(env, g_bookmarkClazz,
"(IILjava/lang/String;Ljava/lang/String;[Lcom/mapswithme/maps/ads/"
"Banner;ZLjava/lang/String;)V");
"(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;"
"[Lcom/mapswithme/maps/ads/Banner;ZLjava/lang/String;)V");
auto const & bac = info.GetBookmarkAndCategory();
BookmarkCategory * cat = g_framework->NativeFramework()->GetBmCategory(bac.m_categoryIndex);
@ -83,11 +86,12 @@ jobject CreateMapObject(JNIEnv * env, place_page::Info const & info)
jni::TScopedLocalRef jName(env, jni::ToJavaString(env, data.GetName()));
jni::TScopedLocalRef jTitle(env, jni::ToJavaString(env, info.GetTitle()));
jni::TScopedLocalRef jSecondaryTitle(env, jni::ToJavaString(env, info.GetSecondaryTitle()));
jni::TScopedLocalRef jBookingSearchUrl(env, jni::ToJavaString(env, info.GetBookingSearchUrl()));
jobject mapObject =
env->NewObject(g_bookmarkClazz, ctorId, static_cast<jint>(info.m_bac.m_categoryIndex),
static_cast<jint>(info.m_bac.m_bookmarkIndex), jName.get(), jTitle.get(),
jbanners, info.IsReachableByTaxi(), jBookingSearchUrl.get());
jSecondaryTitle.get(), jbanners, info.IsReachableByTaxi(), jBookingSearchUrl.get());
if (info.IsFeature())
InjectMetadata(env, g_mapObjectClazz, mapObject, info.GetMetadata());
return mapObject;
@ -100,17 +104,17 @@ jobject CreateMapObject(JNIEnv * env, place_page::Info const & info)
// TODO(yunikkk): object can be POI + API + search result + bookmark simultaneously.
// TODO(yunikkk): Should we pass localized strings here and in other methods as byte arrays?
if (info.IsMyPosition())
return CreateMapObject(env, kMyPosition, info.GetTitle(), info.GetSubtitle(), ll.lat, ll.lon,
address.FormatAddress(), {}, "", jbanners, info.IsReachableByTaxi(),
info.GetBookingSearchUrl());
return CreateMapObject(env, kMyPosition, info.GetTitle(), info.GetSecondaryTitle(),
info.GetSubtitle(), ll.lat, ll.lon, address.FormatAddress(), {}, "",
jbanners, info.IsReachableByTaxi(), info.GetBookingSearchUrl());
if (info.HasApiUrl())
return CreateMapObject(env, kApiPoint, info.GetTitle(), info.GetSubtitle(), ll.lat, ll.lon,
address.FormatAddress(), info.GetMetadata(), info.GetApiUrl(), jbanners,
info.IsReachableByTaxi(), info.GetBookingSearchUrl());
return CreateMapObject(env, kApiPoint, info.GetTitle(), info.GetSecondaryTitle(), info.GetSubtitle(),
ll.lat, ll.lon, address.FormatAddress(), info.GetMetadata(),
info.GetApiUrl(), jbanners, info.IsReachableByTaxi(), info.GetBookingSearchUrl());
return CreateMapObject(env, kPoi, info.GetTitle(), info.GetSubtitle(), ll.lat, ll.lon,
address.FormatAddress(),
return CreateMapObject(env, kPoi, info.GetTitle(), info.GetSecondaryTitle(), info.GetSubtitle(),
ll.lat, ll.lon, address.FormatAddress(),
info.IsFeature() ? info.GetMetadata() : Metadata(), "", jbanners,
info.IsReachableByTaxi(), info.GetBookingSearchUrl());
}

View file

@ -35,12 +35,31 @@
tools:ignore="UnusedAttribute"
tools:text="Title"/>
<TextView
android:id="@+id/tv__secondary_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv__title"
android:layout_alignWithParentIfMissing="true"
android:layout_marginTop="@dimen/margin_quarter"
android:layout_marginEnd="@dimen/margin_base"
android:layout_marginRight="@dimen/margin_base"
android:layout_alignLeft="@id/tv__title"
android:layout_alignStart="@id/tv__title"
android:ellipsize="end"
android:fontFamily="@string/robotoMedium"
android:maxLines="@integer/pp_title_lines"
android:textAppearance="@style/MwmTextAppearance.Body1"
tools:background="#C0800000"
tools:ignore="UnusedAttribute"
tools:text="Secondary Title"/>
<TextView
android:id="@+id/tv__subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignWithParentIfMissing="true"
android:layout_below="@id/tv__title"
android:layout_below="@id/tv__secondary_title"
android:layout_marginTop="@dimen/margin_quarter"
android:layout_toEndOf="@id/downloader_status_frame"
android:layout_toLeftOf="@+id/direction_frame"
@ -59,7 +78,7 @@
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignWithParentIfMissing="true"
android:layout_below="@id/tv__title"
android:layout_below="@id/tv__secondary_title"
android:background="?selectableItemBackground"
android:gravity="center_vertical"
android:minHeight="@dimen/direction_frame_min_height"

View file

@ -39,12 +39,31 @@
tools:ignore="UnusedAttribute"
tools:text="Title"/>
<TextView
android:id="@+id/tv__secondary_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv__title"
android:layout_alignWithParentIfMissing="true"
android:layout_marginTop="@dimen/margin_quarter"
android:layout_marginEnd="@dimen/margin_base"
android:layout_marginRight="@dimen/margin_base"
android:layout_alignLeft="@id/tv__title"
android:layout_alignStart="@id/tv__title"
android:ellipsize="end"
android:fontFamily="@string/robotoMedium"
android:maxLines="@integer/pp_title_lines"
android:textAppearance="@style/MwmTextAppearance.Body1"
tools:background="#C0800000"
tools:ignore="UnusedAttribute"
tools:text="Secondary Title"/>
<TextView
android:id="@+id/tv__subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignWithParentIfMissing="true"
android:layout_below="@id/tv__title"
android:layout_below="@id/tv__secondary_title"
android:layout_marginTop="@dimen/margin_quarter"
android:layout_marginStart="@dimen/margin_base"
android:layout_marginLeft="@dimen/margin_base"
@ -67,7 +86,7 @@
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignWithParentIfMissing="true"
android:layout_below="@id/tv__title"
android:layout_below="@id/tv__secondary_title"
android:background="?selectableItemBackground"
android:gravity="center_vertical"
android:minHeight="@dimen/direction_frame_min_height"

View file

@ -1396,9 +1396,9 @@ public class MwmActivity extends BaseMwmFragmentActivity
RoutingController.get().setRouterType(data.mRouterType);
final RoutePoint from = data.mPoints[0];
final RoutePoint to = data.mPoints[1];
RoutingController.get().prepare(new MapObject(MapObject.API_POINT, from.mName, "", "",
RoutingController.get().prepare(new MapObject(MapObject.API_POINT, from.mName, "", "", "",
from.mLat, from.mLon, "", null, false, ""),
new MapObject(MapObject.API_POINT, to.mName, "", "",
new MapObject(MapObject.API_POINT, to.mName, "", "", "",
to.mLat, to.mLon, "", null, false, ""));
return true;
case ParsedUrlMwmRequest.RESULT_SEARCH:

View file

@ -24,10 +24,11 @@ public class Bookmark extends MapObject
private final String mObjectTitle;
Bookmark(@IntRange(from = 0) int categoryId, @IntRange(from = 0) int bookmarkId, String title,
@Nullable String objectTitle, @Nullable Banner[] banners, boolean reachableByTaxi,
@Nullable String bookingSearchUrl)
@Nullable String secondaryTitle, @Nullable String objectTitle, @Nullable Banner[] banners,
boolean reachableByTaxi, @Nullable String bookingSearchUrl)
{
super(BOOKMARK, title, "", "", 0, 0, "", banners, reachableByTaxi, bookingSearchUrl);
super(BOOKMARK, title, secondaryTitle, "", "", 0, 0, "", banners, reachableByTaxi,
bookingSearchUrl);
mCategoryId = categoryId;
mBookmarkId = bookmarkId;

View file

@ -33,6 +33,8 @@ public class MapObject implements Parcelable
private final int mMapObjectType;
protected String mTitle;
@Nullable
private String mSecondaryTitle;
private String mSubtitle;
private double mLat;
private double mLon;
@ -45,20 +47,23 @@ public class MapObject implements Parcelable
@Nullable
private String mBookingSearchUrl;
public MapObject(@MapObjectType int mapObjectType, String title, String subtitle, String address,
double lat, double lon, String apiId, @Nullable Banner[] banners,
boolean reachableByTaxi, @Nullable String bookingSearchUrl)
public MapObject(@MapObjectType int mapObjectType, String title, @Nullable String secondaryTitle,
String subtitle, String address, double lat, double lon, String apiId,
@Nullable Banner[] banners, boolean reachableByTaxi,
@Nullable String bookingSearchUrl)
{
this(mapObjectType, title, subtitle, address, lat, lon, new Metadata(), apiId, banners,
reachableByTaxi, bookingSearchUrl);
this(mapObjectType, title, secondaryTitle, subtitle, address, lat, lon, new Metadata(),
apiId, banners, reachableByTaxi, bookingSearchUrl);
}
public MapObject(@MapObjectType int mapObjectType, String title, String subtitle, String address,
double lat, double lon, Metadata metadata, String apiId, @Nullable Banner[] banners,
boolean reachableByTaxi, @Nullable String bookingSearchUrl)
public MapObject(@MapObjectType int mapObjectType, String title, @Nullable String secondaryTitle,
String subtitle, String address, double lat, double lon, Metadata metadata,
String apiId, @Nullable Banner[] banners, boolean reachableByTaxi,
@Nullable String bookingSearchUrl)
{
mMapObjectType = mapObjectType;
mTitle = title;
mSecondaryTitle = secondaryTitle;
mSubtitle = subtitle;
mAddress = address;
mLat = lat;
@ -76,6 +81,7 @@ public class MapObject implements Parcelable
//noinspection ResourceType
this(source.readInt(), // MapObjectType
source.readString(), // Title
source.readString(), // SecondaryTitle
source.readString(), // Subtitle
source.readString(), // Address
source.readDouble(), // Lat
@ -132,6 +138,9 @@ public class MapObject implements Parcelable
public String getTitle() { return mTitle; }
@Nullable
public String getSecondaryTitle() { return mSecondaryTitle; }
public String getSubtitle() { return mSubtitle; }
public double getLat() { return mLat; }
@ -237,6 +246,7 @@ public class MapObject implements Parcelable
dest.writeInt(mMapObjectType); // write map object type twice - first int is used to distinguish created object (MapObject or Bookmark)
dest.writeInt(mMapObjectType);
dest.writeString(mTitle);
dest.writeString(mSecondaryTitle);
dest.writeString(mSubtitle);
dest.writeString(mAddress);
dest.writeDouble(mLat);

View file

@ -218,7 +218,7 @@ public enum LocationHelper
return null;
if (mMyPosition == null)
mMyPosition = new MapObject(MapObject.MY_POSITION, "", "", "", mSavedLocation.getLatitude(),
mMyPosition = new MapObject(MapObject.MY_POSITION, "", "", "", "", mSavedLocation.getLatitude(),
mSavedLocation.getLongitude(), "", null, false, "");
return mMyPosition;

View file

@ -466,7 +466,7 @@ public class SearchFragment extends BaseMwmFragment
if (mFromRoutePlan)
{
//noinspection ConstantConditions
final MapObject point = new MapObject(MapObject.SEARCH, result.name,
final MapObject point = new MapObject(MapObject.SEARCH, result.name, "",
result.description.featureType, "", result.lat, result.lon, "", null, false, "");
RoutingController.get().onPoiSelected(point);
}

View file

@ -125,6 +125,7 @@ public class PlacePageView extends RelativeLayout
private ViewGroup mPreview;
private Toolbar mToolbar;
private TextView mTvTitle;
private TextView mTvSecondaryTitle;
private TextView mTvSubtitle;
private ArrowView mAvDirection;
private TextView mTvDistance;
@ -302,6 +303,7 @@ public class PlacePageView extends RelativeLayout
mPreview = (ViewGroup) findViewById(R.id.pp__preview);
mTvTitle = (TextView) mPreview.findViewById(R.id.tv__title);
mTvSecondaryTitle = (TextView) mPreview.findViewById(R.id.tv__secondary_title);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mTvSubtitle = (TextView) mPreview.findViewById(R.id.tv__subtitle);
@ -1151,6 +1153,7 @@ public class PlacePageView extends RelativeLayout
private void refreshPreview(@NonNull MapObject mapObject)
{
UiUtils.setTextAndHideIfEmpty(mTvTitle, mapObject.getTitle());
UiUtils.setTextAndHideIfEmpty(mTvSecondaryTitle, mapObject.getSecondaryTitle());
if (mToolbar != null)
mToolbar.setTitle(mapObject.getTitle());
UiUtils.setTextAndHideIfEmpty(mTvSubtitle, mapObject.getSubtitle());