diff --git a/pkg/android/phoenix/AndroidManifest.xml b/pkg/android/phoenix/AndroidManifest.xml index 16c235a30b..dafdc7e2e6 100644 --- a/pkg/android/phoenix/AndroidManifest.xml +++ b/pkg/android/phoenix/AndroidManifest.xml @@ -10,8 +10,6 @@ - - @@ -25,7 +23,6 @@ android:isGame="true" android:banner="@drawable/banner" android:extractNativeLibs="true" - android:requestLegacyExternalStorage="true" tools:ignore="UnusedAttribute"> diff --git a/pkg/android/phoenix/src/com/retroarch/browser/mainmenu/MainMenuActivity.java b/pkg/android/phoenix/src/com/retroarch/browser/mainmenu/MainMenuActivity.java index 7a7117c901..bc555a74f9 100644 --- a/pkg/android/phoenix/src/com/retroarch/browser/mainmenu/MainMenuActivity.java +++ b/pkg/android/phoenix/src/com/retroarch/browser/mainmenu/MainMenuActivity.java @@ -26,92 +26,7 @@ import android.util.Log; */ public final class MainMenuActivity extends PreferenceActivity { - final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124; public static String PACKAGE_NAME; - boolean checkPermissions = false; - - public void showMessageOKCancel(String message, DialogInterface.OnClickListener onClickListener) - { - new AlertDialog.Builder(this).setMessage(message) - .setPositiveButton("OK", onClickListener).setCancelable(false) - .setNegativeButton("Cancel", null).create().show(); - } - - private boolean addPermission(List permissionsList, String permission) - { - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) - { - if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) - { - permissionsList.add(permission); - - // Check for Rationale Option - if (!shouldShowRequestPermissionRationale(permission)) - return false; - } - } - - return true; - } - - public void checkRuntimePermissions() - { - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) - { - // Android 6.0+ needs runtime permission checks - List permissionsNeeded = new ArrayList(); - final List permissionsList = new ArrayList(); - - 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) - { - checkPermissions = true; - - if (permissionsNeeded.size() > 0) - { - // Need Rationale - Log.i("MainMenuActivity", "Need to request external storage permissions."); - - String message = "You need to grant access to " + permissionsNeeded.get(0); - - for (int i = 1; i < permissionsNeeded.size(); i++) - message = message + ", " + permissionsNeeded.get(i); - - showMessageOKCancel(message, - new DialogInterface.OnClickListener() - { - @Override - public void onClick(DialogInterface dialog, int which) - { - if (which == AlertDialog.BUTTON_POSITIVE) - { - requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), - REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); - - Log.i("MainMenuActivity", "User accepted request for external storage permissions."); - } - } - }); - } - else - { - requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), - REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); - - Log.i("MainMenuActivity", "Requested external storage permissions."); - } - } - } - - if (!checkPermissions) - { - finalStartup(); - } - } public void finalStartup() { @@ -132,33 +47,6 @@ public final class MainMenuActivity extends PreferenceActivity finish(); } - @Override - public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) - { - switch (requestCode) - { - case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS: - for (int i = 0; i < permissions.length; i++) - { - if(grantResults[i] == PackageManager.PERMISSION_GRANTED) - { - Log.i("MainMenuActivity", "Permission: " + permissions[i] + " was granted."); - } - else - { - Log.i("MainMenuActivity", "Permission: " + permissions[i] + " was not granted."); - } - } - - break; - default: - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - break; - } - - finalStartup(); - } - public static void startRetroActivity(Intent retro, String contentPath, String corePath, String configFilePath, String imePath, String dataDirPath, String dataSourcePath) { @@ -170,8 +58,8 @@ public final class MainMenuActivity extends PreferenceActivity retro.putExtra("IME", imePath); retro.putExtra("DATADIR", dataDirPath); retro.putExtra("APK", dataSourcePath); - retro.putExtra("SDCARD", Environment.getExternalStorageDirectory().getAbsolutePath()); String external = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data/" + PACKAGE_NAME + "/files"; + retro.putExtra("SDCARD", external); retro.putExtra("EXTERNAL", external); } @@ -187,6 +75,6 @@ public final class MainMenuActivity extends PreferenceActivity UserPreferences.updateConfigFile(this); - checkRuntimePermissions(); + finalStartup(); } } diff --git a/pkg/android/phoenix/src/com/retroarch/browser/provider/RetroDocumentsProvider.java b/pkg/android/phoenix/src/com/retroarch/browser/provider/RetroDocumentsProvider.java index 4d2f927835..52bd33a058 100644 --- a/pkg/android/phoenix/src/com/retroarch/browser/provider/RetroDocumentsProvider.java +++ b/pkg/android/phoenix/src/com/retroarch/browser/provider/RetroDocumentsProvider.java @@ -10,6 +10,7 @@ import android.database.MatrixCursor; import android.graphics.Point; import android.os.Build; import android.os.CancellationSignal; +import android.os.Environment; import android.os.ParcelFileDescriptor; import android.provider.DocumentsContract; import android.provider.DocumentsContract.Document; @@ -69,19 +70,31 @@ public class RetroDocumentsProvider extends DocumentsProvider { @Override public Cursor queryRoots(String[] projection) throws FileNotFoundException { - final File BASE_DIR = new File(getContext().getFilesDir().getParent()); final MatrixCursor result = new MatrixCursor(projection != null ? projection : DEFAULT_ROOT_PROJECTION); @SuppressWarnings("ConstantConditions") final String applicationName = getContext().getString(R.string.app_name); - final MatrixCursor.RowBuilder row = result.newRow(); - row.add(Root.COLUMN_ROOT_ID, getDocIdForFile(BASE_DIR)); - row.add(Root.COLUMN_DOCUMENT_ID, getDocIdForFile(BASE_DIR)); - row.add(Root.COLUMN_SUMMARY, null); - row.add(Root.COLUMN_FLAGS, Root.FLAG_SUPPORTS_CREATE | Root.FLAG_SUPPORTS_SEARCH | Root.FLAG_SUPPORTS_IS_CHILD); - row.add(Root.COLUMN_TITLE, applicationName); - row.add(Root.COLUMN_MIME_TYPES, ALL_MIME_TYPES); - row.add(Root.COLUMN_AVAILABLE_BYTES, BASE_DIR.getFreeSpace()); - row.add(Root.COLUMN_ICON, R.mipmap.ic_launcher); + final File CORE_DIR = new File(getContext().getFilesDir().getParent()); + final MatrixCursor.RowBuilder core = result.newRow(); + core.add(Root.COLUMN_ROOT_ID, getDocIdForFile(CORE_DIR)); + core.add(Root.COLUMN_DOCUMENT_ID, getDocIdForFile(CORE_DIR)); + core.add(Root.COLUMN_SUMMARY, "Core Data"); + core.add(Root.COLUMN_FLAGS, Root.FLAG_SUPPORTS_CREATE | Root.FLAG_SUPPORTS_SEARCH | Root.FLAG_SUPPORTS_IS_CHILD); + core.add(Root.COLUMN_TITLE, applicationName); + core.add(Root.COLUMN_MIME_TYPES, ALL_MIME_TYPES); + core.add(Root.COLUMN_AVAILABLE_BYTES, CORE_DIR.getFreeSpace()); + core.add(Root.COLUMN_ICON, R.mipmap.ic_launcher); + + final File USER_DIR = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data/" + getContext().getPackageName() + "/files/RetroArch"); + final MatrixCursor.RowBuilder user = result.newRow(); + user.add(Root.COLUMN_ROOT_ID, getDocIdForFile(USER_DIR)); + user.add(Root.COLUMN_DOCUMENT_ID, getDocIdForFile(USER_DIR)); + user.add(Root.COLUMN_SUMMARY, "User Data"); + user.add(Root.COLUMN_FLAGS, Root.FLAG_SUPPORTS_CREATE | Root.FLAG_SUPPORTS_SEARCH | Root.FLAG_SUPPORTS_IS_CHILD); + user.add(Root.COLUMN_TITLE, applicationName); + user.add(Root.COLUMN_MIME_TYPES, ALL_MIME_TYPES); + user.add(Root.COLUMN_AVAILABLE_BYTES, USER_DIR.getFreeSpace()); + user.add(Root.COLUMN_ICON, R.mipmap.ic_launcher); + return result; }