diff options
| author | 2023-03-11 00:36:03 -0500 | |
|---|---|---|
| committer | 2023-06-03 00:05:40 -0700 | |
| commit | a8994a57d63dadabc7341d68c597c0869e46035b (patch) | |
| tree | 29802c8a6d93f6dd1fc0bd2fcb2053b555bc49b7 /src/android | |
| parent | android: Convert ControllerMappingHelper to Kotlin (diff) | |
| download | yuzu-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.java | 72 | ||||
| -rw-r--r-- | src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/DirectoryInitialization.kt | 66 |
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 @@ | |||
| 1 | package org.yuzu.yuzu_emu.utils; | ||
| 2 | |||
| 3 | import android.content.Context; | ||
| 4 | import android.content.Intent; | ||
| 5 | import androidx.localbroadcastmanager.content.LocalBroadcastManager; | ||
| 6 | |||
| 7 | import org.yuzu.yuzu_emu.NativeLibrary; | ||
| 8 | |||
| 9 | import java.io.IOException; | ||
| 10 | import java.util.concurrent.atomic.AtomicBoolean; | ||
| 11 | |||
| 12 | public 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 @@ | |||
| 1 | package org.yuzu.yuzu_emu.utils | ||
| 2 | |||
| 3 | import android.content.Context | ||
| 4 | import android.content.Intent | ||
| 5 | import androidx.localbroadcastmanager.content.LocalBroadcastManager | ||
| 6 | import org.yuzu.yuzu_emu.NativeLibrary | ||
| 7 | import java.io.IOException | ||
| 8 | import java.util.concurrent.atomic.AtomicBoolean | ||
| 9 | |||
| 10 | object 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 | } | ||