Skip to content

Commit

Permalink
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
JosJuice committed Jun 5, 2023
2 parents e3aaf23 + e6d8694 commit ce2b63d
Show file tree
Hide file tree
Showing 9 changed files with 1,226 additions and 1,487 deletions.

This file was deleted.

@@ -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"
}
}

This file was deleted.

@@ -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"
}
}

0 comments on commit ce2b63d

Please sign in to comment.