From b7bbbaee618bd621f269f7aba3dcc46b97f545e4 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sat, 1 Feb 2020 11:06:02 +0900 Subject: [PATCH] Android: Update game list on setTitle() This fixes a bug where newly installed game does not appear in the game list after quitting the first game run. --- .../kichikuou/xsystem35/GameActivity.kt | 1 + .../io/github/kichikuou/xsystem35/Launcher.kt | 48 +++++++++++-------- .../kichikuou/xsystem35/LauncherActivity.kt | 13 ++--- 3 files changed, 37 insertions(+), 25 deletions(-) diff --git a/android/app/src/main/java/io/github/kichikuou/xsystem35/GameActivity.kt b/android/app/src/main/java/io/github/kichikuou/xsystem35/GameActivity.kt index 61f4272..7e9f74c 100644 --- a/android/app/src/main/java/io/github/kichikuou/xsystem35/GameActivity.kt +++ b/android/app/src/main/java/io/github/kichikuou/xsystem35/GameActivity.kt @@ -68,6 +68,7 @@ class GameActivity : SDLActivity() { if (str.isNullOrEmpty()) return File(gameRoot, Launcher.TITLE_FILE).writeText(str) + Launcher.updateGameList() } // These functions are called in the SDL thread by JNI. diff --git a/android/app/src/main/java/io/github/kichikuou/xsystem35/Launcher.kt b/android/app/src/main/java/io/github/kichikuou/xsystem35/Launcher.kt index 5a40245..fe18af2 100644 --- a/android/app/src/main/java/io/github/kichikuou/xsystem35/Launcher.kt +++ b/android/app/src/main/java/io/github/kichikuou/xsystem35/Launcher.kt @@ -30,6 +30,7 @@ import java.util.zip.ZipInputStream private var gLauncher: Launcher? = null interface LauncherObserver { + fun onGameListChange() fun onInstallProgress(path: String) fun onInstallSuccess(path: File) fun onInstallFailure(msgId: Int) @@ -50,6 +51,10 @@ class Launcher private constructor(private val rootDir: File) { } return gLauncher!! } + + fun updateGameList() { + gLauncher?.updateGameList() + } } data class Entry(val path: File, val title: String) @@ -61,25 +66,7 @@ class Launcher private constructor(private val rootDir: File) { private set init { - var saveDirFound = false - for (path in rootDir.listFiles()) { - if (!path.isDirectory) - continue - if (path.name == "save") { - saveDirFound = true - continue - } - try { - val title = File(path, TITLE_FILE).readText() - games.add(Entry(path, title)) - } catch (e: IOException) { - // Incomplete game installation. Delete it. - path.deleteRecursively() - } - } - if (!saveDirFound) { - File(rootDir, "save").mkdir() - } + updateGameList() } fun install(input: InputStream) { @@ -112,6 +99,29 @@ class Launcher private constructor(private val rootDir: File) { fun uninstall(id: Int) { games[id].path.deleteRecursively() games.removeAt(id) + observer?.onGameListChange() + } + + private fun updateGameList() { + var saveDirFound = false + for (path in rootDir.listFiles()) { + if (!path.isDirectory) + continue + if (path.name == "save") { + saveDirFound = true + continue + } + try { + val title = File(path, TITLE_FILE).readText() + games.add(Entry(path, title)) + } catch (e: IOException) { + // Incomplete game installation. Delete it. + path.deleteRecursively() + } + } + if (!saveDirFound) { + File(rootDir, "save").mkdir() + } } private fun createDirForGame(): File { diff --git a/android/app/src/main/java/io/github/kichikuou/xsystem35/LauncherActivity.kt b/android/app/src/main/java/io/github/kichikuou/xsystem35/LauncherActivity.kt index 75ee4f3..ffc59ea 100644 --- a/android/app/src/main/java/io/github/kichikuou/xsystem35/LauncherActivity.kt +++ b/android/app/src/main/java/io/github/kichikuou/xsystem35/LauncherActivity.kt @@ -28,7 +28,6 @@ import java.io.* class LauncherActivity : ListActivity(), AdapterView.OnItemLongClickListener, LauncherObserver { private lateinit var launcher: Launcher - private lateinit var adapter: ArrayAdapter private var progressDialog: ProgressDialogFragment? = null override fun onCreate(savedInstanceState: Bundle?) { @@ -40,10 +39,7 @@ class LauncherActivity : ListActivity(), AdapterView.OnItemLongClickListener, La showProgressDialog() } - val items = launcher.titles.toMutableList() - items.add(getString(R.string.install_from_zip)) - adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items) - listAdapter = adapter + onGameListChange() listView.onItemLongClickListener = this } @@ -83,6 +79,12 @@ class LauncherActivity : ListActivity(), AdapterView.OnItemLongClickListener, La launcher.install(input) } + override fun onGameListChange() { + val items = launcher.titles.toMutableList() + items.add(getString(R.string.install_from_zip)) + listAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items) + } + override fun onInstallProgress(path: String) { progressDialog?.setProgress(getString(R.string.install_progress, path)) } @@ -106,7 +108,6 @@ class LauncherActivity : ListActivity(), AdapterView.OnItemLongClickListener, La private fun uninstall(id: Int) { launcher.uninstall(id) - adapter.remove(adapter.getItem(id)) } private fun showProgressDialog() {