mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	android: Improve missing game handling
Previously the app would crash if you selected a game that no longer existed. Now we show an error message and reload the games list to remove any invalid games from the list.
This commit is contained in:
		@@ -3,15 +3,18 @@
 | 
			
		||||
 | 
			
		||||
package org.yuzu.yuzu_emu.adapters
 | 
			
		||||
 | 
			
		||||
import android.annotation.SuppressLint
 | 
			
		||||
import android.graphics.Bitmap
 | 
			
		||||
import android.graphics.BitmapFactory
 | 
			
		||||
import android.net.Uri
 | 
			
		||||
import android.text.TextUtils
 | 
			
		||||
import android.view.LayoutInflater
 | 
			
		||||
import android.view.View
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import android.widget.ImageView
 | 
			
		||||
import android.widget.Toast
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity
 | 
			
		||||
import androidx.documentfile.provider.DocumentFile
 | 
			
		||||
import androidx.lifecycle.ViewModelProvider
 | 
			
		||||
import androidx.lifecycle.lifecycleScope
 | 
			
		||||
import androidx.preference.PreferenceManager
 | 
			
		||||
import androidx.recyclerview.widget.AsyncDifferConfig
 | 
			
		||||
@@ -27,6 +30,7 @@ import org.yuzu.yuzu_emu.databinding.CardGameBinding
 | 
			
		||||
import org.yuzu.yuzu_emu.activities.EmulationActivity
 | 
			
		||||
import org.yuzu.yuzu_emu.model.Game
 | 
			
		||||
import org.yuzu.yuzu_emu.adapters.GameAdapter.GameViewHolder
 | 
			
		||||
import org.yuzu.yuzu_emu.model.GamesViewModel
 | 
			
		||||
 | 
			
		||||
class GameAdapter(private val activity: AppCompatActivity) :
 | 
			
		||||
    ListAdapter<Game, GameViewHolder>(AsyncDifferConfig.Builder(DiffCallback()).build()),
 | 
			
		||||
@@ -53,6 +57,19 @@ class GameAdapter(private val activity: AppCompatActivity) :
 | 
			
		||||
     */
 | 
			
		||||
    override fun onClick(view: View) {
 | 
			
		||||
        val holder = view.tag as GameViewHolder
 | 
			
		||||
 | 
			
		||||
        val gameExists = DocumentFile.fromSingleUri(YuzuApplication.appContext, Uri.parse(holder.game.path))?.exists() == true
 | 
			
		||||
        if (!gameExists) {
 | 
			
		||||
            Toast.makeText(
 | 
			
		||||
                YuzuApplication.appContext,
 | 
			
		||||
                R.string.loader_error_file_not_found,
 | 
			
		||||
                Toast.LENGTH_LONG
 | 
			
		||||
            ).show()
 | 
			
		||||
 | 
			
		||||
            ViewModelProvider(activity)[GamesViewModel::class.java].reloadGames(true)
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val preferences = PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext)
 | 
			
		||||
        preferences.edit()
 | 
			
		||||
            .putLong(
 | 
			
		||||
 
 | 
			
		||||
@@ -177,6 +177,7 @@
 | 
			
		||||
    <string name="loader_error_video_core">An error occurred initializing the video core</string>
 | 
			
		||||
    <string name="loader_error_video_core_description">This is usually caused by an incompatible GPU driver. Installing a custom GPU driver may resolve this problem.</string>
 | 
			
		||||
    <string name="loader_error_invalid_format">Unable to load ROM</string>
 | 
			
		||||
    <string name="loader_error_file_not_found">ROM file does not exist</string>
 | 
			
		||||
 | 
			
		||||
    <!-- Emulation Menu -->
 | 
			
		||||
    <string name="emulation_exit">Exit Emulation</string>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user