Merge "Manual cherry-pick of "Update permission usage for M""
am: 4e9bcb71eb
* commit '4e9bcb71eb88de0e4d91b126e31925725f7c483a':
Manual cherry-pick of "Update permission usage for M"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 9a2ccd0..e97238b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -21,6 +21,9 @@
package="com.android.htmlviewer">
<original-package android:name="com.android.htmlviewer" />
+ <uses-sdk android:minSdkVersion="23"
+ android:targetSdkVersion="23" />
+
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application android:label="@string/app_label">
diff --git a/src/com/android/htmlviewer/HTMLViewerActivity.java b/src/com/android/htmlviewer/HTMLViewerActivity.java
index adda32c..e31e4d4 100644
--- a/src/com/android/htmlviewer/HTMLViewerActivity.java
+++ b/src/com/android/htmlviewer/HTMLViewerActivity.java
@@ -20,6 +20,8 @@
import android.content.ActivityNotFoundException;
import android.content.ContentResolver;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.Manifest;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
@@ -47,6 +49,7 @@
private WebView mWebView;
private View mLoading;
+ private Uri mOnPermissionDestination;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -79,7 +82,34 @@
setTitle(intent.getStringExtra(Intent.EXTRA_TITLE));
}
- mWebView.loadUrl(String.valueOf(intent.getData()));
+ Uri destination = intent.getData();
+ if (destination != null) {
+ // Is this a local file?
+ if ("file".equals(destination.getScheme())) {
+ if (PackageManager.PERMISSION_DENIED ==
+ checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)) {
+ // If we don't have local file permissions, save the destination so we can try
+ // again once they're granted.
+ mOnPermissionDestination = destination;
+ requestPermissions(new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
+ }
+ }
+ mWebView.loadUrl(destination.toString());
+ }
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode,
+ String permissions[], int[] grantResults) {
+ // We only ever request 1 permission, so these arguments should always have the same form.
+ assert permissions.length == 1;
+ assert Manifest.permission.READ_EXTERNAL_STORAGE.equals(permissions[0]);
+ assert grantResults.length == 1;
+
+ if (PackageManager.PERMISSION_GRANTED == grantResults[0]) {
+ // Try again now that we have the permission.
+ mWebView.loadUrl(mOnPermissionDestination.toString());
+ }
}
@Override