From 256540f50b9b472b09f68b70d546aa525721873f Mon Sep 17 00:00:00 2001 From: Alexander Danilov Date: Sun, 2 Dec 2018 22:52:52 +0300 Subject: [PATCH] Storage permission request for mobile application #4 --- .../iitc_mobile/IITC_FileManager.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/mobile/app/src/main/java/org/exarhteam/iitc_mobile/IITC_FileManager.java b/mobile/app/src/main/java/org/exarhteam/iitc_mobile/IITC_FileManager.java index bdf0ecd73..3497b554a 100644 --- a/mobile/app/src/main/java/org/exarhteam/iitc_mobile/IITC_FileManager.java +++ b/mobile/app/src/main/java/org/exarhteam/iitc_mobile/IITC_FileManager.java @@ -1,5 +1,6 @@ package org.exarhteam.iitc_mobile; +import android.Manifest; import android.annotation.TargetApi; import android.app.Activity; import android.app.AlertDialog; @@ -7,16 +8,19 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.net.Uri; import android.os.Environment; import android.os.ParcelFileDescriptor; import android.preference.PreferenceManager; +import android.support.v4.app.ActivityCompat; import android.text.Html; import android.util.Base64; import android.util.Base64OutputStream; import android.webkit.WebResourceResponse; import android.widget.Toast; +import android.os.Build; import org.exarhteam.iitc_mobile.IITC_Mobile.ResponseHandler; import org.exarhteam.iitc_mobile.async.UpdateScript; @@ -331,6 +335,11 @@ public void updatePlugins(final boolean force) { final long lastUpdated = mPrefs.getLong("pref_last_plugin_update", 0); final long now = System.currentTimeMillis(); + final IITC_Mobile iitc = (IITC_Mobile) mActivity; + if (!isWriteStoragePermissionGranted(iitc)) { + Toast.makeText(mActivity, "Permissions are required if you want to use user scripts or cache on SDCard", Toast.LENGTH_LONG).show(); + } + // return if no update wanted if ((now - lastUpdated < mUpdateInterval) && !force) return; // get the plugin preferences @@ -355,6 +364,19 @@ public void setUpdateInterval(final int interval) { mUpdateInterval = 1000 * 60 * 60 * 24 * interval; } + private boolean isWriteStoragePermissionGranted(IITC_Mobile iitc) { + if (Build.VERSION.SDK_INT >= 23) { + if (ActivityCompat.checkSelfPermission(iitc, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(iitc, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 3); + return true; + } else { + return false; + } + } else { //permission is automatically granted on sdk<23 upon installation + return true; + } + } + private class FileRequest extends WebResourceResponse implements ResponseHandler, Runnable { private Intent mData; private final String mFunctionName; @@ -380,6 +402,8 @@ private FileRequest(final Uri uri) { .addCategory(Intent.CATEGORY_OPENABLE); final IITC_Mobile iitc = (IITC_Mobile) mActivity; + Log.d("Request permissions"); + try { iitc.startActivityForResult(Intent.createChooser(target, "Choose file"), this); } catch (final ActivityNotFoundException e) {