forked from organicmaps/organicmaps
[android] Replaced heavy call to get bookmark on light one, made acquirement of new object through JNI
This commit is contained in:
parent
44d6c20eb5
commit
87e9d70ace
16 changed files with 293 additions and 120 deletions
|
@ -105,4 +105,23 @@ Java_com_mapswithme_maps_bookmarks_data_Bookmark_nativeEncode2Ge0Url(
|
|||
{
|
||||
return jni::ToJavaString(env, frm()->CodeGe0url(getBookmark(bmk), addName));
|
||||
}
|
||||
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_com_mapswithme_maps_bookmarks_data_Bookmark_nativeGetAddress(
|
||||
JNIEnv * env, jobject thiz, jlong bmkId)
|
||||
{
|
||||
auto const address = frm()->GetAddressAtPoint(getBookmark(bmkId)->GetPivot()).FormatAddress();
|
||||
return jni::ToJavaString(env, address);
|
||||
}
|
||||
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_com_mapswithme_maps_bookmarks_data_Bookmark_nativeToLatLon(
|
||||
JNIEnv * env, jobject thiz, jdouble mercX, jdouble mercY)
|
||||
{
|
||||
auto const mercPoint = m2::PointD(static_cast<double>(mercX), static_cast<double>(mercY));
|
||||
auto const latLon = MercatorBounds::ToLatLon(mercPoint);
|
||||
auto const latlonPoint = m2::PointD(latLon.m_lat, latLon.m_lon);
|
||||
|
||||
return jni::GetNewParcelablePointD(env, latlonPoint);
|
||||
}
|
||||
} // extern "C"
|
||||
|
|
|
@ -62,6 +62,9 @@ jclass g_longClass;
|
|||
jmethodID g_longConstructor;
|
||||
jmethodID g_onBookmarksSortingCompleted;
|
||||
jmethodID g_onBookmarksSortingCancelled;
|
||||
jmethodID g_bookmarkInfoConstructor;
|
||||
jclass g_bookmarkInfoClass;
|
||||
|
||||
|
||||
void PrepareClassRefs(JNIEnv * env)
|
||||
{
|
||||
|
@ -132,9 +135,13 @@ void PrepareClassRefs(JNIEnv * env)
|
|||
"onBookmarksSortingCompleted", "([Lcom/mapswithme/maps/bookmarks/data/SortedBlock;J)V");
|
||||
g_onBookmarksSortingCancelled = jni::GetMethodID(env, bookmarkManagerInstance,
|
||||
"onBookmarksSortingCancelled", "(J)V");
|
||||
|
||||
g_bookmarkInfoClass =
|
||||
jni::GetGlobalClassRef(env, "com/mapswithme/maps/bookmarks/data/BookmarkInfo");
|
||||
g_bookmarkInfoConstructor =
|
||||
jni::GetConstructorID(env, g_bookmarkInfoClass, "(JJ)V" );
|
||||
g_bookmarkCategoryClass =
|
||||
jni::GetGlobalClassRef(env, "com/mapswithme/maps/bookmarks/data/BookmarkCategory");
|
||||
|
||||
//public BookmarkCategory(long id,
|
||||
// String name,
|
||||
// String authorId,
|
||||
|
@ -767,6 +774,15 @@ Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeGetBookmark(
|
|||
return usermark_helper::CreateMapObject(env, info);
|
||||
}
|
||||
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeGetBookmarkInfo(
|
||||
JNIEnv * env, jobject thiz, jlong bmkId)
|
||||
{
|
||||
auto const mark = frm()->GetBookmarkManager().GetBookmark(static_cast<kml::MarkId>(bmkId));
|
||||
return env->NewObject(g_bookmarkInfoClass,
|
||||
g_bookmarkInfoConstructor, static_cast<jlong>(mark->GetGroupId()), static_cast<jlong>(bmkId));
|
||||
}
|
||||
|
||||
JNIEXPORT jlong JNICALL
|
||||
Java_com_mapswithme_maps_bookmarks_data_BookmarkManager_nativeGetBookmarkIdByPosition(
|
||||
JNIEnv * env, jobject thiz, jlong catId, jint positionInCategory)
|
||||
|
|
|
@ -445,7 +445,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
|||
final String geoUrl = Framework.nativeGetGe0Url(loc.getLatitude(), loc.getLongitude(), Framework.nativeGetDrawScale(), "");
|
||||
final String httpUrl = Framework.getHttpGe0Url(loc.getLatitude(), loc.getLongitude(), Framework.nativeGetDrawScale(), "");
|
||||
final String body = getString(R.string.my_position_share_sms, geoUrl, httpUrl);
|
||||
ShareOption.ANY.share(this, body);
|
||||
ShareOption.AnyShareOption.ANY.share(this, body);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ public class BookmarkListAdapter extends RecyclerView.Adapter<Holders.BaseBookma
|
|||
}
|
||||
}
|
||||
|
||||
public abstract class SectionsDataSource
|
||||
public static abstract class SectionsDataSource
|
||||
{
|
||||
@NonNull
|
||||
private final DataSource<BookmarkCategory> mDataSource;
|
||||
|
@ -111,7 +111,7 @@ public class BookmarkListAdapter extends RecyclerView.Adapter<Holders.BaseBookma
|
|||
public abstract void onDelete(@NonNull SectionPosition pos);
|
||||
}
|
||||
|
||||
private class CategorySectionsDataSource extends SectionsDataSource
|
||||
private static class CategorySectionsDataSource extends SectionsDataSource
|
||||
{
|
||||
private int mSectionsCount;
|
||||
private int mDescriptionSectionIndex;
|
||||
|
@ -206,7 +206,7 @@ public class BookmarkListAdapter extends RecyclerView.Adapter<Holders.BaseBookma
|
|||
}
|
||||
}
|
||||
|
||||
private class SearchResultsSectionsDataSource extends SectionsDataSource
|
||||
private static class SearchResultsSectionsDataSource extends SectionsDataSource
|
||||
{
|
||||
@NonNull
|
||||
private final List<Long> mSearchResults;
|
||||
|
@ -255,7 +255,7 @@ public class BookmarkListAdapter extends RecyclerView.Adapter<Holders.BaseBookma
|
|||
}
|
||||
}
|
||||
|
||||
private class SortedSectionsDataSource extends SectionsDataSource
|
||||
private static class SortedSectionsDataSource extends SectionsDataSource
|
||||
{
|
||||
@NonNull
|
||||
private List<SortedBlock> mSortedBlocks;
|
||||
|
@ -540,7 +540,7 @@ public class BookmarkListAdapter extends RecyclerView.Adapter<Holders.BaseBookma
|
|||
else
|
||||
{
|
||||
final long bookmarkId = mSectionsDataSource.getBookmarkId(pos);
|
||||
return BookmarkManager.INSTANCE.getBookmark(bookmarkId);
|
||||
return BookmarkManager.INSTANCE.getLightWeightBookmark(bookmarkId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,8 +24,8 @@ import com.crashlytics.android.Crashlytics;
|
|||
import com.mapswithme.maps.MwmActivity;
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.base.BaseMwmRecyclerFragment;
|
||||
import com.mapswithme.maps.bookmarks.data.Bookmark;
|
||||
import com.mapswithme.maps.bookmarks.data.BookmarkCategory;
|
||||
import com.mapswithme.maps.bookmarks.data.BookmarkInfo;
|
||||
import com.mapswithme.maps.bookmarks.data.BookmarkManager;
|
||||
import com.mapswithme.maps.bookmarks.data.BookmarkSharingResult;
|
||||
import com.mapswithme.maps.bookmarks.data.CategoryDataSource;
|
||||
|
@ -215,7 +215,7 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<BookmarkListA
|
|||
mFabViewOnMap = view.findViewById(R.id.fabViewOnMap);
|
||||
mFabViewOnMap.setOnClickListener(v ->
|
||||
{
|
||||
final Intent i = new Intent(requireActivity(), MwmActivity.class);
|
||||
final Intent i = makeMwmActivityIntent();
|
||||
i.putExtra(MwmActivity.EXTRA_TASK,
|
||||
new Factory.ShowBookmarkCategoryTask(mCategoryDataSource.getData().getId()));
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
|
@ -496,7 +496,7 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<BookmarkListA
|
|||
|
||||
public void onItemClick(int position)
|
||||
{
|
||||
final Intent i = new Intent(requireActivity(), MwmActivity.class);
|
||||
final Intent intent = makeMwmActivityIntent();
|
||||
|
||||
BookmarkListAdapter adapter = getAdapter();
|
||||
|
||||
|
@ -507,26 +507,44 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<BookmarkListA
|
|||
return;
|
||||
|
||||
case BookmarkListAdapter.TYPE_BOOKMARK:
|
||||
if (getAdapter().isSearchResults())
|
||||
trackBookmarksSearchResultSelected();
|
||||
final Bookmark bookmark = (Bookmark) adapter.getItem(position);
|
||||
i.putExtra(MwmActivity.EXTRA_TASK,
|
||||
new Factory.ShowBookmarkTask(bookmark.getCategoryId(), bookmark.getBookmarkId()));
|
||||
if (BookmarkManager.INSTANCE.isGuide(mCategoryDataSource.getData()))
|
||||
Statistics.INSTANCE.trackGuideBookmarkSelect(mCategoryDataSource.getData().getServerId());
|
||||
onBookmarkClicked(position, intent, adapter);
|
||||
break;
|
||||
|
||||
case BookmarkListAdapter.TYPE_TRACK:
|
||||
final Track track = (Track) adapter.getItem(position);
|
||||
i.putExtra(MwmActivity.EXTRA_TASK,
|
||||
new Factory.ShowTrackTask(track.getCategoryId(), track.getTrackId()));
|
||||
if (BookmarkManager.INSTANCE.isGuide(mCategoryDataSource.getData()))
|
||||
Statistics.INSTANCE.trackGuideTrackSelect(mCategoryDataSource.getData().getServerId());
|
||||
onTrackClicked(position, intent, adapter);
|
||||
break;
|
||||
}
|
||||
|
||||
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
startActivity(i);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private Intent makeMwmActivityIntent()
|
||||
{
|
||||
return new Intent(requireActivity(), MwmActivity.class);
|
||||
}
|
||||
|
||||
private void onTrackClicked(int position, @NonNull Intent i, @NonNull BookmarkListAdapter adapter)
|
||||
{
|
||||
final Track track = (Track) adapter.getItem(position);
|
||||
i.putExtra(MwmActivity.EXTRA_TASK,
|
||||
new Factory.ShowTrackTask(track.getCategoryId(), track.getTrackId()));
|
||||
if (BookmarkManager.INSTANCE.isGuide(mCategoryDataSource.getData()))
|
||||
Statistics.INSTANCE.trackGuideTrackSelect(mCategoryDataSource.getData().getServerId());
|
||||
}
|
||||
|
||||
private void onBookmarkClicked(int position, Intent i, BookmarkListAdapter adapter)
|
||||
{
|
||||
if (getAdapter().isSearchResults())
|
||||
trackBookmarksSearchResultSelected();
|
||||
|
||||
final BookmarkInfo bookmark = (BookmarkInfo) adapter.getItem(position);
|
||||
i.putExtra(MwmActivity.EXTRA_TASK,
|
||||
new Factory.ShowBookmarkTask(bookmark.getCategoryId(), bookmark.getBookmarkId()));
|
||||
|
||||
if (BookmarkManager.INSTANCE.isGuide(mCategoryDataSource.getData()))
|
||||
Statistics.INSTANCE.trackGuideBookmarkSelect(mCategoryDataSource.getData().getServerId());
|
||||
}
|
||||
|
||||
public void onItemMore(int position)
|
||||
|
@ -544,7 +562,7 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<BookmarkListA
|
|||
break;
|
||||
|
||||
case BookmarkListAdapter.TYPE_BOOKMARK:
|
||||
final Bookmark bookmark = (Bookmark) adapter.getItem(mSelectedPosition);
|
||||
final BookmarkInfo bookmark = (BookmarkInfo) adapter.getItem(mSelectedPosition);
|
||||
int menuResId = isDownloadedCategory() ? R.menu.menu_bookmarks_catalog
|
||||
: R.menu.menu_bookmarks;
|
||||
BottomSheet bs = BottomSheetHelper.create(requireActivity(), bookmark.getTitle())
|
||||
|
@ -579,11 +597,12 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<BookmarkListA
|
|||
public boolean onBookmarkMenuItemClicked(@NonNull MenuItem menuItem)
|
||||
{
|
||||
BookmarkListAdapter adapter = getAdapter();
|
||||
Bookmark item = (Bookmark) adapter.getItem(mSelectedPosition);
|
||||
BookmarkInfo item = (BookmarkInfo) adapter.getItem(mSelectedPosition);
|
||||
switch (menuItem.getItemId())
|
||||
{
|
||||
case R.id.share:
|
||||
ShareOption.ANY.shareMapObject(requireActivity(), item, Sponsored.nativeGetCurrent());
|
||||
ShareOption.AnyShareOption.ANY.shareBookmarkObject(requireActivity(), item,
|
||||
Sponsored.nativeGetCurrent());
|
||||
break;
|
||||
|
||||
case R.id.edit:
|
||||
|
|
|
@ -180,11 +180,17 @@ public class Bookmark extends MapObject
|
|||
|
||||
private native String nativeGetBookmarkDescription(@IntRange(from = 0) long bookmarkId);
|
||||
|
||||
private native double nativeGetScale(@IntRange(from = 0) long bookmarkId);
|
||||
public static native double nativeGetScale(@IntRange(from = 0) long bookmarkId);
|
||||
|
||||
private native String nativeEncode2Ge0Url(@IntRange(from = 0) long bookmarkId, boolean addName);
|
||||
|
||||
private native void nativeSetBookmarkParams(@IntRange(from = 0) long bookmarkId, String name, int color, String descr);
|
||||
|
||||
private native void nativeChangeCategory(@IntRange(from = 0) long oldCatId, @IntRange(from = 0) long newCatId, @IntRange(from = 0) long bookmarkId);
|
||||
|
||||
@NonNull
|
||||
public native static String nativeGetAddress(long bookmarkId);
|
||||
|
||||
@NonNull
|
||||
public native static ParcelablePointD nativeToLatLon(double merX, double merY);
|
||||
}
|
||||
|
|
|
@ -5,18 +5,23 @@ import android.support.annotation.NonNull;
|
|||
|
||||
import com.mapswithme.maps.Framework;
|
||||
|
||||
public class BookmarkInfo
|
||||
public class BookmarkInfo implements MapPoint
|
||||
{
|
||||
private final long mCategoryId;
|
||||
private final long mBookmarkId;
|
||||
@NonNull
|
||||
private String mTitle;
|
||||
private final String mTitle;
|
||||
@NonNull
|
||||
private String mFeatureType;
|
||||
private final String mFeatureType;
|
||||
@NonNull
|
||||
private Icon mIcon;
|
||||
private double mMerX;
|
||||
private double mMerY;
|
||||
private final Icon mIcon;
|
||||
private final double mMerX;
|
||||
private final double mMerY;
|
||||
private final double mScale;
|
||||
@NonNull
|
||||
private final String mAddress;
|
||||
@NonNull
|
||||
private final ParcelablePointD mLatLonPoint;
|
||||
|
||||
public BookmarkInfo(@IntRange(from = 0) long categoryId, @IntRange(from = 0) long bookmarkId)
|
||||
{
|
||||
|
@ -28,6 +33,9 @@ public class BookmarkInfo
|
|||
final ParcelablePointD ll = Bookmark.nativeGetXY(mBookmarkId);
|
||||
mMerX = ll.x;
|
||||
mMerY = ll.y;
|
||||
mScale = Bookmark.nativeGetScale(mBookmarkId);
|
||||
mAddress = Bookmark.nativeGetAddress(mBookmarkId);
|
||||
mLatLonPoint = Bookmark.nativeToLatLon(mMerX, mMerY);
|
||||
}
|
||||
|
||||
public long getCategoryId()
|
||||
|
@ -49,6 +57,7 @@ public class BookmarkInfo
|
|||
public String getFeatureType() { return mFeatureType; }
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String getTitle()
|
||||
{
|
||||
return mTitle;
|
||||
|
@ -65,4 +74,29 @@ public class BookmarkInfo
|
|||
{
|
||||
return getDistanceAndAzimuth(latitude, longitude, v).getDistance();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getLat()
|
||||
{
|
||||
return mLatLonPoint.x;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getLon()
|
||||
{
|
||||
return mLatLonPoint.y;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getScale()
|
||||
{
|
||||
return mScale;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public String getAddress()
|
||||
{
|
||||
return mAddress;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -492,11 +492,17 @@ public enum BookmarkManager
|
|||
}
|
||||
|
||||
@NonNull
|
||||
public Bookmark getBookmark(long bmkId)
|
||||
public Bookmark getHeavyWeightBookmark(long bmkId)
|
||||
{
|
||||
return nativeGetBookmark(bmkId);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public BookmarkInfo getLightWeightBookmark(long bmkId)
|
||||
{
|
||||
return nativeGetBookmarkInfo(bmkId);
|
||||
}
|
||||
|
||||
public long getBookmarkIdByPosition(long catId, int positionInCategory)
|
||||
{
|
||||
return nativeGetBookmarkIdByPosition(catId, positionInCategory);
|
||||
|
@ -823,6 +829,9 @@ public enum BookmarkManager
|
|||
@NonNull
|
||||
private native Bookmark nativeGetBookmark(long bmkId);
|
||||
|
||||
@NonNull
|
||||
private native BookmarkInfo nativeGetBookmarkInfo(long bmkId);
|
||||
|
||||
private native long nativeGetBookmarkIdByPosition(long catId, int position);
|
||||
|
||||
@NonNull
|
||||
|
|
|
@ -25,7 +25,7 @@ import java.util.List;
|
|||
|
||||
// TODO(yunikkk): Refactor. Displayed information is different from edited information, and it's better to
|
||||
// separate them. Simple getters from jni place_page::Info and osm::EditableFeature should be enough.
|
||||
public class MapObject implements Parcelable, PopularityProvider
|
||||
public class MapObject implements Parcelable, PopularityProvider, MapPoint
|
||||
{
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef({ POI, API_POINT, BOOKMARK, MY_POSITION, SEARCH })
|
||||
|
@ -278,6 +278,7 @@ public class MapObject implements Parcelable, PopularityProvider
|
|||
return 0;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getTitle()
|
||||
{
|
||||
return mTitle;
|
||||
|
@ -289,6 +290,7 @@ public class MapObject implements Parcelable, PopularityProvider
|
|||
return mSecondaryTitle;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getSubtitle()
|
||||
{
|
||||
return mSubtitle;
|
||||
|
@ -304,6 +306,7 @@ public class MapObject implements Parcelable, PopularityProvider
|
|||
return mLon;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getAddress()
|
||||
{
|
||||
return mAddress;
|
||||
|
|
18
android/src/com/mapswithme/maps/bookmarks/data/MapPoint.java
Normal file
18
android/src/com/mapswithme/maps/bookmarks/data/MapPoint.java
Normal file
|
@ -0,0 +1,18 @@
|
|||
package com.mapswithme.maps.bookmarks.data;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
public interface MapPoint
|
||||
{
|
||||
@NonNull
|
||||
String getTitle();
|
||||
|
||||
double getLat();
|
||||
|
||||
double getLon();
|
||||
|
||||
double getScale();
|
||||
|
||||
@NonNull
|
||||
String getAddress();
|
||||
}
|
|
@ -114,7 +114,8 @@ public class AboutFragment extends BaseSettingsFragment
|
|||
case R.id.share:
|
||||
Statistics.INSTANCE.trackEvent(Statistics.EventName.Settings.TELL_FRIEND);
|
||||
AlohaHelper.logClick(AlohaHelper.Settings.TELL_FRIEND);
|
||||
ShareOption.ANY.share(getActivity(), getString(R.string.tell_friends_text), R.string.tell_friends);
|
||||
ShareOption.AnyShareOption.ANY.share(getActivity(), getString(R.string.tell_friends_text),
|
||||
R.string.tell_friends);
|
||||
break;
|
||||
|
||||
case R.id.copyright:
|
||||
|
|
|
@ -87,7 +87,7 @@ public class EditBookmarkFragment extends BaseMwmDialogFragment implements View.
|
|||
long categoryId = args.getLong(EXTRA_CATEGORY_ID);
|
||||
mBookmarkCategory = BookmarkManager.INSTANCE.getCategoryById(categoryId);
|
||||
long bookmarkId = args.getLong(EXTRA_BOOKMARK_ID);
|
||||
mBookmark = BookmarkManager.INSTANCE.getBookmark(bookmarkId);
|
||||
mBookmark = BookmarkManager.INSTANCE.getHeavyWeightBookmark(bookmarkId);
|
||||
mIcon = mBookmark.getIcon();
|
||||
mEtName = (EditText) view.findViewById(R.id.et__bookmark_name);
|
||||
mEtDescription = (EditText) view.findViewById(R.id.et__description);
|
||||
|
|
|
@ -653,7 +653,7 @@ public class PlacePageView extends NestedScrollView
|
|||
}
|
||||
Statistics.INSTANCE.trackEvent(Statistics.EventName.PP_SHARE);
|
||||
AlohaHelper.logClick(AlohaHelper.PP_SHARE);
|
||||
ShareOption.ANY.shareMapObject(getActivity(), mMapObject, mSponsored);
|
||||
ShareOption.AnyShareOption.ANY.shareMapObject(getActivity(), mMapObject, mSponsored);
|
||||
}
|
||||
|
||||
private void onBackBtnClicked()
|
||||
|
@ -2072,7 +2072,7 @@ public class PlacePageView extends NestedScrollView
|
|||
@Override
|
||||
public void onBookmarkSaved(long bookmarkId, boolean movedFromCategory)
|
||||
{
|
||||
setMapObject(BookmarkManager.INSTANCE.getBookmark(bookmarkId), null);
|
||||
setMapObject(BookmarkManager.INSTANCE.getHeavyWeightBookmark(bookmarkId), null);
|
||||
NetworkPolicy policy = NetworkPolicy.newInstance(NetworkPolicy.getCurrentNetworkUsageStatus());
|
||||
refreshViews(policy);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
package com.mapswithme.util.sharing;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.mapswithme.maps.Framework;
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.bookmarks.data.MapPoint;
|
||||
import com.mapswithme.maps.widget.placepage.Sponsored;
|
||||
import com.mapswithme.util.statistics.Statistics;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
class BookmarkInfoMapObjectShareable<T extends MapPoint> extends BaseShareable
|
||||
{
|
||||
private static final String DELIMITER = "\n";
|
||||
@NonNull
|
||||
private final T mItem;
|
||||
|
||||
public BookmarkInfoMapObjectShareable(@NonNull Activity activity, @NonNull T item,
|
||||
@Nullable Sponsored sponsored)
|
||||
{
|
||||
super(activity);
|
||||
mItem = item;
|
||||
setSubject(R.string.bookmark_share_email_subject);
|
||||
|
||||
String text = makeEmailBody(activity, sponsored, getEmailBodyContent());
|
||||
setText(text);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static String makeEmailBody(@NonNull Activity activity, @Nullable Sponsored sponsored,
|
||||
@NonNull Iterable<String> emailBodyContent)
|
||||
{
|
||||
String text = TextUtils.join(DELIMITER, emailBodyContent);
|
||||
|
||||
if (sponsored != null && sponsored.getType() == Sponsored.TYPE_BOOKING)
|
||||
text = concatSponsoredText(activity, sponsored, text);
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static String concatSponsoredText(@NonNull Activity activity, @NonNull Sponsored sponsored,
|
||||
@NonNull String src)
|
||||
{
|
||||
return TextUtils.join(DELIMITER, Arrays.asList(src, activity.getString(R.string.sharing_booking)))
|
||||
+ sponsored.getUrl();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
protected Iterable<String> getEmailBodyContent()
|
||||
{
|
||||
return TextUtils.isEmpty(getItem().getAddress())
|
||||
? Arrays.asList(getItem().getTitle(), getGeoUrl(), getHttpUrl())
|
||||
: Arrays.asList(getItem().getTitle(), getItem().getAddress(), getGeoUrl(), getHttpUrl());
|
||||
}
|
||||
|
||||
@NonNull
|
||||
protected T getItem()
|
||||
{
|
||||
return mItem;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
protected final String getGeoUrl()
|
||||
{
|
||||
return Framework.nativeGetGe0Url(getItem().getLat(), getItem().getLon(),
|
||||
getItem().getScale(), getItem().getTitle());
|
||||
}
|
||||
|
||||
@NonNull
|
||||
protected final String getHttpUrl()
|
||||
{
|
||||
return Framework.getHttpGe0Url(getItem().getLat(), getItem().getLon(),
|
||||
getItem().getScale(), getItem().getTitle());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String getMimeType()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void share(SharingTarget target)
|
||||
{
|
||||
super.share(target);
|
||||
Statistics.INSTANCE.trackPlaceShared(target.name);
|
||||
}
|
||||
}
|
|
@ -3,73 +3,41 @@ package com.mapswithme.util.sharing;
|
|||
import android.app.Activity;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.mapswithme.maps.Framework;
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.bookmarks.data.MapObject;
|
||||
import com.mapswithme.maps.widget.placepage.Sponsored;
|
||||
import com.mapswithme.util.statistics.Statistics;
|
||||
|
||||
class MapObjectShareable extends BaseShareable
|
||||
import java.util.Arrays;
|
||||
|
||||
class MapObjectShareable extends BookmarkInfoMapObjectShareable<MapObject>
|
||||
{
|
||||
MapObjectShareable(Activity context, @NonNull MapObject mapObject, @Nullable Sponsored sponsored)
|
||||
{
|
||||
super(context);
|
||||
super(context, mapObject, sponsored);
|
||||
|
||||
final Activity activity = getActivity();
|
||||
final String ge0Url = Framework.nativeGetGe0Url(mapObject.getLat(), mapObject.getLon(),
|
||||
mapObject.getScale(), mapObject.getTitle());
|
||||
final String httpUrl = Framework.getHttpGe0Url(mapObject.getLat(), mapObject.getLon(),
|
||||
mapObject.getScale(), mapObject.getTitle());
|
||||
final String subject;
|
||||
String text;
|
||||
if (MapObject.isOfType(MapObject.MY_POSITION, mapObject))
|
||||
{
|
||||
subject = activity.getString(R.string.my_position_share_email_subject);
|
||||
text = activity.getString(R.string.my_position_share_email,
|
||||
Framework.nativeGetAddress(mapObject.getLat(), mapObject.getLon()),
|
||||
ge0Url, httpUrl);
|
||||
setSubject(R.string.my_position_share_email_subject);
|
||||
String text = makeMyPositionEmailBodyContent();
|
||||
setText(text);
|
||||
}
|
||||
else
|
||||
{
|
||||
subject = activity.getString(R.string.bookmark_share_email_subject);
|
||||
|
||||
text = lineWithBreak(mapObject.getTitle()) +
|
||||
lineWithBreak(mapObject.getSubtitle()) +
|
||||
lineWithBreak(mapObject.getAddress()) +
|
||||
lineWithBreak(ge0Url) +
|
||||
lineWithBreak(httpUrl);
|
||||
|
||||
if (sponsored != null && sponsored.getType() == Sponsored.TYPE_BOOKING)
|
||||
{
|
||||
text += lineWithBreak(activity.getString(R.string.sharing_booking)) +
|
||||
sponsored.getUrl();
|
||||
}
|
||||
}
|
||||
|
||||
setSubject(subject);
|
||||
setText(text);
|
||||
}
|
||||
|
||||
private String lineWithBreak(String title)
|
||||
@NonNull
|
||||
private String makeMyPositionEmailBodyContent()
|
||||
{
|
||||
if (!TextUtils.isEmpty(title))
|
||||
return title + "\n";
|
||||
|
||||
return "";
|
||||
return getActivity().getString(R.string.my_position_share_email,
|
||||
Framework.nativeGetAddress(getItem().getLat(),
|
||||
getItem().getLon()),
|
||||
getGeoUrl(), getHttpUrl());
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public void share(SharingTarget target)
|
||||
protected Iterable<String> getEmailBodyContent()
|
||||
{
|
||||
super.share(target);
|
||||
Statistics.INSTANCE.trackPlaceShared(target.name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMimeType()
|
||||
{
|
||||
return null;
|
||||
return Arrays.asList(getItem().getTitle(), getItem().getSubtitle(), getItem().getAddress(),
|
||||
getGeoUrl(), getHttpUrl());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,20 +7,17 @@ import android.support.annotation.NonNull;
|
|||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.StringRes;
|
||||
|
||||
import com.mapswithme.maps.Framework;
|
||||
import com.mapswithme.maps.R;
|
||||
import com.mapswithme.maps.bookmarks.data.BookmarkInfo;
|
||||
import com.mapswithme.maps.bookmarks.data.MapObject;
|
||||
import com.mapswithme.maps.widget.placepage.Sponsored;
|
||||
import com.mapswithme.util.Utils;
|
||||
import com.mapswithme.util.statistics.Statistics;
|
||||
|
||||
public abstract class ShareOption
|
||||
{
|
||||
public static final AnyShareOption ANY = new AnyShareOption();
|
||||
|
||||
@StringRes
|
||||
protected final int mNameResId;
|
||||
protected final Intent mBaseIntent;
|
||||
private final int mNameResId;
|
||||
private final Intent mBaseIntent;
|
||||
|
||||
protected ShareOption(int nameResId, Intent baseIntent)
|
||||
{
|
||||
|
@ -35,35 +32,22 @@ public abstract class ShareOption
|
|||
|
||||
public void shareMapObject(Activity activity, @NonNull MapObject mapObject, @Nullable Sponsored sponsored)
|
||||
{
|
||||
SharingHelper.shareOutside(new MapObjectShareable(activity, mapObject, sponsored)
|
||||
.setBaseIntent(new Intent(mBaseIntent)), mNameResId);
|
||||
MapObjectShareable shareable = new MapObjectShareable(activity, mapObject, sponsored);
|
||||
shareObjectInternal(shareable);
|
||||
}
|
||||
|
||||
public static class SmsShareOption extends ShareOption
|
||||
public void shareBookmarkObject(Activity activity, @NonNull BookmarkInfo mapObject,
|
||||
@Nullable Sponsored sponsored)
|
||||
{
|
||||
protected SmsShareOption()
|
||||
{
|
||||
super(R.string.share_by_message, new Intent(Intent.ACTION_VIEW));
|
||||
}
|
||||
BookmarkInfoMapObjectShareable<BookmarkInfo> shareable =
|
||||
new BookmarkInfoMapObjectShareable<>(activity, mapObject, sponsored);
|
||||
shareObjectInternal(shareable);
|
||||
}
|
||||
|
||||
public void share(Activity activity, String body)
|
||||
{
|
||||
Intent smsIntent = new Intent();
|
||||
TargetUtils.fillSmsIntent(smsIntent, body);
|
||||
activity.startActivity(smsIntent);
|
||||
Statistics.INSTANCE.trackPlaceShared("SMS");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void shareMapObject(Activity activity, MapObject mapObject, Sponsored sponsored)
|
||||
{
|
||||
final String ge0Url = Framework.nativeGetGe0Url(mapObject.getLat(), mapObject.getLon(), mapObject.getScale(), "");
|
||||
final String httpUrl = Framework.getHttpGe0Url(mapObject.getLat(), mapObject.getLon(), mapObject.getScale(), "");
|
||||
final int bodyId = MapObject.isOfType(MapObject.MY_POSITION, mapObject) ? R.string.my_position_share_sms : R.string.bookmark_share_sms;
|
||||
final String body = activity.getString(bodyId, ge0Url, httpUrl);
|
||||
|
||||
share(activity, body);
|
||||
}
|
||||
private void shareObjectInternal(@NonNull BaseShareable shareable)
|
||||
{
|
||||
SharingHelper.shareOutside(shareable
|
||||
.setBaseIntent(new Intent(mBaseIntent)), mNameResId);
|
||||
}
|
||||
|
||||
public static class EmailShareOption extends ShareOption
|
||||
|
@ -76,6 +60,8 @@ public abstract class ShareOption
|
|||
|
||||
public static class AnyShareOption extends ShareOption
|
||||
{
|
||||
public static final AnyShareOption ANY = new AnyShareOption();
|
||||
|
||||
protected AnyShareOption()
|
||||
{
|
||||
super(R.string.share, new Intent(Intent.ACTION_SEND).setType(TargetUtils.TYPE_TEXT_PLAIN));
|
||||
|
|
Loading…
Add table
Reference in a new issue