From 3bea24f9cccaa5e63ba7c4edc4bf48a8ba8a4938 Mon Sep 17 00:00:00 2001 From: OMGeeky Date: Thu, 3 Nov 2022 19:54:26 +0100 Subject: [PATCH] Fixed bug where the Logs folder would get exported instead of the Worldmap folder +cleanup +API level safety markers --- .../activity/LoadSaveActivity.java | 13 ++++- .../rpg/AndorsTrail/util/AndroidStorage.java | 56 +++++++++---------- 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/activity/LoadSaveActivity.java b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/activity/LoadSaveActivity.java index d8f48147a..a8e726270 100644 --- a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/activity/LoadSaveActivity.java +++ b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/activity/LoadSaveActivity.java @@ -306,6 +306,7 @@ public final class LoadSaveActivity extends AndorsTrailBaseActivity implements O //region Imports/Exports + @RequiresApi(api = Build.VERSION_CODES.P) private void exportSaveGames(Intent data) { Uri uri = data.getData(); @@ -342,6 +343,7 @@ public final class LoadSaveActivity extends AndorsTrailBaseActivity implements O } } + @RequiresApi(api = Build.VERSION_CODES.P) private void exportSaveGamesFolderContentToFolder(ContentResolver resolver, DocumentFile target, DocumentFile[] files) { DocumentFile[] sourceFiles = new DocumentFile[files.length]; @@ -351,7 +353,7 @@ public final class LoadSaveActivity extends AndorsTrailBaseActivity implements O DocumentFile file = files[i]; if (file.isFile()) { sourceFiles[i] = file; - } else if (file.isDirectory()) { + } else if (file.isDirectory() && Objects.equals(file.getName(), Constants.FILENAME_WORLDMAP_DIRECTORY)) { worldmapFiles = file.listFiles(); } } @@ -375,7 +377,7 @@ public final class LoadSaveActivity extends AndorsTrailBaseActivity implements O } - @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) + @RequiresApi(api = Build.VERSION_CODES.N) private void importSaveGames(Intent data) { Uri uri = data.getData(); ClipData uris = data.getClipData(); @@ -401,6 +403,7 @@ public final class LoadSaveActivity extends AndorsTrailBaseActivity implements O importSaveGamesFromUris(context, resolver, appSavegameFolder, uriList); } + @RequiresApi(api = Build.VERSION_CODES.N) private void importSaveGamesFromUris(Context context, ContentResolver resolver, DocumentFile appSavegameFolder, List uriList) { int count = uriList.size(); @@ -515,6 +518,7 @@ public final class LoadSaveActivity extends AndorsTrailBaseActivity implements O return targetFile; } + @RequiresApi(api = Build.VERSION_CODES.P) private void importWorldmap(Intent data) { Uri uri = data.getData(); @@ -568,6 +572,7 @@ public final class LoadSaveActivity extends AndorsTrailBaseActivity implements O } + @RequiresApi(api = Build.VERSION_CODES.P) private void showConfirmOverwriteByExportQuestion(ContentResolver resolver, DocumentFile targetFolder, DocumentFile[] files) { final CustomDialog d = CustomDialogFactory.createDialog(this, getString(R.string.loadsave_export_overwrite_confirmation_title), @@ -582,6 +587,7 @@ public final class LoadSaveActivity extends AndorsTrailBaseActivity implements O CustomDialogFactory.show(d); } + @RequiresApi(api = Build.VERSION_CODES.N) private void showConfirmOverwriteByImportQuestion(ContentResolver resolver, DocumentFile appSavegameFolder, List alreadyExistingFiles, @@ -656,6 +662,7 @@ public final class LoadSaveActivity extends AndorsTrailBaseActivity implements O GoToNextConflictOrFinish(resolver, appSavegameFolder, newFiles, dialogs); } + @RequiresApi(api = Build.VERSION_CODES.N) private void GoToNextConflictOrFinish(ContentResolver resolver, DocumentFile appSavegameFolder, List newFiles, ArrayList dialogs) { if(dialogs.stream().count() > 0){ CustomDialog d = dialogs.remove(0); @@ -673,7 +680,7 @@ public final class LoadSaveActivity extends AndorsTrailBaseActivity implements O if (resultCode != Activity.RESULT_OK) return; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { switch (-requestCode) { case SLOT_NUMBER_EXPORT_SAVEGAMES: exportSaveGames(data); diff --git a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/util/AndroidStorage.java b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/util/AndroidStorage.java index 49dabccd0..a64a3d5ad 100644 --- a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/util/AndroidStorage.java +++ b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/util/AndroidStorage.java @@ -229,53 +229,50 @@ public final class AndroidStorage { worker.run(); } + @RequiresApi(api = Build.VERSION_CODES.P) public static void copyDocumentFilesToDirAsync(DocumentFile[] files, Context context, DocumentFile targetDirectory, Consumer callback) { - BackgroundWorker worker = new BackgroundWorker(); + BackgroundWorker worker = new BackgroundWorker<>(); CustomDialogFactory.CustomDialog progressDialog = getLoadingDialog(context); progressDialog.setOnCancelListener(dialog -> worker.cancel()); ContentResolver resolver = context.getContentResolver(); Handler handler = Handler.createAsync(Looper.getMainLooper()); - worker.setTask(new BackgroundWorker.worker() { - @Override - public void doWork(BackgroundWorkerCallback callback) { - try { - callback.onInitialize(); - for (int i = 0; i < files.length; i++) { - if (worker.isCancelled()) { - callback.onFailure(new CancellationException("Cancelled")); - return; - } - DocumentFile file = files[i]; - if(file == null) - continue; - - copyDocumentFileToNewOrExistingFile(file, resolver, targetDirectory); - float progress = i /(float) files.length; - callback.onProgress(progress); - } - callback.onComplete(true); - } catch (NullPointerException e) { + worker.setTask(workerCallback -> { + try { + workerCallback.onInitialize(); + for (int i = 0; i < files.length; i++) { if (worker.isCancelled()) { - callback.onFailure(new CancellationException("Cancelled")); + workerCallback.onFailure(new CancellationException("Cancelled")); return; } - } catch (Exception e) { - callback.onFailure(e); + DocumentFile file = files[i]; + if(file == null) + continue; + + copyDocumentFileToNewOrExistingFile(file, resolver, targetDirectory); + float progress = i /(float) files.length; + workerCallback.onProgress(progress); } + workerCallback.onComplete(true); + } catch (NullPointerException e) { + if (worker.isCancelled()) { + workerCallback.onFailure(new CancellationException("Cancelled")); + } + } catch (Exception e) { + workerCallback.onFailure(e); } }); worker.setCallback(getDefaultBackgroundWorkerCallback(handler, progressDialog, callback)); worker.run(); } - private static BackgroundWorkerCallback getDefaultBackgroundWorkerCallback(Handler handler, + private static BackgroundWorkerCallback getDefaultBackgroundWorkerCallback(Handler handler, CustomDialogFactory.CustomDialog progressDialog, Consumer callback) { - return new BackgroundWorkerCallback() { + return new BackgroundWorkerCallback() { private int progress = -1; @Override public void onInitialize() { @@ -296,6 +293,7 @@ public final class AndroidStorage { }); } + @RequiresApi(api = Build.VERSION_CODES.N) @Override public void onFailure(Exception e) { handler.post(() -> { @@ -304,8 +302,9 @@ public final class AndroidStorage { }); } + @RequiresApi(api = Build.VERSION_CODES.N) @Override - public void onComplete(Object result) { + public void onComplete(Boolean result) { handler.post(() -> { progressDialog.dismiss(); callback.accept(true); @@ -315,14 +314,13 @@ public final class AndroidStorage { } private static CustomDialogFactory.CustomDialog getLoadingDialog(Context context) { - CustomDialogFactory.CustomDialog progressDialog = CustomDialogFactory.createDialog(context, + return CustomDialogFactory.createDialog(context, context.getResources().getString(R.string.dialog_loading_message), context.getResources().getDrawable(R.drawable.loading_anim), null, null, false, false); - return progressDialog; } }