summaryrefslogtreecommitdiff
path: root/Source/Android
diff options
context:
space:
mode:
authorSimonx22 <simon@oatmealdome.me>2025-11-21 21:47:09 -0500
committerSimonx22 <simon@oatmealdome.me>2025-11-21 21:47:09 -0500
commitdd5f8312627a5bf4b5a0f311437baa681ecdfbbd (patch)
treecfc0c8245b0cfb3eacdb13190454b12d1f2304db /Source/Android
parent4f30aaf1ca1ba410904422e55e2a14012ce8163e (diff)
Android: Remove CompletableFuture
We only use this class in one in one single function since its introduction with 12aa1071cbb30269cd6526cfbbcd3c4143d584ac in 2021. If we do need it elsewhere we can always bring it back.
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();
- }
- }
-}