Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/download/DownloadController.java

Issue 2850223002: remove reliance on webcontents when requesting storage permission (Closed)
Patch Set: fix mock class Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/download/DownloadController.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadController.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadController.java
index f3ed67a8d9548de9577d5cdab8058a8d2a1ab520..44a09a0e0bea3c73723d6b21805923ab47e6cf49 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadController.java
@@ -5,9 +5,19 @@
package org.chromium.chrome.browser.download;
import android.Manifest.permission;
-
+import android.app.Activity;
+import android.content.DialogInterface;
+import android.content.pm.PackageManager;
+import android.support.v7.app.AlertDialog;
+import android.view.View;
+import android.widget.TextView;
+
+import org.chromium.base.ApplicationStatus;
import org.chromium.base.annotations.CalledByNative;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.ui.base.WindowAndroid;
+import org.chromium.ui.base.WindowAndroid.PermissionCallback;
/**
* Java counterpart of android DownloadController.
@@ -106,24 +116,78 @@ public class DownloadController {
/**
* Returns whether file access is allowed.
*
- * @param windowAndroid WindowAndroid to access file system.
* @return true if allowed, or false otherwise.
*/
@CalledByNative
- private boolean hasFileAccess(WindowAndroid windowAndroid) {
- return windowAndroid.hasPermission(permission.WRITE_EXTERNAL_STORAGE);
+ private boolean hasFileAccess() {
+ Activity activity = ApplicationStatus.getLastTrackedFocusedActivity();
+ if (activity instanceof ChromeActivity) {
+ return ((ChromeActivity) activity)
+ .getWindowAndroid()
+ .hasPermission(permission.WRITE_EXTERNAL_STORAGE);
+ }
+ return false;
}
- /**
- * Notify the results of a file access request.
- * @param callbackId The ID of the callback.
- * @param granted Whether access was granted.
- */
- public void onRequestFileAccessResult(long callbackId, boolean granted) {
- nativeOnRequestFileAccessResult(callbackId, granted);
+ @CalledByNative
+ private void requestFileAccess(final long callbackId) {
+ Activity activity = ApplicationStatus.getLastTrackedFocusedActivity();
+ if (!(activity instanceof ChromeActivity)) {
+ nativeOnAcquirePermissionResult(callbackId, false, null);
+ return;
+ }
+
+ final WindowAndroid windowAndroid = ((ChromeActivity) activity).getWindowAndroid();
+ if (windowAndroid == null) {
+ nativeOnAcquirePermissionResult(callbackId, false, null);
+ return;
+ }
+
+ if (!windowAndroid.canRequestPermission(permission.WRITE_EXTERNAL_STORAGE)) {
+ nativeOnAcquirePermissionResult(callbackId, false,
+ windowAndroid.isPermissionRevokedByPolicy(permission.WRITE_EXTERNAL_STORAGE)
+ ? null
+ : permission.WRITE_EXTERNAL_STORAGE);
+ return;
+ }
+
+ View view = activity.getLayoutInflater().inflate(R.layout.update_permissions_dialog, null);
+ TextView dialogText = (TextView) view.findViewById(R.id.text);
+ dialogText.setText(R.string.missing_storage_permission_download_education_text);
+
+ final PermissionCallback permissionCallback = new PermissionCallback() {
+ @Override
+ public void onRequestPermissionsResult(String[] permissions, int[] grantResults) {
+ nativeOnAcquirePermissionResult(callbackId,
+ grantResults.length > 0
+ && grantResults[0] == PackageManager.PERMISSION_GRANTED,
+ null);
+ }
+ };
+
+ AlertDialog.Builder builder =
+ new AlertDialog.Builder(activity, R.style.AlertDialogTheme)
+ .setView(view)
+ .setPositiveButton(R.string.infobar_update_permissions_button_text,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ windowAndroid.requestPermissions(
+ new String[] {permission.WRITE_EXTERNAL_STORAGE},
+ permissionCallback);
+ }
+ })
+ .setOnCancelListener(new DialogInterface.OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ nativeOnAcquirePermissionResult(callbackId, false, null);
+ }
+ });
+ builder.create().show();
}
// native methods
private native void nativeInit();
- private native void nativeOnRequestFileAccessResult(long callbackId, boolean granted);
+ private native void nativeOnAcquirePermissionResult(
+ long callbackId, boolean granted, String permissionToUpdate);
}

Powered by Google App Engine
This is Rietveld 408576698