android: Add button to use global driver value
This commit is contained in:
parent
9e974d4c7e
commit
dac8c4ce4d
4 changed files with 65 additions and 2 deletions
|
@ -8,6 +8,7 @@ import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import org.yuzu.yuzu_emu.databinding.CardDriverOptionBinding
|
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.Driver
|
||||||
import org.yuzu.yuzu_emu.model.DriverViewModel
|
import org.yuzu.yuzu_emu.model.DriverViewModel
|
||||||
import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder
|
import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder
|
||||||
|
@ -27,13 +28,17 @@ class DriverAdapter(private val driverViewModel: DriverViewModel) :
|
||||||
binding.apply {
|
binding.apply {
|
||||||
radioButton.isChecked = model.selected
|
radioButton.isChecked = model.selected
|
||||||
root.setOnClickListener {
|
root.setOnClickListener {
|
||||||
selectItem(bindingAdapterPosition) { driverViewModel.onDriverSelected(it) }
|
selectItem(bindingAdapterPosition) {
|
||||||
|
driverViewModel.onDriverSelected(it)
|
||||||
|
driverViewModel.showClearButton(!StringSetting.DRIVER_PATH.global)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
buttonDelete.setOnClickListener {
|
buttonDelete.setOnClickListener {
|
||||||
removeSelectableItem(
|
removeSelectableItem(
|
||||||
bindingAdapterPosition
|
bindingAdapterPosition
|
||||||
) { removedPosition: Int, selectedPosition: Int ->
|
) { removedPosition: Int, selectedPosition: Int ->
|
||||||
driverViewModel.onDriverRemoved(removedPosition, selectedPosition)
|
driverViewModel.onDriverRemoved(removedPosition, selectedPosition)
|
||||||
|
driverViewModel.showClearButton(!StringSetting.DRIVER_PATH.global)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
package org.yuzu.yuzu_emu.fragments
|
package org.yuzu.yuzu_emu.fragments
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
@ -13,20 +14,26 @@ import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.core.view.updatePadding
|
import androidx.core.view.updatePadding
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import androidx.lifecycle.Lifecycle
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
import androidx.lifecycle.repeatOnLifecycle
|
||||||
import androidx.navigation.findNavController
|
import androidx.navigation.findNavController
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import com.google.android.material.transition.MaterialSharedAxis
|
import com.google.android.material.transition.MaterialSharedAxis
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.yuzu.yuzu_emu.R
|
import org.yuzu.yuzu_emu.R
|
||||||
import org.yuzu.yuzu_emu.adapters.DriverAdapter
|
import org.yuzu.yuzu_emu.adapters.DriverAdapter
|
||||||
import org.yuzu.yuzu_emu.databinding.FragmentDriverManagerBinding
|
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.Driver.Companion.toDriver
|
||||||
import org.yuzu.yuzu_emu.model.DriverViewModel
|
import org.yuzu.yuzu_emu.model.DriverViewModel
|
||||||
import org.yuzu.yuzu_emu.model.HomeViewModel
|
import org.yuzu.yuzu_emu.model.HomeViewModel
|
||||||
import org.yuzu.yuzu_emu.utils.FileUtil
|
import org.yuzu.yuzu_emu.utils.FileUtil
|
||||||
import org.yuzu.yuzu_emu.utils.GpuDriverHelper
|
import org.yuzu.yuzu_emu.utils.GpuDriverHelper
|
||||||
|
import org.yuzu.yuzu_emu.utils.NativeConfig
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
|
@ -55,12 +62,43 @@ class DriverManagerFragment : Fragment() {
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This is using the correct scope, lint is just acting up
|
||||||
|
@SuppressLint("UnsafeRepeatOnLifecycleDetector")
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
homeViewModel.setNavigationVisibility(visible = false, animated = true)
|
homeViewModel.setNavigationVisibility(visible = false, animated = true)
|
||||||
homeViewModel.setStatusBarShadeVisibility(visible = false)
|
homeViewModel.setStatusBarShadeVisibility(visible = false)
|
||||||
|
|
||||||
driverViewModel.onOpenDriverManager(args.game)
|
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) {
|
if (!driverViewModel.isInteractionAllowed.value) {
|
||||||
DriversLoadingDialogFragment().show(
|
DriversLoadingDialogFragment().show(
|
||||||
|
@ -168,6 +206,7 @@ class DriverManagerFragment : Fragment() {
|
||||||
val adapter = binding.listDrivers.adapter as DriverAdapter
|
val adapter = binding.listDrivers.adapter as DriverAdapter
|
||||||
adapter.addItem(driverData.toDriver())
|
adapter.addItem(driverData.toDriver())
|
||||||
adapter.selectItem(adapter.currentList.indices.last)
|
adapter.selectItem(adapter.currentList.indices.last)
|
||||||
|
driverViewModel.showClearButton(!StringSetting.DRIVER_PATH.global)
|
||||||
binding.listDrivers
|
binding.listDrivers
|
||||||
.smoothScrollToPosition(adapter.currentList.indices.last)
|
.smoothScrollToPosition(adapter.currentList.indices.last)
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.SharingStarted
|
import kotlinx.coroutines.flow.SharingStarted
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
import kotlinx.coroutines.flow.stateIn
|
import kotlinx.coroutines.flow.stateIn
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
@ -46,6 +47,9 @@ class DriverViewModel : ViewModel() {
|
||||||
private val _selectedDriverTitle = MutableStateFlow("")
|
private val _selectedDriverTitle = MutableStateFlow("")
|
||||||
val selectedDriverTitle: StateFlow<String> get() = _selectedDriverTitle
|
val selectedDriverTitle: StateFlow<String> get() = _selectedDriverTitle
|
||||||
|
|
||||||
|
private val _showClearButton = MutableStateFlow(false)
|
||||||
|
val showClearButton = _showClearButton.asStateFlow()
|
||||||
|
|
||||||
private val driversToDelete = mutableListOf<String>()
|
private val driversToDelete = mutableListOf<String>()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
@ -60,7 +64,7 @@ class DriverViewModel : ViewModel() {
|
||||||
_areDriversLoading.value = false
|
_areDriversLoading.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateDriverList() {
|
fun updateDriverList() {
|
||||||
val selectedDriver = GpuDriverHelper.customDriverSettingData
|
val selectedDriver = GpuDriverHelper.customDriverSettingData
|
||||||
val newDriverList = mutableListOf(
|
val newDriverList = mutableListOf(
|
||||||
Driver(
|
Driver(
|
||||||
|
@ -81,6 +85,10 @@ class DriverViewModel : ViewModel() {
|
||||||
updateDriverList()
|
updateDriverList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun showClearButton(value: Boolean) {
|
||||||
|
_showClearButton.value = value
|
||||||
|
}
|
||||||
|
|
||||||
fun onDriverSelected(position: Int) {
|
fun onDriverSelected(position: Int) {
|
||||||
if (position == 0) {
|
if (position == 0) {
|
||||||
StringSetting.DRIVER_PATH.setString("")
|
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>
|
Loading…
Reference in a new issue