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?,
)