Move permission check to createOperationInput
This commit is contained in:
@@ -224,12 +224,10 @@ public class DecryptListFragment
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (readPermissionGranted(uri)) {
|
if (results != null && results.containsKey(uri)) {
|
||||||
if (results != null && results.containsKey(uri)) {
|
processResult(uri);
|
||||||
processResult(uri);
|
} else {
|
||||||
} else {
|
mPendingInputUris.add(uri);
|
||||||
mPendingInputUris.add(uri);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -237,82 +235,6 @@ public class DecryptListFragment
|
|||||||
cryptoOperation();
|
cryptoOperation();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Request READ_EXTERNAL_STORAGE permission on Android >= 6.0 to read content from "file" Uris
|
|
||||||
*
|
|
||||||
* see
|
|
||||||
* https://commonsware.com/blog/2015/10/07/runtime-permissions-files-action-send.html
|
|
||||||
*/
|
|
||||||
private boolean readPermissionGranted(Uri uri) {
|
|
||||||
if (Build.VERSION.SDK_INT < VERSION_CODES.M) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (! "file".equals(uri.getScheme())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build check due to https://commonsware.com/blog/2015/11/09/you-cannot-hold-nonexistent-permissions.html
|
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN ||
|
|
||||||
ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)
|
|
||||||
== PackageManager.PERMISSION_GRANTED) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
requestPermissions(
|
|
||||||
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
|
|
||||||
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
|
|
||||||
|
|
||||||
if (! mCancelledInputUris.contains(uri)) {
|
|
||||||
mCancelledInputUris.add(uri);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
|
|
||||||
@NonNull int[] grantResults) {
|
|
||||||
switch (requestCode) {
|
|
||||||
case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: {
|
|
||||||
if (grantResults.length > 0
|
|
||||||
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
|
||||||
|
|
||||||
// permission granted -> retry all cancelled uris!
|
|
||||||
for (Iterator<Uri> iterator = mCancelledInputUris.iterator(); iterator.hasNext(); ) {
|
|
||||||
Uri uri = iterator.next();
|
|
||||||
|
|
||||||
if ("file".equals(uri.getScheme())) {
|
|
||||||
iterator.remove();
|
|
||||||
mPendingInputUris.add(uri);
|
|
||||||
mAdapter.setCancelled(uri, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if there are any pending input uris
|
|
||||||
cryptoOperation();
|
|
||||||
} else {
|
|
||||||
|
|
||||||
// permission denied -> cancel all file uris
|
|
||||||
for (final Uri uri : mInputUris) {
|
|
||||||
if ("file".equals(uri.getScheme())) {
|
|
||||||
if (! mCancelledInputUris.contains(uri)) {
|
|
||||||
mCancelledInputUris.add(uri);
|
|
||||||
}
|
|
||||||
mAdapter.setCancelled(uri, new OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
retryUri(uri);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default: {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
switch (requestCode) {
|
switch (requestCode) {
|
||||||
@@ -534,11 +456,9 @@ public class DecryptListFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
// un-cancel this one
|
// un-cancel this one
|
||||||
if (readPermissionGranted(uri)) {
|
mCancelledInputUris.remove(uri);
|
||||||
mCancelledInputUris.remove(uri);
|
mPendingInputUris.add(uri);
|
||||||
mPendingInputUris.add(uri);
|
mAdapter.setCancelled(uri, null);
|
||||||
mAdapter.setCancelled(uri, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if there are any pending input uris
|
// check if there are any pending input uris
|
||||||
cryptoOperation();
|
cryptoOperation();
|
||||||
@@ -671,12 +591,97 @@ public class DecryptListFragment
|
|||||||
mCurrentInputUri = mPendingInputUris.remove(0);
|
mCurrentInputUri = mPendingInputUris.remove(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.d(Constants.TAG, "mInputUri=" + mCurrentInputUri);
|
Log.d(Constants.TAG, "mCurrentInputUri=" + mCurrentInputUri);
|
||||||
|
|
||||||
PgpDecryptVerifyInputParcel decryptInput = new PgpDecryptVerifyInputParcel()
|
if (readPermissionGranted(mCurrentInputUri)) {
|
||||||
.setAllowSymmetricDecryption(true);
|
PgpDecryptVerifyInputParcel decryptInput = new PgpDecryptVerifyInputParcel()
|
||||||
return new InputDataParcel(mCurrentInputUri, decryptInput);
|
.setAllowSymmetricDecryption(true);
|
||||||
|
return new InputDataParcel(mCurrentInputUri, decryptInput);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request READ_EXTERNAL_STORAGE permission on Android >= 6.0 to read content from "file" Uris
|
||||||
|
*
|
||||||
|
* see
|
||||||
|
* https://commonsware.com/blog/2015/10/07/runtime-permissions-files-action-send.html
|
||||||
|
*/
|
||||||
|
private boolean readPermissionGranted(final Uri uri) {
|
||||||
|
if (Build.VERSION.SDK_INT < VERSION_CODES.M) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (! "file".equals(uri.getScheme())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build check due to https://commonsware.com/blog/2015/11/09/you-cannot-hold-nonexistent-permissions.html
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN ||
|
||||||
|
ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)
|
||||||
|
== PackageManager.PERMISSION_GRANTED) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
requestPermissions(
|
||||||
|
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
|
||||||
|
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
|
||||||
|
|
||||||
|
mCurrentInputUri = null;
|
||||||
|
mCancelledInputUris.add(uri);
|
||||||
|
mAdapter.setCancelled(uri, new OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
retryUri(uri);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
|
||||||
|
@NonNull int[] grantResults) {
|
||||||
|
switch (requestCode) {
|
||||||
|
case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: {
|
||||||
|
if (grantResults.length > 0
|
||||||
|
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||||
|
|
||||||
|
// permission granted -> retry all cancelled file uris!
|
||||||
|
for (Iterator<Uri> iterator = mCancelledInputUris.iterator(); iterator.hasNext(); ) {
|
||||||
|
Uri uri = iterator.next();
|
||||||
|
|
||||||
|
if ("file".equals(uri.getScheme())) {
|
||||||
|
iterator.remove();
|
||||||
|
mPendingInputUris.add(uri);
|
||||||
|
mAdapter.setCancelled(uri, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if there are any pending input uris
|
||||||
|
cryptoOperation();
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// permission denied -> cancel all pending file uris
|
||||||
|
mCurrentInputUri = null;
|
||||||
|
for (final Uri uri : mPendingInputUris) {
|
||||||
|
if ("file".equals(uri.getScheme())) {
|
||||||
|
if (! mCancelledInputUris.contains(uri)) {
|
||||||
|
mCancelledInputUris.add(uri);
|
||||||
|
}
|
||||||
|
mAdapter.setCancelled(uri, new OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
retryUri(uri);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user