summaryrefslogtreecommitdiffstats
path: root/samples/browseable/PermissionRequest/src/com.example.android.permissionrequest/PermissionRequestFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'samples/browseable/PermissionRequest/src/com.example.android.permissionrequest/PermissionRequestFragment.java')
-rw-r--r--samples/browseable/PermissionRequest/src/com.example.android.permissionrequest/PermissionRequestFragment.java67
1 files changed, 59 insertions, 8 deletions
diff --git a/samples/browseable/PermissionRequest/src/com.example.android.permissionrequest/PermissionRequestFragment.java b/samples/browseable/PermissionRequest/src/com.example.android.permissionrequest/PermissionRequestFragment.java
index 44f1d6ec5..418c90d34 100644
--- a/samples/browseable/PermissionRequest/src/com.example.android.permissionrequest/PermissionRequestFragment.java
+++ b/samples/browseable/PermissionRequest/src/com.example.android.permissionrequest/PermissionRequestFragment.java
@@ -16,12 +16,15 @@
package com.example.android.permissionrequest;
+import android.Manifest;
import android.annotation.SuppressLint;
+import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
+import android.support.v4.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -37,12 +40,14 @@ import com.example.android.common.logger.Log;
* This fragment shows a {@link WebView} and loads a web app from the {@link SimpleWebServer}.
*/
public class PermissionRequestFragment extends Fragment
- implements ConfirmationDialogFragment.Listener {
+ implements ConfirmationDialogFragment.Listener, MessageDialogFragment.Listener {
private static final String TAG = PermissionRequestFragment.class.getSimpleName();
private static final String FRAGMENT_DIALOG = "dialog";
+ private static final int REQUEST_CAMERA_PERMISSION = 1;
+
/**
* We use this web server to serve HTML files in the assets folder. This is because we cannot
* use the JavaScript method "getUserMedia" from "file:///android_assets/..." URLs.
@@ -67,7 +72,7 @@ public class PermissionRequestFragment extends Fragment
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
- @Nullable Bundle savedInstanceState) {
+ @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_permission_request, container, false);
}
@@ -85,7 +90,14 @@ public class PermissionRequestFragment extends Fragment
final int port = 8080;
mWebServer = new SimpleWebServer(port, getResources().getAssets());
mWebServer.start();
- mWebView.loadUrl("http://localhost:" + port + "/sample.html");
+ // This is for runtime permission on Marshmallow and above; It is not directly related to
+ // PermissionRequest API.
+ if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)
+ != PackageManager.PERMISSION_GRANTED) {
+ requestCameraPermission();
+ } else {
+ mWebView.loadUrl("http://localhost:" + port + "/sample.html");
+ }
}
@Override
@@ -94,6 +106,32 @@ public class PermissionRequestFragment extends Fragment
super.onPause();
}
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
+ @NonNull int[] grantResults) {
+ // This is for runtime permission on Marshmallow and above; It is not directly related to
+ // PermissionRequest API.
+ if (requestCode == REQUEST_CAMERA_PERMISSION) {
+ if (permissions.length != 1 || grantResults.length != 1 ||
+ grantResults[0] != PackageManager.PERMISSION_GRANTED) {
+ Log.e(TAG, "Camera permission not granted.");
+ } else if (mWebView != null && mWebServer != null) {
+ mWebView.loadUrl("http://localhost:" + mWebServer.getPort() + "/sample.html");
+ }
+ } else {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ }
+ }
+
+ private void requestCameraPermission() {
+ if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) {
+ MessageDialogFragment.newInstance(R.string.permission_message)
+ .show(getChildFragmentManager(), FRAGMENT_DIALOG);
+ } else {
+ requestPermissions(new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
+ }
+ }
+
@SuppressLint("SetJavaScriptEnabled")
private static void configureWebSettings(WebSettings settings) {
settings.setJavaScriptEnabled(true);
@@ -110,8 +148,16 @@ public class PermissionRequestFragment extends Fragment
public void onPermissionRequest(PermissionRequest request) {
Log.i(TAG, "onPermissionRequest");
mPermissionRequest = request;
- ConfirmationDialogFragment.newInstance(request.getResources())
- .show(getChildFragmentManager(), FRAGMENT_DIALOG);
+ final String[] requestedResources = request.getResources();
+ for (String r : requestedResources) {
+ if (r.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) {
+ // In this sample, we only accept video capture request.
+ ConfirmationDialogFragment
+ .newInstance(new String[]{PermissionRequest.RESOURCE_VIDEO_CAPTURE})
+ .show(getChildFragmentManager(), FRAGMENT_DIALOG);
+ break;
+ }
+ }
}
// This method is called when the permission request is canceled by the web content.
@@ -155,9 +201,14 @@ public class PermissionRequestFragment extends Fragment
};
@Override
- public void onConfirmation(boolean allowed) {
+ public void onOkClicked() {
+ requestPermissions(new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
+ }
+
+ @Override
+ public void onConfirmation(boolean allowed, String[] resources) {
if (allowed) {
- mPermissionRequest.grant(mPermissionRequest.getResources());
+ mPermissionRequest.grant(resources);
Log.d(TAG, "Permission granted.");
} else {
mPermissionRequest.deny();
@@ -174,7 +225,7 @@ public class PermissionRequestFragment extends Fragment
* For testing.
*/
public interface ConsoleMonitor {
- public void onConsoleMessage(ConsoleMessage message);
+ void onConsoleMessage(ConsoleMessage message);
}
}