summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/com/google/zxing/client/android/result/CalendarResultHandler.java15
-rw-r--r--src/com/google/zxing/client/android/result/ResultHandler.java33
2 files changed, 37 insertions, 11 deletions
diff --git a/src/com/google/zxing/client/android/result/CalendarResultHandler.java b/src/com/google/zxing/client/android/result/CalendarResultHandler.java
index 24585db9..b97029c8 100644
--- a/src/com/google/zxing/client/android/result/CalendarResultHandler.java
+++ b/src/com/google/zxing/client/android/result/CalendarResultHandler.java
@@ -16,6 +16,8 @@
package com.google.zxing.client.android.result;
+import android.content.ActivityNotFoundException;
+import android.util.Log;
import com.google.zxing.client.android.R;
import com.google.zxing.client.result.CalendarParsedResult;
import com.google.zxing.client.result.ParsedResult;
@@ -34,6 +36,8 @@ import java.util.Date;
*/
public final class CalendarResultHandler extends ResultHandler {
+ private static final String TAG = CalendarResultHandler.class.getSimpleName();
+
private static final int[] buttons = {
R.string.button_add_calendar
};
@@ -122,7 +126,16 @@ public final class CalendarResultHandler extends ResultHandler {
intent.putExtra(Intent.EXTRA_EMAIL, attendees);
// Documentation says this is either a String[] or comma-separated String, which is right?
}
- launchIntent(intent);
+
+ try {
+ // Do this manually at first
+ rawLaunchIntent(intent);
+ } catch (ActivityNotFoundException anfe) {
+ Log.w(TAG, "No calendar app available that responds to " + Intent.ACTION_INSERT);
+ // For calendar apps that don't like "INSERT":
+ intent.setAction(Intent.ACTION_EDIT);
+ launchIntent(intent); // Fail here for real if nothing can handle it
+ }
}
diff --git a/src/com/google/zxing/client/android/result/ResultHandler.java b/src/com/google/zxing/client/android/result/ResultHandler.java
index f8822ac6..d7cabab0 100644
--- a/src/com/google/zxing/client/android/result/ResultHandler.java
+++ b/src/com/google/zxing/client/android/result/ResultHandler.java
@@ -460,19 +460,32 @@ public abstract class ResultHandler {
}
}
- void launchIntent(Intent intent) {
+ /**
+ * Like {@link #launchIntent(Intent)} but will tell you if it is not handle-able
+ * via {@link ActivityNotFoundException}.
+ *
+ * @throws ActivityNotFoundException
+ */
+ void rawLaunchIntent(Intent intent) {
if (intent != null) {
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
Log.d(TAG, "Launching intent: " + intent + " with extras: " + intent.getExtras());
- try {
- activity.startActivity(intent);
- } catch (ActivityNotFoundException e) {
- AlertDialog.Builder builder = new AlertDialog.Builder(activity);
- builder.setTitle(R.string.app_name);
- builder.setMessage(R.string.msg_intent_failed);
- builder.setPositiveButton(R.string.button_ok, null);
- builder.show();
- }
+ activity.startActivity(intent);
+ }
+ }
+
+ /**
+ * Like {@link #rawLaunchIntent(Intent)} but will show a user dialog if nothing is available to handle.
+ */
+ void launchIntent(Intent intent) {
+ try {
+ rawLaunchIntent(intent);
+ } catch (ActivityNotFoundException e) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+ builder.setTitle(R.string.app_name);
+ builder.setMessage(R.string.msg_intent_failed);
+ builder.setPositiveButton(R.string.button_ok, null);
+ builder.show();
}
}