Merge "Fixed flaky test" into sc-dev
diff --git a/car_product/build/preinstalled-packages-product-car-base.xml b/car_product/build/preinstalled-packages-product-car-base.xml
index 6745012..8b75bcb 100644
--- a/car_product/build/preinstalled-packages-product-car-base.xml
+++ b/car_product/build/preinstalled-packages-product-car-base.xml
@@ -307,18 +307,11 @@
<install-in-user-type package="com.android.certinstaller">
<install-in user-type="FULL" />
</install-in-user-type>
- <!-- TODO(b/189246976) STOPSHIP Remove for SYSTEM user since this package
- is needed for SYSTEM user only if the device supports feature_device_admin
- and it's used by some device owner APIs-->
<install-in-user-type package="com.android.pacprocessor">
<install-in user-type="FULL" />
- <install-in user-type="SYSTEM" />
</install-in-user-type>
- <!-- TODO(b/189246976) STOPSHIP Remove for SYSTEM user same as previous
- package -->
<install-in-user-type package="com.android.proxyhandler">
<install-in user-type="FULL" />
- <install-in user-type="SYSTEM" />
</install-in-user-type>
<install-in-user-type package="com.android.vpndialogs">
<install-in user-type="FULL" />
diff --git a/cpp/powerpolicy/server/carpowerpolicyd.xml b/cpp/powerpolicy/server/carpowerpolicyd.xml
index e8df893..0d2462f 100644
--- a/cpp/powerpolicy/server/carpowerpolicyd.xml
+++ b/cpp/powerpolicy/server/carpowerpolicyd.xml
@@ -16,6 +16,7 @@
<manifest version="1.0" type="framework">
<hal format="aidl">
<name>android.frameworks.automotive.powerpolicy</name>
+ <version>1</version>
<interface>
<name>ICarPowerPolicyServer</name>
<instance>default</instance>
diff --git a/cpp/watchdog/server/carwatchdogd.xml b/cpp/watchdog/server/carwatchdogd.xml
index c0c8933..c7adc27 100644
--- a/cpp/watchdog/server/carwatchdogd.xml
+++ b/cpp/watchdog/server/carwatchdogd.xml
@@ -16,6 +16,7 @@
<manifest version="1.0" type="framework">
<hal format="aidl">
<name>android.automotive.watchdog</name>
+ <version>3</version>
<interface>
<name>ICarWatchdog</name>
<instance>default</instance>
diff --git a/service/src/com/android/car/CanBusErrorNotifier.java b/service/src/com/android/car/CanBusErrorNotifier.java
deleted file mode 100644
index e4770af..0000000
--- a/service/src/com/android/car/CanBusErrorNotifier.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.car;
-
-import android.app.Notification;
-import android.app.NotificationChannel;
-import android.app.NotificationManager;
-import android.content.Context;
-import android.os.Build;
-import android.util.Log;
-import android.util.Slog;
-
-import com.android.internal.annotations.GuardedBy;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Class used to notify user about CAN bus failure.
- */
-final class CanBusErrorNotifier {
- private static final String TAG = CarLog.tagFor(CanBusErrorNotifier.class);
- private static final int NOTIFICATION_ID = 1;
- private static final boolean IS_RELEASE_BUILD = "user".equals(Build.TYPE);
-
- private final Context mContext;
- private final NotificationManager mNotificationManager;
-
- // Contains a set of objects that reported failure. The notification will be hidden only when
- // this set is empty (all reported objects are in love and peace with the vehicle).
- @GuardedBy("this")
- private final Set<Object> mReportedObjects = new HashSet<>();
-
- CanBusErrorNotifier(Context context) {
- mNotificationManager = (NotificationManager) context.getSystemService(
- Context.NOTIFICATION_SERVICE);
- mContext = context;
- }
-
- public void removeFailureReport(Object sender) {
- setCanBusFailure(false, sender);
- }
-
- public void reportFailure(Object sender) {
- setCanBusFailure(true, sender);
- }
-
- private void setCanBusFailure(boolean failed, Object sender) {
- boolean shouldShowNotification;
- synchronized (this) {
- boolean changed = failed
- ? mReportedObjects.add(sender) : mReportedObjects.remove(sender);
-
- if (!changed) {
- return;
- }
-
- shouldShowNotification = !mReportedObjects.isEmpty();
- }
-
- if (Log.isLoggable(TAG, Log.INFO)) {
- Slog.i(TAG, "Changing CAN bus failure state to " + shouldShowNotification);
- }
-
- if (shouldShowNotification) {
- showNotification();
- } else {
- hideNotification();
- }
- }
-
- private void showNotification() {
- if (IS_RELEASE_BUILD) {
- // TODO: for user, we should show message to take car to the dealer. bug:32096297
- return;
- }
- Notification notification =
- new Notification.Builder(mContext, NotificationChannel.DEFAULT_CHANNEL_ID)
- .setContentTitle(mContext.getString(R.string.car_can_bus_failure))
- .setContentText(mContext.getString(R.string.car_can_bus_failure_desc))
- .setSmallIcon(R.drawable.car_ic_error)
- .setOngoing(true)
- .build();
- mNotificationManager.notify(TAG, NOTIFICATION_ID, notification);
- }
-
- private void hideNotification() {
- if (IS_RELEASE_BUILD) {
- // TODO: for user, we should show message to take car to the dealer. bug:32096297
- return;
- }
- mNotificationManager.cancel(TAG, NOTIFICATION_ID);
- }
-}
diff --git a/service/src/com/android/car/CarService.java b/service/src/com/android/car/CarService.java
index 6a90f9c..7aa2cca 100644
--- a/service/src/com/android/car/CarService.java
+++ b/service/src/com/android/car/CarService.java
@@ -54,28 +54,11 @@
private static final boolean IS_USER_BUILD = "user".equals(Build.TYPE);
- private CanBusErrorNotifier mCanBusErrorNotifier;
private ICarImpl mICarImpl;
private IVehicle mVehicle;
private String mVehicleInterfaceName;
- // If 10 crashes of Vehicle HAL occurred within 10 minutes then thrown an exception in
- // Car Service.
- private final CrashTracker mVhalCrashTracker = new CrashTracker(
- 10, // Max crash count.
- 10 * 60 * 1000, // 10 minutes - sliding time window.
- () -> {
- if (IS_USER_BUILD) {
- Slog.e(CarLog.TAG_SERVICE, "Vehicle HAL keeps crashing, notifying user...");
- mCanBusErrorNotifier.reportFailure(CarService.this);
- } else {
- throw new RuntimeException(
- "Vehicle HAL crashed too many times in a given time frame");
- }
- }
- );
-
private final VehicleDeathRecipient mVehicleDeathRecipient = new VehicleDeathRecipient();
@Override
@@ -84,8 +67,6 @@
Trace.TRACE_TAG_SYSTEM_SERVER, CAR_SERVICE_INIT_TIMING_MIN_DURATION_MS);
initTiming.traceBegin("CarService.onCreate");
- mCanBusErrorNotifier = new CanBusErrorNotifier(this /* context */);
-
initTiming.traceBegin("getVehicle");
mVehicle = getVehicle();
initTiming.traceEnd();
@@ -107,7 +88,6 @@
mICarImpl = new ICarImpl(this,
mVehicle,
SystemInterface.Builder.defaultSystemInterface(this).build(),
- mCanBusErrorNotifier,
mVehicleInterfaceName);
mICarImpl.init();
@@ -129,7 +109,6 @@
EventLog.writeEvent(EventLogTags.CAR_SERVICE_CREATE, mVehicle == null ? 0 : 1);
Slog.i(CarLog.TAG_SERVICE, "Service onDestroy");
mICarImpl.release();
- mCanBusErrorNotifier.removeFailureReport(this);
if (mVehicle != null) {
try {
@@ -176,10 +155,6 @@
vehicle = getVehicle();
}
- if (vehicle != null) {
- mCanBusErrorNotifier.removeFailureReport(this);
- }
-
return vehicle;
}
@@ -202,34 +177,8 @@
@Override
public void serviceDied(long cookie) {
EventLog.writeEvent(EventLogTags.CAR_SERVICE_VHAL_DIED, cookie);
- if (RESTART_CAR_SERVICE_WHEN_VHAL_CRASH) {
- Slog.wtf(CarLog.TAG_SERVICE, "***Vehicle HAL died. Car service will restart***");
- Process.killProcess(Process.myPid());
- return;
- }
-
- Slog.wtf(CarLog.TAG_SERVICE, "***Vehicle HAL died.***");
-
- try {
- mVehicle.unlinkToDeath(this);
- } catch (RemoteException e) {
- Slog.e(CarLog.TAG_SERVICE, "Failed to unlinkToDeath", e); // Log and continue.
- }
- mVehicle = null;
-
- mVhalCrashTracker.crashDetected();
-
- Slog.i(CarLog.TAG_SERVICE,
- "Trying to reconnect to Vehicle HAL: " + mVehicleInterfaceName);
- mVehicle = getVehicleWithTimeout(WAIT_FOR_VEHICLE_HAL_TIMEOUT_MS);
- if (mVehicle == null) {
- throw new IllegalStateException("Failed to reconnect to Vehicle HAL");
- }
-
- linkToDeath(mVehicle, this);
-
- Slog.i(CarLog.TAG_SERVICE, "Notifying car service Vehicle HAL reconnected...");
- mICarImpl.vehicleHalReconnected(mVehicle);
+ Slog.wtf(CarLog.TAG_SERVICE, "***Vehicle HAL died. Car service will restart***");
+ Process.killProcess(Process.myPid());
}
}
diff --git a/service/src/com/android/car/ICarImpl.java b/service/src/com/android/car/ICarImpl.java
index e2c2b08..78ff99d 100644
--- a/service/src/com/android/car/ICarImpl.java
+++ b/service/src/com/android/car/ICarImpl.java
@@ -159,15 +159,15 @@
private final ICarSystemServerClientImpl mICarSystemServerClientImpl;
public ICarImpl(Context serviceContext, IVehicle vehicle, SystemInterface systemInterface,
- CanBusErrorNotifier errorNotifier, String vehicleInterfaceName) {
- this(serviceContext, vehicle, systemInterface, errorNotifier, vehicleInterfaceName,
+ String vehicleInterfaceName) {
+ this(serviceContext, vehicle, systemInterface, vehicleInterfaceName,
/* carUserService= */ null, /* carWatchdogService= */ null,
/* powerPolicyDaemon= */ null);
}
@VisibleForTesting
ICarImpl(Context serviceContext, IVehicle vehicle, SystemInterface systemInterface,
- CanBusErrorNotifier errorNotifier, String vehicleInterfaceName,
+ String vehicleInterfaceName,
@Nullable CarUserService carUserService,
@Nullable CarWatchdogService carWatchdogService,
@Nullable ICarPowerPolicySystemNotification powerPolicyDaemon) {
diff --git a/tests/carservice_test/src/com/android/car/ICarImplTest.java b/tests/carservice_test/src/com/android/car/ICarImplTest.java
index 574b8ed..c0ba62a 100644
--- a/tests/carservice_test/src/com/android/car/ICarImplTest.java
+++ b/tests/carservice_test/src/com/android/car/ICarImplTest.java
@@ -165,7 +165,7 @@
doThrow(new NullPointerException()).when(mContext).getDataDir();
ICarImpl carImpl = new ICarImpl(mContext, mMockVehicle, mFakeSystemInterface,
- /* errorNotifier= */ null, "MockedCar", /* carUserService= */ null,
+ "MockedCar", /* carUserService= */ null,
mCarWatchdogService, new MockedCarTestBase.FakeCarPowerPolicyDaemon());
carImpl.init();
Car mCar = new Car(mContext, carImpl, /* handler= */ null);
diff --git a/tests/carservice_test/src/com/android/car/MockedCarTestBase.java b/tests/carservice_test/src/com/android/car/MockedCarTestBase.java
index 9794b19..4119b8c 100644
--- a/tests/carservice_test/src/com/android/car/MockedCarTestBase.java
+++ b/tests/carservice_test/src/com/android/car/MockedCarTestBase.java
@@ -232,7 +232,7 @@
// This should be done here as feature property is accessed inside the constructor.
initMockedHal();
mCarImpl = new ICarImpl(mMockedCarTestContext, mMockedVehicleHal, mFakeSystemInterface,
- /* errorNotifier= */ null , "MockedCar", mCarUserService, mCarWatchdogService,
+ "MockedCar", mCarUserService, mCarWatchdogService,
mPowerPolicyDaemon);
spyOnBeforeCarImplInit();