summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorCharles Lombardo <clombardo169@gmail.com>2023-06-03 22:24:02 -0400
committerCharles Lombardo <clombardo169@gmail.com>2023-06-05 14:10:06 -0400
commite6d8694cbecec742fab5bdabf0fad9a37a4629e7 (patch)
tree10b61e7ac072ce39311b2c0a2891859d4a20fa44 /Source/Android/app/src/main/java
parentcbca383bd2f91239a37691b61db0e66f391263ad (diff)
Android: Convert AppLinkActivity to Kotlin
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/AppLinkActivity.java128
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/AppLinkActivity.kt104
2 files changed, 104 insertions, 128 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/AppLinkActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/AppLinkActivity.java
deleted file mode 100644
index 924b5911c0..0000000000
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/AppLinkActivity.java
+++ /dev/null
@@ -1,128 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-package org.dolphinemu.dolphinemu.activities;
-
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.util.Log;
-
-import androidx.fragment.app.FragmentActivity;
-
-import org.dolphinemu.dolphinemu.model.GameFile;
-import org.dolphinemu.dolphinemu.services.GameFileCacheManager;
-import org.dolphinemu.dolphinemu.ui.main.TvMainActivity;
-import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner;
-import org.dolphinemu.dolphinemu.utils.AppLinkHelper;
-import org.dolphinemu.dolphinemu.utils.DirectoryInitialization;
-
-/**
- * Linker between leanback homescreen and app
- */
-public class AppLinkActivity extends FragmentActivity
-{
- private static final String TAG = "AppLinkActivity";
-
- private AppLinkHelper.PlayAction playAction;
- private AfterDirectoryInitializationRunner mAfterDirectoryInitializationRunner;
-
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- Intent intent = getIntent();
- Uri uri = intent.getData();
-
- Log.v(TAG, uri.toString());
-
- if (uri.getPathSegments().isEmpty())
- {
- Log.e(TAG, "Invalid uri " + uri);
- finish();
- return;
- }
-
- AppLinkHelper.AppLinkAction action = AppLinkHelper.extractAction(uri);
- switch (action.getAction())
- {
- case AppLinkHelper.PLAY:
- playAction = (AppLinkHelper.PlayAction) action;
- initResources();
- break;
- case AppLinkHelper.BROWSE:
- browse();
- break;
- default:
- throw new IllegalArgumentException("Invalid Action " + action);
- }
- }
-
- /**
- * Need to init these since they usually occur in the main activity.
- */
- private void initResources()
- {
- mAfterDirectoryInitializationRunner = new AfterDirectoryInitializationRunner();
- mAfterDirectoryInitializationRunner.runWithLifecycle(this, () -> tryPlay(playAction));
-
- GameFileCacheManager.isLoading().observe(this, (isLoading) ->
- {
- if (!isLoading && DirectoryInitialization.areDolphinDirectoriesReady())
- {
- tryPlay(playAction);
- }
- });
-
- DirectoryInitialization.start(this);
- GameFileCacheManager.startLoad();
- }
-
- /**
- * Action if channel icon is selected
- */
- private void browse()
- {
- Intent openApp = new Intent(this, TvMainActivity.class);
- startActivity(openApp);
-
- finish();
- }
-
- private void tryPlay(AppLinkHelper.PlayAction action)
- {
- // TODO: This approach of getting the game from the game file cache without rescanning the
- // library means that we can fail to launch games if the cache file has been deleted.
-
- GameFile game = GameFileCacheManager.getGameFileByGameId(action.getGameId());
-
- // If game == null and the load isn't done, wait for the next GameFileCacheService broadcast.
- // If game == null and the load is done, call play with a null game, making us exit in failure.
- if (game != null || !GameFileCacheManager.isLoading().getValue())
- {
- play(action, game);
- }
- }
-
- /**
- * Action if program(game) is selected
- */
- private void play(AppLinkHelper.PlayAction action, GameFile game)
- {
- Log.d(TAG, "Playing game "
- + action.getGameId()
- + " from channel "
- + action.getChannelId());
-
- if (game == null)
- Log.e(TAG, "Invalid Game: " + action.getGameId());
- else
- startGame(game);
- finish();
- }
-
- private void startGame(GameFile game)
- {
- mAfterDirectoryInitializationRunner.cancel();
- EmulationActivity.launch(this, GameFileCacheManager.findSecondDiscAndGetPaths(game), false);
- }
-}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/AppLinkActivity.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/AppLinkActivity.kt
new file mode 100644
index 0000000000..f3f318202e
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/AppLinkActivity.kt
@@ -0,0 +1,104 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package org.dolphinemu.dolphinemu.activities
+
+import android.content.Intent
+import android.os.Bundle
+import android.util.Log
+import androidx.fragment.app.FragmentActivity
+import org.dolphinemu.dolphinemu.model.GameFile
+import org.dolphinemu.dolphinemu.services.GameFileCacheManager
+import org.dolphinemu.dolphinemu.ui.main.TvMainActivity
+import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner
+import org.dolphinemu.dolphinemu.utils.AppLinkHelper
+import org.dolphinemu.dolphinemu.utils.AppLinkHelper.PlayAction
+import org.dolphinemu.dolphinemu.utils.DirectoryInitialization
+
+/**
+ * Linker between leanback homescreen and app
+ */
+class AppLinkActivity : FragmentActivity() {
+ private lateinit var playAction: PlayAction
+ private lateinit var afterDirectoryInitializationRunner: AfterDirectoryInitializationRunner
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val uri = intent.data!!
+
+ Log.v(TAG, uri.toString())
+
+ if (uri.pathSegments.isEmpty()) {
+ Log.e(TAG, "Invalid uri $uri")
+ finish()
+ return
+ }
+
+ val action = AppLinkHelper.extractAction(uri)
+ when (action.action) {
+ AppLinkHelper.PLAY -> {
+ playAction = action as PlayAction
+ initResources()
+ }
+
+ AppLinkHelper.BROWSE -> browse()
+ else -> throw IllegalArgumentException("Invalid Action $action")
+ }
+ }
+
+ /**
+ * Need to init these since they usually occur in the main activity.
+ */
+ private fun initResources() {
+ afterDirectoryInitializationRunner = AfterDirectoryInitializationRunner()
+ afterDirectoryInitializationRunner.runWithLifecycle(this) { tryPlay(playAction) }
+
+ GameFileCacheManager.isLoading().observe(this) { isLoading: Boolean? ->
+ if (!isLoading!! && DirectoryInitialization.areDolphinDirectoriesReady()) {
+ tryPlay(playAction)
+ }
+ }
+
+ DirectoryInitialization.start(this)
+ GameFileCacheManager.startLoad()
+ }
+
+ /**
+ * Action if channel icon is selected
+ */
+ private fun browse() {
+ val openApp = Intent(this, TvMainActivity::class.java)
+ startActivity(openApp)
+
+ finish()
+ }
+
+ private fun tryPlay(action: PlayAction) {
+ // TODO: This approach of getting the game from the game file cache without rescanning the
+ // library means that we can fail to launch games if the cache file has been deleted.
+ val game = GameFileCacheManager.getGameFileByGameId(action.gameId)
+
+ // If game == null and the load isn't done, wait for the next GameFileCacheService broadcast.
+ // If game == null and the load is done, call play with a null game, making us exit in failure.
+ if (game != null || !GameFileCacheManager.isLoading().value!!) {
+ play(action, game)
+ }
+ }
+
+ /**
+ * Action if program(game) is selected
+ */
+ private fun play(action: PlayAction, game: GameFile?) {
+ Log.d(TAG, "Playing game ${action.gameId} from channel ${action.channelId}")
+ game?.let { startGame(it) } ?: Log.e(TAG, "Invalid Game: " + action.gameId)
+ finish()
+ }
+
+ private fun startGame(game: GameFile) {
+ afterDirectoryInitializationRunner.cancel()
+ EmulationActivity.launch(this, GameFileCacheManager.findSecondDiscAndGetPaths(game), false)
+ }
+
+ companion object {
+ private const val TAG = "AppLinkActivity"
+ }
+}