From b69abac2a8623cdb8b6f790df8ce2e5d9020181d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20D=C3=B6rflinger?= Date: Tue, 22 Apr 2025 15:11:44 +0200 Subject: [PATCH] [AA] Fixed App crash upon leaving AA Screen The App was crashing as we tried to unsubscrive from an unsupported value. Now a try catch was added to prevent this. --- app/src/main/AndroidManifest.xml | 4 ---- .../auto/model/VehicleInformationHelper.java | 8 +++++++- .../auto/model/carinfo/CarInfoEnergyLevel.java | 6 ++++++ .../familyhelpers/auto/model/carinfo/CarInfoEvStatus.java | 3 +++ .../familyhelpers/auto/model/carinfo/CarInfoMileage.java | 3 +++ .../familyhelpers/auto/model/carinfo/CarInfoModel.java | 6 ++++++ .../familyhelpers/auto/model/carinfo/CarInfoSpeed.java | 3 +++ .../familyhelpers/auto/model/carinfo/CarInfoTollCard.java | 3 +++ 8 files changed, 31 insertions(+), 5 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1f07624..ca54630 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,10 +2,6 @@ - - diff --git a/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/VehicleInformationHelper.java b/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/VehicleInformationHelper.java index a698123..e129d6f 100644 --- a/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/VehicleInformationHelper.java +++ b/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/VehicleInformationHelper.java @@ -25,6 +25,7 @@ import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.OptIn; import androidx.car.app.CarContext; +import androidx.car.app.HostException; import androidx.car.app.annotations.ExperimentalCarApi; import androidx.car.app.hardware.CarHardwareManager; import androidx.car.app.hardware.common.OnCarDataAvailableListener; @@ -204,7 +205,12 @@ public class VehicleInformationHelper { mCarInfo.removeSpeedListener(mSpeedListener); mCarInfo.removeEnergyLevelListener(mEnergyLevelListener); mCarInfo.removeMileageListener(mMileageListener); - mCarInfo.removeEvStatusListener(mEvStatusListener); + try { + mCarInfo.removeEvStatusListener(mEvStatusListener); + } catch (final RuntimeException e) { + // Ignore and continue silently. + Log.w(TAG, "unsubscribeFromAllCarInfo: Unsubscribing from experimental API failed"); + } } /** diff --git a/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoEnergyLevel.java b/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoEnergyLevel.java index ec4a3a5..e83ee46 100644 --- a/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoEnergyLevel.java +++ b/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoEnergyLevel.java @@ -66,6 +66,9 @@ public class CarInfoEnergyLevel extends AbstractCarInfo{ @Override float getFloatValue(final EnergyLevel value, final SupportedCarInfo propType) { + if (value == null) { + return -2f; + } switch (propType) { case BATTERY_PERCENTAGE: return AndroidAutoConstants.unwrapFloatValue(value.getBatteryPercent()); @@ -80,6 +83,9 @@ public class CarInfoEnergyLevel extends AbstractCarInfo{ @Override boolean getBooleanValue(final EnergyLevel value, final SupportedCarInfo propType) { + if (value == null) { + return false; + } switch (propType) { case LOW_ENERGY: return AndroidAutoConstants.unwrapBooleanValue(value.getEnergyIsLow()); diff --git a/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoEvStatus.java b/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoEvStatus.java index a5fcbdb..0ff9487 100644 --- a/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoEvStatus.java +++ b/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoEvStatus.java @@ -56,6 +56,9 @@ public class CarInfoEvStatus extends AbstractCarInfo { @OptIn(markerClass = ExperimentalCarApi.class) @Override boolean getBooleanValue(final EvStatus value, final SupportedCarInfo propType) { + if (value == null) { + return false; + } switch (propType) { case EV_CONNECTOR_STATE: return AndroidAutoConstants.unwrapBooleanValue(value.getEvChargePortConnected()); diff --git a/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoMileage.java b/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoMileage.java index 3df3b4f..9e9f818 100644 --- a/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoMileage.java +++ b/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoMileage.java @@ -45,6 +45,9 @@ public class CarInfoMileage extends AbstractCarInfo { @Override float getFloatValue(final Mileage value, final SupportedCarInfo propType) { + if (value == null) { + return -2f; + } if (propType == SupportedCarInfo.MILEAGE) { return AndroidAutoConstants.unwrapFloatValue(value.getOdometerMeters()); } diff --git a/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoModel.java b/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoModel.java index 7e17a79..2829f69 100644 --- a/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoModel.java +++ b/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoModel.java @@ -60,6 +60,9 @@ public class CarInfoModel extends AbstractCarInfo { @Override int getIntValue(final Model value, final SupportedCarInfo propType) { + if (value == null) { + return -2; + } switch (propType) { case YEAR: return AndroidAutoConstants.unwrapIntValue(value.getYear()); @@ -70,6 +73,9 @@ public class CarInfoModel extends AbstractCarInfo { @Override String getStringValue(final Model value, final SupportedCarInfo propType) { + if (value == null) { + return ""; + } switch (propType) { case MANUFACTURER: return value.getManufacturer().getValue(); diff --git a/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoSpeed.java b/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoSpeed.java index cbc64a1..e38a05d 100644 --- a/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoSpeed.java +++ b/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoSpeed.java @@ -54,6 +54,9 @@ public class CarInfoSpeed extends AbstractCarInfo { @Override float getFloatValue(final Speed value, final SupportedCarInfo propType) { + if (value == null) { + return -2f; + } switch (propType) { case RAW_SPEED: return AndroidAutoConstants.unwrapFloatValue(value.getRawSpeedMetersPerSecond()); diff --git a/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoTollCard.java b/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoTollCard.java index 09726ac..ba62e3a 100644 --- a/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoTollCard.java +++ b/app/src/main/java/com/aldo/apps/familyhelpers/auto/model/carinfo/CarInfoTollCard.java @@ -45,6 +45,9 @@ public class CarInfoTollCard extends AbstractCarInfo { @Override int getIntValue(final TollCard value, final SupportedCarInfo propType) { + if (value == null) { + return -2; + } if (propType == SupportedCarInfo.TOLL_CARD) { return AndroidAutoConstants.unwrapIntValue(value.getCardState()); }