mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-11-04 04:34:07 +01:00 
			
		
		
		
	android: Re-enable service notification
This commit is contained in:
		
							parent
							
								
									09747ca2d3
								
							
						
					
					
						commit
						0f9c5b8d6a
					
				@ -31,18 +31,16 @@ import org.yuzu.yuzu_emu.features.settings.model.Settings
 | 
			
		||||
import org.yuzu.yuzu_emu.fragments.EmulationFragment
 | 
			
		||||
import org.yuzu.yuzu_emu.model.Game
 | 
			
		||||
import org.yuzu.yuzu_emu.utils.ControllerMappingHelper
 | 
			
		||||
import org.yuzu.yuzu_emu.utils.ForegroundService
 | 
			
		||||
import org.yuzu.yuzu_emu.utils.InputHandler
 | 
			
		||||
import org.yuzu.yuzu_emu.utils.NfcReader
 | 
			
		||||
import org.yuzu.yuzu_emu.utils.SerializableHelper.parcelable
 | 
			
		||||
import org.yuzu.yuzu_emu.utils.ThemeHelper
 | 
			
		||||
import kotlin.math.roundToInt
 | 
			
		||||
 | 
			
		||||
open class EmulationActivity : AppCompatActivity(), SensorEventListener {
 | 
			
		||||
class EmulationActivity : AppCompatActivity(), SensorEventListener {
 | 
			
		||||
    private var controllerMappingHelper: ControllerMappingHelper? = null
 | 
			
		||||
 | 
			
		||||
    // TODO(bunnei): Disable notifications until we support app suspension.
 | 
			
		||||
    //private Intent foregroundService;
 | 
			
		||||
 | 
			
		||||
    var isActivityRecreated = false
 | 
			
		||||
    private var menuVisible = false
 | 
			
		||||
    private var emulationFragment: EmulationFragment? = null
 | 
			
