mirror of
https://github.com/libretro/RetroArch
synced 2025-02-07 12:39:54 +00:00
Merge pull request #13203 from farmerbb/master
[Android / Play Store] Implement MANAGE_EXTERNAL_STORAGE permission
This commit is contained in:
commit
edd446929b
1
pkg/android/phoenix/.gitignore
vendored
1
pkg/android/phoenix/.gitignore
vendored
@ -1,5 +1,6 @@
|
|||||||
.gradle
|
.gradle
|
||||||
.externalNativeBuild
|
.externalNativeBuild
|
||||||
|
.cxx
|
||||||
build
|
build
|
||||||
phoenix.iml
|
phoenix.iml
|
||||||
output.json
|
output.json
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||||
|
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.VIBRATE" />
|
<uses-permission android:name="android.permission.VIBRATE" />
|
||||||
|
|
||||||
|
@ -25,8 +25,8 @@ allprojects {
|
|||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 29
|
compileSdkVersion 30
|
||||||
buildToolsVersion "29.0.3"
|
buildToolsVersion "30.0.3"
|
||||||
ndkVersion "22.0.7026061"
|
ndkVersion "22.0.7026061"
|
||||||
|
|
||||||
flavorDimensions "variant"
|
flavorDimensions "variant"
|
||||||
@ -72,7 +72,7 @@ android {
|
|||||||
}
|
}
|
||||||
playStoreNormal {
|
playStoreNormal {
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 29
|
targetSdkVersion 30
|
||||||
versionCode getPlayStoreVersionCode()
|
versionCode getPlayStoreVersionCode()
|
||||||
versionName getPlayStoreVersionName()
|
versionName getPlayStoreVersionName()
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ android {
|
|||||||
}
|
}
|
||||||
playStorePlus {
|
playStorePlus {
|
||||||
minSdkVersion 26
|
minSdkVersion 26
|
||||||
targetSdkVersion 29
|
targetSdkVersion 30
|
||||||
versionCode getPlayStoreVersionCode()
|
versionCode getPlayStoreVersionCode()
|
||||||
versionName getPlayStoreVersionName()
|
versionName getPlayStoreVersionName()
|
||||||
|
|
||||||
|
@ -3,10 +3,11 @@ package com.retroarch.browser.mainmenu;
|
|||||||
import com.retroarch.browser.preferences.util.UserPreferences;
|
import com.retroarch.browser.preferences.util.UserPreferences;
|
||||||
import com.retroarch.browser.retroactivity.RetroActivityFuture;
|
import com.retroarch.browser.retroactivity.RetroActivityFuture;
|
||||||
|
|
||||||
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.pm.ApplicationInfo;
|
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
@ -21,6 +22,7 @@ import android.Manifest;
|
|||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link PreferenceActivity} subclass that provides all of the
|
* {@link PreferenceActivity} subclass that provides all of the
|
||||||
@ -31,6 +33,7 @@ public final class MainMenuActivity extends PreferenceActivity
|
|||||||
final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124;
|
final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124;
|
||||||
public static String PACKAGE_NAME;
|
public static String PACKAGE_NAME;
|
||||||
boolean checkPermissions = false;
|
boolean checkPermissions = false;
|
||||||
|
boolean checkManageExternalStoragePermission = false;
|
||||||
|
|
||||||
public void showMessageOKCancel(String message, DialogInterface.OnClickListener onClickListener)
|
public void showMessageOKCancel(String message, DialogInterface.OnClickListener onClickListener)
|
||||||
{
|
{
|
||||||
@ -64,12 +67,25 @@ public final class MainMenuActivity extends PreferenceActivity
|
|||||||
List<String> permissionsNeeded = new ArrayList<String>();
|
List<String> permissionsNeeded = new ArrayList<String>();
|
||||||
final List<String> permissionsList = new ArrayList<String>();
|
final List<String> permissionsList = new ArrayList<String>();
|
||||||
|
|
||||||
if (!addPermission(permissionsList, Manifest.permission.READ_EXTERNAL_STORAGE))
|
final boolean requiresManageExternalStoragePermission =
|
||||||
permissionsNeeded.add("Read External Storage");
|
getApplicationInfo().targetSdkVersion > Build.VERSION_CODES.Q
|
||||||
if (!addPermission(permissionsList, Manifest.permission.WRITE_EXTERNAL_STORAGE))
|
&& Build.VERSION.SDK_INT > Build.VERSION_CODES.Q;
|
||||||
permissionsNeeded.add("Write External Storage");
|
|
||||||
|
|
||||||
if (permissionsList.size() > 0)
|
boolean shouldRequestManageExternalStoragePermission = false;
|
||||||
|
|
||||||
|
if (requiresManageExternalStoragePermission) {
|
||||||
|
if (!Environment.isExternalStorageManager()) {
|
||||||
|
shouldRequestManageExternalStoragePermission = true;
|
||||||
|
permissionsNeeded.add("Manage External Storage");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!addPermission(permissionsList, Manifest.permission.READ_EXTERNAL_STORAGE))
|
||||||
|
permissionsNeeded.add("Read External Storage");
|
||||||
|
if (!addPermission(permissionsList, Manifest.permission.WRITE_EXTERNAL_STORAGE))
|
||||||
|
permissionsNeeded.add("Write External Storage");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (permissionsList.size() > 0 || shouldRequestManageExternalStoragePermission)
|
||||||
{
|
{
|
||||||
checkPermissions = true;
|
checkPermissions = true;
|
||||||
|
|
||||||
@ -91,10 +107,26 @@ public final class MainMenuActivity extends PreferenceActivity
|
|||||||
{
|
{
|
||||||
if (which == AlertDialog.BUTTON_POSITIVE)
|
if (which == AlertDialog.BUTTON_POSITIVE)
|
||||||
{
|
{
|
||||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M)
|
if (requiresManageExternalStoragePermission) {
|
||||||
{
|
checkManageExternalStoragePermission = true;
|
||||||
|
|
||||||
|
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
|
||||||
|
intent.setData(Uri.fromParts("package", getPackageName(), null));
|
||||||
|
|
||||||
|
try {
|
||||||
|
startActivity(intent);
|
||||||
|
} catch (ActivityNotFoundException e) {
|
||||||
|
// Redirect to app info page instead, so that the user can manually grant the permission
|
||||||
|
String text = "Navigate to Permissions -> Files and media -> Allow all the time";
|
||||||
|
Toast.makeText(MainMenuActivity.this, text, Toast.LENGTH_LONG).show();
|
||||||
|
|
||||||
|
intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
||||||
|
intent.setData(Uri.fromParts("package", getPackageName(), null));
|
||||||
|
startActivity(intent);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
|
requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
|
||||||
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
|
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
|
||||||
|
|
||||||
Log.i("MainMenuActivity", "User accepted request for external storage permissions.");
|
Log.i("MainMenuActivity", "User accepted request for external storage permissions.");
|
||||||
}
|
}
|
||||||
@ -194,4 +226,13 @@ public final class MainMenuActivity extends PreferenceActivity
|
|||||||
|
|
||||||
checkRuntimePermissions();
|
checkRuntimePermissions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTopResumedActivityChanged(boolean onTop) {
|
||||||
|
if(onTop && checkManageExternalStoragePermission) {
|
||||||
|
checkPermissions = false;
|
||||||
|
checkManageExternalStoragePermission = false;
|
||||||
|
checkRuntimePermissions();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user