|
|
@ -15,7 +15,6 @@ import android.net.Uri |
|
|
import android.os.Bundle |
|
|
import android.os.Bundle |
|
|
import android.os.Handler |
|
|
import android.os.Handler |
|
|
import android.os.Looper |
|
|
import android.os.Looper |
|
|
import android.util.Rational |
|
|
|
|
|
import android.view.* |
|
|
import android.view.* |
|
|
import android.widget.TextView |
|
|
import android.widget.TextView |
|
|
import androidx.activity.OnBackPressedCallback |
|
|
import androidx.activity.OnBackPressedCallback |
|
|
@ -287,13 +286,14 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { |
|
|
|
|
|
|
|
|
override fun onConfigurationChanged(newConfig: Configuration) { |
|
|
override fun onConfigurationChanged(newConfig: Configuration) { |
|
|
super.onConfigurationChanged(newConfig) |
|
|
super.onConfigurationChanged(newConfig) |
|
|
|
|
|
updateScreenLayout() |
|
|
if (emulationActivity?.isInPictureInPictureMode == true) { |
|
|
if (emulationActivity?.isInPictureInPictureMode == true) { |
|
|
if (binding.drawerLayout.isOpen) { |
|
|
if (binding.drawerLayout.isOpen) { |
|
|
binding.drawerLayout.close() |
|
|
binding.drawerLayout.close() |
|
|
} |
|
|
} |
|
|
if (EmulationMenuSettings.showOverlay) { |
|
|
if (EmulationMenuSettings.showOverlay) { |
|
|
binding.surfaceInputOverlay.post { |
|
|
binding.surfaceInputOverlay.post { |
|
|
binding.surfaceInputOverlay.visibility = View.VISIBLE |
|
|
|
|
|
|
|
|
binding.surfaceInputOverlay.visibility = View.INVISIBLE |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} else { |
|
|
} else { |
|
|
@ -328,7 +328,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
override fun onPause() { |
|
|
override fun onPause() { |
|
|
if (emulationState.isRunning) { |
|
|
|
|
|
|
|
|
if (emulationState.isRunning && emulationActivity?.isInPictureInPictureMode != true) { |
|
|
emulationState.pause() |
|
|
emulationState.pause() |
|
|
} |
|
|
} |
|
|
super.onPause() |
|
|
super.onPause() |
|
|
@ -394,16 +394,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private fun updateScreenLayout() { |
|
|
private fun updateScreenLayout() { |
|
|
binding.surfaceEmulation.setAspectRatio( |
|
|
|
|
|
when (IntSetting.RENDERER_ASPECT_RATIO.int) { |
|
|
|
|
|
0 -> Rational(16, 9) |
|
|
|
|
|
1 -> Rational(4, 3) |
|
|
|
|
|
2 -> Rational(21, 9) |
|
|
|
|
|
3 -> Rational(16, 10) |
|
|
|
|
|
4 -> null // Stretch |
|
|
|
|
|
else -> Rational(16, 9) |
|
|
|
|
|
} |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
binding.surfaceEmulation.setAspectRatio(null) |
|
|
emulationActivity?.buildPictureInPictureParams() |
|
|
emulationActivity?.buildPictureInPictureParams() |
|
|
updateOrientation() |
|
|
updateOrientation() |
|
|
} |
|
|
} |
|
|
@ -693,7 +684,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { |
|
|
private class EmulationState(private val gamePath: String) { |
|
|
private class EmulationState(private val gamePath: String) { |
|
|
private var state: State |
|
|
private var state: State |
|
|
private var surface: Surface? = null |
|
|
private var surface: Surface? = null |
|
|
private var runWhenSurfaceIsValid = false |
|
|
|
|
|
|
|
|
|
|
|
init { |
|
|
init { |
|
|
// Starting state is stopped. |
|
|
// Starting state is stopped. |
|
|
@ -751,8 +741,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { |
|
|
// If the surface is set, run now. Otherwise, wait for it to get set. |
|
|
// If the surface is set, run now. Otherwise, wait for it to get set. |
|
|
if (surface != null) { |
|
|
if (surface != null) { |
|
|
runWithValidSurface() |
|
|
runWithValidSurface() |
|
|
} else { |
|
|
|
|
|
runWhenSurfaceIsValid = true |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -760,7 +748,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { |
|
|
@Synchronized |
|
|
@Synchronized |
|
|
fun newSurface(surface: Surface?) { |
|
|
fun newSurface(surface: Surface?) { |
|
|
this.surface = surface |
|
|
this.surface = surface |
|
|
if (runWhenSurfaceIsValid) { |
|
|
|
|
|
|
|
|
if (this.surface != null) { |
|
|
runWithValidSurface() |
|
|
runWithValidSurface() |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
@ -788,10 +776,9 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private fun runWithValidSurface() { |
|
|
private fun runWithValidSurface() { |
|
|
runWhenSurfaceIsValid = false |
|
|
|
|
|
|
|
|
NativeLibrary.surfaceChanged(surface) |
|
|
when (state) { |
|
|
when (state) { |
|
|
State.STOPPED -> { |
|
|
State.STOPPED -> { |
|
|
NativeLibrary.surfaceChanged(surface) |
|
|
|
|
|
val emulationThread = Thread({ |
|
|
val emulationThread = Thread({ |
|
|
Log.debug("[EmulationFragment] Starting emulation thread.") |
|
|
Log.debug("[EmulationFragment] Starting emulation thread.") |
|
|
NativeLibrary.run(gamePath) |
|
|
NativeLibrary.run(gamePath) |
|
|
@ -801,7 +788,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback { |
|
|
|
|
|
|
|
|
State.PAUSED -> { |
|
|
State.PAUSED -> { |
|
|
Log.debug("[EmulationFragment] Resuming emulation.") |
|
|
Log.debug("[EmulationFragment] Resuming emulation.") |
|
|
NativeLibrary.surfaceChanged(surface) |
|
|
|
|
|
NativeLibrary.unpauseEmulation() |
|
|
NativeLibrary.unpauseEmulation() |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|