diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5482044e..760f148b1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -40,9 +40,20 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java
index 4020ef495..b8c96d9a8 100644
--- a/app/src/main/java/protect/card_locker/MainActivity.java
+++ b/app/src/main/java/protect/card_locker/MainActivity.java
@@ -7,6 +7,7 @@
import android.content.SharedPreferences;
import android.database.CursorIndexOutOfBoundsException;
import android.database.sqlite.SQLiteDatabase;
+import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.util.DisplayMetrics;
@@ -445,32 +446,48 @@ private void onSharedIntent(Intent intent) {
String receivedAction = intent.getAction();
String receivedType = intent.getType();
- // Check if an image or file was shared to us
- if (Intent.ACTION_SEND.equals(receivedAction)) {
- List parseResultList;
+ if (receivedAction == null || receivedType == null) {
+ return;
+ }
- if (receivedType.equals("text/plain")) {
- LoyaltyCard loyaltyCard = new LoyaltyCard();
- loyaltyCard.setCardId(intent.getStringExtra(Intent.EXTRA_TEXT));
- parseResultList = Collections.singletonList(new ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard));
- } else if (receivedType.startsWith("image/")) {
- parseResultList = Utils.retrieveBarcodesFromImage(this, intent.getParcelableExtra(Intent.EXTRA_STREAM));
- } else if (receivedType.equals("application/pdf")) {
- parseResultList = Utils.retrieveBarcodesFromPdf(this, intent.getParcelableExtra(Intent.EXTRA_STREAM));
- } else if (receivedType.equals("application/vnd.apple.pkpass")) {
- parseResultList = Utils.retrieveBarcodesFromPkPass(this, intent.getParcelableExtra(Intent.EXTRA_STREAM));
+ List parseResultList;
+
+ // Check for shared text
+ if (receivedAction.equals(Intent.ACTION_SEND) && receivedType.equals("text/plain")) {
+ LoyaltyCard loyaltyCard = new LoyaltyCard();
+ loyaltyCard.setCardId(intent.getStringExtra(Intent.EXTRA_TEXT));
+ parseResultList = Collections.singletonList(new ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard));
+ } else {
+ // Parse whatever file was sent, regardless of opening or sharing
+ Uri data;
+ if (receivedAction.equals(Intent.ACTION_VIEW)) {
+ data = intent.getData();
+ } else if (receivedAction.equals(Intent.ACTION_SEND)) {
+ data = intent.getParcelableExtra(Intent.EXTRA_STREAM);
} else {
- Log.e(TAG, "Wrong mime-type");
+ Log.e(TAG, "Wrong action type to parse intent");
return;
}
- if (parseResultList.isEmpty()) {
- finish();
+ if (receivedType.startsWith("image/")) {
+ parseResultList = Utils.retrieveBarcodesFromImage(this, data);
+ } else if (receivedType.equals("application/pdf")) {
+ parseResultList = Utils.retrieveBarcodesFromPdf(this, data);
+ } else if (receivedType.equals("application/vnd.apple.pkpass")) {
+ parseResultList = Utils.retrieveBarcodesFromPkPass(this, data);
+ } else {
+ Log.e(TAG, "Wrong mime-type");
return;
}
+ }
- processParseResultList(parseResultList, null, true);
+ // Give up if we should parse but there is nothing to parse
+ if (parseResultList == null || parseResultList.isEmpty()) {
+ finish();
+ return;
}
+
+ processParseResultList(parseResultList, null, true);
}
private void extractIntentFields(Intent intent) {