		||||
@ -57,8 +55,7 @@ open class EmulationActivity : AppCompatActivity(), SensorEventListener {
 | 
			
		||||
    private lateinit var game: Game
 | 
			
		||||
 | 
			
		||||
    override fun onDestroy() {
 | 
			
		||||
        // TODO(bunnei): Disable notifications until we support app suspension.
 | 
			
		||||
        //stopService(foregroundService);
 | 
			
		||||
        stopForegroundService(this)
 | 
			
		||||
        super.onDestroy()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -100,9 +97,8 @@ open class EmulationActivity : AppCompatActivity(), SensorEventListener {
 | 
			
		||||
        inputHandler.initialize()
 | 
			
		||||
 | 
			
		||||
        // 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);
 | 
			
		||||
        val startIntent = Intent(this, ForegroundService::class.java)
 | 
			
		||||
        startForegroundService(startIntent)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
 | 
			
		||||
@ -324,7 +320,6 @@ open class EmulationActivity : AppCompatActivity(), SensorEventListener {
 | 
			
		||||
 | 
			
		||||
    companion object {
 | 
			
		||||
        const val EXTRA_SELECTED_GAME = "SelectedGame"
 | 
			
		||||
        private const val EMULATION_RUNNING_NOTIFICATION = 0x1000
 | 
			
		||||
 | 
			
		||||
        fun launch(activity: AppCompatActivity, game: Game) {
 | 
			
		||||
            val launcher = Intent(activity, EmulationActivity::class.java)
 | 
			
		||||
@ -332,9 +327,10 @@ open class EmulationActivity : AppCompatActivity(), SensorEventListener {
 | 
			
		||||
            activity.startActivity(launcher)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        fun tryDismissRunningNotification(activity: Activity?) {
 | 
			
		||||
            // TODO(bunnei): Disable notifications until we support app suspension.
 | 
			
		||||
            //NotificationManagerCompat.from(activity).cancel(EMULATION_RUNNING_NOTIFICATION);
 | 
			
		||||
        fun stopForegroundService(activity: Activity) {
 | 
			
		||||
            val startIntent = Intent(activity, ForegroundService::class.java)
 | 
			
		||||
            startIntent.action = ForegroundService.ACTION_STOP
 | 
			
		||||
            activity.startForegroundService(startIntent)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private fun areCoordinatesOutside(view: View?, x: Float, y: Float): Boolean {
 | 
			
		||||
 | 
			
		||||
@ -123,8 +123,8 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                R.id.menu_exit -> {
 | 
			
		||||
                    requireActivity().finish()
 | 
			
		||||
                    emulationState.stop()
 | 
			
		||||
                    requireActivity().finish()
 | 
			
		||||
                    true
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@ -364,7 +364,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private class EmulationState(private val mGamePath: String?) {
 | 
			
		||||
    private class EmulationState(private val gamePath: String) {
 | 
			
		||||
        private var state: State
 | 
			
		||||
        private var surface: Surface? = null
 | 
			
		||||
        private var runWhenSurfaceIsValid = false
 | 
			
		||||
@ -391,8 +391,8 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
 | 
			
		||||
        fun stop() {
 | 
			
		||||
            if (state != State.STOPPED) {
 | 
			
		||||
                Log.debug("[EmulationFragment] Stopping emulation.")
 | 
			
		||||
                state = State.STOPPED
 | 
			
		||||
                NativeLibrary.stopEmulation()
 | 
			
		||||
                state = State.STOPPED
 | 
			
		||||
            } else {
 | 
			
		||||
                Log.warning("[EmulationFragment] Stop called while already stopped.")
 | 
			
		||||
            }
 | 
			
		||||
@ -402,12 +402,13 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
 | 
			
		||||
        @Synchronized
 | 
			
		||||
        fun pause() {
 | 
			
		||||
            if (state != State.PAUSED) {
 | 
			
		||||
                state = State.PAUSED
 | 
			
		||||
                Log.debug("[EmulationFragment] Pausing emulation.")
 | 
			
		||||
 | 
			
		||||
                // Release the surface before pausing, since emulation has to be running for that.
 | 
			
		||||
                NativeLibrary.surfaceDestroyed()
 | 
			
		||||
                NativeLibrary.pauseEmulation()
 | 
			
		||||
 | 
			
		||||
                state = State.PAUSED
 | 
			
		||||
            } else {
 | 
			
		||||
                Log.warning("[EmulationFragment] Pause called while already paused.")
 | 
			
		||||
            }
 | 
			
		||||
@ -464,11 +465,11 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
 | 
			
		||||
            when (state) {
 | 
			
		||||
                State.STOPPED -> {
 | 
			
		||||
                    NativeLibrary.surfaceChanged(surface)
 | 
			
		||||
                    val mEmulationThread = Thread({
 | 
			
		||||
                    val emulationThread = Thread({
 | 
			
		||||
                        Log.debug("[EmulationFragment] Starting emulation thread.")
 | 
			
		||||
                        NativeLibrary.run(mGamePath)
 | 
			
		||||
                        NativeLibrary.run(gamePath)
 | 
			
		||||
                    }, "NativeEmulation")
 | 
			
		||||
                    mEmulationThread.start()
 | 
			
		||||
                    emulationThread.start()
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                State.PAUSED -> {
 | 
			
		||||
 | 
			
		||||
@ -119,7 +119,7 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Dismiss previous notifications (should not happen unless a crash occurred)
 | 
			
		||||
        EmulationActivity.tryDismissRunningNotification(this)
 | 
			
		||||
        EmulationActivity.stopForegroundService(this)
 | 
			
		||||
 | 
			
		||||
        setInsets()
 | 
			
		||||
    }
 | 
			
		||||
@ -221,7 +221,7 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onDestroy() {
 | 
			
		||||
        EmulationActivity.tryDismissRunningNotification(this)
 | 
			
		||||
        EmulationActivity.stopForegroundService(this)
 | 
			
		||||
        super.onDestroy()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -18,13 +18,16 @@ import org.yuzu.yuzu_emu.activities.EmulationActivity
 | 
			
		||||
 */
 | 
			
		||||
class ForegroundService : Service() {
 | 
			
		||||
    companion object {
 | 
			
		||||
        private const val EMULATION_RUNNING_NOTIFICATION = 0x1000
 | 
			
		||||
        const val EMULATION_RUNNING_NOTIFICATION = 0x1000
 | 
			
		||||
 | 
			
		||||
        const val ACTION_STOP = "stop"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun showRunningNotification() {
 | 
			
		||||
        // Intent is used to resume emulation if the notification is clicked
 | 
			
		||||
        val contentIntent = PendingIntent.getActivity(
 | 
			
		||||
            this, 0,
 | 
			
		||||
            this,
 | 
			
		||||
            0,
 | 
			
		||||
            Intent(this, EmulationActivity::class.java),
 | 
			
		||||
            PendingIntent.FLAG_IMMUTABLE
 | 
			
		||||
        )
 | 
			
		||||
@ -50,6 +53,11 @@ class ForegroundService : Service() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
 | 
			
		||||
        if (intent.action == ACTION_STOP) {
 | 
			
		||||
            NotificationManagerCompat.from(this).cancel(EMULATION_RUNNING_NOTIFICATION)
 | 
			
		||||
            stopForeground(STOP_FOREGROUND_REMOVE)
 | 
			
		||||
            stopSelfResult(startId)
 | 
			
		||||
        }
 | 
			
		||||
        return START_STICKY
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user