From 81483e7f482622dd38f2236925664d7bc6235048 Mon Sep 17 00:00:00 2001 From: TCFDONMEZ Date: Wed, 30 Sep 2026 12:04:40 +0300 Subject: [PATCH] Add weekly and monthly consumption periods --- FatihsMG4-unstable-2.2.22.apk.sha256 | 1 - FatihsMG4-unstable-2.2.23.apk.sha256 | 1 - FatihsMG4-unstable-2.2.24.apk.sha256 | 1 + app/build.gradle | 4 +- .../com/evsuite/abrp/ConsumptionTracker.java | 43 ++++++++++++++----- .../java/com/evsuite/abrp/MainActivity.java | 8 ++-- app/src/main/res/layout/pane_consumption.xml | 6 +-- 7 files changed, 42 insertions(+), 22 deletions(-) delete mode 100644 FatihsMG4-unstable-2.2.22.apk.sha256 delete mode 100644 FatihsMG4-unstable-2.2.23.apk.sha256 create mode 100644 FatihsMG4-unstable-2.2.24.apk.sha256 diff --git a/FatihsMG4-unstable-2.2.22.apk.sha256 b/FatihsMG4-unstable-2.2.22.apk.sha256 deleted file mode 100644 index 85bbe4d..0000000 --- a/FatihsMG4-unstable-2.2.22.apk.sha256 +++ /dev/null @@ -1 +0,0 @@ -db95c341f6b975d9b4b9dceea79adb0b3829a0bafe8a86ea31d5b7e4012206b0 FatihsMG4-unstable-2.2.22.apk diff --git a/FatihsMG4-unstable-2.2.23.apk.sha256 b/FatihsMG4-unstable-2.2.23.apk.sha256 deleted file mode 100644 index 87982b4..0000000 --- a/FatihsMG4-unstable-2.2.23.apk.sha256 +++ /dev/null @@ -1 +0,0 @@ -d905ad99a0479e85460a248116ce85b50a58759f2da38146a2654e70dfc0051e FatihsMG4-unstable-2.2.23.apk diff --git a/FatihsMG4-unstable-2.2.24.apk.sha256 b/FatihsMG4-unstable-2.2.24.apk.sha256 new file mode 100644 index 0000000..e24cf4a --- /dev/null +++ b/FatihsMG4-unstable-2.2.24.apk.sha256 @@ -0,0 +1 @@ +c2c11f712ebc3052d30725b536a7efee06ad9de9e1700e852e10264fe083f8eb FatihsMG4-unstable-2.2.24.apk diff --git a/app/build.gradle b/app/build.gradle index ba41019..72833f0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,8 +34,8 @@ android { applicationId "com.evsuite.abrp" minSdk 27 targetSdk 36 - versionCode 40 - versionName "2.2.23" + versionCode 41 + versionName "2.2.24" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/evsuite/abrp/ConsumptionTracker.java b/app/src/main/java/com/evsuite/abrp/ConsumptionTracker.java index 57a6873..133b83b 100644 --- a/app/src/main/java/com/evsuite/abrp/ConsumptionTracker.java +++ b/app/src/main/java/com/evsuite/abrp/ConsumptionTracker.java @@ -5,9 +5,14 @@ import android.content.SharedPreferences; import com.evsuite.hardware.telemetry.EnergySnapshot; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.WeekFields; + /** Persistent, read-only trip/lifetime integration patterned after DriveHub_Dort. */ final class ConsumptionTracker { - enum Period { START, MOTOR, LIFETIME, TRIP_A, TRIP_B } + enum Period { LIFETIME, WEEK, MONTH, TRIP_A, TRIP_B } static final class Totals { final double km, kwh, hours, soc; @@ -24,20 +29,23 @@ final class ConsumptionTracker { } private final SharedPreferences prefs; - private Totals start = zero(), motor = zero(), lifetime, tripA, tripB; + private Totals lifetime, week, month, tripA, tripB; + private String weekId, monthId; private long lastMs; private Float lastSpeed, lastPower, lastSoc; - private Boolean lastParked; private ConsumptionTracker(Context context) { prefs = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE); - lifetime = load("life"); tripA = load("a"); tripB = load("b"); + lifetime = load("life"); week = load("week"); month = load("month"); + tripA = load("a"); tripB = load("b"); + weekId = prefs.getString("week_id", ""); + monthId = prefs.getString("month_id", ""); + rollPeriods(System.currentTimeMillis()); } synchronized void sample(EnergySnapshot s) { long now = s.getTimestampMs(); - Boolean parked = s.getParked(); - if (Boolean.FALSE.equals(parked) && !Boolean.FALSE.equals(lastParked)) motor = zero(); + rollPeriods(now); if (lastMs > 0 && now > lastMs) { double hours = (now - lastMs) / 3_600_000d; // Never bridge a process pause/sleep into invented driving data. @@ -50,21 +58,21 @@ final class ConsumptionTracker { ((lastPower == null ? power : lastPower) + power) * 0.5d * hours; double dsoc = (lastSoc == null || s.getSocPercent() == null || Boolean.TRUE.equals(s.getChargePortConnected())) ? 0d : lastSoc - s.getSocPercent(); - start = add(start, km, kwh, hours, dsoc); lifetime = add(lifetime, km, kwh, hours, dsoc); + week = add(week, km, kwh, hours, dsoc); + month = add(month, km, kwh, hours, dsoc); tripA = add(tripA, km, kwh, hours, dsoc); tripB = add(tripB, km, kwh, hours, dsoc); - if (Boolean.FALSE.equals(parked)) motor = add(motor, km, kwh, hours, dsoc); persist(); } } lastMs = now; lastSpeed = s.getSpeedKmh(); lastPower = s.getBatteryPowerKw(); - lastSoc = s.getSocPercent(); lastParked = parked; + lastSoc = s.getSocPercent(); } synchronized Totals totals(Period period) { switch (period) { - case START: return start; case MOTOR: return motor; case TRIP_A: return tripA; + case WEEK: return week; case MONTH: return month; case TRIP_A: return tripA; case TRIP_B: return tripB; default: return lifetime; } } @@ -78,10 +86,23 @@ final class ConsumptionTracker { synchronized void persist() { SharedPreferences.Editor e = prefs.edit(); - save(e, "life", lifetime); save(e, "a", tripA); save(e, "b", tripB); + save(e, "life", lifetime); save(e, "week", week); save(e, "month", month); + save(e, "a", tripA); save(e, "b", tripB); + e.putString("week_id", weekId).putString("month_id", monthId); e.commit(); } + private void rollPeriods(long nowMs) { + LocalDate date = Instant.ofEpochMilli(nowMs).atZone(ZoneId.systemDefault()).toLocalDate(); + WeekFields iso = WeekFields.ISO; + String currentWeek = date.get(iso.weekBasedYear()) + "-W" + date.get(iso.weekOfWeekBasedYear()); + String currentMonth = date.getYear() + "-" + date.getMonthValue(); + boolean changed = false; + if (!currentWeek.equals(weekId)) { weekId = currentWeek; week = zero(); changed = true; } + if (!currentMonth.equals(monthId)) { monthId = currentMonth; month = zero(); changed = true; } + if (changed) persist(); + } + private Totals load(String key) { return new Totals(bits(key,"km"), bits(key,"kwh"), bits(key,"h"), bits(key,"soc")); } private double bits(String key, String field) { return Double.longBitsToDouble(prefs.getLong(key + "_" + field, 0L)); } private static void save(SharedPreferences.Editor e, String key, Totals t) { diff --git a/app/src/main/java/com/evsuite/abrp/MainActivity.java b/app/src/main/java/com/evsuite/abrp/MainActivity.java index acd4d0b..85ca75c 100644 --- a/app/src/main/java/com/evsuite/abrp/MainActivity.java +++ b/app/src/main/java/com/evsuite/abrp/MainActivity.java @@ -830,8 +830,8 @@ public class MainActivity extends AppCompatActivity { consumptionSoc = consumptionPane.findViewById(R.id.consumption_soc); consumptionReset = consumptionPane.findViewById(R.id.consumption_reset); bindPeriodButton(R.id.consumption_lifetime, ConsumptionTracker.Period.LIFETIME); - bindPeriodButton(R.id.consumption_start, ConsumptionTracker.Period.START); - bindPeriodButton(R.id.consumption_motor, ConsumptionTracker.Period.MOTOR); + bindPeriodButton(R.id.consumption_week, ConsumptionTracker.Period.WEEK); + bindPeriodButton(R.id.consumption_month, ConsumptionTracker.Period.MONTH); bindPeriodButton(R.id.consumption_trip_a, ConsumptionTracker.Period.TRIP_A); bindPeriodButton(R.id.consumption_trip_b, ConsumptionTracker.Period.TRIP_B); selectPeriodButton(R.id.consumption_lifetime); @@ -860,8 +860,8 @@ public class MainActivity extends AppCompatActivity { } private void selectPeriodButton(int selectedId) { - int[] ids = {R.id.consumption_lifetime, R.id.consumption_start, - R.id.consumption_motor, R.id.consumption_trip_a, R.id.consumption_trip_b}; + int[] ids = {R.id.consumption_lifetime, R.id.consumption_week, + R.id.consumption_month, R.id.consumption_trip_a, R.id.consumption_trip_b}; for (int id : ids) { MaterialButton button = consumptionPane.findViewById(id); boolean selected = id == selectedId; diff --git a/app/src/main/res/layout/pane_consumption.xml b/app/src/main/res/layout/pane_consumption.xml index ef43c70..22ae588 100644 --- a/app/src/main/res/layout/pane_consumption.xml +++ b/app/src/main/res/layout/pane_consumption.xml @@ -6,8 +6,8 @@ - - + + @@ -22,6 +22,6 @@ - +