android: Add button to use global driver value
This commit is contained in:
		@@ -8,6 +8,7 @@ import android.view.LayoutInflater
 | 
			
		||||
import android.view.View
 | 
			
		||||
import android.view.ViewGroup
 | 
			
		||||
import org.yuzu.yuzu_emu.databinding.CardDriverOptionBinding
 | 
			
		||||
import org.yuzu.yuzu_emu.features.settings.model.StringSetting
 | 
			
		||||
import org.yuzu.yuzu_emu.model.Driver
 | 
			
		||||
import org.yuzu.yuzu_emu.model.DriverViewModel
 | 
			
		||||
import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder
 | 
			
		||||
@@ -27,13 +28,17 @@ class DriverAdapter(private val driverViewModel: DriverViewModel) :
 | 
			
		||||
            binding.apply {
 | 
			
		||||
                radioButton.isChecked = model.selected
 | 
			
		||||
                root.setOnClickListener {
 | 
			
		||||
                    selectItem(bindingAdapterPosition) { driverViewModel.onDriverSelected(it) }
 | 
			
		||||
                    selectItem(bindingAdapterPosition) {
 | 
			
		||||
                        driverViewModel.onDriverSelected(it)
 | 
			
		||||
                        driverViewModel.showClearButton(!StringSetting.DRIVER_PATH.global)
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                buttonDelete.setOnClickListener {
 | 
			
		||||
                    removeSelectableItem(
 | 
			
		||||
                        bindingAdapterPosition
 | 
			
		||||
                    ) { removedPosition: Int, selectedPosition: Int ->
 | 
			
		||||
                        driverViewModel.onDriverRemoved(removedPosition, selectedPosition)
 | 
			
		||||
                        driverViewModel.showClearButton(!StringSetting.DRIVER_PATH.global)
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@
 | 
			
		||||
 | 
			
		||||
package org.yuzu.yuzu_emu.fragments
 | 
			
		||||
 | 
			
		||||
import android.annotation.SuppressLint
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.view.LayoutInflater
 | 
			
		||||
import android.view.View
 | 
			
		||||
@@ -13,20 +14,26 @@ import androidx.core.view.WindowInsetsCompat
 | 
			
		||||
import androidx.core.view.updatePadding
 | 
			
		||||
import androidx.fragment.app.Fragment
 | 
			
		||||
import androidx.fragment.app.activityViewModels
 | 
			
		||||
import androidx.lifecycle.Lifecycle
 | 
			
		||||
import androidx.lifecycle.lifecycleScope
 | 
			
		||||
import androidx.lifecycle.repeatOnLifecycle
 | 
			
		||||
import androidx.navigation.findNavController
 | 
			
		||||
import androidx.navigation.fragment.navArgs
 | 
			
		||||
import androidx.recyclerview.widget.GridLayoutManager
 | 
			
		||||
import com.google.android.material.transition.MaterialSharedAxis
 | 
			
		||||
import kotlinx.coroutines.Dispatchers
 | 
			
		||||
import kotlinx.coroutines.launch
 | 
			
		||||
import kotlinx.coroutines.withContext
 | 
			
		||||
import org.yuzu.yuzu_emu.R
 | 
			
		||||
import org.yuzu.yuzu_emu.adapters.DriverAdapter
 | 
			
		||||
import org.yuzu.yuzu_emu.databinding.FragmentDriverManagerBinding
 | 
			
		||||
import org.yuzu.yuzu_emu.features.settings.model.StringSetting
 | 
			
		||||
import org.yuzu.yuzu_emu.model.Driver.Companion.toDriver
 | 
			
		||||
import org.yuzu.yuzu_emu.model.DriverViewModel
 | 
			
		||||
import org.yuzu.yuzu_emu.model.HomeViewModel
 | 
			
		||||
import org.yuzu.yuzu_emu.utils.FileUtil
 | 
			
		||||
import org.yuzu.yuzu_emu.utils.GpuDriverHelper
 | 
			
		||||
import org.yuzu.yuzu_emu.utils.NativeConfig
 | 
			
		||||
import java.io.File
 | 
			
		||||
import java.io.IOException
 | 
			
		||||
 | 
			
		||||
@@ -55,12 +62,43 @@ class DriverManagerFragment : Fragment() {
 | 
			
		||||
        return binding.root
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // This is using the correct scope, lint is just acting up
 | 
			
		||||
    @SuppressLint("UnsafeRepeatOnLifecycleDetector")
 | 
			
		||||
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
 | 
			
		||||
        super.onViewCreated(view, savedInstanceState)
 | 
			
		||||
        homeViewModel.setNavigationVisibility(visible = false, animated = true)
 | 
			
		||||
        homeViewModel.setStatusBarShadeVisibility(visible = false)
 | 
			
		||||
 | 
			
		||||
        driverViewModel.onOpenDriverManager(args.game)
 | 
			
		||||
        if (NativeConfig.isPerGameConfigLoaded()) {
 | 
			
		||||
            binding.toolbarDrivers.inflateMenu(R.menu.menu_driver_manager)
 | 
			
		||||
            driverViewModel.showClearButton(!StringSetting.DRIVER_PATH.global)
 | 
			
		||||
            binding.toolbarDrivers.setOnMenuItemClickListener {
 | 
			
		||||
                when (it.itemId) {
 | 
			
		||||
                    R.id.menu_driver_clear -> {
 | 
			
		||||
                        StringSetting.DRIVER_PATH.global = true
 | 
			
		||||
                        driverViewModel.updateDriverList()
 | 
			
		||||
                        (binding.listDrivers.adapter as DriverAdapter)
 | 
			
		||||
                            .replaceList(driverViewModel.driverList.value)
 | 
			
		||||
                        driverViewModel.showClearButton(false)
 | 
			
		||||
                        true
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    else -> false
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            viewLifecycleOwner.lifecycleScope.apply {
 | 
			
		||||
                launch {
 | 
			
		||||
                    repeatOnLifecycle(Lifecycle.State.STARTED) {
 | 
			
		||||
                        driverViewModel.showClearButton.collect {
 | 
			
		||||
                            binding.toolbarDrivers.menu
 | 
			
		||||
                                .findItem(R.id.menu_driver_clear).isVisible = it
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!driverViewModel.isInteractionAllowed.value) {
 | 
			
		||||
            DriversLoadingDialogFragment().show(
 | 
			
		||||
@@ -168,6 +206,7 @@ class DriverManagerFragment : Fragment() {
 | 
			
		||||
                            val adapter = binding.listDrivers.adapter as DriverAdapter
 | 
			
		||||
                            adapter.addItem(driverData.toDriver())
 | 
			
		||||
                            adapter.selectItem(adapter.currentList.indices.last)
 | 
			
		||||
                            driverViewModel.showClearButton(!StringSetting.DRIVER_PATH.global)
 | 
			
		||||
                            binding.listDrivers
 | 
			
		||||
                                .smoothScrollToPosition(adapter.currentList.indices.last)
 | 
			
		||||
                        }
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,7 @@ import kotlinx.coroutines.Dispatchers
 | 
			
		||||
import kotlinx.coroutines.flow.MutableStateFlow
 | 
			
		||||
import kotlinx.coroutines.flow.SharingStarted
 | 
			
		||||
import kotlinx.coroutines.flow.StateFlow
 | 
			
		||||
import kotlinx.coroutines.flow.asStateFlow
 | 
			
		||||
import kotlinx.coroutines.flow.combine
 | 
			
		||||
import kotlinx.coroutines.flow.stateIn
 | 
			
		||||
import kotlinx.coroutines.launch
 | 
			
		||||
@@ -46,6 +47,9 @@ class DriverViewModel : ViewModel() {
 | 
			
		||||
    private val _selectedDriverTitle = MutableStateFlow("")
 | 
			
		||||
    val selectedDriverTitle: StateFlow<String> get() = _selectedDriverTitle
 | 
			
		||||
 | 
			
		||||
    private val _showClearButton = MutableStateFlow(false)
 | 
			
		||||
    val showClearButton = _showClearButton.asStateFlow()
 | 
			
		||||
 | 
			
		||||
    private val driversToDelete = mutableListOf<String>()
 | 
			
		||||
 | 
			
		||||
    init {
 | 
			
		||||
@@ -60,7 +64,7 @@ class DriverViewModel : ViewModel() {
 | 
			
		||||
        _areDriversLoading.value = false
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun updateDriverList() {
 | 
			
		||||
    fun updateDriverList() {
 | 
			
		||||
        val selectedDriver = GpuDriverHelper.customDriverSettingData
 | 
			
		||||
        val newDriverList = mutableListOf(
 | 
			
		||||
            Driver(
 | 
			
		||||
@@ -81,6 +85,10 @@ class DriverViewModel : ViewModel() {
 | 
			
		||||
        updateDriverList()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun showClearButton(value: Boolean) {
 | 
			
		||||
        _showClearButton.value = value
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun onDriverSelected(position: Int) {
 | 
			
		||||
        if (position == 0) {
 | 
			
		||||
            StringSetting.DRIVER_PATH.setString("")
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								src/android/app/src/main/res/menu/menu_driver_manager.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/android/app/src/main/res/menu/menu_driver_manager.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
 | 
			
		||||
    xmlns:app="http://schemas.android.com/apk/res-auto">
 | 
			
		||||
 | 
			
		||||
    <item
 | 
			
		||||
        android:id="@+id/menu_driver_clear"
 | 
			
		||||
        android:icon="@drawable/ic_clear"
 | 
			
		||||
        android:title="@string/clear"
 | 
			
		||||
        app:showAsAction="always" />
 | 
			
		||||
 | 
			
		||||
</menu>
 | 
			
		||||
		Reference in New Issue
	
	Block a user