Skip to content

Commit c973c55

Browse files
committed
feat: New Debug for Hazards
1 parent 9650bb1 commit c973c55

5 files changed

Lines changed: 89 additions & 0 deletions

File tree

‎app/src/main/java/com/drivehub/kamera/SettingsDialogController.java‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ private Views bindViews(SharedPreferences prefs) {
205205
v.tvDevStatusSignalService = dialog.findViewById(R.id.tvDevStatusSignalService);
206206
v.tvDevStatusRecordingService = dialog.findViewById(R.id.tvDevStatusRecordingService);
207207
v.tvDevStatusTurnLamp = dialog.findViewById(R.id.tvDevStatusTurnLamp);
208+
v.tvDevStatusHazardLights = dialog.findViewById(R.id.tvDevStatusHazardLights);
208209
v.tvDevStatusDashcamEnabled = dialog.findViewById(R.id.tvDevStatusDashcamEnabled);
209210
v.tvDevStatusRecordingState = dialog.findViewById(R.id.tvDevStatusRecordingState);
210211
v.tvDevStatusLastError = dialog.findViewById(R.id.tvDevStatusLastError);
@@ -358,6 +359,7 @@ private void refreshDevStatusSection(String recordingStatus, int activeCameras,
358359
|| views.tvDevStatusSignalService == null
359360
|| views.tvDevStatusRecordingService == null
360361
|| views.tvDevStatusTurnLamp == null
362+
|| views.tvDevStatusHazardLights == null
361363
|| views.tvDevStatusDashcamEnabled == null
362364
|| views.tvDevStatusRecordingState == null
363365
|| views.tvDevStatusLastError == null
@@ -380,6 +382,7 @@ private void refreshDevStatusSection(String recordingStatus, int activeCameras,
380382
views.tvDevStatusRecordingService.setText(activity.getString(
381383
RecordingService.isRunning() ? R.string.settings_status_active : R.string.settings_status_inactive));
382384
views.tvDevStatusTurnLamp.setText(SignalService.getCurrentTurnLampDebugText());
385+
views.tvDevStatusHazardLights.setText(SignalService.getCurrentHazardDebugText(activity));
383386
views.tvDevStatusDashcamEnabled.setText(activity.getString(
384387
UiPrefs.isDashcamEnabled(prefs)
385388
? R.string.settings_status_enabled
@@ -473,6 +476,7 @@ private static final class Views {
473476
TextView tvDevStatusSignalService;
474477
TextView tvDevStatusRecordingService;
475478
TextView tvDevStatusTurnLamp;
479+
TextView tvDevStatusHazardLights;
476480
TextView tvDevStatusDashcamEnabled;
477481
TextView tvDevStatusRecordingState;
478482
TextView tvDevStatusLastError;

‎app/src/main/java/com/drivehub/kamera/SignalService.java‎

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ public class SignalService extends Service {
4040
private static final long HAZARD_TRIGGER_COOLDOWN_MS = 30_000L;
4141

4242
private static final int TURN_PROP_ID = 0x21409326;
43+
private static final int HAZARD_LIGHTS_STATE_PROP_ID = 0x11400e03;
44+
private static final int HAZARD_LIGHTS_SWITCH_PROP_ID = 0x11400e13;
4345
private static final int REVERSE_GEAR_VALUE = 2;
4446
private static final String OEM_AVM_PACKAGE = "com.saicmotor.hmi.aroundview";
4547
public static final String ACTION_ROUTE_CAMERA = "com.drivehub.kamera.ACTION_ROUTE_CAMERA";
@@ -129,6 +131,15 @@ public static String getCurrentTurnLampDebugText() {
129131
}
130132
}
131133

134+
public static String getCurrentHazardDebugText(Context context) {
135+
SignalService inst = sInstance;
136+
if (inst != null) {
137+
return inst.readHazardDebugText();
138+
}
139+
return buildHazardDebugText(readHazardPropertyValue(context, null, HAZARD_LIGHTS_STATE_PROP_ID),
140+
readHazardPropertyValue(context, null, HAZARD_LIGHTS_SWITCH_PROP_ID));
141+
}
142+
132143
@Override
133144
public void onCreate() {
134145
super.onCreate();
@@ -259,6 +270,56 @@ private int readIntMethod(Object target, String methodName, int def) {
259270
return def;
260271
}
261272

273+
private String readHazardDebugText() {
274+
return buildHazardDebugText(
275+
readHazardPropertyValue(this, car, HAZARD_LIGHTS_STATE_PROP_ID),
276+
readHazardPropertyValue(this, car, HAZARD_LIGHTS_SWITCH_PROP_ID)
277+
);
278+
}
279+
280+
private static String buildHazardDebugText(Integer stateValue, Integer switchValue) {
281+
return "state=" + formatHazardDebugValue(stateValue) + " switch=" + formatHazardDebugValue(switchValue);
282+
}
283+
284+
private static String formatHazardDebugValue(Integer value) {
285+
return value == null ? "null" : String.valueOf(value);
286+
}
287+
288+
private static Integer readHazardPropertyValue(Context context, Object existingCar, int propertyId) {
289+
Object localCar = existingCar;
290+
boolean disconnectAfterRead = false;
291+
try {
292+
if (localCar == null) {
293+
Class<?> carClass = Class.forName("android.car.Car");
294+
Method createCar = carClass.getMethod("createCar", Context.class);
295+
localCar = createCar.invoke(null, context);
296+
if (localCar == null) return null;
297+
Method connect = carClass.getMethod("connect");
298+
connect.invoke(localCar);
299+
disconnectAfterRead = true;
300+
}
301+
302+
Method getCarManager = localCar.getClass().getMethod("getCarManager", String.class);
303+
Object propertyManager = getCarManager.invoke(localCar, "property");
304+
if (propertyManager == null) return null;
305+
306+
Method getProperty = propertyManager.getClass().getMethod(
307+
"getProperty", Class.class, int.class, int.class);
308+
Object value = getProperty.invoke(propertyManager, Integer.class, propertyId, 0);
309+
return value instanceof Integer ? (Integer) value : null;
310+
} catch (Throwable ignored) {
311+
return null;
312+
} finally {
313+
if (disconnectAfterRead && localCar != null) {
314+
try {
315+
Method disconnect = localCar.getClass().getMethod("disconnect");
316+
disconnect.invoke(localCar);
317+
} catch (Throwable ignored) {
318+
}
319+
}
320+
}
321+
}
322+
262323
private void updateOverlayDecision() {
263324
// Skip work if nothing changed.
264325
if (currentLamp == lastLamp && currentGear == readCachedGear()) {

‎app/src/main/res/layout/dialog_settings_section_dev_status.xml‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,28 @@
4545

4646
</LinearLayout>
4747

48+
<LinearLayout
49+
android:layout_width="match_parent"
50+
android:layout_height="wrap_content"
51+
android:gravity="center_vertical"
52+
android:minHeight="36dp"
53+
android:orientation="horizontal">
54+
55+
<TextView
56+
style="@style/DrivehubSettingsCardRowLabel"
57+
android:layout_width="0dp"
58+
android:layout_height="wrap_content"
59+
android:layout_weight="1"
60+
android:text="@string/settings_dev_status_hazard_lights" />
61+
62+
<TextView
63+
android:id="@+id/tvDevStatusHazardLights"
64+
style="@style/DrivehubSettingsBodyMuted"
65+
android:layout_width="wrap_content"
66+
android:layout_height="wrap_content" />
67+
68+
</LinearLayout>
69+
4870
<LinearLayout
4971
android:layout_width="match_parent"
5072
android:layout_height="wrap_content"

‎app/src/main/res/values-de/strings.xml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
<string name="settings_dev_status_signal_service">Signal-Listener</string>
5353
<string name="settings_dev_status_recording_service">Recording-Service</string>
5454
<string name="settings_dev_status_turn_lamp">Blinker-Rohwert</string>
55+
<string name="settings_dev_status_hazard_lights">Warnblinker-Rohwert</string>
5556
<string name="settings_dev_status_dashcam_enabled">Dashcam aktiviert</string>
5657
<string name="settings_dev_status_recording_state">Aufnahmezustand</string>
5758
<string name="settings_dev_status_last_error">Letzter Fehler</string>

‎app/src/main/res/values/strings.xml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
<string name="settings_dev_status_signal_service">Signal listener</string>
5353
<string name="settings_dev_status_recording_service">Recording service</string>
5454
<string name="settings_dev_status_turn_lamp">Turn lamp raw</string>
55+
<string name="settings_dev_status_hazard_lights">Hazard raw</string>
5556
<string name="settings_dev_status_dashcam_enabled">Dashcam enabled</string>
5657
<string name="settings_dev_status_recording_state">Recording state</string>
5758
<string name="settings_dev_status_last_error">Last error</string>

0 commit comments

Comments
 (0)