[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.
This commit is contained in:
Alexander Dörflinger
2025-04-22 15:11:44 +02:00
parent d1432ec0d6
commit b69abac2a8
8 changed files with 31 additions and 5 deletions

View File

@@ -2,10 +2,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-feature
android:name="android.hardware.camera.any"
android:required="false" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />

View File

@@ -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);
try {
mCarInfo.removeEvStatusListener(mEvStatusListener);
} catch (final RuntimeException e) {
// Ignore and continue silently.
Log.w(TAG, "unsubscribeFromAllCarInfo: Unsubscribing from experimental API failed");
}
}
/**

View File

@@ -66,6 +66,9 @@ public class CarInfoEnergyLevel extends AbstractCarInfo<EnergyLevel>{
@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<EnergyLevel>{
@Override
boolean getBooleanValue(final EnergyLevel value, final SupportedCarInfo propType) {
if (value == null) {
return false;
}
switch (propType) {
case LOW_ENERGY:
return AndroidAutoConstants.unwrapBooleanValue(value.getEnergyIsLow());

View File

@@ -56,6 +56,9 @@ public class CarInfoEvStatus extends AbstractCarInfo<EvStatus> {
@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());

View File

@@ -45,6 +45,9 @@ public class CarInfoMileage extends AbstractCarInfo<Mileage> {
@Override
float getFloatValue(final Mileage value, final SupportedCarInfo propType) {
if (value == null) {
return -2f;
}
if (propType == SupportedCarInfo.MILEAGE) {
return AndroidAutoConstants.unwrapFloatValue(value.getOdometerMeters());
}

View File

@@ -60,6 +60,9 @@ public class CarInfoModel extends AbstractCarInfo<Model> {
@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<Model> {
@Override
String getStringValue(final Model value, final SupportedCarInfo propType) {
if (value == null) {
return "";
}
switch (propType) {
case MANUFACTURER:
return value.getManufacturer().getValue();

View File

@@ -54,6 +54,9 @@ public class CarInfoSpeed extends AbstractCarInfo<Speed> {
@Override
float getFloatValue(final Speed value, final SupportedCarInfo propType) {
if (value == null) {
return -2f;
}
switch (propType) {
case RAW_SPEED:
return AndroidAutoConstants.unwrapFloatValue(value.getRawSpeedMetersPerSecond());

View File

@@ -45,6 +45,9 @@ public class CarInfoTollCard extends AbstractCarInfo<TollCard> {
@Override
int getIntValue(final TollCard value, final SupportedCarInfo propType) {
if (value == null) {
return -2;
}
if (propType == SupportedCarInfo.TOLL_CARD) {
return AndroidAutoConstants.unwrapIntValue(value.getCardState());
}