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