ImportKeys: Fix start of operation after request of permission, fixes for permissions, refactoring
This commit is contained in:
@@ -49,9 +49,6 @@ public class ImportKeysFileFragment extends Fragment {
|
|||||||
private Activity mActivity;
|
private Activity mActivity;
|
||||||
private ImportKeysListener mCallback;
|
private ImportKeysListener mCallback;
|
||||||
|
|
||||||
private View mBrowse;
|
|
||||||
private View mClipboardButton;
|
|
||||||
|
|
||||||
private Uri mCurrentUri;
|
private Uri mCurrentUri;
|
||||||
|
|
||||||
private static final int REQUEST_CODE_FILE = 0x00007003;
|
private static final int REQUEST_CODE_FILE = 0x00007003;
|
||||||
@@ -131,17 +128,14 @@ public class ImportKeysFileFragment extends Fragment {
|
|||||||
if (resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
|
if (resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
|
||||||
mCurrentUri = data.getData();
|
mCurrentUri = data.getData();
|
||||||
|
|
||||||
if (PermissionsUtil.checkAndRequestReadPermission(mActivity, mCurrentUri)) {
|
if (PermissionsUtil.checkAndRequestReadPermission(this, mCurrentUri)) {
|
||||||
startImportingKeys();
|
startImportingKeys();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -165,16 +165,13 @@ public class ImportKeysListFragment extends Fragment implements
|
|||||||
loadState(new CloudLoaderState(query, cloudSearchPrefs));
|
loadState(new CloudLoaderState(query, cloudSearchPrefs));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dataUri == null || PermissionsUtil.checkAndRequestReadPermission(mActivity, dataUri)) {
|
|
||||||
restartLoaders();
|
|
||||||
}
|
|
||||||
|
|
||||||
mBinding.basic.importKeys.setOnClickListener(new OnClickListener() {
|
mBinding.basic.importKeys.setOnClickListener(new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
mListener.importKeys(mAdapter.getEntries());
|
mListener.importKeys(mAdapter.getEntries());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
mBinding.basic.listKeys.setOnClickListener(new OnClickListener() {
|
mBinding.basic.listKeys.setOnClickListener(new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
@@ -232,7 +229,7 @@ public class ImportKeysListFragment extends Fragment implements
|
|||||||
BytesLoaderState ls = (BytesLoaderState) mLoaderState;
|
BytesLoaderState ls = (BytesLoaderState) mLoaderState;
|
||||||
|
|
||||||
if (ls.mDataUri != null &&
|
if (ls.mDataUri != null &&
|
||||||
!PermissionsUtil.checkAndRequestReadPermission(mActivity, ls.mDataUri)) {
|
!PermissionsUtil.checkAndRequestReadPermission(this, ls.mDataUri)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
package org.sufficientlysecure.keychain.ui.util;
|
package org.sufficientlysecure.keychain.ui.util;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
@@ -24,28 +27,45 @@ public class PermissionsUtil {
|
|||||||
* <p/>
|
* <p/>
|
||||||
* see https://commonsware.com/blog/2015/10/07/runtime-permissions-files-action-send.html
|
* see https://commonsware.com/blog/2015/10/07/runtime-permissions-files-action-send.html
|
||||||
*/
|
*/
|
||||||
|
@SuppressLint("NewApi") // Api level is checked in checkReadPermission
|
||||||
public static boolean checkAndRequestReadPermission(Activity activity, Uri uri) {
|
public static boolean checkAndRequestReadPermission(Activity activity, Uri uri) {
|
||||||
|
boolean result = checkReadPermission(activity, uri);
|
||||||
|
if (!result) {
|
||||||
|
activity.requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
|
||||||
|
PERMISSION_READ_EXTERNAL_STORAGE);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean checkAndRequestReadPermission(Fragment fragment, Uri uri) {
|
||||||
|
boolean result = checkReadPermission(fragment.getContext(), uri);
|
||||||
|
if (!result) {
|
||||||
|
fragment.requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
|
||||||
|
PERMISSION_READ_EXTERNAL_STORAGE);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean checkReadPermission(Context context, Uri uri) {
|
||||||
if (!ContentResolver.SCHEME_FILE.equals(uri.getScheme())) {
|
if (!ContentResolver.SCHEME_FILE.equals(uri.getScheme())) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Additional check due to https://commonsware.com/blog/2015/11/09/you-cannot-hold-nonexistent-permissions.html
|
// Additional check due to:
|
||||||
|
// https://commonsware.com/blog/2015/11/09/you-cannot-hold-nonexistent-permissions.html
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE)
|
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE)
|
||||||
== PackageManager.PERMISSION_GRANTED) {
|
== PackageManager.PERMISSION_GRANTED) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
activity.requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
|
|
||||||
PERMISSION_READ_EXTERNAL_STORAGE);
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean checkReadPermissionResult(Activity activity,
|
public static boolean checkReadPermissionResult(Context context,
|
||||||
int requestCode,
|
int requestCode,
|
||||||
int[] grantResults) {
|
int[] grantResults) {
|
||||||
|
|
||||||
@@ -59,7 +79,8 @@ public class PermissionsUtil {
|
|||||||
if (permissionWasGranted) {
|
if (permissionWasGranted) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(activity, R.string.error_denied_storage_permission, Toast.LENGTH_LONG).show();
|
Toast.makeText(context, R.string.error_denied_storage_permission, Toast.LENGTH_LONG)
|
||||||
|
.show();
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user