[android] Replaced heavy call to get bookmark on light one, made acquirement of new object through JNI

This commit is contained in:
Dmitry Donskoy 2019-09-30 12:15:23 +03:00 committed by Roman Kuznetsov
parent 44d6c20eb5
commit 87e9d70ace
16 changed files with 293 additions and 120 deletions

View file

@ -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"

View file

@ -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)

View file

@ -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;
}

View file

@ -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);
}
}
}

View file

@ -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:

View file

@ -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);
}

View file

@ -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;
}
}

View file

@ -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

View file

@ -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;

View 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();
}

View file

@ -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:

View file

@ -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);

View file

@ -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);
}

View file

@ -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);
}
}

View file

@ -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());
}
}

View file

@ -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));