diff --git a/app/src/main/java/com/cooper/wheellog/AppConfig.kt b/app/src/main/java/com/cooper/wheellog/AppConfig.kt
index 375112880..ce711046a 100644
--- a/app/src/main/java/com/cooper/wheellog/AppConfig.kt
+++ b/app/src/main/java/com/cooper/wheellog/AppConfig.kt
@@ -756,6 +756,10 @@ class AppConfig(var context: Context): KoinComponent {
get() = getSpecific(R.string.profile_name, "")
set(value) = setSpecific(R.string.profile_name, value)
+ var speedScaling: Float
+ get() = getSpecific(R.string.speed_scaling, 1f)
+ set(value) = setSpecific(R.string.speed_scaling, value)
+
var batteryCapacity: Int
get() = getSpecific(R.string.battery_capacity, 0)
set(value) = setSpecific(R.string.battery_capacity, value)
diff --git a/app/src/main/java/com/cooper/wheellog/WheelData.java b/app/src/main/java/com/cooper/wheellog/WheelData.java
index f1ac38c17..931d14109 100644
--- a/app/src/main/java/com/cooper/wheellog/WheelData.java
+++ b/app/src/main/java/com/cooper/wheellog/WheelData.java
@@ -224,7 +224,7 @@ public boolean isWheelIsReady() {
}
public int getSpeed() {
- return (int) Math.round(mSpeed / 10.0);
+ return (int) Math.round(mSpeed / 10.0 * appConfig.getSpeedScaling());
}
public void setSpeed(int speed) {
@@ -765,7 +765,7 @@ String getRidingTimeString() {
}
public double getSpeedDouble() {
- return mSpeed / 100.0;
+ return mSpeed / 100.0 * appConfig.getSpeedScaling();
}
public double getVoltageDouble() {
@@ -865,11 +865,11 @@ public double getMaxPwm() {
}
public int getTopSpeed() {
- return mTopSpeed;
+ return Math.round(mTopSpeed * appConfig.getSpeedScaling());
}
public double getTopSpeedDouble() {
- return mTopSpeed / 100.0;
+ return mTopSpeed / 100.0 * appConfig.getSpeedScaling();
}
int getDistance() {
diff --git a/app/src/main/java/com/cooper/wheellog/settings/WheelScreen.kt b/app/src/main/java/com/cooper/wheellog/settings/WheelScreen.kt
index afb357293..ffe48bb38 100644
--- a/app/src/main/java/com/cooper/wheellog/settings/WheelScreen.kt
+++ b/app/src/main/java/com/cooper/wheellog/settings/WheelScreen.kt
@@ -1342,6 +1342,16 @@ private fun veteran(appConfig: AppConfig = koinInject()) {
@Composable
private fun forAllWheel(appConfig: AppConfig = koinInject()) {
+ sliderPref(
+ name = stringResource(R.string.speed_scaling_title),
+ desc = stringResource(R.string.speed_scaling_description),
+ position = appConfig.speedScaling.toFloat(),
+ min = 0.8f,
+ max = 1.20f,
+ format = "%.3f",
+ ) {
+ appConfig.speedScaling = it.toFloat()
+ }
sliderPref(
name = stringResource(R.string.battery_capacity_title),
desc = stringResource(R.string.battery_capacity_description),
diff --git a/app/src/main/res/values/constants.xml b/app/src/main/res/values/constants.xml
index f49ed0fbd..ed3dad774 100644
--- a/app/src/main/res/values/constants.xml
+++ b/app/src/main/res/values/constants.xml
@@ -148,6 +148,7 @@
connection_sound
no_connection_sound
use_stop_music
+ speed_scaling
battery_capacity
charging_power
show_unknown_devices
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 09b188c4e..d786326c2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -218,6 +218,8 @@
Period of beeps when connection lost, 0sec - no beeps
Auto mute
Auto mute at speeds below 3.5 km/h
+ Speed scaling
+ Scale the speed output from the wheel
Battery capacity
Battery Capacity in Wh
Charging power