From 347551a01da643980fabfd3579ec34bb6cbb5419 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Mon, 18 Jan 2021 12:22:26 +0100 Subject: Android: Implement save overwrite confirmation --- .../dolphinemu/ui/main/MainPresenter.java | 37 +++++++++++++++++++++- .../dolphinemu/utils/BooleanSupplier.java | 6 ++++ .../org/dolphinemu/dolphinemu/utils/WiiUtils.java | 2 +- 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/BooleanSupplier.java (limited to 'Source/Android/app/src/main/java/org') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java index c07fe5b388..1534b0c654 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java @@ -18,11 +18,14 @@ import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; import org.dolphinemu.dolphinemu.model.GameFileCache; import org.dolphinemu.dolphinemu.services.GameFileCacheService; import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner; +import org.dolphinemu.dolphinemu.utils.BooleanSupplier; import org.dolphinemu.dolphinemu.utils.ContentHandler; import org.dolphinemu.dolphinemu.utils.FileBrowserHelper; import org.dolphinemu.dolphinemu.utils.WiiUtils; import java.util.Arrays; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import java.util.function.Supplier; public final class MainPresenter @@ -168,9 +171,41 @@ public final class MainPresenter public void importWiiSave(String path) { + if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N) + return; // TODO + + final Activity mainPresenterActivity = (Activity) mContext; + + CompletableFuture canOverwriteFuture = new CompletableFuture<>(); + runOnThreadAndShowResult(R.string.import_in_progress, () -> { - int result = WiiUtils.importWiiSave(path); + BooleanSupplier canOverwrite = () -> + { + mainPresenterActivity.runOnUiThread(() -> + { + AlertDialog.Builder builder = + new AlertDialog.Builder(mContext, R.style.DolphinDialogBase); + builder.setMessage(R.string.wii_save_exists); + builder.setCancelable(false); + builder.setPositiveButton(R.string.yes, (dialog, i) -> canOverwriteFuture.complete(true)); + builder.setNegativeButton(R.string.no, (dialog, i) -> canOverwriteFuture.complete(false)); + builder.show(); + }); + + try + { + return canOverwriteFuture.get(); + } + catch (ExecutionException | InterruptedException e) + { + // Shouldn't happen + throw new RuntimeException(e); + } + }; + + int result = WiiUtils.importWiiSave(path, canOverwrite); + int message; switch (result) { diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/BooleanSupplier.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/BooleanSupplier.java new file mode 100644 index 0000000000..d1c490fe2a --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/BooleanSupplier.java @@ -0,0 +1,6 @@ +package org.dolphinemu.dolphinemu.utils; + +public interface BooleanSupplier +{ + boolean get(); +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/WiiUtils.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/WiiUtils.java index 404d7e9909..9a6440c9e5 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/WiiUtils.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/WiiUtils.java @@ -10,5 +10,5 @@ public final class WiiUtils public static native boolean installWAD(String file); - public static native int importWiiSave(String file); + public static native int importWiiSave(String file, BooleanSupplier canOverwrite); } -- cgit v1.2.3