diff options
author | Ruchi Kandoi <kandoiruchi@google.com> | 2017-06-02 15:01:27 -0700 |
---|---|---|
committer | Ruchi Kandoi <kandoiruchi@google.com> | 2017-06-16 21:12:09 +0000 |
commit | 1930155714de36e454b3ce66ccd9389621e6841d (patch) | |
tree | 5f7b42fc302a1088dea7126f87a3951b4e1317c5 | |
parent | 5919171c49cc62f704fa032de023d988751709a1 (diff) | |
download | android_packages_apps_Nfc-1930155714de36e454b3ce66ccd9389621e6841d.tar.gz android_packages_apps_Nfc-1930155714de36e454b3ce66ccd9389621e6841d.tar.bz2 android_packages_apps_Nfc-1930155714de36e454b3ce66ccd9389621e6841d.zip |
Add READ_EXTERNAL_STORAGE for file based Uri while beaming.
Test: PoC application
Bug: 37287958
Change-Id: I7f5a2f32a053f0448726aec9f8b524f914c0d8df
Merged-In: I7f5a2f32a053f0448726aec9f8b524f914c0d8df
Signed-off-by: Ruchi Kandoi <kandoiruchi@google.com>
-rw-r--r-- | src/com/android/nfc/BeamShareActivity.java | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/com/android/nfc/BeamShareActivity.java b/src/com/android/nfc/BeamShareActivity.java index 84a658a8..9173e43d 100644 --- a/src/com/android/nfc/BeamShareActivity.java +++ b/src/com/android/nfc/BeamShareActivity.java @@ -19,6 +19,8 @@ package com.android.nfc; import java.util.ArrayList; import android.app.Activity; +import android.app.ActivityManager; +import android.app.ActivityManagerNative; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; @@ -26,14 +28,18 @@ import android.content.DialogInterface; import android.content.ClipData; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; import android.net.Uri; import android.nfc.BeamShareData; import android.nfc.NdefMessage; import android.nfc.NdefRecord; import android.nfc.NfcAdapter; import android.os.Bundle; +import android.os.RemoteException; import android.util.Log; +import android.util.EventLog; import android.webkit.URLUtil; +import android.Manifest.permission; import com.android.internal.R; @@ -194,16 +200,26 @@ public class BeamShareActivity extends Activity { int numValidUris = 0; for (Uri uri : mUris) { try { + int uid = ActivityManagerNative.getDefault().getLaunchedFromUid(getActivityToken()); + if (uri.getScheme().equalsIgnoreCase("file") && + getApplicationContext().checkPermission(permission.READ_EXTERNAL_STORAGE, -1, uid) != + PackageManager.PERMISSION_GRANTED) { + Log.e(TAG, "File based Uri doesn't have External Storage Permission."); + EventLog.writeEvent(0x534e4554, "37287958", uid, uri.getPath()); + break; + } grantUriPermission("com.android.nfc", uri, Intent.FLAG_GRANT_READ_URI_PERMISSION); uriArray[numValidUris++] = uri; if (DBG) Log.d(TAG, "Found uri: " + uri); } catch (SecurityException e) { Log.e(TAG, "Security exception granting uri permission to NFC process."); - numValidUris = 0; + break; + } catch (RemoteException e) { + Log.e(TAG, "Remote exception accessing uid of the calling process."); break; } } - if (numValidUris > 0) { + if (numValidUris != 0 && numValidUris == mUris.size()) { shareData = new BeamShareData(null, uriArray, 0); } else { // No uris left |