From df21663d4c8fa169327528cc1ec9796c2e5873fb Mon Sep 17 00:00:00 2001
From: Charles Lombardo <clombardo169@gmail.com>
Date: Wed, 1 Mar 2023 14:38:59 -0500
Subject: [PATCH] Android: Convert RiivolutionBootActivity to Kotlin

---
 .../ui/RiivolutionBootActivity.java           | 138 ------------------
 .../riivolution/ui/RiivolutionBootActivity.kt | 130 +++++++++++++++++
 2 files changed, 130 insertions(+), 138 deletions(-)
 delete mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/riivolution/ui/RiivolutionBootActivity.java
 create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/riivolution/ui/RiivolutionBootActivity.kt

diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/riivolution/ui/RiivolutionBootActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/riivolution/ui/RiivolutionBootActivity.java
deleted file mode 100644
index ffcfa8e2f1..0000000000
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/riivolution/ui/RiivolutionBootActivity.java
+++ /dev/null
@@ -1,138 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-package org.dolphinemu.dolphinemu.features.riivolution.ui;
-
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.core.graphics.Insets;
-import androidx.core.view.ViewCompat;
-import androidx.core.view.WindowCompat;
-import androidx.core.view.WindowInsetsCompat;
-import androidx.recyclerview.widget.LinearLayoutManager;
-
-import com.google.android.material.color.MaterialColors;
-
-import org.dolphinemu.dolphinemu.R;
-import org.dolphinemu.dolphinemu.activities.EmulationActivity;
-import org.dolphinemu.dolphinemu.databinding.ActivityRiivolutionBootBinding;
-import org.dolphinemu.dolphinemu.features.riivolution.model.RiivolutionPatches;
-import org.dolphinemu.dolphinemu.features.settings.model.StringSetting;
-import org.dolphinemu.dolphinemu.utils.DirectoryInitialization;
-import org.dolphinemu.dolphinemu.utils.InsetsHelper;
-import org.dolphinemu.dolphinemu.utils.ThemeHelper;
-
-public class RiivolutionBootActivity extends AppCompatActivity
-{
-  private static final String ARG_GAME_PATH = "game_path";
-  private static final String ARG_GAME_ID = "game_id";
-  private static final String ARG_REVISION = "revision";
-  private static final String ARG_DISC_NUMBER = "disc_number";
-
-  private RiivolutionPatches mPatches;
-
-  private ActivityRiivolutionBootBinding mBinding;
-
-  public static void launch(Context context, String gamePath, String gameId, int revision,
-          int discNumber)
-  {
-    Intent launcher = new Intent(context, RiivolutionBootActivity.class);
-    launcher.putExtra(ARG_GAME_PATH, gamePath);
-    launcher.putExtra(ARG_GAME_ID, gameId);
-    launcher.putExtra(ARG_REVISION, revision);
-    launcher.putExtra(ARG_DISC_NUMBER, discNumber);
-    context.startActivity(launcher);
-  }
-
-  @Override
-  protected void onCreate(Bundle savedInstanceState)
-  {
-    ThemeHelper.setTheme(this);
-
-    super.onCreate(savedInstanceState);
-
-    mBinding = ActivityRiivolutionBootBinding.inflate(getLayoutInflater());
-    setContentView(mBinding.getRoot());
-
-    WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
-
-    Intent intent = getIntent();
-
-    String path = getIntent().getStringExtra(ARG_GAME_PATH);
-    String gameId = intent.getStringExtra(ARG_GAME_ID);
-    int revision = intent.getIntExtra(ARG_REVISION, -1);
-    int discNumber = intent.getIntExtra(ARG_DISC_NUMBER, -1);
-
-    String loadPath = StringSetting.MAIN_LOAD_PATH.getStringGlobal();
-    if (loadPath.isEmpty())
-      loadPath = DirectoryInitialization.getUserDirectory() + "/Load";
-
-    mBinding.textSdRoot.setText(getString(R.string.riivolution_sd_root, loadPath + "/Riivolution"));
-
-    mBinding.buttonStart.setOnClickListener((v) ->
-    {
-      if (mPatches != null)
-        mPatches.saveConfig();
-
-      EmulationActivity.launch(this, path, true);
-    });
-
-    new Thread(() ->
-    {
-      RiivolutionPatches patches = new RiivolutionPatches(gameId, revision, discNumber);
-      patches.loadConfig();
-      runOnUiThread(() -> populateList(patches));
-    }).start();
-
-    mBinding.toolbarRiivolution.setTitle(getString(R.string.riivolution_riivolution));
-    setSupportActionBar(mBinding.toolbarRiivolution);
-    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-
-    setInsets();
-    ThemeHelper.enableScrollTint(this, mBinding.toolbarRiivolution, mBinding.appbarRiivolution);
-  }
-
-  @Override
-  protected void onStop()
-  {
-    super.onStop();
-
-    if (mPatches != null)
-      mPatches.saveConfig();
-  }
-
-  @Override
-  public boolean onSupportNavigateUp()
-  {
-    onBackPressed();
-    return true;
-  }
-
-  private void populateList(RiivolutionPatches patches)
-  {
-    mPatches = patches;
-
-    mBinding.recyclerView.setAdapter(new RiivolutionAdapter(this, patches));
-    mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(this));
-  }
-
-  private void setInsets()
-  {
-    ViewCompat.setOnApplyWindowInsetsListener(mBinding.appbarRiivolution, (v, windowInsets) ->
-    {
-      Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
-
-      InsetsHelper.insetAppBar(insets, mBinding.appbarRiivolution);
-
-      mBinding.scrollViewRiivolution.setPadding(insets.left, 0, insets.right, insets.bottom);
-
-      InsetsHelper.applyNavbarWorkaround(insets.bottom, mBinding.workaroundView);
-      ThemeHelper.setNavigationBarColor(this,
-              MaterialColors.getColor(mBinding.appbarRiivolution, R.attr.colorSurface));
-
-      return windowInsets;
-    });
-  }
-}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/riivolution/ui/RiivolutionBootActivity.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/riivolution/ui/RiivolutionBootActivity.kt
new file mode 100644
index 0000000000..a4d33badab
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/riivolution/ui/RiivolutionBootActivity.kt
@@ -0,0 +1,130 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package org.dolphinemu.dolphinemu.features.riivolution.ui
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowCompat
+import androidx.core.view.WindowInsetsCompat
+import androidx.lifecycle.lifecycleScope
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.google.android.material.color.MaterialColors
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+import org.dolphinemu.dolphinemu.R
+import org.dolphinemu.dolphinemu.activities.EmulationActivity
+import org.dolphinemu.dolphinemu.databinding.ActivityRiivolutionBootBinding
+import org.dolphinemu.dolphinemu.features.riivolution.model.RiivolutionPatches
+import org.dolphinemu.dolphinemu.features.settings.model.StringSetting
+import org.dolphinemu.dolphinemu.utils.DirectoryInitialization
+import org.dolphinemu.dolphinemu.utils.InsetsHelper
+import org.dolphinemu.dolphinemu.utils.ThemeHelper
+
+class RiivolutionBootActivity : AppCompatActivity() {
+    private var patches: RiivolutionPatches? = null
+    private lateinit var binding: ActivityRiivolutionBootBinding
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        ThemeHelper.setTheme(this)
+
+        super.onCreate(savedInstanceState)
+
+        binding = ActivityRiivolutionBootBinding.inflate(layoutInflater)
+        setContentView(binding.root)
+
+        WindowCompat.setDecorFitsSystemWindows(window, false)
+
+        val path = intent.getStringExtra(ARG_GAME_PATH)
+        val gameId = intent.getStringExtra(ARG_GAME_ID)
+        val revision = intent.getIntExtra(ARG_REVISION, -1)
+        val discNumber = intent.getIntExtra(ARG_DISC_NUMBER, -1)
+
+        var loadPath = StringSetting.MAIN_LOAD_PATH.stringGlobal
+        if (loadPath.isEmpty()) loadPath = DirectoryInitialization.getUserDirectory() + "/Load"
+
+        binding.textSdRoot.text = getString(R.string.riivolution_sd_root, "$loadPath/Riivolution")
+        binding.buttonStart.setOnClickListener {
+            if (patches != null) patches!!.saveConfig()
+            EmulationActivity.launch(this, path, true)
+        }
+
+        lifecycleScope.launch {
+            withContext(Dispatchers.IO) {
+                val patches = RiivolutionPatches(gameId!!, revision, discNumber)
+                patches.loadConfig()
+                withContext(Dispatchers.Main) {
+                    populateList(patches)
+                }
+            }
+        }
+
+        binding.toolbarRiivolution.title = getString(R.string.riivolution_riivolution)
+        setSupportActionBar(binding.toolbarRiivolution)
+        supportActionBar!!.setDisplayHomeAsUpEnabled(true)
+
+        setInsets()
+        ThemeHelper.enableScrollTint(this, binding.toolbarRiivolution, binding.appbarRiivolution)
+    }
+
+    override fun onStop() {
+        super.onStop()
+        if (patches != null) patches!!.saveConfig()
+    }
+
+    override fun onSupportNavigateUp(): Boolean {
+        onBackPressed()
+        return true
+    }
+
+    private fun populateList(patches: RiivolutionPatches) {
+        this.patches = patches
+        binding.recyclerView.adapter = RiivolutionAdapter(this, patches)
+        binding.recyclerView.layoutManager = LinearLayoutManager(this)
+    }
+
+    private fun setInsets() {
+        ViewCompat.setOnApplyWindowInsetsListener(binding.appbarRiivolution) { v: View?, windowInsets: WindowInsetsCompat ->
+            val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
+
+            InsetsHelper.insetAppBar(insets, binding.appbarRiivolution)
+
+            binding.scrollViewRiivolution.setPadding(insets.left, 0, insets.right, insets.bottom)
+
+            InsetsHelper.applyNavbarWorkaround(insets.bottom, binding.workaroundView)
+            ThemeHelper.setNavigationBarColor(
+                this,
+                MaterialColors.getColor(binding.appbarRiivolution, R.attr.colorSurface)
+            )
+
+            windowInsets
+        }
+    }
+
+    companion object {
+        private const val ARG_GAME_PATH = "game_path"
+        private const val ARG_GAME_ID = "game_id"
+        private const val ARG_REVISION = "revision"
+        private const val ARG_DISC_NUMBER = "disc_number"
+
+        @JvmStatic
+        fun launch(
+            context: Context,
+            gamePath: String?,
+            gameId: String?,
+            revision: Int,
+            discNumber: Int
+        ) {
+            val launcher = Intent(context, RiivolutionBootActivity::class.java)
+            launcher.putExtra(ARG_GAME_PATH, gamePath)
+            launcher.putExtra(ARG_GAME_ID, gameId)
+            launcher.putExtra(ARG_REVISION, revision)
+            launcher.putExtra(ARG_DISC_NUMBER, discNumber)
+            context.startActivity(launcher)
+        }
+    }
+}