summaryrefslogtreecommitdiffstats
path: root/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt127
1 files changed, 13 insertions, 114 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
index b222344c3..0da7562a6 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
@@ -8,15 +8,10 @@ import android.content.DialogInterface
import android.content.Intent
import android.graphics.Rect
import android.os.Bundle
-import android.view.MotionEvent
import android.view.View
import android.view.WindowManager
-import androidx.activity.OnBackPressedCallback
-import androidx.annotation.IntDef
import androidx.appcompat.app.AppCompatActivity
-import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
-import androidx.fragment.app.FragmentManager
import androidx.preference.PreferenceManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.slider.Slider.OnChangeListener
@@ -25,8 +20,9 @@ import org.yuzu.yuzu_emu.R
import org.yuzu.yuzu_emu.databinding.DialogSliderBinding
import org.yuzu.yuzu_emu.features.settings.model.Settings
import org.yuzu.yuzu_emu.fragments.EmulationFragment
-import org.yuzu.yuzu_emu.fragments.MenuFragment
+import org.yuzu.yuzu_emu.model.Game
import org.yuzu.yuzu_emu.utils.ControllerMappingHelper
+import org.yuzu.yuzu_emu.utils.SerializableHelper.parcelable
import org.yuzu.yuzu_emu.utils.ThemeHelper
import kotlin.math.roundToInt
@@ -37,11 +33,11 @@ open class EmulationActivity : AppCompatActivity() {
//private Intent foregroundService;
var isActivityRecreated = false
- private var selectedTitle: String? = null
- private var path: String? = null
private var menuVisible = false
private var emulationFragment: EmulationFragment? = null
+ private lateinit var game: Game
+
override fun onDestroy() {
// TODO(bunnei): Disable notifications until we support app suspension.
//stopService(foregroundService);
@@ -54,9 +50,7 @@ open class EmulationActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
if (savedInstanceState == null) {
// Get params we were passed
- val gameToEmulate = intent
- path = gameToEmulate.getStringExtra(EXTRA_SELECTED_GAME)
- selectedTitle = gameToEmulate.getStringExtra(EXTRA_SELECTED_TITLE)
+ game = intent.parcelable(EXTRA_SELECTED_GAME)!!
isActivityRecreated = false
} else {
isActivityRecreated = true
@@ -73,34 +67,26 @@ open class EmulationActivity : AppCompatActivity() {
emulationFragment =
supportFragmentManager.findFragmentById(R.id.frame_emulation_fragment) as EmulationFragment?
if (emulationFragment == null) {
- emulationFragment = EmulationFragment.newInstance(path)
+ emulationFragment = EmulationFragment.newInstance(game)
supportFragmentManager.beginTransaction()
.add(R.id.frame_emulation_fragment, emulationFragment!!)
.commit()
}
- title = selectedTitle
+ title = game.title
// Start a foreground service to prevent the app from getting killed in the background
// TODO(bunnei): Disable notifications until we support app suspension.
//foregroundService = new Intent(EmulationActivity.this, ForegroundService.class);
//startForegroundService(foregroundService);
-
- onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
- override fun handleOnBackPressed() {
- toggleMenu()
- }
- })
}
override fun onSaveInstanceState(outState: Bundle) {
- outState.putString(EXTRA_SELECTED_GAME, path)
- outState.putString(EXTRA_SELECTED_TITLE, selectedTitle)
+ outState.putParcelable(EXTRA_SELECTED_GAME, game)
super.onSaveInstanceState(outState)
}
private fun restoreState(savedInstanceState: Bundle) {
- path = savedInstanceState.getString(EXTRA_SELECTED_GAME)
- selectedTitle = savedInstanceState.getString(EXTRA_SELECTED_TITLE)
+ game = savedInstanceState.parcelable(EXTRA_SELECTED_GAME)!!
// If an alert prompt was in progress when state was restored, retry displaying it
NativeLibrary.retryDisplayAlertPrompt()
@@ -110,6 +96,8 @@ open class EmulationActivity : AppCompatActivity() {
window.attributes.layoutInDisplayCutoutMode =
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
+ window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
+
// It would be nice to use IMMERSIVE_STICKY, but that doesn't show the toolbar.
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
@@ -119,15 +107,6 @@ open class EmulationActivity : AppCompatActivity() {
View.SYSTEM_UI_FLAG_IMMERSIVE
}
- fun handleMenuAction(action: Int) {
- when (action) {
- MENU_ACTION_EXIT -> {
- emulationFragment!!.stopEmulation()
- finish()
- }
- }
- }
-
private fun editControlsPlacement() {
if (emulationFragment!!.isConfiguringControls) {
emulationFragment!!.stopConfiguringControls()
@@ -176,94 +155,14 @@ open class EmulationActivity : AppCompatActivity() {
.show()
}
- override fun dispatchTouchEvent(event: MotionEvent): Boolean {
- if (event.actionMasked == MotionEvent.ACTION_DOWN) {
- var anyMenuClosed = false
- var submenu = supportFragmentManager.findFragmentById(R.id.frame_submenu)
- if (submenu != null && areCoordinatesOutside(submenu.view, event.x, event.y)) {
- closeSubmenu()
- submenu = null
- anyMenuClosed = true
- }
- if (submenu == null) {
- val menu = supportFragmentManager.findFragmentById(R.id.frame_menu)
- if (menu != null && areCoordinatesOutside(menu.view, event.x, event.y)) {
- closeMenu()
- anyMenuClosed = true
- }
- }
- if (anyMenuClosed) {
- return true
- }
- }
- return super.dispatchTouchEvent(event)
- }
-
- @Retention(AnnotationRetention.SOURCE)
- @IntDef(
- MENU_ACTION_EDIT_CONTROLS_PLACEMENT,
- MENU_ACTION_TOGGLE_CONTROLS,
- MENU_ACTION_ADJUST_SCALE,
- MENU_ACTION_EXIT,
- MENU_ACTION_SHOW_FPS,
- MENU_ACTION_RESET_OVERLAY,
- MENU_ACTION_SHOW_OVERLAY,
- MENU_ACTION_OPEN_SETTINGS
- )
- annotation class MenuAction
-
- private fun closeSubmenu(): Boolean {
- return supportFragmentManager.popBackStackImmediate(
- BACKSTACK_NAME_SUBMENU,
- FragmentManager.POP_BACK_STACK_INCLUSIVE
- )
- }
-
- private fun closeMenu(): Boolean {
- menuVisible = false
- return supportFragmentManager.popBackStackImmediate(
- BACKSTACK_NAME_MENU,
- FragmentManager.POP_BACK_STACK_INCLUSIVE
- )
- }
-
- private fun toggleMenu() {
- if (!closeMenu()) {
- val fragment: Fragment = MenuFragment.newInstance()
- supportFragmentManager.beginTransaction()
- .setCustomAnimations(
- R.animator.menu_slide_in_from_start,
- R.animator.menu_slide_out_to_start,
- R.animator.menu_slide_in_from_start,
- R.animator.menu_slide_out_to_start
- )
- .add(R.id.frame_menu, fragment)
- .addToBackStack(BACKSTACK_NAME_MENU)
- .commit()
- menuVisible = true
- }
- }
-
companion object {
- private const val BACKSTACK_NAME_MENU = "menu"
- private const val BACKSTACK_NAME_SUBMENU = "submenu"
const val EXTRA_SELECTED_GAME = "SelectedGame"
- const val EXTRA_SELECTED_TITLE = "SelectedTitle"
- const val MENU_ACTION_EDIT_CONTROLS_PLACEMENT = 0
- const val MENU_ACTION_TOGGLE_CONTROLS = 1
- const val MENU_ACTION_ADJUST_SCALE = 2
- const val MENU_ACTION_EXIT = 3
- const val MENU_ACTION_SHOW_FPS = 4
- const val MENU_ACTION_RESET_OVERLAY = 6
- const val MENU_ACTION_SHOW_OVERLAY = 7
- const val MENU_ACTION_OPEN_SETTINGS = 8
private const val EMULATION_RUNNING_NOTIFICATION = 0x1000
@JvmStatic
- fun launch(activity: FragmentActivity, path: String?, title: String?) {
+ fun launch(activity: FragmentActivity, game: Game) {
val launcher = Intent(activity, EmulationActivity::class.java)
- launcher.putExtra(EXTRA_SELECTED_GAME, path)
- launcher.putExtra(EXTRA_SELECTED_TITLE, title)
+ launcher.putExtra(EXTRA_SELECTED_GAME, game)
activity.startActivity(launcher)
}