feat: prioritize Bluetooth sensor data over GPS

- Restructured sensor logic to give absolute priority to Bluetooth sensors, largely ignoring GPS data for distance and speed calculations.
- Implemented downstream UI expansions, custom recording layouts, and new settings to reflect and control the new sensor-first flow.
- Added MediaNotificationListenerService and integrated media playback tracking within statistics.
- Modified VoiceAnnouncementUtils to harmonize announcements with the updated architecture.
- Added 'About This Fork' section to the README.

Note: These modifications were co-created with Antigravity AI.
This commit is contained in:
2026-09-11 14:02:57 +02:00
parent 00be0b565c
commit 7c6141f98c
50 changed files with 4338 additions and 62 deletions
@@ -92,7 +92,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -132,7 +135,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -172,7 +178,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -212,7 +221,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -254,7 +266,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -276,7 +291,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -316,7 +334,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -338,7 +359,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -378,7 +402,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -418,7 +445,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -458,7 +488,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -498,7 +531,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -520,7 +556,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -560,7 +599,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -582,7 +624,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -610,7 +655,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when
@@ -644,7 +692,10 @@ public class VoiceAnnouncementUtilsTest {
new SensorData<>(HeartRate.of(60), "unused"),
null, null,
null,
null
null,
null,
null,
null
);
// when