diff options
| -rw-r--r-- | core/java/android/nfc/NfcActivityManager.java | 64 | 
1 files changed, 34 insertions, 30 deletions
| diff --git a/core/java/android/nfc/NfcActivityManager.java b/core/java/android/nfc/NfcActivityManager.java index d619c0a8e117..c7d4c65d99c0 100644 --- a/core/java/android/nfc/NfcActivityManager.java +++ b/core/java/android/nfc/NfcActivityManager.java @@ -371,40 +371,44 @@ public final class NfcActivityManager extends IAppCallback.Stub              flags = state.flags;              activity = state.activity;          } - -        // Make callbacks without lock -        if (ndefCallback != null) { -            message  = ndefCallback.createNdefMessage(event); -        } -        if (urisCallback != null) { -            uris = urisCallback.createBeamUris(event); -            if (uris != null) { -                ArrayList<Uri> validUris = new ArrayList<Uri>(); -                for (Uri uri : uris) { -                    if (uri == null) { -                        Log.e(TAG, "Uri not allowed to be null."); -                        continue; -                    } -                    String scheme = uri.getScheme(); -                    if (scheme == null || (!scheme.equalsIgnoreCase("file") && -                            !scheme.equalsIgnoreCase("content"))) { -                        Log.e(TAG, "Uri needs to have " + -                                "either scheme file or scheme content"); -                        continue; +        final long ident = Binder.clearCallingIdentity(); +        try { +            // Make callbacks without lock +            if (ndefCallback != null) { +                message = ndefCallback.createNdefMessage(event); +            } +            if (urisCallback != null) { +                uris = urisCallback.createBeamUris(event); +                if (uris != null) { +                    ArrayList<Uri> validUris = new ArrayList<Uri>(); +                    for (Uri uri : uris) { +                        if (uri == null) { +                            Log.e(TAG, "Uri not allowed to be null."); +                            continue; +                        } +                        String scheme = uri.getScheme(); +                        if (scheme == null || (!scheme.equalsIgnoreCase("file") && +                                !scheme.equalsIgnoreCase("content"))) { +                            Log.e(TAG, "Uri needs to have " + +                                    "either scheme file or scheme content"); +                            continue; +                        } +                        uri = ContentProvider.maybeAddUserId(uri, UserHandle.myUserId()); +                        validUris.add(uri);                      } -                    uri = ContentProvider.maybeAddUserId(uri, UserHandle.myUserId()); -                    validUris.add(uri); -                } -                uris = validUris.toArray(new Uri[validUris.size()]); +                    uris = validUris.toArray(new Uri[validUris.size()]); +                }              } -        } -        if (uris != null && uris.length > 0) { -            for (Uri uri : uris) { -                // Grant the NFC process permission to read these URIs -                activity.grantUriPermission("com.android.nfc", uri, -                        Intent.FLAG_GRANT_READ_URI_PERMISSION); +            if (uris != null && uris.length > 0) { +                for (Uri uri : uris) { +                    // Grant the NFC process permission to read these URIs +                    activity.grantUriPermission("com.android.nfc", uri, +                            Intent.FLAG_GRANT_READ_URI_PERMISSION); +                }              } +        } finally { +            Binder.restoreCallingIdentity(ident);          }          return new BeamShareData(message, uris, new UserHandle(UserHandle.myUserId()), flags);      } |