Fix GuardedBy error prone warnings
Note: In CarDevicePolicyService.java, the GuardedBy was referring to inexistent sLock instead of mLock.
Removed lambda functions and simplified logic as per the guideline at go/aaos-platform-guideline.
Bug: 258809108
Test: atest CtsCarTestCases CarSecurityPermissionTest
Test: atest CarServiceUnitTest CarServiceTest
Change-Id: If3aaece38ba95bec816d9d1aa4ecf38b19e60557
diff --git a/car-lib/src/android/car/Car.java b/car-lib/src/android/car/Car.java
index 6085ac9..ef90abf 100644
--- a/car-lib/src/android/car/Car.java
+++ b/car-lib/src/android/car/Car.java
@@ -2247,7 +2247,8 @@
@GuardedBy("mLock")
private void handleCarDisconnectLocked() {
if (mConnectionState == STATE_DISCONNECTED) {
- // can happen when client calls disconnect with onServiceDisconnected already called.
+ // can happen when client calls disconnect with onServiceDisconnected already
+ // called.
return;
}
mEventHandler.removeCallbacks(mConnectionRetryRunnable);
@@ -2756,7 +2757,9 @@
// Experimental or non-existing
String className = null;
try {
- className = mService.getCarManagerClassForFeature(serviceName);
+ synchronized (mLock) {
+ className = mService.getCarManagerClassForFeature(serviceName);
+ }
} catch (RemoteException e) {
handleRemoteExceptionFromCarService(e);
return null;
@@ -2813,9 +2816,10 @@
}
}
+ @GuardedBy("mLock")
private void tearDownCarManagersLocked() {
// All disconnected handling should be only doing its internal cleanup.
- for (CarManagerBase manager: mServiceMap.values()) {
+ for (CarManagerBase manager : mServiceMap.values()) {
manager.onCarDisconnected();
}
mServiceMap.clear();
diff --git a/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java b/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
index d37627e..087925f 100644
--- a/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
+++ b/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
@@ -261,7 +261,7 @@
return;
}
CarDrivingStateEventListener listener;
- synchronized (this) {
+ synchronized (mLock) {
listener = mDrvStateEventListener;
}
if (listener != null) {
diff --git a/car-lib/src/android/car/evs/CarEvsManager.java b/car-lib/src/android/car/evs/CarEvsManager.java
index ae8c495..7738619 100644
--- a/car-lib/src/android/car/evs/CarEvsManager.java
+++ b/car-lib/src/android/car/evs/CarEvsManager.java
@@ -417,11 +417,10 @@
Objects.requireNonNull(listener);
Objects.requireNonNull(executor);
- if (mStatusListener != null) {
- throw new IllegalStateException("A status listener is already registered.");
- }
-
synchronized (mStatusLock) {
+ if (mStatusListener != null) {
+ throw new IllegalStateException("A status listener is already registered.");
+ }
mStatusListener = listener;
mStatusListenerExecutor = executor;
}
diff --git a/car-lib/src/android/car/util/concurrent/AndroidFuture.java b/car-lib/src/android/car/util/concurrent/AndroidFuture.java
index a1ee23f..9adc97e 100644
--- a/car-lib/src/android/car/util/concurrent/AndroidFuture.java
+++ b/car-lib/src/android/car/util/concurrent/AndroidFuture.java
@@ -233,10 +233,12 @@
private void callListenerAsync(BiConsumer<? super T, ? super Throwable> listener,
@Nullable T res, @Nullable Throwable err) {
- if (mListenerExecutor == DIRECT_EXECUTOR) {
- callListener(listener, res, err);
- } else {
- mListenerExecutor.execute(() -> callListener(listener, res, err));
+ synchronized (mLock) {
+ if (mListenerExecutor == DIRECT_EXECUTOR) {
+ callListener(listener, res, err);
+ } else {
+ mListenerExecutor.execute(() -> callListener(listener, res, err));
+ }
}
}
diff --git a/car-lib/src/android/car/vms/VmsSubscriptionHelper.java b/car-lib/src/android/car/vms/VmsSubscriptionHelper.java
index 0af5c35..04f4c29 100644
--- a/car-lib/src/android/car/vms/VmsSubscriptionHelper.java
+++ b/car-lib/src/android/car/vms/VmsSubscriptionHelper.java
@@ -25,12 +25,9 @@
import com.android.internal.annotations.GuardedBy;
import java.util.Collections;
-import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Consumer;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
/**
* Internal utility for computing subscription updates.
@@ -43,10 +40,10 @@
private final Object mLock = new Object();
@GuardedBy("mLock")
- private final Set<VmsLayer> mLayerSubscriptions = new ArraySet<>();
+ private final ArraySet<VmsLayer> mLayerSubscriptions = new ArraySet<>();
@GuardedBy("mLock")
- private final Map<VmsLayer, SparseBooleanArray> mPublisherSubscriptions = new ArrayMap<>();
+ private final ArrayMap<VmsLayer, SparseBooleanArray> mPublisherSubscriptions = new ArrayMap<>();
@GuardedBy("mLock")
private boolean mPendingUpdate;
@@ -129,14 +126,22 @@
*/
@NonNull
@AddedInOrBefore(majorVersion = 33)
+ @GuardedBy("mLock")
public Set<VmsAssociatedLayer> getSubscriptions() {
- return Stream.concat(
- mLayerSubscriptions.stream().map(
- layer -> new VmsAssociatedLayer(layer, Collections.emptySet())),
- mPublisherSubscriptions.entrySet().stream()
- .filter(entry -> !mLayerSubscriptions.contains(entry.getKey()))
- .map(VmsSubscriptionHelper::toAssociatedLayer))
- .collect(Collectors.toSet());
+ Set<VmsAssociatedLayer> vmsAssociatedLayerSet = new ArraySet<>();
+ for (int i = 0; i < mLayerSubscriptions.size(); i++) {
+ VmsLayer layer = mLayerSubscriptions.valueAt(i);
+ vmsAssociatedLayerSet.add(new VmsAssociatedLayer(layer, Collections.emptySet()));
+ }
+
+ for (int i = 0; i < mPublisherSubscriptions.size(); i++) {
+ VmsLayer layer = mPublisherSubscriptions.keyAt(i);
+ if (!mLayerSubscriptions.contains(layer)) {
+ vmsAssociatedLayerSet.add(
+ toAssociatedLayer(layer, mPublisherSubscriptions.valueAt(i)));
+ }
+ }
+ return vmsAssociatedLayerSet;
}
private void publishSubscriptionUpdate() {
@@ -148,13 +153,12 @@
}
}
- private static VmsAssociatedLayer toAssociatedLayer(
- Map.Entry<VmsLayer, SparseBooleanArray> entry) {
- SparseBooleanArray providerIdArray = entry.getValue();
+ private static VmsAssociatedLayer toAssociatedLayer(VmsLayer layer,
+ SparseBooleanArray providerIdArray) {
Set<Integer> providerIds = new ArraySet<>(providerIdArray.size());
for (int i = 0; i < providerIdArray.size(); i++) {
providerIds.add(providerIdArray.keyAt(i));
}
- return new VmsAssociatedLayer(entry.getKey(), providerIds);
+ return new VmsAssociatedLayer(layer, providerIds);
}
}
diff --git a/car-lib/src/android/car/watchdog/CarWatchdogManager.java b/car-lib/src/android/car/watchdog/CarWatchdogManager.java
index 1977dd8..d80aee1 100644
--- a/car-lib/src/android/car/watchdog/CarWatchdogManager.java
+++ b/car-lib/src/android/car/watchdog/CarWatchdogManager.java
@@ -827,6 +827,7 @@
}
}
+ @GuardedBy("mLock")
private boolean checkConditionLocked() {
if (mRemainingConditions < 0) {
Log.wtf(TAG, "Remaining condition is less than zero: should not happen");
@@ -1049,12 +1050,14 @@
}
public int resourceOveruseFlag() {
- int flag = 0;
- for (int i = 0; i < mNumListenersByResource.size(); ++i) {
- flag |= mNumListenersByResource.valueAt(i) > 0 ? mNumListenersByResource.keyAt(i)
- : 0;
+ synchronized (mLock) {
+ int flag = 0;
+ for (int i = 0; i < mNumListenersByResource.size(); ++i) {
+ flag |= mNumListenersByResource.valueAt(i) > 0 ? mNumListenersByResource.keyAt(
+ i) : 0;
+ }
+ return flag;
}
- return flag;
}
}
diff --git a/service/src/com/android/car/ICarImpl.java b/service/src/com/android/car/ICarImpl.java
index 08330b5..a57fa83 100644
--- a/service/src/com/android/car/ICarImpl.java
+++ b/service/src/com/android/car/ICarImpl.java
@@ -987,8 +987,10 @@
dumpService(service, writer);
}
}
- if (mCarTestService != null) {
- dumpService(mCarTestService, writer);
+ synchronized (mLock) {
+ if (mCarTestService != null) {
+ dumpService(mCarTestService, writer);
+ }
}
}
diff --git a/service/src/com/android/car/admin/CarDevicePolicyService.java b/service/src/com/android/car/admin/CarDevicePolicyService.java
index 3dd3fc9..94ffe39 100644
--- a/service/src/com/android/car/admin/CarDevicePolicyService.java
+++ b/service/src/com/android/car/admin/CarDevicePolicyService.java
@@ -95,7 +95,7 @@
})
public @interface NewUserDisclaimerStatus {}
- @GuardedBy("sLock")
+ @GuardedBy("mLock")
private final SparseIntArray mUserDisclaimerStatusPerUser = new SparseIntArray();
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
diff --git a/service/src/com/android/car/evs/CarEvsService.java b/service/src/com/android/car/evs/CarEvsService.java
index efccd73..b9d3452 100644
--- a/service/src/com/android/car/evs/CarEvsService.java
+++ b/service/src/com/android/car/evs/CarEvsService.java
@@ -992,7 +992,9 @@
public void stopActivity() {
CarServiceUtils.assertPermission(mContext, Car.PERMISSION_REQUEST_CAR_EVS_ACTIVITY);
- mStateEngine.execute(REQUEST_PRIORITY_NORMAL, SERVICE_STATE_INACTIVE, mStreamCallback);
+ synchronized (mLock) {
+ mStateEngine.execute(REQUEST_PRIORITY_NORMAL, SERVICE_STATE_INACTIVE, mStreamCallback);
+ }
}
/**
diff --git a/service/src/com/android/car/power/PowerComponentHandler.java b/service/src/com/android/car/power/PowerComponentHandler.java
index 1bc9151..c5e4917 100644
--- a/service/src/com/android/car/power/PowerComponentHandler.java
+++ b/service/src/com/android/car/power/PowerComponentHandler.java
@@ -363,12 +363,14 @@
try (BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(fos, StandardCharsets.UTF_8))) {
- for (int i = 0; i < mComponentsOffByPolicy.size(); i++) {
- if (!mComponentsOffByPolicy.valueAt(i)) {
- continue;
+ synchronized (mLock) {
+ for (int i = 0; i < mComponentsOffByPolicy.size(); i++) {
+ if (!mComponentsOffByPolicy.valueAt(i)) {
+ continue;
+ }
+ writer.write(powerComponentToString(mComponentsOffByPolicy.keyAt(i)));
+ writer.newLine();
}
- writer.write(powerComponentToString(mComponentsOffByPolicy.keyAt(i)));
- writer.newLine();
}
writer.flush();
mOffComponentsByUserFile.finishWrite(fos);
diff --git a/service/src/com/android/car/user/CarUserService.java b/service/src/com/android/car/user/CarUserService.java
index c11741a..92d89f9 100644
--- a/service/src/com/android/car/user/CarUserService.java
+++ b/service/src/com/android/car/user/CarUserService.java
@@ -2781,11 +2781,11 @@
}
private void notifyLegacyUserSwitch(@UserIdInt int fromUserId, @UserIdInt int toUserId) {
- if (DBG) {
- Slogf.d(TAG, "notifyLegacyUserSwitch(%d, %d): mUserIdForUserSwitchInProcess=%d",
- fromUserId, toUserId, mUserIdForUserSwitchInProcess);
- }
synchronized (mLockUser) {
+ if (DBG) {
+ Slogf.d(TAG, "notifyLegacyUserSwitch(%d, %d): mUserIdForUserSwitchInProcess=%d",
+ fromUserId, toUserId, mUserIdForUserSwitchInProcess);
+ }
if (mUserIdForUserSwitchInProcess != USER_NULL) {
if (mUserIdForUserSwitchInProcess == toUserId) {
if (DBG) {
diff --git a/service/src/com/android/car/vms/VmsClientInfo.java b/service/src/com/android/car/vms/VmsClientInfo.java
index 492ccc8..2481f6a 100644
--- a/service/src/com/android/car/vms/VmsClientInfo.java
+++ b/service/src/com/android/car/vms/VmsClientInfo.java
@@ -125,14 +125,13 @@
}
}
+ @GuardedBy("mLock")
Collection<VmsLayersOffering> getAllOfferings() {
List<VmsLayersOffering> result = new ArrayList<>(mOfferings.size());
- synchronized (mLock) {
- for (int i = 0; i < mOfferings.size(); i++) {
- int providerId = mOfferings.keyAt(i);
- Set<VmsLayerDependency> providerOfferings = mOfferings.valueAt(i);
- result.add(new VmsLayersOffering(new ArraySet<>(providerOfferings), providerId));
- }
+ for (int i = 0; i < mOfferings.size(); i++) {
+ int providerId = mOfferings.keyAt(i);
+ Set<VmsLayerDependency> providerOfferings = mOfferings.valueAt(i);
+ result.add(new VmsLayersOffering(new ArraySet<>(providerOfferings), providerId));
}
return result;
}