summaryrefslogtreecommitdiff
path: root/src/android
diff options
context:
space:
mode:
authorGravatar Charles Lombardo2023-03-11 00:36:03 -0500
committerGravatar bunnei2023-06-03 00:05:40 -0700
commita8994a57d63dadabc7341d68c597c0869e46035b (patch)
tree29802c8a6d93f6dd1fc0bd2fcb2053b555bc49b7 /src/android
parentandroid: Convert ControllerMappingHelper to Kotlin (diff)
downloadyuzu-a8994a57d63dadabc7341d68c597c0869e46035b.tar.gz
yuzu-a8994a57d63dadabc7341d68c597c0869e46035b.tar.xz
yuzu-a8994a57d63dadabc7341d68c597c0869e46035b.zip
android: Convert DirectoryInitialization to Kotlin
Diffstat (limited to 'src/android')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.java72
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt66
2 files changed, 66 insertions, 72 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.java b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.java
deleted file mode 100644
index 6464c2286..000000000
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.java
+++ /dev/null
@@ -1,72 +0,0 @@
1package org.yuzu.yuzu_emu.utils;
2
3import android.content.Context;
4import android.content.Intent;
5import androidx.localbroadcastmanager.content.LocalBroadcastManager;
6
7import org.yuzu.yuzu_emu.NativeLibrary;
8
9import java.io.IOException;
10import java.util.concurrent.atomic.AtomicBoolean;
11
12public final class DirectoryInitialization {
13 public static final String BROADCAST_ACTION = "org.yuzu.yuzu_emu.BROADCAST";
14 public static final String EXTRA_STATE = "directoryState";
15 private static volatile DirectoryInitializationState directoryState = null;
16 private static String userPath;
17 private static AtomicBoolean isDirectoryInitializationRunning = new AtomicBoolean(false);
18
19 public static void start(Context context) {
20 // Can take a few seconds to run, so don't block UI thread.
21 ((Runnable) () -> init(context)).run();
22 }
23
24 private static void init(Context context) {
25 if (!isDirectoryInitializationRunning.compareAndSet(false, true))
26 return;
27
28 if (directoryState != DirectoryInitializationState.YUZU_DIRECTORIES_INITIALIZED) {
29 initializeInternalStorage(context);
30 NativeLibrary.InitializeEmulation();
31 directoryState = DirectoryInitializationState.YUZU_DIRECTORIES_INITIALIZED;
32 }
33
34 isDirectoryInitializationRunning.set(false);
35 sendBroadcastState(directoryState, context);
36 }
37
38 public static boolean areDirectoriesReady() {
39 return directoryState == DirectoryInitializationState.YUZU_DIRECTORIES_INITIALIZED;
40 }
41
42 public static String getUserDirectory() {
43 if (directoryState == null) {
44 throw new IllegalStateException("DirectoryInitialization has to run at least once!");
45 } else if (isDirectoryInitializationRunning.get()) {
46 throw new IllegalStateException(
47 "DirectoryInitialization has to finish running first!");
48 }
49 return userPath;
50 }
51
52 public static void initializeInternalStorage(Context context) {
53 try {
54 userPath = context.getExternalFilesDir(null).getCanonicalPath();
55 NativeLibrary.SetAppDirectory(userPath);
56 } catch(IOException e) {
57 e.printStackTrace();
58 }
59 }
60
61 private static void sendBroadcastState(DirectoryInitializationState state, Context context) {
62 Intent localIntent =
63 new Intent(BROADCAST_ACTION)
64 .putExtra(EXTRA_STATE, state);
65 LocalBroadcastManager.getInstance(context).sendBroadcast(localIntent);
66 }
67
68 public enum DirectoryInitializationState {
69 YUZU_DIRECTORIES_INITIALIZED,
70 CANT_FIND_EXTERNAL_STORAGE
71 }
72}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt
new file mode 100644
index 000000000..5016f7d6e
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt
@@ -0,0 +1,66 @@
1package org.yuzu.yuzu_emu.utils
2
3import android.content.Context
4import android.content.Intent
5import androidx.localbroadcastmanager.content.LocalBroadcastManager
6import org.yuzu.yuzu_emu.NativeLibrary
7import java.io.IOException
8import java.util.concurrent.atomic.AtomicBoolean
9
10object DirectoryInitialization {
11 const val BROADCAST_ACTION = "org.yuzu.yuzu_emu.BROADCAST"
12 const val EXTRA_STATE = "directoryState"
13
14 @Volatile
15 private var directoryState: DirectoryInitializationState? = null
16 private var userPath: String? = null
17 private val isDirectoryInitializationRunning = AtomicBoolean(false)
18
19 @JvmStatic
20 fun start(context: Context) {
21 // Can take a few seconds to run, so don't block UI thread.
22 Runnable { init(context) }.run()
23 }
24
25 private fun init(context: Context) {
26 if (!isDirectoryInitializationRunning.compareAndSet(false, true)) return
27 if (directoryState != DirectoryInitializationState.YUZU_DIRECTORIES_INITIALIZED) {
28 initializeInternalStorage(context)
29 NativeLibrary.InitializeEmulation()
30 directoryState = DirectoryInitializationState.YUZU_DIRECTORIES_INITIALIZED
31 }
32 isDirectoryInitializationRunning.set(false)
33 sendBroadcastState(directoryState, context)
34 }
35
36 fun areDirectoriesReady(): Boolean {
37 return directoryState == DirectoryInitializationState.YUZU_DIRECTORIES_INITIALIZED
38 }
39
40 val userDirectory: String?
41 get() {
42 checkNotNull(directoryState) { "DirectoryInitialization has to run at least once!" }
43 check(!isDirectoryInitializationRunning.get()) { "DirectoryInitialization has to finish running first!" }
44 return userPath
45 }
46
47 private fun initializeInternalStorage(context: Context) {
48 try {
49 userPath = context.getExternalFilesDir(null)!!.canonicalPath
50 NativeLibrary.SetAppDirectory(userPath)
51 } catch (e: IOException) {
52 e.printStackTrace()
53 }
54 }
55
56 private fun sendBroadcastState(state: DirectoryInitializationState?, context: Context) {
57 val localIntent = Intent(BROADCAST_ACTION)
58 .putExtra(EXTRA_STATE, state)
59 LocalBroadcastManager.getInstance(context).sendBroadcast(localIntent)
60 }
61
62 enum class DirectoryInitializationState {
63 YUZU_DIRECTORIES_INITIALIZED,
64 CANT_FIND_EXTERNAL_STORAGE
65 }
66}