diff options
author | yingying <yingying@codeaurora.org> | 2014-01-15 16:59:54 +0800 |
---|---|---|
committer | Adnan <adnan@cyngn.com> | 2014-08-25 18:38:01 -0700 |
commit | db119896d65d9f7011b1d67b5ced7aded0d3d475 (patch) | |
tree | b98d5e741171cd95410899ecda205862d04abf4b | |
parent | 5efbbc9bf5243351b9b4e812a88501b768f91807 (diff) | |
download | android_packages_apps_Calendar-db119896d65d9f7011b1d67b5ced7aded0d3d475.tar.gz android_packages_apps_Calendar-db119896d65d9f7011b1d67b5ced7aded0d3d475.tar.bz2 android_packages_apps_Calendar-db119896d65d9f7011b1d67b5ced7aded0d3d475.zip |
Calendar: Do not show "Map" action if there isn't resolve app.
Sometimes the phone didn't contains the map application, and there isn't
application to resolve the view map action.
So the Calendar needn't to show the "Map" action on the statusbar under
this case.
CRs-fixed: 619204
Change-Id: I475a3285b23cfbac3a078fb6e89ca6c46575e9bf
-rw-r--r-- | src/com/android/calendar/alerts/AlertReceiver.java | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/com/android/calendar/alerts/AlertReceiver.java b/src/com/android/calendar/alerts/AlertReceiver.java index bba89210..e4e53bee 100644 --- a/src/com/android/calendar/alerts/AlertReceiver.java +++ b/src/com/android/calendar/alerts/AlertReceiver.java @@ -23,6 +23,8 @@ import android.content.BroadcastReceiver; import android.content.ContentUris; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.database.Cursor; import android.net.Uri; @@ -271,6 +273,13 @@ public class AlertReceiver extends BroadcastReceiver { return new NotificationWrapper(n, notificationId, eventId, startMillis, endMillis, doPopup); } + public static boolean isResolveIntent(Context context, Intent intent) { + final PackageManager packageManager = context.getPackageManager(); + List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent, + PackageManager.MATCH_DEFAULT_ONLY); + return (resolveInfo.size() > 0); + } + private static Notification buildBasicNotification(Notification.Builder notificationBuilder, Context context, String title, String summaryText, long startMillis, long endMillis, long eventId, int notificationId, boolean doPopup, int priority, @@ -779,7 +788,7 @@ public class AlertReceiver extends BroadcastReceiver { /** * Create a pending intent to send ourself a broadcast to start maps, using the first map * link available. - * If no links are found, return null. + * If no links or resolve applications are found, return null. */ private static PendingIntent createMapBroadcastIntent(Context context, URLSpan[] urlSpans, long eventId) { @@ -787,12 +796,17 @@ public class AlertReceiver extends BroadcastReceiver { URLSpan urlSpan = urlSpans[span_i]; String urlString = urlSpan.getURL(); if (urlString.startsWith(GEO_PREFIX)) { - Intent broadcastIntent = new Intent(MAP_ACTION); - broadcastIntent.setClass(context, AlertReceiver.class); - broadcastIntent.putExtra(EXTRA_EVENT_ID, eventId); - return PendingIntent.getBroadcast(context, - Long.valueOf(eventId).hashCode(), broadcastIntent, - PendingIntent.FLAG_CANCEL_CURRENT); + Intent geoIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlString)); + geoIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + // If this intent couldn't be handle, needn't create the map action. + if (isResolveIntent(context, geoIntent)) { + Intent broadcastIntent = new Intent(MAP_ACTION); + broadcastIntent.setClass(context, AlertReceiver.class); + broadcastIntent.putExtra(EXTRA_EVENT_ID, eventId); + return PendingIntent.getBroadcast(context, + Long.valueOf(eventId).hashCode(), broadcastIntent, + PendingIntent.FLAG_CANCEL_CURRENT); + } } } |