summaryrefslogtreecommitdiff
path: root/Source/Android
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Android')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.kt19
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/CompletableFuture.java97
2 files changed, 10 insertions, 106 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.kt
index cea17578d4..77a7dcaa8a 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.kt
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.kt
@@ -26,7 +26,6 @@ import org.dolphinemu.dolphinemu.model.GameFileCache
import org.dolphinemu.dolphinemu.services.GameFileCacheManager
import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner
import org.dolphinemu.dolphinemu.utils.BooleanSupplier
-import org.dolphinemu.dolphinemu.utils.CompletableFuture
import org.dolphinemu.dolphinemu.utils.ContentHandler
import org.dolphinemu.dolphinemu.utils.DirectoryInitialization
import org.dolphinemu.dolphinemu.utils.FileBrowserHelper
@@ -34,7 +33,8 @@ import org.dolphinemu.dolphinemu.utils.PermissionsHandler
import org.dolphinemu.dolphinemu.utils.ThreadUtil
import org.dolphinemu.dolphinemu.utils.WiiUtils
import java.util.Arrays
-import java.util.concurrent.ExecutionException
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.atomic.AtomicReference
class MainPresenter(private val mainView: MainView, private val activity: FragmentActivity) {
private var dirToAdd: String? = null
@@ -265,33 +265,34 @@ class MainPresenter(private val mainView: MainView, private val activity: Fragme
}
fun importWiiSave(path: String?) {
- val canOverwriteFuture = CompletableFuture<Boolean>()
ThreadUtil.runOnThreadAndShowResult(
activity,
R.string.import_in_progress,
0,
{
val canOverwrite = BooleanSupplier {
+ val latch = CountDownLatch(1)
+ val decision = AtomicReference<Boolean>()
activity.runOnUiThread {
MaterialAlertDialogBuilder(activity)
.setMessage(R.string.wii_save_exists)
.setCancelable(false)
.setPositiveButton(R.string.yes) { _: DialogInterface?, _: Int ->
- canOverwriteFuture.complete(true)
+ decision.set(true)
+ latch.countDown()
}
.setNegativeButton(R.string.no) { _: DialogInterface?, _: Int ->
- canOverwriteFuture.complete(false)
+ decision.set(false)
+ latch.countDown()
}
.show()
}
try {
- return@BooleanSupplier canOverwriteFuture.get()
- } catch (e: ExecutionException) {
- // Shouldn't happen
- throw RuntimeException(e)
+ latch.await()
} catch (e: InterruptedException) {
throw RuntimeException(e)
}
+ decision.get() ?: false
}
val message: Int = when (WiiUtils.importWiiSave(path!!, canOverwrite)) {
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/CompletableFuture.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/CompletableFuture.java
deleted file mode 100644
index 1b3c450534..0000000000
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/CompletableFuture.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-package org.dolphinemu.dolphinemu.utils;
-
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-/**
- * Simplified re-implementation of a subset of {@link java.util.concurrent.CompletableFuture}.
- * Replace this class with that class once we have full Java 8 support (once we require API 24).
- */
-public class CompletableFuture<T> implements Future<T>
-{
- private final Lock lock = new ReentrantLock();
- private final Condition done = lock.newCondition();
-
- private boolean isDone = false;
- private T result = null;
-
- @Override
- public boolean cancel(boolean mayInterruptIfRunning)
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean isCancelled()
- {
- return false;
- }
-
- @Override
- public boolean isDone()
- {
- return isDone;
- }
-
- @Override
- public T get() throws ExecutionException, InterruptedException
- {
- lock.lock();
- try
- {
- while (!isDone)
- done.await();
-
- return result;
- }
- finally
- {
- lock.unlock();
- }
- }
-
- @Override
- public T get(long timeout, TimeUnit unit)
- throws ExecutionException, InterruptedException, TimeoutException
- {
- lock.lock();
- try
- {
- while (!isDone)
- {
- if (!done.await(timeout, unit))
- throw new TimeoutException();
- }
-
- return result;
- }
- finally
- {
- lock.unlock();
- }
- }
-
- public boolean complete(T value)
- {
- lock.lock();
- try
- {
- boolean wasDone = isDone;
- result = value;
- isDone = true;
- done.signalAll();
- return !wasDone;
- }
- finally
- {
- lock.unlock();
- }
- }
-}