From c08e0e6db39e36da8087c3ef36af05eeefc4661b Mon Sep 17 00:00:00 2001 From: Sergii Pylypenko Date: Wed, 19 May 2021 00:06:09 +0300 Subject: [PATCH] SDL: do not delete .obb file, do not request storage write permission to read .obb file --- project/java/DataDownloader.java | 38 ++++++++++++++++++-------------- project/java/MainActivity.java | 6 +++++ 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/project/java/DataDownloader.java b/project/java/DataDownloader.java index 98fd3a6a2..6c1f02128 100644 --- a/project/java/DataDownloader.java +++ b/project/java/DataDownloader.java @@ -319,21 +319,33 @@ class DataDownloader extends Thread Status.setText( downloadCount + "/" + downloadTotal + ": " + res.getString(R.string.connecting_to, url) ); if( url.indexOf("obb:") == 0 ) // APK expansion file provided by Google Play { - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) - { - int permissionCheck = Parent.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); - if (permissionCheck != PackageManager.PERMISSION_GRANTED && !Parent.writeExternalStoragePermissionDialogAnswered) + url = getObbFilePath(url); + InputStream stream1 = null; + + try { + stream1 = new FileInputStream(url); + stream1.read(); + stream1.close(); + Log.i("SDL", "Fetching file from expansion: " + url); + FileInExpansion = true; + break; + } catch( Exception ee ) { + Log.i("SDL", "Failed to open file, requesting storage read permission: " + url); + + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { - Parent.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0); - while( !Parent.writeExternalStoragePermissionDialogAnswered ) + int permissionCheck = Parent.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE); + if (permissionCheck != PackageManager.PERMISSION_GRANTED && !Parent.readExternalStoragePermissionDialogAnswered) { - try{ Thread.sleep(300); } catch (InterruptedException e) {} + Parent.requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0); + while( !Parent.readExternalStoragePermissionDialogAnswered ) + { + try{ Thread.sleep(300); } catch (InterruptedException e) {} + } } } } - url = getObbFilePath(url); - InputStream stream1 = null; try { stream1 = new FileInputStream(url); stream1.read(); @@ -501,15 +513,7 @@ class DataDownloader extends Thread try { stream.close(); - if( FileInExpansion ) - { - Writer writer = new OutputStreamWriter(new FileOutputStream(url), "UTF-8"); - writer.write("Extracted and truncated\n"); - writer.close(); - Log.i("SDL", "Truncated file from expansion: " + url); - } } catch( java.io.IOException e ) { - Log.i("SDL", "Error truncating file from expansion: " + url); }; return true; diff --git a/project/java/MainActivity.java b/project/java/MainActivity.java index 88dc639b4..e2b33b798 100644 --- a/project/java/MainActivity.java +++ b/project/java/MainActivity.java @@ -1420,6 +1420,11 @@ public class MainActivity extends Activity { Log.i("SDL", "libSDL: Record audio permission: " + (grantResults[0] == PackageManager.PERMISSION_GRANTED ? "GRANTED" : "DENIED")); } + if (Manifest.permission.READ_EXTERNAL_STORAGE.equals(permissions[0])) + { + Log.i("SDL", "libSDL: Read external storage permission: " + (grantResults[0] == PackageManager.PERMISSION_GRANTED ? "GRANTED" : "DENIED")); + readExternalStoragePermissionDialogAnswered = true; + } if (Manifest.permission.WRITE_EXTERNAL_STORAGE.equals(permissions[0])) { Log.i("SDL", "libSDL: Write external storage permission: " + (grantResults[0] == PackageManager.PERMISSION_GRANTED ? "GRANTED" : "DENIED")); @@ -1461,6 +1466,7 @@ public class MainActivity extends Activity public LinkedList textInput = new LinkedList (); public static MainActivity instance = null; + public boolean readExternalStoragePermissionDialogAnswered = false; public boolean writeExternalStoragePermissionDialogAnswered = false; }