Add GPU Driver Configuration preference

This preference launches `GpuDriverActivity` for managing custom gpu drivers. When the device has an incompatible GPU, the preference will be disabled and greyed out.
This commit is contained in:
lynxnb 2022-07-14 02:06:51 +02:00 committed by Mark Collins
parent 48cf1263bc
commit 59c60df993
3 changed files with 57 additions and 0 deletions

View File

@ -0,0 +1,52 @@
/*
* SPDX-License-Identifier: MPL-2.0
* Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
*/
package emu.skyline.preference
import android.content.Context
import android.content.Intent
import android.util.AttributeSet
import androidx.activity.ComponentActivity
import androidx.activity.result.contract.ActivityResultContracts
import androidx.preference.Preference
import androidx.preference.Preference.SummaryProvider
import androidx.preference.R
import emu.skyline.utils.GpuDriverHelper
import emu.skyline.utils.PreferenceSettings
import emu.skyline.R as SkylineR
/**
* This preference is used to launch [GpuDriverActivity] using a preference
*/
class GpuDriverPreference @JvmOverloads constructor(context : Context, attrs : AttributeSet? = null, defStyleAttr : Int = R.attr.preferenceStyle) : Preference(context, attrs, defStyleAttr) {
private val driverCallback = (context as ComponentActivity).registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
notifyChanged()
}
init {
val supportsCustomDriverLoading = GpuDriverHelper.supportsCustomDriverLoading()
if (supportsCustomDriverLoading) {
summaryProvider = SummaryProvider<GpuDriverPreference> {
sharedPreferences?.getString(key, PreferenceSettings.SYSTEM_GPU_DRIVER)?.let {
var driver = it
if (it == PreferenceSettings.SYSTEM_GPU_DRIVER)
driver = context.getString(SkylineR.string.system_driver)
context.getString(SkylineR.string.gpu_driver_config_desc, driver)
}
}
} else {
isEnabled = false
summaryProvider = SummaryProvider<GpuDriverPreference> {
context.getString(SkylineR.string.gpu_driver_config_desc_unsupported)
}
}
}
/**
* This launches [GpuDriverActivity] on click to manage driver packages
*/
override fun onClick() = driverCallback.launch(Intent(context, GpuDriverActivity::class.java))
}

View File

@ -37,6 +37,8 @@
<string name="perf_stats_desc_on">Performance Statistics will be shown in the top-left corner</string> <string name="perf_stats_desc_on">Performance Statistics will be shown in the top-left corner</string>
<string name="log_level">Log Level</string> <string name="log_level">Log Level</string>
<string name="gpu_driver_config">GPU Driver Configuration</string> <string name="gpu_driver_config">GPU Driver Configuration</string>
<string name="gpu_driver_config_desc">Active driver: %1$s</string>
<string name="gpu_driver_config_desc_unsupported">Your GPU is not supported</string>
<!-- Settings - System --> <!-- Settings - System -->
<string name="system">System</string> <string name="system">System</string>
<string name="use_docked">Use Docked Mode</string> <string name="use_docked">Use Docked Mode</string>

View File

@ -40,6 +40,9 @@
app:key="log_level" app:key="log_level"
app:title="@string/log_level" app:title="@string/log_level"
app:useSimpleSummaryProvider="true" /> app:useSimpleSummaryProvider="true" />
<emu.skyline.preference.GpuDriverPreference
app:key="gpu_driver"
app:title="@string/gpu_driver_config" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory <PreferenceCategory
android:key="category_keys" android:key="category_keys"