1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.car.extendedapitest; 18 19 import android.car.Car; 20 import android.car.CarAppFocusManager; 21 import android.car.CarBugreportManager; 22 import android.car.CarInfoManager; 23 import android.car.CarOccupantZoneManager; 24 import android.car.CarProjectionManager; 25 import android.car.CarRemoteDeviceManager; 26 import android.car.admin.CarDevicePolicyManager; 27 import android.car.app.CarActivityManager; 28 import android.car.app.CarDisplayCompatManager; 29 import android.car.cluster.CarInstrumentClusterManager; 30 import android.car.cluster.ClusterHomeManager; 31 import android.car.content.pm.CarPackageManager; 32 import android.car.diagnostic.CarDiagnosticManager; 33 import android.car.drivingstate.CarDrivingStateManager; 34 import android.car.drivingstate.CarUxRestrictionsManager; 35 import android.car.evs.CarEvsManager; 36 import android.car.extendedapitest.testbase.CarLessApiTestBase; 37 import android.car.feature.Flags; 38 import android.car.hardware.CarSensorManager; 39 import android.car.hardware.CarVendorExtensionManager; 40 import android.car.hardware.cabin.CarCabinManager; 41 import android.car.hardware.hvac.CarHvacManager; 42 import android.car.hardware.power.CarPowerManager; 43 import android.car.hardware.property.CarPropertyManager; 44 import android.car.input.CarInputManager; 45 import android.car.media.CarAudioManager; 46 import android.car.media.CarMediaManager; 47 import android.car.navigation.CarNavigationStatusManager; 48 import android.car.occupantawareness.OccupantAwarenessManager; 49 import android.car.occupantconnection.CarOccupantConnectionManager; 50 import android.car.os.CarPerformanceManager; 51 import android.car.storagemonitoring.CarStorageMonitoringManager; 52 import android.car.telemetry.CarTelemetryManager; 53 import android.car.test.CarTestManager; 54 import android.car.user.CarUserManager; 55 import android.car.vms.VmsClientManager; 56 import android.car.vms.VmsSubscriberManager; 57 import android.car.watchdog.CarWatchdogManager; 58 import android.car.wifi.CarWifiManager; 59 60 import com.android.compatibility.common.util.ApiTest; 61 62 import org.junit.Test; 63 import org.junit.runner.RunWith; 64 import org.junit.runners.Parameterized; 65 66 import java.util.ArrayList; 67 import java.util.Arrays; 68 import java.util.List; 69 70 @RunWith(Parameterized.class) 71 public final class CarGetCarManagerTest extends CarLessApiTestBase { 72 73 private final Class<?> mCarManagerClass; 74 private final String mCarServiceName; 75 CarGetCarManagerTest(Class<?> managerClass, String serviceName)76 public CarGetCarManagerTest(Class<?> managerClass, String serviceName) { 77 this.mCarManagerClass = managerClass; 78 this.mCarServiceName = serviceName; 79 } 80 81 @Parameterized.Parameters inputParameters()82 public static List<Object[]> inputParameters() { 83 List<Object[]> data = new ArrayList<>(Arrays.asList(new Object[][] { 84 {CarSensorManager.class, Car.SENSOR_SERVICE}, 85 {CarInfoManager.class, Car.INFO_SERVICE}, 86 {CarAppFocusManager.class, Car.APP_FOCUS_SERVICE}, 87 {CarPackageManager.class, Car.PACKAGE_SERVICE}, 88 {CarAudioManager.class, Car.AUDIO_SERVICE}, 89 {CarNavigationStatusManager.class, Car.CAR_NAVIGATION_SERVICE}, 90 {CarOccupantConnectionManager.class, Car.CAR_OCCUPANT_CONNECTION_SERVICE}, 91 {CarOccupantZoneManager.class, Car.CAR_OCCUPANT_ZONE_SERVICE}, 92 {CarUserManager.class, Car.CAR_USER_SERVICE}, 93 {CarRemoteDeviceManager.class, Car.CAR_REMOTE_DEVICE_SERVICE}, 94 {CarDevicePolicyManager.class, Car.CAR_DEVICE_POLICY_SERVICE}, 95 {CarCabinManager.class, Car.CABIN_SERVICE}, 96 {CarDiagnosticManager.class, Car.DIAGNOSTIC_SERVICE}, 97 {CarHvacManager.class, Car.HVAC_SERVICE}, 98 {CarPowerManager.class, Car.POWER_SERVICE}, 99 {CarProjectionManager.class, Car.PROJECTION_SERVICE}, 100 {CarPropertyManager.class, Car.PROPERTY_SERVICE}, 101 {CarVendorExtensionManager.class, Car.VENDOR_EXTENSION_SERVICE}, 102 {VmsClientManager.class, Car.VEHICLE_MAP_SERVICE}, 103 {VmsSubscriberManager.class, Car.VMS_SUBSCRIBER_SERVICE}, 104 {CarDrivingStateManager.class, Car.CAR_DRIVING_STATE_SERVICE}, 105 {CarUxRestrictionsManager.class, Car.CAR_UX_RESTRICTION_SERVICE}, 106 {CarMediaManager.class, Car.CAR_MEDIA_SERVICE}, 107 {CarBugreportManager.class, Car.CAR_BUGREPORT_SERVICE}, 108 {CarStorageMonitoringManager.class, Car.STORAGE_MONITORING_SERVICE}, 109 {CarWatchdogManager.class, Car.CAR_WATCHDOG_SERVICE}, 110 {CarPerformanceManager.class, Car.CAR_PERFORMANCE_SERVICE}, 111 {CarInputManager.class, Car.CAR_INPUT_SERVICE}, 112 {ClusterHomeManager.class, Car.CLUSTER_HOME_SERVICE}, 113 {CarTestManager.class, Car.TEST_SERVICE}, 114 {CarEvsManager.class, Car.CAR_EVS_SERVICE}, 115 {CarTelemetryManager.class, Car.CAR_TELEMETRY_SERVICE}, 116 {CarInstrumentClusterManager.class, Car.CAR_INSTRUMENT_CLUSTER_SERVICE}, 117 {OccupantAwarenessManager.class, Car.OCCUPANT_AWARENESS_SERVICE}, 118 {CarActivityManager.class, Car.CAR_ACTIVITY_SERVICE} 119 })); 120 121 if (Flags.persistApSettings()) { 122 data.add(new Object[]{ 123 CarWifiManager.class, Car.CAR_WIFI_SERVICE 124 }); 125 } 126 127 if (Flags.displayCompatibility()) { 128 data.add(new Object[] { 129 CarDisplayCompatManager.class, Car.CAR_DISPLAY_COMPAT_SERVICE 130 }); 131 } 132 133 return data; 134 } 135 136 @Test 137 @ApiTest(apis = {"android.car.Car#getCarManager(String)", 138 "android.car.Car#getCarManager(Class)"}) test_forCarServiceManager()139 public void test_forCarServiceManager() throws Exception { 140 Car car = Car.createCar(mContext); 141 142 Object carManager = car.getCarManager(mCarServiceName); 143 Object carManager2 = car.getCarManager(mCarServiceName); 144 Object carManagerByClass = car.getCarManager(mCarManagerClass); 145 Object carManagerByClass2 = car.getCarManager(mCarManagerClass); 146 147 boolean featureEnabled = car.getAllEnabledFeatures().contains(mCarServiceName); 148 if (featureEnabled) { 149 expectWithMessage("first instance by service name: %s", mCarServiceName) 150 .that(carManager).isNotNull(); 151 152 expectWithMessage("second instance by service name: %s", mCarServiceName) 153 .that(carManager2).isNotNull(); 154 expectWithMessage("second instance by service name: %s", mCarServiceName) 155 .that(carManager2).isSameInstanceAs(carManager); 156 157 expectWithMessage("first instance by class: %s", mCarManagerClass.getSimpleName()) 158 .that(carManagerByClass).isNotNull(); 159 expectWithMessage("first instance by class: %s", mCarManagerClass.getSimpleName()) 160 .that(carManagerByClass).isSameInstanceAs(carManager); 161 162 expectWithMessage("second instance by class: %s", mCarManagerClass.getSimpleName()) 163 .that(carManagerByClass2).isNotNull(); 164 expectWithMessage("second instance by class: %s", mCarManagerClass.getSimpleName()) 165 .that(carManagerByClass2).isSameInstanceAs(carManager); 166 } else { 167 expectWithMessage("first instance by service name: %s", mCarServiceName) 168 .that(carManager).isNull(); 169 expectWithMessage("second instance by service name: %s", mCarServiceName) 170 .that(carManager2).isNull(); 171 172 expectWithMessage("first instance by class: %s", mCarManagerClass.getSimpleName()) 173 .that(carManagerByClass).isNull(); 174 expectWithMessage("second instance by class: %s", mCarManagerClass.getSimpleName()) 175 .that(carManagerByClass2).isNull(); 176 } 177 } 178 } 179