Updating CarHvacManager to comply with dev guidelines and checkstyle.
Fixes: 149916598
Test: atest {CarServiceUnitTest|CtsCarTestCases|CarServiceTest}
Change-Id: I8bf3f721a72dbd86afeb3e8fd0b333f9ffb603b7
Merged-In: I8bf3f721a72dbd86afeb3e8fd0b333f9ffb603b7
diff --git a/car-lib/src/android/car/hardware/hvac/CarHvacManager.java b/car-lib/src/android/car/hardware/hvac/CarHvacManager.java
index f6a2d53..54bda19 100644
--- a/car-lib/src/android/car/hardware/hvac/CarHvacManager.java
+++ b/car-lib/src/android/car/hardware/hvac/CarHvacManager.java
@@ -25,10 +25,14 @@
import android.car.hardware.property.CarPropertyManager;
import android.car.hardware.property.CarPropertyManager.CarPropertyEventCallback;
import android.car.hardware.property.ICarProperty;
+import android.car.hardware.property.PropertyAccessDeniedSecurityException;
+import android.car.hardware.property.PropertyNotAvailableException;
import android.os.IBinder;
import android.util.ArraySet;
import android.util.Log;
+import com.android.internal.annotations.GuardedBy;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
@@ -45,12 +49,15 @@
@Deprecated
@SystemApi
public final class CarHvacManager extends CarManagerBase {
- private final static boolean DBG = false;
- private final static String TAG = "CarHvacManager";
+ private static final boolean DBG = false;
+ private static final String TAG = "CarHvacManager";
private final CarPropertyManager mCarPropertyMgr;
- private final ArraySet<CarHvacEventCallback> mCallbacks = new ArraySet<>();
private CarPropertyEventListenerToBase mListenerToBase = null;
+ private final Object mLock = new Object();
+
+ @GuardedBy("mLock")
+ private final ArraySet<CarHvacEventCallback> mCallbacks = new ArraySet<>();
/**
* HVAC property IDs for get/set methods
@@ -252,7 +259,7 @@
private static class CarPropertyEventListenerToBase implements CarPropertyEventCallback {
private final WeakReference<CarHvacManager> mManager;
- public CarPropertyEventListenerToBase(CarHvacManager manager) {
+ CarPropertyEventListenerToBase(CarHvacManager manager) {
mManager = new WeakReference<>(manager);
}
@@ -275,7 +282,7 @@
private void handleOnChangeEvent(CarPropertyValue value) {
Collection<CarHvacEventCallback> callbacks;
- synchronized (this) {
+ synchronized (mLock) {
callbacks = new ArraySet<>(mCallbacks);
}
if (!callbacks.isEmpty()) {
@@ -287,7 +294,7 @@
private void handleOnErrorEvent(int propertyId, int zone) {
Collection<CarHvacEventCallback> callbacks;
- synchronized (this) {
+ synchronized (mLock) {
callbacks = new ArraySet<>(mCallbacks);
}
if (!callbacks.isEmpty()) {
@@ -315,16 +322,18 @@
* Implement wrappers for contained CarPropertyManager object
* @param callback
*/
- public synchronized void registerCallback(CarHvacEventCallback callback) {
- if (mCallbacks.isEmpty()) {
- mListenerToBase = new CarPropertyEventListenerToBase(this);
- }
- List<CarPropertyConfig> configs = getPropertyList();
- for (CarPropertyConfig c : configs) {
+ public void registerCallback(CarHvacEventCallback callback) {
+ synchronized (mLock) {
+ if (mCallbacks.isEmpty()) {
+ mListenerToBase = new CarPropertyEventListenerToBase(this);
+ }
+ List<CarPropertyConfig> configs = getPropertyList();
+ for (CarPropertyConfig c : configs) {
// Register each individual propertyId
- mCarPropertyMgr.registerCallback(mListenerToBase, c.getPropertyId(), 0);
+ mCarPropertyMgr.registerCallback(mListenerToBase, c.getPropertyId(), 0);
+ }
+ mCallbacks.add(callback);
}
- mCallbacks.add(callback);
}
/**
@@ -332,21 +341,26 @@
* this listener, all listening will be stopped.
* @param callback
*/
- public synchronized void unregisterCallback(CarHvacEventCallback callback) {
- mCallbacks.remove(callback);
- try {
- List<CarPropertyConfig> configs = getPropertyList();
- for (CarPropertyConfig c : configs) {
- // Register each individual propertyId
- mCarPropertyMgr.unregisterCallback(mListenerToBase, c.getPropertyId());
+ public void unregisterCallback(CarHvacEventCallback callback) {
+ synchronized (mLock) {
+ mCallbacks.remove(callback);
+ try {
+ List<CarPropertyConfig> configs = getPropertyList();
+ for (CarPropertyConfig c : configs) {
+ // Register each individual propertyId
+ mCarPropertyMgr.unregisterCallback(mListenerToBase, c.getPropertyId());
+ }
+ } catch (PropertyAccessDeniedSecurityException
+ | PropertyNotAvailableException
+ | IllegalArgumentException e) {
+ Log.e(TAG, "getPropertyList exception ", e);
}
- } catch (Exception e) {
- Log.e(TAG, "getPropertyList exception ", e);
- }
- if (mCallbacks.isEmpty()) {
- mCarPropertyMgr.unregisterCallback(mListenerToBase);
- mListenerToBase = null;
+
+ if (mCallbacks.isEmpty()) {
+ mCarPropertyMgr.unregisterCallback(mListenerToBase);
+ mListenerToBase = null;
+ }
}
}
@@ -435,7 +449,7 @@
/** @hide */
public void onCarDisconnected() {
// TODO(b/142730482) Fix synchronization to use separate mLock
- synchronized (this) {
+ synchronized (mLock) {
mCallbacks.clear();
}
mCarPropertyMgr.onCarDisconnected();