From 6437de93eec093a40624c06f54fe630cdeaee3c9 Mon Sep 17 00:00:00 2001 From: Dmitry Yunitsky Date: Thu, 20 Aug 2015 20:12:33 +0300 Subject: [PATCH] [android] Added share actions. --- .../src/com/mapswithme/maps/MwmActivity.java | 4 +- ...java => BasePedestrianDialogFragment.java} | 5 +- .../com/mapswithme/maps/ads/LikesManager.java | 4 +- ... => PedestrianFirstUseDialogFragment.java} | 2 +- ...va => PedestrianMasterDialogFragment.java} | 2 +- .../mapswithme/maps/background/Notifier.java | 4 +- .../maps/bookmarks/BookmarksListFragment.java | 12 +-- .../maps/widget/placepage/PlacePageView.java | 4 +- .../util/sharing/BaseShareable.java | 9 ++- .../util/sharing/LocalFileShareable.java | 5 +- .../util/sharing/PedestrianShareable.java | 62 +++++++++++++++ .../{ShareAction.java => ShareOption.java} | 79 ++++++++----------- .../util/sharing/SharingHelper.java | 28 ++++--- .../mapswithme/util/sharing/TargetUtils.java | 35 ++++++++ .../util/sharing/TextShareable.java | 2 +- 15 files changed, 174 insertions(+), 83 deletions(-) rename android/src/com/mapswithme/maps/ads/{FacebookBasePedestrianDialogFragment.java => BasePedestrianDialogFragment.java} (90%) rename android/src/com/mapswithme/maps/ads/{FacebookPedestrianFirstDialogFragment.java => PedestrianFirstUseDialogFragment.java} (90%) rename android/src/com/mapswithme/maps/ads/{FacebookPedestrianMasterDialogFragment.java => PedestrianMasterDialogFragment.java} (90%) create mode 100644 android/src/com/mapswithme/util/sharing/PedestrianShareable.java rename android/src/com/mapswithme/util/sharing/{ShareAction.java => ShareOption.java} (53%) create mode 100644 android/src/com/mapswithme/util/sharing/TargetUtils.java diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java index 112ed0e4b8..8b11b05f90 100644 --- a/android/src/com/mapswithme/maps/MwmActivity.java +++ b/android/src/com/mapswithme/maps/MwmActivity.java @@ -70,7 +70,7 @@ import com.mapswithme.util.LocationUtils; import com.mapswithme.util.UiUtils; import com.mapswithme.util.Utils; import com.mapswithme.util.Yota; -import com.mapswithme.util.sharing.ShareAction; +import com.mapswithme.util.sharing.ShareOption; import com.mapswithme.util.sharing.SharingHelper; import com.mapswithme.util.statistics.AlohaHelper; import com.mapswithme.util.statistics.Statistics; @@ -371,7 +371,7 @@ public class MwmActivity extends BaseMwmFragmentActivity final String geoUrl = Framework.nativeGetGe0Url(loc.getLatitude(), loc.getLongitude(), Framework.getDrawScale(), ""); final String httpUrl = Framework.getHttpGe0Url(loc.getLatitude(), loc.getLongitude(), Framework.getDrawScale(), ""); final String body = getString(R.string.my_position_share_sms, geoUrl, httpUrl); - ShareAction.ANY_SHARE.share(this, body); + ShareOption.ANY.share(this, body); } else { diff --git a/android/src/com/mapswithme/maps/ads/FacebookBasePedestrianDialogFragment.java b/android/src/com/mapswithme/maps/ads/BasePedestrianDialogFragment.java similarity index 90% rename from android/src/com/mapswithme/maps/ads/FacebookBasePedestrianDialogFragment.java rename to android/src/com/mapswithme/maps/ads/BasePedestrianDialogFragment.java index 0b39d8415a..48a546ebf4 100644 --- a/android/src/com/mapswithme/maps/ads/FacebookBasePedestrianDialogFragment.java +++ b/android/src/com/mapswithme/maps/ads/BasePedestrianDialogFragment.java @@ -11,9 +11,10 @@ import android.view.View; import com.mapswithme.maps.R; import com.mapswithme.maps.base.BaseMwmDialogFragment; +import com.mapswithme.util.sharing.ShareOption; import com.mapswithme.util.statistics.Statistics; -public abstract class FacebookBasePedestrianDialogFragment extends BaseMwmDialogFragment +public abstract class BasePedestrianDialogFragment extends BaseMwmDialogFragment { abstract View buildView(LayoutInflater inflater); @@ -40,7 +41,7 @@ public abstract class FacebookBasePedestrianDialogFragment extends BaseMwmDialog @Override public void onClick(DialogInterface dialog, int which) { - // TODO share + ShareOption.PEDESTRIAN.share(getActivity()); Statistics.INSTANCE.trackSimpleNamedEvent(Statistics.EventName.FACEBOOK_PEDESTRIAN_SHARE); } }).create(); diff --git a/android/src/com/mapswithme/maps/ads/LikesManager.java b/android/src/com/mapswithme/maps/ads/LikesManager.java index e20df273f5..d705eb23fd 100644 --- a/android/src/com/mapswithme/maps/ads/LikesManager.java +++ b/android/src/com/mapswithme/maps/ads/LikesManager.java @@ -36,8 +36,8 @@ public enum LikesManager GPLUS_OLD_USERS(GooglePlusDialogFragment.class, DIALOG_DELAY_DEFAULT), FACEBOOK_INVITE_NEW_USERS(FacebookInvitesDialogFragment.class, DIALOG_DELAY_DEFAULT), FACEBOOK_INVITES_OLD_USERS(FacebookInvitesDialogFragment.class, DIALOG_DELAY_DEFAULT), - FACEBOOK_PEDESTRIAN_FIRST_OLD_USERS(FacebookPedestrianFirstDialogFragment.class, DIALOG_DELAY_SHORT), - FACEBOOK_PEDESTRIAN_MASTER_OLD_USERS(FacebookPedestrianMasterDialogFragment.class, DIALOG_DELAY_SHORT); + FACEBOOK_PEDESTRIAN_FIRST_OLD_USERS(PedestrianFirstUseDialogFragment.class, DIALOG_DELAY_SHORT), + FACEBOOK_PEDESTRIAN_MASTER_OLD_USERS(PedestrianMasterDialogFragment.class, DIALOG_DELAY_SHORT); public final Class clazz; public final int delay; diff --git a/android/src/com/mapswithme/maps/ads/FacebookPedestrianFirstDialogFragment.java b/android/src/com/mapswithme/maps/ads/PedestrianFirstUseDialogFragment.java similarity index 90% rename from android/src/com/mapswithme/maps/ads/FacebookPedestrianFirstDialogFragment.java rename to android/src/com/mapswithme/maps/ads/PedestrianFirstUseDialogFragment.java index b7f981542d..d9a2a166d2 100644 --- a/android/src/com/mapswithme/maps/ads/FacebookPedestrianFirstDialogFragment.java +++ b/android/src/com/mapswithme/maps/ads/PedestrianFirstUseDialogFragment.java @@ -9,7 +9,7 @@ import android.widget.TextView; import com.mapswithme.maps.R; import com.mapswithme.util.UiUtils; -public class FacebookPedestrianFirstDialogFragment extends FacebookBasePedestrianDialogFragment +public class PedestrianFirstUseDialogFragment extends BasePedestrianDialogFragment { protected View buildView(LayoutInflater inflater) { diff --git a/android/src/com/mapswithme/maps/ads/FacebookPedestrianMasterDialogFragment.java b/android/src/com/mapswithme/maps/ads/PedestrianMasterDialogFragment.java similarity index 90% rename from android/src/com/mapswithme/maps/ads/FacebookPedestrianMasterDialogFragment.java rename to android/src/com/mapswithme/maps/ads/PedestrianMasterDialogFragment.java index 24398d0015..3151b41fea 100644 --- a/android/src/com/mapswithme/maps/ads/FacebookPedestrianMasterDialogFragment.java +++ b/android/src/com/mapswithme/maps/ads/PedestrianMasterDialogFragment.java @@ -9,7 +9,7 @@ import android.widget.TextView; import com.mapswithme.maps.R; import com.mapswithme.util.UiUtils; -public class FacebookPedestrianMasterDialogFragment extends FacebookBasePedestrianDialogFragment +public class PedestrianMasterDialogFragment extends BasePedestrianDialogFragment { protected View buildView(LayoutInflater inflater) { diff --git a/android/src/com/mapswithme/maps/background/Notifier.java b/android/src/com/mapswithme/maps/background/Notifier.java index c5898c4a6a..3e54f6d006 100644 --- a/android/src/com/mapswithme/maps/background/Notifier.java +++ b/android/src/com/mapswithme/maps/background/Notifier.java @@ -84,8 +84,8 @@ public final class Notifier private static void placeBigNotification(String title, String content, PendingIntent pendingIntent, int notificationId) { - final Notification notification = getBuilder(title, content, pendingIntent). - setStyle(new NotificationCompat.BigTextStyle().bigText(content)) + final Notification notification = getBuilder(title, content, pendingIntent) + .setStyle(new NotificationCompat.BigTextStyle().bigText(content)) .build(); getNotificationManager().notify(notificationId, notification); diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java b/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java index 57baedc204..dee9e38565 100644 --- a/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java +++ b/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java @@ -26,7 +26,7 @@ import com.mapswithme.maps.bookmarks.data.BookmarkManager; import com.mapswithme.maps.bookmarks.data.Track; import com.mapswithme.maps.widget.placepage.EditBookmarkFragment; import com.mapswithme.util.BottomSheetHelper; -import com.mapswithme.util.sharing.ShareAction; +import com.mapswithme.util.sharing.ShareOption; import com.mapswithme.util.sharing.SharingHelper; public class BookmarksListFragment extends BaseMwmListFragment @@ -131,10 +131,10 @@ public class BookmarksListFragment extends BaseMwmListFragment .listener(this) .build(); - if (!ShareAction.SMS_SHARE.isSupported(getActivity())) + if (!ShareOption.SMS.isSupported(getActivity())) bs.getMenu().removeItem(R.id.share_message); - if (!ShareAction.EMAIL_SHARE.isSupported(getActivity())) + if (!ShareOption.EMAIL.isSupported(getActivity())) bs.getMenu().removeItem(R.id.share_email); bs.show(); @@ -167,15 +167,15 @@ public class BookmarksListFragment extends BaseMwmListFragment switch (menuItem.getItemId()) { case R.id.share_message: - ShareAction.SMS_SHARE.shareMapObject(getActivity(), item); + ShareOption.SMS.shareMapObject(getActivity(), item); break; case R.id.share_email: - ShareAction.EMAIL_SHARE.shareMapObject(getActivity(), item); + ShareOption.EMAIL.shareMapObject(getActivity(), item); break; case R.id.share: - ShareAction.ANY_SHARE.shareMapObject(getActivity(), item); + ShareOption.ANY.shareMapObject(getActivity(), item); break; case R.id.edit: diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java index 58e68f802a..c64f68c2a2 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java @@ -59,7 +59,7 @@ import com.mapswithme.util.StringUtils; import com.mapswithme.util.UiUtils; import com.mapswithme.util.Utils; import com.mapswithme.util.concurrency.UiThread; -import com.mapswithme.util.sharing.ShareAction; +import com.mapswithme.util.sharing.ShareOption; import com.mapswithme.util.statistics.AlohaHelper; import com.mapswithme.util.statistics.Statistics; @@ -627,7 +627,7 @@ public class PlacePageView extends RelativeLayout implements View.OnClickListene break; case R.id.ll__share: AlohaHelper.logClick(AlohaHelper.PP_SHARE); - ShareAction.ANY_SHARE.shareMapObject((Activity) getContext(), mMapObject); + ShareOption.ANY.shareMapObject((Activity) getContext(), mMapObject); break; case R.id.ll__api_back: final Activity activity = (Activity) getContext(); diff --git a/android/src/com/mapswithme/util/sharing/BaseShareable.java b/android/src/com/mapswithme/util/sharing/BaseShareable.java index d55fe8aa3b..13e9af154f 100644 --- a/android/src/com/mapswithme/util/sharing/BaseShareable.java +++ b/android/src/com/mapswithme/util/sharing/BaseShareable.java @@ -3,6 +3,7 @@ package com.mapswithme.util.sharing; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; +import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.text.TextUtils; @@ -27,14 +28,14 @@ public abstract class BaseShareable return mActivity; } - protected void modifyIntent(Intent intent) {} + protected void modifyIntent(Intent intent, @Nullable SharingTarget target) {} protected Intent getBaseIntent() { return mBaseIntent; } - public Intent getTargetIntent() + public Intent getTargetIntent(@Nullable SharingTarget target) { Intent res = getBaseIntent(); @@ -48,14 +49,14 @@ public abstract class BaseShareable if (!TextUtils.isEmpty(mime)) res.setType(mime); - modifyIntent(res); + modifyIntent(res, target); return res; } public void share(SharingTarget target) { - Intent intent = getTargetIntent(); + Intent intent = getTargetIntent(target); target.setupComponentName(intent); try diff --git a/android/src/com/mapswithme/util/sharing/LocalFileShareable.java b/android/src/com/mapswithme/util/sharing/LocalFileShareable.java index 9ef1dce014..142b0a5489 100644 --- a/android/src/com/mapswithme/util/sharing/LocalFileShareable.java +++ b/android/src/com/mapswithme/util/sharing/LocalFileShareable.java @@ -3,6 +3,7 @@ package com.mapswithme.util.sharing; import android.app.Activity; import android.content.Intent; import android.net.Uri; +import android.support.annotation.Nullable; public class LocalFileShareable extends BaseShareable { @@ -17,9 +18,9 @@ public class LocalFileShareable extends BaseShareable } @Override - protected void modifyIntent(Intent intent) + protected void modifyIntent(Intent intent, @Nullable SharingTarget target) { - super.modifyIntent(intent); + super.modifyIntent(intent, target); intent.putExtra(android.content.Intent.EXTRA_STREAM, Uri.parse("file://" + mFileName)); } diff --git a/android/src/com/mapswithme/util/sharing/PedestrianShareable.java b/android/src/com/mapswithme/util/sharing/PedestrianShareable.java new file mode 100644 index 0000000000..9d3c7e9008 --- /dev/null +++ b/android/src/com/mapswithme/util/sharing/PedestrianShareable.java @@ -0,0 +1,62 @@ +package com.mapswithme.util.sharing; + +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; + +import com.facebook.FacebookSdk; +import com.facebook.share.model.ShareLinkContent; +import com.facebook.share.widget.ShareDialog; +import com.mapswithme.maps.R; + +import java.util.Locale; + +public class PedestrianShareable extends TextShareable +{ + private static final String FACEBOOK_SHARE_URL = "http://maps.me/fb-pedestrian?lang=" + Locale.getDefault().getLanguage(); + + public PedestrianShareable(Activity context) + { + super(context); + } + + @Override + public void share(SharingTarget target) + { + Activity activity = getActivity(); + Intent intent = getTargetIntent(target); + String lowerCaseName = target.activityName.toLowerCase(); + + if (lowerCaseName.contains("facebook")) + { + shareFacebook(); + return; + } + + if (lowerCaseName.contains("mail")) + { + setSubject(R.string.share_walking_routes_email_subject); + intent.putExtra(Intent.EXTRA_TEXT, activity.getString(R.string.share_walking_routes_email_body)); + } + else if (lowerCaseName.contains("sms") || lowerCaseName.contains("mms")) + TargetUtils.fillSmsIntent(activity, intent, activity.getString(R.string.share_walking_routes_sms)); + else + setText(R.string.share_walking_routes_messenger); + + super.share(target); + } + + private void shareFacebook() + { + FacebookSdk.sdkInitialize(getActivity()); + ShareDialog shareDialog = new ShareDialog(getActivity()); + if (ShareDialog.canShow(ShareLinkContent.class)) + { + ShareLinkContent linkContent = new ShareLinkContent.Builder() + .setContentUrl(Uri.parse(FACEBOOK_SHARE_URL)) + .build(); + + shareDialog.show(linkContent); + } + } +} diff --git a/android/src/com/mapswithme/util/sharing/ShareAction.java b/android/src/com/mapswithme/util/sharing/ShareOption.java similarity index 53% rename from android/src/com/mapswithme/util/sharing/ShareAction.java rename to android/src/com/mapswithme/util/sharing/ShareOption.java index 20c5ff80c6..b36414c808 100644 --- a/android/src/com/mapswithme/util/sharing/ShareAction.java +++ b/android/src/com/mapswithme/util/sharing/ShareOption.java @@ -3,9 +3,6 @@ package com.mapswithme.util.sharing; import android.app.Activity; import android.content.Context; import android.content.Intent; -import android.net.Uri; -import android.os.Build; -import android.provider.Telephony; import android.support.annotation.StringRes; import com.mapswithme.maps.Framework; @@ -15,38 +12,26 @@ import com.mapswithme.maps.bookmarks.data.MapObject.MapObjectType; import com.mapswithme.util.Utils; import com.mapswithme.util.statistics.Statistics; -public abstract class ShareAction +public abstract class ShareOption { - public static final SmsShareAction SMS_SHARE = new SmsShareAction(); - public static final EmailShareAction EMAIL_SHARE = new EmailShareAction(); - public static final AnyShareAction ANY_SHARE = new AnyShareAction(); - - private static final String EXTRA_SMS_BODY = "sms_body"; - private static final String EXTRA_SMS_TEXT = Intent.EXTRA_TEXT; - - protected static final String TYPE_MESSAGE_RFC822 = "message/rfc822"; - protected static final String TYPE_TEXT_PLAIN = "text/plain"; - - private static final String URI_STRING_SMS = "sms:"; + public static final SmsShareOption SMS = new SmsShareOption(); + public static final EmailShareOption EMAIL = new EmailShareOption(); + public static final AnyShareOption ANY = new AnyShareOption(); + public static final PedestrianShareOption PEDESTRIAN = new PedestrianShareOption(); @StringRes protected final int mNameResId; protected final Intent mBaseIntent; - protected ShareAction(int nameResId, Intent baseIntent) + protected ShareOption(int nameResId, Intent baseIntent) { mNameResId = nameResId; mBaseIntent = baseIntent; } - public Intent getIntent() - { - return new Intent(mBaseIntent); - } - public boolean isSupported(Context context) { - return Utils.isIntentSupported(context, getIntent()); + return Utils.isIntentSupported(context, mBaseIntent); } public void shareMapObject(Activity activity, MapObject mapObject) @@ -55,30 +40,17 @@ public abstract class ShareAction .setBaseIntent(new Intent(mBaseIntent)), mNameResId); } - public static class SmsShareAction extends ShareAction + public static class SmsShareOption extends ShareOption { - protected SmsShareAction() + protected SmsShareOption() { - super(R.string.share_by_message, new Intent(Intent.ACTION_VIEW).setData(Uri.parse(URI_STRING_SMS))); + super(R.string.share_by_message, new Intent(Intent.ACTION_VIEW)); } - public void shareWithText(Activity activity, String body) + private void shareWithText(Activity activity, String body) { - Intent smsIntent; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) - { - final String defaultSms = Telephony.Sms.getDefaultSmsPackage(activity); - smsIntent = new Intent(Intent.ACTION_SEND); - smsIntent.setType(TYPE_TEXT_PLAIN); - smsIntent.putExtra(EXTRA_SMS_TEXT, body); - if (defaultSms != null) - smsIntent.setPackage(defaultSms); - } - else - { - smsIntent = getIntent(); - smsIntent.putExtra(EXTRA_SMS_BODY, body); - } + Intent smsIntent = new Intent(); + TargetUtils.fillSmsIntent(activity, smsIntent, body); activity.startActivity(smsIntent); } @@ -98,19 +70,19 @@ public abstract class ShareAction } } - public static class EmailShareAction extends ShareAction + public static class EmailShareOption extends ShareOption { - protected EmailShareAction() + protected EmailShareOption() { - super(R.string.share_by_email, new Intent(Intent.ACTION_SEND).setType(TYPE_MESSAGE_RFC822)); + super(R.string.share_by_email, new Intent(Intent.ACTION_SEND).setType(TargetUtils.TYPE_MESSAGE_RFC822)); } } - public static class AnyShareAction extends ShareAction + public static class AnyShareOption extends ShareOption { - protected AnyShareAction() + protected AnyShareOption() { - super(R.string.share, new Intent(Intent.ACTION_SEND).setType(TYPE_TEXT_PLAIN)); + super(R.string.share, new Intent(Intent.ACTION_SEND).setType(TargetUtils.TYPE_TEXT_PLAIN)); } public void share(final Activity activity, final String body) @@ -118,4 +90,17 @@ public abstract class ShareAction SharingHelper.shareOutside(new TextShareable(activity, body)); } } + + public static class PedestrianShareOption extends ShareOption + { + protected PedestrianShareOption() + { + super(R.string.title_walking_available, new Intent(Intent.ACTION_SEND).setType(TargetUtils.TYPE_TEXT_PLAIN)); + } + + public void share(final Activity activity) + { + SharingHelper.shareOutside(new PedestrianShareable(activity)); + } + } } \ No newline at end of file diff --git a/android/src/com/mapswithme/util/sharing/SharingHelper.java b/android/src/com/mapswithme/util/sharing/SharingHelper.java index e595bb8a76..93c62231a8 100644 --- a/android/src/com/mapswithme/util/sharing/SharingHelper.java +++ b/android/src/com/mapswithme/util/sharing/SharingHelper.java @@ -53,7 +53,8 @@ public final class SharingHelper sInitialized = true; - ThreadPool.getStorage().execute(new Runnable() { + ThreadPool.getStorage().execute(new Runnable() + { @Override public void run() { @@ -62,7 +63,7 @@ public final class SharingHelper items = parse(json); if (items != null) - for (SharingTarget item: items) + for (SharingTarget item : items) sInstance.mItems.put(item.packageName, item); } }); @@ -108,13 +109,13 @@ public final class SharingHelper { Set missed = new HashSet<>(mItems.keySet()); - Intent it = data.getTargetIntent(); + Intent it = data.getTargetIntent(null); PackageManager pm = MwmApplication.get().getPackageManager(); List rlist = pm.queryIntentActivities(it, 0); final List res = new ArrayList<>(rlist.size()); - for (ResolveInfo ri: rlist) + for (ResolveInfo ri : rlist) { ActivityInfo ai = ri.activityInfo; if (ai == null) @@ -143,7 +144,7 @@ public final class SharingHelper } }); - for (String item: missed) + for (String item : missed) mItems.remove(item); if (!missed.isEmpty()) @@ -158,15 +159,18 @@ public final class SharingHelper } public static void shareOutside(final BaseShareable data, @StringRes int titleRes) + { + shareInternal(data, titleRes, sInstance.findItems(data)); + } + + private static void shareInternal(final BaseShareable data, int titleRes, final List items) { boolean showing = BottomSheetHelper.isShowing(); final BottomSheet.Builder builder = BottomSheetHelper.createGrid(data.getActivity(), titleRes) .limit(R.integer.sharing_initial_rows); - final List items = sInstance.findItems(data); - int i = 0; - for (SharingTarget item: items) + for (SharingTarget item : items) builder.sheet(i++, item.drawableIcon, item.name); builder.listener(new DialogInterface.OnClickListener() @@ -190,7 +194,8 @@ public final class SharingHelper return; } - UiThread.runLater(new Runnable() { + UiThread.runLater(new Runnable() + { @Override public void run() { @@ -222,8 +227,9 @@ public final class SharingHelper path += name + ".kmz"; + // FIXME bug with "%s.kmz" shareOutside(new LocalFileShareable(context, path, "application/vnd.google-earth.kmz") - .setText(R.string.share_bookmarks_email_body) - .setSubject(R.string.share_bookmarks_email_subject)); + .setText(R.string.share_bookmarks_email_body) + .setSubject(R.string.share_bookmarks_email_subject)); } } \ No newline at end of file diff --git a/android/src/com/mapswithme/util/sharing/TargetUtils.java b/android/src/com/mapswithme/util/sharing/TargetUtils.java new file mode 100644 index 0000000000..b9da5b1a01 --- /dev/null +++ b/android/src/com/mapswithme/util/sharing/TargetUtils.java @@ -0,0 +1,35 @@ +package com.mapswithme.util.sharing; + +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.provider.Telephony; + +final class TargetUtils +{ + static final String TYPE_MESSAGE_RFC822 = "message/rfc822"; + static final String TYPE_TEXT_PLAIN = "text/plain"; + static final String EXTRA_SMS_BODY = "sms_body"; + static final String EXTRA_SMS_TEXT = Intent.EXTRA_TEXT; + static final String URI_STRING_SMS = "sms:"; + + + private TargetUtils() {} + + + public static void fillSmsIntent(Activity activity, Intent smsIntent, String body) + { + smsIntent.setData(Uri.parse(URI_STRING_SMS)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) + { + final String defaultSms = Telephony.Sms.getDefaultSmsPackage(activity); + smsIntent.setType(TYPE_TEXT_PLAIN); + smsIntent.putExtra(EXTRA_SMS_TEXT, body); + if (defaultSms != null) + smsIntent.setPackage(defaultSms); + } + else + smsIntent.putExtra(EXTRA_SMS_BODY, body); + } +} diff --git a/android/src/com/mapswithme/util/sharing/TextShareable.java b/android/src/com/mapswithme/util/sharing/TextShareable.java index 3e5ec499ed..c2e46aff57 100644 --- a/android/src/com/mapswithme/util/sharing/TextShareable.java +++ b/android/src/com/mapswithme/util/sharing/TextShareable.java @@ -18,6 +18,6 @@ public class TextShareable extends BaseShareable @Override public String getMimeType() { - return ShareAction.TYPE_TEXT_PLAIN; + return TargetUtils.TYPE_TEXT_PLAIN; } }