Skip to content

Commit

Permalink
Merge pull request #14 from lockevod/Development
Browse files Browse the repository at this point in the history
Development
  • Loading branch information
lockevod authored Feb 5, 2025
2 parents ad9901c + b124118 commit 6eee6d5
Show file tree
Hide file tree
Showing 28 changed files with 808 additions and 204 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ android {
applicationId = "com.enderthor.kCustomField"
minSdk = 23
targetSdk = 34
versionCode = 202501221
versionName = "2.0"
versionCode = 202502051
versionName = "2.1"
}

buildTypes {
Expand Down
6 changes: 3 additions & 3 deletions app/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
"packageName": "com.enderthor.kCustomField",
"latestApkUrl": "https://github.com/lockevod/Karoo-KDoubleType/releases/latest/download/kdouble.apk",
"iconUrl": "https://github.com/lockevod/Karoo-KDoubleType/releases/latest/download/kdouble.png",
"latestVersion": "2.0",
"latestVersionCode": 202501221,
"latestVersion": "2.1",
"latestVersionCode": 202502051,
"developer": "Enderthor",
"description": "This extension for Karoo allows to use custom fields with double types (HR,Power,etc).",
"releaseNotes": "Added support for Headwind. Added rolling fields. Major code improvements and Bug fixes. "
"releaseNotes": " More messures (more than 30 possibilities), 6 custom fields. Minor Bugs (alignment). Preview updated. Added support for Headwind. Added rolling fields."
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import com.enderthor.kCustomField.R
import io.hammerhead.karooext.models.DataType.Field


data class Quadruple<out A, out B, out C, out D>(
Expand All @@ -14,33 +15,68 @@ data class Quadruple<out A, out B, out C, out D>(
val fourth: D
)

data class Quintuple<out A, out B, out C, out D, out E>(
val first: A,
val second: B,
val third: C,
val fourth: D,
val fifth: E
)

enum class Headwind (val type: String) {
DIFF(DataType.dataTypeId("karoo-headwind", "headwind")),SPEED(DataType.dataTypeId("karoo-headwind", "headwindSpeed"))
}

data class StreamHeadWindData(val diff: Double, val windSpeed: Double)


enum class KarooAction(val action: String, val label: String, val icon: Int, val colorday: Int, val colornight: Int,val zone: String, val convert: String) {
fun getMultiFieldsByAction(karooAction: KarooAction): Triple<String, String,Boolean>? {
return MultiFields.entries.find { it.action == karooAction.action }?.let {
Triple(it.left, it.right,it.onlyfirst)
}
}

enum class MultiFields(val action: String, val left: String, val right: String, val onlyfirst: Boolean)
{
PEDAL(DataType.Type.PEDAL_SMOOTHNESS, Field.PEDAL_SMOOTHNESS_LEFT, Field.PEDAL_SMOOTHNESS_RIGHT,false),
TORQUE(DataType.Type.TORQUE_EFFECTIVENESS, Field.TORQUE_EFFECTIVENESS_LEFT, Field.TORQUE_EFFECTIVENESS_RIGHT,false),
PEDAL_BALANCE(DataType.Type.PEDAL_POWER_BALANCE, Field.PEDAL_POWER_BALANCE_LEFT, Field.PEDAL_POWER_BALANCE_LEFT,true),
AVERAGE_PEDAL_BALANCE(DataType.Type.AVERAGE_PEDAL_POWER_BALANCE, Field.PEDAL_POWER_BALANCE_LEFT, Field.PEDAL_POWER_BALANCE_LEFT,true),
}

enum class KarooAction(val action: String, val label: String, val icon: Int, val colorday: Int, val colornight: Int,val zone: String, val convert: String, val powerField: Boolean = false) {
SPEED(DataType.Type.SPEED, "Speed", R.drawable.ic_speed,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","speed"),
AVERAGE_SPEED(DataType.Type.AVERAGE_SPEED, "Avg Speed", R.drawable.ic_speed_average,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","speed"),
HR(DataType.Type.HEART_RATE, "Heart Rate",R.drawable.ic_hr,R.color.hh_success_green_700,R.color.hh_success_green_400,"heartRateZones","none"),
HR_ZONE(DataType.Type.HR_ZONE, "HR Zone",R.drawable.ic_hr_zone,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
AVERAGE_HR(DataType.Type.AVERAGE_HR, "Avg HR",R.drawable.ic_hr_average,R.color.hh_success_green_700,R.color.hh_success_green_400,"heartRateZones","none"),
HRPERCENT(DataType.Type.PERCENT_MAX_HR, "HR %",R.drawable.ic_hr_per,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
CADENCE(DataType.Type.CADENCE, "Cadence",R.drawable.ic_cadence,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
AVERAGE_CADENCE(DataType.Type.AVERAGE_CADENCE, "Avg Cadence",R.drawable.ic_cadence_average,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
SLOPE(DataType.Type.ELEVATION_GRADE, "Grade",R.drawable.ic_slope,R.color.hh_success_green_700,R.color.hh_success_green_400,"slopeZones","none"),
DISTANCE(DataType.Type.DISTANCE, "Distance",R.drawable.ic_distance,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","distance"),
DISTANCE_REMAIN(DataType.Type.DISTANCE_TO_DESTINATION, "Distance Remain",R.drawable.ic_distance_remain,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","distance"),
POWER(DataType.Type.POWER, "Power", R.drawable.ic_power,R.color.hh_success_green_700,R.color.hh_success_green_400,"powerZones","none"),
POWER3s(DataType.Type.SMOOTHED_3S_AVERAGE_POWER, "Power 3s", R.drawable.ic_power,R.color.hh_success_green_700,R.color.hh_success_green_400,"powerZones","none"),
POWER3s(DataType.Type.SMOOTHED_3S_AVERAGE_POWER, "Power 3s", R.drawable.ic_power_3,R.color.hh_success_green_700,R.color.hh_success_green_400,"powerZones","none"),
POWER20m(DataType.Type.SMOOTHED_20M_AVERAGE_POWER, "Power 20m", R.drawable.ic_power_20,R.color.hh_success_green_700,R.color.hh_success_green_400,"powerZones","none"),
POWER_NORMALIZED(DataType.Type.NORMALIZED_POWER, "Power Normalized", R.drawable.ic_power_norm,R.color.hh_success_green_700,R.color.hh_success_green_400,"powerZones","none"),
POWER_ZONE(DataType.Type.POWER_ZONE, "Power Zone", R.drawable.ic_power_zone,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
AVERAGE_POWER(DataType.Type.AVERAGE_POWER, "Avg Power", R.drawable.ic_power_average,R.color.hh_success_green_700,R.color.hh_success_green_400,"powerZones","none"),
ELEV_GAIN(DataType.Type.ELEVATION_GAIN, "Ascent", R.drawable.ic_elevation,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
ELEV_REMAIN(DataType.Type.ELEVATION_REMAINING, "Ascent Remain", R.drawable.ic_elevation_remain,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
ELEV_GAIN(DataType.Type.ELEVATION_GAIN, "Ascent", R.drawable.ic_ascent,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
ELEV_REMAIN(DataType.Type.ELEVATION_REMAINING, "Ascent Remain", R.drawable.ic_elevation,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
ELEV_LOSS(DataType.Type.ELEVATION_LOSS, "Descent", R.drawable.ic_descent,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
VAM(DataType.Type.VERTICAL_SPEED, "VAM", R.drawable.ic_vam,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
AVERAGE_VAM(DataType.Type.AVERAGE_VERTICAL_SPEED, "Avg VAM", R.drawable.ic_vam_average,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
IF(DataType.Type.INTENSITY_FACTOR, "IF", R.drawable.ic_if,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
TSS(DataType.Type.TRAINING_STRESS_SCORE, "TSS", R.drawable.ic_tss,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
HEADWIND(DataType.dataTypeId("karoo-headwind", "headwind"), "Headwind", R.drawable.ic_tss,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
}
HEADWIND(DataType.dataTypeId("karoo-headwind", "headwind"), "Headwind", R.drawable.ic_no,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
PEDAL(DataType.Type.PEDAL_SMOOTHNESS, "Pedal Smooth", R.drawable.ic_pedal,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none",true),
TORQUE(DataType.Type.TORQUE_EFFECTIVENESS,"Torque", R.drawable.ic_torque,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none",true),
PEDAL_BALANCE(DataType.Type.PEDAL_POWER_BALANCE, "Pedal Balance", R.drawable.ic_pedal_balance,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none",true),
AVERAGE_PEDAL_BALANCE(DataType.Type.AVERAGE_PEDAL_POWER_BALANCE, "Avg Pedal Balance", R.drawable.ic_pedal_balance_average,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none",true),
TIMETODEST(DataType.Type.TIME_TO_DESTINATION, "Time to Dest.", R.drawable.ic_time_to_dest,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
// ETA(DataType.Type.TIME_OF_ARRIVAL, "ETA", R.drawable.ic_eta,R.color.hh_success_green_700,R.color.hh_success_green_400,"none","none"),
}


@Serializable
Expand Down Expand Up @@ -106,7 +142,7 @@ data class DoubleFieldSettings(
var onefield: DoubleFieldType = DoubleFieldType(KarooAction.SPEED, false),
var secondfield: DoubleFieldType = DoubleFieldType(KarooAction.SLOPE, true),
val ishorizontal: Boolean = true,
val isenabled: Boolean = true
val isenabled: Boolean = true,

)

Expand All @@ -127,15 +163,16 @@ data class GeneralSettings(
val isheadwindenabled: Boolean = true,
val refreshCustom: RefreshTime = RefreshTime.HALF,
val refreshRolling: RefreshTime = RefreshTime.HALF,
val isdivider: Boolean = true,
)


val defaultSettings = Json.encodeToString(CustomFieldSettings())
val defaultGeneralSettings = Json.encodeToString(GeneralSettings())
val previewDoubleHorizontalFieldSettings = listOf(DoubleFieldSettings(0, DoubleFieldType(KarooAction.SPEED, false),DoubleFieldType(KarooAction.HR, true),true,true))
val previewDoubleVerticalFieldSettings = listOf(DoubleFieldSettings(0, DoubleFieldType(KarooAction.SPEED, false),DoubleFieldType(KarooAction.HR, true),false,true))
val defaultDoubleFieldSettings = Json.encodeToString(listOf(DoubleFieldSettings(index=0),DoubleFieldSettings(1, DoubleFieldType(KarooAction.CADENCE, false),DoubleFieldType(KarooAction.POWER3s, true),true,true),DoubleFieldSettings(2, DoubleFieldType(KarooAction.IF, false),DoubleFieldType(KarooAction.TSS, false),false,true),DoubleFieldSettings(3, DoubleFieldType(KarooAction.ELEV_GAIN, false),DoubleFieldType(KarooAction.ELEV_REMAIN,false),false,true),DoubleFieldSettings(4, DoubleFieldType(KarooAction.CADENCE, false),DoubleFieldType(KarooAction.SLOPE, true),false,true)))
val previewOneFieldSettings = listOf(OneFieldSettings(index=0),OneFieldSettings(1, OneFieldType(KarooAction.SPEED, false, true),OneFieldType(KarooAction.SPEED, false, false),OneFieldType(KarooAction.SPEED, false, false),RollingTime("ZERO", "0s", 0L)))
val defaultDoubleFieldSettings = Json.encodeToString(listOf(DoubleFieldSettings(index=0),DoubleFieldSettings(1, DoubleFieldType(KarooAction.CADENCE, false),DoubleFieldType(KarooAction.POWER3s, true),true,true),DoubleFieldSettings(2, DoubleFieldType(KarooAction.IF, false),DoubleFieldType(KarooAction.TSS, false),false,true),DoubleFieldSettings(3, DoubleFieldType(KarooAction.ELEV_GAIN, false),DoubleFieldType(KarooAction.ELEV_REMAIN,false),false,true),DoubleFieldSettings(4, DoubleFieldType(KarooAction.CADENCE, false),DoubleFieldType(KarooAction.SLOPE, true),false,true),DoubleFieldSettings(5, DoubleFieldType(KarooAction.CADENCE, false),DoubleFieldType(KarooAction.SLOPE, true),false,true)))
val previewOneFieldSettings = listOf(OneFieldSettings(index=0),OneFieldSettings(1, OneFieldType(KarooAction.SPEED, false, true),OneFieldType(KarooAction.SPEED, false, false),OneFieldType(KarooAction.SPEED, false, false),RollingTime("ZERO", "0s", 0L)),OneFieldSettings(2, OneFieldType(KarooAction.SPEED, false, true),OneFieldType(KarooAction.SPEED, false, false),OneFieldType(KarooAction.SPEED, false, false),RollingTime("ZERO", "0s", 0L)))
val defaultOneFieldSettings = Json.encodeToString(previewOneFieldSettings)
val defaultRollingTimes = listOf(
RollingTime("LOW", "5s", 5000L),
Expand Down
Loading

0 comments on commit 6eee6d5

Please sign in to comment.