diff --git a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/GameController.kt b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/GameController.kt index 6e3ca19f5..2ababa511 100644 --- a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/GameController.kt +++ b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/GameController.kt @@ -42,14 +42,15 @@ class GameController(var activity: Activity) { companion object { private fun init(context: Context, controller: GameController): View { val inflater = LayoutInflater.from(context) - val view = inflater.inflate(R.layout.game_layout, null) + val parent = FrameLayout(context) + val view = inflater.inflate(R.layout.game_layout, parent, false) view.findViewById(R.id.leftcontainer)!!.addView(controller.leftGamePad) view.findViewById(R.id.rightcontainer)!!.addView(controller.rightGamePad) return view } @Composable - fun Compose(viewModel: MainViewModel): Unit { + fun Compose(viewModel: MainViewModel) { AndroidView( modifier = Modifier.fillMaxSize(), factory = { context -> diff --git a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/Helpers.kt b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/Helpers.kt deleted file mode 100644 index 3d85fdafa..000000000 --- a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/Helpers.kt +++ /dev/null @@ -1,170 +0,0 @@ -package org.kenjinx.android - -import android.content.ContentUris -import android.content.Context -import android.database.Cursor -import android.net.Uri -import android.os.Environment -import android.provider.DocumentsContract -import android.provider.MediaStore -import androidx.compose.runtime.MutableState -import androidx.core.net.toUri -import androidx.documentfile.provider.DocumentFile -import com.anggrayudi.storage.SimpleStorageHelper -import com.anggrayudi.storage.callback.FileCallback -import com.anggrayudi.storage.file.copyFileTo -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import java.io.File -import androidx.core.net.toUri - -class Helpers { - companion object { - fun getPath(context: Context, uri: Uri): String? { - - // DocumentProvider - if (DocumentsContract.isDocumentUri(context, uri)) { - // ExternalStorageProvider - if (isExternalStorageDocument(uri)) { - val docId = DocumentsContract.getDocumentId(uri) - val split = docId.split(":".toRegex()).toTypedArray() - val type = split[0] - if ("primary".equals(type, ignoreCase = true)) { - return Environment.getExternalStorageDirectory().toString() + "/" + split[1] - } - } else if (isDownloadsDocument(uri)) { - val id = DocumentsContract.getDocumentId(uri) - val contentUri = ContentUris.withAppendedId( - "content://downloads/public_downloads".toUri(), - java.lang.Long.valueOf(id) - ) - return getDataColumn(context, contentUri, null, null) - } else if (isMediaDocument(uri)) { - val docId = DocumentsContract.getDocumentId(uri) - val split = docId.split(":".toRegex()).toTypedArray() - val type = split[0] - var contentUri: Uri? = null - when (type) { - "image" -> { - contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI - } - - "video" -> { - contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI - } - - "audio" -> { - contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI - } - } - val selection = "_id=?" - val selectionArgs = arrayOf(split[1]) - return getDataColumn(context, contentUri, selection, selectionArgs) - } - } else if ("content".equals(uri.scheme, ignoreCase = true)) { - return getDataColumn(context, uri, null, null) - } else if ("file".equals(uri.scheme, ignoreCase = true)) { - return uri.path - } - return null - } - - fun copyToData( - file: DocumentFile, path: String, storageHelper: SimpleStorageHelper, - isCopying: MutableState, - copyProgress: MutableState, - currentProgressName: MutableState, - finish: () -> Unit - ) { - var fPath = path + "/${file.name}" - var callback: FileCallback? = object : FileCallback() { - override fun onFailed(errorCode: ErrorCode) { - super.onFailed(errorCode) - File(fPath).delete() - finish() - } - - override fun onStart(file: Any, workerThread: Thread): Long { - copyProgress.value = 0f - - (file as DocumentFile).apply { - currentProgressName.value = "Copying ${file.name}" - } - return super.onStart(file, workerThread) - } - - override fun onReport(report: Report) { - super.onReport(report) - - if (!isCopying.value) { - Thread.currentThread().interrupt() - } - - copyProgress.value = report.progress / 100f - } - - override fun onCompleted(result: Any) { - super.onCompleted(result) - isCopying.value = false - finish() - } - } - val ioScope = CoroutineScope(Dispatchers.IO) - isCopying.value = true - File(fPath).delete() - file.apply { - val f = this - ioScope.launch { - f.copyFileTo( - storageHelper.storage.context, - File(path), - callback = callback!! - ) - - } - } - } - - private fun getDataColumn( - context: Context, - uri: Uri?, - selection: String?, - selectionArgs: Array? - ): String? { - var cursor: Cursor? = null - val column = "_data" - val projection = arrayOf(column) - try { - cursor = uri?.let { - context.contentResolver.query( - it, - projection, - selection, - selectionArgs, - null - ) - } - if (cursor != null && cursor.moveToFirst()) { - val column_index: Int = cursor.getColumnIndexOrThrow(column) - return cursor.getString(column_index) - } - } finally { - cursor?.close() - } - return null - } - - private fun isExternalStorageDocument(uri: Uri): Boolean { - return "com.android.externalstorage.documents" == uri.authority - } - - private fun isDownloadsDocument(uri: Uri): Boolean { - return "com.android.providers.downloads.documents" == uri.authority - } - - private fun isMediaDocument(uri: Uri): Boolean { - return "com.android.providers.media.documents" == uri.authority - } - } -} diff --git a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/MainActivity.kt b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/MainActivity.kt index c14e4f145..9bd1b7676 100644 --- a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/MainActivity.kt +++ b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/MainActivity.kt @@ -28,7 +28,6 @@ import org.kenjinx.android.viewmodels.MainViewModel import org.kenjinx.android.viewmodels.QuickSettings import org.kenjinx.android.viewmodels.GameModel import org.kenjinx.android.views.MainView -import android.content.Context import android.content.pm.ActivityInfo import android.hardware.display.DisplayManager import android.view.Surface @@ -231,7 +230,7 @@ class MainActivity : BaseActivity() { } uiHandler = UiHandler() - displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager + displayManager = getSystemService(DISPLAY_SERVICE) as DisplayManager mainViewModel = MainViewModel(this) mainViewModel!!.physicalControllerManager = physicalControllerManager diff --git a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/MotionSensorManager.kt b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/MotionSensorManager.kt index adf8041ae..e5d787936 100644 --- a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/MotionSensorManager.kt +++ b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/MotionSensorManager.kt @@ -22,7 +22,7 @@ class MotionSensorManager(val activity: MainActivity) : SensorEventListener2 { accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) gyro = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) setOrientation90() - var orientationListener = object : OrientationEventListener(activity) { + object : OrientationEventListener(activity) { override fun onOrientationChanged(orientation: Int) { when { isWithinOrientationRange(orientation, 270) -> { diff --git a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/providers/DocumentProvider.kt b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/providers/DocumentProvider.kt index 28c8fcbff..6dbd8f6aa 100644 --- a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/providers/DocumentProvider.kt +++ b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/providers/DocumentProvider.kt @@ -217,7 +217,7 @@ class DocumentProvider : DocumentsProvider() { ) removeDocument(sourceDocumentId, sourceParentDocumentId) return newDocumentId - } catch (e: FileNotFoundException) { + } catch (_: FileNotFoundException) { throw FileNotFoundException("Couldn't move document '$sourceDocumentId'") } } diff --git a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/ui/theme/Theme.kt b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/ui/theme/Theme.kt index 6e780ae28..472989f4e 100644 --- a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/ui/theme/Theme.kt +++ b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/ui/theme/Theme.kt @@ -45,11 +45,12 @@ private val LightColorScheme = lightColorScheme( onSurface = Gray10, ) +@Suppress("DEPRECATION") @Composable fun KenjinxAndroidTheme( darkTheme: Boolean = isSystemInDarkTheme(), // Dynamic color is available on Android 12+ - dynamicColor: Boolean = false, // Cambiato da true a false per usare i nostri colori personalizzati + dynamicColor: Boolean = false, // Changed from true to false to use our custom colors content: @Composable () -> Unit ) { val colorScheme = when { diff --git a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/GameModel.kt b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/GameModel.kt index 9683c801e..24001526e 100644 --- a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/GameModel.kt +++ b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/GameModel.kt @@ -73,7 +73,7 @@ class GameModel(var file: DocumentFile, val context: Context) { context.contentResolver.openFileDescriptor(file.uri, "rw") return updateDescriptor?.fd ?: -1 - } catch (e: Exception) { + } catch (_: Exception) { return -2 } } diff --git a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/MainViewModel.kt b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/MainViewModel.kt index cb24d5730..d7bcb18fa 100644 --- a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/MainViewModel.kt +++ b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/MainViewModel.kt @@ -33,9 +33,9 @@ class MainViewModel(val activity: MainActivity) { var controller: GameController? = null var performanceManager: PerformanceManager? = null var selected: GameModel? = null - val loadGameModel: MutableState = mutableStateOf(null) - val bootPath: MutableState = mutableStateOf(null) - val forceNceAndPptc: MutableState = mutableStateOf(false) + val loadGameModel: MutableState = mutableStateOf(null) + val bootPath: MutableState = mutableStateOf(null) + val forceNceAndPptc: MutableState = mutableStateOf(false) var isMiiEditorLaunched = false val userViewModel = UserViewModel() val logging = Logging(this) @@ -114,7 +114,7 @@ class MainViewModel(val activity: MainActivity) { if(overrideSettings == true) { - settings.overrideSettings(forceNceAndPptc); + settings.overrideSettings(forceNceAndPptc) } var success = KenjinxNative.graphicsInitialize( diff --git a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/SettingsViewModel.kt b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/SettingsViewModel.kt index e453afac2..7f522425f 100644 --- a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/SettingsViewModel.kt +++ b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/SettingsViewModel.kt @@ -329,6 +329,7 @@ class SettingsViewModel(val activity: MainActivity) { } finally { MainActivity.mainViewModel?.refreshFirmwareVersion() installState.value = FirmwareInstallState.Done + descriptor.close() } } } @@ -401,7 +402,7 @@ class SettingsViewModel(val activity: MainActivity) { if (!header.isDirectory) { val bos = BufferedOutputStream(FileOutputStream(filePath)) val bytesIn = ByteArray(4096) - var read: Int = 0 + var read = 0 while (zip.read(bytesIn).also { read = it } > 0) { bos.write(bytesIn, 0, read) } diff --git a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/TitleUpdateViewModel.kt b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/TitleUpdateViewModel.kt index cdaabc468..a2bf41488 100644 --- a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/TitleUpdateViewModel.kt +++ b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/TitleUpdateViewModel.kt @@ -46,7 +46,7 @@ class TitleUpdateViewModel(val titleId: String) { uri, Intent.FLAG_GRANT_READ_URI_PERMISSION ) - } catch (securityException: SecurityException) { + } catch (_: SecurityException) { } } diff --git a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/GameViews.kt b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/GameViews.kt index 13c8fbb77..8ae382828 100644 --- a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/GameViews.kt +++ b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/GameViews.kt @@ -20,6 +20,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.mutableDoubleStateOf +import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -33,7 +34,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.window.Popup -import androidx.compose.ui.draw.alpha // ← NEU +import androidx.compose.ui.draw.alpha import compose.icons.CssGgIcons import compose.icons.cssggicons.ToolbarBottom import org.kenjinx.android.GameController @@ -45,6 +46,7 @@ import org.kenjinx.android.viewmodels.MainViewModel import org.kenjinx.android.viewmodels.QuickSettings import org.kenjinx.android.viewmodels.VSyncMode import org.kenjinx.android.widgets.SimpleAlertDialog +import java.util.Locale import kotlin.math.roundToInt class GameViews { @@ -82,7 +84,7 @@ class GameViews { val enableMotion = remember { mutableStateOf(QuickSettings(mainViewModel.activity).enableMotion) } val showMore = remember { mutableStateOf(false) } val showLoading = remember { mutableStateOf(true) } - val progressValue = remember { mutableStateOf(0.0f) } + val progressValue = remember { mutableFloatStateOf(0.0f) } val progress = remember { mutableStateOf("Loading") } // --- Read overlay settings @@ -90,7 +92,7 @@ class GameViews { mutableStateOf(QuickSettings(mainViewModel.activity).overlayMenuPosition) } val overlayOpacityState = remember { - mutableStateOf(QuickSettings(mainViewModel.activity).overlayMenuOpacity.coerceIn(0f, 1f)) + mutableFloatStateOf(QuickSettings(mainViewModel.activity).overlayMenuOpacity.coerceIn(0f, 1f)) } // Auxiliary mapping position → alignment @@ -160,7 +162,7 @@ class GameViews { modifier = Modifier .align(overlayAlignment()) .padding(8.dp) - .alpha(overlayOpacityState.value) // 0f = unsichtbar, aber weiter klickbar + .alpha(overlayOpacityState.floatValue) // 0f = invisible, but still clickable ) { IconButton(modifier = Modifier.padding(4.dp), onClick = { showMore.value = true @@ -174,7 +176,7 @@ class GameViews { if (showMore.value) { Popup( - alignment = overlayAlignment(), // --- NEU: Panel an gleicher Position + alignment = overlayAlignment(), // --- Panel in the same position onDismissRequest = { showMore.value = false } ) { Surface( @@ -264,7 +266,7 @@ class GameViews { SimpleAlertDialog.Progress( showDialog = showLoading, progressText = progress.value, - progressValue = progressValue.value + progressValue = progressValue.floatValue ) SimpleAlertDialog.Confirmation( @@ -302,9 +304,9 @@ class GameViews { var gameTimeVal = 0.0 if (!gameTime.doubleValue.isInfinite()) gameTimeVal = gameTime.doubleValue - Text(text = "${String.format("%.3f", fifo.doubleValue)} %") - Text(text = "${String.format("%.3f", gameFps.doubleValue)} FPS") - Text(text = "${String.format("%.3f", gameTimeVal)} ms") + Text(text = "${String.format(Locale.getDefault(), "%.3f", fifo.doubleValue)} %") + Text(text = "${String.format(Locale.getDefault(), "%.3f", gameFps.doubleValue)} FPS") + Text(text = "${String.format(Locale.getDefault(), "%.3f", gameTimeVal)} ms") Box(modifier = Modifier.width(96.dp)) { Column { LazyColumn { diff --git a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/HomeViews.kt b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/HomeViews.kt index 5afc35773..fd9e3c206 100644 --- a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/HomeViews.kt +++ b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/HomeViews.kt @@ -44,10 +44,10 @@ import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.OutlinedTextFieldDefaults import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.Text -import androidx.compose.material3.TextFieldDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState @@ -255,10 +255,14 @@ class HomeViews { leadingIcon = { Icon(Icons.Filled.Search, contentDescription = "Search") }, singleLine = true, shape = RoundedCornerShape(8.dp), - colors = TextFieldDefaults.outlinedTextFieldColors( - focusedBorderColor = MaterialTheme.colorScheme.primary, - unfocusedBorderColor = MaterialTheme.colorScheme.outline - ) + colors = OutlinedTextFieldDefaults.colors( + focusedContainerColor = Color.Transparent, + unfocusedContainerColor = Color.Transparent, + disabledContainerColor = Color.Transparent, + errorContainerColor = Color.Transparent, + focusedBorderColor = MaterialTheme.colorScheme.primary, + unfocusedBorderColor = MaterialTheme.colorScheme.outline, + ) ) } }, @@ -332,7 +336,7 @@ class HomeViews { if (this.isNotEmpty() && (query.value.trim() .isEmpty() || this.lowercase(Locale.getDefault()) .contains(query.value))) { - Box(modifier = Modifier.animateItemPlacement()) { + Box(modifier = Modifier.animateItem()) { ListGameItem( it, viewModel, @@ -386,7 +390,7 @@ class HomeViews { viewModel.mainViewModel.loadGameModel.value!!, true, viewModel.mainViewModel.forceNceAndPptc.value - ) ?: false + ) if (success == 1) { launchOnUiThread { viewModel.mainViewModel.navigateToGame() @@ -588,7 +592,7 @@ class HomeViews { } Column { Text(text = gameModel.version ?: "") - Text(text = String.format("%.3f", gameModel.fileSize)) + Text(text = String.format(Locale.getDefault(), "%.3f", gameModel.fileSize)) } } } diff --git a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/SettingViews.kt b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/SettingViews.kt index 419c5b24f..2d0f4f565 100644 --- a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/SettingViews.kt +++ b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/SettingViews.kt @@ -106,8 +106,8 @@ class SettingViews { val enablePptc = remember { mutableStateOf(false) } val enableLowPowerPptc = remember { mutableStateOf(false) } val enableJitCacheEviction = remember { mutableStateOf(false) } - var enableFsIntegrityChecks = remember { mutableStateOf(false) } - var fsGlobalAccessLogMode = remember { mutableIntStateOf(0) } + val enableFsIntegrityChecks = remember { mutableStateOf(false) } + val fsGlobalAccessLogMode = remember { mutableIntStateOf(0) } val ignoreMissingServices = remember { mutableStateOf(false) } val enableShaderCache = remember { mutableStateOf(false) } val enableTextureRecompression = remember { mutableStateOf(false) } @@ -125,7 +125,7 @@ class SettingViews { val showDataImportDialog = remember { mutableStateOf(false) } val dataResetState = remember { mutableStateOf(DataResetState.Query) } val dataImportState = remember { mutableStateOf(DataImportState.File) } - var dataFile = remember { mutableStateOf(null) } + val dataFile = remember { mutableStateOf(null) } val isGrid = remember { mutableStateOf(true) } val useSwitchLayout = remember { mutableStateOf(true) } val enableMotion = remember { mutableStateOf(true) } @@ -1336,7 +1336,7 @@ class SettingViews { ) - var isDriverSelectorOpen = remember { mutableStateOf(false) } + val isDriverSelectorOpen = remember { mutableStateOf(false) } Row( modifier = Modifier diff --git a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/VulkanDriverViews.kt b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/VulkanDriverViews.kt index a74d764d5..41233c49c 100644 --- a/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/VulkanDriverViews.kt +++ b/src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/VulkanDriverViews.kt @@ -28,6 +28,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment @@ -42,11 +43,11 @@ class VulkanDriverViews { companion object { @Composable fun Main(activity: MainActivity, openDialog: MutableState) { - var driverViewModel = VulkanDriverViewModel(activity) - var isChanged = remember { mutableStateOf(false) } - var refresh = remember { mutableStateOf(false) } - var drivers = driverViewModel.getAvailableDrivers() - var selectedDriver = remember { mutableStateOf(0) } + val driverViewModel = VulkanDriverViewModel(activity) + val isChanged = remember { mutableStateOf(false) } + val refresh = remember { mutableStateOf(false) } + val drivers = driverViewModel.getAvailableDrivers() + val selectedDriver = remember { mutableIntStateOf(0) } if (refresh.value) { isChanged.value = true @@ -54,7 +55,7 @@ class VulkanDriverViews { } if (!isChanged.value) { - selectedDriver.value = + selectedDriver.intValue = drivers.indexOfFirst { it.driverPath == driverViewModel.selected } + 1 isChanged.value = true } @@ -75,7 +76,7 @@ class VulkanDriverViews { onClick = { driverViewModel.add(refresh) refresh.value = true - selectedDriver.value = 0 + selectedDriver.intValue = 0 driverViewModel.selected = "" } ) { @@ -132,16 +133,16 @@ class VulkanDriverViews { .fillMaxWidth() .padding(vertical = 4.dp) .clickable { - selectedDriver.value = 0 + selectedDriver.intValue = 0 isChanged.value = true driverViewModel.selected = "" }, verticalAlignment = Alignment.CenterVertically ) { RadioButton( - selected = selectedDriver.value == 0 || driverViewModel.selected.isEmpty(), + selected = selectedDriver.intValue == 0 || driverViewModel.selected.isEmpty(), onClick = { - selectedDriver.value = 0 + selectedDriver.intValue = 0 isChanged.value = true driverViewModel.selected = "" } @@ -155,7 +156,7 @@ class VulkanDriverViews { } var driverIndex = 1 for (driver in drivers) { - var ind = driverIndex + val ind = driverIndex Row( modifier = Modifier .fillMaxWidth() @@ -163,16 +164,16 @@ class VulkanDriverViews { vertical = 4.dp ) .clickable { - selectedDriver.value = ind + selectedDriver.intValue = ind isChanged.value = true driverViewModel.selected = driver.driverPath }, verticalAlignment = Alignment.CenterVertically ) { RadioButton( - selected = selectedDriver.value == ind, + selected = selectedDriver.intValue == ind, onClick = { - selectedDriver.value = ind + selectedDriver.intValue = ind isChanged.value = true driverViewModel.selected = driver.driverPath }