Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
Merge pull request #11887 from t895/kotlin-activities
Android: Convert "activities" package to Kotlin
- Loading branch information
Showing
9 changed files
with
1,226 additions
and
1,487 deletions.
There are no files selected for viewing
128 changes: 0 additions & 128 deletions
128
Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/AppLinkActivity.java
This file was deleted.
Oops, something went wrong.
104 changes: 104 additions & 0 deletions
104
Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/AppLinkActivity.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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" | ||
| } | ||
| } |
51 changes: 0 additions & 51 deletions
51
...roid/app/src/main/java/org/dolphinemu/dolphinemu/activities/CustomFilePickerActivity.java
This file was deleted.
Oops, something went wrong.
47 changes: 47 additions & 0 deletions
47
...ndroid/app/src/main/java/org/dolphinemu/dolphinemu/activities/CustomFilePickerActivity.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| // SPDX-License-Identifier: GPL-2.0-or-later | ||
|
|
||
| package org.dolphinemu.dolphinemu.activities | ||
|
|
||
| import android.os.Bundle | ||
| import android.os.Environment | ||
| import com.nononsenseapps.filepicker.AbstractFilePickerFragment | ||
| import com.nononsenseapps.filepicker.FilePickerActivity | ||
| import org.dolphinemu.dolphinemu.fragments.CustomFilePickerFragment | ||
| import java.io.File | ||
|
|
||
| class CustomFilePickerActivity : FilePickerActivity() { | ||
| private var extensions: HashSet<String>? = null | ||
|
|
||
| override fun onCreate(savedInstanceState: Bundle?) { | ||
| super.onCreate(savedInstanceState) | ||
| if (intent != null) { | ||
| extensions = intent.getSerializableExtra(EXTRA_EXTENSIONS) as HashSet<String>? | ||
| } | ||
| } | ||
|
|
||
| override fun getFragment( | ||
| startPath: String?, | ||
| mode: Int, | ||
| allowMultiple: Boolean, | ||
| allowCreateDir: Boolean, | ||
| allowExistingFile: Boolean, | ||
| singleClick: Boolean | ||
| ): AbstractFilePickerFragment<File> { | ||
| val fragment = CustomFilePickerFragment() | ||
| // startPath is allowed to be null. In that case, default folder should be SD-card and not "/" | ||
| fragment.setArgs( | ||
| startPath ?: Environment.getExternalStorageDirectory().path, | ||
| mode, | ||
| allowMultiple, | ||
| allowCreateDir, | ||
| allowExistingFile, | ||
| singleClick | ||
| ) | ||
| fragment.setExtensions(extensions) | ||
| return fragment | ||
| } | ||
|
|
||
| companion object { | ||
| const val EXTRA_EXTENSIONS = "dolphinemu.org.filepicker.extensions" | ||
| } | ||
| } |
Oops, something went wrong.