From 75f19e183b8c898b75b2e41235020fe4b6114f2a Mon Sep 17 00:00:00 2001 From: Ahmed Shehata <4982099+ahmed-shehata@users.noreply.github.com> Date: Tue, 12 Mar 2024 22:22:56 +0000 Subject: [PATCH 01/11] fix java version --- .idea/compiler.xml | 2 +- .idea/gradle.xml | 1 + .idea/misc.xml | 2 +- app/build.gradle.kts | 8 ++++---- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index fb7f4a8..b589d56 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index e76fb07..0897082 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -12,6 +12,7 @@ + diff --git a/.idea/misc.xml b/.idea/misc.xml index a14f9ca..266c22b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,7 +4,7 @@ - + diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 917af80..9e90631 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -39,11 +39,11 @@ android { } } compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = "11" + jvmTarget = "17" } buildFeatures { compose = true @@ -64,7 +64,7 @@ room { } kotlin { - jvmToolchain(11) + jvmToolchain(17) } ktlint { From 756bda475f293e8e122e5c57baba50105bab4462 Mon Sep 17 00:00:00 2001 From: Ahmed Shehata <4982099+ahmed-shehata@users.noreply.github.com> Date: Tue, 12 Mar 2024 23:05:11 +0000 Subject: [PATCH 02/11] added vibration basic logic --- .../appsettings/AppOverrideMapper.kt | 2 + .../odintools/data/AppOverrideEntity.kt | 1 + .../odintools/models/VibrationStrength.kt | 52 +++++++++++++++++++ app/src/main/res/values/strings.xml | 7 ++- 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt diff --git a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt index 2c5cb41..b8982c1 100644 --- a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt +++ b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt @@ -10,6 +10,7 @@ import de.langerhans.odintools.models.ControllerStyle import de.langerhans.odintools.models.FanMode import de.langerhans.odintools.models.L2R2Style import de.langerhans.odintools.models.PerfMode +import de.langerhans.odintools.models.VibrationStrength import javax.inject.Inject class AppOverrideMapper @Inject constructor( @@ -44,6 +45,7 @@ class AppOverrideMapper @Inject constructor( val l2R2Style = L2R2Style.getById(app.l2R2Style) val perfMode = PerfMode.getById(app.perfMode) val fanMode = FanMode.getById(app.fanMode) + val vibrationStrength = VibrationStrength.getById(app.vibrationStrength) return AppUiModel( packageName = app.packageName, diff --git a/app/src/main/java/de/langerhans/odintools/data/AppOverrideEntity.kt b/app/src/main/java/de/langerhans/odintools/data/AppOverrideEntity.kt index 057f7f7..e5fb31e 100644 --- a/app/src/main/java/de/langerhans/odintools/data/AppOverrideEntity.kt +++ b/app/src/main/java/de/langerhans/odintools/data/AppOverrideEntity.kt @@ -11,4 +11,5 @@ data class AppOverrideEntity( val l2R2Style: String?, val perfMode: String?, val fanMode: String?, + val vibrationStrength: String? ) diff --git a/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt b/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt new file mode 100644 index 0000000..9cce685 --- /dev/null +++ b/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt @@ -0,0 +1,52 @@ +package de.langerhans.odintools.models + +import androidx.annotation.StringRes +import de.langerhans.odintools.R +import de.langerhans.odintools.tools.ShellExecutor + +sealed class VibrationStrength( + val id: String, + val settingsValue: Int, + @StringRes val textRes: Int, +) { + data object Off : VibrationStrength("vibrationOff", 0, R.string.vibrationOff) + data object Low : VibrationStrength("lowVibration", 1100, R.string.lowVibration) + data object Medium : VibrationStrength("mediumVibration", 2100, R.string.mediumVibration) + data object High : VibrationStrength("highVibration", 3100, R.string.highVibration) + data object Unknown : VibrationStrength("unknown", -1, R.string.unknown) + + fun enable(executor: ShellExecutor) { + if (this != Unknown) { + executor.setIntSystemSetting(KEY_VIBRATION_STRENGTH, settingsValue) + } + } + + companion object { + private const val KEY_VIBRATION_STRENGTH = "vibration_strength" + + fun getMode(executor: ShellExecutor) = when (executor.getIntSystemSetting(KEY_VIBRATION_STRENGTH, Low.settingsValue)) { + Low.settingsValue -> Low + Medium.settingsValue -> Medium + High.settingsValue -> High + Off.settingsValue -> Off + else -> Unknown + } + + fun getById(id: String?) = when (id) { + Low.id -> Low + Medium.id -> Medium + High.id -> High + Off.id -> Off + else -> Unknown + } + + fun getDisabledVibrationStrengths(perfModeKey: String?): List { + return when (perfModeKey) { + PerfMode.Standard.id -> listOf(NoChange.KEY, Unknown.id) + PerfMode.Performance.id -> listOf(NoChange.KEY, Unknown.id, Off.id) + PerfMode.HighPerformance.id -> listOf(NoChange.KEY, Unknown.id, Off.id, Low.id) + else -> emptyList() + } + } + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 573ff5c..e5633ea 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -15,6 +15,11 @@ High Performance Fan Mode Off + Off + Low + Medium + High + Quiet Smart Sport @@ -67,4 +72,4 @@ M2 button Press any button Set Default - \ No newline at end of file + From 50e3b85eee3254c822ad9f738d75b8fcfdd8649b Mon Sep 17 00:00:00 2001 From: Ahmed Shehata <4982099+ahmed-shehata@users.noreply.github.com> Date: Tue, 12 Mar 2024 23:41:27 +0000 Subject: [PATCH 03/11] added db migration + settings list --- .../3.json | 62 +++++++++++++++++++ .../appsettings/AppOverrideListUiModel.kt | 2 + .../appsettings/AppOverrideMapper.kt | 11 +++- .../appsettings/AppOverridesScreen.kt | 14 +++++ .../appsettings/AppOverridesViewModel.kt | 14 +++++ .../langerhans/odintools/data/AppDatabase.kt | 3 +- .../odintools/models/VibrationStrength.kt | 42 +++++-------- 7 files changed, 120 insertions(+), 28 deletions(-) create mode 100644 app/schemas/de.langerhans.odintools.data.AppDatabase/3.json diff --git a/app/schemas/de.langerhans.odintools.data.AppDatabase/3.json b/app/schemas/de.langerhans.odintools.data.AppDatabase/3.json new file mode 100644 index 0000000..e488e6f --- /dev/null +++ b/app/schemas/de.langerhans.odintools.data.AppDatabase/3.json @@ -0,0 +1,62 @@ +{ + "formatVersion": 1, + "database": { + "version": 3, + "identityHash": "aac73d192df08c257d5d6f6d69727aa0", + "entities": [ + { + "tableName": "appoverride", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`packageName` TEXT NOT NULL, `controllerStyle` TEXT, `l2R2Style` TEXT, `perfMode` TEXT, `fanMode` TEXT, `vibrationStrength` TEXT, PRIMARY KEY(`packageName`))", + "fields": [ + { + "fieldPath": "packageName", + "columnName": "packageName", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "controllerStyle", + "columnName": "controllerStyle", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "l2R2Style", + "columnName": "l2R2Style", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "perfMode", + "columnName": "perfMode", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "fanMode", + "columnName": "fanMode", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "vibrationStrength", + "columnName": "vibrationStrength", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": ["packageName"] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'aac73d192df08c257d5d6f6d69727aa0')" + ] + } +} diff --git a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideListUiModel.kt b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideListUiModel.kt index 3c90262..b00a783 100644 --- a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideListUiModel.kt +++ b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideListUiModel.kt @@ -5,6 +5,7 @@ import de.langerhans.odintools.models.ControllerStyle import de.langerhans.odintools.models.FanMode import de.langerhans.odintools.models.L2R2Style import de.langerhans.odintools.models.PerfMode +import de.langerhans.odintools.models.VibrationStrength data class AppOverrideListUiModel( val deviceVersion: String = "", @@ -33,4 +34,5 @@ data class AppUiModel( val l2r2Style: L2R2Style? = null, val fanMode: FanMode? = null, val perfMode: PerfMode? = null, + val vibrationStrength: VibrationStrength? = null, ) diff --git a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt index b8982c1..55e83bf 100644 --- a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt +++ b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt @@ -51,11 +51,12 @@ class AppOverrideMapper @Inject constructor( packageName = app.packageName, appName = context.packageManager.getApplicationLabel(appInfo).toString(), appIcon = context.packageManager.getApplicationIcon(appInfo), - subtitle = getSubtitle(controllerStyle, l2R2Style, perfMode, fanMode), + subtitle = getSubtitle(controllerStyle, l2R2Style, perfMode, fanMode, vibrationStrength), controllerStyle = controllerStyle, l2r2Style = l2R2Style, perfMode = perfMode, fanMode = fanMode, + vibrationStrength = vibrationStrength, ) } @@ -70,7 +71,7 @@ class AppOverrideMapper @Inject constructor( ) } - private fun getSubtitle(controllerStyle: ControllerStyle, l2R2Style: L2R2Style, perfMode: PerfMode, fanMode: FanMode): String? { + private fun getSubtitle(controllerStyle: ControllerStyle, l2R2Style: L2R2Style, perfMode: PerfMode, fanMode: FanMode, vibrationStrength: VibrationStrength): String? { return buildString { if (controllerStyle != ControllerStyle.Unknown) { append(context.getString(R.string.controllerStyle)) @@ -90,6 +91,12 @@ class AppOverrideMapper @Inject constructor( append(context.getString(perfMode.textRes)) append(" | ") } + if (vibrationStrength != VibrationStrength.VibrationUnknown) { + append(context.getString(R.string.vibrationStrength)) + append(": ") + append(context.getString(vibrationStrength.textRes)) + append(" | ") + } if (fanMode != FanMode.Unknown) { append(context.getString(R.string.fanMode)) append(": ") diff --git a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt index 9faee47..08f5693 100644 --- a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt +++ b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt @@ -22,6 +22,7 @@ import de.langerhans.odintools.models.L2R2Style.* import de.langerhans.odintools.models.NoChange import de.langerhans.odintools.models.PerfMode import de.langerhans.odintools.models.PerfMode.* +import de.langerhans.odintools.models.VibrationStrength import de.langerhans.odintools.ui.composables.DeleteConfirmDialog import de.langerhans.odintools.ui.composables.LargeDropdownMenu import de.langerhans.odintools.ui.composables.OdinTopAppBar @@ -154,6 +155,19 @@ fun AppOverridesScreen(viewModel: AppOverridesViewModel = hiltViewModel(), navig onSelectionChanged = { viewModel.perfModeSelected(it) }, modifier = Modifier.padding(bottom = 16.dp), ) + OverrideSpinnerRow( + label = R.string.vibrationStrength, + spinnerItems = listOf( + NoChange.KEY to stringResource(id = NoChange.textRes), + VibrationStrength.VibrationOff.id to stringResource(id = VibrationStrength.VibrationOff.textRes), + VibrationStrength.VibrationLow.id to stringResource(id = VibrationStrength.VibrationLow.textRes), + VibrationStrength.VibrationMedium.id to stringResource(id = VibrationStrength.VibrationMedium.textRes), + VibrationStrength.VibrationHigh.id to stringResource(id = VibrationStrength.VibrationHigh.textRes), + ), + initialSelection = uiState.app?.vibrationStrength?.id ?: NoChange.KEY, + onSelectionChanged = { viewModel.vibrationStrengthSelected(it) }, + modifier = Modifier.padding(bottom = 16.dp), + ) if (uiState.app?.perfMode != null && uiState.app?.perfMode != PerfMode.Unknown) { OverrideSpinnerRow( label = R.string.fanMode, diff --git a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesViewModel.kt b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesViewModel.kt index f280fa2..dc84a12 100644 --- a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesViewModel.kt +++ b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesViewModel.kt @@ -33,6 +33,7 @@ class AppOverridesViewModel @Inject constructor( private var initialControllerStyle = NoChange.KEY private var initialL2R2Style = NoChange.KEY private var initialPerfMode = NoChange.KEY + private var initialVibrationStrength = NoChange.KEY private var initialFanMode = NoChange.KEY init { @@ -47,6 +48,7 @@ class AppOverridesViewModel @Inject constructor( initialControllerStyle = app.controllerStyle ?: NoChange.KEY initialL2R2Style = app.l2R2Style ?: NoChange.KEY initialPerfMode = app.perfMode ?: NoChange.KEY + initialVibrationStrength = app.vibrationStrength ?: NoChange.KEY initialFanMode = app.fanMode ?: NoChange.KEY appOverrideMapper.mapAppOverride(app) @@ -73,6 +75,7 @@ class AppOverridesViewModel @Inject constructor( l2R2Style = _uiState.value.app?.l2r2Style?.id, perfMode = _uiState.value.app?.perfMode?.id, fanMode = _uiState.value.app?.fanMode?.id, + vibrationStrength = _uiState.value.app?.vibrationStrength?.id, ), ) } @@ -157,17 +160,28 @@ class AppOverridesViewModel @Inject constructor( } } + fun vibrationStrengthSelected(key: String) { + _uiState.update { + it.copy( + app = it.app?.copy(vibrationStrength = VibrationStrength.getById(key)), + hasUnsavedChanges = hasUnsavedChanges(vibrationStrength = key), + ) + } + } + private fun hasUnsavedChanges( controllerStyle: String? = null, l2R2Style: String? = null, perfMode: String? = null, fanMode: String? = null, + vibrationStrength: String? = null, ): Boolean { return listOf( (controllerStyle ?: _uiState.value.app?.controllerStyle?.id) != initialControllerStyle, (l2R2Style ?: _uiState.value.app?.l2r2Style?.id) != initialL2R2Style, (perfMode ?: _uiState.value.app?.perfMode?.id) != initialPerfMode, (fanMode ?: _uiState.value.app?.fanMode?.id) != initialFanMode, + (vibrationStrength ?: _uiState.value.app?.vibrationStrength?.id) != initialVibrationStrength, ).any { it } } diff --git a/app/src/main/java/de/langerhans/odintools/data/AppDatabase.kt b/app/src/main/java/de/langerhans/odintools/data/AppDatabase.kt index c0cd89e..dba3b3b 100644 --- a/app/src/main/java/de/langerhans/odintools/data/AppDatabase.kt +++ b/app/src/main/java/de/langerhans/odintools/data/AppDatabase.kt @@ -6,9 +6,10 @@ import androidx.room.RoomDatabase @Database( entities = [AppOverrideEntity::class], - version = 2, + version = 3, autoMigrations = [ AutoMigration(from = 1, to = 2), + AutoMigration(from = 2, to = 3), ], exportSchema = true, ) diff --git a/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt b/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt index 9cce685..191b106 100644 --- a/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt +++ b/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt @@ -9,14 +9,14 @@ sealed class VibrationStrength( val settingsValue: Int, @StringRes val textRes: Int, ) { - data object Off : VibrationStrength("vibrationOff", 0, R.string.vibrationOff) - data object Low : VibrationStrength("lowVibration", 1100, R.string.lowVibration) - data object Medium : VibrationStrength("mediumVibration", 2100, R.string.mediumVibration) - data object High : VibrationStrength("highVibration", 3100, R.string.highVibration) - data object Unknown : VibrationStrength("unknown", -1, R.string.unknown) + data object VibrationOff : VibrationStrength("vibrationOff", 0, R.string.vibrationOff) + data object VibrationLow : VibrationStrength("lowVibration", 1100, R.string.lowVibration) + data object VibrationMedium : VibrationStrength("mediumVibration", 2100, R.string.mediumVibration) + data object VibrationHigh : VibrationStrength("highVibration", 3100, R.string.highVibration) + data object VibrationUnknown : VibrationStrength("unknown", -1, R.string.unknown) fun enable(executor: ShellExecutor) { - if (this != Unknown) { + if (this != VibrationUnknown) { executor.setIntSystemSetting(KEY_VIBRATION_STRENGTH, settingsValue) } } @@ -24,29 +24,21 @@ sealed class VibrationStrength( companion object { private const val KEY_VIBRATION_STRENGTH = "vibration_strength" - fun getMode(executor: ShellExecutor) = when (executor.getIntSystemSetting(KEY_VIBRATION_STRENGTH, Low.settingsValue)) { - Low.settingsValue -> Low - Medium.settingsValue -> Medium - High.settingsValue -> High - Off.settingsValue -> Off - else -> Unknown + fun getMode(executor: ShellExecutor) = when (executor.getIntSystemSetting(KEY_VIBRATION_STRENGTH, VibrationLow.settingsValue)) { + VibrationLow.settingsValue -> VibrationLow + VibrationMedium.settingsValue -> VibrationMedium + VibrationHigh.settingsValue -> VibrationHigh + VibrationOff.settingsValue -> VibrationOff + else -> VibrationUnknown } fun getById(id: String?) = when (id) { - Low.id -> Low - Medium.id -> Medium - High.id -> High - Off.id -> Off - else -> Unknown + VibrationLow.id -> VibrationLow + VibrationMedium.id -> VibrationMedium + VibrationHigh.id -> VibrationHigh + VibrationOff.id -> VibrationOff + else -> VibrationUnknown } - fun getDisabledVibrationStrengths(perfModeKey: String?): List { - return when (perfModeKey) { - PerfMode.Standard.id -> listOf(NoChange.KEY, Unknown.id) - PerfMode.Performance.id -> listOf(NoChange.KEY, Unknown.id, Off.id) - PerfMode.HighPerformance.id -> listOf(NoChange.KEY, Unknown.id, Off.id, Low.id) - else -> emptyList() - } - } } } From 471be9833271d0fba9feb73bd08837663a5b5b5d Mon Sep 17 00:00:00 2001 From: Ahmed Shehata <4982099+ahmed-shehata@users.noreply.github.com> Date: Wed, 13 Mar 2024 00:19:04 +0000 Subject: [PATCH 04/11] fixed saved vibration loading --- .../de/langerhans/odintools/models/VibrationStrength.kt | 4 ++-- .../odintools/service/ForegroundAppWatcherService.kt | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt b/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt index 191b106..6222f8e 100644 --- a/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt +++ b/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt @@ -17,14 +17,14 @@ sealed class VibrationStrength( fun enable(executor: ShellExecutor) { if (this != VibrationUnknown) { - executor.setIntSystemSetting(KEY_VIBRATION_STRENGTH, settingsValue) + executor.setVibrationStrength(settingsValue) } } companion object { private const val KEY_VIBRATION_STRENGTH = "vibration_strength" - fun getMode(executor: ShellExecutor) = when (executor.getIntSystemSetting(KEY_VIBRATION_STRENGTH, VibrationLow.settingsValue)) { + fun getMode(executor: ShellExecutor) = when (executor.getVibrationStrength()) { VibrationLow.settingsValue -> VibrationLow VibrationMedium.settingsValue -> VibrationMedium VibrationHigh.settingsValue -> VibrationHigh diff --git a/app/src/main/java/de/langerhans/odintools/service/ForegroundAppWatcherService.kt b/app/src/main/java/de/langerhans/odintools/service/ForegroundAppWatcherService.kt index 84b73b7..f230930 100644 --- a/app/src/main/java/de/langerhans/odintools/service/ForegroundAppWatcherService.kt +++ b/app/src/main/java/de/langerhans/odintools/service/ForegroundAppWatcherService.kt @@ -15,6 +15,7 @@ import de.langerhans.odintools.models.ControllerStyle.Unknown import de.langerhans.odintools.models.FanMode import de.langerhans.odintools.models.L2R2Style import de.langerhans.odintools.models.PerfMode +import de.langerhans.odintools.models.VibrationStrength import de.langerhans.odintools.tools.ShellExecutor import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -48,6 +49,7 @@ class ForegroundAppWatcherService @Inject constructor() : AccessibilityService() private var savedL2R2Style: L2R2Style? = null private var savedPerfMode: PerfMode? = null private var savedFanMode: FanMode? = null + private var savedVibrationStrength: VibrationStrength? = null private var currentIme = "" private val imeObserver = object : ContentObserver(Handler(Looper.getMainLooper())) { @@ -94,6 +96,7 @@ class ForegroundAppWatcherService @Inject constructor() : AccessibilityService() savedL2R2Style = L2R2Style.getStyle(shellExecutor) savedPerfMode = PerfMode.getMode(shellExecutor) savedFanMode = FanMode.getMode(shellExecutor) + savedVibrationStrength = VibrationStrength.getMode(shellExecutor) } ControllerStyle.getById(override.controllerStyle).takeIf { @@ -124,6 +127,12 @@ class ForegroundAppWatcherService @Inject constructor() : AccessibilityService() savedFanMode?.enable(shellExecutor) } + VibrationStrength.getById(override.vibrationStrength).takeIf { + it != VibrationStrength.VibrationUnknown + }?.enable(shellExecutor) ?: run { + savedVibrationStrength?.enable(shellExecutor) + } + hasSetOverride = true } From c6a05a19ec911e044511a4a8861503c499f4522c Mon Sep 17 00:00:00 2001 From: Ahmed Shehata <4982099+ahmed-shehata@users.noreply.github.com> Date: Wed, 13 Mar 2024 00:30:27 +0000 Subject: [PATCH 05/11] Revert "fix java version" This reverts commit 75f19e183b8c898b75b2e41235020fe4b6114f2a. --- .idea/compiler.xml | 2 +- .idea/gradle.xml | 1 - .idea/misc.xml | 2 +- app/build.gradle.kts | 8 ++++---- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index b589d56..fb7f4a8 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 0897082..e76fb07 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -12,7 +12,6 @@ - diff --git a/.idea/misc.xml b/.idea/misc.xml index 266c22b..a14f9ca 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,7 +4,7 @@ - + diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9e90631..917af80 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -39,11 +39,11 @@ android { } } compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } kotlinOptions { - jvmTarget = "17" + jvmTarget = "11" } buildFeatures { compose = true @@ -64,7 +64,7 @@ room { } kotlin { - jvmToolchain(17) + jvmToolchain(11) } ktlint { From 4fbaf461a9490ca808500dc25eccd72d7908689f Mon Sep 17 00:00:00 2001 From: Ahmed Shehata <4982099+ahmed-shehata@users.noreply.github.com> Date: Wed, 13 Mar 2024 00:49:49 +0000 Subject: [PATCH 06/11] adjusted vibrations --- .../java/de/langerhans/odintools/models/VibrationStrength.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt b/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt index 6222f8e..94b6c45 100644 --- a/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt +++ b/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt @@ -11,8 +11,8 @@ sealed class VibrationStrength( ) { data object VibrationOff : VibrationStrength("vibrationOff", 0, R.string.vibrationOff) data object VibrationLow : VibrationStrength("lowVibration", 1100, R.string.lowVibration) - data object VibrationMedium : VibrationStrength("mediumVibration", 2100, R.string.mediumVibration) - data object VibrationHigh : VibrationStrength("highVibration", 3100, R.string.highVibration) + data object VibrationMedium : VibrationStrength("mediumVibration", 1600, R.string.mediumVibration) + data object VibrationHigh : VibrationStrength("highVibration", 2800, R.string.highVibration) data object VibrationUnknown : VibrationStrength("unknown", -1, R.string.unknown) fun enable(executor: ShellExecutor) { From c8e085eb0ee3752c6076a04f26d0d2dce0b47446 Mon Sep 17 00:00:00 2001 From: Ahmed Shehata <4982099+ahmed-shehata@users.noreply.github.com> Date: Thu, 16 May 2024 23:26:58 +0100 Subject: [PATCH 07/11] changed to numeric values for vibration override --- .../3.json | 122 +++++++++--------- .../appsettings/AppOverrideListUiModel.kt | 3 +- .../appsettings/AppOverrideMapper.kt | 9 +- .../appsettings/AppOverridesScreen.kt | 70 ++++++++-- .../appsettings/AppOverridesViewModel.kt | 21 +-- .../odintools/data/AppOverrideEntity.kt | 2 +- .../odintools/models/VibrationStrength.kt | 44 ------- .../service/ForegroundAppWatcherService.kt | 11 +- .../odintools/tools/ShellExecutor.kt | 10 ++ 9 files changed, 151 insertions(+), 141 deletions(-) delete mode 100644 app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt diff --git a/app/schemas/de.langerhans.odintools.data.AppDatabase/3.json b/app/schemas/de.langerhans.odintools.data.AppDatabase/3.json index e488e6f..9c3ddad 100644 --- a/app/schemas/de.langerhans.odintools.data.AppDatabase/3.json +++ b/app/schemas/de.langerhans.odintools.data.AppDatabase/3.json @@ -1,62 +1,64 @@ { - "formatVersion": 1, - "database": { - "version": 3, - "identityHash": "aac73d192df08c257d5d6f6d69727aa0", - "entities": [ - { - "tableName": "appoverride", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`packageName` TEXT NOT NULL, `controllerStyle` TEXT, `l2R2Style` TEXT, `perfMode` TEXT, `fanMode` TEXT, `vibrationStrength` TEXT, PRIMARY KEY(`packageName`))", - "fields": [ - { - "fieldPath": "packageName", - "columnName": "packageName", - "affinity": "TEXT", - "notNull": true - }, - { - "fieldPath": "controllerStyle", - "columnName": "controllerStyle", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "l2R2Style", - "columnName": "l2R2Style", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "perfMode", - "columnName": "perfMode", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "fanMode", - "columnName": "fanMode", - "affinity": "TEXT", - "notNull": false - }, - { - "fieldPath": "vibrationStrength", - "columnName": "vibrationStrength", - "affinity": "TEXT", - "notNull": false - } - ], - "primaryKey": { - "autoGenerate": false, - "columnNames": ["packageName"] - }, - "indices": [], - "foreignKeys": [] - } + "formatVersion": 1, + "database": { + "version": 3, + "identityHash": "83c89ea9294a5f18c12f79b54aecff49", + "entities": [ + { + "tableName": "appoverride", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`packageName` TEXT NOT NULL, `controllerStyle` TEXT, `l2R2Style` TEXT, `perfMode` TEXT, `fanMode` TEXT, `vibrationStrength` INTEGER, PRIMARY KEY(`packageName`))", + "fields": [ + { + "fieldPath": "packageName", + "columnName": "packageName", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "controllerStyle", + "columnName": "controllerStyle", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "l2R2Style", + "columnName": "l2R2Style", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "perfMode", + "columnName": "perfMode", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "fanMode", + "columnName": "fanMode", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "vibrationStrength", + "columnName": "vibrationStrength", + "affinity": "INTEGER", + "notNull": false + } ], - "views": [], - "setupQueries": [ - "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'aac73d192df08c257d5d6f6d69727aa0')" - ] - } -} + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "packageName" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '83c89ea9294a5f18c12f79b54aecff49')" + ] + } +} \ No newline at end of file diff --git a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideListUiModel.kt b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideListUiModel.kt index b00a783..2cd8537 100644 --- a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideListUiModel.kt +++ b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideListUiModel.kt @@ -5,7 +5,6 @@ import de.langerhans.odintools.models.ControllerStyle import de.langerhans.odintools.models.FanMode import de.langerhans.odintools.models.L2R2Style import de.langerhans.odintools.models.PerfMode -import de.langerhans.odintools.models.VibrationStrength data class AppOverrideListUiModel( val deviceVersion: String = "", @@ -34,5 +33,5 @@ data class AppUiModel( val l2r2Style: L2R2Style? = null, val fanMode: FanMode? = null, val perfMode: PerfMode? = null, - val vibrationStrength: VibrationStrength? = null, + val vibrationStrength: Int? = null, ) diff --git a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt index 55e83bf..a6befbe 100644 --- a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt +++ b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt @@ -10,7 +10,6 @@ import de.langerhans.odintools.models.ControllerStyle import de.langerhans.odintools.models.FanMode import de.langerhans.odintools.models.L2R2Style import de.langerhans.odintools.models.PerfMode -import de.langerhans.odintools.models.VibrationStrength import javax.inject.Inject class AppOverrideMapper @Inject constructor( @@ -45,7 +44,7 @@ class AppOverrideMapper @Inject constructor( val l2R2Style = L2R2Style.getById(app.l2R2Style) val perfMode = PerfMode.getById(app.perfMode) val fanMode = FanMode.getById(app.fanMode) - val vibrationStrength = VibrationStrength.getById(app.vibrationStrength) + val vibrationStrength = app.vibrationStrength return AppUiModel( packageName = app.packageName, @@ -71,7 +70,7 @@ class AppOverrideMapper @Inject constructor( ) } - private fun getSubtitle(controllerStyle: ControllerStyle, l2R2Style: L2R2Style, perfMode: PerfMode, fanMode: FanMode, vibrationStrength: VibrationStrength): String? { + private fun getSubtitle(controllerStyle: ControllerStyle, l2R2Style: L2R2Style, perfMode: PerfMode, fanMode: FanMode, vibrationStrength: Int?): String? { return buildString { if (controllerStyle != ControllerStyle.Unknown) { append(context.getString(R.string.controllerStyle)) @@ -91,10 +90,10 @@ class AppOverrideMapper @Inject constructor( append(context.getString(perfMode.textRes)) append(" | ") } - if (vibrationStrength != VibrationStrength.VibrationUnknown) { + if (vibrationStrength != null) { append(context.getString(R.string.vibrationStrength)) append(": ") - append(context.getString(vibrationStrength.textRes)) + append(vibrationStrength.toString()) append(" | ") } if (fanMode != FanMode.Unknown) { diff --git a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt index 5a45b75..b3b334d 100644 --- a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt +++ b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt @@ -2,6 +2,7 @@ package de.langerhans.odintools.appsettings import androidx.annotation.StringRes import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -14,6 +15,7 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Button import androidx.compose.material3.FilledTonalButton +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Scaffold import androidx.compose.material3.Text @@ -23,6 +25,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment @@ -46,13 +49,15 @@ import de.langerhans.odintools.models.L2R2Style.Both import de.langerhans.odintools.models.L2R2Style.Digital import de.langerhans.odintools.models.NoChange import de.langerhans.odintools.models.PerfMode -import de.langerhans.odintools.models.VibrationStrength import de.langerhans.odintools.models.PerfMode.HighPerformance import de.langerhans.odintools.models.PerfMode.Performance import de.langerhans.odintools.models.PerfMode.Standard +import de.langerhans.odintools.tools.DeviceType +import de.langerhans.odintools.tools.DeviceUtils import de.langerhans.odintools.ui.composables.DeleteConfirmDialog import de.langerhans.odintools.ui.composables.LargeDropdownMenu import de.langerhans.odintools.ui.composables.OdinTopAppBar +import de.langerhans.odintools.ui.composables.VibrationPreferenceDialog import de.langerhans.odintools.ui.theme.Typography @Composable @@ -182,19 +187,17 @@ fun AppOverridesScreen(viewModel: AppOverridesViewModel = hiltViewModel(), navig onSelectionChanged = { viewModel.perfModeSelected(it) }, modifier = Modifier.padding(bottom = 16.dp), ) - OverrideSpinnerRow( - label = R.string.vibrationStrength, - spinnerItems = listOf( - NoChange.KEY to stringResource(id = NoChange.textRes), - VibrationStrength.VibrationOff.id to stringResource(id = VibrationStrength.VibrationOff.textRes), - VibrationStrength.VibrationLow.id to stringResource(id = VibrationStrength.VibrationLow.textRes), - VibrationStrength.VibrationMedium.id to stringResource(id = VibrationStrength.VibrationMedium.textRes), - VibrationStrength.VibrationHigh.id to stringResource(id = VibrationStrength.VibrationHigh.textRes), - ), - initialSelection = uiState.app?.vibrationStrength?.id ?: NoChange.KEY, - onSelectionChanged = { viewModel.vibrationStrengthSelected(it) }, - modifier = Modifier.padding(bottom = 16.dp), - ) +// if (viewModel.getDeviceType() == DeviceType.ODIN2) { + Column { + VibrationPreferenceRow( + label = stringResource(id = R.string.vibrationStrength), + initialValue = uiState.app?.vibrationStrength?: 0, + onSave = { newValue -> + viewModel.vibrationStrengthSelected(newValue) + } + ) + } +// } if (uiState.app?.perfMode != null && uiState.app?.perfMode != PerfMode.Unknown) { OverrideSpinnerRow( label = R.string.fanMode, @@ -281,3 +284,42 @@ fun OverrideSpinnerRow( ) } } + +@Composable +fun VibrationPreferenceRow( + label: String, + initialValue: Int, + onSave: (newValue: Int) -> Unit, + modifier: Modifier = Modifier, +) { + var showDialog by remember { mutableStateOf(false) } + + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = modifier + .padding(8.dp) + ) { + Text( + text = label, + modifier = Modifier + .weight(1f) + .padding(end = 16.dp), + ) + OutlinedButton( + onClick = { showDialog = true } + ) { + Text(text = "$initialValue") + } + } + + if (showDialog) { + VibrationPreferenceDialog( + initialValue = initialValue, + onCancel = { showDialog = false }, + onSave = { newValue -> + onSave(newValue) + showDialog = false + } + ) + } +} diff --git a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesViewModel.kt b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesViewModel.kt index a9585e6..ddc8bd1 100644 --- a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesViewModel.kt +++ b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesViewModel.kt @@ -12,6 +12,7 @@ import de.langerhans.odintools.models.FanMode.Companion.getDisabledFanModes import de.langerhans.odintools.models.L2R2Style import de.langerhans.odintools.models.NoChange import de.langerhans.odintools.models.PerfMode +import de.langerhans.odintools.tools.DeviceType import de.langerhans.odintools.tools.DeviceUtils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow @@ -37,7 +38,7 @@ class AppOverridesViewModel @Inject constructor( private var initialControllerStyle = NoChange.KEY private var initialL2R2Style = NoChange.KEY private var initialPerfMode = NoChange.KEY - private var initialVibrationStrength = NoChange.KEY + private var initialVibrationStrength: Int? = null private var initialFanMode = NoChange.KEY init { @@ -52,7 +53,7 @@ class AppOverridesViewModel @Inject constructor( initialControllerStyle = app.controllerStyle ?: NoChange.KEY initialL2R2Style = app.l2R2Style ?: NoChange.KEY initialPerfMode = app.perfMode ?: NoChange.KEY - initialVibrationStrength = app.vibrationStrength ?: NoChange.KEY + initialVibrationStrength = app.vibrationStrength ?: null initialFanMode = app.fanMode ?: NoChange.KEY appOverrideMapper.mapAppOverride(app) @@ -79,7 +80,7 @@ class AppOverridesViewModel @Inject constructor( l2R2Style = _uiState.value.app?.l2r2Style?.id, perfMode = _uiState.value.app?.perfMode?.id, fanMode = _uiState.value.app?.fanMode?.id, - vibrationStrength = _uiState.value.app?.vibrationStrength?.id, + vibrationStrength = _uiState.value.app?.vibrationStrength, ), ) } @@ -164,28 +165,32 @@ class AppOverridesViewModel @Inject constructor( } } - fun vibrationStrengthSelected(key: String) { + fun vibrationStrengthSelected(strength: Int) { _uiState.update { it.copy( - app = it.app?.copy(vibrationStrength = VibrationStrength.getById(key)), - hasUnsavedChanges = hasUnsavedChanges(vibrationStrength = key), + app = it.app?.copy(vibrationStrength = strength), + hasUnsavedChanges = hasUnsavedChanges(vibrationStrength = strength), ) } } + fun getDeviceType(): DeviceType { + return deviceUtils.getDeviceType() + } + private fun hasUnsavedChanges( controllerStyle: String? = null, l2R2Style: String? = null, perfMode: String? = null, fanMode: String? = null, - vibrationStrength: String? = null, + vibrationStrength: Int? = null, ): Boolean { return listOf( (controllerStyle ?: _uiState.value.app?.controllerStyle?.id) != initialControllerStyle, (l2R2Style ?: _uiState.value.app?.l2r2Style?.id) != initialL2R2Style, (perfMode ?: _uiState.value.app?.perfMode?.id) != initialPerfMode, (fanMode ?: _uiState.value.app?.fanMode?.id) != initialFanMode, - (vibrationStrength ?: _uiState.value.app?.vibrationStrength?.id) != initialVibrationStrength, + (vibrationStrength ?: _uiState.value.app?.vibrationStrength) != initialVibrationStrength, ).any { it } } diff --git a/app/src/main/java/de/langerhans/odintools/data/AppOverrideEntity.kt b/app/src/main/java/de/langerhans/odintools/data/AppOverrideEntity.kt index e5fb31e..6c7a7cd 100644 --- a/app/src/main/java/de/langerhans/odintools/data/AppOverrideEntity.kt +++ b/app/src/main/java/de/langerhans/odintools/data/AppOverrideEntity.kt @@ -11,5 +11,5 @@ data class AppOverrideEntity( val l2R2Style: String?, val perfMode: String?, val fanMode: String?, - val vibrationStrength: String? + val vibrationStrength: Int? ) diff --git a/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt b/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt deleted file mode 100644 index 94b6c45..0000000 --- a/app/src/main/java/de/langerhans/odintools/models/VibrationStrength.kt +++ /dev/null @@ -1,44 +0,0 @@ -package de.langerhans.odintools.models - -import androidx.annotation.StringRes -import de.langerhans.odintools.R -import de.langerhans.odintools.tools.ShellExecutor - -sealed class VibrationStrength( - val id: String, - val settingsValue: Int, - @StringRes val textRes: Int, -) { - data object VibrationOff : VibrationStrength("vibrationOff", 0, R.string.vibrationOff) - data object VibrationLow : VibrationStrength("lowVibration", 1100, R.string.lowVibration) - data object VibrationMedium : VibrationStrength("mediumVibration", 1600, R.string.mediumVibration) - data object VibrationHigh : VibrationStrength("highVibration", 2800, R.string.highVibration) - data object VibrationUnknown : VibrationStrength("unknown", -1, R.string.unknown) - - fun enable(executor: ShellExecutor) { - if (this != VibrationUnknown) { - executor.setVibrationStrength(settingsValue) - } - } - - companion object { - private const val KEY_VIBRATION_STRENGTH = "vibration_strength" - - fun getMode(executor: ShellExecutor) = when (executor.getVibrationStrength()) { - VibrationLow.settingsValue -> VibrationLow - VibrationMedium.settingsValue -> VibrationMedium - VibrationHigh.settingsValue -> VibrationHigh - VibrationOff.settingsValue -> VibrationOff - else -> VibrationUnknown - } - - fun getById(id: String?) = when (id) { - VibrationLow.id -> VibrationLow - VibrationMedium.id -> VibrationMedium - VibrationHigh.id -> VibrationHigh - VibrationOff.id -> VibrationOff - else -> VibrationUnknown - } - - } -} diff --git a/app/src/main/java/de/langerhans/odintools/service/ForegroundAppWatcherService.kt b/app/src/main/java/de/langerhans/odintools/service/ForegroundAppWatcherService.kt index 171107f..32fd885 100644 --- a/app/src/main/java/de/langerhans/odintools/service/ForegroundAppWatcherService.kt +++ b/app/src/main/java/de/langerhans/odintools/service/ForegroundAppWatcherService.kt @@ -16,7 +16,6 @@ import de.langerhans.odintools.models.ControllerStyle.Unknown import de.langerhans.odintools.models.FanMode import de.langerhans.odintools.models.L2R2Style import de.langerhans.odintools.models.PerfMode -import de.langerhans.odintools.models.VibrationStrength import de.langerhans.odintools.tools.BatteryLevelReceiver import de.langerhans.odintools.tools.ShellExecutor import kotlinx.coroutines.CoroutineScope @@ -53,7 +52,7 @@ class ForegroundAppWatcherService @Inject constructor() : AccessibilityService() private var savedL2R2Style: L2R2Style? = null private var savedPerfMode: PerfMode? = null private var savedFanMode: FanMode? = null - private var savedVibrationStrength: VibrationStrength? = null + private var savedVibrationStrength: Int? = null private var currentIme = "" private val imeObserver = object : ContentObserver(Handler(Looper.getMainLooper())) { @@ -102,7 +101,7 @@ class ForegroundAppWatcherService @Inject constructor() : AccessibilityService() savedL2R2Style = L2R2Style.getStyle(executor) savedPerfMode = PerfMode.getMode(executor) savedFanMode = FanMode.getMode(executor) - savedVibrationStrength = VibrationStrength.getMode(executor) + savedVibrationStrength = executor.getVibrationStrength().getOrNull() } ControllerStyle.getById(override.controllerStyle).takeIf { @@ -133,10 +132,8 @@ class ForegroundAppWatcherService @Inject constructor() : AccessibilityService() savedFanMode?.enable(executor) } - VibrationStrength.getById(override.vibrationStrength).takeIf { - it != VibrationStrength.VibrationUnknown - }?.enable(shellExecutor) ?: run { - savedVibrationStrength?.enable(shellExecutor) + if (override.vibrationStrength != null) { + executor.setVibrationStrength(override.vibrationStrength) } hasSetOverride = true diff --git a/app/src/main/java/de/langerhans/odintools/tools/ShellExecutor.kt b/app/src/main/java/de/langerhans/odintools/tools/ShellExecutor.kt index df8d489..778b202 100644 --- a/app/src/main/java/de/langerhans/odintools/tools/ShellExecutor.kt +++ b/app/src/main/java/de/langerhans/odintools/tools/ShellExecutor.kt @@ -146,4 +146,14 @@ class ShellExecutor @Inject constructor() { fun setBooleanValue(file: String, value: Boolean) { setIntValue(file, if (value) 1 else 0) } + + fun getVibrationStrength(): Result { + val defaultValue = 0 + return executeAsRoot("cat /d/haptics/user_vmax_mv") + .mapCatching { it?.toInt() ?: defaultValue } // This throws on RP4 because it has no rumble + } + + fun setVibrationStrength(newValue: Int) { + executeAsRoot("echo $newValue > /d/haptics/user_vmax_mv") + } } From 28b606b4ff445263ddcf82c16f820f0953741201 Mon Sep 17 00:00:00 2001 From: Ahmed Shehata <4982099+ahmed-shehata@users.noreply.github.com> Date: Thu, 16 May 2024 23:29:10 +0100 Subject: [PATCH 08/11] fix typo in settings --- .../de/langerhans/odintools/appsettings/AppOverridesScreen.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt index b3b334d..5aea793 100644 --- a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt +++ b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt @@ -187,7 +187,7 @@ fun AppOverridesScreen(viewModel: AppOverridesViewModel = hiltViewModel(), navig onSelectionChanged = { viewModel.perfModeSelected(it) }, modifier = Modifier.padding(bottom = 16.dp), ) -// if (viewModel.getDeviceType() == DeviceType.ODIN2) { + if (viewModel.getDeviceType() == DeviceType.ODIN2) { Column { VibrationPreferenceRow( label = stringResource(id = R.string.vibrationStrength), @@ -197,7 +197,7 @@ fun AppOverridesScreen(viewModel: AppOverridesViewModel = hiltViewModel(), navig } ) } -// } + } if (uiState.app?.perfMode != null && uiState.app?.perfMode != PerfMode.Unknown) { OverrideSpinnerRow( label = R.string.fanMode, From 3c5076920167b0a0d24186bfa82b32ecbbd61057 Mon Sep 17 00:00:00 2001 From: Ahmed Shehata <4982099+ahmed-shehata@users.noreply.github.com> Date: Thu, 16 May 2024 23:30:09 +0100 Subject: [PATCH 09/11] remove vibration strings --- app/src/main/res/values/strings.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b160735..f3a5b02 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -15,11 +15,6 @@ High Performance Fan Mode Off - Off - Low - Medium - High - Quiet Smart Sport From 1f22e489f6aad278a89398f2a19b950d48ec7f3d Mon Sep 17 00:00:00 2001 From: Ahmed Shehata <4982099+ahmed-shehata@users.noreply.github.com> Date: Fri, 17 May 2024 00:02:22 +0100 Subject: [PATCH 10/11] added reset for vibration overrides --- .../odintools/service/ForegroundAppWatcherService.kt | 5 +++++ .../main/java/de/langerhans/odintools/tools/ShellExecutor.kt | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/de/langerhans/odintools/service/ForegroundAppWatcherService.kt b/app/src/main/java/de/langerhans/odintools/service/ForegroundAppWatcherService.kt index 32fd885..cd14f68 100644 --- a/app/src/main/java/de/langerhans/odintools/service/ForegroundAppWatcherService.kt +++ b/app/src/main/java/de/langerhans/odintools/service/ForegroundAppWatcherService.kt @@ -134,6 +134,8 @@ class ForegroundAppWatcherService @Inject constructor() : AccessibilityService() if (override.vibrationStrength != null) { executor.setVibrationStrength(override.vibrationStrength) + } else { + executor.setVibrationStrength(savedVibrationStrength) } hasSetOverride = true @@ -154,6 +156,9 @@ class ForegroundAppWatcherService @Inject constructor() : AccessibilityService() savedFanMode?.enable(executor) savedFanMode = null + executor.setVibrationStrength(savedVibrationStrength) + savedVibrationStrength = null + hasSetOverride = false } diff --git a/app/src/main/java/de/langerhans/odintools/tools/ShellExecutor.kt b/app/src/main/java/de/langerhans/odintools/tools/ShellExecutor.kt index 778b202..863d636 100644 --- a/app/src/main/java/de/langerhans/odintools/tools/ShellExecutor.kt +++ b/app/src/main/java/de/langerhans/odintools/tools/ShellExecutor.kt @@ -153,7 +153,8 @@ class ShellExecutor @Inject constructor() { .mapCatching { it?.toInt() ?: defaultValue } // This throws on RP4 because it has no rumble } - fun setVibrationStrength(newValue: Int) { + fun setVibrationStrength(newValue: Int?) { + if (newValue == null) return executeAsRoot("echo $newValue > /d/haptics/user_vmax_mv") } } From aafda2b564d4c43d9429202e4016bd2a04281e31 Mon Sep 17 00:00:00 2001 From: Ahmed Shehata <4982099+ahmed-shehata@users.noreply.github.com> Date: Mon, 20 May 2024 00:57:46 +0100 Subject: [PATCH 11/11] ktlint --- .../appsettings/AppOverrideMapper.kt | 8 ++++++- .../appsettings/AppOverridesScreen.kt | 24 +++++++------------ .../odintools/data/AppOverrideEntity.kt | 2 +- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt index a6befbe..3d4adc5 100644 --- a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt +++ b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverrideMapper.kt @@ -70,7 +70,13 @@ class AppOverrideMapper @Inject constructor( ) } - private fun getSubtitle(controllerStyle: ControllerStyle, l2R2Style: L2R2Style, perfMode: PerfMode, fanMode: FanMode, vibrationStrength: Int?): String? { + private fun getSubtitle( + controllerStyle: ControllerStyle, + l2R2Style: L2R2Style, + perfMode: PerfMode, + fanMode: FanMode, + vibrationStrength: Int?, + ): String? { return buildString { if (controllerStyle != ControllerStyle.Unknown) { append(context.getString(R.string.controllerStyle)) diff --git a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt index 5aea793..b17b007 100644 --- a/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt +++ b/app/src/main/java/de/langerhans/odintools/appsettings/AppOverridesScreen.kt @@ -2,7 +2,6 @@ package de.langerhans.odintools.appsettings import androidx.annotation.StringRes import androidx.compose.foundation.Image -import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -15,7 +14,6 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Button import androidx.compose.material3.FilledTonalButton -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Scaffold import androidx.compose.material3.Text @@ -53,7 +51,6 @@ import de.langerhans.odintools.models.PerfMode.HighPerformance import de.langerhans.odintools.models.PerfMode.Performance import de.langerhans.odintools.models.PerfMode.Standard import de.langerhans.odintools.tools.DeviceType -import de.langerhans.odintools.tools.DeviceUtils import de.langerhans.odintools.ui.composables.DeleteConfirmDialog import de.langerhans.odintools.ui.composables.LargeDropdownMenu import de.langerhans.odintools.ui.composables.OdinTopAppBar @@ -187,17 +184,17 @@ fun AppOverridesScreen(viewModel: AppOverridesViewModel = hiltViewModel(), navig onSelectionChanged = { viewModel.perfModeSelected(it) }, modifier = Modifier.padding(bottom = 16.dp), ) - if (viewModel.getDeviceType() == DeviceType.ODIN2) { + if (viewModel.getDeviceType() == DeviceType.ODIN2) { Column { VibrationPreferenceRow( label = stringResource(id = R.string.vibrationStrength), - initialValue = uiState.app?.vibrationStrength?: 0, + initialValue = uiState.app?.vibrationStrength ?: 0, onSave = { newValue -> viewModel.vibrationStrengthSelected(newValue) - } + }, ) } - } + } if (uiState.app?.perfMode != null && uiState.app?.perfMode != PerfMode.Unknown) { OverrideSpinnerRow( label = R.string.fanMode, @@ -286,18 +283,13 @@ fun OverrideSpinnerRow( } @Composable -fun VibrationPreferenceRow( - label: String, - initialValue: Int, - onSave: (newValue: Int) -> Unit, - modifier: Modifier = Modifier, -) { +fun VibrationPreferenceRow(label: String, initialValue: Int, onSave: (newValue: Int) -> Unit, modifier: Modifier = Modifier) { var showDialog by remember { mutableStateOf(false) } Row( verticalAlignment = Alignment.CenterVertically, modifier = modifier - .padding(8.dp) + .padding(8.dp), ) { Text( text = label, @@ -306,7 +298,7 @@ fun VibrationPreferenceRow( .padding(end = 16.dp), ) OutlinedButton( - onClick = { showDialog = true } + onClick = { showDialog = true }, ) { Text(text = "$initialValue") } @@ -319,7 +311,7 @@ fun VibrationPreferenceRow( onSave = { newValue -> onSave(newValue) showDialog = false - } + }, ) } } diff --git a/app/src/main/java/de/langerhans/odintools/data/AppOverrideEntity.kt b/app/src/main/java/de/langerhans/odintools/data/AppOverrideEntity.kt index 6c7a7cd..06cf45b 100644 --- a/app/src/main/java/de/langerhans/odintools/data/AppOverrideEntity.kt +++ b/app/src/main/java/de/langerhans/odintools/data/AppOverrideEntity.kt @@ -11,5 +11,5 @@ data class AppOverrideEntity( val l2R2Style: String?, val perfMode: String?, val fanMode: String?, - val vibrationStrength: Int? + val vibrationStrength: Int?, )