Migrating Car service to new Vehicle HAL

- make car service work directly with Vehicle HAL
- getting rid of protobufs and dependencies on VNS
- get rid of CarTestManager / CarTestService and refactor
  tests accordingly
- reworked ICarImpl to pass dependencies rather than
  using singletons for better testing experience

Test: existing test should work, although some of the tests
      (esp. audio) are broken and we will fix them in follow up CLs

Bug: b/31971746
Change-Id: I229969af332304ba3b1718f130cdf22038e86fad
Tests: tests adjusted to new data structures
diff --git a/car-lib/api/system-current.txt b/car-lib/api/system-current.txt
index 763114b..691960a 100644
--- a/car-lib/api/system-current.txt
+++ b/car-lib/api/system-current.txt
@@ -23,10 +23,11 @@
     field public static final java.lang.String PERMISSION_CAR_HVAC = "android.car.permission.CAR_HVAC";
     field public static final java.lang.String PERMISSION_CAR_PROJECTION = "android.car.permission.CAR_PROJECTION";
     field public static final java.lang.String PERMISSION_CAR_RADIO = "android.car.permission.CAR_RADIO";
+    field public static final java.lang.String PERMISSION_CAR_TEST_SERVICE = "android.car.permission.CAR_TEST_SERVICE";
     field public static final java.lang.String PERMISSION_CONTROL_APP_BLOCKING = "android.car.permission.CONTROL_APP_BLOCKING";
     field public static final java.lang.String PERMISSION_FUEL = "android.car.permission.CAR_FUEL";
     field public static final java.lang.String PERMISSION_MILEAGE = "android.car.permission.CAR_MILEAGE";
-    field public static final java.lang.String PERMISSION_MOCK_VEHICLE_HAL = "android.car.permission.CAR_MOCK_VEHICLE_HAL";
+    field public static final deprecated java.lang.String PERMISSION_MOCK_VEHICLE_HAL = "android.car.permission.CAR_MOCK_VEHICLE_HAL";
     field public static final java.lang.String PERMISSION_SPEED = "android.car.permission.CAR_SPEED";
     field public static final java.lang.String PERMISSION_VENDOR_EXTENSION = "android.car.permission.CAR_VENDOR_EXTENSION";
     field public static final java.lang.String PROJECTION_SERVICE = "projection";
diff --git a/car-lib/src/android/car/Car.java b/car-lib/src/android/car/Car.java
index ab4f9c9..aa3c799 100644
--- a/car-lib/src/android/car/Car.java
+++ b/car-lib/src/android/car/Car.java
@@ -21,8 +21,8 @@
 import android.annotation.SystemApi;
 import android.car.content.pm.CarPackageManager;
 import android.car.hardware.CarSensorManager;
-import android.car.hardware.cabin.CarCabinManager;
 import android.car.hardware.CarVendorExtensionManager;
+import android.car.hardware.cabin.CarCabinManager;
 import android.car.hardware.camera.CarCameraManager;
 import android.car.hardware.hvac.CarHvacManager;
 import android.car.hardware.radio.CarRadioManager;
@@ -199,23 +199,26 @@
     /**
      * Permission necessary to mock vehicle hal for testing.
      * @hide
+     * @deprecated mocking vehicle HAL in car service is no longer supported.
      */
     @SystemApi
     public static final String PERMISSION_MOCK_VEHICLE_HAL =
             "android.car.permission.CAR_MOCK_VEHICLE_HAL";
 
-    /** Type of car connection: platform runs directly in car. */
-    public static final int CONNECTION_TYPE_EMBEDDED = 5;
     /**
-     * Type of car connection: platform runs directly in car but with mocked vehicle hal.
-     * This will only happen in testing environment.
+     * Permission necessary to access CarTestService.
      * @hide
      */
-    public static final int CONNECTION_TYPE_EMBEDDED_MOCKING = 6;
+    @SystemApi
+    public static final String PERMISSION_CAR_TEST_SERVICE =
+            "android.car.permission.CAR_TEST_SERVICE";
+
+    /** Type of car connection: platform runs directly in car. */
+    public static final int CONNECTION_TYPE_EMBEDDED = 5;
 
 
     /** @hide */
-    @IntDef({CONNECTION_TYPE_EMBEDDED, CONNECTION_TYPE_EMBEDDED_MOCKING})
+    @IntDef({CONNECTION_TYPE_EMBEDDED})
     @Retention(RetentionPolicy.SOURCE)
     public @interface ConnectionType {}
 
@@ -234,14 +237,13 @@
 
     private static final String CAR_SERVICE_CLASS = "com.android.car.CarService";
 
-    private static final String CAR_TEST_MANAGER_CLASS = "android.car.CarTestManager";
-
     private static final long CAR_SERVICE_BIND_RETRY_INTERVAL_MS = 500;
     private static final long CAR_SERVICE_BIND_MAX_RETRY = 20;
 
     private final Context mContext;
     @GuardedBy("this")
     private ICar mService;
+    private final boolean mOwnsService;
     private static final int STATE_DISCONNECTED = 0;
     private static final int STATE_CONNECTING = 1;
     private static final int STATE_CONNECTED = 2;
@@ -339,12 +341,13 @@
         mMainThreadEventHandler = determineMainThreadEventHandler(mEventHandler);
 
         mService = null;
+        mOwnsService = true;
         mServiceConnectionListenerClient = serviceConnectionListener;
     }
 
 
     /**
-     * Car constructor when ICar binder is already available.     *
+     * Car constructor when ICar binder is already available.
      * @hide
      */
     public Car(Context context, ICar service, @Nullable Handler handler) {
@@ -353,6 +356,7 @@
         mMainThreadEventHandler = determineMainThreadEventHandler(mEventHandler);
 
         mService = service;
+        mOwnsService = false;
         mConnectionState = STATE_CONNECTED;
         mServiceConnectionListenerClient = null;
     }
@@ -401,7 +405,10 @@
             tearDownCarManagers();
             mService = null;
             mConnectionState = STATE_DISCONNECTED;
-            mContext.unbindService(mServiceConnectionListener);
+
+            if (mOwnsService) {
+                mContext.unbindService(mServiceConnectionListener);
+            }
         }
     }
 
diff --git a/car-lib/src/android/car/hardware/CarSensorManager.java b/car-lib/src/android/car/hardware/CarSensorManager.java
index 051d97f..83e8b3f 100644
--- a/car-lib/src/android/car/hardware/CarSensorManager.java
+++ b/car-lib/src/android/car/hardware/CarSensorManager.java
@@ -25,6 +25,7 @@
 import android.car.CarManagerBase;
 import android.car.CarNotConnectedException;
 import android.content.Context;
+import android.os.Binder;
 import android.os.Handler;
 import android.os.Handler.Callback;
 import android.os.IBinder;
@@ -32,13 +33,16 @@
 import android.os.RemoteException;
 import android.util.Log;
 
+import com.google.android.collect.Lists;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
@@ -459,7 +463,7 @@
         private final WeakReference<CarSensorManager> mManager;
 
         public CarSensorEventListenerToService(CarSensorManager manager) {
-            mManager = new WeakReference<CarSensorManager>(manager);
+            mManager = new WeakReference<>(manager);
         }
 
         @Override
diff --git a/car-lib/src/android/car/hardware/CarVendorExtensionManager.java b/car-lib/src/android/car/hardware/CarVendorExtensionManager.java
index 1235fcd..b153d22 100644
--- a/car-lib/src/android/car/hardware/CarVendorExtensionManager.java
+++ b/car-lib/src/android/car/hardware/CarVendorExtensionManager.java
@@ -144,7 +144,7 @@
      *        defined as {@code VEHICLE_VALUE_TYPE_INT32} in vehicle HAL could be accessed using
      *        {@code Integer.class}.
      * @param propId - property id which is matched with the one defined in vehicle HAL
-     * @param area - vehicle area (e.g. {@code VEHICLE_ZONE_ROW_1_LEFT}
+     * @param area - vehicle area (e.g. {@code VehicleAreaZone.ROW_1_LEFT}
      *        or {@code VEHICLE_MIRROR_DRIVER_LEFT}
      *
      * @throws CarNotConnectedException if the connection to the car service has been lost.
@@ -178,7 +178,7 @@
      *        defined as {@code VEHICLE_VALUE_TYPE_INT32} in vehicle HAL could be accessed using
      *        {@code Integer.class}.
      * @param propId - property id which is matched with the one defined in vehicle HAL
-     * @param area - vehicle area (e.g. {@code VEHICLE_ZONE_ROW_1_LEFT}
+     * @param area - vehicle area (e.g. {@code VehicleAreaZone.ROW_1_LEFT}
      *        or {@code VEHICLE_MIRROR_DRIVER_LEFT}
      * @param value - new value, this object should match a class provided in {@code propertyClass}
      *        argument.
diff --git a/car-support-lib/api/current.txt b/car-support-lib/api/current.txt
index 25d2002..deee527 100644
--- a/car-support-lib/api/current.txt
+++ b/car-support-lib/api/current.txt
@@ -13,7 +13,6 @@
     field public static final java.lang.String AUDIO_SERVICE = "audio";
     field public static final int CONNECTION_TYPE_ADB_EMULATOR = 4; // 0x4
     field public static final int CONNECTION_TYPE_EMBEDDED = 5; // 0x5
-    field public static final int CONNECTION_TYPE_EMBEDDED_MOCKING = 6; // 0x6
     field public static final int CONNECTION_TYPE_EMULATOR = 0; // 0x0
     field public static final int CONNECTION_TYPE_ON_DEVICE_EMULATOR = 3; // 0x3
     field public static final int CONNECTION_TYPE_UNKNOWN = -1; // 0xffffffff
diff --git a/car-support-lib/src/android/support/car/Car.java b/car-support-lib/src/android/support/car/Car.java
index 59a6e34..4fb92ff 100644
--- a/car-support-lib/src/android/support/car/Car.java
+++ b/car-support-lib/src/android/support/car/Car.java
@@ -117,11 +117,7 @@
      * Type of car connection: platform runs directly in car.
      */
     public static final int CONNECTION_TYPE_EMBEDDED = 5;
-    /**
-     * Type of car connection: platform runs directly in car with mocked vehicle HAL. Occurs
-     * only in a testing environment.
-     */
-    public static final int CONNECTION_TYPE_EMBEDDED_MOCKING = 6;
+
     /**
      * Unknown type (the support lib is likely out-of-date).
      */
@@ -135,10 +131,8 @@
         CONNECTION_TYPES.add(CONNECTION_TYPE_ON_DEVICE_EMULATOR);
         CONNECTION_TYPES.add(CONNECTION_TYPE_ADB_EMULATOR);
         CONNECTION_TYPES.add(CONNECTION_TYPE_EMBEDDED);
-        CONNECTION_TYPES.add(CONNECTION_TYPE_EMBEDDED_MOCKING);
     }
 
-
     /** @hide */
     @IntDef({CONNECTION_TYPE_EMULATOR, CONNECTION_TYPE_USB, CONNECTION_TYPE_WIFI,
             CONNECTION_TYPE_ON_DEVICE_EMULATOR, CONNECTION_TYPE_ADB_EMULATOR,
@@ -429,7 +423,7 @@
      *
      * @return One of {@link #CONNECTION_TYPE_USB}, {@link #CONNECTION_TYPE_WIFI},
      * {@link #CONNECTION_TYPE_EMBEDDED}, {@link #CONNECTION_TYPE_ON_DEVICE_EMULATOR},
-     * {@link #CONNECTION_TYPE_ADB_EMULATOR}, {@link #CONNECTION_TYPE_EMBEDDED_MOCKING},
+     * {@link #CONNECTION_TYPE_ADB_EMULATOR},
      * {@link #CONNECTION_TYPE_UNKNOWN}.
      * @throws CarNotConnectedException if the connection to the car service has been lost.
      * @hide
diff --git a/car-systemtest-lib/Android.mk b/car-systemtest-lib/Android.mk
index 710a0d6..6e4def5 100644
--- a/car-systemtest-lib/Android.mk
+++ b/car-systemtest-lib/Android.mk
@@ -28,6 +28,4 @@
 
 LOCAL_JAVA_LIBRARIES += android.car
 
-LOCAL_STATIC_JAVA_LIBRARIES += libvehiclenetwork-java
-
 include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/car-systemtest-lib/src/android/car/test/CarTestManager.java b/car-systemtest-lib/src/android/car/test/CarTestManager.java
index 4a99207..52b01a6 100644
--- a/car-systemtest-lib/src/android/car/test/CarTestManager.java
+++ b/car-systemtest-lib/src/android/car/test/CarTestManager.java
@@ -15,21 +15,13 @@
  */
 package android.car.test;
 
+import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
+import android.car.Car;
 import android.car.CarManagerBase;
 import android.os.IBinder;
 import android.os.RemoteException;
 
-import com.android.car.vehiclenetwork.IVehicleNetworkHalMock;
-import com.android.car.vehiclenetwork.VehicleNetwork.VehicleNetworkHalMock;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfigs;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehiclePropConfigsParcelable;
-import com.android.car.vehiclenetwork.VehiclePropValueParcelable;
-import com.android.internal.annotations.GuardedBy;
-
-import java.lang.ref.WeakReference;
-
 /**
  * API for testing only. Allows mocking vehicle hal.
  * @hide
@@ -37,28 +29,11 @@
 @SystemApi
 public final class CarTestManager implements CarManagerBase {
 
-    /**
-     * Flag for {@link #startMocking(VehicleNetworkHalMock, int)}.
-     * This is for passing no flag.
-     */
-    public static final int FLAG_MOCKING_NONE = 0x0;
-
-    /**
-     * Flag for {@link #startMocking(VehicleNetworkHalMock, int)}.
-     * When this flag is set, shutdown request from mocked vehicle HAL will shutdown the system
-     * instead of avoiding shutdown, which is the default behavior.
-     * This can be used to test shutdown flow manually using mocking.
-     */
-    public static final int FLAG_MOCKING_REAL_SHUTDOWN = 0x1;
-
     private final ICarTest mService;
 
-    @GuardedBy("this")
-    private VehicleNetworkHalMock mHalMock;
-    private IVehicleNetworkHalMockImpl mHalMockImpl;
 
-    public CarTestManager(CarTestManagerBinderWrapper wrapper) {
-        mService = ICarTest.Stub.asInterface(wrapper.binder);
+    public CarTestManager(IBinder carServiceBinder) {
+        mService = ICarTest.Stub.asInterface(carServiceBinder);
     }
 
     @Override
@@ -67,127 +42,36 @@
     }
 
     /**
-     * Inject vehicle prop value event.
-     * @param value
+     * Releases all car services. This make sense for test purpose when it is necessary to reduce
+     * interference between testing and real instances of Car Service. For example changing audio
+     * focus in CarAudioService may affect framework's AudioManager listeners. AudioManager has a
+     * lot of complex logic which is hard to mock.
      */
-    public void injectEvent(VehiclePropValue value) {
+    @RequiresPermission(Car.PERMISSION_CAR_TEST_SERVICE)
+    public void stopCarService(IBinder token) {
         try {
-            mService.injectEvent(new VehiclePropValueParcelable(value));
+            mService.stopCarService(token);
         } catch (RemoteException e) {
             handleRemoteException(e);
         }
     }
 
     /**
-     * Check if given property is supported by vehicle hal.
-     * @param property
-     * @return
+     * Re-initializes previously released car service.
+     *
+     * @see {@link #stopCarService(IBinder)}
      */
-    public boolean isPropertySupported(int property) {
+    @RequiresPermission(Car.PERMISSION_CAR_TEST_SERVICE)
+    public void startCarService(IBinder token) {
         try {
-            return mService.isPropertySupported(property);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-        return false;
-    }
-    /**
-     * Start mocking vehicle HAL. It is somewhat strange to re-use interface in lower level
-     * API, but this is only for testing, and interface is exactly the same.
-     * @param mock
-     * @flags Combination of FLAG_MOCKING_*
-     */
-    public void startMocking(VehicleNetworkHalMock mock, int flags) {
-        IVehicleNetworkHalMockImpl halMockImpl = new IVehicleNetworkHalMockImpl(this);
-        synchronized (this) {
-            mHalMock = mock;
-            mHalMockImpl = halMockImpl;
-        }
-        try {
-            mService.startMocking(halMockImpl, flags);
+            mService.startCarService(token);
         } catch (RemoteException e) {
             handleRemoteException(e);
         }
     }
 
-    /**
-     * Stop previously started mocking.
-     */
-    public void stopMocking() {
-        IVehicleNetworkHalMockImpl halMockImpl;
-        synchronized (this) {
-            halMockImpl = mHalMockImpl;
-            mHalMock = null;
-            mHalMockImpl = null;
-        }
-        try {
-            mService.stopMocking(halMockImpl);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-    }
-
-    private synchronized VehicleNetworkHalMock getHalMock() {
-        return mHalMock;
-    }
-
-    private void handleRemoteException(RemoteException e) {
+    private static void handleRemoteException(RemoteException e) {
         // let test fail
         throw new RuntimeException(e);
     }
-
-    private static class IVehicleNetworkHalMockImpl extends IVehicleNetworkHalMock.Stub {
-        private final WeakReference<CarTestManager> mTestManager;
-
-        private IVehicleNetworkHalMockImpl(CarTestManager testManager) {
-            mTestManager = new WeakReference<CarTestManager>(testManager);
-        }
-
-        @Override
-        public VehiclePropConfigsParcelable onListProperties() {
-            CarTestManager testManager = mTestManager.get();
-            if (testManager == null) {
-                return null;
-            }
-            VehiclePropConfigs configs = testManager.getHalMock().onListProperties();
-            return new VehiclePropConfigsParcelable(configs);
-        }
-
-        @Override
-        public void onPropertySet(VehiclePropValueParcelable value) {
-            CarTestManager testManager = mTestManager.get();
-            if (testManager == null) {
-                return;
-            }
-            testManager.getHalMock().onPropertySet(value.value);
-        }
-
-        @Override
-        public VehiclePropValueParcelable onPropertyGet(VehiclePropValueParcelable value) {
-            CarTestManager testManager = mTestManager.get();
-            if (testManager == null) {
-                return null;
-            }
-            VehiclePropValue retValue = testManager.getHalMock().onPropertyGet(value.value);
-            return new VehiclePropValueParcelable(retValue);
-        }
-
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-            CarTestManager testManager = mTestManager.get();
-            if (testManager == null) {
-                return;
-            }
-            testManager.getHalMock().onPropertySubscribe(property, sampleRate, zones);
-        }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) {
-            CarTestManager testManager = mTestManager.get();
-            if (testManager == null) {
-                return;
-            }
-            testManager.getHalMock().onPropertyUnsubscribe(property);
-        }
-    }
 }
diff --git a/car-systemtest-lib/src/android/car/test/ICarTest.aidl b/car-systemtest-lib/src/android/car/test/ICarTest.aidl
index 05a2adc..90153cd 100644
--- a/car-systemtest-lib/src/android/car/test/ICarTest.aidl
+++ b/car-systemtest-lib/src/android/car/test/ICarTest.aidl
@@ -16,17 +16,19 @@
 
 package android.car.test;
 
-import com.android.car.vehiclenetwork.IVehicleNetworkHalMock;
-import com.android.car.vehiclenetwork.VehiclePropValueParcelable;
+import android.os.IBinder;
 
 /** @hide */
 interface ICarTest {
-    /** For testing only. inject events. */
-    void injectEvent(in VehiclePropValueParcelable value)         = 1;
-    /** For testing only. Start in mocking mode. */
-    void startMocking(in IVehicleNetworkHalMock mock, int flags)  = 2;
-    /** Finish mocking mode. */
-    void stopMocking(in IVehicleNetworkHalMock mock)              = 3;
-    /** If given property is supported or not */
-    boolean isPropertySupported(int property)                     = 4;
+    /**
+     * Calling this method will effectively call release method for all car services. This make
+     * sense for test purpose when it is neccessary to reduce interference between testing and
+     * real instances of Car Service. For example changing audio focus in CarAudioService may
+     * affect framework's AudioManager listeners. AudioManager has a lot of complex logic which is
+     * hard to mock.
+     */
+    void stopCarService(IBinder token) = 1;
+
+    /** Re initializes car services that was previously released by #releaseCarService method. */
+    void startCarService(IBinder token) = 2;
 }
diff --git a/car-systemtest-lib/src/android/car/test/VehicleHalEmulator.java b/car-systemtest-lib/src/android/car/test/VehicleHalEmulator.java
deleted file mode 100644
index 3091e6d..0000000
--- a/car-systemtest-lib/src/android/car/test/VehicleHalEmulator.java
+++ /dev/null
@@ -1,359 +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 android.car.test;
-
-import android.car.Car;
-import android.car.CarNotConnectedException;
-import android.util.Log;
-
-import com.android.car.vehiclenetwork.VehicleNetwork.VehicleNetworkHalMock;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePermissionModel;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfigs;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
-
-import java.lang.reflect.Field;
-import java.util.HashMap;
-
-/**
- * This is for mocking vehicle HAL and testing system's internal behavior.
- * By default, emulated vehicle HAL will have all properties defined with default values
- * returned for get call. Each test can replace default behavior with
- * {@link #addProperty(VehiclePropConfig, VehicleHalPropertyHandler)} or
- * {@link #addStaticProperty(VehiclePropConfig, VehiclePropValue)}.
- * To test a case where specific property should not be present, test can call
- * {@link #removeProperty(int)}.
- *
- * Adding / removing properties should be done before calling {@link #start()} as the call will
- * start emulating with properties added / removed up to now.
- * @hide
- */
-public class VehicleHalEmulator {
-    private static final String TAG = VehicleHalEmulator.class.getSimpleName();
-    /**
-     * Interface for handler of each property.
-     */
-    public interface VehicleHalPropertyHandler {
-        void onPropertySet(VehiclePropValue value);
-        VehiclePropValue onPropertyGet(VehiclePropValue value);
-        void onPropertySubscribe(int property, float sampleRate, int zones);
-        void onPropertyUnsubscribe(int property);
-    }
-
-    private final HashMap<Integer, VehicleHalProperty> mProperties =
-            new HashMap<>();
-
-    private final CarTestManager mCarTestManager;
-    private final HalMock mMock = new HalMock();
-    private boolean mDefaultPropertiesPopulated = false;
-    private boolean mStarted = false;
-
-    /**
-     * Constructor. Car instance passed should be already connected to car service.
-     * @param car
-     */
-    public VehicleHalEmulator(Car car) {
-        try {
-            mCarTestManager = new CarTestManager(
-                    (CarTestManagerBinderWrapper) car.getCarManager(Car.TEST_SERVICE));
-        } catch (CarNotConnectedException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /**
-     * Add property to mocked vehicle hal.
-     * @param config
-     * @param handler
-     */
-    public synchronized void addProperty(VehiclePropConfig config,
-            VehicleHalPropertyHandler handler) {
-        populateDefaultPropertiesIfNecessary();
-        VehicleHalProperty halProp = new VehicleHalProperty(config, handler);
-        mProperties.put(config.getProp(), halProp);
-    }
-
-    /**
-     * Add static property to mocked vehicle hal.
-     * @param config
-     * @param value
-     */
-    public synchronized void addStaticProperty(VehiclePropConfig config, VehiclePropValue value) {
-        populateDefaultPropertiesIfNecessary();
-        DefaultPropertyHandler handler = new DefaultPropertyHandler(config, value);
-        VehicleHalProperty halProp = new VehicleHalProperty(config, handler);
-        mProperties.put(config.getProp(), halProp);
-    }
-
-    /**
-     * Remove this property from vehicle HAL properties. Emulated vehicle HAL will not have this
-     * property. This is useful to test the case where specific property is not present.
-     * @param property
-     */
-    public synchronized void removeProperty(int property) {
-        populateDefaultPropertiesIfNecessary();
-        mProperties.remove(property);
-    }
-
-    /**
-     * Start emulation. All necessary properties should have been added / removed before this.
-     */
-    public void start() {
-        populateDefaultPropertiesIfNecessary();
-
-        mCarTestManager.startMocking(mMock, CarTestManager.FLAG_MOCKING_NONE);
-        synchronized (this) {
-            mStarted = true;
-        }
-    }
-
-    /** Whether emulation is started or not. */
-    public synchronized boolean isStarted() {
-        return mStarted;
-    }
-
-    /**
-     * Stop emulation. should be done before finishing test.
-     */
-    public void stop() {
-        mCarTestManager.stopMocking();
-        synchronized (this) {
-            mStarted = false;
-        }
-    }
-
-    /**
-     * Inject given value to VNS which ultimately delivered as HAL event to clients.
-     * This can be used to emulate H/W side change.
-     * @param value
-     */
-    public void injectEvent(VehiclePropValue value) {
-        mCarTestManager.injectEvent(value);
-    }
-
-    public static void assertPropertyForGet(VehiclePropConfig config, int property) {
-        assertProperty(config, property);
-        if ((config.getAccess() & VehiclePropAccess.VEHICLE_PROP_ACCESS_READ) == 0) {
-            throw new IllegalArgumentException("cannot set write-only property 0x" +
-                    Integer.toHexString(config.getProp()));
-        }
-    }
-
-    public static void assertPropertyForSet(VehiclePropConfig config, VehiclePropValue value) {
-        assertProperty(config, value.getProp());
-        if ((config.getAccess() & VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE) == 0) {
-            throw new IllegalArgumentException("cannot set read-only property 0x" +
-                    Integer.toHexString(config.getProp()));
-        }
-    }
-
-    public static void assertPropertyForSubscribe(VehiclePropConfig config, int property,
-            float sampleRate, int zones) {
-        assertPropertyForGet(config, property);
-        if (config.getChangeMode() == VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC) {
-            throw new IllegalStateException("cannot subscribe static property 0x" +
-                    Integer.toHexString(config.getProp()));
-        }
-    }
-
-    public static void assertProperty(VehiclePropConfig config, int property) {
-        if (config.getProp() != property) {
-            throw new IllegalStateException("Wrong prop, expecting 0x" +
-                    Integer.toHexString(config.getProp()) + " while got 0x" +
-                    Integer.toHexString(property));
-        }
-    }
-
-    private synchronized void populateDefaultPropertiesIfNecessary() {
-        // TODO:  Consider validating that emulation is not currently running (ie: mStarted = false)
-        if (mDefaultPropertiesPopulated) {
-            return;
-        }
-
-        Log.d(TAG, "VehicleHalEmulator populating default properties...");
-
-        for (Field f : VehicleNetworkConsts.class.getDeclaredFields()) {
-            if (f.getType() == int.class) {
-                int property = 0;
-                try {
-                    property = f.getInt(null);
-                } catch (IllegalAccessException e) {
-                    continue;
-                }
-                int valueType = VehicleNetworkConsts.getVehicleValueType(property);
-                if (valueType == VehicleValueType.VEHICLE_VALUE_TYPE_SHOUD_NOT_USE) {
-                    // invalid property or not a property
-                    continue;
-                }
-                // black list of properties which should not be into default property
-                // as default value does not work.
-                switch (property) {
-                    case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME:
-                    case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS:
-                    case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT:
-                    case VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_STATE:
-                    case VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_BOOTUP_REASON:
-                        continue;
-                }
-                int changeMode = VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC;
-                int[] changeModes = VehicleNetworkConsts.getVehicleChangeMode(property);
-                if (changeModes != null) {
-                    changeMode = changeModes[0];
-                }
-                int[] accesses = VehicleNetworkConsts.getVehicleAccess(property);
-                if (accesses == null) { // invalid
-                    continue;
-                }
-                VehiclePropConfig config = VehiclePropConfig.newBuilder().
-                        setProp(property).
-                        setAccess(accesses[0]).
-                        setChangeMode(changeMode).
-                        setValueType(valueType).
-                        setPermissionModel(
-                                VehiclePermissionModel.VEHICLE_PERMISSION_NO_RESTRICTION).
-                        addConfigArray(0).
-                        setSampleRateMax(0).
-                        setSampleRateMin(0).
-                        build();
-                VehiclePropValue initialValue = VehiclePropValueUtil.createDummyValue(property,
-                        valueType);
-                DefaultPropertyHandler handler = new DefaultPropertyHandler(config, initialValue);
-                VehicleHalProperty halProp = new VehicleHalProperty(config, handler);
-                mProperties.put(property, halProp);
-            }
-        }
-        mDefaultPropertiesPopulated = true;
-    }
-
-    private synchronized VehiclePropConfigs handleListProperties() {
-        Log.d(TAG, "handleListProperties sees " + mProperties.size() + " values.");
-
-        VehiclePropConfigs.Builder builder = VehiclePropConfigs.newBuilder();
-        for (VehicleHalProperty halProp : mProperties.values()) {
-            builder.addConfigs(halProp.config);
-        }
-        return builder.build();
-    }
-
-    private synchronized void handlePropertySet(VehiclePropValue value) {
-        getHalPropertyLocked(value.getProp()).handler.onPropertySet(value);
-    }
-
-    private synchronized VehiclePropValue handlePropertyGet(VehiclePropValue value) {
-        return getHalPropertyLocked(value.getProp()).handler.onPropertyGet(value);
-    }
-
-    private synchronized void handlePropertySubscribe(int property, float sampleRate, int zones) {
-        getHalPropertyLocked(property).handler.onPropertySubscribe(property, sampleRate, zones);
-    }
-
-    private synchronized void handlePropertyUnsubscribe(int property) {
-        getHalPropertyLocked(property).handler.onPropertyUnsubscribe(property);
-    }
-
-    private VehicleHalProperty getHalPropertyLocked(int property) {
-        VehicleHalProperty halProp = mProperties.get(property);
-        if (halProp == null) {
-            IllegalArgumentException e = new IllegalArgumentException();
-            Log.i(TAG, "property not supported:" + Integer.toHexString(property), e);
-            throw e;
-        }
-        return halProp;
-    }
-
-    private static class VehicleHalProperty {
-        public final VehiclePropConfig config;
-        public final VehicleHalPropertyHandler handler;
-
-        public VehicleHalProperty(VehiclePropConfig config, VehicleHalPropertyHandler handler) {
-            this.config = config;
-            this.handler = handler;
-        }
-    }
-
-    private static class DefaultPropertyHandler implements VehicleHalPropertyHandler {
-        private final VehiclePropConfig mConfig;
-        private VehiclePropValue mValue;
-        private boolean mSubscribed = false;
-
-        public DefaultPropertyHandler(VehiclePropConfig config, VehiclePropValue initialValue) {
-            mConfig = config;
-            mValue = initialValue;
-        }
-
-        @Override
-        public synchronized void onPropertySet(VehiclePropValue value) {
-            assertPropertyForSet(mConfig, value);
-            mValue = value;
-        }
-
-        @Override
-        public synchronized VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            assertPropertyForGet(mConfig, value.getProp());
-            return mValue;
-        }
-
-        @Override
-        public synchronized void onPropertySubscribe(int property, float sampleRate, int zones) {
-            assertPropertyForSubscribe(mConfig, property, sampleRate, zones);
-            mSubscribed = true;
-        }
-
-        @Override
-        public synchronized void onPropertyUnsubscribe(int property) {
-            assertProperty(mConfig, property);
-            if (!mSubscribed) {
-                throw new IllegalArgumentException("unsubscibe for not subscribed property 0x" +
-                        Integer.toHexString(property));
-            }
-            mSubscribed = false;
-        }
-
-    }
-
-    private class HalMock implements VehicleNetworkHalMock {
-
-        @Override
-        public VehiclePropConfigs onListProperties() {
-            return handleListProperties();
-        }
-
-        @Override
-        public void onPropertySet(VehiclePropValue value) {
-            handlePropertySet(value);
-        }
-
-        @Override
-        public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            return handlePropertyGet(value);
-        }
-
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-            handlePropertySubscribe(property, sampleRate, zones);
-        }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) {
-            handlePropertyUnsubscribe(property);
-        }
-    }
-}
diff --git a/car_product/build/car.mk b/car_product/build/car.mk
index 8243061..fe9b644 100644
--- a/car_product/build/car.mk
+++ b/car_product/build/car.mk
@@ -95,7 +95,6 @@
     libvehiclenetwork-native \
     libvehiclemonitor-native \
     vns_policy.xml \
-    vendor_vns_policy.xml #for testing, should be replaced by vendor
 
 # Boot animation
 PRODUCT_COPY_FILES += \
diff --git a/car_product/build/car_base.mk b/car_product/build/car_base.mk
index d192a81..4c65033 100644
--- a/car_product/build/car_base.mk
+++ b/car_product/build/car_base.mk
@@ -80,7 +80,8 @@
     mdnsd \
     requestsync \
     wifi-service \
-    A2dpSinkService
+    A2dpSinkService \
+    android.hardware.vehicle@2.0-service \
 
 $(call inherit-product, $(SRC_TARGET_DIR)/product/core_minimal.mk)
 
diff --git a/car_product/sepolicy/file_contexts b/car_product/sepolicy/file_contexts
index 182c923..30d4471 100644
--- a/car_product/sepolicy/file_contexts
+++ b/car_product/sepolicy/file_contexts
@@ -5,4 +5,5 @@
 /system/bin/vehicle_network_service              u:object_r:vns_exec:s0
 /system/bin/vehicle_monitor_service              u:object_r:vms_exec:s0
 
+/system/bin/hw/android.hardware.vehicle@2.0-service  u:object_r:hal_vehicle_exec:s0
 ###################################
diff --git a/car_product/sepolicy/hal_vehicle.te b/car_product/sepolicy/hal_vehicle.te
new file mode 100644
index 0000000..fcb34cf
--- /dev/null
+++ b/car_product/sepolicy/hal_vehicle.te
@@ -0,0 +1,13 @@
+# vehicle subsystem
+type hal_vehicle, domain;
+type hal_vehicle_exec, exec_type, file_type;
+
+# hwbinder access
+hwbinder_use(hal_vehicle)
+
+allow hal_vehicle system_app:binder { call };
+allow hal_vehicle priv_app:binder { call };
+allow hal_vehicle car_service:service_manager { add };
+
+# may be started by init
+init_daemon_domain(hal_vehicle)
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetwork.aidl b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetwork.aidl
deleted file mode 100644
index cd16b4d..0000000
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetwork.aidl
+++ /dev/null
@@ -1,49 +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.vehiclenetwork;
-
-import com.android.car.vehiclenetwork.IVehicleNetworkHalMock;
-import com.android.car.vehiclenetwork.IVehicleNetworkListener;
-import com.android.car.vehiclenetwork.VehiclePropConfigsParcelable;
-import com.android.car.vehiclenetwork.VehiclePropValueParcelable;
-import com.android.car.vehiclenetwork.VehiclePropValuesParcelable;
-
-/**
-  * Binder API to access vehicle network service.
-  * @hide
-  */
-interface IVehicleNetwork {
-    VehiclePropConfigsParcelable listProperties(int property)                            = 0;
-    /** For error case, exception will be thrown. */
-    void setProperty(in VehiclePropValueParcelable value)                                = 1;
-    VehiclePropValueParcelable getProperty(in VehiclePropValueParcelable value)          = 2;
-    /** For error case, exception will be thrown. */
-    void subscribe(in IVehicleNetworkListener listener, int property, float sampleRate,
-                   int zones, int flags)                                                 = 3;
-    void unsubscribe(in IVehicleNetworkListener listener, int property)                  = 4;
-    /** For testing only. inject events. */
-    void injectEvent(in VehiclePropValueParcelable value)                                = 5;
-    /** For testing only. Start in mocking mode. */
-    void startMocking(in IVehicleNetworkHalMock mock)                                    = 6;
-    /** Finish mocking mode. */
-    void stopMocking(in IVehicleNetworkHalMock mock)                                     = 7;
-    void injectHalError(int errorCode, int property, int operation)                      = 8;
-    void startErrorListening(in IVehicleNetworkListener listener)                        = 9;
-    void stopErrorListening(in IVehicleNetworkListener listener)                         = 10;
-    void startHalRestartMonitoring(in IVehicleNetworkListener listener)                  = 11;
-    void stopHalRestartMonitoring(in IVehicleNetworkListener listener)                   = 12;
-}
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetworkHalMock.aidl b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetworkHalMock.aidl
deleted file mode 100644
index 18e295d..0000000
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetworkHalMock.aidl
+++ /dev/null
@@ -1,31 +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.vehiclenetwork;
-
-import com.android.car.vehiclenetwork.VehiclePropConfigsParcelable;
-import com.android.car.vehiclenetwork.VehiclePropValueParcelable;
-
-/**
- * Listener for vehicle HAL mock. This is used for internal testing only.
- * @hide
- */
-interface IVehicleNetworkHalMock {
-    VehiclePropConfigsParcelable onListProperties() = 0;
-    void onPropertySet(in VehiclePropValueParcelable value) = 1;
-    VehiclePropValueParcelable onPropertyGet(in VehiclePropValueParcelable value) = 2;
-    void onPropertySubscribe(int property, float sampleRate, int zones) = 3;
-    void onPropertyUnsubscribe(int property) = 4;
-}
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetworkListener.aidl b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetworkListener.aidl
deleted file mode 100644
index 6403e03..0000000
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/IVehicleNetworkListener.aidl
+++ /dev/null
@@ -1,32 +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.vehiclenetwork;
-
-import com.android.car.vehiclenetwork.VehiclePropValuesParcelable;
-import com.android.car.vehiclenetwork.VehiclePropValueParcelable;
-
-/**
- * Listener for vehicle network service. Intentionally both way as this is supposed to be
- * used between system components. Making this one way brings ordering issue.
- * @hide
- */
-interface IVehicleNetworkListener {
-    void onVehicleNetworkEvents(in VehiclePropValuesParcelable values) = 0;
-    void onHalError(int errorCode, int property, int operation)        = 1;
-    void onHalRestart(boolean inMocking)                               = 2;
-    void onPropertySet(in VehiclePropValueParcelable value)            = 3;
-}
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetwork.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetwork.java
deleted file mode 100644
index 7c8ff10..0000000
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetwork.java
+++ /dev/null
@@ -1,799 +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.vehiclenetwork;
-
-import static com.android.car.vehiclenetwork.VehiclePropValueUtil.getVectorLength;
-import static com.android.car.vehiclenetwork.VehiclePropValueUtil.isCustomProperty;
-import static com.android.car.vehiclenetwork.VehiclePropValueUtil.toFloatArray;
-import static com.android.car.vehiclenetwork.VehiclePropValueUtil.toIntArray;
-
-import android.annotation.IntDef;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.ServiceSpecificException;
-import android.util.Log;
-
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfigs;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValues;
-import com.android.internal.annotations.GuardedBy;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.ref.WeakReference;
-
-/**
- * System API to access Vehicle network. This is only for system services and applications should
- * not use this. All APIs will fail with security error if normal app tries this.
- */
-public class VehicleNetwork {
-    /**
-     * Listener for VNS events.
-     */
-    public interface VehicleNetworkListener {
-        /**
-         * Notify HAL events. This requires subscribing the property
-         */
-        void onVehicleNetworkEvents(VehiclePropValues values);
-        void onHalError(int errorCode, int property, int operation);
-        void onHalRestart(boolean inMocking);
-        void onPropertySet(VehiclePropValue value);
-    }
-
-    public interface VehicleNetworkHalMock {
-        VehiclePropConfigs onListProperties();
-        void onPropertySet(VehiclePropValue value);
-        VehiclePropValue onPropertyGet(VehiclePropValue value);
-        void onPropertySubscribe(int property, float sampleRate, int zones);
-        void onPropertyUnsubscribe(int property);
-    }
-
-    /**
-     * Flags to be used in #subscribe(int, float, int, int).
-     */
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef({
-            SubscribeFlags.HAL_EVENT,
-            SubscribeFlags.SET_CALL,
-            SubscribeFlags.DEFAULT,
-    })
-    public @interface SubscribeFlags {
-        int HAL_EVENT = 0x1;
-        int SET_CALL = 0x2;
-        int DEFAULT = HAL_EVENT;
-    }
-
-    private static final String TAG = VehicleNetwork.class.getSimpleName();
-
-    private final IVehicleNetwork mService;
-    private final VehicleNetworkListener mListener;
-    private final IVehicleNetworkListenerImpl mVehicleNetworkListener;
-    private final EventHandler mEventHandler;
-
-    @GuardedBy("this")
-    private VehicleNetworkHalMock mHalMock;
-    private IVehicleNetworkHalMock mHalMockImpl;
-
-    private static final int VNS_CONNECT_MAX_RETRY = 10;
-    private static final long VNS_RETRY_WAIT_TIME_MS = 1000;
-    private static final int NO_ZONE = -1;
-
-    /**
-     * Factory method to create VehicleNetwork
-     *
-     * @param listener listener for listening events
-     * @param looper Looper to dispatch listener events
-     */
-    public static VehicleNetwork createVehicleNetwork(VehicleNetworkListener listener,
-            Looper looper) {
-        int retryCount = 0;
-        IVehicleNetwork service = null;
-        while (true) {
-            service = IVehicleNetwork.Stub.asInterface(ServiceManager.getService(
-                    IVehicleNetwork.class.getCanonicalName()));
-            if (service != null) {
-                break;
-            }
-            retryCount++;
-            if (retryCount > VNS_CONNECT_MAX_RETRY) {
-                break;
-            }
-            try {
-                Thread.sleep(VNS_RETRY_WAIT_TIME_MS);
-            } catch (InterruptedException e) {
-                //ignore
-            }
-        }
-        if (service == null) {
-            throw new RuntimeException("Vehicle network service not available:" +
-                    IVehicleNetwork.class.getCanonicalName());
-        }
-        return new VehicleNetwork(service, listener, looper);
-    }
-
-    private VehicleNetwork(IVehicleNetwork service, VehicleNetworkListener listener,
-            Looper looper) {
-        mService = service;
-        mListener = listener;
-        mEventHandler = new EventHandler(looper);
-        mVehicleNetworkListener = new IVehicleNetworkListenerImpl(this);
-    }
-
-    /**
-     * List all properties from vehicle HAL
-     *
-     * @return all properties
-     */
-    public VehiclePropConfigs listProperties() {
-        return listProperties(0 /* all */);
-    }
-
-    /**
-     * Return configuration information of single property
-     *
-     * @param property vehicle property number defined in {@link VehicleNetworkConsts}. 0 has has
-     * special meaning of list all properties.
-     * @return null if given property does not exist.
-     */
-    public VehiclePropConfigs listProperties(int property) {
-        try {
-            VehiclePropConfigsParcelable parcelable = mService.listProperties(property);
-            if (parcelable != null) {
-                return parcelable.configs;
-            }
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-        return null;
-    }
-
-    /**
-     * Set property which will lead into writing the value to vehicle HAL.
-     *
-     * @throws IllegalArgumentException If value set has wrong value like wrong valueType, wrong
-     * data, and etc.
-     */
-    public void setProperty(VehiclePropValue value)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValueParcelable parcelable = new VehiclePropValueParcelable(value);
-        try {
-            mService.setProperty(parcelable);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-    }
-
-    /**
-     * Set integer type property
-     *
-     * @throws IllegalArgumentException For type mismatch (=the property is not int type)
-     */
-    public void setIntProperty(int property, int value)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValue v = VehiclePropValueUtil.createIntValue(property, value, 0);
-        setProperty(v);
-    }
-
-    /**
-     * Set int vector type property. Length of passed values should match with vector length.
-     */
-    public void setIntVectorProperty(int property, int[] values)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValue v = VehiclePropValueUtil.createIntVectorValue(property, values, 0);
-        setProperty(v);
-    }
-
-    /**
-     * Set long type property.
-     */
-    public void setLongProperty(int property, long value)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValue v = VehiclePropValueUtil.createLongValue(property, value, 0);
-        setProperty(v);
-    }
-
-    /**
-     * Set float type property.
-     */
-    public void setFloatProperty(int property, float value)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValue v = VehiclePropValueUtil.createFloatValue(property, value, 0);
-        setProperty(v);
-    }
-
-    /**
-     * Set float vector type property. Length of values should match with vector length.
-     */
-    public void setFloatVectorProperty(int property, float[] values)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValue v = VehiclePropValueUtil.createFloatVectorValue(property, values, 0);
-        setProperty(v);
-    }
-
-    /**
-     * Set boolean type property
-     *
-     * @throws IllegalArgumentException For type mismatch (=the property is not boolean type)
-     */
-    public void setBooleanProperty(int property, boolean value)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValue v = VehiclePropValueUtil.createBooleanValue(property, value, 0);
-        setProperty(v);
-    }
-
-    public void setStringProperty(int property, String value)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValue v = VehiclePropValueUtil.createStringValue(property, value, 0);
-        setProperty(v);
-    }
-
-    /**
-     * Set zoned boolean type property
-     *
-     * @throws IllegalArgumentException For type mismatch (=the property is not boolean type)
-     */
-    public void setZonedBooleanProperty(int property, int zone, boolean value)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValue v = VehiclePropValueUtil.createZonedBooleanValue(property, zone, value, 0);
-        setProperty(v);
-    }
-
-    /**
-     * Set zoned float type property
-     *
-     * @throws IllegalArgumentException For type mismatch (=the property is not float type)
-     */
-    public void setZonedFloatProperty(int property, int zone, float value)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValue v = VehiclePropValueUtil.createZonedFloatValue(property, zone, value, 0);
-        setProperty(v);
-    }
-
-    /**
-     * Set zoned integer type property
-     *
-     * @throws IllegalArgumentException For type mismatch (=the property is not int type)
-     */
-    public void setZonedIntProperty(int property, int zone, int value)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValue v = VehiclePropValueUtil.createZonedIntValue(property, zone, value, 0);
-        setProperty(v);
-    }
-
-    /**
-     * Set zoned int vector type property. Length of passed values should match with vector length.
-     */
-    public void setZonedIntVectorProperty(int property, int zone, int[] values)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValue v = VehiclePropValueUtil
-                .createZonedIntVectorValue(property, zone, values, 0);
-        setProperty(v);
-    }
-
-    /**
-     * Set zoned float vector type property. Length of passed values should match with vector
-     * length.
-     */
-    public void setZonedFloatVectorProperty(int property, int zone, float[] values)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValue v = VehiclePropValueUtil
-                .createZonedFloatVectorValue(property, zone, values, 0);
-        setProperty(v);
-    }
-
-    /**
-     * Get property. This can be used for a property which does not require any other data.
-     */
-    public VehiclePropValue getProperty(int property) throws IllegalArgumentException,
-            ServiceSpecificException {
-        int valueType = VehicleNetworkConsts.getVehicleValueType(property);
-        if (valueType == 0) {
-            throw new IllegalArgumentException("Data type is unknown for property: " + property);
-        }
-        VehiclePropValue value = VehiclePropValueUtil.createBuilder(property, valueType, 0).build();
-        return getProperty(value);
-    }
-
-    /**
-     * Generic get method for any type of property. Some property may require setting data portion
-     * as get may return different result depending on the data set.
-     */
-    public VehiclePropValue getProperty(VehiclePropValue value) throws IllegalArgumentException,
-            ServiceSpecificException {
-        VehiclePropValueParcelable parcelable = new VehiclePropValueParcelable(value);
-        try {
-            VehiclePropValueParcelable resParcelable = mService.getProperty(parcelable);
-            if (resParcelable != null) {
-                return resParcelable.value;
-            }
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-        return null;
-    }
-
-    /**
-     * Get int type property.
-     */
-    public int getIntProperty(int property) throws IllegalArgumentException,
-            ServiceSpecificException {
-        VehiclePropValue v = getProperty(
-                property, NO_ZONE, VehicleValueType.VEHICLE_VALUE_TYPE_INT32);
-        if (v.getInt32ValuesCount() != 1) {
-            throw new IllegalStateException();
-        }
-        return v.getInt32Values(0);
-    }
-
-    /**
-     * Get zoned int type property.
-     */
-    public int getZonedIntProperty(int property, int zone) throws IllegalArgumentException,
-            ServiceSpecificException {
-        VehiclePropValue v = getProperty(
-                property, zone, VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32);
-        if (v.getInt32ValuesCount() != 1) {
-            throw new IllegalStateException();
-        }
-        return v.getInt32Values(0);
-    }
-
-    /**
-     * Get int vector type property. Length of values should match vector length.
-     */
-    public int[] getIntVectorProperty(int property) throws IllegalArgumentException,
-            ServiceSpecificException {
-        VehiclePropValue v = getProperty(
-                property, NO_ZONE, VehicleValueType.VEHICLE_VALUE_TYPE_INT32);
-        assertVectorLength(v.getInt32ValuesCount(), property, v.getValueType());
-        return toIntArray(v.getInt32ValuesList());
-    }
-
-    /**
-     * Get zoned int vector type property. Length of values should match vector length.
-     */
-    public int[] getZonedIntVectorProperty(int property, int zone)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValue v = getProperty(
-                property, zone, VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32);
-        assertVectorLength(v.getInt32ValuesCount(), property, v.getValueType());
-        return toIntArray(v.getInt32ValuesList());
-    }
-
-    /**
-     * Get float type property.
-     */
-    public float getFloatProperty(int property) throws IllegalArgumentException,
-            ServiceSpecificException {
-        VehiclePropValue v = getProperty(
-                property, NO_ZONE, VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT);
-        if (v.getFloatValuesCount() != 1) {
-            throw new IllegalStateException();
-        }
-        return v.getFloatValues(0);
-    }
-
-    /**
-     * Get float vector type property. Length of values should match vector's length.
-     */
-    public float[] getFloatVectorProperty(int property) throws IllegalArgumentException,
-            ServiceSpecificException {
-        VehiclePropValue v = getProperty(
-                property, NO_ZONE, VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT);
-        assertVectorLength(v.getFloatValuesCount(), property, v.getValueType());
-        return toFloatArray(v.getFloatValuesList());
-    }
-
-    /**
-     * Get zoned float vector type property. Length of values should match vector's length.
-     */
-    public float[] getZonedFloatVectorProperty(int property, int zone)
-            throws IllegalArgumentException, ServiceSpecificException {
-        VehiclePropValue v = getProperty(property, zone,
-                VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT);
-        assertVectorLength(v.getFloatValuesCount(), property, v.getValueType());
-        return toFloatArray(v.getFloatValuesList());
-    }
-
-    /**
-     * Get long type property.
-     */
-    public long getLongProperty(int property) throws IllegalArgumentException,
-            ServiceSpecificException {
-        VehiclePropValue v = getProperty(
-                property, NO_ZONE, VehicleValueType.VEHICLE_VALUE_TYPE_INT64);
-        return v.getInt64Value();
-    }
-
-    /**
-     * Get string type property.
-     */
-    public String getStringProperty(int property) throws IllegalArgumentException,
-            ServiceSpecificException {
-        VehiclePropValue v = getProperty(
-                property, NO_ZONE, VehicleValueType.VEHICLE_VALUE_TYPE_STRING);
-        return v.getStringValue();
-    }
-
-    /**
-     * Subscribe given property with given sample rate.
-     */
-    public void subscribe(int property, float sampleRate) throws IllegalArgumentException {
-        subscribe(property, sampleRate, 0);
-    }
-
-    /**
-     * Subscribe given property with given sample rate and zones.
-     */
-    public void subscribe(int property, float sampleRate, int zones)
-            throws IllegalArgumentException {
-        try {
-            mService.subscribe(mVehicleNetworkListener, property, sampleRate, zones,
-                    SubscribeFlags.DEFAULT);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-    }
-
-    /**
-     * Subscribe given property with given sample rate, zones and flags.
-     */
-    @SuppressWarnings("ResourceType")
-    public void subscribe(int property, float sampleRate, int zones, @SubscribeFlags int flags)
-            throws IllegalArgumentException {
-        try {
-            mService.subscribe(mVehicleNetworkListener, property, sampleRate, zones, flags);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-    }
-
-    /**
-     * Stop subscribing the property.
-     */
-    public void unsubscribe(int property) {
-        try {
-            mService.unsubscribe(mVehicleNetworkListener, property);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-    }
-
-    /**
-     * Inject given value to all clients subscribing the property. This is for testing.
-     */
-    public synchronized void injectEvent(VehiclePropValue value) {
-        try {
-            mService.injectEvent(new VehiclePropValueParcelable(value));
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-    }
-
-    /**
-     * Start mocking of vehicle HAL. For testing only.
-     */
-    public synchronized void startMocking(VehicleNetworkHalMock mock) {
-        mHalMock = mock;
-        mHalMockImpl = new IVehicleNetworkHalMockImpl(this);
-        try {
-            mService.startMocking(mHalMockImpl);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-    }
-
-    /**
-     * Stop mocking of vehicle HAL. For testing only.
-     */
-    public synchronized void stopMocking() {
-        if (mHalMockImpl == null) {
-            return;
-        }
-        try {
-            mService.stopMocking(mHalMockImpl);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        } finally {
-            mHalMock = null;
-            mHalMockImpl = null;
-        }
-    }
-
-    /**
-     * Start mocking of vehicle HAL. For testing only.
-     */
-    public synchronized void startMocking(IVehicleNetworkHalMock mock) {
-        mHalMock = null;
-        mHalMockImpl = mock;
-        try {
-            mService.startMocking(mHalMockImpl);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-    }
-
-    /**
-     * Stop mocking of vehicle HAL. For testing only.
-     */
-    public synchronized void stopMocking(IVehicleNetworkHalMock mock) {
-        if (mock.asBinder() != mHalMockImpl.asBinder()) {
-            return;
-        }
-        try {
-            mService.stopMocking(mHalMockImpl);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        } finally {
-            mHalMock = null;
-            mHalMockImpl = null;
-        }
-    }
-
-    public synchronized void injectHalError(int errorCode, int property, int operation) {
-        try {
-            mService.injectHalError(errorCode, property, operation);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-    }
-
-    public synchronized void startErrorListening() {
-        try {
-            mService.startErrorListening(mVehicleNetworkListener);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-    }
-
-    public synchronized void stopErrorListening() {
-        try {
-            mService.stopErrorListening(mVehicleNetworkListener);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-    }
-
-    public synchronized void startHalRestartMonitoring() {
-        try {
-            mService.startHalRestartMonitoring(mVehicleNetworkListener);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-    }
-
-    public synchronized void stopHalRestartMonitoring() {
-        try {
-            mService.stopHalRestartMonitoring(mVehicleNetworkListener);
-        } catch (RemoteException e) {
-            handleRemoteException(e);
-        }
-    }
-
-    private synchronized VehicleNetworkHalMock getHalMock() {
-        return mHalMock;
-    }
-
-    private void handleRemoteException(RemoteException e) {
-        throw new RuntimeException("Vehicle network service not working ", e);
-    }
-
-    private void handleVehicleNetworkEvents(VehiclePropValues values) {
-        mListener.onVehicleNetworkEvents(values);
-    }
-
-    private void handleHalError(int errorCode, int property, int operation) {
-        mListener.onHalError(errorCode, property, operation);
-    }
-
-    private void handleHalRestart(boolean inMocking) {
-        mListener.onHalRestart(inMocking);
-    }
-
-    private void handleOnPropertySet(VehiclePropValue value) {
-        mListener.onPropertySet(value);
-    }
-
-    private class EventHandler extends Handler {
-
-        private static final int MSG_EVENTS = 0;
-        private static final int MSG_HAL_ERROR = 1;
-        private static final int MSG_HAL_RESTART = 2;
-        private static final int MSG_ON_PROPERTY_SET = 3;
-
-        private EventHandler(Looper looper) {
-            super(looper);
-        }
-
-        private void notifyEvents(VehiclePropValues values) {
-            Message msg = obtainMessage(MSG_EVENTS, values);
-            sendMessage(msg);
-        }
-
-        private void notifyHalError(int errorCode, int property, int operation) {
-            Message msg = obtainMessage(MSG_HAL_ERROR, errorCode, property, operation);
-            sendMessage(msg);
-        }
-
-        private void notifyHalRestart(boolean inMocking) {
-            Message msg = obtainMessage(MSG_HAL_RESTART, inMocking ? 1 : 0, 0);
-            sendMessage(msg);
-        }
-
-        private void notifyPropertySet(VehiclePropValue value) {
-            Message msg = obtainMessage(MSG_ON_PROPERTY_SET, value);
-            sendMessage(msg);
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MSG_EVENTS:
-                    handleVehicleNetworkEvents((VehiclePropValues) msg.obj);
-                    break;
-                case MSG_HAL_ERROR:
-                    handleHalError(msg.arg1, msg.arg2, (Integer) msg.obj);
-                    break;
-                case MSG_HAL_RESTART:
-                    handleHalRestart(msg.arg1 == 1);
-                    break;
-                case MSG_ON_PROPERTY_SET:
-                    handleOnPropertySet((VehiclePropValue) msg.obj);
-                default:
-                    Log.w(TAG, "Unknown message:" + msg.what, new RuntimeException());
-                    break;
-            }
-        }
-    }
-
-    private static class IVehicleNetworkListenerImpl extends IVehicleNetworkListener.Stub {
-
-        private final WeakReference<VehicleNetwork> mVehicleNetwork;
-
-        private IVehicleNetworkListenerImpl(VehicleNetwork vehicleNetwork) {
-            mVehicleNetwork = new WeakReference<>(vehicleNetwork);
-        }
-
-        @Override
-        public void onVehicleNetworkEvents(VehiclePropValuesParcelable values) {
-            VehicleNetwork vehicleNetwork = mVehicleNetwork.get();
-            if (vehicleNetwork != null) {
-                vehicleNetwork.mEventHandler.notifyEvents(values.values);
-            }
-        }
-
-        @Override
-        public void onPropertySet(VehiclePropValueParcelable value) {
-            VehicleNetwork vehicleNetwork = mVehicleNetwork.get();
-            if (vehicleNetwork != null) {
-                vehicleNetwork.mEventHandler.notifyPropertySet(value.value);
-            }
-        }
-
-        @Override
-        public void onHalError(int errorCode, int property, int operation) {
-            VehicleNetwork vehicleNetwork = mVehicleNetwork.get();
-            if (vehicleNetwork != null) {
-                vehicleNetwork.mEventHandler.notifyHalError(errorCode, property, operation);
-            }
-        }
-
-        @Override
-        public void onHalRestart(boolean inMocking) {
-            VehicleNetwork vehicleNetwork = mVehicleNetwork.get();
-            if (vehicleNetwork != null) {
-                vehicleNetwork.mEventHandler.notifyHalRestart(inMocking);
-            }
-        }
-    }
-
-    private static class IVehicleNetworkHalMockImpl extends IVehicleNetworkHalMock.Stub {
-        private final WeakReference<VehicleNetwork> mVehicleNetwork;
-
-        private IVehicleNetworkHalMockImpl(VehicleNetwork vehicleNewotk) {
-            mVehicleNetwork = new WeakReference<>(vehicleNewotk);
-        }
-
-        @Override
-        public VehiclePropConfigsParcelable onListProperties() {
-            VehicleNetwork vehicleNetwork = mVehicleNetwork.get();
-            if (vehicleNetwork == null) {
-                return null;
-            }
-            VehiclePropConfigs configs = vehicleNetwork.getHalMock().onListProperties();
-            return new VehiclePropConfigsParcelable(configs);
-        }
-
-        @Override
-        public void onPropertySet(VehiclePropValueParcelable value) {
-            VehicleNetwork vehicleNetwork = mVehicleNetwork.get();
-            if (vehicleNetwork == null) {
-                return;
-            }
-            vehicleNetwork.getHalMock().onPropertySet(value.value);
-        }
-
-        @Override
-        public VehiclePropValueParcelable onPropertyGet(VehiclePropValueParcelable value) {
-            VehicleNetwork vehicleNetwork = mVehicleNetwork.get();
-            if (vehicleNetwork == null) {
-                return null;
-            }
-            VehiclePropValue resValue = vehicleNetwork.getHalMock().onPropertyGet(value.value);
-            return new VehiclePropValueParcelable(resValue);
-        }
-
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-            VehicleNetwork vehicleNetwork = mVehicleNetwork.get();
-            if (vehicleNetwork == null) {
-                return;
-            }
-            vehicleNetwork.getHalMock().onPropertySubscribe(property, sampleRate, zones);
-        }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) {
-            VehicleNetwork vehicleNetwork = mVehicleNetwork.get();
-            if (vehicleNetwork == null) {
-                return;
-            }
-            vehicleNetwork.getHalMock().onPropertyUnsubscribe(property);
-        }
-    }
-
-    private VehiclePropValue getProperty(int property, int zone, int customPropetyDataType) {
-        boolean isCustom = isCustomProperty(property);
-        int valueType = isCustom
-                ? customPropetyDataType
-                : VehicleNetworkConsts.getVehicleValueType(property);
-
-        VehiclePropValue.Builder valuePrototypeBuilder =
-                VehiclePropValueUtil.createBuilder(property, valueType, 0);
-
-        if (zone != NO_ZONE) {
-            valuePrototypeBuilder.setZone(zone);
-        }
-
-        VehiclePropValue v = getProperty(valuePrototypeBuilder.build());
-        if (v == null) {
-            // if property is invalid, IllegalArgumentException should have been thrown
-            // from getProperty.
-            throw new IllegalStateException();
-        }
-
-        if (!isCustom && v.getValueType() != valueType) {
-            throw new IllegalArgumentException(
-                    "Unexpected type for property 0x" + Integer.toHexString(property) +
-                    " got:0x" + Integer.toHexString(v.getValueType())
-                    + ", expecting:0x" + Integer.toHexString(valueType));
-        }
-        return v;
-    }
-
-    private void assertVectorLength(int actual, int property, int valueType) {
-        int expectedLen = getVectorLength(valueType);
-        if (expectedLen != actual) {
-            throw new IllegalStateException("Invalid array size for property: " + property
-                    + ". Expected: " + expectedLen
-                    + ", actual: " + actual);
-        }
-    }
-}
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java
deleted file mode 100644
index 047b3ab..0000000
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkConsts.java
+++ /dev/null
@@ -1,1365 +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.
- */
-
-// Autogenerated from vehicle.h using
-// libvehiclenetwork/tool/vehiclehal_code_gen.py.
-// Do not modify manually.
-
-package com.android.car.vehiclenetwork;
-
-public class VehicleNetworkConsts {
-
-public static final int VEHICLE_PROPERTY_INVALID = 0x0;
-public static final int VEHICLE_PROPERTY_INFO_VIN = 0x00000100;
-public static final int VEHICLE_PROPERTY_INFO_MAKE = 0x00000101;
-public static final int VEHICLE_PROPERTY_INFO_MODEL = 0x00000102;
-public static final int VEHICLE_PROPERTY_INFO_MODEL_YEAR = 0x00000103;
-public static final int VEHICLE_PROPERTY_INFO_FUEL_CAPACITY = 0x00000104;
-public static final int VEHICLE_PROPERTY_PERF_ODOMETER = 0x00000204;
-public static final int VEHICLE_PROPERTY_PERF_VEHICLE_SPEED = 0x00000207;
-public static final int VEHICLE_PROPERTY_ENGINE_COOLANT_TEMP = 0x00000301;
-public static final int VEHICLE_PROPERTY_ENGINE_OIL_TEMP = 0x00000304;
-public static final int VEHICLE_PROPERTY_ENGINE_RPM = 0x00000305;
-public static final int VEHICLE_PROPERTY_GEAR_SELECTION = 0x00000400;
-public static final int VEHICLE_PROPERTY_CURRENT_GEAR = 0x00000401;
-public static final int VEHICLE_PROPERTY_PARKING_BRAKE_ON = 0x00000402;
-public static final int VEHICLE_PROPERTY_DRIVING_STATUS = 0x00000404;
-public static final int VEHICLE_PROPERTY_FUEL_LEVEL_LOW = 0x00000405;
-public static final int VEHICLE_PROPERTY_NIGHT_MODE = 0x00000407;
-public static final int VEHICLE_PROPERTY_HVAC_FAN_SPEED = 0x00000500;
-public static final int VEHICLE_PROPERTY_HVAC_FAN_DIRECTION = 0x00000501;
-public static final int VEHICLE_PROPERTY_HVAC_TEMPERATURE_CURRENT = 0x00000502;
-public static final int VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET = 0x00000503;
-public static final int VEHICLE_PROPERTY_HVAC_DEFROSTER = 0x00000504;
-public static final int VEHICLE_PROPERTY_HVAC_AC_ON = 0x00000505;
-public static final int VEHICLE_PROPERTY_HVAC_MAX_AC_ON = 0x00000506;
-public static final int VEHICLE_PROPERTY_HVAC_MAX_DEFROST_ON = 0x00000507;
-public static final int VEHICLE_PROPERTY_HVAC_RECIRC_ON = 0x00000508;
-public static final int VEHICLE_PROPERTY_HVAC_DUAL_ON = 0x00000509;
-public static final int VEHICLE_PROPERTY_HVAC_AUTO_ON = 0x0000050A;
-public static final int VEHICLE_PROPERTY_HVAC_SEAT_TEMPERATURE = 0x0000050B;
-public static final int VEHICLE_PROPERTY_HVAC_SIDE_MIRROR_HEAT = 0x0000050C;
-public static final int VEHICLE_PROPERTY_HVAC_STEERING_WHEEL_TEMP = 0x0000050D;
-public static final int VEHICLE_PROPERTY_HVAC_TEMPERATURE_UNITS = 0x0000050E;
-public static final int VEHICLE_PROPERTY_HVAC_ACTUAL_FAN_SPEED_RPM = 0x0000050F;
-public static final int VEHICLE_PROPERTY_HVAC_POWER_ON = 0x00000510;
-public static final int VEHICLE_PROPERTY_HVAC_FAN_DIRECTION_AVAILABLE = 0x00000511;
-public static final int VEHICLE_PROPERTY_ENV_OUTSIDE_TEMPERATURE = 0x00000703;
-public static final int VEHICLE_PROPERTY_ENV_CABIN_TEMPERATURE = 0x00000704;
-public static final int VEHICLE_PROPERTY_RADIO_PRESET = 0x00000801;
-public static final int VEHICLE_PROPERTY_AUDIO_FOCUS = 0x00000900;
-public static final int VEHICLE_PROPERTY_AUDIO_VOLUME = 0x00000901;
-public static final int VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT = 0x00000902;
-public static final int VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY = 0x00000903;
-public static final int VEHICLE_PROPERTY_AUDIO_HW_VARIANT = 0x00000904;
-public static final int VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT = 0x00000905;
-public static final int VEHICLE_PROPERTY_AP_POWER_STATE = 0x00000A00;
-public static final int VEHICLE_PROPERTY_DISPLAY_BRIGHTNESS = 0x00000A01;
-public static final int VEHICLE_PROPERTY_AP_POWER_BOOTUP_REASON = 0x00000A02;
-public static final int VEHICLE_PROPERTY_HW_KEY_INPUT = 0x00000A10;
-public static final int VEHICLE_PROPERTY_INSTRUMENT_CLUSTER_INFO = 0x00000A20;
-public static final int VEHICLE_PROPERTY_UNIX_TIME = 0x00000A30;
-public static final int VEHICLE_PROPERTY_CURRENT_TIME_IN_SECONDS = 0x00000A31;
-public static final int VEHICLE_PROPERTY_DOOR_POS = 0x00000B00;
-public static final int VEHICLE_PROPERTY_DOOR_MOVE = 0x00000B01;
-public static final int VEHICLE_PROPERTY_DOOR_LOCK = 0x00000B02;
-public static final int VEHICLE_PROPERTY_MIRROR_Z_POS = 0x00000B40;
-public static final int VEHICLE_PROPERTY_MIRROR_Z_MOVE = 0x00000B41;
-public static final int VEHICLE_PROPERTY_MIRROR_Y_POS = 0x00000B42;
-public static final int VEHICLE_PROPERTY_MIRROR_Y_MOVE = 0x00000B43;
-public static final int VEHICLE_PROPERTY_MIRROR_LOCK = 0x00000B44;
-public static final int VEHICLE_PROPERTY_MIRROR_FOLD = 0x00000B45;
-public static final int VEHICLE_PROPERTY_SEAT_MEMORY_SELECT = 0x00000B80;
-public static final int VEHICLE_PROPERTY_SEAT_MEMORY_SET = 0x00000B81;
-public static final int VEHICLE_PROPERTY_SEAT_BELT_BUCKLED = 0x00000B82;
-public static final int VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_POS = 0x00000B83;
-public static final int VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_MOVE = 0x00000B84;
-public static final int VEHICLE_PROPERTY_SEAT_FORE_AFT_POS = 0x00000B85;
-public static final int VEHICLE_PROPERTY_SEAT_FORE_AFT_MOVE = 0x00000B86;
-public static final int VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_POS = 0x00000B87;
-public static final int VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_MOVE = 0x00000B88;
-public static final int VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_POS = 0x00000B89;
-public static final int VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_MOVE = 0x00000B8A;
-public static final int VEHICLE_PROPERTY_SEAT_HEIGHT_POS = 0x00000B8B;
-public static final int VEHICLE_PROPERTY_SEAT_HEIGHT_MOVE = 0x00000B8C;
-public static final int VEHICLE_PROPERTY_SEAT_DEPTH_POS = 0x00000B8D;
-public static final int VEHICLE_PROPERTY_SEAT_DEPTH_MOVE = 0x00000B8E;
-public static final int VEHICLE_PROPERTY_SEAT_TILT_POS = 0x00000B8F;
-public static final int VEHICLE_PROPERTY_SEAT_TILT_MOVE = 0x00000B90;
-public static final int VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_POS = 0x00000B91;
-public static final int VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_MOVE = 0x00000B92;
-public static final int VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_POS = 0x00000B93;
-public static final int VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_MOVE = 0x00000B94;
-public static final int VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_POS = 0x00000B95;
-public static final int VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_MOVE = 0x00000B96;
-public static final int VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_POS = 0x00000B97;
-public static final int VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_MOVE = 0x00000B98;
-public static final int VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_POS = 0x00000B99;
-public static final int VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_MOVE = 0x00000B9A;
-public static final int VEHICLE_PROPERTY_WINDOW_POS = 0x00000BC0;
-public static final int VEHICLE_PROPERTY_WINDOW_MOVE = 0x00000BC1;
-public static final int VEHICLE_PROPERTY_WINDOW_VENT_POS = 0x00000BC2;
-public static final int VEHICLE_PROPERTY_WINDOW_VENT_MOVE = 0x00000BC3;
-public static final int VEHICLE_PROPERTY_WINDOW_LOCK = 0x00000BC4;
-public static final int VEHICLE_PROPERTY_CUSTOM_START = 0x70000000;
-public static final int VEHICLE_PROPERTY_CUSTOM_END = 0x73ffffff;
-public static final int VEHICLE_PROPERTY_INTERNAL_START = 0x74000000;
-public static final int VEHICLE_PROPERTY_INTERNAL_END = 0x74ffffff;
-public static final int VEHICLE_PROPERTY_INTERNAL_AUDIO_STREAM_STATE = 0x74000000;
-public static int getVehicleValueType(int property) {
-switch (property) {
-case VEHICLE_PROPERTY_INFO_VIN: return VehicleValueType.VEHICLE_VALUE_TYPE_STRING;
-case VEHICLE_PROPERTY_INFO_MAKE: return VehicleValueType.VEHICLE_VALUE_TYPE_STRING;
-case VEHICLE_PROPERTY_INFO_MODEL: return VehicleValueType.VEHICLE_VALUE_TYPE_STRING;
-case VEHICLE_PROPERTY_INFO_MODEL_YEAR: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32;
-case VEHICLE_PROPERTY_INFO_FUEL_CAPACITY: return VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT;
-case VEHICLE_PROPERTY_PERF_ODOMETER: return VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT;
-case VEHICLE_PROPERTY_PERF_VEHICLE_SPEED: return VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT;
-case VEHICLE_PROPERTY_ENGINE_COOLANT_TEMP: return VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT;
-case VEHICLE_PROPERTY_ENGINE_OIL_TEMP: return VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT;
-case VEHICLE_PROPERTY_ENGINE_RPM: return VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT;
-case VEHICLE_PROPERTY_GEAR_SELECTION: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32;
-case VEHICLE_PROPERTY_CURRENT_GEAR: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32;
-case VEHICLE_PROPERTY_PARKING_BRAKE_ON: return VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN;
-case VEHICLE_PROPERTY_DRIVING_STATUS: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32;
-case VEHICLE_PROPERTY_FUEL_LEVEL_LOW: return VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN;
-case VEHICLE_PROPERTY_NIGHT_MODE: return VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN;
-case VEHICLE_PROPERTY_HVAC_FAN_SPEED: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_HVAC_FAN_DIRECTION: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_HVAC_TEMPERATURE_CURRENT: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT;
-case VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT;
-case VEHICLE_PROPERTY_HVAC_DEFROSTER: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN;
-case VEHICLE_PROPERTY_HVAC_AC_ON: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN;
-case VEHICLE_PROPERTY_HVAC_MAX_AC_ON: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN;
-case VEHICLE_PROPERTY_HVAC_MAX_DEFROST_ON: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN;
-case VEHICLE_PROPERTY_HVAC_RECIRC_ON: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN;
-case VEHICLE_PROPERTY_HVAC_DUAL_ON: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN;
-case VEHICLE_PROPERTY_HVAC_AUTO_ON: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN;
-case VEHICLE_PROPERTY_HVAC_SEAT_TEMPERATURE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_HVAC_SIDE_MIRROR_HEAT: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32;
-case VEHICLE_PROPERTY_HVAC_STEERING_WHEEL_TEMP: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32;
-case VEHICLE_PROPERTY_HVAC_TEMPERATURE_UNITS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_HVAC_ACTUAL_FAN_SPEED_RPM: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_HVAC_POWER_ON: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN;
-case VEHICLE_PROPERTY_HVAC_FAN_DIRECTION_AVAILABLE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_ENV_OUTSIDE_TEMPERATURE: return VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT;
-case VEHICLE_PROPERTY_ENV_CABIN_TEMPERATURE: return VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT;
-case VEHICLE_PROPERTY_RADIO_PRESET: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4;
-case VEHICLE_PROPERTY_AUDIO_FOCUS: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4;
-case VEHICLE_PROPERTY_AUDIO_VOLUME: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC3;
-case VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2;
-case VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2;
-case VEHICLE_PROPERTY_AUDIO_HW_VARIANT: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32;
-case VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4;
-case VEHICLE_PROPERTY_AP_POWER_STATE: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2;
-case VEHICLE_PROPERTY_DISPLAY_BRIGHTNESS: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32;
-case VEHICLE_PROPERTY_AP_POWER_BOOTUP_REASON: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32;
-case VEHICLE_PROPERTY_HW_KEY_INPUT: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4;
-case VEHICLE_PROPERTY_INSTRUMENT_CLUSTER_INFO: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4;
-case VEHICLE_PROPERTY_UNIX_TIME: return VehicleValueType.VEHICLE_VALUE_TYPE_INT64;
-case VEHICLE_PROPERTY_CURRENT_TIME_IN_SECONDS: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32;
-case VEHICLE_PROPERTY_DOOR_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_DOOR_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_DOOR_LOCK: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN;
-case VEHICLE_PROPERTY_MIRROR_Z_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_MIRROR_Z_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_MIRROR_Y_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_MIRROR_Y_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_MIRROR_LOCK: return VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN;
-case VEHICLE_PROPERTY_MIRROR_FOLD: return VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN;
-case VEHICLE_PROPERTY_SEAT_MEMORY_SELECT: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_MEMORY_SET: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_BELT_BUCKLED: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN;
-case VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_FORE_AFT_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_FORE_AFT_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_HEIGHT_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_HEIGHT_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_DEPTH_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_DEPTH_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_TILT_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_TILT_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_WINDOW_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_WINDOW_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_WINDOW_VENT_POS: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_WINDOW_VENT_MOVE: return VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-case VEHICLE_PROPERTY_WINDOW_LOCK: return VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN;
-case VEHICLE_PROPERTY_INTERNAL_AUDIO_STREAM_STATE: return VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2;
-default: return VehicleValueType.VEHICLE_VALUE_TYPE_SHOUD_NOT_USE;
-}
-}
-
-public static String getVehiclePropertyName(int property) {
-switch (property) {
-case VEHICLE_PROPERTY_INVALID: return "VEHICLE_PROPERTY_INVALID";
-case VEHICLE_PROPERTY_INFO_VIN: return "VEHICLE_PROPERTY_INFO_VIN";
-case VEHICLE_PROPERTY_INFO_MAKE: return "VEHICLE_PROPERTY_INFO_MAKE";
-case VEHICLE_PROPERTY_INFO_MODEL: return "VEHICLE_PROPERTY_INFO_MODEL";
-case VEHICLE_PROPERTY_INFO_MODEL_YEAR: return "VEHICLE_PROPERTY_INFO_MODEL_YEAR";
-case VEHICLE_PROPERTY_INFO_FUEL_CAPACITY: return "VEHICLE_PROPERTY_INFO_FUEL_CAPACITY";
-case VEHICLE_PROPERTY_PERF_ODOMETER: return "VEHICLE_PROPERTY_PERF_ODOMETER";
-case VEHICLE_PROPERTY_PERF_VEHICLE_SPEED: return "VEHICLE_PROPERTY_PERF_VEHICLE_SPEED";
-case VEHICLE_PROPERTY_ENGINE_COOLANT_TEMP: return "VEHICLE_PROPERTY_ENGINE_COOLANT_TEMP";
-case VEHICLE_PROPERTY_ENGINE_OIL_TEMP: return "VEHICLE_PROPERTY_ENGINE_OIL_TEMP";
-case VEHICLE_PROPERTY_ENGINE_RPM: return "VEHICLE_PROPERTY_ENGINE_RPM";
-case VEHICLE_PROPERTY_GEAR_SELECTION: return "VEHICLE_PROPERTY_GEAR_SELECTION";
-case VEHICLE_PROPERTY_CURRENT_GEAR: return "VEHICLE_PROPERTY_CURRENT_GEAR";
-case VEHICLE_PROPERTY_PARKING_BRAKE_ON: return "VEHICLE_PROPERTY_PARKING_BRAKE_ON";
-case VEHICLE_PROPERTY_DRIVING_STATUS: return "VEHICLE_PROPERTY_DRIVING_STATUS";
-case VEHICLE_PROPERTY_FUEL_LEVEL_LOW: return "VEHICLE_PROPERTY_FUEL_LEVEL_LOW";
-case VEHICLE_PROPERTY_NIGHT_MODE: return "VEHICLE_PROPERTY_NIGHT_MODE";
-case VEHICLE_PROPERTY_HVAC_FAN_SPEED: return "VEHICLE_PROPERTY_HVAC_FAN_SPEED";
-case VEHICLE_PROPERTY_HVAC_FAN_DIRECTION: return "VEHICLE_PROPERTY_HVAC_FAN_DIRECTION";
-case VEHICLE_PROPERTY_HVAC_TEMPERATURE_CURRENT: return "VEHICLE_PROPERTY_HVAC_TEMPERATURE_CURRENT";
-case VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET: return "VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET";
-case VEHICLE_PROPERTY_HVAC_DEFROSTER: return "VEHICLE_PROPERTY_HVAC_DEFROSTER";
-case VEHICLE_PROPERTY_HVAC_AC_ON: return "VEHICLE_PROPERTY_HVAC_AC_ON";
-case VEHICLE_PROPERTY_HVAC_MAX_AC_ON: return "VEHICLE_PROPERTY_HVAC_MAX_AC_ON";
-case VEHICLE_PROPERTY_HVAC_MAX_DEFROST_ON: return "VEHICLE_PROPERTY_HVAC_MAX_DEFROST_ON";
-case VEHICLE_PROPERTY_HVAC_RECIRC_ON: return "VEHICLE_PROPERTY_HVAC_RECIRC_ON";
-case VEHICLE_PROPERTY_HVAC_DUAL_ON: return "VEHICLE_PROPERTY_HVAC_DUAL_ON";
-case VEHICLE_PROPERTY_HVAC_AUTO_ON: return "VEHICLE_PROPERTY_HVAC_AUTO_ON";
-case VEHICLE_PROPERTY_HVAC_SEAT_TEMPERATURE: return "VEHICLE_PROPERTY_HVAC_SEAT_TEMPERATURE";
-case VEHICLE_PROPERTY_HVAC_SIDE_MIRROR_HEAT: return "VEHICLE_PROPERTY_HVAC_SIDE_MIRROR_HEAT";
-case VEHICLE_PROPERTY_HVAC_STEERING_WHEEL_TEMP: return "VEHICLE_PROPERTY_HVAC_STEERING_WHEEL_TEMP";
-case VEHICLE_PROPERTY_HVAC_TEMPERATURE_UNITS: return "VEHICLE_PROPERTY_HVAC_TEMPERATURE_UNITS";
-case VEHICLE_PROPERTY_HVAC_ACTUAL_FAN_SPEED_RPM: return "VEHICLE_PROPERTY_HVAC_ACTUAL_FAN_SPEED_RPM";
-case VEHICLE_PROPERTY_HVAC_POWER_ON: return "VEHICLE_PROPERTY_HVAC_POWER_ON";
-case VEHICLE_PROPERTY_HVAC_FAN_DIRECTION_AVAILABLE: return "VEHICLE_PROPERTY_HVAC_FAN_DIRECTION_AVAILABLE";
-case VEHICLE_PROPERTY_ENV_OUTSIDE_TEMPERATURE: return "VEHICLE_PROPERTY_ENV_OUTSIDE_TEMPERATURE";
-case VEHICLE_PROPERTY_ENV_CABIN_TEMPERATURE: return "VEHICLE_PROPERTY_ENV_CABIN_TEMPERATURE";
-case VEHICLE_PROPERTY_RADIO_PRESET: return "VEHICLE_PROPERTY_RADIO_PRESET";
-case VEHICLE_PROPERTY_AUDIO_FOCUS: return "VEHICLE_PROPERTY_AUDIO_FOCUS";
-case VEHICLE_PROPERTY_AUDIO_VOLUME: return "VEHICLE_PROPERTY_AUDIO_VOLUME";
-case VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT: return "VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT";
-case VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY: return "VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY";
-case VEHICLE_PROPERTY_AUDIO_HW_VARIANT: return "VEHICLE_PROPERTY_AUDIO_HW_VARIANT";
-case VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT: return "VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT";
-case VEHICLE_PROPERTY_AP_POWER_STATE: return "VEHICLE_PROPERTY_AP_POWER_STATE";
-case VEHICLE_PROPERTY_DISPLAY_BRIGHTNESS: return "VEHICLE_PROPERTY_DISPLAY_BRIGHTNESS";
-case VEHICLE_PROPERTY_AP_POWER_BOOTUP_REASON: return "VEHICLE_PROPERTY_AP_POWER_BOOTUP_REASON";
-case VEHICLE_PROPERTY_HW_KEY_INPUT: return "VEHICLE_PROPERTY_HW_KEY_INPUT";
-case VEHICLE_PROPERTY_INSTRUMENT_CLUSTER_INFO: return "VEHICLE_PROPERTY_INSTRUMENT_CLUSTER_INFO";
-case VEHICLE_PROPERTY_UNIX_TIME: return "VEHICLE_PROPERTY_UNIX_TIME";
-case VEHICLE_PROPERTY_CURRENT_TIME_IN_SECONDS: return "VEHICLE_PROPERTY_CURRENT_TIME_IN_SECONDS";
-case VEHICLE_PROPERTY_DOOR_POS: return "VEHICLE_PROPERTY_DOOR_POS";
-case VEHICLE_PROPERTY_DOOR_MOVE: return "VEHICLE_PROPERTY_DOOR_MOVE";
-case VEHICLE_PROPERTY_DOOR_LOCK: return "VEHICLE_PROPERTY_DOOR_LOCK";
-case VEHICLE_PROPERTY_MIRROR_Z_POS: return "VEHICLE_PROPERTY_MIRROR_Z_POS";
-case VEHICLE_PROPERTY_MIRROR_Z_MOVE: return "VEHICLE_PROPERTY_MIRROR_Z_MOVE";
-case VEHICLE_PROPERTY_MIRROR_Y_POS: return "VEHICLE_PROPERTY_MIRROR_Y_POS";
-case VEHICLE_PROPERTY_MIRROR_Y_MOVE: return "VEHICLE_PROPERTY_MIRROR_Y_MOVE";
-case VEHICLE_PROPERTY_MIRROR_LOCK: return "VEHICLE_PROPERTY_MIRROR_LOCK";
-case VEHICLE_PROPERTY_MIRROR_FOLD: return "VEHICLE_PROPERTY_MIRROR_FOLD";
-case VEHICLE_PROPERTY_SEAT_MEMORY_SELECT: return "VEHICLE_PROPERTY_SEAT_MEMORY_SELECT";
-case VEHICLE_PROPERTY_SEAT_MEMORY_SET: return "VEHICLE_PROPERTY_SEAT_MEMORY_SET";
-case VEHICLE_PROPERTY_SEAT_BELT_BUCKLED: return "VEHICLE_PROPERTY_SEAT_BELT_BUCKLED";
-case VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_POS: return "VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_POS";
-case VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_MOVE: return "VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_MOVE";
-case VEHICLE_PROPERTY_SEAT_FORE_AFT_POS: return "VEHICLE_PROPERTY_SEAT_FORE_AFT_POS";
-case VEHICLE_PROPERTY_SEAT_FORE_AFT_MOVE: return "VEHICLE_PROPERTY_SEAT_FORE_AFT_MOVE";
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_POS: return "VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_POS";
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_MOVE: return "VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_MOVE";
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_POS: return "VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_POS";
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_MOVE: return "VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_MOVE";
-case VEHICLE_PROPERTY_SEAT_HEIGHT_POS: return "VEHICLE_PROPERTY_SEAT_HEIGHT_POS";
-case VEHICLE_PROPERTY_SEAT_HEIGHT_MOVE: return "VEHICLE_PROPERTY_SEAT_HEIGHT_MOVE";
-case VEHICLE_PROPERTY_SEAT_DEPTH_POS: return "VEHICLE_PROPERTY_SEAT_DEPTH_POS";
-case VEHICLE_PROPERTY_SEAT_DEPTH_MOVE: return "VEHICLE_PROPERTY_SEAT_DEPTH_MOVE";
-case VEHICLE_PROPERTY_SEAT_TILT_POS: return "VEHICLE_PROPERTY_SEAT_TILT_POS";
-case VEHICLE_PROPERTY_SEAT_TILT_MOVE: return "VEHICLE_PROPERTY_SEAT_TILT_MOVE";
-case VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_POS: return "VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_POS";
-case VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_MOVE: return "VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_MOVE";
-case VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_POS: return "VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_POS";
-case VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_MOVE: return "VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_MOVE";
-case VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_POS: return "VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_POS";
-case VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_MOVE: return "VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_MOVE";
-case VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_POS: return "VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_POS";
-case VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_MOVE: return "VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_MOVE";
-case VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_POS: return "VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_POS";
-case VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_MOVE: return "VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_MOVE";
-case VEHICLE_PROPERTY_WINDOW_POS: return "VEHICLE_PROPERTY_WINDOW_POS";
-case VEHICLE_PROPERTY_WINDOW_MOVE: return "VEHICLE_PROPERTY_WINDOW_MOVE";
-case VEHICLE_PROPERTY_WINDOW_VENT_POS: return "VEHICLE_PROPERTY_WINDOW_VENT_POS";
-case VEHICLE_PROPERTY_WINDOW_VENT_MOVE: return "VEHICLE_PROPERTY_WINDOW_VENT_MOVE";
-case VEHICLE_PROPERTY_WINDOW_LOCK: return "VEHICLE_PROPERTY_WINDOW_LOCK";
-case VEHICLE_PROPERTY_INTERNAL_AUDIO_STREAM_STATE: return "VEHICLE_PROPERTY_INTERNAL_AUDIO_STREAM_STATE";
-default: return "UNKNOWN_PROPERTY";
-}
-}
-
-public static int[] getVehicleChangeMode(int property) {
-switch (property) {
-case VEHICLE_PROPERTY_INFO_VIN: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC };
-case VEHICLE_PROPERTY_INFO_MAKE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC };
-case VEHICLE_PROPERTY_INFO_MODEL: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC };
-case VEHICLE_PROPERTY_INFO_MODEL_YEAR: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC };
-case VEHICLE_PROPERTY_INFO_FUEL_CAPACITY: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC };
-case VEHICLE_PROPERTY_PERF_ODOMETER: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE , VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_CONTINUOUS };
-case VEHICLE_PROPERTY_PERF_VEHICLE_SPEED: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE , VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_CONTINUOUS };
-case VEHICLE_PROPERTY_ENGINE_COOLANT_TEMP: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE , VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_CONTINUOUS };
-case VEHICLE_PROPERTY_ENGINE_OIL_TEMP: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE , VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_CONTINUOUS };
-case VEHICLE_PROPERTY_ENGINE_RPM: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE , VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_CONTINUOUS };
-case VEHICLE_PROPERTY_GEAR_SELECTION: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_CURRENT_GEAR: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_PARKING_BRAKE_ON: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_DRIVING_STATUS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_FUEL_LEVEL_LOW: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_NIGHT_MODE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_FAN_SPEED: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_FAN_DIRECTION: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_TEMPERATURE_CURRENT: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_DEFROSTER: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_AC_ON: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_MAX_AC_ON: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_MAX_DEFROST_ON: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_RECIRC_ON: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_DUAL_ON: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_AUTO_ON: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_SEAT_TEMPERATURE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_SIDE_MIRROR_HEAT: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_STEERING_WHEEL_TEMP: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_TEMPERATURE_UNITS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_ACTUAL_FAN_SPEED_RPM: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_POWER_ON: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_HVAC_FAN_DIRECTION_AVAILABLE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC };
-case VEHICLE_PROPERTY_ENV_OUTSIDE_TEMPERATURE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE , VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_CONTINUOUS };
-case VEHICLE_PROPERTY_ENV_CABIN_TEMPERATURE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE , VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_CONTINUOUS };
-case VEHICLE_PROPERTY_RADIO_PRESET: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_AUDIO_FOCUS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_AUDIO_VOLUME: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_AUDIO_HW_VARIANT: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC };
-case VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_AP_POWER_STATE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_DISPLAY_BRIGHTNESS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_AP_POWER_BOOTUP_REASON: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC };
-case VEHICLE_PROPERTY_HW_KEY_INPUT: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_INSTRUMENT_CLUSTER_INFO: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_UNIX_TIME: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_SET };
-case VEHICLE_PROPERTY_CURRENT_TIME_IN_SECONDS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_SET };
-case VEHICLE_PROPERTY_DOOR_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_DOOR_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_DOOR_LOCK: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_MIRROR_Z_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_MIRROR_Z_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_MIRROR_Y_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_MIRROR_Y_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_MIRROR_LOCK: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_MIRROR_FOLD: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_MEMORY_SELECT: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_MEMORY_SET: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_BELT_BUCKLED: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_FORE_AFT_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_FORE_AFT_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_HEIGHT_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_HEIGHT_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_DEPTH_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_DEPTH_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_TILT_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_TILT_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_WINDOW_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_WINDOW_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_WINDOW_VENT_POS: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_WINDOW_VENT_MOVE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_WINDOW_LOCK: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-case VEHICLE_PROPERTY_INTERNAL_AUDIO_STREAM_STATE: return new int[] { VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE };
-default: return null;
-}
-}
-
-public static int[] getVehicleAccess(int property) {
-switch (property) {
-case VEHICLE_PROPERTY_INFO_VIN: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_INFO_MAKE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_INFO_MODEL: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_INFO_MODEL_YEAR: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_INFO_FUEL_CAPACITY: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_PERF_ODOMETER: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_PERF_VEHICLE_SPEED: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_ENGINE_COOLANT_TEMP: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_ENGINE_OIL_TEMP: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_ENGINE_RPM: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_GEAR_SELECTION: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_CURRENT_GEAR: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_PARKING_BRAKE_ON: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_DRIVING_STATUS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_FUEL_LEVEL_LOW: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_NIGHT_MODE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_HVAC_FAN_SPEED: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_FAN_DIRECTION: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_TEMPERATURE_CURRENT: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_DEFROSTER: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_AC_ON: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_MAX_AC_ON: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_MAX_DEFROST_ON: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_RECIRC_ON: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_DUAL_ON: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_AUTO_ON: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_SEAT_TEMPERATURE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_SIDE_MIRROR_HEAT: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_STEERING_WHEEL_TEMP: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_TEMPERATURE_UNITS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_HVAC_ACTUAL_FAN_SPEED_RPM: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_HVAC_POWER_ON: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_HVAC_FAN_DIRECTION_AVAILABLE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_ENV_OUTSIDE_TEMPERATURE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_ENV_CABIN_TEMPERATURE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_RADIO_PRESET: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_AUDIO_FOCUS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_AUDIO_VOLUME: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_AUDIO_HW_VARIANT: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_AP_POWER_STATE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_DISPLAY_BRIGHTNESS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ , VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_AP_POWER_BOOTUP_REASON: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_HW_KEY_INPUT: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ };
-case VEHICLE_PROPERTY_INSTRUMENT_CLUSTER_INFO: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_UNIX_TIME: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_CURRENT_TIME_IN_SECONDS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_DOOR_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_DOOR_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_DOOR_LOCK: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_MIRROR_Z_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_MIRROR_Z_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_MIRROR_Y_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_MIRROR_Y_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_MIRROR_LOCK: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_MIRROR_FOLD: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_SEAT_MEMORY_SELECT: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_SEAT_MEMORY_SET: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_SEAT_BELT_BUCKLED: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_SEAT_FORE_AFT_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_SEAT_FORE_AFT_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_SEAT_HEIGHT_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_SEAT_HEIGHT_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_SEAT_DEPTH_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_SEAT_DEPTH_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_SEAT_TILT_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_SEAT_TILT_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_WINDOW_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_WINDOW_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_WINDOW_VENT_POS: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_WINDOW_VENT_MOVE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE , VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE };
-case VEHICLE_PROPERTY_WINDOW_LOCK: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-case VEHICLE_PROPERTY_INTERNAL_AUDIO_STREAM_STATE: return new int[] { VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE };
-default: return null;
-}
-}
-
-public static int getVehicleZoneType(int property) {
-switch (property) {
-case VEHICLE_PROPERTY_HVAC_FAN_SPEED: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ;
-case VEHICLE_PROPERTY_HVAC_FAN_DIRECTION: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ;
-case VEHICLE_PROPERTY_HVAC_TEMPERATURE_CURRENT: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ;
-case VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ;
-case VEHICLE_PROPERTY_HVAC_DEFROSTER: return VehicleZoneType.VEHICLE_ZONE_TYPE_WINDOW ;
-case VEHICLE_PROPERTY_HVAC_AC_ON: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ;
-case VEHICLE_PROPERTY_HVAC_MAX_AC_ON: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ;
-case VEHICLE_PROPERTY_HVAC_MAX_DEFROST_ON: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ;
-case VEHICLE_PROPERTY_HVAC_RECIRC_ON: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ;
-case VEHICLE_PROPERTY_HVAC_DUAL_ON: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ;
-case VEHICLE_PROPERTY_HVAC_AUTO_ON: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ;
-case VEHICLE_PROPERTY_HVAC_SEAT_TEMPERATURE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_HVAC_ACTUAL_FAN_SPEED_RPM: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ;
-case VEHICLE_PROPERTY_HVAC_POWER_ON: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ;
-case VEHICLE_PROPERTY_HVAC_FAN_DIRECTION_AVAILABLE: return VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE ;
-case VEHICLE_PROPERTY_DOOR_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_DOOR ;
-case VEHICLE_PROPERTY_DOOR_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_DOOR ;
-case VEHICLE_PROPERTY_DOOR_LOCK: return VehicleZoneType.VEHICLE_ZONE_TYPE_DOOR ;
-case VEHICLE_PROPERTY_MIRROR_Z_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_MIRROR ;
-case VEHICLE_PROPERTY_MIRROR_Z_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_MIRROR ;
-case VEHICLE_PROPERTY_MIRROR_Y_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_MIRROR ;
-case VEHICLE_PROPERTY_MIRROR_Y_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_MIRROR ;
-case VEHICLE_PROPERTY_SEAT_MEMORY_SELECT: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_MEMORY_SET: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_BELT_BUCKLED: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_FORE_AFT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_FORE_AFT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_HEIGHT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_HEIGHT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_DEPTH_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_DEPTH_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_TILT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_TILT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_POS: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-case VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_MOVE: return VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT ;
-default: return VehicleZoneType.VEHICLE_ZONE_TYPE_NONE;
-}
-}
-
-
-
-
-public static final String VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_SOURCE_RADIO_AM_FM = "RADIO_AM_FM";
-public static final String VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_SOURCE_RADIO_AM_FM_HD = "RADIO_AM_FM_HD";
-public static final String VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_SOURCE_RADIO_DAB = "RADIO_DAB";
-public static final String VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_SOURCE_RADIO_SATELLITE = "RADIO_SATELLITE";
-public static final String VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_SOURCE_CD_DVD = "CD_DVD";
-public static final String VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_SOURCE_AUX_IN0 = "AUX_IN0";
-public static final String VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_SOURCE_AUX_IN1 = "AUX_IN1";
-public static final String VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_SOURCE_EXT_NAV_GUIDANCE = "EXT_NAV_GUIDANCE";
-public static final String VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_SOURCE_EXT_VOICE_COMMAND = "EXT_VOICE_COMMAND";
-public static final String VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_SOURCE_EXT_VOICE_CALL = "EXT_VOICE_CALL";
-public static final String VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_SOURCE_EXT_SAFETY_ALERT = "EXT_SAFETY_ALERT";
-
-
-
-public static class VehicleHvacFanDirection {
-public static final int VEHICLE_HVAC_FAN_DIRECTION_FACE = 0x1;
-public static final int VEHICLE_HVAC_FAN_DIRECTION_FLOOR = 0x2;
-public static final int VEHICLE_HVAC_FAN_DIRECTION_FACE_AND_FLOOR = 0x3;
-public static final int VEHICLE_HVAC_FAN_DIRECTION_DEFROST = 0x4;
-public static final int VEHICLE_HVAC_FAN_DIRECTION_DEFROST_AND_FLOOR = 0x5;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_HVAC_FAN_DIRECTION_FACE: return "VEHICLE_HVAC_FAN_DIRECTION_FACE";
-case VEHICLE_HVAC_FAN_DIRECTION_FLOOR: return "VEHICLE_HVAC_FAN_DIRECTION_FLOOR";
-case VEHICLE_HVAC_FAN_DIRECTION_FACE_AND_FLOOR: return "VEHICLE_HVAC_FAN_DIRECTION_FACE_AND_FLOOR";
-case VEHICLE_HVAC_FAN_DIRECTION_DEFROST: return "VEHICLE_HVAC_FAN_DIRECTION_DEFROST";
-case VEHICLE_HVAC_FAN_DIRECTION_DEFROST_AND_FLOOR: return "VEHICLE_HVAC_FAN_DIRECTION_DEFROST_AND_FLOOR";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleRadioConsts {
-public static final int VEHICLE_RADIO_PRESET_MIN_VALUE = 1;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_RADIO_PRESET_MIN_VALUE: return "VEHICLE_RADIO_PRESET_MIN_VALUE";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioFocusRequest {
-public static final int VEHICLE_AUDIO_FOCUS_REQUEST_GAIN = 0x1;
-public static final int VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT = 0x2;
-public static final int VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK = 0x3;
-public static final int VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_NO_DUCK = 0x4;
-public static final int VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE = 0x5;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_FOCUS_REQUEST_GAIN: return "VEHICLE_AUDIO_FOCUS_REQUEST_GAIN";
-case VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT: return "VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT";
-case VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK: return "VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK";
-case VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_NO_DUCK: return "VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_NO_DUCK";
-case VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE: return "VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioFocusState {
-public static final int VEHICLE_AUDIO_FOCUS_STATE_GAIN = 0x1;
-public static final int VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT = 0x2;
-public static final int VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_CAN_DUCK = 0x3;
-public static final int VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT = 0x4;
-public static final int VEHICLE_AUDIO_FOCUS_STATE_LOSS = 0x5;
-public static final int VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_EXLCUSIVE = 0x6;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_FOCUS_STATE_GAIN: return "VEHICLE_AUDIO_FOCUS_STATE_GAIN";
-case VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT: return "VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT";
-case VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_CAN_DUCK: return "VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_CAN_DUCK";
-case VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT: return "VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT";
-case VEHICLE_AUDIO_FOCUS_STATE_LOSS: return "VEHICLE_AUDIO_FOCUS_STATE_LOSS";
-case VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_EXLCUSIVE: return "VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_EXLCUSIVE";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioStreamFlag {
-public static final int VEHICLE_AUDIO_STREAM_STREAM0_FLAG = (0x1<<0);
-public static final int VEHICLE_AUDIO_STREAM_STREAM1_FLAG = (0x1<<1);
-public static final int VEHICLE_AUDIO_STREAM_STREAM2_FLAG = (0x1<<2);
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_STREAM_STREAM0_FLAG: return "VEHICLE_AUDIO_STREAM_STREAM0_FLAG";
-case VEHICLE_AUDIO_STREAM_STREAM1_FLAG: return "VEHICLE_AUDIO_STREAM_STREAM1_FLAG";
-case VEHICLE_AUDIO_STREAM_STREAM2_FLAG: return "VEHICLE_AUDIO_STREAM_STREAM2_FLAG";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioStream {
-public static final int VEHICLE_AUDIO_STREAM0 = 0;
-public static final int VEHICLE_AUDIO_STREAM1 = 1;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_STREAM0: return "VEHICLE_AUDIO_STREAM0";
-case VEHICLE_AUDIO_STREAM1: return "VEHICLE_AUDIO_STREAM1";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioExtFocusFlag {
-public static final int VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG = 0x0;
-public static final int VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG = 0x1;
-public static final int VEHICLE_AUDIO_EXT_FOCUS_CAR_TRANSIENT_FLAG = 0x2;
-public static final int VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG = 0x4;
-public static final int VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG = 0x8;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG: return "VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG";
-case VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG: return "VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG";
-case VEHICLE_AUDIO_EXT_FOCUS_CAR_TRANSIENT_FLAG: return "VEHICLE_AUDIO_EXT_FOCUS_CAR_TRANSIENT_FLAG";
-case VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG: return "VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG";
-case VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG: return "VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioFocusIndex {
-public static final int VEHICLE_AUDIO_FOCUS_INDEX_FOCUS = 0;
-public static final int VEHICLE_AUDIO_FOCUS_INDEX_STREAMS = 1;
-public static final int VEHICLE_AUDIO_FOCUS_INDEX_EXTERNAL_FOCUS_STATE = 2;
-public static final int VEHICLE_AUDIO_FOCUS_INDEX_AUDIO_CONTEXTS = 3;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_FOCUS_INDEX_FOCUS: return "VEHICLE_AUDIO_FOCUS_INDEX_FOCUS";
-case VEHICLE_AUDIO_FOCUS_INDEX_STREAMS: return "VEHICLE_AUDIO_FOCUS_INDEX_STREAMS";
-case VEHICLE_AUDIO_FOCUS_INDEX_EXTERNAL_FOCUS_STATE: return "VEHICLE_AUDIO_FOCUS_INDEX_EXTERNAL_FOCUS_STATE";
-case VEHICLE_AUDIO_FOCUS_INDEX_AUDIO_CONTEXTS: return "VEHICLE_AUDIO_FOCUS_INDEX_AUDIO_CONTEXTS";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioContextFlag {
-public static final int VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG = 0x1;
-public static final int VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG = 0x2;
-public static final int VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG = 0x4;
-public static final int VEHICLE_AUDIO_CONTEXT_CALL_FLAG = 0x8;
-public static final int VEHICLE_AUDIO_CONTEXT_ALARM_FLAG = 0x10;
-public static final int VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG = 0x20;
-public static final int VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG = 0x40;
-public static final int VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG = 0x80;
-public static final int VEHICLE_AUDIO_CONTEXT_CD_ROM_FLAG = 0x100;
-public static final int VEHICLE_AUDIO_CONTEXT_AUX_AUDIO_FLAG = 0x200;
-public static final int VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG = 0x400;
-public static final int VEHICLE_AUDIO_CONTEXT_RADIO_FLAG = 0x800;
-public static final int VEHICLE_AUDIO_CONTEXT_EXT_SOURCE_FLAG = 0x1000;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG: return "VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG";
-case VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG: return "VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG";
-case VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG: return "VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG";
-case VEHICLE_AUDIO_CONTEXT_CALL_FLAG: return "VEHICLE_AUDIO_CONTEXT_CALL_FLAG";
-case VEHICLE_AUDIO_CONTEXT_ALARM_FLAG: return "VEHICLE_AUDIO_CONTEXT_ALARM_FLAG";
-case VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG: return "VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG";
-case VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG: return "VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG";
-case VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG: return "VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG";
-case VEHICLE_AUDIO_CONTEXT_CD_ROM_FLAG: return "VEHICLE_AUDIO_CONTEXT_CD_ROM_FLAG";
-case VEHICLE_AUDIO_CONTEXT_AUX_AUDIO_FLAG: return "VEHICLE_AUDIO_CONTEXT_AUX_AUDIO_FLAG";
-case VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG: return "VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG";
-case VEHICLE_AUDIO_CONTEXT_RADIO_FLAG: return "VEHICLE_AUDIO_CONTEXT_RADIO_FLAG";
-case VEHICLE_AUDIO_CONTEXT_EXT_SOURCE_FLAG: return "VEHICLE_AUDIO_CONTEXT_EXT_SOURCE_FLAG";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioVolumeCapabilityFlag {
-public static final int VEHICLE_AUDIO_VOLUME_CAPABILITY_PERSISTENT_STORAGE = 0x1;
-public static final int VEHICLE_AUDIO_VOLUME_CAPABILITY_MASTER_VOLUME_ONLY = 0x2;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_VOLUME_CAPABILITY_PERSISTENT_STORAGE: return "VEHICLE_AUDIO_VOLUME_CAPABILITY_PERSISTENT_STORAGE";
-case VEHICLE_AUDIO_VOLUME_CAPABILITY_MASTER_VOLUME_ONLY: return "VEHICLE_AUDIO_VOLUME_CAPABILITY_MASTER_VOLUME_ONLY";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioVolumeState {
-public static final int VEHICLE_AUDIO_VOLUME_STATE_OK = 0;
-public static final int VEHICLE_AUDIO_VOLUME_STATE_LIMIT_REACHED = 1;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_VOLUME_STATE_OK: return "VEHICLE_AUDIO_VOLUME_STATE_OK";
-case VEHICLE_AUDIO_VOLUME_STATE_LIMIT_REACHED: return "VEHICLE_AUDIO_VOLUME_STATE_LIMIT_REACHED";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioVolumeIndex {
-public static final int VEHICLE_AUDIO_VOLUME_INDEX_STREAM = 0;
-public static final int VEHICLE_AUDIO_VOLUME_INDEX_VOLUME = 1;
-public static final int VEHICLE_AUDIO_VOLUME_INDEX_STATE = 2;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_VOLUME_INDEX_STREAM: return "VEHICLE_AUDIO_VOLUME_INDEX_STREAM";
-case VEHICLE_AUDIO_VOLUME_INDEX_VOLUME: return "VEHICLE_AUDIO_VOLUME_INDEX_VOLUME";
-case VEHICLE_AUDIO_VOLUME_INDEX_STATE: return "VEHICLE_AUDIO_VOLUME_INDEX_STATE";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioVolumeLimitIndex {
-public static final int VEHICLE_AUDIO_VOLUME_LIMIT_INDEX_STREAM = 0;
-public static final int VEHICLE_AUDIO_VOLUME_LIMIT_INDEX_MAX_VOLUME = 1;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_VOLUME_LIMIT_INDEX_STREAM: return "VEHICLE_AUDIO_VOLUME_LIMIT_INDEX_STREAM";
-case VEHICLE_AUDIO_VOLUME_LIMIT_INDEX_MAX_VOLUME: return "VEHICLE_AUDIO_VOLUME_LIMIT_INDEX_MAX_VOLUME";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioRoutingPolicyIndex {
-public static final int VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM = 0;
-public static final int VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS = 1;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM: return "VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM";
-case VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS: return "VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioHwVariantConfigFlag {
-public static final int VEHICLE_AUDIO_HW_VARIANT_FLAG_INTERNAL_RADIO_FLAG = 0x1;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_HW_VARIANT_FLAG_INTERNAL_RADIO_FLAG: return "VEHICLE_AUDIO_HW_VARIANT_FLAG_INTERNAL_RADIO_FLAG";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleApPowerStateConfigFlag {
-public static final int VEHICLE_AP_POWER_STATE_CONFIG_ENABLE_DEEP_SLEEP_FLAG = 0x1;
-public static final int VEHICLE_AP_POWER_STATE_CONFIG_SUPPORT_TIMER_POWER_ON_FLAG = 0x2;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AP_POWER_STATE_CONFIG_ENABLE_DEEP_SLEEP_FLAG: return "VEHICLE_AP_POWER_STATE_CONFIG_ENABLE_DEEP_SLEEP_FLAG";
-case VEHICLE_AP_POWER_STATE_CONFIG_SUPPORT_TIMER_POWER_ON_FLAG: return "VEHICLE_AP_POWER_STATE_CONFIG_SUPPORT_TIMER_POWER_ON_FLAG";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleApPowerState {
-public static final int VEHICLE_AP_POWER_STATE_OFF = 0;
-public static final int VEHICLE_AP_POWER_STATE_DEEP_SLEEP = 1;
-public static final int VEHICLE_AP_POWER_STATE_ON_DISP_OFF = 2;
-public static final int VEHICLE_AP_POWER_STATE_ON_FULL = 3;
-public static final int VEHICLE_AP_POWER_STATE_SHUTDOWN_PREPARE = 4;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AP_POWER_STATE_OFF: return "VEHICLE_AP_POWER_STATE_OFF";
-case VEHICLE_AP_POWER_STATE_DEEP_SLEEP: return "VEHICLE_AP_POWER_STATE_DEEP_SLEEP";
-case VEHICLE_AP_POWER_STATE_ON_DISP_OFF: return "VEHICLE_AP_POWER_STATE_ON_DISP_OFF";
-case VEHICLE_AP_POWER_STATE_ON_FULL: return "VEHICLE_AP_POWER_STATE_ON_FULL";
-case VEHICLE_AP_POWER_STATE_SHUTDOWN_PREPARE: return "VEHICLE_AP_POWER_STATE_SHUTDOWN_PREPARE";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleApPowerStateShutdownParam {
-public static final int VEHICLE_AP_POWER_SHUTDOWN_PARAM_SHUTDOWN_IMMEDIATELY = 1;
-public static final int VEHICLE_AP_POWER_SHUTDOWN_PARAM_CAN_SLEEP = 2;
-public static final int VEHICLE_AP_POWER_SHUTDOWN_PARAM_SHUTDOWN_ONLY = 3;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AP_POWER_SHUTDOWN_PARAM_SHUTDOWN_IMMEDIATELY: return "VEHICLE_AP_POWER_SHUTDOWN_PARAM_SHUTDOWN_IMMEDIATELY";
-case VEHICLE_AP_POWER_SHUTDOWN_PARAM_CAN_SLEEP: return "VEHICLE_AP_POWER_SHUTDOWN_PARAM_CAN_SLEEP";
-case VEHICLE_AP_POWER_SHUTDOWN_PARAM_SHUTDOWN_ONLY: return "VEHICLE_AP_POWER_SHUTDOWN_PARAM_SHUTDOWN_ONLY";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleApPowerSetState {
-public static final int VEHICLE_AP_POWER_SET_BOOT_COMPLETE = 0x1;
-public static final int VEHICLE_AP_POWER_SET_DEEP_SLEEP_ENTRY = 0x2;
-public static final int VEHICLE_AP_POWER_SET_DEEP_SLEEP_EXIT = 0x3;
-public static final int VEHICLE_AP_POWER_SET_SHUTDOWN_POSTPONE = 0x4;
-public static final int VEHICLE_AP_POWER_SET_SHUTDOWN_START = 0x5;
-public static final int VEHICLE_AP_POWER_SET_DISPLAY_OFF = 0x6;
-public static final int VEHICLE_AP_POWER_SET_DISPLAY_ON = 0x7;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AP_POWER_SET_BOOT_COMPLETE: return "VEHICLE_AP_POWER_SET_BOOT_COMPLETE";
-case VEHICLE_AP_POWER_SET_DEEP_SLEEP_ENTRY: return "VEHICLE_AP_POWER_SET_DEEP_SLEEP_ENTRY";
-case VEHICLE_AP_POWER_SET_DEEP_SLEEP_EXIT: return "VEHICLE_AP_POWER_SET_DEEP_SLEEP_EXIT";
-case VEHICLE_AP_POWER_SET_SHUTDOWN_POSTPONE: return "VEHICLE_AP_POWER_SET_SHUTDOWN_POSTPONE";
-case VEHICLE_AP_POWER_SET_SHUTDOWN_START: return "VEHICLE_AP_POWER_SET_SHUTDOWN_START";
-case VEHICLE_AP_POWER_SET_DISPLAY_OFF: return "VEHICLE_AP_POWER_SET_DISPLAY_OFF";
-case VEHICLE_AP_POWER_SET_DISPLAY_ON: return "VEHICLE_AP_POWER_SET_DISPLAY_ON";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleApPowerStateIndex {
-public static final int VEHICLE_AP_POWER_STATE_INDEX_STATE = 0;
-public static final int VEHICLE_AP_POWER_STATE_INDEX_ADDITIONAL = 1;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AP_POWER_STATE_INDEX_STATE: return "VEHICLE_AP_POWER_STATE_INDEX_STATE";
-case VEHICLE_AP_POWER_STATE_INDEX_ADDITIONAL: return "VEHICLE_AP_POWER_STATE_INDEX_ADDITIONAL";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleApPowerBootupReason {
-public static final int VEHICLE_AP_POWER_BOOTUP_REASON_USER_POWER_ON = 0;
-public static final int VEHICLE_AP_POWER_BOOTUP_REASON_USER_UNLOCK = 1;
-public static final int VEHICLE_AP_POWER_BOOTUP_REASON_TIMER = 2;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AP_POWER_BOOTUP_REASON_USER_POWER_ON: return "VEHICLE_AP_POWER_BOOTUP_REASON_USER_POWER_ON";
-case VEHICLE_AP_POWER_BOOTUP_REASON_USER_UNLOCK: return "VEHICLE_AP_POWER_BOOTUP_REASON_USER_UNLOCK";
-case VEHICLE_AP_POWER_BOOTUP_REASON_TIMER: return "VEHICLE_AP_POWER_BOOTUP_REASON_TIMER";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleHwKeyInputAction {
-public static final int VEHICLE_HW_KEY_INPUT_ACTION_DOWN = 0;
-public static final int VEHICLE_HW_KEY_INPUT_ACTION_UP = 1;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_HW_KEY_INPUT_ACTION_DOWN: return "VEHICLE_HW_KEY_INPUT_ACTION_DOWN";
-case VEHICLE_HW_KEY_INPUT_ACTION_UP: return "VEHICLE_HW_KEY_INPUT_ACTION_UP";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleDisplay {
-public static final int VEHICLE_DISPLAY_MAIN = 0;
-public static final int VEHICLE_DISPLAY_INSTRUMENT_CLUSTER = 1;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_DISPLAY_MAIN: return "VEHICLE_DISPLAY_MAIN";
-case VEHICLE_DISPLAY_INSTRUMENT_CLUSTER: return "VEHICLE_DISPLAY_INSTRUMENT_CLUSTER";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleInstumentClusterType {
-public static final int VEHICLE_INSTRUMENT_CLUSTER_TYPE_NONE = 0;
-public static final int VEHICLE_INSTRUMENT_CLUSTER_TYPE_HAL_INTERFACE = 1;
-public static final int VEHICLE_INSTRUMENT_CLUSTER_TYPE_EXTERNAL_DISPLAY = 2;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_INSTRUMENT_CLUSTER_TYPE_NONE: return "VEHICLE_INSTRUMENT_CLUSTER_TYPE_NONE";
-case VEHICLE_INSTRUMENT_CLUSTER_TYPE_HAL_INTERFACE: return "VEHICLE_INSTRUMENT_CLUSTER_TYPE_HAL_INTERFACE";
-case VEHICLE_INSTRUMENT_CLUSTER_TYPE_EXTERNAL_DISPLAY: return "VEHICLE_INSTRUMENT_CLUSTER_TYPE_EXTERNAL_DISPLAY";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleValueType {
-public static final int VEHICLE_VALUE_TYPE_SHOUD_NOT_USE = 0x00;
-public static final int VEHICLE_VALUE_TYPE_STRING = 0x01;
-public static final int VEHICLE_VALUE_TYPE_BYTES = 0x02;
-public static final int VEHICLE_VALUE_TYPE_BOOLEAN = 0x03;
-public static final int VEHICLE_VALUE_TYPE_ZONED_BOOLEAN = 0x04;
-public static final int VEHICLE_VALUE_TYPE_INT64 = 0x05;
-public static final int VEHICLE_VALUE_TYPE_FLOAT = 0x10;
-public static final int VEHICLE_VALUE_TYPE_FLOAT_VEC2 = 0x11;
-public static final int VEHICLE_VALUE_TYPE_FLOAT_VEC3 = 0x12;
-public static final int VEHICLE_VALUE_TYPE_FLOAT_VEC4 = 0x13;
-public static final int VEHICLE_VALUE_TYPE_INT32 = 0x20;
-public static final int VEHICLE_VALUE_TYPE_INT32_VEC2 = 0x21;
-public static final int VEHICLE_VALUE_TYPE_INT32_VEC3 = 0x22;
-public static final int VEHICLE_VALUE_TYPE_INT32_VEC4 = 0x23;
-public static final int VEHICLE_VALUE_TYPE_ZONED_FLOAT = 0x30;
-public static final int VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2 = 0x31;
-public static final int VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3 = 0x32;
-public static final int VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4 = 0x33;
-public static final int VEHICLE_VALUE_TYPE_ZONED_INT32 = 0x40;
-public static final int VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2 = 0x41;
-public static final int VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3 = 0x42;
-public static final int VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4 = 0x43;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_VALUE_TYPE_SHOUD_NOT_USE: return "VEHICLE_VALUE_TYPE_SHOUD_NOT_USE";
-case VEHICLE_VALUE_TYPE_STRING: return "VEHICLE_VALUE_TYPE_STRING";
-case VEHICLE_VALUE_TYPE_BYTES: return "VEHICLE_VALUE_TYPE_BYTES";
-case VEHICLE_VALUE_TYPE_BOOLEAN: return "VEHICLE_VALUE_TYPE_BOOLEAN";
-case VEHICLE_VALUE_TYPE_ZONED_BOOLEAN: return "VEHICLE_VALUE_TYPE_ZONED_BOOLEAN";
-case VEHICLE_VALUE_TYPE_INT64: return "VEHICLE_VALUE_TYPE_INT64";
-case VEHICLE_VALUE_TYPE_FLOAT: return "VEHICLE_VALUE_TYPE_FLOAT";
-case VEHICLE_VALUE_TYPE_FLOAT_VEC2: return "VEHICLE_VALUE_TYPE_FLOAT_VEC2";
-case VEHICLE_VALUE_TYPE_FLOAT_VEC3: return "VEHICLE_VALUE_TYPE_FLOAT_VEC3";
-case VEHICLE_VALUE_TYPE_FLOAT_VEC4: return "VEHICLE_VALUE_TYPE_FLOAT_VEC4";
-case VEHICLE_VALUE_TYPE_INT32: return "VEHICLE_VALUE_TYPE_INT32";
-case VEHICLE_VALUE_TYPE_INT32_VEC2: return "VEHICLE_VALUE_TYPE_INT32_VEC2";
-case VEHICLE_VALUE_TYPE_INT32_VEC3: return "VEHICLE_VALUE_TYPE_INT32_VEC3";
-case VEHICLE_VALUE_TYPE_INT32_VEC4: return "VEHICLE_VALUE_TYPE_INT32_VEC4";
-case VEHICLE_VALUE_TYPE_ZONED_FLOAT: return "VEHICLE_VALUE_TYPE_ZONED_FLOAT";
-case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2: return "VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2";
-case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3: return "VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3";
-case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4: return "VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4";
-case VEHICLE_VALUE_TYPE_ZONED_INT32: return "VEHICLE_VALUE_TYPE_ZONED_INT32";
-case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2: return "VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2";
-case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3: return "VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3";
-case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4: return "VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleUnitType {
-public static final int VEHICLE_UNIT_TYPE_SHOULD_NOT_USE = 0x00000000;
-public static final int VEHICLE_UNIT_TYPE_METER_PER_SEC = 0x00000001;
-public static final int VEHICLE_UNIT_TYPE_RPM = 0x00000002;
-public static final int VEHICLE_UNIT_TYPE_HZ = 0x00000003;
-public static final int VEHICLE_UNIT_TYPE_PERCENTILE = 0x00000010;
-public static final int VEHICLE_UNIT_TYPE_MILLIMETER = 0x00000020;
-public static final int VEHICLE_UNIT_TYPE_METER = 0x00000021;
-public static final int VEHICLE_UNIT_TYPE_KILOMETER = 0x00000023;
-public static final int VEHICLE_UNIT_TYPE_CELSIUS = 0x00000030;
-public static final int VEHICLE_UNIT_TYPE_FAHRENHEIT = 0x00000031;
-public static final int VEHICLE_UNIT_TYPE_KELVIN = 0x00000032;
-public static final int VEHICLE_UNIT_TYPE_MILLILITER = 0x00000040;
-public static final int VEHICLE_UNIT_TYPE_NANO_SECS = 0x00000050;
-public static final int VEHICLE_UNIT_TYPE_SECS = 0x00000053;
-public static final int VEHICLE_UNIT_TYPE_YEAR = 0x00000059;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_UNIT_TYPE_SHOULD_NOT_USE: return "VEHICLE_UNIT_TYPE_SHOULD_NOT_USE";
-case VEHICLE_UNIT_TYPE_METER_PER_SEC: return "VEHICLE_UNIT_TYPE_METER_PER_SEC";
-case VEHICLE_UNIT_TYPE_RPM: return "VEHICLE_UNIT_TYPE_RPM";
-case VEHICLE_UNIT_TYPE_HZ: return "VEHICLE_UNIT_TYPE_HZ";
-case VEHICLE_UNIT_TYPE_PERCENTILE: return "VEHICLE_UNIT_TYPE_PERCENTILE";
-case VEHICLE_UNIT_TYPE_MILLIMETER: return "VEHICLE_UNIT_TYPE_MILLIMETER";
-case VEHICLE_UNIT_TYPE_METER: return "VEHICLE_UNIT_TYPE_METER";
-case VEHICLE_UNIT_TYPE_KILOMETER: return "VEHICLE_UNIT_TYPE_KILOMETER";
-case VEHICLE_UNIT_TYPE_CELSIUS: return "VEHICLE_UNIT_TYPE_CELSIUS";
-case VEHICLE_UNIT_TYPE_FAHRENHEIT: return "VEHICLE_UNIT_TYPE_FAHRENHEIT";
-case VEHICLE_UNIT_TYPE_KELVIN: return "VEHICLE_UNIT_TYPE_KELVIN";
-case VEHICLE_UNIT_TYPE_MILLILITER: return "VEHICLE_UNIT_TYPE_MILLILITER";
-case VEHICLE_UNIT_TYPE_NANO_SECS: return "VEHICLE_UNIT_TYPE_NANO_SECS";
-case VEHICLE_UNIT_TYPE_SECS: return "VEHICLE_UNIT_TYPE_SECS";
-case VEHICLE_UNIT_TYPE_YEAR: return "VEHICLE_UNIT_TYPE_YEAR";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehiclePropChangeMode {
-public static final int VEHICLE_PROP_CHANGE_MODE_STATIC = 0x00;
-public static final int VEHICLE_PROP_CHANGE_MODE_ON_CHANGE = 0x01;
-public static final int VEHICLE_PROP_CHANGE_MODE_CONTINUOUS = 0x02;
-public static final int VEHICLE_PROP_CHANGE_MODE_POLL = 0x03;
-public static final int VEHICLE_PROP_CHANGE_MODE_ON_SET = 0x04;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_PROP_CHANGE_MODE_STATIC: return "VEHICLE_PROP_CHANGE_MODE_STATIC";
-case VEHICLE_PROP_CHANGE_MODE_ON_CHANGE: return "VEHICLE_PROP_CHANGE_MODE_ON_CHANGE";
-case VEHICLE_PROP_CHANGE_MODE_CONTINUOUS: return "VEHICLE_PROP_CHANGE_MODE_CONTINUOUS";
-case VEHICLE_PROP_CHANGE_MODE_POLL: return "VEHICLE_PROP_CHANGE_MODE_POLL";
-case VEHICLE_PROP_CHANGE_MODE_ON_SET: return "VEHICLE_PROP_CHANGE_MODE_ON_SET";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehiclePropAccess {
-public static final int VEHICLE_PROP_ACCESS_READ = 0x01;
-public static final int VEHICLE_PROP_ACCESS_WRITE = 0x02;
-public static final int VEHICLE_PROP_ACCESS_READ_WRITE = 0x03;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_PROP_ACCESS_READ: return "VEHICLE_PROP_ACCESS_READ";
-case VEHICLE_PROP_ACCESS_WRITE: return "VEHICLE_PROP_ACCESS_WRITE";
-case VEHICLE_PROP_ACCESS_READ_WRITE: return "VEHICLE_PROP_ACCESS_READ_WRITE";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehiclePermissionModel {
-public static final int VEHICLE_PERMISSION_NO_RESTRICTION = 0;
-public static final int VEHICLE_PERMISSION_OEM_ONLY = 0x1;
-public static final int VEHICLE_PERMISSION_SYSTEM_APP_ONLY = 0x2;
-public static final int VEHICLE_PERMISSION_OEM_OR_SYSTEM_APP = 0x3;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_PERMISSION_NO_RESTRICTION: return "VEHICLE_PERMISSION_NO_RESTRICTION";
-case VEHICLE_PERMISSION_OEM_ONLY: return "VEHICLE_PERMISSION_OEM_ONLY";
-case VEHICLE_PERMISSION_SYSTEM_APP_ONLY: return "VEHICLE_PERMISSION_SYSTEM_APP_ONLY";
-case VEHICLE_PERMISSION_OEM_OR_SYSTEM_APP: return "VEHICLE_PERMISSION_OEM_OR_SYSTEM_APP";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleDrivingStatus {
-public static final int VEHICLE_DRIVING_STATUS_UNRESTRICTED = 0x00;
-public static final int VEHICLE_DRIVING_STATUS_NO_VIDEO = 0x01;
-public static final int VEHICLE_DRIVING_STATUS_NO_KEYBOARD_INPUT = 0x02;
-public static final int VEHICLE_DRIVING_STATUS_NO_VOICE_INPUT = 0x04;
-public static final int VEHICLE_DRIVING_STATUS_NO_CONFIG = 0x08;
-public static final int VEHICLE_DRIVING_STATUS_LIMIT_MESSAGE_LEN = 0x10;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_DRIVING_STATUS_UNRESTRICTED: return "VEHICLE_DRIVING_STATUS_UNRESTRICTED";
-case VEHICLE_DRIVING_STATUS_NO_VIDEO: return "VEHICLE_DRIVING_STATUS_NO_VIDEO";
-case VEHICLE_DRIVING_STATUS_NO_KEYBOARD_INPUT: return "VEHICLE_DRIVING_STATUS_NO_KEYBOARD_INPUT";
-case VEHICLE_DRIVING_STATUS_NO_VOICE_INPUT: return "VEHICLE_DRIVING_STATUS_NO_VOICE_INPUT";
-case VEHICLE_DRIVING_STATUS_NO_CONFIG: return "VEHICLE_DRIVING_STATUS_NO_CONFIG";
-case VEHICLE_DRIVING_STATUS_LIMIT_MESSAGE_LEN: return "VEHICLE_DRIVING_STATUS_LIMIT_MESSAGE_LEN";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleGear {
-public static final int VEHICLE_GEAR_NEUTRAL = 0x0001;
-public static final int VEHICLE_GEAR_REVERSE = 0x0002;
-public static final int VEHICLE_GEAR_PARK = 0x0004;
-public static final int VEHICLE_GEAR_DRIVE = 0x0008;
-public static final int VEHICLE_GEAR_LOW = 0x0010;
-public static final int VEHICLE_GEAR_1 = 0x0010;
-public static final int VEHICLE_GEAR_2 = 0x0020;
-public static final int VEHICLE_GEAR_3 = 0x0040;
-public static final int VEHICLE_GEAR_4 = 0x0080;
-public static final int VEHICLE_GEAR_5 = 0x0100;
-public static final int VEHICLE_GEAR_6 = 0x0200;
-public static final int VEHICLE_GEAR_7 = 0x0400;
-public static final int VEHICLE_GEAR_8 = 0x0800;
-public static final int VEHICLE_GEAR_9 = 0x1000;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_GEAR_NEUTRAL: return "VEHICLE_GEAR_NEUTRAL";
-case VEHICLE_GEAR_REVERSE: return "VEHICLE_GEAR_REVERSE";
-case VEHICLE_GEAR_PARK: return "VEHICLE_GEAR_PARK";
-case VEHICLE_GEAR_DRIVE: return "VEHICLE_GEAR_DRIVE";
-case VEHICLE_GEAR_LOW: return "VEHICLE_GEAR_LOW";
-case VEHICLE_GEAR_2: return "VEHICLE_GEAR_2";
-case VEHICLE_GEAR_3: return "VEHICLE_GEAR_3";
-case VEHICLE_GEAR_4: return "VEHICLE_GEAR_4";
-case VEHICLE_GEAR_5: return "VEHICLE_GEAR_5";
-case VEHICLE_GEAR_6: return "VEHICLE_GEAR_6";
-case VEHICLE_GEAR_7: return "VEHICLE_GEAR_7";
-case VEHICLE_GEAR_8: return "VEHICLE_GEAR_8";
-case VEHICLE_GEAR_9: return "VEHICLE_GEAR_9";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleZone {
-public static final int VEHICLE_ZONE_ROW_1_LEFT = 0x00000001;
-public static final int VEHICLE_ZONE_ROW_1_CENTER = 0x00000002;
-public static final int VEHICLE_ZONE_ROW_1_RIGHT = 0x00000004;
-public static final int VEHICLE_ZONE_ROW_1_ALL = 0x00000008;
-public static final int VEHICLE_ZONE_ROW_2_LEFT = 0x00000010;
-public static final int VEHICLE_ZONE_ROW_2_CENTER = 0x00000020;
-public static final int VEHICLE_ZONE_ROW_2_RIGHT = 0x00000040;
-public static final int VEHICLE_ZONE_ROW_2_ALL = 0x00000080;
-public static final int VEHICLE_ZONE_ROW_3_LEFT = 0x00000100;
-public static final int VEHICLE_ZONE_ROW_3_CENTER = 0x00000200;
-public static final int VEHICLE_ZONE_ROW_3_RIGHT = 0x00000400;
-public static final int VEHICLE_ZONE_ROW_3_ALL = 0x00000800;
-public static final int VEHICLE_ZONE_ROW_4_LEFT = 0x00001000;
-public static final int VEHICLE_ZONE_ROW_4_CENTER = 0x00002000;
-public static final int VEHICLE_ZONE_ROW_4_RIGHT = 0x00004000;
-public static final int VEHICLE_ZONE_ROW_4_ALL = 0x00008000;
-public static final int VEHICLE_ZONE_ALL = 0x80000000;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_ZONE_ROW_1_LEFT: return "VEHICLE_ZONE_ROW_1_LEFT";
-case VEHICLE_ZONE_ROW_1_CENTER: return "VEHICLE_ZONE_ROW_1_CENTER";
-case VEHICLE_ZONE_ROW_1_RIGHT: return "VEHICLE_ZONE_ROW_1_RIGHT";
-case VEHICLE_ZONE_ROW_1_ALL: return "VEHICLE_ZONE_ROW_1_ALL";
-case VEHICLE_ZONE_ROW_2_LEFT: return "VEHICLE_ZONE_ROW_2_LEFT";
-case VEHICLE_ZONE_ROW_2_CENTER: return "VEHICLE_ZONE_ROW_2_CENTER";
-case VEHICLE_ZONE_ROW_2_RIGHT: return "VEHICLE_ZONE_ROW_2_RIGHT";
-case VEHICLE_ZONE_ROW_2_ALL: return "VEHICLE_ZONE_ROW_2_ALL";
-case VEHICLE_ZONE_ROW_3_LEFT: return "VEHICLE_ZONE_ROW_3_LEFT";
-case VEHICLE_ZONE_ROW_3_CENTER: return "VEHICLE_ZONE_ROW_3_CENTER";
-case VEHICLE_ZONE_ROW_3_RIGHT: return "VEHICLE_ZONE_ROW_3_RIGHT";
-case VEHICLE_ZONE_ROW_3_ALL: return "VEHICLE_ZONE_ROW_3_ALL";
-case VEHICLE_ZONE_ROW_4_LEFT: return "VEHICLE_ZONE_ROW_4_LEFT";
-case VEHICLE_ZONE_ROW_4_CENTER: return "VEHICLE_ZONE_ROW_4_CENTER";
-case VEHICLE_ZONE_ROW_4_RIGHT: return "VEHICLE_ZONE_ROW_4_RIGHT";
-case VEHICLE_ZONE_ROW_4_ALL: return "VEHICLE_ZONE_ROW_4_ALL";
-case VEHICLE_ZONE_ALL: return "VEHICLE_ZONE_ALL";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleSeat {
-public static final int VEHICLE_SEAT_ROW_1_LEFT = 0x0001;
-public static final int VEHICLE_SEAT_ROW_1_CENTER = 0x0002;
-public static final int VEHICLE_SEAT_ROW_1_RIGHT = 0x0004;
-public static final int VEHICLE_SEAT_ROW_2_LEFT = 0x0010;
-public static final int VEHICLE_SEAT_ROW_2_CENTER = 0x0020;
-public static final int VEHICLE_SEAT_ROW_2_RIGHT = 0x0040;
-public static final int VEHICLE_SEAT_ROW_3_LEFT = 0x0100;
-public static final int VEHICLE_SEAT_ROW_3_CENTER = 0x0200;
-public static final int VEHICLE_SEAT_ROW_3_RIGHT = 0x0400;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_SEAT_ROW_1_LEFT: return "VEHICLE_SEAT_ROW_1_LEFT";
-case VEHICLE_SEAT_ROW_1_CENTER: return "VEHICLE_SEAT_ROW_1_CENTER";
-case VEHICLE_SEAT_ROW_1_RIGHT: return "VEHICLE_SEAT_ROW_1_RIGHT";
-case VEHICLE_SEAT_ROW_2_LEFT: return "VEHICLE_SEAT_ROW_2_LEFT";
-case VEHICLE_SEAT_ROW_2_CENTER: return "VEHICLE_SEAT_ROW_2_CENTER";
-case VEHICLE_SEAT_ROW_2_RIGHT: return "VEHICLE_SEAT_ROW_2_RIGHT";
-case VEHICLE_SEAT_ROW_3_LEFT: return "VEHICLE_SEAT_ROW_3_LEFT";
-case VEHICLE_SEAT_ROW_3_CENTER: return "VEHICLE_SEAT_ROW_3_CENTER";
-case VEHICLE_SEAT_ROW_3_RIGHT: return "VEHICLE_SEAT_ROW_3_RIGHT";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleWindow {
-public static final int VEHICLE_WINDOW_FRONT_WINDSHIELD = 0x0001;
-public static final int VEHICLE_WINDOW_REAR_WINDSHIELD = 0x0002;
-public static final int VEHICLE_WINDOW_ROOF_TOP = 0x0004;
-public static final int VEHICLE_WINDOW_ROW_1_LEFT = 0x0010;
-public static final int VEHICLE_WINDOW_ROW_1_RIGHT = 0x0020;
-public static final int VEHICLE_WINDOW_ROW_2_LEFT = 0x0100;
-public static final int VEHICLE_WINDOW_ROW_2_RIGHT = 0x0200;
-public static final int VEHICLE_WINDOW_ROW_3_LEFT = 0x1000;
-public static final int VEHICLE_WINDOW_ROW_3_RIGHT = 0x2000;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_WINDOW_FRONT_WINDSHIELD: return "VEHICLE_WINDOW_FRONT_WINDSHIELD";
-case VEHICLE_WINDOW_REAR_WINDSHIELD: return "VEHICLE_WINDOW_REAR_WINDSHIELD";
-case VEHICLE_WINDOW_ROOF_TOP: return "VEHICLE_WINDOW_ROOF_TOP";
-case VEHICLE_WINDOW_ROW_1_LEFT: return "VEHICLE_WINDOW_ROW_1_LEFT";
-case VEHICLE_WINDOW_ROW_1_RIGHT: return "VEHICLE_WINDOW_ROW_1_RIGHT";
-case VEHICLE_WINDOW_ROW_2_LEFT: return "VEHICLE_WINDOW_ROW_2_LEFT";
-case VEHICLE_WINDOW_ROW_2_RIGHT: return "VEHICLE_WINDOW_ROW_2_RIGHT";
-case VEHICLE_WINDOW_ROW_3_LEFT: return "VEHICLE_WINDOW_ROW_3_LEFT";
-case VEHICLE_WINDOW_ROW_3_RIGHT: return "VEHICLE_WINDOW_ROW_3_RIGHT";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleDoor {
-public static final int VEHICLE_DOOR_ROW_1_LEFT = 0x00000001;
-public static final int VEHICLE_DOOR_ROW_1_RIGHT = 0x00000004;
-public static final int VEHICLE_DOOR_ROW_2_LEFT = 0x00000010;
-public static final int VEHICLE_DOOR_ROW_2_RIGHT = 0x00000040;
-public static final int VEHICLE_DOOR_ROW_3_LEFT = 0x00000100;
-public static final int VEHICLE_DOOR_ROW_3_RIGHT = 0x00000400;
-public static final int VEHICLE_DOOR_HOOD = 0x10000000;
-public static final int VEHICLE_DOOR_REAR = 0x20000000;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_DOOR_ROW_1_LEFT: return "VEHICLE_DOOR_ROW_1_LEFT";
-case VEHICLE_DOOR_ROW_1_RIGHT: return "VEHICLE_DOOR_ROW_1_RIGHT";
-case VEHICLE_DOOR_ROW_2_LEFT: return "VEHICLE_DOOR_ROW_2_LEFT";
-case VEHICLE_DOOR_ROW_2_RIGHT: return "VEHICLE_DOOR_ROW_2_RIGHT";
-case VEHICLE_DOOR_ROW_3_LEFT: return "VEHICLE_DOOR_ROW_3_LEFT";
-case VEHICLE_DOOR_ROW_3_RIGHT: return "VEHICLE_DOOR_ROW_3_RIGHT";
-case VEHICLE_DOOR_HOOD: return "VEHICLE_DOOR_HOOD";
-case VEHICLE_DOOR_REAR: return "VEHICLE_DOOR_REAR";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleMirror {
-public static final int VEHICLE_MIRROR_DRIVER_LEFT = 0x00000001;
-public static final int VEHICLE_MIRROR_DRIVER_RIGHT = 0x00000002;
-public static final int VEHICLE_MIRROR_DRIVER_CENTER = 0x00000004;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_MIRROR_DRIVER_LEFT: return "VEHICLE_MIRROR_DRIVER_LEFT";
-case VEHICLE_MIRROR_DRIVER_RIGHT: return "VEHICLE_MIRROR_DRIVER_RIGHT";
-case VEHICLE_MIRROR_DRIVER_CENTER: return "VEHICLE_MIRROR_DRIVER_CENTER";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleTurnSignal {
-public static final int VEHICLE_SIGNAL_NONE = 0x00;
-public static final int VEHICLE_SIGNAL_RIGHT = 0x01;
-public static final int VEHICLE_SIGNAL_LEFT = 0x02;
-public static final int VEHICLE_SIGNAL_EMERGENCY = 0x04;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_SIGNAL_NONE: return "VEHICLE_SIGNAL_NONE";
-case VEHICLE_SIGNAL_RIGHT: return "VEHICLE_SIGNAL_RIGHT";
-case VEHICLE_SIGNAL_LEFT: return "VEHICLE_SIGNAL_LEFT";
-case VEHICLE_SIGNAL_EMERGENCY: return "VEHICLE_SIGNAL_EMERGENCY";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleZoneType {
-public static final int VEHICLE_ZONE_TYPE_NONE = 0x00;
-public static final int VEHICLE_ZONE_TYPE_ZONE = 0x01;
-public static final int VEHICLE_ZONE_TYPE_SEAT = 0x02;
-public static final int VEHICLE_ZONE_TYPE_DOOR = 0x04;
-public static final int VEHICLE_ZONE_TYPE_WINDOW = 0x10;
-public static final int VEHICLE_ZONE_TYPE_MIRROR = 0x20;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_ZONE_TYPE_NONE: return "VEHICLE_ZONE_TYPE_NONE";
-case VEHICLE_ZONE_TYPE_ZONE: return "VEHICLE_ZONE_TYPE_ZONE";
-case VEHICLE_ZONE_TYPE_SEAT: return "VEHICLE_ZONE_TYPE_SEAT";
-case VEHICLE_ZONE_TYPE_DOOR: return "VEHICLE_ZONE_TYPE_DOOR";
-case VEHICLE_ZONE_TYPE_WINDOW: return "VEHICLE_ZONE_TYPE_WINDOW";
-case VEHICLE_ZONE_TYPE_MIRROR: return "VEHICLE_ZONE_TYPE_MIRROR";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleBoolean {
-public static final int VEHICLE_FALSE = 0x00;
-public static final int VEHICLE_TRUE = 0x01;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_FALSE: return "VEHICLE_FALSE";
-case VEHICLE_TRUE: return "VEHICLE_TRUE";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehiclePropertyOperation {
-public static final int VEHICLE_OPERATION_GENERIC = 0;
-public static final int VEHICLE_OPERATION_SET = 1;
-public static final int VEHICLE_OPERATION_GET = 2;
-public static final int VEHICLE_OPERATION_SUBSCRIBE = 3;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_OPERATION_GENERIC: return "VEHICLE_OPERATION_GENERIC";
-case VEHICLE_OPERATION_SET: return "VEHICLE_OPERATION_SET";
-case VEHICLE_OPERATION_GET: return "VEHICLE_OPERATION_GET";
-case VEHICLE_OPERATION_SUBSCRIBE: return "VEHICLE_OPERATION_SUBSCRIBE";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioStreamState {
-public static final int VEHICLE_AUDIO_STREAM_STATE_STOPPED = 0;
-public static final int VEHICLE_AUDIO_STREAM_STATE_STARTED = 1;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_STREAM_STATE_STOPPED: return "VEHICLE_AUDIO_STREAM_STATE_STOPPED";
-case VEHICLE_AUDIO_STREAM_STATE_STARTED: return "VEHICLE_AUDIO_STREAM_STATE_STARTED";
-default: return "UNKNOWN";
-}
-}
-}
-
-public static class VehicleAudioStreamStateIndex {
-public static final int VEHICLE_AUDIO_STREAM_STATE_INDEX_STATE = 0;
-public static final int VEHICLE_AUDIO_STREAM_STATE_INDEX_STREAM = 1;
-public static String enumToString(int v) {
-switch(v) {
-case VEHICLE_AUDIO_STREAM_STATE_INDEX_STATE: return "VEHICLE_AUDIO_STREAM_STATE_INDEX_STATE";
-case VEHICLE_AUDIO_STREAM_STATE_INDEX_STREAM: return "VEHICLE_AUDIO_STREAM_STATE_INDEX_STREAM";
-default: return "UNKNOWN";
-}
-}
-}
-
-
-}
-
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkProtoUtil.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkProtoUtil.java
deleted file mode 100644
index e8eedc1..0000000
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetworkProtoUtil.java
+++ /dev/null
@@ -1,68 +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.vehiclenetwork;
-
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-
-import java.util.Arrays;
-
-public class VehicleNetworkProtoUtil {
-    public static String VehiclePropValueToString(VehiclePropValue value) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("prop:0x");
-        sb.append(Integer.toHexString(value.getProp()));
-        sb.append(" type:0x");
-        sb.append(Integer.toHexString(value.getValueType()));
-        sb.append(" floatValues:" + Arrays.toString(value.getFloatValuesList().toArray()));
-        sb.append(" integerValues:" + Arrays.toString(value.getInt32ValuesList().toArray()));
-        return sb.toString();
-    }
-
-    public static String VehiclePropConfigToString(VehiclePropConfig config) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("prop:0x");
-        sb.append(Integer.toHexString(config.getProp()));
-        sb.append(" access:0x");
-        sb.append(Integer.toHexString(config.getAccess()));
-        sb.append(" change_mode:0x");
-        sb.append(Integer.toHexString(config.getChangeMode()));
-        sb.append(" value_type:0x");
-        sb.append(Integer.toHexString(config.getValueType()));
-        sb.append(" permission_model:0x");
-        sb.append(Integer.toHexString(config.getPermissionModel()));
-        return sb.toString();
-    }
-
-    public static boolean VehiclePropConfigEquals(VehiclePropConfig l, VehiclePropConfig r) {
-        if (l.getProp() != r.getProp()) {
-            return false;
-        }
-        if (l.getAccess() != r.getAccess()) {
-            return false;
-        }
-        if (l.getChangeMode() != r.getChangeMode()) {
-            return false;
-        }
-        if (l.getValueType() != r.getValueType()) {
-            return false;
-        }
-        if (l.getPermissionModel() != r.getPermissionModel()) {
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropConfigUtil.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropConfigUtil.java
deleted file mode 100644
index 2482f39..0000000
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropConfigUtil.java
+++ /dev/null
@@ -1,92 +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.vehiclenetwork;
-
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePermissionModel;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Utility class to help creating VehiclePropConfig.
- */
-public class VehiclePropConfigUtil {
-
-    public static VehiclePropConfig createStaticStringProperty(int property) {
-        return getBuilder(property,
-                VehiclePropAccess.VEHICLE_PROP_ACCESS_READ,
-                VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC,
-                VehicleValueType.VEHICLE_VALUE_TYPE_STRING,
-                VehiclePermissionModel.VEHICLE_PERMISSION_NO_RESTRICTION,
-                0, 0f, 0f)
-                .build();
-    }
-
-    public static VehiclePropConfig createZonedProperty(
-            int property, int propAccess, int changeType, int valueType, int zones,
-            int configFlags) {
-            return VehiclePropConfig.newBuilder().
-                    setProp(property).
-                    setAccess(propAccess).
-                    setChangeMode(changeType).
-                    setValueType(valueType).
-                    setPermissionModel(VehiclePermissionModel.VEHICLE_PERMISSION_NO_RESTRICTION).
-                    setZones(zones).
-                    addConfigArray(configFlags).
-                    setSampleRateMax(0).
-                    setSampleRateMin(0).
-                    build();
-    }
-
-    public static VehiclePropConfig createProperty(
-        int property, int propAccess, int changeType, int valueType, int configFlags) {
-        return getBuilder(property,
-                propAccess,
-                changeType,
-                valueType,
-                VehiclePermissionModel.VEHICLE_PERMISSION_NO_RESTRICTION,
-                configFlags, 0f, 0f)
-                .build();
-    }
-
-    public static VehiclePropConfig.Builder getBuilder(int property, int access, int changeMode,
-            int type, int permissionModel, int configFlags, float sampleRateMax,
-            float sampleRateMin) {
-        List<Integer> emptyList = new ArrayList<Integer>();
-        return getBuilder(property, access, changeMode, type, permissionModel, configFlags,
-                sampleRateMax, sampleRateMin, emptyList, emptyList);
-    }
-
-    public static VehiclePropConfig.Builder getBuilder(int property, int access, int changeMode,
-            int type, int permissionModel, int configFlags, float sampleRateMax,
-            float sampleRateMin, List<Integer> int32Maxs, List<Integer> int32Mins) {
-        return VehiclePropConfig.newBuilder().
-                setProp(property).
-                setAccess(access).
-                setChangeMode(changeMode).
-                setValueType(type).
-                setPermissionModel(permissionModel).
-                addConfigArray(configFlags).
-                setSampleRateMax(sampleRateMax).
-                setSampleRateMin(sampleRateMin)
-                .addAllInt32Maxs(int32Maxs)
-                .addAllInt32Mins(int32Mins);
-    }
-}
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropConfigsParcelable.aidl b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropConfigsParcelable.aidl
deleted file mode 100644
index 48219f0..0000000
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropConfigsParcelable.aidl
+++ /dev/null
@@ -1,19 +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.vehiclenetwork;
-
-parcelable VehiclePropConfigsParcelable;
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropConfigsParcelable.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropConfigsParcelable.java
deleted file mode 100644
index 29b20b6..0000000
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropConfigsParcelable.java
+++ /dev/null
@@ -1,64 +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.vehiclenetwork;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfigs;
-import com.google.protobuf.InvalidProtocolBufferException;
-
-public class VehiclePropConfigsParcelable implements Parcelable {
-
-    public final VehiclePropConfigs configs;
-
-    public VehiclePropConfigsParcelable(VehiclePropConfigs configs) {
-        this.configs = configs;
-    }
-
-    public VehiclePropConfigsParcelable(Parcel in) {
-        byte[] blob = in.readBlob();
-        try {
-            configs = VehiclePropConfigs.parseFrom(blob);
-        } catch (InvalidProtocolBufferException e) {
-            throw new IllegalArgumentException(e);
-        }
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        // this is never used for java side as service is implemented in native side.
-        dest.writeBlob(configs.toByteArray());
-    }
-
-    public static final Creator<VehiclePropConfigsParcelable> CREATOR =
-            new Creator<VehiclePropConfigsParcelable>() {
-        @Override
-        public VehiclePropConfigsParcelable createFromParcel(Parcel in) {
-            return new VehiclePropConfigsParcelable(in);
-        }
-
-        @Override
-        public VehiclePropConfigsParcelable[] newArray(int size) {
-            return new VehiclePropConfigsParcelable[size];
-        }
-    };
-}
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueParcelable.aidl b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueParcelable.aidl
deleted file mode 100644
index 6f0fd38..0000000
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueParcelable.aidl
+++ /dev/null
@@ -1,19 +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.vehiclenetwork;
-
-parcelable VehiclePropValueParcelable;
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueParcelable.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueParcelable.java
deleted file mode 100644
index 00b3045..0000000
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueParcelable.java
+++ /dev/null
@@ -1,65 +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.vehiclenetwork;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.os.Parcelable.Creator;
-
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.google.protobuf.InvalidProtocolBufferException;
-
-public class VehiclePropValueParcelable implements Parcelable {
-
-    public final VehiclePropValue value;
-
-    public VehiclePropValueParcelable(VehiclePropValue value) {
-        this.value = value;
-    }
-
-    public VehiclePropValueParcelable(Parcel in) {
-        byte[] blob = in.readBlob();
-        try {
-            value = VehiclePropValue.parseFrom(blob);
-        } catch (InvalidProtocolBufferException e) {
-            throw new IllegalArgumentException(e);
-        }
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        // this is never used for java side as service is implemented in native side.
-        dest.writeBlob(value.toByteArray());
-    }
-
-    public static final Creator<VehiclePropValueParcelable> CREATOR =
-            new Creator<VehiclePropValueParcelable>() {
-        @Override
-        public VehiclePropValueParcelable createFromParcel(Parcel in) {
-            return new VehiclePropValueParcelable(in);
-        }
-
-        @Override
-        public VehiclePropValueParcelable[] newArray(int size) {
-            return new VehiclePropValueParcelable[size];
-        }
-    };
-}
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueUtil.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueUtil.java
deleted file mode 100644
index 5e47546..0000000
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValueUtil.java
+++ /dev/null
@@ -1,272 +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.vehiclenetwork;
-
-import static java.lang.Integer.toHexString;
-
-import com.google.protobuf.ByteString;
-
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Utility class to help creating VehiclePropValue.
- */
-public final class VehiclePropValueUtil {
-
-    /** To prevent creating of utility class */
-    private VehiclePropValueUtil() {}
-
-    public static VehiclePropValue createIntValue(int property, int value, long timestamp) {
-        return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_INT32, timestamp).
-                addInt32Values(value).
-                build();
-    }
-
-    public static VehiclePropValue createIntVectorValue(int property, int[] values,
-            long timestamp) {
-        VehiclePropValue.Builder builder = createBuilder(property,
-                getVectorValueType(VehicleValueType.VEHICLE_VALUE_TYPE_INT32, values.length),
-                timestamp);
-        for (int v : values) {
-            builder.addInt32Values(v);
-        }
-        return builder.build();
-    }
-
-    public static VehiclePropValue createFloatValue(int property, float value, long timestamp) {
-        return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT, timestamp).
-                addFloatValues(value).
-                build();
-    }
-
-    public static VehiclePropValue createFloatVectorValue(int property, float[] values,
-            long timestamp) {
-        VehiclePropValue.Builder builder = createBuilder(property,
-                getVectorValueType(VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT, values.length),
-                timestamp);
-        for (float v : values) {
-            builder.addFloatValues(v);
-        }
-        return builder.build();
-    }
-
-    public static VehiclePropValue createLongValue(int property, long value, long timestamp) {
-        return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_INT64, timestamp).
-                setInt64Value(value).
-                build();
-    }
-
-    public static VehiclePropValue createStringValue(int property, String value, long timestamp) {
-        return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_STRING, timestamp).
-                setStringValue(value).
-                build();
-    }
-
-    public static VehiclePropValue createBooleanValue(int property, boolean value, long timestamp) {
-        return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN, timestamp).
-                addInt32Values(value ? 1 : 0).
-                build();
-    }
-
-    public static VehiclePropValue createBytesValue(int property, byte[] value, long timestamp) {
-        return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_BYTES, timestamp).
-                setBytesValue(ByteString.copyFrom(value)).
-                build();
-    }
-
-    public static VehiclePropValue createZonedIntValue(int property, int zone, int value,
-            long timestamp) {
-        return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32, timestamp).
-                setZone(zone).
-                addInt32Values(value).
-                build();
-    }
-
-    public static VehiclePropValue createZonedIntVectorValue(int property, int zone, int[] values,
-            long timestamp) {
-        int valueType = getVectorValueType(
-                VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32, values.length);
-        VehiclePropValue.Builder builder = createBuilder(property, valueType, timestamp).
-                setZone(zone);
-        for (int value : values) {
-            builder.addInt32Values(value);
-        }
-        return builder.build();
-    }
-
-    public static VehiclePropValue createZonedFloatVectorValue(int property, int zone,
-            float[] values, long timestamp) {
-        int valueType = getVectorValueType(
-                VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT, values.length);
-        VehiclePropValue.Builder builder =  createBuilder(property, valueType, timestamp).
-                setZone(zone);
-        for (float value : values) {
-            builder.addFloatValues(value);
-        }
-        return builder.build();
-    }
-
-
-    public static VehiclePropValue createZonedBooleanValue(int property, int zone, boolean value,
-            long timestamp) {
-        return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN,timestamp).
-                setZone(zone).
-                addInt32Values(value ? 1 : 0).
-                build();
-    }
-
-    public static VehiclePropValue createZonedFloatValue(int property, int zone, float value,
-            long timestamp) {
-        return createBuilder(property, VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT,timestamp).
-                setZone(zone).
-                addFloatValues(value).
-                build();
-    }
-
-    public static VehiclePropValue createDummyValue(int property, int valueType) {
-        switch (valueType) {
-            case VehicleValueType.VEHICLE_VALUE_TYPE_STRING: {
-                return createStringValue(property, "dummy", 0);
-            }
-            case VehicleValueType.VEHICLE_VALUE_TYPE_BYTES: {
-                return createBytesValue(property, new byte[1], 0);
-            }
-            case VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN: {
-                return createBooleanValue(property, false, 0);
-            }
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32: {
-                return createZonedIntValue(property, 0, 0, 0);
-            }
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT: {
-                return createZonedFloatValue(property, 0, 0, 0);
-            }
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN: {
-                return createZonedBooleanValue(property, 0, false, 0);
-            }
-            case VehicleValueType.VEHICLE_VALUE_TYPE_INT64: {
-                return createLongValue(property, 0, 0);
-            }
-            case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT: {
-                return createFloatValue(property, 0, 0);
-            }
-            case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC2:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC3:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC4:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4:{
-                return createFloatVectorValue(property, new float[getVectorLength(valueType)], 0);
-            }
-            case VehicleValueType.VEHICLE_VALUE_TYPE_INT32: {
-                return createIntValue(property, 0, 0);
-            }
-            case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC3:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4: {
-                return createIntVectorValue(property, new int[getVectorLength(valueType)], 0);
-            }
-
-        }
-        return null;
-    }
-
-    public static VehiclePropValue.Builder createBuilder(int property, int valueType,
-            long timestamp) {
-        return VehiclePropValue.newBuilder().
-                setProp(property).
-                setValueType(valueType).
-                setTimestamp(timestamp);
-    }
-
-    public static int getVectorLength(int vehicleValueType) {
-        switch (vehicleValueType) {
-            case VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_INT32:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT:
-                return 1;
-            case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC2:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2:
-                return 2;
-            case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC3:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC3:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3:
-                return 3;
-            case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC4:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4:
-                return 4;
-            default:
-                throw new IllegalArgumentException("Unknown value type: " + vehicleValueType);
-        }
-    }
-
-    public static boolean isCustomProperty(int property) {
-        return property >= VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START &&
-                property <= VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_END;
-    }
-
-    /** Converts {@link VehiclePropValue} to string just for debug purpose. */
-    public static String toString(VehiclePropValue value) {
-        if (value == null) {
-            return String.valueOf(null);
-        }
-        return value.getClass().getSimpleName() + " { prop: 0x" + toHexString(value.getProp()) +
-                ", valueType: 0x" + toHexString(value.getValueType()) +
-                ", timestamp: " + value.getTimestamp() +
-                ", int32Values: " + Arrays.toString(toIntArray(value.getInt32ValuesList())) +
-                ", int64Value: " + value.getInt64Value() +
-                ", floatValues: " + Arrays.toString(toFloatArray(value.getFloatValuesList())) +
-                ", stringValue: " + value.getStringValue() +
-                ", byteValue: " + Arrays.toString(value.getBytesValue().toByteArray()) +
-                ", zone: {" + value.getZone() + "} }";
-    }
-
-    public static int[] toIntArray(List<Integer> collection) {
-        int[] array = new int[collection.size()];
-        int i = 0;
-        for (int value : collection) {
-            array[i++] = value;
-        }
-        return array;
-    }
-
-    public static float[] toFloatArray(List<Float> collection) {
-        float[] array = new float[collection.size()];
-        int i = 0;
-        for (float value : collection) {
-            array[i++] = value;
-        }
-        return array;
-    }
-
-    public static int getVectorValueType(int vehicleValueType, int length) {
-        return vehicleValueType + length - 1;
-    }
-}
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValuesParcelable.aidl b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValuesParcelable.aidl
deleted file mode 100644
index a5dd940..0000000
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValuesParcelable.aidl
+++ /dev/null
@@ -1,19 +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.vehiclenetwork;
-
-parcelable VehiclePropValuesParcelable;
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValuesParcelable.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValuesParcelable.java
deleted file mode 100644
index fbbed1e..0000000
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehiclePropValuesParcelable.java
+++ /dev/null
@@ -1,71 +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.vehiclenetwork;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.os.Parcelable.Creator;
-
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValues;
-import com.google.protobuf.InvalidProtocolBufferException;
-
-/**
- * Have separate Parcelable for {@link VehiclePropValues} to use only one Blob.
- * Handling this as array of single entry can lead into having multiple Blob,
- * which can increase binder transfer size a lot (as each data can be below blob start size),
- * or can add lots of Blob, which brings lots of performance issue.
- */
-public class VehiclePropValuesParcelable implements Parcelable {
-
-    public final VehiclePropValues values;
-
-    public VehiclePropValuesParcelable(VehiclePropValues values) {
-        this.values = values;
-    }
-
-    public VehiclePropValuesParcelable(Parcel in) {
-        byte[] blob = in.readBlob();
-        try {
-            values = VehiclePropValues.parseFrom(blob);
-        } catch (InvalidProtocolBufferException e) {
-            throw new IllegalArgumentException(e);
-        }
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        // this is never used for java side as service is implemented in native side.
-        dest.writeBlob(values.toByteArray());
-    }
-
-    public static final Creator<VehiclePropValuesParcelable> CREATOR =
-            new Creator<VehiclePropValuesParcelable>() {
-        @Override
-        public VehiclePropValuesParcelable createFromParcel(Parcel in) {
-            return new VehiclePropValuesParcelable(in);
-        }
-
-        @Override
-        public VehiclePropValuesParcelable[] newArray(int size) {
-            return new VehiclePropValuesParcelable[size];
-        }
-    };
-}
diff --git a/service/Android.mk b/service/Android.mk
index 8731ccb..732b23c 100644
--- a/service/Android.mk
+++ b/service/Android.mk
@@ -35,7 +35,9 @@
 LOCAL_PROGUARD_ENABLED := disabled
 
 LOCAL_JAVA_LIBRARIES += android.car
-LOCAL_STATIC_JAVA_LIBRARIES += libvehiclenetwork-java car-systemtest
+LOCAL_STATIC_JAVA_LIBRARIES += \
+        android.hardware.vehicle@2.0-java-static \
+        car-systemtest \
 
 LOCAL_JNI_SHARED_LIBRARIES := libjni_car_service
 
@@ -52,7 +54,9 @@
 LOCAL_MODULE := car-service-lib-for-test
 
 LOCAL_JAVA_LIBRARIES += android.car
-LOCAL_STATIC_JAVA_LIBRARIES += libvehiclenetwork-java car-systemtest
+LOCAL_STATIC_JAVA_LIBRARIES += \
+        android.hardware.vehicle@2.0-java-static \
+        car-systemtest \
 
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
diff --git a/service/src/com/android/car/BootReceiver.java b/service/src/com/android/car/BootReceiver.java
index ea96ca6..10c6f2f 100644
--- a/service/src/com/android/car/BootReceiver.java
+++ b/service/src/com/android/car/BootReceiver.java
@@ -23,8 +23,6 @@
 import android.os.UserHandle;
 import android.util.Log;
 
-import com.android.car.hal.VehicleHal;
-
 
 /**
  *  When system boots up, start car service.
@@ -34,10 +32,9 @@
     @Override
     public void onReceive(Context context, Intent intent) {
         Log.w(CarLog.TAG_SERVICE, "Starting...");
-        VehicleHal hal = VehicleHal.getInstance();
-        Intent carServiceintent = new Intent();
-        carServiceintent.setPackage(context.getPackageName());
-        carServiceintent.setAction(Car.CAR_SERVICE_INTERFACE_NAME);
-        context.startServiceAsUser(carServiceintent, UserHandle.SYSTEM);
+        Intent carServiceIntent = new Intent();
+        carServiceIntent.setPackage(context.getPackageName());
+        carServiceIntent.setAction(Car.CAR_SERVICE_INTERFACE_NAME);
+        context.startServiceAsUser(carServiceIntent, UserHandle.SYSTEM);
     }
 }
diff --git a/service/src/com/android/car/CarAudioService.java b/service/src/com/android/car/CarAudioService.java
index 17df7a0..e23ac93 100644
--- a/service/src/com/android/car/CarAudioService.java
+++ b/service/src/com/android/car/CarAudioService.java
@@ -171,8 +171,9 @@
             CarAudioAttributesUtil.getAudioAttributesForCarUsage(
                     CarAudioAttributesUtil.CAR_AUDIO_USAGE_CARSERVICE_CAR_PROXY);
 
-    public CarAudioService(Context context, CarInputService inputService) {
-        mAudioHal = VehicleHal.getInstance().getAudioHal();
+    public CarAudioService(Context context, AudioHalService audioHal,
+            CarInputService inputService) {
+        mAudioHal = audioHal;
         mContext = context;
         mFocusHandlerThread = new HandlerThread(CarLog.TAG_AUDIO);
         mSystemFocusListener = new SystemFocusListener();
@@ -221,10 +222,6 @@
         AudioPolicy audioPolicy = null;
         if (isFocusSupported || mUseDynamicRouting) {
             audioPolicy = builder.build();
-            int r = mAudioManager.registerAudioPolicy(audioPolicy);
-            if (r != 0) {
-                throw new RuntimeException("registerAudioPolicy failed " + r);
-            }
         }
         mAudioHal.setFocusListener(this);
         mAudioHal.setAudioRoutingPolicy(audioRoutingPolicy);
@@ -287,6 +284,12 @@
             Arrays.fill(mExternalRoutings, 0);
         }
         mVolumeService.init();
+
+        // Register audio policy only after this class is fully initialized.
+        int r = mAudioManager.registerAudioPolicy(audioPolicy);
+        if (r != 0) {
+            throw new RuntimeException("registerAudioPolicy failed " + r);
+        }
     }
 
     private void setupDynamicRouting(AudioRoutingPolicy audioRoutingPolicy,
diff --git a/service/src/com/android/car/CarCabinService.java b/service/src/com/android/car/CarCabinService.java
index 47aaa76..cdf8635 100644
--- a/service/src/com/android/car/CarCabinService.java
+++ b/service/src/com/android/car/CarCabinService.java
@@ -18,14 +18,13 @@
 
 import android.car.Car;
 import android.content.Context;
-import com.android.car.CarLog;
-import com.android.car.hal.VehicleHal;
+
+import com.android.car.hal.CabinHalService;
 
 public class CarCabinService extends CarPropertyServiceBase {
 	private final static boolean DBG = false;
 
-    public CarCabinService(Context context) {
-        super(context, VehicleHal.getInstance().getCabinHal(), Car.PERMISSION_CAR_CABIN, DBG,
-                CarLog.TAG_CABIN);
+    public CarCabinService(Context context, CabinHalService cabinHal) {
+        super(context, cabinHal, Car.PERMISSION_CAR_CABIN, DBG, CarLog.TAG_CABIN);
     }
 }
diff --git a/service/src/com/android/car/CarCameraService.java b/service/src/com/android/car/CarCameraService.java
index 7d2608b..c1a71c4 100644
--- a/service/src/com/android/car/CarCameraService.java
+++ b/service/src/com/android/car/CarCameraService.java
@@ -16,9 +16,9 @@
 
 package com.android.car;
 
-import android.content.Context;
 import android.car.hardware.camera.CarCameraState;
 import android.car.hardware.camera.ICarCamera;
+import android.content.Context;
 import android.graphics.Rect;
 import android.util.Log;
 
@@ -45,7 +45,11 @@
         if (DBG) {
             Log.d(TAG, "init called");
         }
-        mModule = nativeOpen();
+        try {
+            mModule = nativeOpen();
+        } catch (UnsatisfiedLinkError ex) {
+            Log.e(TAG, "Failed to open camera module: " + ex.getMessage());
+        }
 
         if (mModule != 0) {
             int[] cameraType = nativeGetSupportedCameras(mModule);
diff --git a/service/src/com/android/car/CarHvacService.java b/service/src/com/android/car/CarHvacService.java
index 99745ee..e22a38d 100644
--- a/service/src/com/android/car/CarHvacService.java
+++ b/service/src/com/android/car/CarHvacService.java
@@ -18,13 +18,13 @@
 
 import android.car.Car;
 import android.content.Context;
-import com.android.car.hal.VehicleHal;
+
+import com.android.car.hal.HvacHalService;
 
 public class CarHvacService extends CarPropertyServiceBase {
-	private final static boolean DBG = false;
+    private final static boolean DBG = false;
 
-    public CarHvacService(Context context) {
-        super(context, VehicleHal.getInstance().getHvacHal(), Car.PERMISSION_CAR_HVAC, DBG,
-                CarLog.TAG_HVAC);
+    public CarHvacService(Context context, HvacHalService hvacHal) {
+        super(context, hvacHal, Car.PERMISSION_CAR_HVAC, DBG, CarLog.TAG_HVAC);
     }
 }
diff --git a/service/src/com/android/car/CarInfoService.java b/service/src/com/android/car/CarInfoService.java
index c51ee15..9715325 100644
--- a/service/src/com/android/car/CarInfoService.java
+++ b/service/src/com/android/car/CarInfoService.java
@@ -17,26 +17,21 @@
 
 import android.car.CarInfoManager;
 import android.car.ICarInfo;
-import android.car.annotation.ValueTypeDef;
 import android.content.Context;
 import android.os.Bundle;
 import android.provider.Settings;
 
 import com.android.car.hal.InfoHalService;
-import com.android.car.hal.VehicleHal;
 
 import java.io.PrintWriter;
-import java.lang.reflect.Field;
-import java.util.HashMap;
-import java.util.Map;
 
 public class CarInfoService extends ICarInfo.Stub implements CarServiceBase {
 
     private final InfoHalService mInfoHal;
     private final Context mContext;
 
-    public CarInfoService(Context context) {
-        mInfoHal = VehicleHal.getInstance().getInfoHal();
+    public CarInfoService(Context context, InfoHalService infoHal) {
+        mInfoHal = infoHal;
         mContext = context;
     }
 
diff --git a/service/src/com/android/car/CarInputService.java b/service/src/com/android/car/CarInputService.java
index 31c07d5..5ed9d49 100644
--- a/service/src/com/android/car/CarInputService.java
+++ b/service/src/com/android/car/CarInputService.java
@@ -60,6 +60,7 @@
     private static final boolean DBG = false;
 
     private final Context mContext;
+    private final InputHalService mInputHalService;
     private final TelecomManager mTelecomManager;
     private final InputManager mInputManager;
 
@@ -125,8 +126,9 @@
         }
     };
 
-    public CarInputService(Context context) {
+    public CarInputService(Context context, InputHalService inputHalService) {
         mContext = context;
+        mInputHalService = inputHalService;
         mTelecomManager = context.getSystemService(TelecomManager.class);
         mInputManager = context.getSystemService(InputManager.class);
     }
@@ -181,14 +183,13 @@
 
     @Override
     public void init() {
-        InputHalService hal = VehicleHal.getInstance().getInputHal();
-        if (!hal.isKeyInputSupported()) {
+        if (!mInputHalService.isKeyInputSupported()) {
             Log.w(CarLog.TAG_INPUT, "Hal does not support key input.");
             return;
         }
 
 
-        hal.setInputListener(this);
+        mInputHalService.setInputListener(this);
         mCarInputListenerBound = bindCarInputService();
     }
 
diff --git a/service/src/com/android/car/CarNightService.java b/service/src/com/android/car/CarNightService.java
index 0d3af67..497f77c 100644
--- a/service/src/com/android/car/CarNightService.java
+++ b/service/src/com/android/car/CarNightService.java
@@ -18,12 +18,10 @@
 
 import android.annotation.IntDef;
 import android.app.UiModeManager;
-import android.car.Car;
 import android.car.hardware.CarSensorEvent;
 import android.car.hardware.CarSensorManager;
 import android.car.hardware.ICarSensorEventListener;
 import android.content.Context;
-import android.content.pm.PackageManager;
 import android.util.Log;
 
 import java.io.PrintWriter;
@@ -104,8 +102,9 @@
         return mUiModeManager.getNightMode();
     }
 
-    CarNightService(Context context) {
+    CarNightService(Context context, CarSensorService sensorService) {
         mContext = context;
+        mCarSensorService = sensorService;
         mUiModeManager = (UiModeManager) mContext.getSystemService(Context.UI_MODE_SERVICE);
         if (mUiModeManager == null) {
             Log.w(CarLog.TAG_SENSOR,"Failed to get UI_MODE_SERVICE");
@@ -117,8 +116,6 @@
         if (DBG) {
             Log.d(CarLog.TAG_SENSOR,"CAR dayNight init.");
         }
-        mCarSensorService = (CarSensorService) ICarImpl.getInstance(mContext).getCarService(
-                Car.SENSOR_SERVICE);
         mCarSensorService.registerOrUpdateSensorListener(CarSensorManager.SENSOR_TYPE_NIGHT,
                 CarSensorManager.SENSOR_RATE_NORMAL, mICarSensorEventListener);
         CarSensorEvent currentState = mCarSensorService.getLatestSensorEvent(
diff --git a/service/src/com/android/car/CarPowerManagementService.java b/service/src/com/android/car/CarPowerManagementService.java
index 34a67fa..22f8b09 100644
--- a/service/src/com/android/car/CarPowerManagementService.java
+++ b/service/src/com/android/car/CarPowerManagementService.java
@@ -15,23 +15,15 @@
  */
 package com.android.car;
 
-import android.annotation.NonNull;
-import android.car.Car;
-import android.content.Context;
-import android.hardware.display.DisplayManager;
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.Looper;
 import android.os.Message;
-import android.os.PowerManager;
-import android.os.PowerManager.WakeLock;
 import android.os.SystemClock;
 import android.util.Log;
-import android.view.Display;
 
 import com.android.car.hal.PowerHalService;
 import com.android.car.hal.PowerHalService.PowerState;
-import com.android.car.hal.VehicleHal;
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 
@@ -95,23 +87,8 @@
         int getWakeupTime();
     }
 
-    /** Interface to abstract all system interaction. Separated for testing. */
-    public interface SystemInteface {
-        void setDisplayState(boolean on);
-        void releaseAllWakeLocks();
-        void shutdown();
-        void enterDeepSleep(int wakeupTimeSec);
-        void switchToPartialWakeLock();
-        void switchToFullWakeLock();
-        void startDisplayStateMonitoring(CarPowerManagementService service);
-        void stopDisplayStateMonitoring();
-        boolean isSystemSupportingDeepSleep();
-        boolean isWakeupCausedByTimer();
-    }
-
-    private final Context mContext;
     private final PowerHalService mHal;
-    private final SystemInteface mSystemInterface;
+    private final SystemInterface mSystemInterface;
     private final HandlerThread mHandlerThread;
     private final PowerHandler mHandler;
 
@@ -131,23 +108,10 @@
     @GuardedBy("this")
     private final LinkedList<PowerState> mPendingPowerStates = new LinkedList<>();
 
-    private final int SHUTDOWN_POLLING_INTERVAL_MS = 2000;
-    private final int SHUTDOWN_EXTEND_MAX_MS = 5000;
+    private final static int SHUTDOWN_POLLING_INTERVAL_MS = 2000;
+    private final static int SHUTDOWN_EXTEND_MAX_MS = 5000;
 
-    /**
-     * Constructor for full functionality.
-     */
-    public CarPowerManagementService(@NonNull Context context) {
-        this(context, VehicleHal.getInstance().getPowerHal(),
-                new SystemIntefaceImpl(context));
-    }
-
-    /**
-     * Constructor for full functionality. Can inject external interfaces
-     */
-    public CarPowerManagementService(@NonNull Context context, @NonNull PowerHalService powerHal,
-            @NonNull SystemInteface systemInterface) {
-        mContext = context;
+    public CarPowerManagementService(PowerHalService powerHal, SystemInterface systemInterface) {
         mHal = powerHal;
         mSystemInterface = systemInterface;
         mHandlerThread = new HandlerThread(CarLog.TAG_POWER);
@@ -161,7 +125,6 @@
      */
     @VisibleForTesting
     protected CarPowerManagementService() {
-        mContext = null;
         mHal = null;
         mSystemInterface = null;
         mHandlerThread = null;
@@ -174,7 +137,12 @@
         if (mHal.isPowerStateSupported()) {
             mHal.sendBootComplete();
             PowerState currentState = mHal.getCurrentPowerState();
-            onApPowerStateChange(currentState);
+            if (currentState != null) {
+                onApPowerStateChange(currentState);
+            } else {
+                Log.w(CarLog.TAG_POWER, "Unable to get get current power state during "
+                        + "initialization");
+            }
         } else {
             Log.w(CarLog.TAG_POWER, "Vehicle hal does not support power state yet.");
             onApPowerStateChange(new PowerState(PowerHalService.STATE_ON_FULL, 0));
@@ -246,7 +214,7 @@
             if (mCurrentState == null) {
                 return;
             }
-            if (mCurrentState.state != PowerHalService.STATE_SHUTDOWN_PREPARE) {
+            if (mCurrentState.mState != PowerHalService.STATE_SHUTDOWN_PREPARE) {
                 return;
             }
             if (mCurrentState.canEnterDeepSleep()) {
@@ -300,7 +268,7 @@
         }
 
         Log.i(CarLog.TAG_POWER, "Power state change:" + state);
-        switch (state.state) {
+        switch (state.mState) {
             case PowerHalService.STATE_ON_DISP_OFF:
                 handleDisplayOff(state);
                 notifyPowerOn(false);
@@ -415,9 +383,7 @@
         synchronized (this) {
             mLastSleepEntryTime = SystemClock.elapsedRealtime();
         }
-        if (!shouldDoFakeShutdown()) { // if it is mocked, do not enter sleep.
-            mSystemInterface.enterDeepSleep(wakeupTimeSec);
-        }
+        mSystemInterface.enterDeepSleep(wakeupTimeSec);
         mHal.sendSleepExit();
         for (PowerServiceEventListener listener : mListeners) {
             listener.onSleepExit();
@@ -426,7 +392,7 @@
             doHandlePreprocessing(false /*shuttingDown*/);
         } else {
             PowerState currentState = mHal.getCurrentPowerState();
-            if (needPowerStateChange(currentState)) {
+            if (currentState != null && needPowerStateChange(currentState)) {
                 onApPowerStateChange(currentState);
             } else { // power controller woke-up but no power state change. Just shutdown.
                 Log.w(CarLog.TAG_POWER, "external sleep wake up, but no power state change:" +
@@ -439,7 +405,7 @@
     private void doHandleNotifyPowerOn() {
         boolean displayOn = false;
         synchronized (this) {
-            if (mCurrentState != null && mCurrentState.state == PowerHalService.STATE_ON_FULL) {
+            if (mCurrentState != null && mCurrentState.mState == PowerHalService.STATE_ON_FULL) {
                 displayOn = true;
             }
         }
@@ -468,9 +434,7 @@
             wakeupTimeSec = getWakeupTime();
         }
         mHal.sendShutdownStart(wakeupTimeSec);
-        if (!shouldDoFakeShutdown()) {
-            mSystemInterface.shutdown();
-        }
+        mSystemInterface.shutdown();
     }
 
     private int getWakeupTime() {
@@ -517,15 +481,6 @@
         //TODO bug: 32065231
     }
 
-    private boolean shouldDoFakeShutdown() {
-        ICarImpl carImpl = ICarImpl.getInstance(mContext);
-        if (!carImpl.isInMocking()) {
-            return false;
-        }
-        CarTestService testService = (CarTestService) carImpl.getCarService(Car.TEST_SERVICE);
-        return !testService.shouldDoRealShutdownInMocking();
-    }
-
     public void handleMainDisplayChanged(boolean on) {
         mHandler.handleMainDisplayStateChange(on);
     }
@@ -611,151 +566,6 @@
         }
     }
 
-    private static class SystemIntefaceImpl implements SystemInteface {
-
-        private final PowerManager mPowerManager;
-        private final DisplayManager mDisplayManager;
-        private final WakeLock mFullWakeLock;
-        private final WakeLock mPartialWakeLock;
-        private final DisplayStateListener mDisplayListener;
-        private CarPowerManagementService mService;
-        private boolean mDisplayStateSet;
-
-        private SystemIntefaceImpl(Context context) {
-            mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
-            mDisplayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
-            mFullWakeLock = mPowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, CarLog.TAG_POWER);
-            mPartialWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
-                    CarLog.TAG_POWER);
-            mDisplayListener = new DisplayStateListener();
-        }
-
-        @Override
-        public void startDisplayStateMonitoring(CarPowerManagementService service) {
-            synchronized (this) {
-                mService = service;
-                mDisplayStateSet = isMainDisplayOn();
-            }
-            mDisplayManager.registerDisplayListener(mDisplayListener, service.getHandler());
-        }
-
-        @Override
-        public void stopDisplayStateMonitoring() {
-            mDisplayManager.unregisterDisplayListener(mDisplayListener);
-        }
-
-        @Override
-        public void setDisplayState(boolean on) {
-            synchronized (this) {
-                mDisplayStateSet = on;
-            }
-            if (on) {
-                switchToFullWakeLock();
-                Log.i(CarLog.TAG_POWER, "on display");
-                mPowerManager.wakeUp(SystemClock.uptimeMillis());
-            } else {
-                switchToPartialWakeLock();
-                Log.i(CarLog.TAG_POWER, "off display");
-                mPowerManager.goToSleep(SystemClock.uptimeMillis());
-            }
-        }
-
-        private boolean isMainDisplayOn() {
-            Display disp = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY);
-            return disp.getState() == Display.STATE_ON;
-        }
-
-        @Override
-        public void shutdown() {
-            mPowerManager.shutdown(false /* no confirm*/, null, true /* true */);
-        }
-
-        @Override
-        public void enterDeepSleep(int wakeupTimeSec) {
-            //TODO set wake up time, bug: 32061842
-            mPowerManager.goToSleep(SystemClock.uptimeMillis(),
-                    PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN,
-                    PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
-        }
-
-        @Override
-        public boolean isSystemSupportingDeepSleep() {
-            //TODO should return by checking some kernel suspend control sysfs, bug: 32061842
-            return false;
-        }
-
-        @Override
-        public void switchToPartialWakeLock() {
-            if (!mPartialWakeLock.isHeld()) {
-                mPartialWakeLock.acquire();
-            }
-            if (mFullWakeLock.isHeld()) {
-                mFullWakeLock.release();
-            }
-        }
-
-        @Override
-        public void switchToFullWakeLock() {
-            if (!mFullWakeLock.isHeld()) {
-                mFullWakeLock.acquire();
-            }
-            if (mPartialWakeLock.isHeld()) {
-                mPartialWakeLock.release();
-            }
-        }
-
-        @Override
-        public void releaseAllWakeLocks() {
-            if (mPartialWakeLock.isHeld()) {
-                mPartialWakeLock.release();
-            }
-            if (mFullWakeLock.isHeld()) {
-                mFullWakeLock.release();
-            }
-        }
-
-        @Override
-        public boolean isWakeupCausedByTimer() {
-            //TODO bug: 32061842, check wake up reason and do necessary operation information should
-            // come from kernel. it can be either power on or wake up for maintenance
-            // power on will involve GPIO trigger from power controller
-            // its own wakeup will involve timer expiration.
-            return false;
-        }
-
-        private void handleMainDisplayChanged() {
-            boolean isOn = isMainDisplayOn();
-            CarPowerManagementService service;
-            synchronized (this) {
-                if (mDisplayStateSet == isOn) { // same as what is set
-                    return;
-                }
-                service = mService;
-            }
-            service.handleMainDisplayChanged(isOn);
-        }
-
-        private class DisplayStateListener implements DisplayManager.DisplayListener {
-
-            @Override
-            public void onDisplayAdded(int displayId) {
-                //ignore
-            }
-
-            @Override
-            public void onDisplayChanged(int displayId) {
-                if (displayId == Display.DEFAULT_DISPLAY) {
-                    handleMainDisplayChanged();
-                }
-            }
-
-            @Override
-            public void onDisplayRemoved(int displayId) {
-                //ignore
-            }
-        }
-    }
-
     private class ShutdownProcessingTimerTask extends TimerTask {
         private final boolean mShutdownWhenCompleted;
         private final int mExpirationCount;
diff --git a/service/src/com/android/car/CarRadioService.java b/service/src/com/android/car/CarRadioService.java
index c59983c..d12c9ae 100644
--- a/service/src/com/android/car/CarRadioService.java
+++ b/service/src/com/android/car/CarRadioService.java
@@ -28,7 +28,6 @@
 import android.os.RemoteException;
 import android.util.Log;
 
-import com.android.car.hal.VehicleHal;
 import com.android.car.hal.RadioHalService;
 
 import java.io.PrintWriter;
@@ -46,8 +45,8 @@
         new HashMap<IBinder, RadioDeathRecipient>();
     private final Context mContext;
 
-    public CarRadioService(Context context) {
-        mRadioHal = VehicleHal.getInstance().getRadioHal();
+    public CarRadioService(Context context, RadioHalService radioHal) {
+        mRadioHal = radioHal;
         mContext = context;
     }
 
diff --git a/service/src/com/android/car/CarSensorService.java b/service/src/com/android/car/CarSensorService.java
index 748d3c2..e9ab453 100644
--- a/service/src/com/android/car/CarSensorService.java
+++ b/service/src/com/android/car/CarSensorService.java
@@ -32,11 +32,13 @@
 import android.os.Process;
 import android.os.RemoteException;
 import android.os.SystemClock;
+import android.util.ArrayMap;
 import android.util.Log;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 
-import com.android.car.hal.VehicleHal;
+import com.google.android.collect.Lists;
+
 import com.android.car.hal.SensorHalService;
 import com.android.car.hal.SensorHalServiceBase;
 import com.android.internal.annotations.GuardedBy;
@@ -81,9 +83,8 @@
     private final ReentrantLock mSensorLock = new ReentrantLock();
     /** hold clients callback  */
     @GuardedBy("mSensorLock")
-    private final LinkedList<SensorClient> mClients = new LinkedList<SensorClient>();
-    /** should be used only as temp data for event dispatching */
-    private final LinkedList<SensorClient> mClientDispatchList = new LinkedList<>();
+    private final LinkedList<SensorClient> mClients = new LinkedList<>();
+
     /** key: sensor type. */
     @GuardedBy("mSensorLock")
     private final SparseArray<SensorListeners> mSensorListeners = new SparseArray<>();
@@ -106,7 +107,7 @@
     private final HandlerThread mHandlerThread;
     private final SensorDispatchHandler mSensorDispatchHandler;
 
-    public CarSensorService(Context context) {
+    public CarSensorService(Context context, SensorHalService sensorHal) {
         mContext = context;
         if (ENABLE_DISPATCHING_LIMIT) {
             mHandlerThread = new HandlerThread("SENSOR", Process.THREAD_PRIORITY_AUDIO);
@@ -117,8 +118,8 @@
             mSensorDispatchHandler = null;
         }
         // This triggers sensor hal init as well.
-        mSensorHal = VehicleHal.getInstance().getSensorHal();
-        mDrivingStatePolicy = new DrivingStatePolicy(context);
+        mSensorHal = sensorHal;
+        mDrivingStatePolicy = new DrivingStatePolicy(context, this);
         mDayNightModePolicy = new DayNightModePolicy(context);
     }
 
@@ -154,8 +155,8 @@
                 mDayNightModePolicy.registerSensorListener(this);
             } else {
                 event = mSensorHal.getCurrentSensorValue(CarSensorManager.SENSOR_TYPE_NIGHT);
-                Log.i(CarLog.TAG_SENSOR, "initial daynight:" + ((event == null)?
-                        "not ready" : + event.intValues[0]));
+                Log.i(CarLog.TAG_SENSOR, "initial daynight: "
+                        + ((event == null) ? "not ready" : + event.intValues[0]));
             }
             if (event == null) {
                 event = DayNightModePolicy.getDefaultValue(CarSensorManager.SENSOR_TYPE_NIGHT);
@@ -226,6 +227,8 @@
     }
 
     private void processSensorData(List<CarSensorEvent> events) {
+        ArrayMap<SensorClient, List<CarSensorEvent>> eventsByClient = new ArrayMap<>();
+
         mSensorLock.lock();
         for (CarSensorEvent event: events) {
             SensorRecord record = mSensorRecords.get(event.sensorType);
@@ -239,24 +242,35 @@
                     //TODO recycle new event, bug: 32094595
                     continue;
                 }
+
                 SensorListeners listeners = mSensorListeners.get(event.sensorType);
-                if (listeners != null) {
-                    listeners.queueSensorEvent(event);
+                if (listeners == null) {
+                    continue;
+                }
+
+                for (SensorClientWithRate clientWithRate : listeners.mSensorClients) {
+                    SensorClient client = clientWithRate.getSensorClient();
+                    List<CarSensorEvent> clientEvents = eventsByClient.get(client);
+                    if (clientEvents == null) {
+                        clientEvents = new LinkedList<>();
+                        eventsByClient.put(client, clientEvents);
+                    }
+                    clientEvents.add(event);
                 }
             }
         }
-        mClientDispatchList.addAll(mClients);
         mSensorLock.unlock();
-        for (SensorClient client: mClientDispatchList) {
-            client.dispatchSensorUpdate();
+
+        for (ArrayMap.Entry<SensorClient, List<CarSensorEvent>> entry : eventsByClient.entrySet()) {
+            SensorClient client = entry.getKey();
+            List<CarSensorEvent> clientEvents = entry.getValue();
+
+            client.dispatchSensorUpdate(clientEvents);
         }
-        mClientDispatchList.clear();
     }
 
     /**
      * Received sensor data from car.
-     *
-     * @param event
      */
     @Override
     public void onSensorEvents(List<CarSensorEvent> events) {
@@ -325,15 +339,14 @@
             // If we have a cached event for this sensor, send the event.
             SensorRecord record = mSensorRecords.get(sensorType);
             if (record != null && record.lastEvent != null) {
-                sensorClient.queueSensorEvent(record.lastEvent);
-                sensorClient.dispatchSensorUpdate();
+                sensorClient.dispatchSensorUpdate(Lists.newArrayList(record.lastEvent));
             }
             if (sensorListeners == null) {
                 sensorListeners = new SensorListeners(rate);
                 mSensorListeners.put(sensorType, sensorListeners);
                 shouldStartSensors = true;
             } else {
-                oldRate = Integer.valueOf(sensorListeners.getRate());
+                oldRate = sensorListeners.getRate();
                 sensorClientWithRate = sensorListeners.findSensorClientWithRate(sensorClient);
             }
             if (sensorClientWithRate == null) {
@@ -635,7 +648,7 @@
     private SensorClient findSensorClientLocked(ICarSensorEventListener listener) {
         IBinder binder = listener.asBinder();
         for (SensorClient sensorClient : mClients) {
-            if (sensorClient.isHoldingListernerBinder(binder)) {
+            if (sensorClient.isHoldingListenerBinder(binder)) {
                 return sensorClient;
             }
         }
@@ -738,8 +751,6 @@
         /** callback for sensor events */
         private final ICarSensorEventListener mListener;
         private final SparseBooleanArray mActiveSensors = new SparseBooleanArray();
-        private final LinkedList<CarSensorEvent> mSensorsToDispatch =
-                new LinkedList<CarSensorEvent>();
 
         /** when false, it is already released */
         private volatile boolean mActive = true;
@@ -757,7 +768,7 @@
             return false;
         }
 
-        boolean isHoldingListernerBinder(IBinder listenerBinder) {
+        boolean isHoldingListenerBinder(IBinder listenerBinder) {
             return mListener.asBinder() == listenerBinder;
         }
 
@@ -794,17 +805,13 @@
             removeClient(this);
         }
 
-        void queueSensorEvent(CarSensorEvent event) {
-            mSensorsToDispatch.add(event);
-        }
-
-        void dispatchSensorUpdate() {
-            if (mSensorsToDispatch.size() == 0) {
+        void dispatchSensorUpdate(List<CarSensorEvent> events) {
+            if (events.size() == 0) {
                 return;
             }
             if (mActive) {
                 try {
-                    mListener.onSensorChanged(mSensorsToDispatch);
+                    mListener.onSensorChanged(events);
                 } catch (RemoteException e) {
                     //ignore. crash will be handled by death handler
                 }
@@ -813,14 +820,12 @@
                     Log.d(CarLog.TAG_SENSOR, "sensor update while client is already released");
                 }
             }
-            mSensorsToDispatch.clear();
         }
 
         void release() {
             if (mActive) {
                 mListener.asBinder().unlinkToDeath(this, 0);
                 mActiveSensors.clear();
-                mSensorsToDispatch.clear();
                 mActive = false;
             }
         }
@@ -920,12 +925,6 @@
             return null;
         }
 
-        void queueSensorEvent(CarSensorEvent event) {
-            for (SensorClientWithRate clientWithRate: mSensorClients) {
-                clientWithRate.getSensorClient().queueSensorEvent(event);
-            }
-        }
-
         void release() {
             for (SensorClientWithRate clientWithRate: mSensorClients) {
                 clientWithRate.mSensorClient.release();
diff --git a/service/src/com/android/car/CarService.java b/service/src/com/android/car/CarService.java
index 475d4de..37df29d 100644
--- a/service/src/com/android/car/CarService.java
+++ b/service/src/com/android/car/CarService.java
@@ -15,28 +15,40 @@
  */
 package com.android.car;
 
+import static android.os.SystemClock.elapsedRealtime;
+
+import android.annotation.Nullable;
 import android.app.Service;
 import android.content.Intent;
 import android.content.pm.PackageManager;
+import android.hardware.vehicle.V2_0.IVehicle;
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.SystemProperties;
 import android.util.Log;
 
-import com.android.car.hal.VehicleHal;
-
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 
 public class CarService extends Service {
 
-    // main thread only
+    /** Default vehicle HAL service name. */
+    private static final String VEHICLE_SERVICE_NAME = "Vehicle";
+
+    private static final long WAIT_FOR_VEHICLE_HAL_TIMEOUT_MS = 10_000;
+
     private ICarImpl mICarImpl;
 
     @Override
     public void onCreate() {
         Log.i(CarLog.TAG_SERVICE, "Service onCreate");
-        mICarImpl = ICarImpl.getInstance(this);
+        IVehicle vehicle = getVehicle(WAIT_FOR_VEHICLE_HAL_TIMEOUT_MS);
+        if (vehicle == null) {
+            throw new IllegalStateException("Vehicle HAL service is not available.");
+        }
+
+        mICarImpl = new ICarImpl(this, vehicle, SystemInterface.getDefault(this));
+        mICarImpl.init();
         SystemProperties.set("boot.car_service_created", "1");
         super.onCreate();
     }
@@ -44,7 +56,7 @@
     @Override
     public void onDestroy() {
         Log.i(CarLog.TAG_SERVICE, "Service onDestroy");
-        ICarImpl.releaseInstance();
+        mICarImpl.release();
         super.onDestroy();
     }
 
@@ -70,12 +82,30 @@
         }
         if (args == null || args.length == 0) {
             writer.println("*dump car service*");
-            writer.println("*dump HAL*");
-            VehicleHal.getInstance().dump(writer);
-            writer.println("*dump services*");
-            ICarImpl.getInstance(this).dump(writer);
+            mICarImpl.dump(writer);
         } else {
-            ICarImpl.getInstance(this).execShellCmd(args, writer);
+            mICarImpl.execShellCmd(args, writer);
         }
     }
+
+    @Nullable
+    private IVehicle getVehicle(long waitMilliseconds) {
+        IVehicle vehicle = getVehicle();
+        long start = elapsedRealtime();
+        while (vehicle == null && (start + waitMilliseconds) > elapsedRealtime()) {
+            try {
+                Thread.sleep(100);
+            } catch (InterruptedException e) {
+                throw new RuntimeException("Sleep was interrupted", e);
+            }
+
+            vehicle = getVehicle();
+        }
+        return vehicle;
+    }
+
+    @Nullable
+    private IVehicle getVehicle() {
+        return IVehicle.getService(VEHICLE_SERVICE_NAME);
+    }
 }
\ No newline at end of file
diff --git a/service/src/com/android/car/CarServiceUtils.java b/service/src/com/android/car/CarServiceUtils.java
index b47e22c..5467401 100644
--- a/service/src/com/android/car/CarServiceUtils.java
+++ b/service/src/com/android/car/CarServiceUtils.java
@@ -16,17 +16,16 @@
 
 package com.android.car;
 
-import java.util.List;
-
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.os.Binder;
 import android.os.Handler;
 import android.os.Looper;
 import android.util.Log;
 
+import java.util.List;
+
 /** Utility class */
 public final class CarServiceUtils {
 
@@ -158,4 +157,13 @@
         }
         return array;
     }
+
+    public static byte[] toByteArray(List<Byte> list) {
+        final int size = list.size();
+        final byte[] array = new byte[size];
+        for (int i = 0; i < size; ++i) {
+            array[i] = list.get(i);
+        }
+        return array;
+    }
 }
diff --git a/service/src/com/android/car/CarTestService.java b/service/src/com/android/car/CarTestService.java
index 9541af1..ec1606c 100644
--- a/service/src/com/android/car/CarTestService.java
+++ b/service/src/com/android/car/CarTestService.java
@@ -15,41 +15,35 @@
  */
 package com.android.car;
 
-import android.car.test.CarTestManager;
+import android.car.Car;
 import android.car.test.ICarTest;
 import android.content.Context;
 import android.os.IBinder;
+import android.os.RemoteException;
 import android.util.Log;
 
-import com.android.car.hal.VehicleHal;
-import com.android.car.vehiclenetwork.IVehicleNetworkHalMock;
-import com.android.car.vehiclenetwork.VehicleNetwork;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfigs;
-import com.android.car.vehiclenetwork.VehiclePropValueParcelable;
-
 import java.io.PrintWriter;
-import java.util.NoSuchElementException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Service to allow testing / mocking vehicle HAL.
  * This service uses Vehicle HAL APIs directly (one exception) as vehicle HAL mocking anyway
  * requires accessing that level directly.
  */
-public class CarTestService extends ICarTest.Stub implements CarServiceBase {
+class CarTestService extends ICarTest.Stub implements CarServiceBase {
+
+    private static final String TAG = CarTestService.class.getSimpleName();
 
     private final Context mContext;
-    private final VehicleNetwork mVehicleNetwork;
     private final ICarImpl mICarImpl;
-    private boolean mInMocking = false;
-    private int mMockingFlags = 0;
-    private Exception mException = null;
-    private IVehicleNetworkHalMock mMock = null;
-    private final MockDeathRecipient mDeathRecipient = new MockDeathRecipient();
 
-    public CarTestService(Context context, ICarImpl carImpl) {
+    private final Map<IBinder, TokenDeathRecipient> mTokens = new HashMap<>();
+
+    CarTestService(Context context, ICarImpl carImpl) {
         mContext = context;
         mICarImpl = carImpl;
-        mVehicleNetwork = VehicleHal.getInstance().getVehicleNetwork();
     }
 
     @Override
@@ -67,124 +61,59 @@
     @Override
     public void dump(PrintWriter writer) {
         writer.println("*CarTestService*");
-        writer.println(" mInMocking:" + mInMocking);
+        writer.println(" mTokens:" + Arrays.toString(mTokens.entrySet().toArray()));
     }
 
     @Override
-    public void injectEvent(VehiclePropValueParcelable value) {
-        ICarImpl.assertVehicleHalMockPermission(mContext);
-        mVehicleNetwork.injectEvent(value.value);
-    }
+    public void stopCarService(IBinder token) throws RemoteException {
+        Log.d(TAG, "stopCarService, token: " + token);
+        ICarImpl.assertPermission(mContext, Car.PERMISSION_CAR_TEST_SERVICE);
 
-    @Override
-    public void startMocking(final IVehicleNetworkHalMock mock, final int flags) {
-        ICarImpl.assertVehicleHalMockPermission(mContext);
-        CarServiceUtils.runOnMainSync(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    synchronized (this) {
-                        mInMocking = true;
-                        mMockingFlags = flags;
-                        mException = null;
-                        if (mMock != null) {
-                            Log.w(CarLog.TAG_TEST,
-                                    "New mocking started while previous one is not stopped");
-                            try {
-                                mMock.asBinder().unlinkToDeath(mDeathRecipient, 0);
-                            } catch (NoSuchElementException e) {
-                                //ignore
-                            }
-                        }
-                        mMock = mock;
-                    }
-                    mock.asBinder().linkToDeath(mDeathRecipient, 0);
-                    mVehicleNetwork.startMocking(mock);
-                    mICarImpl.startMocking();
-                } catch (Exception e) {
-                    Log.w(CarLog.TAG_TEST, "startMocking failed", e);
-                    synchronized (this) {
-                        mException = e;
-                        mInMocking = false;
-                        mMockingFlags = 0;
-                    }
-                }
-                Log.i(CarLog.TAG_TEST, "start vehicle HAL mocking, flags:0x" +
-                        Integer.toHexString(flags));
-            }
-        });
         synchronized (this) {
-            if (mException != null) {
-                throw new IllegalStateException(mException);
+            if (mTokens.containsKey(token)) {
+                Log.w(TAG, "Calling stopCarService twice with the same token.");
+                return;
+            }
+
+            TokenDeathRecipient deathRecipient = new TokenDeathRecipient(token);
+            mTokens.put(token, deathRecipient);
+            token.linkToDeath(deathRecipient, 0);
+
+            if (mTokens.size() == 1) {
+                mICarImpl.release();
             }
         }
     }
 
     @Override
-    public void stopMocking(final IVehicleNetworkHalMock mock) {
-        ICarImpl.assertVehicleHalMockPermission(mContext);
-        CarServiceUtils.runOnMainSync(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    synchronized (this) {
-                        if (!mInMocking) {
-                            throw new IllegalStateException("not in mocking");
-                        }
-                        if (mMock.asBinder() != mock.asBinder()) {
-                            throw new IllegalArgumentException("Try to stop mocking not owned");
-                        }
-                        try {
-                            mMock.asBinder().unlinkToDeath(mDeathRecipient, 0);
-                        } catch (NoSuchElementException e) {
-                            //ignore
-                        }
-                    }
-                    mVehicleNetwork.stopMocking(mock);
-                    mICarImpl.stopMocking();
-                    synchronized (this) {
-                        mInMocking = false;
-                        mMockingFlags = 0;
-                        mException = null;
-                        mMock = null;
-                    }
-                    Log.i(CarLog.TAG_TEST, "stop vehicle HAL mocking");
-                } catch (Exception e) {
-                    Log.w(CarLog.TAG_TEST, "stopMocking failed", e);
-                }
-            }
-        });
+    public void startCarService(IBinder token) throws RemoteException {
+        Log.d(TAG, "startCarService, token: " + token);
+        ICarImpl.assertPermission(mContext, Car.PERMISSION_CAR_TEST_SERVICE);
+        releaseToken(token);
     }
 
-    @Override
-    public boolean isPropertySupported(int property) {
-        VehiclePropConfigs configs = VehicleHal.getInstance().getVehicleNetwork().listProperties(
-                property);
-        return configs != null;
+    private synchronized void releaseToken(IBinder token) {
+        Log.d(TAG, "releaseToken, token: " + token);
+        DeathRecipient deathRecipient = mTokens.remove(token);
+        if (deathRecipient != null) {
+            token.unlinkToDeath(deathRecipient, 0);
+        }
+
+        if (mTokens.size() == 0) {
+            mICarImpl.init();
+        }
     }
 
-    public synchronized boolean isInMocking() {
-        return mInMocking;
-    }
+    private class TokenDeathRecipient implements DeathRecipient {
+        private final IBinder mToken;
 
-    public synchronized boolean shouldDoRealShutdownInMocking() {
-        return (mMockingFlags & CarTestManager.FLAG_MOCKING_REAL_SHUTDOWN) != 0;
-    }
+        TokenDeathRecipient(IBinder token) throws RemoteException {
+            mToken = token;
+        }
 
-    private class MockDeathRecipient implements IBinder.DeathRecipient {
         @Override
         public void binderDied() {
-            CarServiceUtils.runOnMainSync(() -> {
-               try {
-                   IVehicleNetworkHalMock mock;
-                   synchronized (this) {
-                       mock = mMock;
-                   }
-                   stopMocking(mock);
-               } catch (Exception e) {
-                   //ignore
-               }
-            });
+            releaseToken(mToken);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/service/src/com/android/car/CarVendorExtensionService.java b/service/src/com/android/car/CarVendorExtensionService.java
index 3808684..2e2d074 100644
--- a/service/src/com/android/car/CarVendorExtensionService.java
+++ b/service/src/com/android/car/CarVendorExtensionService.java
@@ -19,7 +19,7 @@
 import android.car.Car;
 import android.content.Context;
 
-import com.android.car.hal.VehicleHal;
+import com.android.car.hal.VendorExtensionHalService;
 
 /**
  * Service responsible for handling custom properties that were defined in vehicle HAL by OEMs.
@@ -28,8 +28,7 @@
 
     private final static boolean DEBUG = false;
 
-    public CarVendorExtensionService(Context context) {
-        super(context, VehicleHal.getInstance().getVendorExtensionHal(),
-                Car.PERMISSION_VENDOR_EXTENSION, DEBUG, CarLog.TAG_VENDOR_EXT);
+    public CarVendorExtensionService(Context context, VendorExtensionHalService vendorHal) {
+        super(context, vendorHal, Car.PERMISSION_VENDOR_EXTENSION, DEBUG, CarLog.TAG_VENDOR_EXT);
     }
 }
diff --git a/service/src/com/android/car/CarVolumeControllerFactory.java b/service/src/com/android/car/CarVolumeControllerFactory.java
index 79ada5a..ae7dc1b 100644
--- a/service/src/com/android/car/CarVolumeControllerFactory.java
+++ b/service/src/com/android/car/CarVolumeControllerFactory.java
@@ -30,7 +30,6 @@
 import android.telecom.TelecomManager;
 import android.util.ArrayMap;
 import android.util.Log;
-import android.util.Pair;
 import android.util.SparseArray;
 import android.view.KeyEvent;
 
@@ -229,9 +228,6 @@
                 new SparseArray<>(VolumeUtils.CAR_AUDIO_CONTEXT.length);
         // stream volume limit, the key is car audio context type
         @GuardedBy("this")
-        private final SparseArray<Integer> mCarContextVolumeMin =
-                new SparseArray<>(VolumeUtils.CAR_AUDIO_CONTEXT.length);
-        @GuardedBy("this")
         private final RemoteCallbackList<IVolumeController> mVolumeControllers =
                 new RemoteCallbackList<>();
         @GuardedBy("this")
@@ -374,19 +370,13 @@
         private void initVolumeLimitLocked() {
             for (int i : VolumeUtils.CAR_AUDIO_CONTEXT) {
                 int carStream = carContextToCarStream(i);
-                Pair<Integer, Integer> volumeMinMax = mHal.getStreamVolumeLimit(carStream);
-                int max;
-                int min;
-                if (volumeMinMax == null) {
+                Integer volumeMax = mHal.getStreamMaxVolume(carStream);
+                int max = volumeMax == null ? 0 : volumeMax;
+                if (max < 0) {
                     max = 0;
-                    min = 0;
-                } else {
-                    max = volumeMinMax.second >= 0 ? volumeMinMax.second : 0;
-                    min = volumeMinMax.first >=0 ? volumeMinMax.first : 0;
                 }
                 // get default stream volume limit first.
                 mCarContextVolumeMax.put(i, max);
-                mCarContextVolumeMin.put(i, min);
             }
         }
 
@@ -574,13 +564,7 @@
 
         @Override
         public int getStreamMinVolume(int stream) {
-            synchronized (this) {
-                if (VolumeUtils.carContextToAndroidStream(mCurrentContext) == stream) {
-                    return mCarContextVolumeMin.get(mCurrentContext);
-                } else {
-                    return mCarContextVolumeMin.get(VolumeUtils.androidStreamToCarContext(stream));
-                }
-            }
+            return 0;  // Min value is always zero.
         }
 
         @Override
@@ -669,8 +653,6 @@
                 dumpVolumes(writer, mCurrentCarContextVolume);
                 writer.println("mCarContextVolumeMax:");
                 dumpVolumes(writer, mCarContextVolumeMax);
-                writer.println("mCarContextVolumeMin:");
-                dumpVolumes(writer, mCarContextVolumeMin);
                 writer.println("Number of volume controllers:" +
                         mVolumeControllers.getRegisteredCallbackCount());
             }
diff --git a/service/src/com/android/car/CarVolumeService.java b/service/src/com/android/car/CarVolumeService.java
index 74e7071..786c791 100644
--- a/service/src/com/android/car/CarVolumeService.java
+++ b/service/src/com/android/car/CarVolumeService.java
@@ -17,12 +17,11 @@
 package com.android.car;
 
 import android.content.Context;
+import android.hardware.vehicle.V2_0.VehicleAudioContextFlag;
 import android.media.AudioAttributes;
 import android.media.IVolumeController;
-import android.view.KeyEvent;
 
 import com.android.car.hal.AudioHalService;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioContextFlag;
 
 import java.io.PrintWriter;
 
@@ -38,7 +37,7 @@
     private static final String TAG = "CarVolumeService";
 
     public static int DEFAULT_CAR_AUDIO_CONTEXT =
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG;
+            VehicleAudioContextFlag.MUSIC_FLAG;
     private final Context mContext;
     private final AudioHalService mAudioHal;
     private final CarAudioService mAudioService;
diff --git a/service/src/com/android/car/DrivingStatePolicy.java b/service/src/com/android/car/DrivingStatePolicy.java
index 4716c1e..2da7021 100644
--- a/service/src/com/android/car/DrivingStatePolicy.java
+++ b/service/src/com/android/car/DrivingStatePolicy.java
@@ -16,7 +16,6 @@
 
 package com.android.car;
 
-import android.car.Car;
 import android.car.hardware.CarSensorEvent;
 import android.car.hardware.CarSensorManager;
 import android.car.hardware.ICarSensorEventListener;
@@ -37,7 +36,7 @@
 
     private final Context mContext;
     private CarSensorService mSensorService;
-    private int mDringState = CarSensorEvent.DRIVE_STATUS_FULLY_RESTRICTED;
+    private int mDrivingState = CarSensorEvent.DRIVE_STATUS_FULLY_RESTRICTED;
     private SensorListener mSensorListener;
     private boolean mIsReady = false;
     private boolean mStarted = false;
@@ -54,8 +53,9 @@
         }
     };
 
-    public DrivingStatePolicy(Context context) {
+    public DrivingStatePolicy(Context context, CarSensorService sensorService) {
         mContext = context;
+        mSensorService = sensorService;
     }
 
     @Override
@@ -65,8 +65,6 @@
 
     @Override
     public synchronized void onSensorServiceReady() {
-        mSensorService =
-                (CarSensorService) ICarImpl.getInstance(mContext).getCarService(Car.SENSOR_SERVICE);
         int sensorList[] = mSensorService.getSupportedSensors();
         boolean hasSpeed = subscribeIfSupportedLocked(sensorList,
                 CarSensorManager.SENSOR_TYPE_CAR_SPEED, CarSensorManager.SENSOR_RATE_FASTEST);
@@ -118,7 +116,7 @@
     @Override
     public synchronized boolean requestSensorStart(int sensorType, int rate) {
         mStarted = true;
-        dispatchCarSensorEvent(mSensorListener, createEvent(mDringState));
+        dispatchCarSensorEvent(mSensorListener, createEvent(mDrivingState));
         return true;
     }
 
@@ -146,9 +144,9 @@
             case CarSensorManager.SENSOR_TYPE_GEAR:
             case CarSensorManager.SENSOR_TYPE_CAR_SPEED:
                 int drivingState = recalcDrivingStateLocked();
-                if (drivingState != mDringState && mSensorListener != null) {
-                    mDringState = drivingState;
-                    dispatchCarSensorEvent(mSensorListener, createEvent(mDringState));
+                if (drivingState != mDrivingState && mSensorListener != null) {
+                    mDrivingState = drivingState;
+                    dispatchCarSensorEvent(mSensorListener, createEvent(mDrivingState));
                 }
                 break;
             default:
diff --git a/service/src/com/android/car/ICarImpl.java b/service/src/com/android/car/ICarImpl.java
index b6386af..e05efaa 100644
--- a/service/src/com/android/car/ICarImpl.java
+++ b/service/src/com/android/car/ICarImpl.java
@@ -22,6 +22,7 @@
 import android.car.cluster.renderer.IInstrumentClusterNavigation;
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.hardware.vehicle.V2_0.IVehicle;
 import android.os.IBinder;
 import android.util.Log;
 
@@ -40,14 +41,16 @@
 
     // load jni for all services here
     static {
-        System.loadLibrary("jni_car_service");
+        try {
+            System.loadLibrary("jni_car_service");
+        } catch (UnsatisfiedLinkError ex) {
+            // Unable to load native library when loaded from the testing framework.
+            Log.e(CarLog.TAG_SERVICE, "Failed to load jni_car_service library: " + ex.getMessage());
+        }
     }
 
-    @GuardedBy("ICarImpl.class")
-    private static ICarImpl sInstance = null;
-
     private final Context mContext;
-    private final VehicleHal mHal;
+    private VehicleHal mHal;
 
     private final SystemActivityMonitoringService mSystemActivityMonitoringService;
     private final CarPowerManagementService mCarPowerManagementService;
@@ -68,54 +71,42 @@
     private final SystemStateControllerService mSystemStateControllerService;
     private final CarVendorExtensionService mCarVendorExtensionService;
 
+    private final CarServiceBase[] mAllServices;
+
     /** Test only service. Populate it only when necessary. */
     @GuardedBy("this")
     private CarTestService mCarTestService;
-    private final CarServiceBase[] mAllServices;
 
-    public synchronized static ICarImpl getInstance(Context serviceContext) {
-        if (sInstance == null) {
-            sInstance = new ICarImpl(serviceContext);
-            sInstance.init();
-        }
-        return sInstance;
-    }
-
-    public synchronized static void releaseInstance() {
-        if (sInstance == null) {
-            return;
-        }
-        sInstance.release();
-        sInstance = null;
-    }
-
-    public ICarImpl(Context serviceContext) {
+    public ICarImpl(Context serviceContext, IVehicle vehicle, SystemInterface systemInterface) {
         mContext = serviceContext;
-        mHal = VehicleHal.getInstance();
+        mHal = new VehicleHal(vehicle);
         mSystemActivityMonitoringService = new SystemActivityMonitoringService(serviceContext);
-        mCarPowerManagementService = new CarPowerManagementService(serviceContext);
-        mCarSensorService = new CarSensorService(serviceContext);
+        mCarPowerManagementService = new CarPowerManagementService(
+                mHal.getPowerHal(), systemInterface);
+        mCarSensorService = new CarSensorService(serviceContext, mHal.getSensorHal());
         mCarPackageManagerService = new CarPackageManagerService(serviceContext, mCarSensorService,
                 mSystemActivityMonitoringService);
-        mCarInputService = new CarInputService(serviceContext);
+        mCarInputService = new CarInputService(serviceContext, mHal.getInputHal());
         mCarProjectionService = new CarProjectionService(serviceContext, mCarInputService);
         mGarageModeService = new GarageModeService(mContext, mCarPowerManagementService);
-        mCarInfoService = new CarInfoService(serviceContext);
+        mCarInfoService = new CarInfoService(serviceContext, mHal.getInfoHal());
         mAppFocusService = new AppFocusService(serviceContext, mSystemActivityMonitoringService);
-        mCarAudioService = new CarAudioService(serviceContext, mCarInputService);
-        mCarCabinService = new CarCabinService(serviceContext);
-        mCarHvacService = new CarHvacService(serviceContext);
-        mCarRadioService = new CarRadioService(serviceContext);
+        mCarAudioService = new CarAudioService(serviceContext, mHal.getAudioHal(),
+                mCarInputService);
+        mCarCabinService = new CarCabinService(serviceContext, mHal.getCabinHal());
+        mCarHvacService = new CarHvacService(serviceContext, mHal.getHvacHal());
+        mCarRadioService = new CarRadioService(serviceContext, mHal.getRadioHal());
         mCarCameraService = new CarCameraService(serviceContext);
-        mCarNightService = new CarNightService(serviceContext);
+        mCarNightService = new CarNightService(serviceContext, mCarSensorService);
         mInstrumentClusterService = new InstrumentClusterService(serviceContext,
                 mAppFocusService, mCarInputService);
         mSystemStateControllerService = new SystemStateControllerService(serviceContext,
                 mCarPowerManagementService, mCarAudioService, this);
-        mCarVendorExtensionService = new CarVendorExtensionService(serviceContext);
+        mCarVendorExtensionService = new CarVendorExtensionService(serviceContext,
+                mHal.getVendorExtensionHal());
 
         // Be careful with order. Service depending on other service should be inited later.
-        mAllServices = new CarServiceBase[] {
+        mAllServices = new CarServiceBase[]{
                 mSystemActivityMonitoringService,
                 mCarPowerManagementService,
                 mCarSensorService,
@@ -134,43 +125,22 @@
                 mCarProjectionService,
                 mSystemStateControllerService,
                 mCarVendorExtensionService
-                };
+        };
     }
 
-    private void init() {
+    public void init() {
+        mHal.init();
         for (CarServiceBase service: mAllServices) {
             service.init();
         }
     }
 
-    private void release() {
+    public void release() {
         // release done in opposite order from init
         for (int i = mAllServices.length - 1; i >= 0; i--) {
             mAllServices[i].release();
         }
-        VehicleHal.releaseInstance();
-    }
-
-    /** Only for CarTestService */
-    void startMocking() {
-        reinitServices();
-    }
-
-    /** Only for CarTestService */
-    void stopMocking() {
-        reinitServices();
-    }
-
-    /** Reset all services when starting / stopping vehicle hal mocking */
-    private void reinitServices() {
-        for (int i = mAllServices.length - 1; i >= 0; i--) {
-            mAllServices[i].release();
-        }
-        VehicleHal.getInstance().release();
-        VehicleHal.getInstance().init();
-        for (CarServiceBase service: mAllServices) {
-            service.init();
-        }
+        mHal.release();
     }
 
     @Override
@@ -210,7 +180,7 @@
                 assertVendorExtensionPermission(mContext);
                 return mCarVendorExtensionService;
             case Car.TEST_SERVICE: {
-                assertVehicleHalMockPermission(mContext);
+                assertPermission(mContext, Car.PERMISSION_CAR_TEST_SERVICE);
                 synchronized (this) {
                     if (mCarTestService == null) {
                         mCarTestService = new CarTestService(mContext, this);
@@ -226,11 +196,7 @@
 
     @Override
     public int getCarConnectionType() {
-        if (!isInMocking()) {
-            return Car.CONNECTION_TYPE_EMBEDDED;
-        } else {
-            return Car.CONNECTION_TYPE_EMBEDDED_MOCKING;
-        }
+        return Car.CONNECTION_TYPE_EMBEDDED;
     }
 
     public CarServiceBase getCarInternalService(String serviceName) {
@@ -246,17 +212,6 @@
         }
     }
 
-    /**
-     * Whether mocking underlying HAL or not.
-     * @return
-     */
-    public synchronized boolean isInMocking() {
-        if (mCarTestService == null) {
-            return false;
-        }
-        return mCarTestService.isInMocking();
-    }
-
     public static void assertVehicleHalMockPermission(Context context) {
         assertPermission(context, Car.PERMISSION_MOCK_VEHICLE_HAL);
     }
@@ -300,10 +255,11 @@
         for (CarServiceBase service: mAllServices) {
             service.dump(writer);
         }
-        CarTestService testService = mCarTestService;
-        if (testService != null) {
-            testService.dump(writer);
+        if (mCarTestService != null) {
+            mCarTestService.dump(writer);
         }
+        writer.println("*Dump Vehicle HAL*");
+        mHal.dump(writer);
     }
 
     void execShellCmd(String[] args, PrintWriter writer) {
diff --git a/service/src/com/android/car/SystemInterface.java b/service/src/com/android/car/SystemInterface.java
new file mode 100644
index 0000000..6311d80
--- /dev/null
+++ b/service/src/com/android/car/SystemInterface.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2016 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.content.Context;
+import android.hardware.display.DisplayManager;
+import android.os.PowerManager;
+import android.os.PowerManager.WakeLock;
+import android.os.SystemClock;
+import android.util.Log;
+import android.view.Display;
+
+/**
+ * Interface to abstract all system interaction.
+ */
+public abstract class SystemInterface {
+    public abstract void setDisplayState(boolean on);
+    public abstract void releaseAllWakeLocks();
+    public abstract void shutdown();
+    public abstract void enterDeepSleep(int wakeupTimeSec);
+    public abstract void switchToPartialWakeLock();
+    public abstract void switchToFullWakeLock();
+    public abstract void startDisplayStateMonitoring(CarPowerManagementService service);
+    public abstract void stopDisplayStateMonitoring();
+    public abstract boolean isSystemSupportingDeepSleep();
+    public abstract boolean isWakeupCausedByTimer();
+
+
+    public static SystemInterface getDefault(Context context) {
+        return new SystemInterfaceImpl(context);
+    }
+
+    private static class SystemInterfaceImpl extends SystemInterface {
+        private final PowerManager mPowerManager;
+        private final DisplayManager mDisplayManager;
+        private final WakeLock mFullWakeLock;
+        private final WakeLock mPartialWakeLock;
+        private final DisplayStateListener mDisplayListener;
+        private CarPowerManagementService mService;
+        private boolean mDisplayStateSet;
+
+        private SystemInterfaceImpl(Context context) {
+            mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
+            mDisplayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
+            mFullWakeLock = mPowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK,
+                    CarLog.TAG_POWER);
+            mPartialWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
+                    CarLog.TAG_POWER);
+            mDisplayListener = new DisplayStateListener();
+        }
+
+        @Override
+        public void startDisplayStateMonitoring(CarPowerManagementService service) {
+            synchronized (this) {
+                mService = service;
+                mDisplayStateSet = isMainDisplayOn();
+            }
+            mDisplayManager.registerDisplayListener(mDisplayListener, service.getHandler());
+        }
+
+        @Override
+        public void stopDisplayStateMonitoring() {
+            mDisplayManager.unregisterDisplayListener(mDisplayListener);
+        }
+
+        @Override
+        public void setDisplayState(boolean on) {
+            synchronized (this) {
+                mDisplayStateSet = on;
+            }
+            if (on) {
+                switchToFullWakeLock();
+                Log.i(CarLog.TAG_POWER, "on display");
+                mPowerManager.wakeUp(SystemClock.uptimeMillis());
+            } else {
+                switchToPartialWakeLock();
+                Log.i(CarLog.TAG_POWER, "off display");
+                mPowerManager.goToSleep(SystemClock.uptimeMillis());
+            }
+        }
+
+        private boolean isMainDisplayOn() {
+            Display disp = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY);
+            return disp.getState() == Display.STATE_ON;
+        }
+
+        @Override
+        public void shutdown() {
+            mPowerManager.shutdown(false /* no confirm*/, null, true /* true */);
+        }
+
+        @Override
+        public void enterDeepSleep(int wakeupTimeSec) {
+            //TODO set wake up time, bug: 32061842
+            mPowerManager.goToSleep(SystemClock.uptimeMillis(),
+                    PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN,
+                    PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
+        }
+
+        @Override
+        public boolean isSystemSupportingDeepSleep() {
+            //TODO should return by checking some kernel suspend control sysfs, bug: 32061842
+            return false;
+        }
+
+        @Override
+        public void switchToPartialWakeLock() {
+            if (!mPartialWakeLock.isHeld()) {
+                mPartialWakeLock.acquire();
+            }
+            if (mFullWakeLock.isHeld()) {
+                mFullWakeLock.release();
+            }
+        }
+
+        @Override
+        public void switchToFullWakeLock() {
+            if (!mFullWakeLock.isHeld()) {
+                mFullWakeLock.acquire();
+            }
+            if (mPartialWakeLock.isHeld()) {
+                mPartialWakeLock.release();
+            }
+        }
+
+        @Override
+        public void releaseAllWakeLocks() {
+            if (mPartialWakeLock.isHeld()) {
+                mPartialWakeLock.release();
+            }
+            if (mFullWakeLock.isHeld()) {
+                mFullWakeLock.release();
+            }
+        }
+
+        @Override
+        public boolean isWakeupCausedByTimer() {
+            //TODO bug: 32061842, check wake up reason and do necessary operation information should
+            // come from kernel. it can be either power on or wake up for maintenance
+            // power on will involve GPIO trigger from power controller
+            // its own wakeup will involve timer expiration.
+            return false;
+        }
+
+        private void handleMainDisplayChanged() {
+            boolean isOn = isMainDisplayOn();
+            CarPowerManagementService service;
+            synchronized (this) {
+                if (mDisplayStateSet == isOn) { // same as what is set
+                    return;
+                }
+                service = mService;
+            }
+            service.handleMainDisplayChanged(isOn);
+        }
+
+        private class DisplayStateListener implements DisplayManager.DisplayListener {
+
+            @Override
+            public void onDisplayAdded(int displayId) {
+                //ignore
+            }
+
+            @Override
+            public void onDisplayChanged(int displayId) {
+                if (displayId == Display.DEFAULT_DISPLAY) {
+                    handleMainDisplayChanged();
+                }
+            }
+
+            @Override
+            public void onDisplayRemoved(int displayId) {
+                //ignore
+            }
+        }
+    }
+}
diff --git a/service/src/com/android/car/SystemStateControllerService.java b/service/src/com/android/car/SystemStateControllerService.java
index 5746300..63821c5 100644
--- a/service/src/com/android/car/SystemStateControllerService.java
+++ b/service/src/com/android/car/SystemStateControllerService.java
@@ -33,9 +33,9 @@
     private final boolean mLockWhenMuting;
 
     public SystemStateControllerService(Context context,
-            CarPowerManagementService carPowerManagementSercvice,
+            CarPowerManagementService carPowerManagementService,
             CarAudioService carAudioService, ICarImpl carImpl) {
-        mCarPowerManagementService = carPowerManagementSercvice;
+        mCarPowerManagementService = carPowerManagementService;
         mCarAudioService = carAudioService;
         mICarImpl = carImpl;
         Resources res = context.getResources();
@@ -51,16 +51,12 @@
     @Override
     public void onPowerOn(boolean displayOn) {
         if (displayOn) {
-            if (!mICarImpl.isInMocking()) {
-                Log.i(CarLog.TAG_SYS, "Media unmute");
-                mCarAudioService.unMuteMedia();
-            }
+            Log.i(CarLog.TAG_SYS, "Media unmute");
+            mCarAudioService.unMuteMedia();
         } else {
-            if (!mICarImpl.isInMocking()) { // do not do this in mocking as it can affect test.
-                Log.i(CarLog.TAG_SYS, "Media mute");
-                mCarAudioService.muteMediaWithLock(mLockWhenMuting);
-                //TODO store last context and resume or silence radio on display on. bug: 32096079
-            }
+            Log.i(CarLog.TAG_SYS, "Media mute");
+            mCarAudioService.muteMediaWithLock(mLockWhenMuting);
+            //TODO store last context and resume or silence radio on display on. bug: 32096079
         }
     }
 
diff --git a/service/src/com/android/car/VolumeUtils.java b/service/src/com/android/car/VolumeUtils.java
index fac3350..c2a1a7a 100644
--- a/service/src/com/android/car/VolumeUtils.java
+++ b/service/src/com/android/car/VolumeUtils.java
@@ -17,16 +17,13 @@
 package com.android.car;
 
 import android.car.settings.CarSettings;
+import android.hardware.vehicle.V2_0.VehicleAudioContextFlag;
 import android.media.AudioAttributes;
 import android.media.AudioManager;
 import android.util.Log;
 import android.util.SparseArray;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioContextFlag;
-
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
 
 public class VolumeUtils {
     private static final String TAG = "VolumeUtils";
@@ -42,50 +39,50 @@
     };
 
     public static final int[] CAR_AUDIO_CONTEXT = {
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG,
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG,
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG,
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CALL_FLAG,
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG,
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG,
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG,
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG,
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CD_ROM_FLAG,
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_AUX_AUDIO_FLAG,
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG,
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG
+            VehicleAudioContextFlag.MUSIC_FLAG,
+            VehicleAudioContextFlag.NAVIGATION_FLAG,
+            VehicleAudioContextFlag.VOICE_COMMAND_FLAG,
+            VehicleAudioContextFlag.CALL_FLAG,
+            VehicleAudioContextFlag.ALARM_FLAG,
+            VehicleAudioContextFlag.NOTIFICATION_FLAG,
+            VehicleAudioContextFlag.UNKNOWN_FLAG,
+            VehicleAudioContextFlag.SAFETY_ALERT_FLAG,
+            VehicleAudioContextFlag.CD_ROM_FLAG,
+            VehicleAudioContextFlag.AUX_AUDIO_FLAG,
+            VehicleAudioContextFlag.SYSTEM_SOUND_FLAG,
+            VehicleAudioContextFlag.RADIO_FLAG
     };
 
     public static final SparseArray<String> CAR_AUDIO_CONTEXT_SETTINGS = new SparseArray<>();
     static {
-        CAR_AUDIO_CONTEXT_SETTINGS.put(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG,
+        CAR_AUDIO_CONTEXT_SETTINGS.put(VehicleAudioContextFlag.UNKNOWN_FLAG,
                 CarSettings.Global.KEY_VOLUME_MUSIC);
-        CAR_AUDIO_CONTEXT_SETTINGS.put(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG,
+        CAR_AUDIO_CONTEXT_SETTINGS.put(VehicleAudioContextFlag.MUSIC_FLAG,
                 CarSettings.Global.KEY_VOLUME_MUSIC);
         CAR_AUDIO_CONTEXT_SETTINGS.put(
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG,
+                VehicleAudioContextFlag.NAVIGATION_FLAG,
                 CarSettings.Global.KEY_VOLUME_NAVIGATION);
         CAR_AUDIO_CONTEXT_SETTINGS.put(
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG,
+                VehicleAudioContextFlag.VOICE_COMMAND_FLAG,
                 CarSettings.Global.KEY_VOLUME_VOICE_COMMAND);
-        CAR_AUDIO_CONTEXT_SETTINGS.put(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CALL_FLAG,
+        CAR_AUDIO_CONTEXT_SETTINGS.put(VehicleAudioContextFlag.CALL_FLAG,
                 CarSettings.Global.KEY_VOLUME_CALL);
-        CAR_AUDIO_CONTEXT_SETTINGS.put(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG,
+        CAR_AUDIO_CONTEXT_SETTINGS.put(VehicleAudioContextFlag.ALARM_FLAG,
                 CarSettings.Global.KEY_VOLUME_ALARM);
         CAR_AUDIO_CONTEXT_SETTINGS.put(
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG,
+                VehicleAudioContextFlag.NOTIFICATION_FLAG,
                 CarSettings.Global.KEY_VOLUME_NOTIFICATION);
         CAR_AUDIO_CONTEXT_SETTINGS.put(
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG,
+                VehicleAudioContextFlag.SAFETY_ALERT_FLAG,
                 CarSettings.Global.KEY_VOLUME_SAFETY_ALERT);
-        CAR_AUDIO_CONTEXT_SETTINGS.put(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CD_ROM_FLAG,
+        CAR_AUDIO_CONTEXT_SETTINGS.put(VehicleAudioContextFlag.CD_ROM_FLAG,
                 CarSettings.Global.KEY_VOLUME_CD_ROM);
-        CAR_AUDIO_CONTEXT_SETTINGS.put(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_AUX_AUDIO_FLAG,
+        CAR_AUDIO_CONTEXT_SETTINGS.put(VehicleAudioContextFlag.AUX_AUDIO_FLAG,
                 CarSettings.Global.KEY_VOLUME_AUX);
         CAR_AUDIO_CONTEXT_SETTINGS.put(
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG,
+                VehicleAudioContextFlag.SYSTEM_SOUND_FLAG,
                 CarSettings.Global.KEY_VOLUME_SYSTEM_SOUND);
-        CAR_AUDIO_CONTEXT_SETTINGS.put(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG,
+        CAR_AUDIO_CONTEXT_SETTINGS.put(VehicleAudioContextFlag.RADIO_FLAG,
                 CarSettings.Global.KEY_VOLUME_RADIO);
     }
 
@@ -105,35 +102,35 @@
     public static int androidStreamToCarContext(int logicalAndroidStream) {
         switch (logicalAndroidStream) {
             case AudioManager.STREAM_VOICE_CALL:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CALL_FLAG;
+                return VehicleAudioContextFlag.CALL_FLAG;
             case AudioManager.STREAM_SYSTEM:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG;
+                return VehicleAudioContextFlag.SYSTEM_SOUND_FLAG;
             case AudioManager.STREAM_RING:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG;
+                return VehicleAudioContextFlag.NOTIFICATION_FLAG;
             case AudioManager.STREAM_MUSIC:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG;
+                return VehicleAudioContextFlag.MUSIC_FLAG;
             case AudioManager.STREAM_ALARM:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG;
+                return VehicleAudioContextFlag.ALARM_FLAG;
             case AudioManager.STREAM_NOTIFICATION:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG;
+                return VehicleAudioContextFlag.NOTIFICATION_FLAG;
             case AudioManager.STREAM_DTMF:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG;
+                return VehicleAudioContextFlag.SYSTEM_SOUND_FLAG;
             default:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG;
+                return VehicleAudioContextFlag.UNKNOWN_FLAG;
         }
     }
 
     public static int carContextToAndroidStream(int carContext) {
         switch (carContext) {
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CALL_FLAG:
+            case VehicleAudioContextFlag.CALL_FLAG:
                 return AudioManager.STREAM_VOICE_CALL;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG:
+            case VehicleAudioContextFlag.SYSTEM_SOUND_FLAG:
                 return AudioManager.STREAM_SYSTEM;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG:
+            case VehicleAudioContextFlag.NOTIFICATION_FLAG:
                 return AudioManager.STREAM_NOTIFICATION;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG:
+            case VehicleAudioContextFlag.MUSIC_FLAG:
                 return AudioManager.STREAM_MUSIC;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG:
+            case VehicleAudioContextFlag.ALARM_FLAG:
                 return AudioManager.STREAM_ALARM;
             default:
                 return AudioManager.STREAM_MUSIC;
diff --git a/service/src/com/android/car/hal/AudioHalService.java b/service/src/com/android/car/hal/AudioHalService.java
index cb73454..b3f8880 100644
--- a/service/src/com/android/car/hal/AudioHalService.java
+++ b/service/src/com/android/car/hal/AudioHalService.java
@@ -15,95 +15,89 @@
  */
 package com.android.car.hal;
 
+import static android.hardware.vehicle.V2_0.VehicleProperty.AUDIO_EXT_ROUTING_HINT;
+import static android.hardware.vehicle.V2_0.VehicleProperty.AUDIO_FOCUS;
+import static android.hardware.vehicle.V2_0.VehicleProperty.AUDIO_HW_VARIANT;
+import static android.hardware.vehicle.V2_0.VehicleProperty.AUDIO_ROUTING_POLICY;
+import static android.hardware.vehicle.V2_0.VehicleProperty.AUDIO_VOLUME;
+import static android.hardware.vehicle.V2_0.VehicleProperty.AUDIO_VOLUME_LIMIT;
+import static com.android.car.CarServiceUtils.toIntArray;
+import static java.lang.Integer.toHexString;
+
+import android.annotation.Nullable;
 import android.car.VehicleZoneUtil;
 import android.car.media.CarAudioManager;
-import android.os.ServiceSpecificException;
+import android.hardware.vehicle.V2_0.VehicleAudioContextFlag;
+import android.hardware.vehicle.V2_0.VehicleAudioExtFocusFlag;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusIndex;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusRequest;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusState;
+import android.hardware.vehicle.V2_0.VehicleAudioHwVariantConfigFlag;
+import android.hardware.vehicle.V2_0.VehicleAudioRoutingPolicyIndex;
+import android.hardware.vehicle.V2_0.VehicleAudioVolumeCapabilityFlag;
+import android.hardware.vehicle.V2_0.VehicleAudioVolumeIndex;
+import android.hardware.vehicle.V2_0.VehicleAudioVolumeLimitIndex;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.text.TextUtils;
 import android.util.Log;
-import android.util.Pair;
 
 import com.android.car.AudioRoutingPolicy;
 import com.android.car.CarAudioAttributesUtil;
 import com.android.car.CarLog;
-import com.android.car.vehiclenetwork.VehicleNetwork;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioContextFlag;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioExtFocusFlag;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusIndex;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusRequest;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusState;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioHwVariantConfigFlag;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioRoutingPolicyIndex;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioStreamState;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioStreamStateIndex;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioVolumeCapabilityFlag;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioVolumeIndex;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioVolumeLimitIndex;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfigs;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
 
 import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashMap;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 public class AudioHalService extends HalServiceBase {
     public static final int VEHICLE_AUDIO_FOCUS_REQUEST_INVALID = -1;
     public static final int VEHICLE_AUDIO_FOCUS_REQUEST_GAIN =
-            VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN;
+            VehicleAudioFocusRequest.REQUEST_GAIN;
     public static final int VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT =
-            VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT;
+            VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT;
     public static final int VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK =
-            VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK;
+            VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT_MAY_DUCK;
     public static final int VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_NO_DUCK =
-            VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_NO_DUCK;
+            VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT_NO_DUCK;
     public static final int VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE =
-            VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE;
-
-    public static String audioFocusRequestToString(int request) {
-        return VehicleAudioFocusRequest.enumToString(request);
-    }
+            VehicleAudioFocusRequest.REQUEST_RELEASE;
 
     public static final int VEHICLE_AUDIO_FOCUS_STATE_INVALID = -1;
     public static final int VEHICLE_AUDIO_FOCUS_STATE_GAIN =
-            VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN;
+            VehicleAudioFocusState.STATE_GAIN;
     public static final int VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT =
-            VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT;
+            VehicleAudioFocusState.STATE_GAIN_TRANSIENT;
     public static final int VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_CAN_DUCK =
-            VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_CAN_DUCK;
+            VehicleAudioFocusState.STATE_LOSS_TRANSIENT_CAN_DUCK;
     public static final int VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT =
-            VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT;
+            VehicleAudioFocusState.STATE_LOSS_TRANSIENT;
     public static final int VEHICLE_AUDIO_FOCUS_STATE_LOSS =
-            VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS;
+            VehicleAudioFocusState.STATE_LOSS;
     public static final int VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_EXLCUSIVE =
-            VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_EXLCUSIVE;
+            VehicleAudioFocusState.STATE_LOSS_TRANSIENT_EXLCUSIVE;
 
-    public static String audioFocusStateToString(int state) {
-        return VehicleAudioFocusState.enumToString(state);
-    }
-
-    public static final int VEHICLE_AUDIO_STREAM_STATE_STOPPED =
-            VehicleAudioStreamState.VEHICLE_AUDIO_STREAM_STATE_STOPPED;
-    public static final int VEHICLE_AUDIO_STREAM_STATE_STARTED =
-            VehicleAudioStreamState.VEHICLE_AUDIO_STREAM_STATE_STARTED;
-
-    public static String audioStreamStateToString(int state) {
-        return VehicleAudioStreamState.enumToString(state);
-    }
+    // TODO(pavelm): we don't have internal properties anymore
+//    public static final int VEHICLE_AUDIO_STREAM_STATE_STOPPED =
+//            VehicleAudioStreamState.VEHICLE_AUDIO_STREAM_STATE_STOPPED;
+//    public static final int VEHICLE_AUDIO_STREAM_STATE_STARTED =
+//            VehicleAudioStreamState.VEHICLE_AUDIO_STREAM_STATE_STARTED;
 
     public static final int VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG =
-            VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG;
+            VehicleAudioExtFocusFlag.NONE_FLAG;
     public static final int VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG =
-            VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG;
+            VehicleAudioExtFocusFlag.PERMANENT_FLAG;
     public static final int VEHICLE_AUDIO_EXT_FOCUS_CAR_TRANSIENT_FLAG =
-            VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_TRANSIENT_FLAG;
+            VehicleAudioExtFocusFlag.TRANSIENT_FLAG;
     public static final int VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG =
-            VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG;
+            VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG;
     public static final int VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG =
-            VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG;
+            VehicleAudioExtFocusFlag.MUTE_MEDIA_FLAG;
 
     public static final int STREAM_NUM_DEFAULT = 0;
 
@@ -112,31 +106,31 @@
     public static final int FOCUS_STATE_ARRAY_INDEX_EXTERNAL_FOCUS = 2;
 
     public static final int AUDIO_CONTEXT_MUSIC_FLAG =
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG;
+            VehicleAudioContextFlag.MUSIC_FLAG;
     public static final int AUDIO_CONTEXT_NAVIGATION_FLAG =
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG;
+            VehicleAudioContextFlag.NAVIGATION_FLAG;
     public static final int AUDIO_CONTEXT_VOICE_COMMAND_FLAG =
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG;
+            VehicleAudioContextFlag.VOICE_COMMAND_FLAG;
     public static final int AUDIO_CONTEXT_CALL_FLAG =
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CALL_FLAG;
+            VehicleAudioContextFlag.CALL_FLAG;
     public static final int AUDIO_CONTEXT_ALARM_FLAG =
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG;
+            VehicleAudioContextFlag.ALARM_FLAG;
     public static final int AUDIO_CONTEXT_NOTIFICATION_FLAG =
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG;
+            VehicleAudioContextFlag.NOTIFICATION_FLAG;
     public static final int AUDIO_CONTEXT_UNKNOWN_FLAG =
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG;
+            VehicleAudioContextFlag.UNKNOWN_FLAG;
     public static final int AUDIO_CONTEXT_SAFETY_ALERT_FLAG =
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG;
+            VehicleAudioContextFlag.SAFETY_ALERT_FLAG;
     public static final int AUDIO_CONTEXT_RADIO_FLAG =
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG;
+            VehicleAudioContextFlag.RADIO_FLAG;
     public static final int AUDIO_CONTEXT_CD_ROM_FLAG =
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CD_ROM_FLAG;
+            VehicleAudioContextFlag.CD_ROM_FLAG;
     public static final int AUDIO_CONTEXT_AUX_AUDIO_FLAG =
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_AUX_AUDIO_FLAG;
+            VehicleAudioContextFlag.AUX_AUDIO_FLAG;
     public static final int AUDIO_CONTEXT_SYSTEM_SOUND_FLAG =
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG;
+            VehicleAudioContextFlag.SYSTEM_SOUND_FLAG;
     public static final int AUDIO_CONTEXT_EXT_SOURCE_FLAG =
-            VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_EXT_SOURCE_FLAG;
+            VehicleAudioContextFlag.EXT_SOURCE_FLAG;
 
     public interface AudioHalFocusListener {
         /**
@@ -193,60 +187,54 @@
     }
 
     public void setAudioRoutingPolicy(AudioRoutingPolicy policy) {
-        VehicleNetwork vn = mVehicleHal.getVehicleNetwork();
-        VehiclePropConfigs configs = vn.listProperties(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY);
-        if (configs == null) {
+        if (!mVehicleHal.isPropertySupported(VehicleProperty.AUDIO_ROUTING_POLICY)) {
             Log.w(CarLog.TAG_AUDIO,
-                    "Vehicle HAL did not implement VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY");
+                    "Vehicle HAL did not implement VehicleProperty.AUDIO_ROUTING_POLICY");
             return;
         }
         int[] policyToSet = new int[2];
         for (int i = 0; i < policy.getPhysicalStreamsCount(); i++) {
-            policyToSet[VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM] =
-                    i;
+            policyToSet[VehicleAudioRoutingPolicyIndex.STREAM] = i;
             int contexts = 0;
             for (int logicalStream : policy.getLogicalStreamsForPhysicalStream(i)) {
                 contexts |= logicalStreamToHalContextType(logicalStream);
             }
-            policyToSet[VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS]
-                    = contexts;
+            policyToSet[VehicleAudioRoutingPolicyIndex.CONTEXTS] = contexts;
             try {
-                vn.setIntVectorProperty(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY,
-                        policyToSet);
-            } catch (ServiceSpecificException e) {
-                Log.e(CarLog.TAG_AUDIO, "Cannot write to VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY", e);
+                mVehicleHal.set(AUDIO_ROUTING_POLICY).to(policyToSet);
+            } catch (PropertyTimeoutException e) {
+                Log.e(CarLog.TAG_AUDIO, "Cannot write to VehicleProperty.AUDIO_ROUTING_POLICY", e);
             }
         }
     }
 
     /**
-     * Returns the volume limits of a stream in the form <min, max>.
+     * Returns the volume limits of a stream. Returns null if max value wasn't defined for
+     * AUDIO_VOLUME property.
      */
-    public synchronized Pair<Integer, Integer> getStreamVolumeLimit(int stream) {
-        if (!isPropertySupportedLocked(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME)) {
-            throw new IllegalStateException("VEHICLE_PROPERTY_AUDIO_VOLUME not supported");
+    @Nullable
+    public synchronized Integer getStreamMaxVolume(int stream) {
+        VehiclePropConfig config = mProperties.get(VehicleProperty.AUDIO_VOLUME);
+        if (config == null) {
+            throw new IllegalStateException("VehicleProperty.AUDIO_VOLUME not supported");
         }
         int supportedContext = getSupportedAudioVolumeContexts();
-        VehiclePropConfig config = mProperties.get(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME);
-        List<Integer> maxs = config.getInt32MaxsList();
-        List<Integer> mins = config.getInt32MinsList();
 
-        if (maxs.size() != mins.size()) {
-            Log.e(CarLog.TAG_AUDIO, "Invalid volume prop config");
-            return null;
+        int MAX_VALUES_FIRST_ELEMENT_INDEX = 4;
+        ArrayList<Integer> maxValues = new ArrayList<>();
+        for (int i = MAX_VALUES_FIRST_ELEMENT_INDEX; i < config.configArray.size(); i++) {
+            maxValues.add(config.configArray.get(i));
         }
 
-        Pair<Integer, Integer> result = null;
+        Integer result = null;
         if (supportedContext != 0) {
             int index = VehicleZoneUtil.zoneToIndex(supportedContext, stream);
-            if (index < maxs.size()) {
-                result = new Pair<>(mins.get(index), maxs.get(index));
+            if (index < maxValues.size()) {
+                result = maxValues.get(index);
             }
         } else {
-            if (stream < maxs.size()) {
-                result = new Pair<>(mins.get(stream), maxs.get(stream));
+            if (stream < maxValues.size()) {
+                result = maxValues.get(stream);
             }
         }
 
@@ -268,25 +256,25 @@
     public static int logicalStreamWithExtTypeToHalContextType(int logicalStream, String extType) {
         switch (logicalStream) {
             case CarAudioManager.CAR_AUDIO_USAGE_RADIO:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG;
+                return VehicleAudioContextFlag.RADIO_FLAG;
             case CarAudioManager.CAR_AUDIO_USAGE_VOICE_CALL:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CALL_FLAG;
+                return VehicleAudioContextFlag.CALL_FLAG;
             case CarAudioManager.CAR_AUDIO_USAGE_MUSIC:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG;
+                return VehicleAudioContextFlag.MUSIC_FLAG;
             case CarAudioManager.CAR_AUDIO_USAGE_NAVIGATION_GUIDANCE:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG;
+                return VehicleAudioContextFlag.NAVIGATION_FLAG;
             case CarAudioManager.CAR_AUDIO_USAGE_VOICE_COMMAND:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG;
+                return VehicleAudioContextFlag.VOICE_COMMAND_FLAG;
             case CarAudioManager.CAR_AUDIO_USAGE_ALARM:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG;
+                return VehicleAudioContextFlag.ALARM_FLAG;
             case CarAudioManager.CAR_AUDIO_USAGE_NOTIFICATION:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG;
+                return VehicleAudioContextFlag.NOTIFICATION_FLAG;
             case CarAudioManager.CAR_AUDIO_USAGE_SYSTEM_SAFETY_ALERT:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG;
+                return VehicleAudioContextFlag.SAFETY_ALERT_FLAG;
             case CarAudioManager.CAR_AUDIO_USAGE_SYSTEM_SOUND:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG;
+                return VehicleAudioContextFlag.SYSTEM_SOUND_FLAG;
             case CarAudioManager.CAR_AUDIO_USAGE_DEFAULT:
-                return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG;
+                return VehicleAudioContextFlag.UNKNOWN_FLAG;
             case CarAudioManager.CAR_AUDIO_USAGE_EXTERNAL_AUDIO_SOURCE:
                 if (extType != null) {
                     switch (extType) {
@@ -297,13 +285,13 @@
                         return AudioHalService.AUDIO_CONTEXT_AUX_AUDIO_FLAG;
                     default:
                         if (extType.startsWith("RADIO_")) {
-                            return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG;
+                            return VehicleAudioContextFlag.RADIO_FLAG;
                         } else {
                             return AudioHalService.AUDIO_CONTEXT_EXT_SOURCE_FLAG;
                         }
                     }
                 } else { // no external source specified. fall back to radio
-                    return VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG;
+                    return VehicleAudioContextFlag.RADIO_FLAG;
                 }
             case CarAudioAttributesUtil.CAR_AUDIO_USAGE_CARSERVICE_BOTTOM:
             case CarAudioAttributesUtil.CAR_AUDIO_USAGE_CARSERVICE_CAR_PROXY:
@@ -321,31 +309,31 @@
      */
     public static int carContextToCarUsage(int carContext) {
         switch (carContext) {
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG:
+            case VehicleAudioContextFlag.MUSIC_FLAG:
                 return CarAudioManager.CAR_AUDIO_USAGE_MUSIC;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG:
+            case VehicleAudioContextFlag.NAVIGATION_FLAG:
                 return CarAudioManager.CAR_AUDIO_USAGE_NAVIGATION_GUIDANCE;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG:
+            case VehicleAudioContextFlag.ALARM_FLAG:
                 return CarAudioManager.CAR_AUDIO_USAGE_ALARM;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG:
+            case VehicleAudioContextFlag.VOICE_COMMAND_FLAG:
                 return CarAudioManager.CAR_AUDIO_USAGE_VOICE_COMMAND;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_AUX_AUDIO_FLAG:
+            case VehicleAudioContextFlag.AUX_AUDIO_FLAG:
                 return CarAudioManager.CAR_AUDIO_USAGE_EXTERNAL_AUDIO_SOURCE;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CALL_FLAG:
+            case VehicleAudioContextFlag.CALL_FLAG:
                 return CarAudioManager.CAR_AUDIO_USAGE_VOICE_CALL;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CD_ROM_FLAG:
+            case VehicleAudioContextFlag.CD_ROM_FLAG:
                 return CarAudioManager.CAR_AUDIO_USAGE_EXTERNAL_AUDIO_SOURCE;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG:
+            case VehicleAudioContextFlag.NOTIFICATION_FLAG:
                 return CarAudioManager.CAR_AUDIO_USAGE_NOTIFICATION;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG:
+            case VehicleAudioContextFlag.RADIO_FLAG:
                 return CarAudioManager.CAR_AUDIO_USAGE_RADIO;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG:
+            case VehicleAudioContextFlag.SAFETY_ALERT_FLAG:
                 return CarAudioManager.CAR_AUDIO_USAGE_SYSTEM_SAFETY_ALERT;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG:
+            case VehicleAudioContextFlag.SYSTEM_SOUND_FLAG:
                 return CarAudioManager.CAR_AUDIO_USAGE_SYSTEM_SOUND;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG:
+            case VehicleAudioContextFlag.UNKNOWN_FLAG:
                 return CarAudioManager.CAR_AUDIO_USAGE_DEFAULT;
-            case VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_EXT_SOURCE_FLAG:
+            case VehicleAudioContextFlag.EXT_SOURCE_FLAG:
                 return CarAudioManager.CAR_AUDIO_USAGE_EXTERNAL_AUDIO_SOURCE;
             default:
                 Log.w(CarLog.TAG_AUDIO, "Unknown car context:" + carContext);
@@ -360,10 +348,9 @@
     public void requestAudioFocusChange(int request, int streams, int extFocus, int audioContexts) {
         int[] payload = { request, streams, extFocus, audioContexts };
         try {
-            mVehicleHal.getVehicleNetwork().setIntVectorProperty(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, payload);
-        } catch (ServiceSpecificException e) {
-            Log.e(CarLog.TAG_AUDIO, "Cannot write to VEHICLE_PROPERTY_AUDIO_FOCUS", e);
+            mVehicleHal.set(AUDIO_FOCUS).to(payload);
+        } catch (PropertyTimeoutException e) {
+            Log.e(CarLog.TAG_AUDIO, "Cannot write to VehicleProperty.AUDIO_FOCUS", e);
             // focus timeout will reset it anyway
         }
     }
@@ -371,36 +358,35 @@
     public void setStreamVolume(int streamType, int index) {
         int[] payload = {streamType, index, 0};
         try {
-            mVehicleHal.getVehicleNetwork().setIntVectorProperty(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME, payload);
-        } catch (ServiceSpecificException e) {
-            Log.e(CarLog.TAG_AUDIO, "Cannot write to VEHICLE_PROPERTY_AUDIO_VOLUME", e);
+            mVehicleHal.set(VehicleProperty.AUDIO_VOLUME).to(payload);
+        } catch (PropertyTimeoutException e) {
+            Log.e(CarLog.TAG_AUDIO, "Cannot write to VehicleProperty.AUDIO_VOLUME", e);
             //TODO should reset volume, bug: 32096870
         }
     }
 
     public int getStreamVolume(int stream) {
         int[] volume = {stream, 0, 0};
-        VehiclePropValue streamVolume =
-                VehiclePropValueUtil.createIntVectorValue(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME, volume, 0);
-        VehiclePropValue value;
+        VehiclePropValue requestedStreamVolume = new VehiclePropValue();
+        requestedStreamVolume.prop = VehicleProperty.AUDIO_VOLUME;
+        requestedStreamVolume.value.int32Values.addAll(Arrays.asList(stream, 0 , 0));
+        VehiclePropValue propValue;
         try {
-            value = mVehicleHal.getVehicleNetwork().getProperty(streamVolume);
-        }  catch (ServiceSpecificException e) {
-            Log.e(CarLog.TAG_AUDIO, "AUDIO_VOLUME not ready", e);
+            propValue = mVehicleHal.get(requestedStreamVolume);
+        }  catch (PropertyTimeoutException e) {
+            Log.e(CarLog.TAG_AUDIO, "VehicleProperty.AUDIO_VOLUME not ready", e);
             return 0;
         }
 
-        if (value.getInt32ValuesCount() != 3) {
+        if (propValue.value.int32Values.size() != 3) {
             Log.e(CarLog.TAG_AUDIO, "returned value not valid");
             throw new IllegalStateException("Invalid preset returned from service: "
-                    + value.getInt32ValuesList());
+                    + Arrays.toString(propValue.value.int32Values.toArray()));
         }
 
-        int retStreamNum = value.getInt32Values(0);
-        int retVolume = value.getInt32Values(1);
-        int retVolumeState = value.getInt32Values(2);
+        int retStreamNum = propValue.value.int32Values.get(0);
+        int retVolume = propValue.value.int32Values.get(1);
+        int retVolumeState = propValue.value.int32Values.get(2);
 
         if (retStreamNum != stream) {
             Log.e(CarLog.TAG_AUDIO, "Stream number is not the same: "
@@ -415,31 +401,28 @@
     }
 
     public synchronized boolean isRadioExternal() {
-        VehiclePropConfig config = mProperties.get(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT);
+        VehiclePropConfig config = mProperties.get(VehicleProperty.AUDIO_HW_VARIANT);
         if (config == null) {
             return true;
         }
-        return (config.getConfigArray(0) &
-                VehicleAudioHwVariantConfigFlag.VEHICLE_AUDIO_HW_VARIANT_FLAG_INTERNAL_RADIO_FLAG)
-                == 0;
+        return (config.configArray.get(0)
+                & VehicleAudioHwVariantConfigFlag.INTERNAL_RADIO_FLAG) == 0;
     }
 
     public synchronized boolean isFocusSupported() {
-        return isPropertySupportedLocked(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS);
+        return isPropertySupportedLocked(AUDIO_FOCUS);
     }
 
     public synchronized boolean isAudioVolumeSupported() {
-        return isPropertySupportedLocked(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME);
+        return isPropertySupportedLocked(VehicleProperty.AUDIO_VOLUME);
     }
 
     public synchronized int getSupportedAudioVolumeContexts() {
-        if (!isPropertySupportedLocked(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME)) {
-            throw new IllegalStateException("VEHICLE_PROPERTY_AUDIO_VOLUME not supported");
+        if (!isPropertySupportedLocked(VehicleProperty.AUDIO_VOLUME)) {
+            throw new IllegalStateException("VehicleProperty.AUDIO_VOLUME not supported");
         }
-        VehiclePropConfig config = mProperties.get(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME);
-        return config.getConfigArray(0);
+        VehiclePropConfig config = mProperties.get(VehicleProperty.AUDIO_VOLUME);
+        return config.configArray.get(0);
     }
 
     /**
@@ -447,34 +430,32 @@
      * @return
      */
     public synchronized boolean isExternalAudioVolumePersistent() {
-        if (!isPropertySupportedLocked(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME)) {
-            throw new IllegalStateException("VEHICLE_PROPERTY_AUDIO_VOLUME not supported");
+        if (!isPropertySupportedLocked(VehicleProperty.AUDIO_VOLUME)) {
+            throw new IllegalStateException("VehicleProperty.AUDIO_VOLUME not supported");
         }
-        VehiclePropConfig config = mProperties.get(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME);
-        if (config.getConfigArray(0) == 0) { // physical streams only
+        VehiclePropConfig config = mProperties.get(VehicleProperty.AUDIO_VOLUME);
+        if (config.configArray.get(0) == 0) { // physical streams only
             return false;
         }
-        if ((config.getConfigArray(1) &
-                VehicleAudioVolumeCapabilityFlag.VEHICLE_AUDIO_VOLUME_CAPABILITY_PERSISTENT_STORAGE)
-                != 0) {
+        if ((config.configArray.get(1)
+                & VehicleAudioVolumeCapabilityFlag.PERSISTENT_STORAGE) != 0) {
             return true;
         }
         return false;
     }
 
     public synchronized boolean isAudioVolumeLimitSupported() {
-        return isPropertySupportedLocked(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT);
+        return isPropertySupportedLocked(AUDIO_VOLUME_LIMIT);
     }
 
     public synchronized boolean isAudioVolumeMasterOnly() {
-        if (!isPropertySupportedLocked(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME)) {
-            throw new IllegalStateException("VEHICLE_PROPERTY_AUDIO_VOLUME not supported");
+        if (!isPropertySupportedLocked(VehicleProperty.AUDIO_VOLUME)) {
+            throw new IllegalStateException("VehicleProperty.AUDIO_VOLUME not supported");
         }
         VehiclePropConfig config = mProperties.get(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME);
-        if ((config.getConfigArray(1) &
-                VehicleAudioVolumeCapabilityFlag.VEHICLE_AUDIO_VOLUME_CAPABILITY_MASTER_VOLUME_ONLY)
+                AUDIO_VOLUME);
+        if ((config.configArray.get(1) &
+                VehicleAudioVolumeCapabilityFlag.MASTER_VOLUME_ONLY)
                 != 0) {
             return true;
         }
@@ -490,10 +471,10 @@
             return new int[] { VEHICLE_AUDIO_FOCUS_STATE_GAIN, 0xffffffff, 0};
         }
         try {
-            return mVehicleHal.getVehicleNetwork().getIntVectorProperty(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS);
-        } catch (ServiceSpecificException e) {
-            Log.e(CarLog.TAG_AUDIO, "VEHICLE_PROPERTY_AUDIO_HW_VARIANT not ready", e);
+            VehiclePropValue propValue = mVehicleHal.get(VehicleProperty.AUDIO_FOCUS);
+            return toIntArray(propValue.value.int32Values);
+        } catch (PropertyTimeoutException e) {
+            Log.e(CarLog.TAG_AUDIO, "VehicleProperty.AUDIO_HW_VARIANT not ready", e);
             return new int[] { VEHICLE_AUDIO_FOCUS_STATE_LOSS, 0x0, 0};
         }
     }
@@ -518,7 +499,7 @@
 
         @Override
         public String toString() {
-            return "[bitPosition=" + bitPosition + ", physycalStreamNumber="
+            return "[bitPosition=" + bitPosition + ", physicalStreamNumber="
                     + physicalStreamNumber + "]";
         }
     }
@@ -531,21 +512,22 @@
     public Map<String, ExtRoutingSourceInfo> getExternalAudioRoutingTypes() {
         VehiclePropConfig config;
         synchronized (this) {
-            if (!isPropertySupportedLocked(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT)) {
+            if (!isPropertySupportedLocked(AUDIO_EXT_ROUTING_HINT)) {
+                if (DBG) {
+                    Log.i(CarLog.TAG_AUDIO, "AUDIO_EXT_ROUTING_HINT is not supported");
+                }
                 return null;
             }
-            config = mProperties.get(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT);
+            config = mProperties.get(AUDIO_EXT_ROUTING_HINT);
         }
-        if (!config.hasConfigString()) {
-            Log.w(CarLog.TAG_HAL, "AUDIO_EXT_ROUTING_HINT with empty config string");
+        if (TextUtils.isEmpty(config.configString)) {
+            Log.w(CarLog.TAG_AUDIO, "AUDIO_EXT_ROUTING_HINT with empty config string");
             return null;
         }
         Map<String, ExtRoutingSourceInfo> routingTypes = new HashMap<>();
-        String configString = config.getConfigString();
+        String configString = config.configString;
         if (DBG) {
-            Log.i(CarLog.TAG_HAL, "AUDIO_EXT_ROUTING_HINT config string:" + configString);
+            Log.i(CarLog.TAG_AUDIO, "AUDIO_EXT_ROUTING_HINT config string:" + configString);
         }
         String[] routes = configString.split(",");
         for (String routeString : routes) {
@@ -561,7 +543,7 @@
                 name = tokens[1];
                 physicalStreamNumber = Integer.parseInt(tokens[2]);
             } else {
-                Log.w(CarLog.TAG_AUDIO, "VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT has wrong entry:" +
+                Log.w(CarLog.TAG_AUDIO, "AUDIO_EXT_ROUTING_HINT has wrong entry:" +
                         routeString);
                 continue;
             }
@@ -572,10 +554,9 @@
 
     public void setExternalRoutingSource(int[] externalRoutings) {
         try {
-            mVehicleHal.getVehicleNetwork().setIntVectorProperty(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT, externalRoutings);
-        } catch (ServiceSpecificException e) {
-            Log.e(CarLog.TAG_AUDIO, "Cannot write to VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT", e);
+            mVehicleHal.set(AUDIO_EXT_ROUTING_HINT).to(externalRoutings);
+        } catch (PropertyTimeoutException e) {
+            Log.e(CarLog.TAG_AUDIO, "Cannot write to VehicleProperty.AUDIO_EXT_ROUTING_HINT", e);
         }
     }
 
@@ -588,17 +569,16 @@
     public synchronized void init() {
         for (VehiclePropConfig config : mProperties.values()) {
             if (VehicleHal.isPropertySubscribable(config)) {
-                mVehicleHal.subscribeProperty(this, config.getProp(), 0);
+                mVehicleHal.subscribeProperty(this, config.prop, 0);
             }
         }
         try {
-            mVariant = mVehicleHal.getVehicleNetwork().getIntProperty(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT);
+            mVariant = mVehicleHal.get(int.class, AUDIO_HW_VARIANT);
         } catch (IllegalArgumentException e) {
             // no variant. Set to default, 0.
             mVariant = 0;
-        } catch (ServiceSpecificException e) {
-            Log.e(CarLog.TAG_AUDIO, "VEHICLE_PROPERTY_AUDIO_HW_VARIANT not ready", e);
+        } catch (PropertyTimeoutException e) {
+            Log.e(CarLog.TAG_AUDIO, "VehicleProperty.AUDIO_HW_VARIANT not ready", e);
             mVariant = 0;
         }
     }
@@ -607,34 +587,35 @@
     public synchronized void release() {
         for (VehiclePropConfig config : mProperties.values()) {
             if (VehicleHal.isPropertySubscribable(config)) {
-                mVehicleHal.unsubscribeProperty(this, config.getProp());
+                mVehicleHal.unsubscribeProperty(this, config.prop);
             }
         }
         mProperties.clear();
     }
 
     @Override
-    public synchronized List<VehiclePropConfig> takeSupportedProperties(
-            List<VehiclePropConfig> allProperties) {
+    public synchronized Collection<VehiclePropConfig> takeSupportedProperties(
+            Collection<VehiclePropConfig> allProperties) {
         for (VehiclePropConfig p : allProperties) {
-            switch (p.getProp()) {
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS:
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME:
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT:
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT:
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT:
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_INTERNAL_AUDIO_STREAM_STATE:
-                    mProperties.put(p.getProp(), p);
+            switch (p.prop) {
+                case VehicleProperty.AUDIO_FOCUS:
+                case VehicleProperty.AUDIO_VOLUME:
+                case VehicleProperty.AUDIO_VOLUME_LIMIT:
+                case VehicleProperty.AUDIO_HW_VARIANT:
+                case VehicleProperty.AUDIO_EXT_ROUTING_HINT:
+                    // TODO(pavelm): we don't have internal properties anymore.
+//                case VehicleProperty.INTERNAL_AUDIO_STREAM_STATE:
+                    mProperties.put(p.prop, p);
                     break;
             }
         }
-        return new LinkedList<VehiclePropConfig>(mProperties.values());
+        return new ArrayList<>(mProperties.values());
     }
 
     @Override
     public void handleHalEvents(List<VehiclePropValue> values) {
-        AudioHalFocusListener focusListener = null;
-        AudioHalVolumeListener volumeListener = null;
+        AudioHalFocusListener focusListener;
+        AudioHalVolumeListener volumeListener;
         synchronized (this) {
             focusListener = mFocusListener;
             volumeListener = mVolumeListener;
@@ -646,44 +627,38 @@
             AudioHalVolumeListener volumeListener,
             List<VehiclePropValue> values) {
         for (VehiclePropValue v : values) {
-            switch (v.getProp()) {
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS: {
-                    int focusState = v.getInt32Values(
-                            VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_FOCUS);
-                    int streams = v.getInt32Values(
-                            VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_STREAMS);
-                    int externalFocus = v.getInt32Values(
-                            VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_EXTERNAL_FOCUS_STATE);
+            ArrayList<Integer> vec = v.value.int32Values;
+            switch (v.prop) {
+                case VehicleProperty.AUDIO_FOCUS: {
+                    int focusState = vec.get(VehicleAudioFocusIndex.FOCUS);
+                    int streams = vec.get(VehicleAudioFocusIndex.STREAMS);
+                    int externalFocus = vec.get(VehicleAudioFocusIndex.EXTERNAL_FOCUS_STATE);
                     if (focusListener != null) {
                         focusListener.onFocusChange(focusState, streams, externalFocus);
                     }
                 } break;
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_INTERNAL_AUDIO_STREAM_STATE: {
-                    int state = v.getInt32Values(
-                            VehicleAudioStreamStateIndex.VEHICLE_AUDIO_STREAM_STATE_INDEX_STATE);
-                    int streamNum = v.getInt32Values(
-                            VehicleAudioStreamStateIndex.VEHICLE_AUDIO_STREAM_STATE_INDEX_STREAM);
-                    if (focusListener != null) {
-                        focusListener.onStreamStatusChange(streamNum, state ==
-                                VehicleAudioStreamState.VEHICLE_AUDIO_STREAM_STATE_STARTED);
-                    }
-                } break;
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME: {
-                    int volume = v.getInt32Values(
-                            VehicleAudioVolumeIndex.VEHICLE_AUDIO_VOLUME_INDEX_VOLUME);
-                    int streamNum = v.getInt32Values(
-                            VehicleAudioVolumeIndex.VEHICLE_AUDIO_VOLUME_INDEX_STREAM);
-                    int volumeState = v.getInt32Values(
-                            VehicleAudioVolumeIndex.VEHICLE_AUDIO_VOLUME_INDEX_STATE);
+                // TODO(pavelm): we don't have internal properties anymore
+//                case INTERNAL_AUDIO_STREAM_STATE: {
+//                    int state = v.getInt32Values(
+//                            VehicleAudioStreamStateIndex.VEHICLE_AUDIO_STREAM_STATE_INDEX_STATE);
+//                    int streamNum = v.getInt32Values(
+//                            VehicleAudioStreamStateIndex.VEHICLE_AUDIO_STREAM_STATE_INDEX_STREAM);
+//                    if (focusListener != null) {
+//                        focusListener.onStreamStatusChange(streamNum, state ==
+//                                VehicleAudioStreamState.VEHICLE_AUDIO_STREAM_STATE_STARTED);
+//                    }
+//                } break;
+                case AUDIO_VOLUME: {
+                    int volume = vec.get(VehicleAudioVolumeIndex.INDEX_VOLUME);
+                    int streamNum = vec.get(VehicleAudioVolumeIndex.INDEX_STREAM);
+                    int volumeState = vec.get(VehicleAudioVolumeIndex.INDEX_STATE);
                     if (volumeListener != null) {
                         volumeListener.onVolumeChange(streamNum, volume, volumeState);
                     }
                 } break;
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT: {
-                    int stream = v.getInt32Values(
-                            VehicleAudioVolumeLimitIndex.VEHICLE_AUDIO_VOLUME_LIMIT_INDEX_STREAM);
-                    int maxVolume = v.getInt32Values(
-                            VehicleAudioVolumeLimitIndex.VEHICLE_AUDIO_VOLUME_LIMIT_INDEX_MAX_VOLUME);
+                case AUDIO_VOLUME_LIMIT: {
+                    int stream = vec.get(VehicleAudioVolumeLimitIndex.STREAM);
+                    int maxVolume = vec.get(VehicleAudioVolumeLimitIndex.MAX_VOLUME);
                     if (volumeListener != null) {
                         volumeListener.onVolumeLimitChange(stream, maxVolume);
                     }
diff --git a/service/src/com/android/car/hal/CabinHalService.java b/service/src/com/android/car/hal/CabinHalService.java
index 213f458..b0e5e21 100644
--- a/service/src/com/android/car/hal/CabinHalService.java
+++ b/service/src/com/android/car/hal/CabinHalService.java
@@ -16,8 +16,7 @@
 package com.android.car.hal;
 
 import android.car.hardware.cabin.CarCabinManager;
-
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
+import android.hardware.vehicle.V2_0.VehicleProperty;
 
 public class CabinHalService extends PropertyHalServiceBase {
     private static final boolean DBG = false;
@@ -25,127 +24,127 @@
 
     private final ManagerToHalPropIdMap mMgrHalPropIdMap = ManagerToHalPropIdMap.create(new int[] {
             CarCabinManager.ID_DOOR_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_DOOR_POS,
+            VehicleProperty.DOOR_POS,
 
             CarCabinManager.ID_DOOR_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_DOOR_MOVE,
+            VehicleProperty.DOOR_MOVE,
 
             CarCabinManager.ID_DOOR_LOCK,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_DOOR_LOCK,
+            VehicleProperty.DOOR_LOCK,
 
             CarCabinManager.ID_MIRROR_Z_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_MIRROR_Z_POS,
+            VehicleProperty.MIRROR_Z_POS,
 
             CarCabinManager.ID_MIRROR_Z_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_MIRROR_Z_MOVE,
+            VehicleProperty.MIRROR_Z_MOVE,
 
             CarCabinManager.ID_MIRROR_Y_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_MIRROR_Y_POS,
+            VehicleProperty.MIRROR_Y_POS,
 
             CarCabinManager.ID_MIRROR_Y_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_MIRROR_Y_MOVE,
+            VehicleProperty.MIRROR_Y_MOVE,
 
             CarCabinManager.ID_MIRROR_LOCK,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_MIRROR_LOCK,
+            VehicleProperty.MIRROR_LOCK,
 
             CarCabinManager.ID_MIRROR_FOLD,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_MIRROR_FOLD,
+            VehicleProperty.MIRROR_FOLD,
 
             CarCabinManager.ID_SEAT_MEMORY_SELECT,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_MEMORY_SELECT,
+            VehicleProperty.SEAT_MEMORY_SELECT,
 
             CarCabinManager.ID_SEAT_MEMORY_SET,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_MEMORY_SET,
+            VehicleProperty.SEAT_MEMORY_SET,
 
             CarCabinManager.ID_SEAT_BELT_BUCKLED,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_BELT_BUCKLED,
+            VehicleProperty.SEAT_BELT_BUCKLED,
 
             CarCabinManager.ID_SEAT_BELT_HEIGHT_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_POS,
+            VehicleProperty.SEAT_BELT_HEIGHT_POS,
 
             CarCabinManager.ID_SEAT_BELT_HEIGHT_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_BELT_HEIGHT_MOVE,
+            VehicleProperty.SEAT_BELT_HEIGHT_MOVE,
 
             CarCabinManager.ID_SEAT_FORE_AFT_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_FORE_AFT_POS,
+            VehicleProperty.SEAT_FORE_AFT_POS,
 
             CarCabinManager.ID_SEAT_FORE_AFT_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_FORE_AFT_MOVE,
+            VehicleProperty.SEAT_FORE_AFT_MOVE,
 
             CarCabinManager.ID_SEAT_BACKREST_ANGLE_1_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_POS,
+            VehicleProperty.SEAT_BACKREST_ANGLE_1_POS,
 
             CarCabinManager.ID_SEAT_BACKREST_ANGLE_1_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_1_MOVE,
+            VehicleProperty.SEAT_BACKREST_ANGLE_1_MOVE,
 
             CarCabinManager.ID_SEAT_BACKREST_ANGLE_2_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_POS,
+            VehicleProperty.SEAT_BACKREST_ANGLE_2_POS,
 
             CarCabinManager.ID_SEAT_BACKREST_ANGLE_2_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_BACKREST_ANGLE_2_MOVE,
+            VehicleProperty.SEAT_BACKREST_ANGLE_2_MOVE,
 
             CarCabinManager.ID_SEAT_HEIGHT_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_HEIGHT_POS,
+            VehicleProperty.SEAT_HEIGHT_POS,
 
             CarCabinManager.ID_SEAT_HEIGHT_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_HEIGHT_MOVE,
+            VehicleProperty.SEAT_HEIGHT_MOVE,
 
             CarCabinManager.ID_SEAT_DEPTH_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_DEPTH_POS,
+            VehicleProperty.SEAT_DEPTH_POS,
 
             CarCabinManager.ID_SEAT_DEPTH_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_DEPTH_MOVE,
+            VehicleProperty.SEAT_DEPTH_MOVE,
 
             CarCabinManager.ID_SEAT_TILT_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_TILT_POS,
+            VehicleProperty.SEAT_TILT_POS,
 
             CarCabinManager.ID_SEAT_TILT_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_TILT_MOVE,
+            VehicleProperty.SEAT_TILT_MOVE,
 
             CarCabinManager.ID_SEAT_LUMBAR_FORE_AFT_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_POS,
+            VehicleProperty.SEAT_LUMBAR_FORE_AFT_POS,
 
             CarCabinManager.ID_SEAT_LUMBAR_FORE_AFT_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_LUMBAR_FORE_AFT_MOVE,
+            VehicleProperty.SEAT_LUMBAR_FORE_AFT_MOVE,
 
             CarCabinManager.ID_SEAT_LUMBAR_SIDE_SUPPORT_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_POS,
+            VehicleProperty.SEAT_LUMBAR_SIDE_SUPPORT_POS,
 
             CarCabinManager.ID_SEAT_LUMBAR_SIDE_SUPPORT_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_LUMBAR_SIDE_SUPPORT_MOVE,
+            VehicleProperty.SEAT_LUMBAR_SIDE_SUPPORT_MOVE,
 
             CarCabinManager.ID_SEAT_HEADREST_HEIGHT_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_POS,
+            VehicleProperty.SEAT_HEADREST_HEIGHT_POS,
 
             CarCabinManager.ID_SEAT_HEADREST_HEIGHT_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_HEADREST_HEIGHT_MOVE,
+            VehicleProperty.SEAT_HEADREST_HEIGHT_MOVE,
 
             CarCabinManager.ID_SEAT_HEADREST_ANGLE_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_POS,
+            VehicleProperty.SEAT_HEADREST_ANGLE_POS,
 
             CarCabinManager.ID_SEAT_HEADREST_ANGLE_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_HEADREST_ANGLE_MOVE,
+            VehicleProperty.SEAT_HEADREST_ANGLE_MOVE,
 
             CarCabinManager.ID_SEAT_HEADREST_FORE_AFT_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_POS,
+            VehicleProperty.SEAT_HEADREST_FORE_AFT_POS,
 
             CarCabinManager.ID_SEAT_HEADREST_FORE_AFT_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_SEAT_HEADREST_FORE_AFT_MOVE,
+            VehicleProperty.SEAT_HEADREST_FORE_AFT_MOVE,
 
             CarCabinManager.ID_WINDOW_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_WINDOW_POS,
+            VehicleProperty.WINDOW_POS,
 
             CarCabinManager.ID_WINDOW_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_WINDOW_MOVE,
+            VehicleProperty.WINDOW_MOVE,
 
             CarCabinManager.ID_WINDOW_VENT_POS,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_WINDOW_VENT_POS,
+            VehicleProperty.WINDOW_VENT_POS,
 
             CarCabinManager.ID_WINDOW_VENT_MOVE,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_WINDOW_VENT_MOVE,
+            VehicleProperty.WINDOW_VENT_MOVE,
 
             CarCabinManager.ID_WINDOW_LOCK,
-            VehicleNetworkConsts.VEHICLE_PROPERTY_WINDOW_LOCK
+            VehicleProperty.WINDOW_LOCK
     });
 
     public CabinHalService(VehicleHal vehicleHal) {
diff --git a/service/src/com/android/car/hal/CarPropertyUtils.java b/service/src/com/android/car/hal/CarPropertyUtils.java
index c584f31..00cde28 100644
--- a/service/src/com/android/car/hal/CarPropertyUtils.java
+++ b/service/src/com/android/car/hal/CarPropertyUtils.java
@@ -15,46 +15,20 @@
  */
 package com.android.car.hal;
 
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_BYTES;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC2;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC3;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC4;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_INT32;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC3;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_STRING;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZoneType.VEHICLE_ZONE_TYPE_NONE;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZoneType.VEHICLE_ZONE_TYPE_ZONE;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZoneType.VEHICLE_ZONE_TYPE_SEAT;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZoneType.VEHICLE_ZONE_TYPE_DOOR;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZoneType.VEHICLE_ZONE_TYPE_WINDOW;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZoneType.VEHICLE_ZONE_TYPE_MIRROR;
-import static com.android.car.vehiclenetwork.VehiclePropValueUtil.getVectorValueType;
+import static com.android.car.CarServiceUtils.toByteArray;
 import static java.lang.Integer.toHexString;
 
 import android.car.VehicleAreaType;
 import android.car.VehicleZoneUtil;
 import android.car.hardware.CarPropertyConfig;
 import android.car.hardware.CarPropertyValue;
+import android.hardware.vehicle.V2_0.VehicleArea;
+import android.hardware.vehicle.V2_0.VehicleAreaConfig;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehiclePropertyType;
 
-import com.google.protobuf.ByteString;
-
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -68,168 +42,136 @@
     /** Converts {@link VehiclePropValue} to {@link CarPropertyValue} */
     static CarPropertyValue<?> toCarPropertyValue(
             VehiclePropValue halValue, int propertyId) {
-        Class<?> clazz = getJavaClass(halValue.getValueType());
-        int areaId = halValue.getZone();
+        Class<?> clazz = getJavaClass(halValue.prop & VehiclePropertyType.MASK);
+        int areaId = halValue.areaId;
+        VehiclePropValue.RawValue v = halValue.value;
+
         if (Boolean.class == clazz) {
-            return new CarPropertyValue<>(propertyId, areaId, halValue.getInt32Values(0) == 1);
+            return new CarPropertyValue<>(propertyId, areaId, v.int32Values.get(0) == 1);
         } else if (String.class == clazz) {
-            return new CarPropertyValue<>(propertyId, areaId, halValue.getStringValue());
+            return new CarPropertyValue<>(propertyId, areaId, v.stringValue);
         } else if (Long.class == clazz) {
-            return new CarPropertyValue<>(propertyId, areaId, halValue.getInt64Value());
+            return new CarPropertyValue<>(propertyId, areaId, v.int64Values.get(0));
         } else if (byte[].class == clazz) {
-            byte[] halData = halValue.getBytesValue().toByteArray();
+            byte[] halData = toByteArray(v.bytes);
             return new CarPropertyValue<>(propertyId, areaId, halData);
         } else /* All list properties */ {
-            Object[] values = getRawValueList(clazz, halValue).toArray();
+            Object[] values = getRawValueList(clazz, v).toArray();
             return new CarPropertyValue<>(propertyId, areaId,
                     values.length == 1 ? values[0] : values);
         }
     }
 
     /** Converts {@link CarPropertyValue} to {@link VehiclePropValue} */
-    static VehiclePropValue toVehiclePropValue(CarPropertyValue hvacProp, int halPropId) {
-        VehiclePropValue.Builder builder = VehiclePropValue.newBuilder();
-        builder.setProp(halPropId);
+    static VehiclePropValue toVehiclePropValue(CarPropertyValue carProp, int halPropId) {
+        VehiclePropValue vehicleProp = new VehiclePropValue();
+        vehicleProp.prop = halPropId;
+        vehicleProp.areaId = carProp.getAreaId();
+        VehiclePropValue.RawValue v = vehicleProp.value;
 
-        if (hvacProp.getAreaId() != 0) {
-            builder.setZone(hvacProp.getAreaId());
-        }
+        Object o = carProp.getValue();
 
-        Object o = hvacProp.getValue();
-
-        boolean hasArea = hvacProp.getAreaId() != 0;
-        int vectorLength = (o instanceof Object[] ? ((Object[]) o).length : 0);
-        int halType;
         if (o instanceof Boolean) {
-            halType = hasArea ? VEHICLE_VALUE_TYPE_ZONED_BOOLEAN : VEHICLE_VALUE_TYPE_BOOLEAN;
-            builder.addInt32Values(((Boolean )o) ? 1 : 0);
+            v.int32Values.add(((Boolean )o) ? 1 : 0);
         } else if (o instanceof Integer) {
-            halType = hasArea ? VEHICLE_VALUE_TYPE_ZONED_INT32 : VEHICLE_VALUE_TYPE_INT32;
-            builder.addInt32Values((Integer) o);
+            v.int32Values.add((Integer) o);
         } else if (o instanceof Float) {
-            halType = hasArea ? VEHICLE_VALUE_TYPE_ZONED_FLOAT : VEHICLE_VALUE_TYPE_FLOAT;
-            builder.addFloatValues((Float) o);
+            v.floatValues.add((Float) o);
         } else if (o instanceof Integer[]) {
-            halType = getVectorValueType(
-                    hasArea ? VEHICLE_VALUE_TYPE_ZONED_INT32 : VEHICLE_VALUE_TYPE_ZONED_INT32,
-                    vectorLength);
-            for (Integer i : (Integer[]) o) {
-                builder.addInt32Values(i);
-            }
+            Collections.addAll(v.int32Values, (Integer[]) o);
         } else if (o instanceof Float[]) {
-            halType = getVectorValueType(
-                    hasArea ? VEHICLE_VALUE_TYPE_ZONED_FLOAT : VEHICLE_VALUE_TYPE_ZONED_FLOAT,
-                    vectorLength);
-            for (Float f : (Float[]) o) {
-                builder.addFloatValues(f);
-            }
+            Collections.addAll(v.floatValues, (Float[]) o);
         } else if (o instanceof String) {
-            halType = VEHICLE_VALUE_TYPE_STRING;
-            builder.setStringValue((String) o);
+            v.stringValue = (String) o;
         } else if (o instanceof byte[]) {
-            halType = VEHICLE_VALUE_TYPE_BYTES;  // We don't have zoned type in vehicle.h
-            builder.setBytesValue(ByteString.copyFrom((byte[]) o));
+            for (byte b : (byte[]) o) {
+                v.bytes.add(b);
+            }
         } else {
-            throw new IllegalArgumentException("Unexpected type in: " + hvacProp);
+            throw new IllegalArgumentException("Unexpected type in: " + carProp);
         }
-        builder.setValueType(halType);
-        return builder.build();
+
+        return vehicleProp;
     }
 
     /**
      * Converts {@link VehiclePropConfig} to {@link CarPropertyConfig}.
      */
     static CarPropertyConfig<?> toCarPropertyConfig(VehiclePropConfig p, int propertyId) {
-        int[] areas = VehicleZoneUtil.listAllZones(p.getZones());
+        int[] areas = VehicleZoneUtil.listAllZones(p.supportedAreas);
 
-        int areaType = getVehicleAreaType(VehicleNetworkConsts.getVehicleZoneType(p.getProp()));
+        int areaType = getVehicleAreaType(p.prop & VehicleArea.MASK);
 
-        Class<?> clazz = getJavaClass(p.getValueType());
+        Class<?> clazz = getJavaClass(p.prop & VehiclePropertyType.MASK);
         if (clazz == Boolean.class || clazz == byte[].class || clazz == String.class) {
             return CarPropertyConfig
                     .newBuilder(clazz, propertyId, areaType, /* capacity */ 1)
                     .addAreas(areas)
                     .build();
         } else {
-            List mins;
-            List maxs;
-            if (classMatched(Integer.class, clazz)) {
-                mins = p.getInt32MinsList();
-                maxs = p.getInt32MaxsList();
-            } else if (classMatched(Float.class, clazz)) {
-                mins = p.getFloatMinsList();
-                maxs = p.getFloatMaxsList();
-            } else {
-                throw new IllegalArgumentException("Unexpected type: " + clazz);
-            }
             CarPropertyConfig.Builder builder = CarPropertyConfig
-                    .newBuilder(clazz, propertyId, areaType, /* capacity */ mins.size());
-            for (int i = 0; i < mins.size(); i++) {
-                int areaId = areas.length == 0 ? 0 : areas[i];
-                builder.addAreaConfig(areaId, mins.get(i), maxs.get(i));
+                    .newBuilder(clazz, propertyId, areaType, /* capacity */  p.areaConfigs.size());
+
+            for (VehicleAreaConfig area : p.areaConfigs) {
+                if (classMatched(Integer.class, clazz)) {
+                    builder.addAreaConfig(area.areaId, area.minInt32Value, area.maxInt32Value);
+                } else if (classMatched(Float.class, clazz)) {
+                    builder.addAreaConfig(area.areaId, area.minFloatValue, area.maxFloatValue);
+                } else if (classMatched(Long.class, clazz)) {
+                    builder.addAreaConfig(area.areaId, area.minInt64Value, area.maxInt64Value);
+                } else {
+                    throw new IllegalArgumentException("Unexpected type: " + clazz);
+                }
             }
             return builder.build();
         }
     }
 
-    private static @VehicleAreaType.VehicleAreaTypeValue int getVehicleAreaType(int zoneType) {
-        switch (zoneType) {
-            case VEHICLE_ZONE_TYPE_NONE:
+    private static @VehicleAreaType.VehicleAreaTypeValue int getVehicleAreaType(int halArea) {
+        switch (halArea) {
+            case VehicleArea.GLOBAL:
                 return VehicleAreaType.VEHICLE_AREA_TYPE_NONE;
-            case VEHICLE_ZONE_TYPE_ZONE:
+            case VehicleArea.ZONE:
                 return VehicleAreaType.VEHICLE_AREA_TYPE_ZONE;
-            case VEHICLE_ZONE_TYPE_SEAT:
+            case VehicleArea.SEAT:
                 return VehicleAreaType.VEHICLE_AREA_TYPE_SEAT;
-            case VEHICLE_ZONE_TYPE_DOOR:
+            case VehicleArea.DOOR:
                 return VehicleAreaType.VEHICLE_AREA_TYPE_DOOR;
-            case VEHICLE_ZONE_TYPE_WINDOW:
+            case VehicleArea.WINDOW:
                 return VehicleAreaType.VEHICLE_AREA_TYPE_WINDOW;
-            case VEHICLE_ZONE_TYPE_MIRROR:
+            case VehicleArea.MIRROR:
                 return VehicleAreaType.VEHICLE_AREA_TYPE_MIRROR;
             default:
-                throw new RuntimeException("Unsupported zone type " + zoneType);
+                throw new RuntimeException("Unsupported area type " + halArea);
         }
     }
 
     private static Class<?> getJavaClass(int halType) {
         switch (halType) {
-            case VEHICLE_VALUE_TYPE_BOOLEAN:
-            case VEHICLE_VALUE_TYPE_ZONED_BOOLEAN:
+            case VehiclePropertyType.BOOLEAN:
                 return Boolean.class;
-            case VEHICLE_VALUE_TYPE_FLOAT:
-            case VEHICLE_VALUE_TYPE_ZONED_FLOAT:
+            case VehiclePropertyType.FLOAT:
                 return Float.class;
-            case VEHICLE_VALUE_TYPE_INT32:
-            case VEHICLE_VALUE_TYPE_ZONED_INT32:
+            case VehiclePropertyType.INT32:
                 return Integer.class;
-            case VEHICLE_VALUE_TYPE_INT32_VEC2:
-            case VEHICLE_VALUE_TYPE_INT32_VEC3:
-            case VEHICLE_VALUE_TYPE_INT32_VEC4:
-            case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2:
-            case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3:
-            case VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4:
+            case VehiclePropertyType.INT32_VEC:
                 return Integer[].class;
-            case VEHICLE_VALUE_TYPE_FLOAT_VEC2:
-            case VEHICLE_VALUE_TYPE_FLOAT_VEC3:
-            case VEHICLE_VALUE_TYPE_FLOAT_VEC4:
-            case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2:
-            case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3:
-            case VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4:
+            case VehiclePropertyType.FLOAT_VEC:
                 return Float[].class;
-            case VEHICLE_VALUE_TYPE_STRING:
+            case VehiclePropertyType.STRING:
                 return String.class;
-            case VEHICLE_VALUE_TYPE_BYTES:
+            case VehiclePropertyType.BYTES:
                 return byte[].class;
             default:
                 throw new IllegalArgumentException("Unexpected type: " + toHexString(halType));
         }
     }
 
-    private static List getRawValueList(Class<?> clazz, VehiclePropValue vehiclePropValue) {
+    private static List getRawValueList(Class<?> clazz, VehiclePropValue.RawValue value) {
         if (classMatched(Float.class, clazz)) {
-            return vehiclePropValue.getFloatValuesList();
+            return value.floatValues;
         } else if (classMatched(Integer.class, clazz)) {
-            return vehiclePropValue.getInt32ValuesList();
+            return value.int32Values;
         } else {
             throw new IllegalArgumentException("Unexpected type: " + clazz);
         }
diff --git a/service/src/com/android/car/hal/HalClient.java b/service/src/com/android/car/hal/HalClient.java
new file mode 100644
index 0000000..ee5e593
--- /dev/null
+++ b/service/src/com/android/car/hal/HalClient.java
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 2016 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.hal;
+
+import static android.os.SystemClock.elapsedRealtime;
+
+import android.hardware.vehicle.V2_0.IVehicle;
+import android.hardware.vehicle.V2_0.IVehicle.getCallback;
+import android.hardware.vehicle.V2_0.IVehicleCallback;
+import android.hardware.vehicle.V2_0.StatusCode;
+import android.hardware.vehicle.V2_0.SubscribeFlags;
+import android.hardware.vehicle.V2_0.SubscribeOptions;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.os.Handler;
+import android.os.IHwBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.util.Log;
+
+import com.android.car.CarLog;
+
+import java.util.ArrayList;
+
+/**
+ * Vehicle HAL client. Interacts directly with Vehicle HAL interface {@link IVehicle}. Contains
+ * some logic for retriable properties, redirects Vehicle notifications into given looper thread.
+ */
+class  HalClient {
+    /**
+     * If call to vehicle HAL returns StatusCode.TRY_AGAIN, than {@link HalClient} will retry to
+     * invoke that method again for this amount of milliseconds.
+     */
+    private static final int WAIT_CAP_FOR_RETRIABLE_RESULT_MS = 2000;
+
+    private static final int SLEEP_BETWEEN_RETRIABLE_INVOKES_MS = 50;
+
+    private final IVehicle mVehicle;
+
+    private final IVehicleCallback mInternalCallback;
+
+    /**
+     * Create HalClient object
+     *
+     * @param vehicle interface to the vehicle HAL
+     * @param looper looper that will be used to propagate notifications from vehicle HAL
+     * @param callback to propagate notifications from Vehicle HAL in the provided looper thread
+     */
+    HalClient(IVehicle vehicle, Looper looper, IVehicleCallback callback) {
+        mVehicle = vehicle;
+        Handler handler = new CallbackHandler(looper, callback);
+        mInternalCallback = new VehicleCallback(handler);
+    }
+
+    ArrayList<VehiclePropConfig> getAllPropConfigs() {
+        return mVehicle.getAllPropConfigs();
+    }
+
+    public void subscribe(int prop, float sampleRateHz) {
+        SubscribeOptions opt = new SubscribeOptions();
+        opt.propId = prop;
+        opt.sampleRate = sampleRateHz;
+        opt.flags = SubscribeFlags.HAL_EVENT;
+        ArrayList<SubscribeOptions> options = new ArrayList<>(1);
+        options.add(opt);
+        mVehicle.subscribe(mInternalCallback, options);
+    }
+
+    public void unsubscribe(int prop) {
+        mVehicle.unsubscribe(mInternalCallback, prop);
+    }
+
+    public void setValue(VehiclePropValue propValue) throws PropertyTimeoutException {
+        int status = invokeRetriable(() -> mVehicle.set(propValue),
+                WAIT_CAP_FOR_RETRIABLE_RESULT_MS, SLEEP_BETWEEN_RETRIABLE_INVOKES_MS);
+
+        if (StatusCode.INVALID_ARG == status) {
+            throw new IllegalArgumentException(
+                    String.format("Failed to set value for: 0x%x, areaId: 0x%x",
+                            propValue.prop, propValue.areaId));
+        }
+
+        if (StatusCode.TRY_AGAIN == status) {
+            throw new PropertyTimeoutException(propValue.prop);
+        }
+
+        if (StatusCode.OK != status) {
+            throw new IllegalStateException(
+                    String.format("Failed to set property: 0x%x, areaId: 0x%x, "
+                            + "code: %d", propValue.prop, propValue.areaId, status));
+        }
+    }
+
+    VehiclePropValue getValue(VehiclePropValue requestedPropValue) throws PropertyTimeoutException {
+        final ObjectWrapper<VehiclePropValue> valueWrapper = new ObjectWrapper<>();
+        int status = invokeRetriable(() -> {
+            ValueResult res = internalGet(requestedPropValue);
+            valueWrapper.object = res.propValue;
+            return res.status;
+        }, WAIT_CAP_FOR_RETRIABLE_RESULT_MS, SLEEP_BETWEEN_RETRIABLE_INVOKES_MS);
+
+        int propId = requestedPropValue.prop;
+        int areaId = requestedPropValue.areaId;
+        if (StatusCode.INVALID_ARG == status) {
+            throw new IllegalArgumentException(
+                    String.format("Failed to get value for: 0x%x, areaId: 0x%x", propId, areaId));
+        }
+
+        if (StatusCode.TRY_AGAIN == status) {
+            throw new PropertyTimeoutException(propId);
+        }
+
+        if (StatusCode.OK != status || valueWrapper.object == null) {
+            throw new IllegalStateException(
+                    String.format("Failed to get property: 0x%x, areaId: 0x%x, "
+                            + "code: %d", propId, areaId, status));
+        }
+
+        return valueWrapper.object;
+    }
+
+    private ValueResult internalGet(VehiclePropValue requestedPropValue) {
+        final ValueResult result = new ValueResult();
+        mVehicle.get(requestedPropValue,
+                new getCallback() {
+                    @Override
+                    public void onValues(int status, VehiclePropValue propValue) {
+                        result.status = status;
+                        result.propValue = propValue;
+                    }
+                });
+
+        return result;
+    }
+
+    interface RetriableCallback {
+        /** Returns {@link StatusCode} */
+        int action();
+    }
+
+    private static int invokeRetriable(RetriableCallback callback, long timeoutMs, long sleepMs) {
+        int status = callback.action();
+        long startTime = elapsedRealtime();
+        while (StatusCode.TRY_AGAIN == status && (elapsedRealtime() - startTime) < timeoutMs) {
+            try {
+                Thread.sleep(sleepMs);
+            } catch (InterruptedException e) {
+                Log.e(CarLog.TAG_HAL, "Thread was interrupted while waiting for vehicle HAL.", e);
+                break;
+            }
+
+            status = callback.action();
+        }
+        return status;
+    }
+
+    private static class ObjectWrapper<T> {
+        T object;
+    }
+
+    private static class ValueResult {
+        int status;
+        VehiclePropValue propValue;
+    }
+
+    private static class PropertySetError {
+        final int errorCode;
+        final int propId;
+        final int areaId;
+
+        PropertySetError(int errorCode, int propId, int areaId) {
+            this.errorCode = errorCode;
+            this.propId = propId;
+            this.areaId = areaId;
+        }
+    }
+
+    private static class CallbackHandler extends Handler {
+        private static final int MSG_ON_PROPERTY_SET = 1;
+        private static final int MSG_ON_PROPERTY_EVENT = 2;
+        private static final int MSG_ON_SET_ERROR = 3;
+
+        private final IVehicleCallback mCallback;
+
+        CallbackHandler(Looper looper, IVehicleCallback callback) {
+            super(looper);
+            mCallback = callback;
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            super.handleMessage(msg);
+
+            switch (msg.what) {
+                case MSG_ON_PROPERTY_EVENT:
+                    mCallback.onPropertyEvent((ArrayList<VehiclePropValue>) msg.obj);
+                    break;
+                case MSG_ON_PROPERTY_SET:
+                    mCallback.onPropertySet((VehiclePropValue) msg.obj);
+                    break;
+                case MSG_ON_SET_ERROR:
+                    PropertySetError obj = (PropertySetError) msg.obj;
+                    mCallback.onPropertySetError(obj.errorCode, obj.propId, obj.areaId);
+                    break;
+                default:
+                        Log.e(CarLog.TAG_HAL, "Unexpected message: " + msg.what);
+            }
+        }
+    }
+
+    private static class VehicleCallback implements IVehicleCallback {
+        private Handler mHandler;
+
+        VehicleCallback(Handler handler) {
+            mHandler = handler;
+        }
+
+        @Override
+        public IHwBinder asBinder() {
+            return null;
+        }
+
+        @Override
+        public void onPropertyEvent(ArrayList<VehiclePropValue> propValues) {
+            mHandler.sendMessage(Message.obtain(
+                    mHandler, CallbackHandler.MSG_ON_PROPERTY_EVENT, propValues));
+        }
+
+        @Override
+        public void onPropertySet(VehiclePropValue propValue) {
+            mHandler.sendMessage(Message.obtain(
+                    mHandler, CallbackHandler.MSG_ON_PROPERTY_SET, propValue));
+        }
+
+        @Override
+        public void onPropertySetError(int errorCode, int propId, int areaId) {
+            mHandler.sendMessage(Message.obtain(
+                    mHandler, CallbackHandler.MSG_ON_SET_ERROR,
+                    new PropertySetError(errorCode, propId, areaId)));
+        }
+
+        @Override
+        public ArrayList<String> interfaceChain() {
+            return null;
+        }
+    }
+}
diff --git a/service/src/com/android/car/hal/HalServiceBase.java b/service/src/com/android/car/hal/HalServiceBase.java
index 3a801fd..30115ae 100644
--- a/service/src/com/android/car/hal/HalServiceBase.java
+++ b/service/src/com/android/car/hal/HalServiceBase.java
@@ -16,10 +16,13 @@
 
 package com.android.car.hal;
 
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
+
+import android.annotation.Nullable;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
 
 import java.io.PrintWriter;
+import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -51,8 +54,11 @@
      * @param allProperties
      * @return null if no properties are supported.
      */
-    public abstract List<VehiclePropConfig> takeSupportedProperties(
-            List<VehiclePropConfig> allProperties);
+    @Nullable
+    public Collection<VehiclePropConfig> takeSupportedProperties(
+            Collection<VehiclePropConfig> allProperties) {
+        return null;
+    }
 
     public abstract void handleHalEvents(List<VehiclePropValue> values);
 
diff --git a/service/src/com/android/car/hal/HvacHalService.java b/service/src/com/android/car/hal/HvacHalService.java
index b6996bf..77b5364 100644
--- a/service/src/com/android/car/hal/HvacHalService.java
+++ b/service/src/com/android/car/hal/HvacHalService.java
@@ -16,70 +16,51 @@
 package com.android.car.hal;
 
 import android.car.hardware.hvac.CarHvacManager;
-
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
+import android.hardware.vehicle.V2_0.VehicleProperty;
 
 public class HvacHalService extends PropertyHalServiceBase {
     private static final boolean DBG = false;
     private static final String TAG = "HvacHalService";
 
     private final ManagerToHalPropIdMap mMgrHalPropIdMap = ManagerToHalPropIdMap.create(new int[] {
-           CarHvacManager.ID_MIRROR_DEFROSTER_ON,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_SIDE_MIRROR_HEAT,
+           CarHvacManager.ID_MIRROR_DEFROSTER_ON, VehicleProperty.HVAC_SIDE_MIRROR_HEAT,
 
-           CarHvacManager.ID_STEERING_WHEEL_TEMP,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_STEERING_WHEEL_TEMP,
+           CarHvacManager.ID_STEERING_WHEEL_TEMP, VehicleProperty.HVAC_STEERING_WHEEL_TEMP,
 
-           CarHvacManager.ID_OUTSIDE_AIR_TEMP,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_ENV_OUTSIDE_TEMPERATURE,
+           CarHvacManager.ID_OUTSIDE_AIR_TEMP, VehicleProperty.ENV_OUTSIDE_TEMPERATURE,
 
-           CarHvacManager.ID_TEMPERATURE_UNITS,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_TEMPERATURE_UNITS,
+           CarHvacManager.ID_TEMPERATURE_UNITS, VehicleProperty.HVAC_TEMPERATURE_UNITS,
 
-           CarHvacManager.ID_ZONED_TEMP_SETPOINT,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET,
+           CarHvacManager.ID_ZONED_TEMP_SETPOINT, VehicleProperty.HVAC_TEMPERATURE_SET,
 
-           CarHvacManager.ID_ZONED_TEMP_ACTUAL,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_TEMPERATURE_CURRENT,
+           CarHvacManager.ID_ZONED_TEMP_ACTUAL, VehicleProperty.HVAC_TEMPERATURE_CURRENT,
 
-           CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_FAN_SPEED,
+           CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT, VehicleProperty.HVAC_FAN_SPEED,
 
-           CarHvacManager.ID_ZONED_FAN_SPEED_RPM,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_ACTUAL_FAN_SPEED_RPM,
+           CarHvacManager.ID_ZONED_FAN_SPEED_RPM, VehicleProperty.HVAC_ACTUAL_FAN_SPEED_RPM,
 
            CarHvacManager.ID_ZONED_FAN_POSITION_AVAILABLE,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_FAN_DIRECTION_AVAILABLE,
+           VehicleProperty.HVAC_FAN_DIRECTION_AVAILABLE,
 
-           CarHvacManager.ID_ZONED_FAN_POSITION,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_FAN_DIRECTION,
+           CarHvacManager.ID_ZONED_FAN_POSITION, VehicleProperty.HVAC_FAN_DIRECTION,
 
-           CarHvacManager.ID_ZONED_SEAT_TEMP,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_SEAT_TEMPERATURE,
+           CarHvacManager.ID_ZONED_SEAT_TEMP, VehicleProperty.HVAC_SEAT_TEMPERATURE,
 
-           CarHvacManager.ID_ZONED_AC_ON,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_AC_ON,
+           CarHvacManager.ID_ZONED_AC_ON, VehicleProperty.HVAC_AC_ON,
 
-           CarHvacManager.ID_ZONED_AUTOMATIC_MODE_ON,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_AUTO_ON,
+           CarHvacManager.ID_ZONED_AUTOMATIC_MODE_ON, VehicleProperty.HVAC_AUTO_ON,
 
-           CarHvacManager.ID_ZONED_AIR_RECIRCULATION_ON,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_RECIRC_ON,
+           CarHvacManager.ID_ZONED_AIR_RECIRCULATION_ON,VehicleProperty.HVAC_RECIRC_ON,
 
-           CarHvacManager.ID_ZONED_MAX_AC_ON,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_MAX_AC_ON,
+           CarHvacManager.ID_ZONED_MAX_AC_ON, VehicleProperty.HVAC_MAX_AC_ON,
 
-           CarHvacManager.ID_ZONED_DUAL_ZONE_ON,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_DUAL_ON,
+           CarHvacManager.ID_ZONED_DUAL_ZONE_ON, VehicleProperty.HVAC_DUAL_ON,
 
-           CarHvacManager.ID_ZONED_MAX_DEFROST_ON,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_MAX_DEFROST_ON,
+           CarHvacManager.ID_ZONED_MAX_DEFROST_ON, VehicleProperty.HVAC_MAX_DEFROST_ON,
 
-           CarHvacManager.ID_ZONED_HVAC_POWER_ON,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_POWER_ON,
+           CarHvacManager.ID_ZONED_HVAC_POWER_ON, VehicleProperty.HVAC_POWER_ON,
 
-           CarHvacManager.ID_WINDOW_DEFROSTER_ON,
-           VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_DEFROSTER
+           CarHvacManager.ID_WINDOW_DEFROSTER_ON, VehicleProperty.HVAC_DEFROSTER
     });
 
     public HvacHalService(VehicleHal vehicleHal) {
diff --git a/service/src/com/android/car/hal/InfoHalService.java b/service/src/com/android/car/hal/InfoHalService.java
index 490779b..56e3b08 100644
--- a/service/src/com/android/car/hal/InfoHalService.java
+++ b/service/src/com/android/car/hal/InfoHalService.java
@@ -16,17 +16,16 @@
 package com.android.car.hal;
 
 import android.car.CarInfoManager;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
 import android.os.Bundle;
 import android.util.Log;
 
 import com.android.car.CarLog;
-import com.android.car.vehiclenetwork.VehicleNetwork;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
 
 import java.io.PrintWriter;
-import java.util.HashMap;
+import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -50,23 +49,19 @@
     }
 
     @Override
-    public synchronized List<VehiclePropConfig> takeSupportedProperties(
-            List<VehiclePropConfig> allProperties) {
-        VehicleNetwork vn = mHal.getVehicleNetwork();
-        List<VehiclePropConfig> supported = new LinkedList<VehiclePropConfig>();
+    public synchronized Collection<VehiclePropConfig> takeSupportedProperties(
+            Collection<VehiclePropConfig> allProperties) {
+        List<VehiclePropConfig> supported = new LinkedList<>();
         for (VehiclePropConfig p: allProperties) {
-            switch (p.getProp()) {
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_INFO_MAKE:
-                    mBasicInfo.putString(CarInfoManager.BASIC_INFO_KEY_MANUFACTURER,
-                            vn.getStringProperty(p.getProp()));
+            switch (p.prop) {
+                case VehicleProperty.INFO_MAKE:
+                    readPropertyToBundle(p.prop, CarInfoManager.BASIC_INFO_KEY_MANUFACTURER);
                     break;
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_INFO_MODEL:
-                    mBasicInfo.putString(CarInfoManager.BASIC_INFO_KEY_MODEL,
-                            vn.getStringProperty(p.getProp()));
+                case VehicleProperty.INFO_MODEL:
+                    readPropertyToBundle(p.prop, CarInfoManager.BASIC_INFO_KEY_MODEL);
                     break;
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_INFO_MODEL_YEAR:
-                    mBasicInfo.putString(CarInfoManager.BASIC_INFO_KEY_MODEL_YEAR,
-                            vn.getStringProperty(p.getProp()));
+                case VehicleProperty.INFO_MODEL_YEAR:
+                    readPropertyToBundle(p.prop, CarInfoManager.BASIC_INFO_KEY_MODEL_YEAR);
                     break;
                 default: // not supported
                     break;
@@ -75,10 +70,20 @@
         return supported;
     }
 
+    private void readPropertyToBundle(int prop, String key) {
+        String value = "";
+        try {
+            value = mHal.get(String.class, prop);
+        } catch (PropertyTimeoutException e) {
+            Log.e(CarLog.TAG_INFO, "Unable to read property", e);
+        }
+        mBasicInfo.putString(key, value);
+    }
+
     @Override
     public void handleHalEvents(List<VehiclePropValue> values) {
         for (VehiclePropValue v : values) {
-            logUnexpectedEvent(v.getProp());
+            logUnexpectedEvent(v.prop);
         }
     }
 
diff --git a/service/src/com/android/car/hal/InputHalService.java b/service/src/com/android/car/hal/InputHalService.java
index 41a4b87..6d6521f 100644
--- a/service/src/com/android/car/hal/InputHalService.java
+++ b/service/src/com/android/car/hal/InputHalService.java
@@ -15,6 +15,12 @@
  */
 package com.android.car.hal;
 
+import static android.hardware.vehicle.V2_0.VehicleProperty.HW_KEY_INPUT;
+
+import android.hardware.vehicle.V2_0.VehicleDisplay;
+import android.hardware.vehicle.V2_0.VehicleHwKeyInputAction;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
 import android.os.SystemClock;
 import android.util.Log;
 import android.util.SparseLongArray;
@@ -22,21 +28,17 @@
 import android.view.KeyEvent;
 
 import com.android.car.CarLog;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleDisplay;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleHwKeyInputAction;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
 
 import java.io.PrintWriter;
+import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 
 public class InputHalService extends HalServiceBase {
 
-    public static final int DISPLAY_MAIN = VehicleDisplay.VEHICLE_DISPLAY_MAIN;
-    public static final int DISPLAY_INSTRUMENT_CLUSTER =
-            VehicleDisplay.VEHICLE_DISPLAY_INSTRUMENT_CLUSTER;
+    public static final int DISPLAY_MAIN = VehicleDisplay.MAIN;
+    public static final int DISPLAY_INSTRUMENT_CLUSTER = VehicleDisplay.INSTRUMENT_CLUSTER;
+    private final VehicleHal mHal;
 
     public interface InputListener {
         void onKeyEvent(KeyEvent event, int targetDisplay);
@@ -48,6 +50,10 @@
     private InputListener mListener;
     private final SparseLongArray mKeyDownTimes = new SparseLongArray();
 
+    public InputHalService(VehicleHal hal) {
+        mHal = hal;
+    }
+
     public void setInputListener(InputListener listener) {
         synchronized (this) {
             if (!mKeyInputSupported) {
@@ -56,8 +62,7 @@
             }
             mListener = listener;
         }
-        VehicleHal.getInstance().subscribeProperty(this,
-                VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT, 0);
+        mHal.subscribeProperty(this, HW_KEY_INPUT, 0);
     }
 
     public synchronized boolean isKeyInputSupported() {
@@ -77,10 +82,11 @@
     }
 
     @Override
-    public List<VehiclePropConfig> takeSupportedProperties(List<VehiclePropConfig> allProperties) {
-        List<VehiclePropConfig> supported = new LinkedList<VehiclePropConfig>();
+    public Collection<VehiclePropConfig> takeSupportedProperties(
+            Collection<VehiclePropConfig> allProperties) {
+        List<VehiclePropConfig> supported = new LinkedList<>();
         for (VehiclePropConfig p: allProperties) {
-            if (p.getProp() == VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT) {
+            if (p.prop == HW_KEY_INPUT) {
                 supported.add(p);
                 synchronized (this) {
                     mKeyInputSupported = true;
@@ -92,7 +98,7 @@
 
     @Override
     public void handleHalEvents(List<VehiclePropValue> values) {
-        InputListener listener = null;
+        InputListener listener;
         synchronized (this) {
             listener = mListener;
         }
@@ -101,19 +107,18 @@
             return;
         }
         for (VehiclePropValue v : values) {
-            if (v.getProp() != VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT) {
+            if (v.prop != HW_KEY_INPUT) {
                 Log.e(CarLog.TAG_INPUT, "Wrong event dispatched, prop:0x" +
-                        Integer.toHexString(v.getProp()));
+                        Integer.toHexString(v.prop));
                 continue;
             }
-            int action = (v.getInt32Values(0) ==
-                    VehicleHwKeyInputAction.VEHICLE_HW_KEY_INPUT_ACTION_DOWN) ?
+            int action = (v.value.int32Values.get(0) == VehicleHwKeyInputAction.ACTION_DOWN) ?
                             KeyEvent.ACTION_DOWN : KeyEvent.ACTION_UP;
-            int code = v.getInt32Values(1);
-            int display = v.getInt32Values(2);
+            int code = v.value.int32Values.get(1);
+            int display = v.value.int32Values.get(2);
             if (DBG) {
-                Log.i(CarLog.TAG_INPUT, "hal event code:" + code + ",action:" + action +
-                        ",display:" + display);
+                Log.i(CarLog.TAG_INPUT, "hal event code:" + code + ", action:" + action +
+                        ", display:" + display);
             }
 
             dispatchKeyEvent(listener, action, code, display);
diff --git a/service/src/com/android/car/hal/PowerHalService.java b/service/src/com/android/car/hal/PowerHalService.java
index 580e7a7..ff43cfc 100644
--- a/service/src/com/android/car/hal/PowerHalService.java
+++ b/service/src/com/android/car/hal/PowerHalService.java
@@ -15,69 +15,64 @@
  */
 package com.android.car.hal;
 
-import android.os.ServiceSpecificException;
+import static android.hardware.vehicle.V2_0.VehicleProperty.AP_POWER_STATE;
+import static android.hardware.vehicle.V2_0.VehicleProperty.DISPLAY_BRIGHTNESS;
+
+import android.annotation.Nullable;
+import android.hardware.vehicle.V2_0.VehicleApPowerSetState;
+import android.hardware.vehicle.V2_0.VehicleApPowerState;
+import android.hardware.vehicle.V2_0.VehicleApPowerStateConfigFlag;
+import android.hardware.vehicle.V2_0.VehicleApPowerStateIndex;
+import android.hardware.vehicle.V2_0.VehicleApPowerStateShutdownParam;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
 import android.util.Log;
 
 import com.android.car.CarLog;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleApPowerSetState;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleApPowerState;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleApPowerStateConfigFlag;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleApPowerStateIndex;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleApPowerStateShutdownParam;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
 import com.android.internal.annotations.VisibleForTesting;
 
 import java.io.PrintWriter;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 
 public class PowerHalService extends HalServiceBase {
 
-    public static final int STATE_OFF = VehicleApPowerState.VEHICLE_AP_POWER_STATE_OFF;
-    public static final int STATE_DEEP_SLEEP =
-            VehicleApPowerState.VEHICLE_AP_POWER_STATE_DEEP_SLEEP;
-    public static final int STATE_ON_DISP_OFF =
-            VehicleApPowerState.VEHICLE_AP_POWER_STATE_ON_DISP_OFF;
-    public static final int STATE_ON_FULL = VehicleApPowerState.VEHICLE_AP_POWER_STATE_ON_FULL;
-    public static final int STATE_SHUTDOWN_PREPARE =
-            VehicleApPowerState.VEHICLE_AP_POWER_STATE_SHUTDOWN_PREPARE;
+    public static final int STATE_OFF = VehicleApPowerState.OFF;
+    public static final int STATE_DEEP_SLEEP = VehicleApPowerState.DEEP_SLEEP;
+    public static final int STATE_ON_DISP_OFF = VehicleApPowerState.ON_DISP_OFF;
+    public static final int STATE_ON_FULL = VehicleApPowerState.ON_FULL;
+    public static final int STATE_SHUTDOWN_PREPARE = VehicleApPowerState.SHUTDOWN_PREPARE;
 
     @VisibleForTesting
-    public static final int SET_BOOT_COMPLETE =
-            VehicleApPowerSetState.VEHICLE_AP_POWER_SET_BOOT_COMPLETE;
+    public static final int SET_BOOT_COMPLETE = VehicleApPowerSetState.BOOT_COMPLETE;
     @VisibleForTesting
-    public static final int SET_DEEP_SLEEP_ENTRY =
-            VehicleApPowerSetState.VEHICLE_AP_POWER_SET_DEEP_SLEEP_ENTRY;
+    public static final int SET_DEEP_SLEEP_ENTRY = VehicleApPowerSetState.DEEP_SLEEP_ENTRY;
     @VisibleForTesting
-    public static final int SET_DEEP_SLEEP_EXIT =
-            VehicleApPowerSetState.VEHICLE_AP_POWER_SET_DEEP_SLEEP_EXIT;
+    public static final int SET_DEEP_SLEEP_EXIT = VehicleApPowerSetState.DEEP_SLEEP_EXIT;
     @VisibleForTesting
-    public static final int SET_SHUTDOWN_POSTPONE =
-            VehicleApPowerSetState.VEHICLE_AP_POWER_SET_SHUTDOWN_POSTPONE;
+    public static final int SET_SHUTDOWN_POSTPONE = VehicleApPowerSetState.SHUTDOWN_POSTPONE;
     @VisibleForTesting
-    public static final int SET_SHUTDOWN_START =
-            VehicleApPowerSetState.VEHICLE_AP_POWER_SET_SHUTDOWN_START;
+    public static final int SET_SHUTDOWN_START = VehicleApPowerSetState.SHUTDOWN_START;
     @VisibleForTesting
-    public static final int SET_DISPLAY_ON = VehicleApPowerSetState.VEHICLE_AP_POWER_SET_DISPLAY_ON;
+    public static final int SET_DISPLAY_ON = VehicleApPowerSetState.DISPLAY_ON;
     @VisibleForTesting
     public static final int SET_DISPLAY_OFF =
-            VehicleApPowerSetState.VEHICLE_AP_POWER_SET_DISPLAY_OFF;
+            VehicleApPowerSetState.DISPLAY_OFF;
 
     @VisibleForTesting
     public static final int FLAG_SHUTDOWN_PARAM_CAN_SLEEP =
-            VehicleApPowerStateShutdownParam.VEHICLE_AP_POWER_SHUTDOWN_PARAM_CAN_SLEEP;
+            VehicleApPowerStateShutdownParam.CAN_SLEEP;
     @VisibleForTesting
     public static final int FLAG_SHUTDOWN_IMMEDIATELY =
-            VehicleApPowerStateShutdownParam.VEHICLE_AP_POWER_SHUTDOWN_PARAM_SHUTDOWN_IMMEDIATELY;
+            VehicleApPowerStateShutdownParam.SHUTDOWN_IMMEDIATELY;
 
     public interface PowerEventListener {
         /**
          * Received power state change event.
          * @param state One of STATE_*
-         * @param param
          */
         void onApPowerStateChange(PowerState state);
         /**
@@ -91,12 +86,12 @@
         /**
          * One of STATE_*
          */
-        public final int state;
-        public final int param;
+        public final int mState;
+        public final int mParam;
 
         public PowerState(int state, int param) {
-            this.state = state;
-            this.param = param;
+            this.mState = state;
+            this.mParam = param;
         }
 
         /**
@@ -106,12 +101,10 @@
          * @throws IllegalStateException
          */
         public boolean canEnterDeepSleep() {
-            if (state != STATE_SHUTDOWN_PREPARE) {
+            if (mState != STATE_SHUTDOWN_PREPARE) {
                 throw new IllegalStateException("wrong state");
             }
-            return (param &
-                    VehicleApPowerStateShutdownParam.VEHICLE_AP_POWER_SHUTDOWN_PARAM_CAN_SLEEP) !=
-                    0;
+            return (mParam & VehicleApPowerStateShutdownParam.CAN_SLEEP) != 0;
         }
 
         /**
@@ -121,12 +114,10 @@
          * @throws IllegalStateException
          */
         public boolean canPostponeShutdown() {
-            if (state != STATE_SHUTDOWN_PREPARE) {
+            if (mState != STATE_SHUTDOWN_PREPARE) {
                 throw new IllegalStateException("wrong state");
             }
-            return (param &
-                    VehicleApPowerStateShutdownParam.VEHICLE_AP_POWER_SHUTDOWN_PARAM_SHUTDOWN_IMMEDIATELY)
-                    == 0;
+            return (mParam & VehicleApPowerStateShutdownParam.SHUTDOWN_IMMEDIATELY) == 0;
         }
 
         @Override
@@ -138,12 +129,12 @@
                 return false;
             }
             PowerState that = (PowerState) o;
-            return this.state == that.state && this.param == that.param;
+            return this.mState == that.mState && this.mParam == that.mParam;
         }
 
         @Override
         public String toString() {
-            return "PowerState state:" + state + ",param:" + param;
+            return "PowerState state:" + mState + ", param:" + mParam;
         }
     }
 
@@ -174,98 +165,99 @@
 
     public void sendBootComplete() {
         Log.i(CarLog.TAG_POWER, "send boot complete");
-        setPowerState(VehicleApPowerSetState.VEHICLE_AP_POWER_SET_BOOT_COMPLETE, 0);
+        setPowerState(VehicleApPowerSetState.BOOT_COMPLETE, 0);
     }
 
     public void sendSleepEntry() {
         Log.i(CarLog.TAG_POWER, "send sleep entry");
-        setPowerState(VehicleApPowerSetState.VEHICLE_AP_POWER_SET_DEEP_SLEEP_ENTRY, 0);
+        setPowerState(VehicleApPowerSetState.DEEP_SLEEP_ENTRY, 0);
     }
 
     public void sendSleepExit() {
         Log.i(CarLog.TAG_POWER, "send sleep exit");
-        setPowerState(VehicleApPowerSetState.VEHICLE_AP_POWER_SET_DEEP_SLEEP_EXIT, 0);
+        setPowerState(VehicleApPowerSetState.DEEP_SLEEP_EXIT, 0);
     }
 
     public void sendShutdownPostpone(int postponeTimeMs) {
         Log.i(CarLog.TAG_POWER, "send shutdown postpone, time:" + postponeTimeMs);
-        setPowerState(VehicleApPowerSetState.VEHICLE_AP_POWER_SET_SHUTDOWN_POSTPONE,
+        setPowerState(VehicleApPowerSetState.SHUTDOWN_POSTPONE,
                 postponeTimeMs);
     }
 
     public void sendShutdownStart(int wakeupTimeSec) {
         Log.i(CarLog.TAG_POWER, "send shutdown start");
-        setPowerState(VehicleApPowerSetState.VEHICLE_AP_POWER_SET_SHUTDOWN_START, 0);
+        setPowerState(VehicleApPowerSetState.SHUTDOWN_START, 0);
     }
 
     public void sendDisplayOn() {
         Log.i(CarLog.TAG_POWER, "send display on");
-        setPowerState(VehicleApPowerSetState.VEHICLE_AP_POWER_SET_DISPLAY_ON, 0);
+        setPowerState(VehicleApPowerSetState.DISPLAY_ON, 0);
     }
 
     public void sendDisplayOff() {
         Log.i(CarLog.TAG_POWER, "send display off");
-        setPowerState(VehicleApPowerSetState.VEHICLE_AP_POWER_SET_DISPLAY_OFF, 0);
+        setPowerState(VehicleApPowerSetState.DISPLAY_OFF, 0);
     }
 
     private void setPowerState(int state, int additionalParam) {
         int[] values = { state, additionalParam };
         try {
-            mHal.getVehicleNetwork().setIntVectorProperty(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_STATE, values);
-        } catch (ServiceSpecificException e) {
+            mHal.set(VehicleProperty.AP_POWER_STATE).to(values);
+        } catch (PropertyTimeoutException e) {
             Log.e(CarLog.TAG_POWER, "cannot set to AP_POWER_STATE", e);
         }
     }
 
+    @Nullable
     public PowerState getCurrentPowerState() {
-        int[] state = mHal.getVehicleNetwork().getIntVectorProperty(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_STATE);
-        return new PowerState(state[VehicleApPowerStateIndex.VEHICLE_AP_POWER_STATE_INDEX_STATE],
-                state[VehicleApPowerStateIndex.VEHICLE_AP_POWER_STATE_INDEX_ADDITIONAL]);
+        int[] state;
+        try {
+            state = mHal.get(int[].class, VehicleProperty.AP_POWER_STATE);
+        } catch (PropertyTimeoutException e) {
+            Log.e(CarLog.TAG_POWER, "Cannot get AP_POWER_STATE", e);
+            return null;
+        }
+        return new PowerState(state[VehicleApPowerStateIndex.STATE],
+                state[VehicleApPowerStateIndex.ADDITIONAL]);
     }
 
     public synchronized boolean isPowerStateSupported() {
-        VehiclePropConfig config = mProperties.get(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_STATE);
+        VehiclePropConfig config = mProperties.get(VehicleProperty.AP_POWER_STATE);
         return config != null;
     }
 
     public synchronized boolean isDeepSleepAllowed() {
-        VehiclePropConfig config = mProperties.get(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_STATE);
+        VehiclePropConfig config = mProperties.get(VehicleProperty.AP_POWER_STATE);
         if (config == null) {
             return false;
         }
-        return (config.getConfigArray(0) &
-                VehicleApPowerStateConfigFlag.VEHICLE_AP_POWER_STATE_CONFIG_ENABLE_DEEP_SLEEP_FLAG)
-                != 0;
+        return (config.configArray.get(0)
+                & VehicleApPowerStateConfigFlag.ENABLE_DEEP_SLEEP_FLAG) != 0;
     }
 
     public synchronized boolean isTimedWakeupAllowed() {
         VehiclePropConfig config = mProperties.get(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_STATE);
+                AP_POWER_STATE);
         if (config == null) {
             return false;
         }
-        return (config.getConfigArray(0) &
-                VehicleApPowerStateConfigFlag.VEHICLE_AP_POWER_STATE_CONFIG_SUPPORT_TIMER_POWER_ON_FLAG)
-                != 0;
+        return (config.configArray.get(0)
+                & VehicleApPowerStateConfigFlag.CONFIG_SUPPORT_TIMER_POWER_ON_FLAG) != 0;
     }
 
     @Override
     public synchronized void init() {
         for (VehiclePropConfig config : mProperties.values()) {
             if (VehicleHal.isPropertySubscribable(config)) {
-                mHal.subscribeProperty(this, config.getProp(), 0);
+                mHal.subscribeProperty(this, config.prop, 0);
             }
         }
-        VehiclePropConfig brightnessProperty = mProperties.get(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_DISPLAY_BRIGHTNESS);
+        VehiclePropConfig brightnessProperty = mProperties.get(DISPLAY_BRIGHTNESS);
         if (brightnessProperty != null) {
-            mMaxDisplayBrightness = brightnessProperty.getInt32Maxs(0);
+            mMaxDisplayBrightness = brightnessProperty.areaConfigs.size() > 0
+                    ? brightnessProperty.areaConfigs.get(0).maxInt32Value : 0;
             if (mMaxDisplayBrightness <= 0) {
-                Log.w(CarLog.TAG_POWER, "Max display brightness from vehicle HAL is invald:" +
+                Log.w(CarLog.TAG_POWER, "Max display brightness from vehicle HAL is invalid:" +
                         mMaxDisplayBrightness);
                 mMaxDisplayBrightness = 1;
             }
@@ -278,17 +270,17 @@
     }
 
     @Override
-    public synchronized List<VehiclePropConfig> takeSupportedProperties(
-            List<VehiclePropConfig> allProperties) {
+    public synchronized Collection<VehiclePropConfig> takeSupportedProperties(
+            Collection<VehiclePropConfig> allProperties) {
         for (VehiclePropConfig config : allProperties) {
-            switch (config.getProp()) {
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_STATE:
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_DISPLAY_BRIGHTNESS:
-                    mProperties.put(config.getProp(), config);
+            switch (config.prop) {
+                case AP_POWER_STATE:
+                case DISPLAY_BRIGHTNESS:
+                    mProperties.put(config.prop, config);
                     break;
             }
         }
-        return new LinkedList<VehiclePropConfig>(mProperties.values());
+        return new LinkedList<>(mProperties.values());
     }
 
     @Override
@@ -297,7 +289,7 @@
         synchronized (this) {
             if (mListener == null) {
                 if (mQueuedEvents == null) {
-                    mQueuedEvents = new LinkedList<VehiclePropValue>();
+                    mQueuedEvents = new LinkedList<>();
                 }
                 mQueuedEvents.addAll(values);
                 return;
@@ -309,20 +301,19 @@
 
     private void dispatchEvents(List<VehiclePropValue> values, PowerEventListener listener) {
         for (VehiclePropValue v : values) {
-            switch (v.getProp()) {
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_STATE:
-                    listener.onApPowerStateChange(new PowerState(
-                            v.getInt32Values(
-                                VehicleApPowerStateIndex.VEHICLE_AP_POWER_STATE_INDEX_STATE),
-                            v.getInt32Values(
-                                VehicleApPowerStateIndex.VEHICLE_AP_POWER_STATE_INDEX_ADDITIONAL)));
+            switch (v.prop) {
+                case AP_POWER_STATE:
+                    int state = v.value.int32Values.get(VehicleApPowerStateIndex.STATE);
+                    int param = v.value.int32Values.get(VehicleApPowerStateIndex.ADDITIONAL);
+                    listener.onApPowerStateChange(new PowerState(state, param));
                     break;
-                case VehicleNetworkConsts.VEHICLE_PROPERTY_DISPLAY_BRIGHTNESS:
+                case DISPLAY_BRIGHTNESS:
                     int maxBrightness;
                     synchronized (this) {
                         maxBrightness = mMaxDisplayBrightness;
                     }
-                    listener.onDisplayBrightnessChange(v.getInt32Values(0) * 100 / maxBrightness);
+                    listener.onDisplayBrightnessChange(
+                            (v.value.int32Values.get(0) * 100) / maxBrightness);
                     break;
             }
         }
diff --git a/service/src/com/android/car/hal/PropertyHalServiceBase.java b/service/src/com/android/car/hal/PropertyHalServiceBase.java
index 79fd626..28dd4c6 100644
--- a/service/src/com/android/car/hal/PropertyHalServiceBase.java
+++ b/service/src/com/android/car/hal/PropertyHalServiceBase.java
@@ -19,20 +19,21 @@
 import static com.android.car.hal.CarPropertyUtils.toVehiclePropValue;
 import static java.lang.Integer.toHexString;
 
+import android.annotation.Nullable;
 import android.car.hardware.CarPropertyConfig;
 import android.car.hardware.CarPropertyValue;
 import android.car.hardware.property.CarPropertyEvent;
-import android.os.ServiceSpecificException;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
 import android.util.Log;
 import android.util.SparseIntArray;
 
 import com.android.car.CarLog;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
 import com.android.internal.annotations.GuardedBy;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
@@ -44,7 +45,6 @@
  */
 public abstract class PropertyHalServiceBase extends HalServiceBase {
     private final boolean mDbg;
-    private final SparseIntArray mHalPropToValueType = new SparseIntArray();
     private final ConcurrentHashMap<Integer, CarPropertyConfig<?>> mProps =
             new ConcurrentHashMap<>();
     private final String mTag;
@@ -81,6 +81,10 @@
         return new ArrayList<>(mProps.values());
     }
 
+    /**
+     * Returns property or null if property is not ready yet.
+     */
+    @Nullable
     public CarPropertyValue getProperty(int mgrPropId, int areaId) {
         int halPropId = managerToHalPropId(mgrPropId);
         if (halPropId == NOT_SUPPORTED_PROPERTY) {
@@ -89,14 +93,8 @@
 
         VehiclePropValue value = null;
         try {
-            VehiclePropValue valueRequest = VehiclePropValue.newBuilder()
-                    .setProp(halPropId)
-                    .setZone(areaId)
-                    .setValueType(mHalPropToValueType.get(halPropId))
-                    .build();
-
-            value = mVehicleHal.getVehicleNetwork().getProperty(valueRequest);
-        } catch (ServiceSpecificException e) {
+            value = mVehicleHal.get(halPropId, areaId);
+        } catch (PropertyTimeoutException e) {
             Log.e(CarLog.TAG_PROPERTY, "get, property not ready 0x" + toHexString(halPropId), e);
         }
 
@@ -111,8 +109,8 @@
         }
         VehiclePropValue halProp = toVehiclePropValue(prop, halPropId);
         try {
-            mVehicleHal.getVehicleNetwork().setProperty(halProp);
-        } catch (ServiceSpecificException e) {
+            mVehicleHal.set(halProp);
+        } catch (PropertyTimeoutException e) {
             Log.e(CarLog.TAG_PROPERTY, "set, property not ready 0x" + toHexString(halPropId), e);
             throw new RuntimeException(e);
         }
@@ -148,12 +146,12 @@
     }
 
     @Override
-    public List<VehiclePropConfig> takeSupportedProperties(
-            List<VehiclePropConfig> allProperties) {
+    public Collection<VehiclePropConfig> takeSupportedProperties(
+            Collection<VehiclePropConfig> allProperties) {
         List<VehiclePropConfig> taken = new LinkedList<>();
 
         for (VehiclePropConfig p : allProperties) {
-            int mgrPropId = halToManagerPropId(p.getProp());
+            int mgrPropId = halToManagerPropId(p.prop);
 
             if (mgrPropId == NOT_SUPPORTED_PROPERTY) {
                 continue;  // The property is not handled by this HAL.
@@ -162,11 +160,10 @@
             CarPropertyConfig config = CarPropertyUtils.toCarPropertyConfig(p, mgrPropId);
 
             taken.add(p);
-            mProps.put(p.getProp(), config);
-            mHalPropToValueType.put(p.getProp(), p.getValueType());
+            mProps.put(p.prop, config);
 
             if (mDbg) {
-                Log.d(mTag, "takeSupportedProperties: " + toHexString(p.getProp()));
+                Log.d(mTag, "takeSupportedProperties: " + toHexString(p.prop));
             }
         }
         return taken;
@@ -180,7 +177,7 @@
         }
         if (listener != null) {
             for (VehiclePropValue v : values) {
-                int prop = v.getProp();
+                int prop = v.prop;
                 int mgrPropId = halToManagerPropId(prop);
 
                 if (mgrPropId == NOT_SUPPORTED_PROPERTY) {
diff --git a/service/src/com/android/car/hal/PropertyTimeoutException.java b/service/src/com/android/car/hal/PropertyTimeoutException.java
new file mode 100644
index 0000000..2d6120d
--- /dev/null
+++ b/service/src/com/android/car/hal/PropertyTimeoutException.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2016 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.hal;
+
+import static java.lang.Integer.toHexString;
+
+/**
+ * This exception is raised when IVehicle#get or IVehicle#set returns StatusCode.TRY_AGAIN. This
+ * usually happens during boot-up meaning that Vehicle HAL is not ready to get or set that property.
+ */
+class PropertyTimeoutException extends Exception {
+    PropertyTimeoutException(int property) {
+        super("Property 0x" + toHexString(property) + " is not ready yet.");
+    }
+}
diff --git a/service/src/com/android/car/hal/RadioHalService.java b/service/src/com/android/car/hal/RadioHalService.java
index 68423d0..8cd8687 100644
--- a/service/src/com/android/car/hal/RadioHalService.java
+++ b/service/src/com/android/car/hal/RadioHalService.java
@@ -16,22 +16,23 @@
 
 package com.android.car.hal;
 
+import android.annotation.Nullable;
 import android.car.hardware.radio.CarRadioEvent;
 import android.car.hardware.radio.CarRadioPreset;
-import android.os.ServiceSpecificException;
-import android.util.Log;
 import android.hardware.radio.RadioManager;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.hardware.vehicle.V2_0.VehicleRadioConstants;
+import android.util.Log;
 
 import com.android.car.CarLog;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
 
+import java.io.PrintWriter;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
-import java.io.PrintWriter;
 
 /**
  * This class exposes the Radio related features in the HAL layer.
@@ -48,7 +49,7 @@
     private RadioListener mListener;
 
     public interface RadioListener {
-        public void onEvent(CarRadioEvent event);
+        void onEvent(CarRadioEvent event);
     }
 
     public RadioHalService(VehicleHal hal) {
@@ -65,9 +66,9 @@
     }
 
     @Override
-    public synchronized List<VehiclePropConfig> takeSupportedProperties(
-            List<VehiclePropConfig> allProperties) {
-        List<VehiclePropConfig> supported = new LinkedList<VehiclePropConfig>();
+    public synchronized Collection<VehiclePropConfig> takeSupportedProperties(
+            Collection<VehiclePropConfig> allProperties) {
+        Collection<VehiclePropConfig> supported = new LinkedList<>();
         for (VehiclePropConfig p : allProperties) {
             if (handleRadioProperty(p)) {
                 supported.add(p);
@@ -81,7 +82,7 @@
         if (DBG) {
             Log.d(TAG, "handleHalEvents");
         }
-        RadioHalService.RadioListener radioListener = null;
+        RadioHalService.RadioListener radioListener;
         synchronized (this) {
             radioListener = mListener;
         }
@@ -108,7 +109,7 @@
     public void dump(PrintWriter writer) {
         writer.println("*RadioHal*");
         writer.println("**Supported properties**");
-        writer.println(VehicleNetworkConsts.VEHICLE_PROPERTY_RADIO_PRESET);
+        writer.println(VehicleProperty.RADIO_PRESET);
         if (mListener != null) {
             writer.println("Hal service registered.");
         }
@@ -121,7 +122,7 @@
         mListener = listener;
 
         // Subscribe to all radio properties.
-        mHal.subscribeProperty(this, VehicleNetworkConsts.VEHICLE_PROPERTY_RADIO_PRESET, 0);
+        mHal.subscribeProperty(this, VehicleProperty.RADIO_PRESET, 0);
     }
 
     public synchronized void unregisterListener() {
@@ -130,8 +131,8 @@
         }
         mListener = null;
 
-        // Unsubscribe from all propreties.
-        mHal.unsubscribeProperty(this, VehicleNetworkConsts.VEHICLE_PROPERTY_RADIO_PRESET);
+        // Unsubscribe from all properties.
+        mHal.unsubscribeProperty(this, VehicleProperty.RADIO_PRESET);
     }
 
     public synchronized int getPresetCount() {
@@ -139,6 +140,7 @@
         return mPresetCount;
     }
 
+    @Nullable
     public CarRadioPreset getRadioPreset(int presetNumber) {
         // Check if the preset number is out of range. We should return NULL if that is the case.
         if (DBG) {
@@ -148,30 +150,30 @@
             throw new IllegalArgumentException("Preset number not valid: " + presetNumber);
         }
 
-        int[] presetArray = {presetNumber, 0, 0, 0};
-        VehiclePropValue presetNumberValue =
-            VehiclePropValueUtil.createIntVectorValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_RADIO_PRESET, presetArray, 0);
+        VehiclePropValue presetNumberValue = new VehiclePropValue();
+        presetNumberValue.prop = VehicleProperty.RADIO_PRESET;
+        presetNumberValue.value.int32Values.addAll(Arrays.asList(presetNumber, 0, 0, 0));
 
         VehiclePropValue presetConfig;
         try {
-            presetConfig = mHal.getVehicleNetwork().getProperty(presetNumberValue);
-        } catch (ServiceSpecificException e) {
-            Log.e(TAG, "property VEHICLE_PROPERTY_RADIO_PRESET not ready");
+            presetConfig = mHal.get(presetNumberValue);
+        } catch (PropertyTimeoutException e) {
+            Log.e(TAG, "property VehicleProperty.RADIO_PRESET not ready", e);
             return null;
         }
         // Sanity check the output from HAL.
-        if (presetConfig.getInt32ValuesCount() != 4) {
+        if (presetConfig.value.int32Values.size() != 4) {
             Log.e(TAG, "Return value does not have 4 elements: " +
-                presetConfig.getInt32ValuesList());
+                Arrays.toString(presetConfig.value.int32Values.toArray()));
             throw new IllegalStateException(
-                "Invalid preset returned from service: " + presetConfig.getInt32ValuesList());
+                "Invalid preset returned from service: "
+                        + Arrays.toString(presetConfig.value.int32Values.toArray()));
         }
 
-        int retPresetNumber = presetConfig.getInt32Values(0);
-        int retBand = presetConfig.getInt32Values(1);
-        int retChannel = presetConfig.getInt32Values(2);
-        int retSubChannel = presetConfig.getInt32Values(3);
+        int retPresetNumber = presetConfig.value.int32Values.get(0);
+        int retBand = presetConfig.value.int32Values.get(1);
+        int retChannel = presetConfig.value.int32Values.get(2);
+        int retSubChannel = presetConfig.value.int32Values.get(3);
         if (retPresetNumber != presetNumber) {
             Log.e(TAG, "Preset number is not the same: " + presetNumber + " vs " + retPresetNumber);
             return null;
@@ -197,18 +199,13 @@
             return false;
         }
 
-        VehiclePropValue setPresetValue =
-            VehiclePropValueUtil.createBuilder(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_RADIO_PRESET,
-                VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4, 0)
-            .addInt32Values(preset.getPresetNumber())
-            .addInt32Values(preset.getBand())
-            .addInt32Values(preset.getChannel())
-            .addInt32Values(preset.getSubChannel())
-            .build();
         try {
-            mHal.getVehicleNetwork().setProperty(setPresetValue);
-        } catch (ServiceSpecificException e) {
+            mHal.set(VehicleProperty.RADIO_PRESET).to(new int[] {
+                    preset.getPresetNumber(),
+                    preset.getBand(),
+                    preset.getChannel(),
+                    preset.getSubChannel()});
+        } catch (PropertyTimeoutException e) {
             Log.e(CarLog.TAG_POWER, "cannot set to RADIO_PRESET", e);
             return false;
         }
@@ -217,7 +214,7 @@
 
     private boolean isValidPresetNumber(int presetNumber) {
         // Check for preset number.
-        if (presetNumber < VehicleNetworkConsts.VehicleRadioConsts.VEHICLE_RADIO_PRESET_MIN_VALUE
+        if (presetNumber < VehicleRadioConstants.VEHICLE_RADIO_PRESET_MIN_VALUE
             || presetNumber > mPresetCount) {
             Log.e(TAG, "Preset number not in range (1, " + mPresetCount + ") - " + presetNumber);
             return false;
@@ -238,10 +235,10 @@
     }
 
     private boolean handleRadioProperty(VehiclePropConfig property) {
-        switch (property.getProp()) {
-            case VehicleNetworkConsts.VEHICLE_PROPERTY_RADIO_PRESET:
+        switch (property.prop) {
+            case VehicleProperty.RADIO_PRESET:
                 // Extract the count of presets.
-                mPresetCount = property.getConfigArray(0);
+                mPresetCount = property.configArray.get(0);
                 Log.d(TAG, "Read presets count: " + mPresetCount);
                 return true;
             default:
@@ -251,15 +248,16 @@
     }
 
     private CarRadioEvent createCarRadioEvent(VehiclePropValue v) {
-        switch (v.getProp()) {
-            case VehicleNetworkConsts.VEHICLE_PROPERTY_RADIO_PRESET:
-                if (v.getInt32ValuesCount() != 4) {
-                    Log.e(TAG, "Returned a wrong array size: " + v.getInt32ValuesCount());
+        switch (v.prop) {
+            case VehicleProperty.RADIO_PRESET:
+                int vecSize = v.value.int32Values.size();
+                if (vecSize != 4) {
+                    Log.e(TAG, "Returned a wrong array size: " + vecSize);
                     return null;
                 }
 
                 Integer intValues[] = new Integer[4];
-                v.getInt32ValuesList().toArray(intValues);
+                v.value.int32Values.toArray(intValues);
 
                 // Verify the correctness of the values.
                 if (!isValidPresetNumber(intValues[0]) && !isValidBand(intValues[1])) {
diff --git a/service/src/com/android/car/hal/SensorHalService.java b/service/src/com/android/car/hal/SensorHalService.java
index c21bddd..d2c2714 100644
--- a/service/src/com/android/car/hal/SensorHalService.java
+++ b/service/src/com/android/car/hal/SensorHalService.java
@@ -16,21 +16,30 @@
 
 package com.android.car.hal;
 
+import static android.hardware.vehicle.V2_0.VehicleProperty.DRIVING_STATUS;
+import static android.hardware.vehicle.V2_0.VehicleProperty.FUEL_LEVEL_LOW;
+import static android.hardware.vehicle.V2_0.VehicleProperty.GEAR_SELECTION;
+import static android.hardware.vehicle.V2_0.VehicleProperty.NIGHT_MODE;
+import static android.hardware.vehicle.V2_0.VehicleProperty.PARKING_BRAKE_ON;
+import static android.hardware.vehicle.V2_0.VehicleProperty.PERF_VEHICLE_SPEED;
+import static java.lang.Integer.toHexString;
+
+import android.annotation.Nullable;
 import android.car.hardware.CarSensorEvent;
 import android.car.hardware.CarSensorManager;
-import android.os.ServiceSpecificException;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.hardware.vehicle.V2_0.VehiclePropertyAccess;
+import android.hardware.vehicle.V2_0.VehiclePropertyChangeMode;
 import android.util.Log;
 import android.util.SparseArray;
 
 import com.android.car.CarLog;
 import com.android.car.CarSensorEventFactory;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
 
 import java.io.PrintWriter;
+import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -41,13 +50,12 @@
 
     private static final boolean DBG_EVENTS = false;
 
-    private static final int SENSOR_TYPE_INVALD = -1;
+    private static final int SENSOR_TYPE_INVALID = -1;
 
     private final VehicleHal mHal;
     private boolean mIsReady = false;
     private SensorHalServiceBase.SensorListener mSensorListener;
-    private final SparseArray<VehiclePropConfig> mSensorToHalProperty =
-            new SparseArray<VehiclePropConfig>();
+    private final SparseArray<VehiclePropConfig> mSensorToHalProperty = new SparseArray<>();
 
     public SensorHalService(VehicleHal hal) {
         mHal = hal;
@@ -59,17 +67,14 @@
     }
 
     @Override
-    public synchronized List<VehiclePropConfig> takeSupportedProperties(
-            List<VehiclePropConfig> allProperties) {
-        LinkedList<VehiclePropConfig> supportedProperties = new LinkedList<VehiclePropConfig>();
+    public synchronized Collection<VehiclePropConfig> takeSupportedProperties(
+            Collection<VehiclePropConfig> allProperties) {
+        LinkedList<VehiclePropConfig> supportedProperties = new LinkedList<>();
         for (VehiclePropConfig halProperty : allProperties) {
-            int sensor = getSensorTypeFromHalProperty(halProperty.getProp());
-            if (sensor != SENSOR_TYPE_INVALD &&
-                halProperty.getChangeMode() !=
-                    VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC &&
-                (halProperty.getAccess() == VehiclePropAccess.VEHICLE_PROP_ACCESS_READ
-                    || halProperty.getAccess() ==
-                    VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE)) {
+            int sensor = getSensorTypeFromHalProperty(halProperty.prop);
+            if (sensor != SENSOR_TYPE_INVALID
+                    && halProperty.changeMode != VehiclePropertyChangeMode.STATIC
+                    && ((halProperty.access & VehiclePropertyAccess.READ) != 0)) {
                 supportedProperties.add(halProperty);
                 mSensorToHalProperty.append(sensor, halProperty);
             }
@@ -83,8 +88,8 @@
         mIsReady = false;
     }
 
-    // should be used only insidehandleHalEvents.
-    private final LinkedList<CarSensorEvent> mEventsToDispatch = new LinkedList<CarSensorEvent>();
+    // Should be used only inside handleHalEvents method.
+    private final LinkedList<CarSensorEvent> mEventsToDispatch = new LinkedList<>();
     @Override
     public void handleHalEvents(List<VehiclePropValue> values) {
         for (VehiclePropValue v : values) {
@@ -104,42 +109,42 @@
     }
 
     private CarSensorEvent createCarSensorEvent(VehiclePropValue v) {
-        int property = v.getProp();
+        int property = v.prop;
         int sensorType = getSensorTypeFromHalProperty(property);
-        if (sensorType == SENSOR_TYPE_INVALD) {
+        if (sensorType == SENSOR_TYPE_INVALID) {
             throw new RuntimeException("handleBooleanHalEvent no sensor defined for property " +
                     property);
         }
         switch (property) {
             // boolean
-            case VehicleNetworkConsts.VEHICLE_PROPERTY_NIGHT_MODE:
-            case VehicleNetworkConsts.VEHICLE_PROPERTY_PARKING_BRAKE_ON:
-            case VehicleNetworkConsts.VEHICLE_PROPERTY_FUEL_LEVEL_LOW: {
+            case VehicleProperty.NIGHT_MODE:
+            case VehicleProperty.PARKING_BRAKE_ON:
+            case VehicleProperty.FUEL_LEVEL_LOW: {
                 if (DBG_EVENTS) {
                     Log.i(CarLog.TAG_SENSOR, "boolean event, property:" +
-                            Integer.toHexString(property) + " value:" + v.getInt32Values(0));
+                            toHexString(property) + " value:" + v.value.int32Values.get(0));
                 }
-                return CarSensorEventFactory.createBooleanEvent(sensorType, v.getTimestamp(),
-                        v.getInt32Values(0) == 1);
+                return CarSensorEventFactory.createBooleanEvent(sensorType, v.timestamp,
+                        v.value.int32Values.get(0) == 1);
             }
             // int
-            case VehicleNetworkConsts.VEHICLE_PROPERTY_GEAR_SELECTION:
-            case VehicleNetworkConsts.VEHICLE_PROPERTY_DRIVING_STATUS: {
+            case VehicleProperty.GEAR_SELECTION:
+            case VehicleProperty.DRIVING_STATUS: {
                 if (DBG_EVENTS) {
                     Log.i(CarLog.TAG_SENSOR, "int event, property:" +
-                            Integer.toHexString(property) + " value:" + v.getInt32Values(0));
+                            toHexString(property) + " value:" + v.value.int32Values.get(0));
                 }
-                return CarSensorEventFactory.createIntEvent(sensorType, v.getTimestamp(),
-                        v.getInt32Values(0));
+                return CarSensorEventFactory.createIntEvent(sensorType, v.timestamp,
+                        v.value.int32Values.get(0));
             }
             // float
-            case VehicleNetworkConsts.VEHICLE_PROPERTY_PERF_VEHICLE_SPEED: {
+            case VehicleProperty.PERF_VEHICLE_SPEED: {
                 if (DBG_EVENTS) {
                     Log.i(CarLog.TAG_SENSOR, "float event, property:" +
-                            Integer.toHexString(property) + " value:" + v.getFloatValues(0));
+                            toHexString(property) + " value:" + v.value.floatValues.get(0));
                 }
-                return CarSensorEventFactory.createFloatEvent(sensorType, v.getTimestamp(),
-                        v.getFloatValues(0));
+                return CarSensorEventFactory.createFloatEvent(sensorType, v.timestamp,
+                        v.value.floatValues.get(0));
             }
         }
         return null;
@@ -171,10 +176,11 @@
             return false;
         }
         //TODO calculate sampling rate properly, bug: 32095903
-        mHal.subscribeProperty(this, config.getProp(), fixSamplingRateForProperty(config, rate));
+        mHal.subscribeProperty(this, config.prop, fixSamplingRateForProperty(config, rate));
         return true;
     }
 
+    @Nullable
     public CarSensorEvent getCurrentSensorValue(int sensorType) {
         VehiclePropConfig config;
         synchronized (this) {
@@ -182,23 +188,22 @@
         }
         if (config == null) {
             Log.e(CarLog.TAG_SENSOR, "sensor type not available 0x" +
-                    Integer.toHexString(sensorType));
+                    toHexString(sensorType));
             return null;
         }
         try {
-            VehiclePropValue value = mHal.getVehicleNetwork().getProperty(config.getProp());
+            VehiclePropValue value = mHal.get(config.prop);
             return createCarSensorEvent(value);
-        } catch (ServiceSpecificException e) {
-            Log.e(CarLog.TAG_SENSOR, "property not ready 0x" +
-                    Integer.toHexString(config.getProp()), e);
+        } catch (PropertyTimeoutException e) {
+            Log.e(CarLog.TAG_SENSOR, "property not ready 0x" + toHexString(config.prop), e);
             return null;
         }
     }
 
     private float fixSamplingRateForProperty(VehiclePropConfig prop, int carSensorManagerRate) {
-        switch (prop.getChangeMode()) {
-            case VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE:
-            case VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_SET:
+        switch (prop.changeMode) {
+            case VehiclePropertyChangeMode.ON_CHANGE:
+            case VehiclePropertyChangeMode.ON_SET:
                 return 0;
         }
         float rate = 1.0f;
@@ -213,11 +218,11 @@
             default: // fall back to default.
                 break;
         }
-        if (rate > prop.getSampleRateMax()) {
-            rate = prop.getSampleRateMax();
+        if (rate > prop.maxSampleRate) {
+            rate = prop.maxSampleRate;
         }
-        if (rate < prop.getSampleRateMin()) {
-            rate = prop.getSampleRateMin();
+        if (rate < prop.minSampleRate) {
+            rate = prop.minSampleRate;
         }
         return rate;
     }
@@ -228,7 +233,7 @@
         if (config == null) {
             return;
         }
-        mHal.unsubscribeProperty(this, config.getProp());
+        mHal.unsubscribeProperty(this, config.prop);
     }
 
     /**
@@ -239,20 +244,20 @@
      */
     static int getSensorTypeFromHalProperty(int halPropertyType) {
         switch (halPropertyType) {
-            case VehicleNetworkConsts.VEHICLE_PROPERTY_PERF_VEHICLE_SPEED:
+            case PERF_VEHICLE_SPEED:
                 return CarSensorManager.SENSOR_TYPE_CAR_SPEED;
-            case VehicleNetworkConsts.VEHICLE_PROPERTY_GEAR_SELECTION:
+            case GEAR_SELECTION:
                 return CarSensorManager.SENSOR_TYPE_GEAR;
-            case VehicleNetworkConsts.VEHICLE_PROPERTY_NIGHT_MODE:
+            case NIGHT_MODE:
                 return CarSensorManager.SENSOR_TYPE_NIGHT;
-            case VehicleNetworkConsts.VEHICLE_PROPERTY_PARKING_BRAKE_ON:
+            case PARKING_BRAKE_ON:
                 return CarSensorManager.SENSOR_TYPE_PARKING_BRAKE;
-            case VehicleNetworkConsts.VEHICLE_PROPERTY_DRIVING_STATUS:
+            case DRIVING_STATUS:
                 return CarSensorManager.SENSOR_TYPE_DRIVING_STATUS;
-            case VehicleNetworkConsts.VEHICLE_PROPERTY_FUEL_LEVEL_LOW:
+            case FUEL_LEVEL_LOW:
                 return CarSensorManager.SENSOR_TYPE_FUEL_LEVEL;
             default:
-                return SENSOR_TYPE_INVALD;
+                return SENSOR_TYPE_INVALID;
         }
     }
 
diff --git a/service/src/com/android/car/hal/SensorHalServiceBase.java b/service/src/com/android/car/hal/SensorHalServiceBase.java
index ab4dd6a..bf47f7b 100644
--- a/service/src/com/android/car/hal/SensorHalServiceBase.java
+++ b/service/src/com/android/car/hal/SensorHalServiceBase.java
@@ -17,11 +17,10 @@
 package com.android.car.hal;
 
 import android.car.hardware.CarSensorEvent;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
 
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-
-import java.io.PrintWriter;
+import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -44,7 +43,7 @@
         void onSensorEvents(List<CarSensorEvent> events);
     }
 
-    private final LinkedList<CarSensorEvent> mDispatchQ = new LinkedList<CarSensorEvent>();
+    private final LinkedList<CarSensorEvent> mDispatchQ = new LinkedList<>();
 
     public abstract void registerSensorListener(SensorListener listener);
 
@@ -83,9 +82,4 @@
         // sensor provider.
         throw new RuntimeException("should not be called");
     }
-
-    @Override
-    public List<VehiclePropConfig> takeSupportedProperties(List<VehiclePropConfig> allProperties) {
-        return null;
-    }
 }
diff --git a/service/src/com/android/car/hal/VehicleHal.java b/service/src/com/android/car/hal/VehicleHal.java
index 7c8d7be..182583d 100644
--- a/service/src/com/android/car/hal/VehicleHal.java
+++ b/service/src/com/android/car/hal/VehicleHal.java
@@ -16,6 +16,19 @@
 
 package com.android.car.hal;
 
+import static com.android.car.CarServiceUtils.toByteArray;
+import static com.android.car.CarServiceUtils.toFloatArray;
+import static com.android.car.CarServiceUtils.toIntArray;
+import static java.lang.Integer.toHexString;
+
+import android.annotation.CheckResult;
+import android.hardware.vehicle.V2_0.IVehicle;
+import android.hardware.vehicle.V2_0.IVehicleCallback;
+import android.hardware.vehicle.V2_0.VehicleAreaConfig;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehiclePropertyAccess;
+import android.hardware.vehicle.V2_0.VehiclePropertyChangeMode;
 import android.os.HandlerThread;
 import android.os.SystemClock;
 import android.util.ArraySet;
@@ -23,23 +36,17 @@
 import android.util.SparseArray;
 
 import com.android.car.CarLog;
-import com.android.car.vehiclenetwork.VehicleNetwork;
-import com.android.car.vehiclenetwork.VehicleNetwork.VehicleNetworkListener;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfigs;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValues;
 import com.android.internal.annotations.VisibleForTesting;
 
 import java.io.PrintWriter;
+import java.lang.ref.WeakReference;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.LinkedList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 /**
  * Abstraction for vehicle HAL. This class handles interface with native HAL and do basic parsing
@@ -47,39 +54,13 @@
  * implementation. It is responsibility of {@link HalServiceBase} to convert data to corresponding
  * Car*Service for Car*Manager API.
  */
-public class VehicleHal implements VehicleNetworkListener {
+public class VehicleHal extends IVehicleCallback.Stub {
 
     private static final boolean DBG = false;
 
-    static {
-        createInstance();
-    }
-
-    private static VehicleHal sInstance;
-
-    public static synchronized VehicleHal getInstance() {
-        if (sInstance == null) {
-            createInstance();
-        }
-        return sInstance;
-    }
-
-    private static synchronized void createInstance() {
-        sInstance = new VehicleHal();
-        // init is handled in a separate thread to prevent blocking the calling thread for too
-        // long.
-        sInstance.init();
-    }
-
-    public static synchronized void releaseInstance() {
-        if (sInstance != null) {
-            sInstance.release();
-            sInstance = null;
-        }
-    }
+    private static final int NO_AREA = -1;
 
     private final HandlerThread mHandlerThread;
-    private final VehicleNetwork mVehicleNetwork;
     private final SensorHalService mSensorHal;
     private final InfoHalService mInfoHal;
     private final AudioHalService mAudioHal;
@@ -89,16 +70,17 @@
     private final HvacHalService mHvacHal;
     private final InputHalService mInputHal;
     private final VendorExtensionHalService mVendorExtensionHal;
+    private final HalClient mHalClient;
 
     /** stores handler for each HAL property. Property events are sent to handler. */
-    private final SparseArray<HalServiceBase> mPropertyHandlers = new SparseArray<HalServiceBase>();
+    private final SparseArray<HalServiceBase> mPropertyHandlers = new SparseArray<>();
     /** This is for iterating all HalServices with fixed order. */
     private final HalServiceBase[] mAllServices;
-    private final ArraySet<Integer> mSubscribedProperties = new ArraySet<Integer>();
+    private final ArraySet<Integer> mSubscribedProperties = new ArraySet<>();
     private final HashMap<Integer, VehiclePropConfig> mAllProperties = new HashMap<>();
     private final HashMap<Integer, VehiclePropertyEventInfo> mEventLog = new HashMap<>();
 
-    private VehicleHal() {
+    public VehicleHal(IVehicle vehicle) {
         mHandlerThread = new HandlerThread("VEHICLE-HAL");
         mHandlerThread.start();
         // passing this should be safe as long as it is just kept and not used in constructor
@@ -109,7 +91,7 @@
         mCabinHal = new CabinHalService(this);
         mRadioHal = new RadioHalService(this);
         mHvacHal = new HvacHalService(this);
-        mInputHal = new InputHalService();
+        mInputHal = new InputHalService(this);
         mVendorExtensionHal = new VendorExtensionHalService(this);
         mAllServices = new HalServiceBase[] {
                 mPowerHal,
@@ -122,14 +104,15 @@
                 mInputHal,
                 mVendorExtensionHal
                 };
-        mVehicleNetwork = VehicleNetwork.createVehicleNetwork(this, mHandlerThread.getLooper());
+
+        mHalClient = new HalClient(vehicle, mHandlerThread.getLooper(), this /*IVehicleCallback*/);
     }
 
     /** Dummy version only for testing */
     @VisibleForTesting
     public VehicleHal(PowerHalService powerHal, SensorHalService sensorHal, InfoHalService infoHal,
             AudioHalService audioHal, CabinHalService cabinHal, RadioHalService radioHal,
-            HvacHalService hvacHal, VehicleNetwork vehicleNetwork) {
+            HvacHalService hvacHal, HalClient halClient) {
         mHandlerThread = null;
         mPowerHal = powerHal;
         mSensorHal = sensorHal;
@@ -141,24 +124,21 @@
         mInputHal = null;
         mVendorExtensionHal = null;
         mAllServices = null;
-        mVehicleNetwork = vehicleNetwork;
+        mHalClient = halClient;
     }
 
     public void init() {
-        VehiclePropConfigs properties = mVehicleNetwork.listProperties();
-        // needs copy as getConfigsList gives unmodifiable one.
-        List<VehiclePropConfig> propertiesList =
-                new LinkedList<VehiclePropConfig>(properties.getConfigsList());
+        Set<VehiclePropConfig> properties = new HashSet<>(mHalClient.getAllPropConfigs());
 
         synchronized (this) {
             // Create map of all properties
-            for (VehiclePropConfig p : propertiesList) {
-                mAllProperties.put(p.getProp(), p);
+            for (VehiclePropConfig p : properties) {
+                mAllProperties.put(p.prop, p);
             }
         }
 
         for (HalServiceBase service: mAllServices) {
-            List<VehiclePropConfig> taken = service.takeSupportedProperties(propertiesList);
+            Collection<VehiclePropConfig> taken = service.takeSupportedProperties(properties);
             if (taken == null) {
                 continue;
             }
@@ -167,10 +147,10 @@
             }
             synchronized (this) {
                 for (VehiclePropConfig p: taken) {
-                    mPropertyHandlers.append(p.getProp(), service);
+                    mPropertyHandlers.append(p.prop, service);
                 }
             }
-            propertiesList.removeAll(taken);
+            properties.removeAll(taken);
             service.init();
         }
     }
@@ -182,7 +162,7 @@
         }
         synchronized (this) {
             for (int p : mSubscribedProperties) {
-                mVehicleNetwork.unsubscribe(p);
+                mHalClient.unsubscribe(p);
             }
             mSubscribedProperties.clear();
             mAllProperties.clear();
@@ -228,19 +208,20 @@
 
     private void assertServiceOwnerLocked(HalServiceBase service, int property) {
         if (service != mPropertyHandlers.get(property)) {
-            throw new IllegalArgumentException("Property 0x" + Integer.toHexString(property)
+            throw new IllegalArgumentException("Property 0x" + toHexString(property)
                     + " is not owned by service: " + service);
         }
     }
 
     /**
      * Subscribe given property. Only Hal service owning the property can subscribe it.
-     * @param service
-     * @param property
-     * @param samplingRateHz
      */
     public void subscribeProperty(HalServiceBase service, int property,
             float samplingRateHz) throws IllegalArgumentException {
+        if (DBG) {
+            Log.i(CarLog.TAG_HAL, "subscribeProperty, service:" + service
+                    + ", property: 0x" + toHexString(property));
+        }
         VehiclePropConfig config;
         synchronized (this) {
             config = mAllProperties.get(property);
@@ -254,13 +235,17 @@
                 assertServiceOwnerLocked(service, property);
                 mSubscribedProperties.add(property);
             }
-            mVehicleNetwork.subscribe(property, samplingRateHz);
+            mHalClient.subscribe(property, samplingRateHz);
         } else {
             Log.e(CarLog.TAG_HAL, "Cannot subscribe to property: " + property);
         }
     }
 
     public void unsubscribeProperty(HalServiceBase service, int property) {
+        if (DBG) {
+            Log.i(CarLog.TAG_HAL, "unsubscribeProperty, service:" + service
+                    + ", property: 0x" + toHexString(property));
+        }
         VehiclePropConfig config;
         synchronized (this) {
             config = mAllProperties.get(property);
@@ -273,45 +258,116 @@
                 assertServiceOwnerLocked(service, property);
                 mSubscribedProperties.remove(property);
             }
-            mVehicleNetwork.unsubscribe(property);
+            mHalClient.unsubscribe(property);
         } else {
             Log.e(CarLog.TAG_HAL, "Cannot unsubscribe property: " + property);
         }
     }
 
-    public VehicleNetwork getVehicleNetwork() {
-        return mVehicleNetwork;
+    public boolean isPropertySupported(int propertyId) {
+        return mAllProperties.containsKey(propertyId);
     }
 
-    public static boolean isPropertySubscribable(VehiclePropConfig config) {
-        if ((config.getAccess() & VehiclePropAccess.VEHICLE_PROP_ACCESS_READ) == 0 ||
-                (config.getChangeMode() ==
-                VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC)) {
+    public Collection<VehiclePropConfig> getAllPropConfigs() {
+        return mAllProperties.values();
+    }
+
+    public VehiclePropValue get(int propertyId) throws PropertyTimeoutException {
+        return get(propertyId, NO_AREA);
+    }
+
+    public VehiclePropValue get(int propertyId, int areaId) throws PropertyTimeoutException {
+        Log.i(CarLog.TAG_HAL, "get, property: 0x" + toHexString(propertyId)
+                + ", areaId: 0x" + toHexString(areaId));
+        VehiclePropValue propValue = new VehiclePropValue();
+        propValue.prop = propertyId;
+        propValue.areaId = areaId;
+        return mHalClient.getValue(propValue);
+    }
+
+    public <T> T get(Class clazz, int propertyId) throws PropertyTimeoutException {
+        return get(clazz, createPropValue(propertyId, NO_AREA));
+    }
+
+    public <T> T get(Class clazz, int propertyId, int areaId) throws PropertyTimeoutException {
+        return get(clazz, createPropValue(propertyId, areaId));
+    }
+
+    @SuppressWarnings("unchecked")
+    public <T> T get(Class clazz, VehiclePropValue requestedPropValue)
+            throws PropertyTimeoutException {
+        VehiclePropValue propValue = mHalClient.getValue(requestedPropValue);
+        if (clazz == Integer.class || clazz == int.class) {
+            return (T) propValue.value.int32Values.get(0);
+        } else if (clazz == Boolean.class || clazz == boolean.class) {
+            return (T) Boolean.valueOf(propValue.value.int32Values.get(0) == 1);
+        } else if (clazz == Float.class || clazz == float.class) {
+            return (T) propValue.value.floatValues.get(0);
+        } else if (clazz == Integer[].class) {
+            Integer[] intArray = new Integer[propValue.value.int32Values.size()];
+            return (T) propValue.value.int32Values.toArray(intArray);
+        } else if (clazz == Float[].class) {
+            Float[] floatArray = new Float[propValue.value.floatValues.size()];
+            return (T) propValue.value.floatValues.toArray(floatArray);
+        } else if (clazz == int[].class) {
+            return (T) toIntArray(propValue.value.int32Values);
+        } else if (clazz == float[].class) {
+            return (T) toFloatArray(propValue.value.floatValues);
+        } else if (clazz == byte[].class) {
+            return (T) toByteArray(propValue.value.bytes);
+        } else if (clazz == String.class) {
+            return (T) propValue.value.stringValue;
+        } else {
+            throw new IllegalArgumentException("Unexpected type: " + clazz);
+        }
+    }
+
+    public VehiclePropValue get(VehiclePropValue requestedPropValue)
+            throws PropertyTimeoutException {
+        return mHalClient.getValue(requestedPropValue);
+    }
+
+    void set(VehiclePropValue propValue) throws PropertyTimeoutException {
+        mHalClient.setValue(propValue);
+    }
+
+    @CheckResult
+    VehiclePropValueSetter set(int propId) {
+        return new VehiclePropValueSetter(mHalClient, propId, NO_AREA);
+    }
+
+    @CheckResult
+    VehiclePropValueSetter set(int propId, int areaId) {
+        return new VehiclePropValueSetter(mHalClient, propId, areaId);
+    }
+
+    static boolean isPropertySubscribable(VehiclePropConfig config) {
+        if ((config.access & VehiclePropertyAccess.READ) == 0 ||
+                (config.changeMode == VehiclePropertyChangeMode.STATIC)) {
             return false;
         }
         return true;
     }
 
-    public static void dumpProperties(PrintWriter writer, Collection<VehiclePropConfig> configs) {
+    static void dumpProperties(PrintWriter writer, Collection<VehiclePropConfig> configs) {
         for (VehiclePropConfig config : configs) {
-            writer.println("property " +
-                    VehicleNetworkConsts.getVehiclePropertyName(config.getProp()));
+            writer.println(String.format("property 0x%x", config.prop));
         }
     }
 
-    private final ArraySet<HalServiceBase> mServicesToDispatch = new ArraySet<HalServiceBase>();
+    private final ArraySet<HalServiceBase> mServicesToDispatch = new ArraySet<>();
 
     @Override
-    public void onVehicleNetworkEvents(VehiclePropValues values) {
+    public void onPropertyEvent(ArrayList<VehiclePropValue> propValues) {
         synchronized (this) {
-            for (VehiclePropValue v : values.getValuesList()) {
-                HalServiceBase service = mPropertyHandlers.get(v.getProp());
+            for (VehiclePropValue v : propValues) {
+                HalServiceBase service = mPropertyHandlers.get(v.prop);
                 service.getDispatchList().add(v);
                 mServicesToDispatch.add(service);
-                VehiclePropertyEventInfo info = mEventLog.get(v.getProp());
+                VehiclePropertyEventInfo info = mEventLog.get(v.prop);
                 if (info == null) {
                     info = new VehiclePropertyEventInfo(v);
-                    mEventLog.put(v.getProp(), info);
+                    mEventLog.put(v.prop, info);
                 } else {
                     info.addNewEvent(v);
                 }
@@ -330,19 +386,12 @@
     }
 
     @Override
-    public void onHalError(int errorCode, int property, int operation) {
-        Log.e(CarLog.TAG_HAL, "onHalError, errorCode:" + errorCode +
-                " property:0x" + Integer.toHexString(property) +
-                " operation:" + operation);
+    public void onPropertySetError(int errorCode, int propId, int areaId) {
+        Log.e(CarLog.TAG_HAL, String.format("onPropertySetError, errorCode: %d, prop: 0x%x, "
+                + "area: 0x%x", errorCode, propId, areaId));
         // TODO propagate per property error to HAL services and handle global error, bug:32068464
     }
 
-    @Override
-    public void onHalRestart(boolean inMocking) {
-        Log.e(CarLog.TAG_HAL, "onHalRestart, inMocking:" + inMocking);
-        // TODO restart things as other components started mocking. For now, ignore., bug:32068464
-    }
-
     public void dump(PrintWriter writer) {
         writer.println("**dump HAL services**");
         for (HalServiceBase service: mAllServices) {
@@ -354,30 +403,26 @@
             configList = new ArrayList<>(mAllProperties.values());
         }
 
+
         writer.println("**All properties**");
         for (VehiclePropConfig config : configList) {
-            StringBuilder builder = new StringBuilder();
-            builder.append("Property:0x").append(Integer.toHexString(config.getProp()));
-            builder.append(",access:0x" + Integer.toHexString(config.getAccess()));
-            builder.append(",changeMode:0x" + Integer.toHexString(config.getChangeMode()));
-            builder.append(",valueType:0x" + Integer.toHexString(config.getValueType()));
-            builder.append(",permission:0x" + Integer.toHexString(config.getPermissionModel()));
-            builder.append(",zone:0x" + Integer.toHexString(
-                config.hasZones() ? config.getZones() : 0));
-            builder.append(",config:0x" + Integer.toHexString(config.getConfigArray(0)));
-            builder.append(",fs min:" + config.getSampleRateMin());
-            builder.append(",fs max:").append(config.getSampleRateMax());
-            for (int i = 0; i < config.getFloatMaxsCount(); i++) {
-                builder.append(",v min:" + config.getFloatMins(i));
-                builder.append(",v max:" + config.getFloatMaxs(i));
-            }
-            for (int i = 0; i < config.getInt32MaxsCount(); i++) {
-                builder.append(",v min:" + config.getInt32Mins(i));
-                builder.append(",v max:" + config.getInt32Maxs(i));
-            }
-            for (int i = 0; i < config.getInt64MaxsCount(); i++) {
-                builder.append(",v min:" + config.getInt64Mins(i));
-                builder.append(",v max:" + config.getInt64Maxs(i));
+            StringBuilder builder = new StringBuilder()
+                    .append("Property:0x").append(toHexString(config.prop))
+                    .append(",access:0x").append(toHexString(config.access))
+                    .append(",changeMode:0x").append(toHexString(config.changeMode))
+                    .append(",permission:0x").append(toHexString(config.permissionModel))
+                    .append(",areas:0x").append(toHexString(config.supportedAreas))
+                    .append(",config:0x").append(Arrays.toString(config.configArray.toArray()))
+                    .append(",fs min:").append(config.minSampleRate)
+                    .append(",fs max:").append(config.maxSampleRate);
+            for (VehicleAreaConfig area : config.areaConfigs) {
+                builder.append(",areaId :").append(toHexString(area.areaId))
+                        .append(",f min:").append(area.minFloatValue)
+                        .append(",f max:").append(area.maxFloatValue)
+                        .append(",i min:").append(area.minInt32Value)
+                        .append(",i max:").append(area.maxInt32Value)
+                        .append(",i64 min:").append(area.minInt64Value)
+                        .append(",i64 max:").append(area.maxInt64Value);
             }
             writer.println(builder.toString());
         }
@@ -396,35 +441,6 @@
         }
     }
 
-    public static String dumpVehiclePropValue(VehiclePropValue value) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("Property:0x" + Integer.toHexString(value.getProp()));
-        sb.append(",timestamp:" + value.getTimestamp());
-        sb.append(",value type:0x" + Integer.toHexString(value.getValueType()));
-        sb.append(",zone:0x" + Integer.toHexString(value.getZone()));
-        if (value.getInt32ValuesCount() > 0) {
-            sb.append(",int32 values:");
-            for (int i = 0; i < value.getInt32ValuesCount(); i++) {
-                sb.append("," + value.getInt32Values(i));
-            }
-        }
-        if (value.hasInt64Value()) {
-            sb.append(",int64 value:" + value.getInt64Value());
-        }
-        if (value.getFloatValuesCount() > 0) {
-            sb.append(",float values:");
-            for (int i = 0; i < value.getFloatValuesCount(); i++) {
-                sb.append("," + value.getFloatValues(i));
-            }
-        }
-        if (value.hasStringValue()) {
-            sb.append(",string value:" + value.getStringValue());
-        }
-        if (value.hasBytesValue()) {
-            sb.append(",bytes value:" + value.getBytesValue());
-        }
-        return sb.toString();
-    }
     private static class VehiclePropertyEventInfo {
         private int eventCount;
         private VehiclePropValue lastEvent;
@@ -439,4 +455,76 @@
             lastEvent = event;
         }
     }
+
+    final class VehiclePropValueSetter {
+        final WeakReference<HalClient> mClient;
+        final VehiclePropValue mPropValue;
+
+        private VehiclePropValueSetter(HalClient client, int propId, int areaId) {
+            mClient = new WeakReference<>(client);
+            mPropValue = new VehiclePropValue();
+            mPropValue.prop = propId;
+            mPropValue.areaId = areaId;
+        }
+
+        void to(boolean value) throws PropertyTimeoutException {
+            to(value ? 1 : 0);
+        }
+
+        void to(int value) throws PropertyTimeoutException {
+            mPropValue.value.int32Values.add(value);
+            submit();
+        }
+
+        void to(int[] values) throws PropertyTimeoutException {
+            for (int value : values) {
+                mPropValue.value.int32Values.add(value);
+            }
+            submit();
+        }
+
+        void to(Collection<Integer> values) throws PropertyTimeoutException {
+            mPropValue.value.int32Values.addAll(values);
+            submit();
+        }
+
+        void submit() throws PropertyTimeoutException {
+            HalClient client =  mClient.get();
+            if (client != null) {
+                Log.i(CarLog.TAG_HAL, "set, property: 0x" + toHexString(mPropValue.prop)
+                        + ", areaId: 0x" + toHexString(mPropValue.areaId));
+                client.setValue(mPropValue);
+            }
+        }
+    }
+
+    private static String dumpVehiclePropValue(VehiclePropValue value) {
+        final int MAX_BYTE_SIZE = 20;
+
+        StringBuilder sb = new StringBuilder()
+                .append("Property:0x").append(toHexString(value.prop))
+                .append(",timestamp:").append(value.timestamp)
+                .append(",zone:0x").append(toHexString(value.areaId))
+                .append(",floatValues: ").append(Arrays.toString(value.value.floatValues.toArray()))
+                .append(",int32Values: ").append(Arrays.toString(value.value.int32Values.toArray()))
+                .append(",int64Values: ")
+                .append(Arrays.toString(value.value.int64Values.toArray()));
+
+        if (value.value.bytes.size() > MAX_BYTE_SIZE) {
+            Object[] bytes = Arrays.copyOf(value.value.bytes.toArray(), MAX_BYTE_SIZE);
+            sb.append(",bytes: ").append(Arrays.toString(bytes));
+        } else {
+            sb.append(",bytes: ").append(Arrays.toString(value.value.bytes.toArray()));
+        }
+        sb.append(",string: ").append(value.value.stringValue);
+
+        return sb.toString();
+    }
+
+    private static VehiclePropValue createPropValue(int propId, int areaId) {
+        VehiclePropValue propValue = new VehiclePropValue();
+        propValue.prop = propId;
+        propValue.areaId = areaId;
+        return propValue;
+    }
 }
diff --git a/service/src/com/android/car/hal/VendorExtensionHalService.java b/service/src/com/android/car/hal/VendorExtensionHalService.java
index adcc754..0630bae 100644
--- a/service/src/com/android/car/hal/VendorExtensionHalService.java
+++ b/service/src/com/android/car/hal/VendorExtensionHalService.java
@@ -16,13 +16,13 @@
 
 package com.android.car.hal;
 
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
+import android.hardware.vehicle.V2_0.VehiclePropertyGroup;
 
 /**
  * Implementation of {@link HalServiceBase} that responsible for custom properties that were defined
  * by OEMs.
  */
-/*package*/ class VendorExtensionHalService extends PropertyHalServiceBase {
+public class VendorExtensionHalService extends PropertyHalServiceBase {
 
     private final static String TAG = VendorExtensionHalService.class.getSimpleName();
     private final static boolean DEBUG = false;
@@ -33,13 +33,15 @@
 
     @Override
     protected int managerToHalPropId(int managerPropId) {
-        return VehiclePropValueUtil.isCustomProperty(managerPropId)
-                ? managerPropId : NOT_SUPPORTED_PROPERTY;
+        return isVendorProperty(managerPropId) ? managerPropId : NOT_SUPPORTED_PROPERTY;
     }
 
     @Override
     protected int halToManagerPropId(int halPropId) {
-        return VehiclePropValueUtil.isCustomProperty(halPropId)
-                ? halPropId : NOT_SUPPORTED_PROPERTY;
+        return isVendorProperty(halPropId) ? halPropId : NOT_SUPPORTED_PROPERTY;
+    }
+
+    private static boolean isVendorProperty(int property) {
+        return (property & VehiclePropertyGroup.MASK) == VehiclePropertyGroup.VENDOR;
     }
 }
\ No newline at end of file
diff --git a/service/src/com/android/car/pm/CarPackageManagerService.java b/service/src/com/android/car/pm/CarPackageManagerService.java
index 9f73b61..8a3bd94 100644
--- a/service/src/com/android/car/pm/CarPackageManagerService.java
+++ b/service/src/com/android/car/pm/CarPackageManagerService.java
@@ -31,8 +31,8 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.ServiceInfo;
 import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
 import android.content.pm.Signature;
 import android.content.res.Resources;
 import android.os.Handler;
@@ -54,7 +54,6 @@
 import com.android.internal.annotations.GuardedBy;
 
 import java.io.PrintWriter;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
diff --git a/tests/EmbeddedKitchenSinkApp/Android.mk b/tests/EmbeddedKitchenSinkApp/Android.mk
index 1aba434..665d888 100644
--- a/tests/EmbeddedKitchenSinkApp/Android.mk
+++ b/tests/EmbeddedKitchenSinkApp/Android.mk
@@ -34,7 +34,10 @@
 
 LOCAL_DEX_PREOPT := false
 
-LOCAL_STATIC_JAVA_LIBRARIES += car-systemtest
+LOCAL_STATIC_JAVA_LIBRARIES += \
+        android.hardware.vehicle@2.0-java-static \
+        vehicle-hal-support-lib \
+        car-service-lib-for-test \
 
 LOCAL_JAVA_LIBRARIES += android.car
 
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/CarEmulator.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/CarEmulator.java
index 0cdcc32..9875049 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/CarEmulator.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/CarEmulator.java
@@ -16,365 +16,269 @@
 
 package com.google.android.car.kitchensink;
 
+import static android.hardware.vehicle.V2_0.VehicleProperty.AUDIO_VOLUME_LIMIT;
+
 import android.car.Car;
-import android.car.test.VehicleHalEmulator.VehicleHalPropertyHandler;
-import android.car.test.VehicleHalEmulator;
+import android.content.Context;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusIndex;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusRequest;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusState;
+import android.hardware.vehicle.V2_0.VehicleAudioVolumeIndex;
+import android.hardware.vehicle.V2_0.VehicleAudioVolumeLimitIndex;
+import android.hardware.vehicle.V2_0.VehicleHwKeyInputAction;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.hardware.vehicle.V2_0.VehiclePropertyAccess;
 import android.os.SystemClock;
 import android.util.SparseIntArray;
-import android.view.KeyEvent;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusIndex;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusRequest;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusState;
-import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePermissionModel;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
+import com.google.android.collect.Lists;
+
+import com.android.car.ICarImpl;
+import com.android.car.SystemInterface;
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
+import com.android.car.vehiclehal.test.MockedVehicleHal;
+import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
+import com.android.car.vehiclehal.test.VehiclePropConfigBuilder;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 public class CarEmulator {
 
     private final Car mCar;
-    private final VehicleHalEmulator mHalEmulator;
+    private final MockedVehicleHal mHalEmulator;
 
     private final AudioFocusPropertyHandler mAudioFocusPropertyHandler =
             new AudioFocusPropertyHandler();
-    private final AudioStreamStatePropertyHandler mAudioStreamStatePropertyHandler =
-            new AudioStreamStatePropertyHandler();
     private final AudioVolumeLimitPropertyHandler mAudioVolumeLimitPropertyHandler =
             new AudioVolumeLimitPropertyHandler();
-    private final SingleChannelVolumeHandler mVolumeHandler;
-    private static final int STREAM_COUNT = 2;
-    private static final int[] STREAM_MAX_VOLUME = {30, 30};
-    private static final int[] STREAM_MIN_VOLUME = {0, 0};
 
-    public CarEmulator(Car car) {
-        mCar = car;
-        mHalEmulator = new VehicleHalEmulator(car);
-        List<Integer> maxVols = new ArrayList<>();
-        List<Integer> minVols = new ArrayList<>();
-        for(int i = 0; i < STREAM_COUNT; i++) {
-            maxVols.add(STREAM_MAX_VOLUME[i]);
-            minVols.add(STREAM_MIN_VOLUME[i]);
-        }
-        mVolumeHandler = new SingleChannelVolumeHandler(minVols, maxVols);
-        int zones = (1<<maxVols.size()) - 1;
+    private static final Integer[] STREAM_MAX_VOLUME = {30, 30};
+
+    public static CarEmulator create(Context context) {
+        CarEmulator emulator = new CarEmulator(context);
+        emulator.init();
+        return emulator;
+    }
+
+    private CarEmulator(Context context) {
+        mHalEmulator = new MockedVehicleHal();
+        ICarImpl carService = new ICarImpl(context, mHalEmulator,
+                SystemInterface.getDefault(context));
+        mCar = new Car(context, carService, null /* Handler */);
+    }
+
+    public Car getCar() {
+        return mCar;
+    }
+
+    private void init() {
+        final int streamCount = STREAM_MAX_VOLUME.length;
+        SingleChannelVolumeHandler volumeHandler = new SingleChannelVolumeHandler(streamCount);
+
+        int supportedStreams = (1 << streamCount) - 1;  // A bitwise mask of supported streams.
+
+        List<Integer> audioVolumeConfigArray = Lists.newArrayList(supportedStreams, 0, 0, 0);
+        audioVolumeConfigArray.addAll(Arrays.asList(STREAM_MAX_VOLUME));
 
         mHalEmulator.addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
+                VehiclePropConfigBuilder.newBuilder(VehicleProperty.AUDIO_FOCUS).build(),
                 mAudioFocusPropertyHandler);
+        //TODO(b/32665590): no internal properties in Vehicle Hal 2.0
+//        mHalEmulator.addProperty(
+//                VehiclePropConfigUtil.getBuilder(
+//                        INTERNAL_AUDIO_STREAM_STATE,
+//                        VehiclePropertyAccess.READ_WRITE,
+//                        VehiclePropertyChangeMode.ON_CHANGE,
+//                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2,
+//                        VehiclePermissionModel.SYSTEM_APP_ONLY,
+//                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
+//                        NoOpPropertyHandler);
         mHalEmulator.addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_INTERNAL_AUDIO_STREAM_STATE,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                        mAudioStreamStatePropertyHandler);
+                VehiclePropConfigBuilder.newBuilder(VehicleProperty.AUDIO_VOLUME)
+                        .setConfigArray(audioVolumeConfigArray)
+                        .build(),
+                volumeHandler);
         mHalEmulator.addProperty(
-                VehiclePropConfigUtil.getBuilder(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC3,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/,
-                        maxVols, minVols).setZones(zones).build(),
-                mVolumeHandler);
-        mHalEmulator.addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
+                VehiclePropConfigBuilder.newBuilder(VehicleProperty.AUDIO_VOLUME_LIMIT).build(),
                 mAudioVolumeLimitPropertyHandler);
 
         mHalEmulator.addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
+                VehiclePropConfigBuilder.newBuilder(VehicleProperty.HW_KEY_INPUT)
+                        .setAccess(VehiclePropertyAccess.READ)
+                        .build(),
                 mHWKeyHandler);
     }
 
     public void start() {
-        mHalEmulator.start();
     }
 
     public void stop() {
-        mHalEmulator.stop();
     }
 
     public void setAudioFocusControl(boolean reject) {
         mAudioFocusPropertyHandler.setAudioFocusControl(reject);
     }
 
-    public void injectVolumeKey(boolean volUp) {
-        int[] values = {
-                VehicleNetworkConsts.VehicleHwKeyInputAction.VEHICLE_HW_KEY_INPUT_ACTION_DOWN,
-                volUp ? KeyEvent.KEYCODE_VOLUME_UP : KeyEvent.KEYCODE_VOLUME_DOWN, 0, 0 };
-
-        VehiclePropValue injectValue = VehiclePropValueUtil.createIntVectorValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT, values,
-                SystemClock.elapsedRealtimeNanos());
-
-        mHalEmulator.injectEvent(injectValue);
-
-        int[] upValues = {
-                VehicleNetworkConsts.VehicleHwKeyInputAction.VEHICLE_HW_KEY_INPUT_ACTION_UP,
-                volUp ? KeyEvent.KEYCODE_VOLUME_UP : KeyEvent.KEYCODE_VOLUME_DOWN, 0, 0 };
-
-        injectValue = VehiclePropValueUtil.createIntVectorValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT, upValues,
-                SystemClock.elapsedRealtimeNanos());
+    public void injectKey(int keyCode, int action) {
+        VehiclePropValue injectValue =
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.HW_KEY_INPUT)
+                        .setTimestamp()
+                        .addIntValue(action, keyCode, 0, 0)
+                        .build();
 
         mHalEmulator.injectEvent(injectValue);
     }
 
-    private final VehicleHalEmulator.VehicleHalPropertyHandler mHWKeyHandler =
-            new VehicleHalEmulator.VehicleHalPropertyHandler() {
-                @Override
-                public void onPropertySet(VehiclePropValue value) {
-                }
+    public void injectKey(int keyCode) {
+        injectKey(keyCode, VehicleHwKeyInputAction.ACTION_DOWN);
+        injectKey(keyCode, VehicleHwKeyInputAction.ACTION_UP);
+    }
 
+    private final VehicleHalPropertyHandler mHWKeyHandler =
+            new VehicleHalPropertyHandler() {
                 @Override
                 public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-                    int[] values = {0, 0, 0, 0 };
-                    return VehiclePropValueUtil.createIntVectorValue(
-                            VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT, values,
-                            SystemClock.elapsedRealtimeNanos());
-                }
+                    return VehiclePropValueBuilder.newBuilder(VehicleProperty.HW_KEY_INPUT)
+                            .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                            .addIntValue(0, 0, 0, 0)
+                            .build();
 
-                @Override
-                public void onPropertySubscribe(int property, float sampleRate, int zones) {
-                }
-
-                @Override
-                public void onPropertyUnsubscribe(int property) {
                 }
             };
 
     private class AudioFocusPropertyHandler implements VehicleHalPropertyHandler {
         private boolean mRejectFocus;
-        private int mCurrentFocusState = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS;
+        private int mCurrentFocusState = VehicleAudioFocusState.STATE_LOSS;
         private int mCurrentFocusStreams = 0;
         private int mCurrentFocusExtState = 0;
 
-        public void setAudioFocusControl(boolean reject) {
-            VehiclePropValue injectValue = null;
+        void setAudioFocusControl(boolean reject) {
+            boolean inject = false;
             synchronized (this) {
                 if (reject) {
                     if (!mRejectFocus) {
-                        mCurrentFocusState = VehicleAudioFocusState
-                                .VEHICLE_AUDIO_FOCUS_STATE_LOSS_TRANSIENT_EXLCUSIVE;
+                        mCurrentFocusState = VehicleAudioFocusState.STATE_LOSS_TRANSIENT_EXLCUSIVE;
                         mCurrentFocusStreams = 0;
                         mCurrentFocusExtState = 0;
                         mRejectFocus = true;
-                        int[] values = { mCurrentFocusState, mCurrentFocusStreams,
-                                mCurrentFocusExtState, 0};
-                        injectValue = VehiclePropValueUtil.createIntVectorValue(
-                                VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, values,
-                                SystemClock.elapsedRealtimeNanos());
+                        inject = true;
                     }
                 } else {
                     if (mRejectFocus) {
-                        mCurrentFocusState = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS;
+                        mCurrentFocusState = VehicleAudioFocusState.STATE_LOSS;
                         mCurrentFocusStreams = 0;
                         mCurrentFocusExtState = 0;
-                        int[] values = { mCurrentFocusState, mCurrentFocusStreams,
-                                mCurrentFocusExtState, 0};
-                        injectValue = VehiclePropValueUtil.createIntVectorValue(
-                                VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, values,
-                                SystemClock.elapsedRealtimeNanos());
+                        inject = true;
                     }
                     mRejectFocus = false;
                 }
             }
-            if (injectValue != null) {
-                mHalEmulator.injectEvent(injectValue);
+
+            if (inject) {
+                injectCurrentStateToHal();
             }
         }
 
         @Override
         public void onPropertySet(VehiclePropValue value) {
-            VehiclePropValue injectValue = null;
             synchronized (this) {
-                if (mRejectFocus) {
-                    int[] values = { mCurrentFocusState, mCurrentFocusStreams,
-                            mCurrentFocusExtState, 0};
-                    injectValue = VehiclePropValueUtil.createIntVectorValue(
-                            VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, values,
-                            SystemClock.elapsedRealtimeNanos());
-                } else {
-                    int request = value.getInt32Values(
-                            VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_FOCUS);
-                    int requestedStreams = value.getInt32Values(
-                            VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_STREAMS);
-                    int requestedExtFocus = value.getInt32Values(
-                            VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_EXTERNAL_FOCUS_STATE);
-                    int response = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS;
+                if (!mRejectFocus) {
+                    ArrayList<Integer> v = value.value.int32Values;
+
+                    int request = v.get(VehicleAudioFocusIndex.FOCUS);
+                    int requestedStreams = v.get(VehicleAudioFocusIndex.STREAMS);
+                    int requestedExtFocus = v.get(VehicleAudioFocusIndex.EXTERNAL_FOCUS_STATE);
+                    int response = VehicleAudioFocusState.STATE_LOSS;
                     switch (request) {
-                        case VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN:
-                            response = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN;
+                        case VehicleAudioFocusRequest.REQUEST_GAIN:
+                            response = VehicleAudioFocusState.STATE_GAIN;
                             break;
-                        case VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT:
-                        case VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK:
+                        case VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT:
+                        case VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT_MAY_DUCK:
                             response =
-                                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT;
+                                VehicleAudioFocusState.STATE_GAIN_TRANSIENT;
                             break;
-                        case VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE:
-                            response = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS;
+                        case VehicleAudioFocusRequest.REQUEST_RELEASE:
+                            response = VehicleAudioFocusState.STATE_LOSS;
                             break;
                     }
                     mCurrentFocusState = response;
                     mCurrentFocusStreams = requestedStreams;
                     mCurrentFocusExtState = requestedExtFocus;
-                    int[] values = { mCurrentFocusState, mCurrentFocusStreams,
-                            mCurrentFocusExtState, 0};
-                    injectValue = VehiclePropValueUtil.createIntVectorValue(
-                            VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, values,
-                            SystemClock.elapsedRealtimeNanos());
                 }
             }
-            if (injectValue != null) {
-                mHalEmulator.injectEvent(injectValue);
-            }
+            injectCurrentStateToHal();
+        }
+
+        private void injectCurrentStateToHal() {
+            mHalEmulator.injectEvent(VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_FOCUS)
+                    .setTimestamp()
+                    .addIntValue(mCurrentFocusState, mCurrentFocusStreams, mCurrentFocusExtState, 0)
+                    .build());
         }
 
         @Override
         public synchronized VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            int[] values = { mCurrentFocusState, mCurrentFocusStreams,
-                    mCurrentFocusExtState, 0};
-            return VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, values,
-                    SystemClock.elapsedRealtimeNanos());
-        }
-
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-        }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) {
-        }
-    }
-
-    private class AudioStreamStatePropertyHandler implements VehicleHalPropertyHandler {
-        @Override
-        public void onPropertySet(VehiclePropValue value) {
-        }
-
-        @Override
-        public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            //ignore
-            return null;
-        }
-
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-        }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) {
+            return VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_FOCUS)
+                    .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                    .addIntValue(mCurrentFocusState, mCurrentFocusStreams, mCurrentFocusExtState, 0)
+                    .build();
         }
     }
 
     private static class AudioVolumeLimitPropertyHandler implements VehicleHalPropertyHandler {
         @Override
-        public void onPropertySet(VehiclePropValue value) {
-        }
-
-        @Override
         public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            int stream = value.getInt32Values(
-                    VehicleNetworkConsts.VehicleAudioVolumeLimitIndex
-                            .VEHICLE_AUDIO_VOLUME_LIMIT_INDEX_STREAM);
+            int stream = value.value.int32Values.get(VehicleAudioVolumeLimitIndex.STREAM);
 
-            int[] values = {stream, 20};
-            VehiclePropValue propValue = VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME_LIMIT, values,
-                    SystemClock.elapsedRealtimeNanos());
-            return propValue;
-        }
-
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-        }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) {
+            return VehiclePropValueBuilder.newBuilder(AUDIO_VOLUME_LIMIT)
+                    .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                    .addIntValue(stream, 20)
+                    .build();
         }
     }
 
-    private class SingleChannelVolumeHandler implements
-            VehicleHalEmulator.VehicleHalPropertyHandler {
-        private final List<Integer> mMins;
-        private final List<Integer> mMaxs;
+    private class SingleChannelVolumeHandler implements VehicleHalPropertyHandler {
         private final SparseIntArray mCurrent;
 
-        public SingleChannelVolumeHandler(List<Integer> mins, List<Integer> maxs) {
-            mMins = mins;
-            mMaxs = maxs;
-            mCurrent = new SparseIntArray(mMins.size());
-            // initialize the vol to be the min volume.
-            for (int i = 0; i < mMins.size(); i++) {
-                mCurrent.put(i, mMins.get(i));
+        SingleChannelVolumeHandler(int streamCount) {
+            mCurrent = new SparseIntArray(streamCount);
+            // Initialize the vol to be the min (mute) volume.
+            for (int i = 0; i < streamCount; i++) {
+                mCurrent.put(i, 0);
             }
         }
 
         @Override
         public void onPropertySet(VehiclePropValue value) {
-            int stream = value.getInt32Values(
-                    VehicleNetworkConsts.VehicleAudioVolumeIndex.VEHICLE_AUDIO_VOLUME_INDEX_STREAM);
-            int volume = value.getInt32Values(
-                    VehicleNetworkConsts.VehicleAudioVolumeIndex.VEHICLE_AUDIO_VOLUME_INDEX_VOLUME);
-            int state = value.getInt32Values(
-                    VehicleNetworkConsts.VehicleAudioVolumeIndex.VEHICLE_AUDIO_VOLUME_INDEX_STATE);
+            ArrayList<Integer> v = value.value.int32Values;
 
-            int[] values = {stream, volume, state};
-            VehiclePropValue injectValue = VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME, values,
-                    SystemClock.elapsedRealtimeNanos());
+            int stream = v.get(VehicleAudioVolumeIndex.INDEX_STREAM);
+            int volume = v.get(VehicleAudioVolumeIndex.INDEX_VOLUME);
+            int state = v.get(VehicleAudioVolumeIndex.INDEX_STATE);
+
+            VehiclePropValue injectValue =
+                    VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_VOLUME)
+                            .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                            .addIntValue(state, volume, state)
+                            .build();
+
             mCurrent.put(stream, volume);
             mHalEmulator.injectEvent(injectValue);
         }
 
         @Override
         public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            int stream = value.getInt32Values(
-                    VehicleNetworkConsts.VehicleAudioVolumeIndex.VEHICLE_AUDIO_VOLUME_INDEX_STREAM);
-
+            int stream = value.value.int32Values.get(VehicleAudioVolumeIndex.INDEX_STREAM);
             int volume = mCurrent.get(stream);
-            int[] values = {stream, volume, 0};
-            VehiclePropValue propValue = VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME, values,
-                    SystemClock.elapsedRealtimeNanos());
-            return propValue;
-        }
 
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-        }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) {
+            return VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_VOLUME)
+                            .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                            .addIntValue(stream, volume, 0)
+                            .build();
         }
     }
 }
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java
index 079cc1e..dec0dc6 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java
@@ -42,6 +42,7 @@
 import android.widget.CompoundButton.OnCheckedChangeListener;
 import android.widget.RadioGroup;
 import android.widget.TextView;
+import android.widget.Toast;
 import android.widget.ToggleButton;
 
 import com.google.android.car.kitchensink.CarEmulator;
@@ -421,7 +422,11 @@
             @Override
             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                 if (mCarEmulator == null) {
-                    mCarEmulator = new CarEmulator(mCar);
+                    //TODO(pavelm): need to do a full switch between emulated and normal mode
+                    // all Car*Manager references should be invalidated.
+                    Toast.makeText(AudioTestFragment.this.getContext(),
+                            "Not supported yet :(", Toast.LENGTH_SHORT).show();
+                    return;
                 }
                 if (isChecked) {
                     mRejectFocus.setActivated(true);
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/hvac/HvacTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/hvac/HvacTestFragment.java
index 476cc43..cb1a852 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/hvac/HvacTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/hvac/HvacTestFragment.java
@@ -22,6 +22,9 @@
 import android.car.hardware.CarPropertyConfig;
 import android.car.hardware.CarPropertyValue;
 import android.car.hardware.hvac.CarHvacManager;
+import android.hardware.vehicle.V2_0.VehicleAreaWindow;
+import android.hardware.vehicle.V2_0.VehicleAreaZone;
+import android.hardware.vehicle.V2_0.VehicleHvacFanDirection;
 import android.os.Bundle;
 import android.support.v4.app.Fragment;
 import android.util.Log;
@@ -36,10 +39,6 @@
 
 import com.google.android.car.kitchensink.R;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleHvacFanDirection;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleWindow;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZone;
-
 import java.util.ArrayList;
 import java.util.List;
 
@@ -98,21 +97,19 @@
                             break;
                         case CarHvacManager.ID_ZONED_FAN_POSITION:
                             switch((int)value.getValue()) {
-                                case VehicleHvacFanDirection.VEHICLE_HVAC_FAN_DIRECTION_FACE:
+                                case VehicleHvacFanDirection.FACE:
                                     mRbFanPositionFace.setChecked(true);
                                     break;
-                                case VehicleHvacFanDirection.VEHICLE_HVAC_FAN_DIRECTION_FLOOR:
+                                case VehicleHvacFanDirection.FLOOR:
                                     mRbFanPositionFloor.setChecked(true);
                                     break;
-                                case VehicleHvacFanDirection.
-                                        VEHICLE_HVAC_FAN_DIRECTION_FACE_AND_FLOOR:
+                                case VehicleHvacFanDirection.FACE_AND_FLOOR:
                                     mRbFanPositionFaceAndFloor.setChecked(true);
                                     break;
-                                case VehicleHvacFanDirection.VEHICLE_HVAC_FAN_DIRECTION_DEFROST:
+                                case VehicleHvacFanDirection.DEFROST:
                                     mRbFanPositionDefrost.setChecked(true);
                                     break;
-                                case VehicleHvacFanDirection
-                                        .VEHICLE_HVAC_FAN_DIRECTION_DEFROST_AND_FLOOR:
+                                case VehicleHvacFanDirection.DEFROST_AND_FLOOR:
                                     mRbFanPositionDefrostAndFloor.setChecked(true);
                                     break;
                                 default:
@@ -148,12 +145,12 @@
                             mTbMaxDefrost.setChecked((boolean)value.getValue());
                             break;
                         case CarHvacManager.ID_WINDOW_DEFROSTER_ON:
-                            if((zones & VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD) ==
-                                    VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD) {
+                            if((zones & VehicleAreaWindow.FRONT_WINDSHIELD) ==
+                                    VehicleAreaWindow.FRONT_WINDSHIELD) {
                                 mTbDefrostFront.setChecked((boolean)value.getValue());
                             }
-                            if((zones & VehicleWindow.VEHICLE_WINDOW_REAR_WINDSHIELD) ==
-                                    VehicleWindow.VEHICLE_WINDOW_REAR_WINDSHIELD) {
+                            if((zones & VehicleAreaWindow.REAR_WINDSHIELD) ==
+                                    VehicleAreaWindow.REAR_WINDSHIELD) {
                                 mTbDefrostRear.setChecked((boolean)value.getValue());
                             }
                             break;
@@ -325,19 +322,19 @@
             int position;
             switch(checkedId) {
                 case R.id.rbPositionFace:
-                    position = VehicleHvacFanDirection.VEHICLE_HVAC_FAN_DIRECTION_FACE;
+                    position = VehicleHvacFanDirection.FACE;
                     break;
                 case R.id.rbPositionFloor:
-                    position = VehicleHvacFanDirection.VEHICLE_HVAC_FAN_DIRECTION_FLOOR;
+                    position = VehicleHvacFanDirection.FLOOR;
                     break;
                 case R.id.rbPositionFaceAndFloor:
-                    position = VehicleHvacFanDirection.VEHICLE_HVAC_FAN_DIRECTION_FACE_AND_FLOOR;
+                    position = VehicleHvacFanDirection.FACE_AND_FLOOR;
                     break;
                 case R.id.rbPositionDefrost:
-                    position = VehicleHvacFanDirection.VEHICLE_HVAC_FAN_DIRECTION_DEFROST;
+                    position = VehicleHvacFanDirection.DEFROST;
                     break;
                 case R.id.rbPositionDefrostAndFloor:
-                    position = VehicleHvacFanDirection.VEHICLE_HVAC_FAN_DIRECTION_DEFROST_AND_FLOOR;
+                    position = VehicleHvacFanDirection.DEFROST_AND_FLOOR;
                     break;
                 default:
                     throw new IllegalStateException("Unexpected fan position: " + checkedId);
@@ -418,12 +415,12 @@
             mTempStep = 0.5f;
         }
         mZoneForSetTempD = 0;
-        if (prop.hasArea(VehicleZone.VEHICLE_ZONE_ROW_1_LEFT)) {
-            mZoneForSetTempD = VehicleZone.VEHICLE_ZONE_ROW_1_LEFT;
+        if (prop.hasArea(VehicleAreaZone.ROW_1_LEFT)) {
+            mZoneForSetTempD = VehicleAreaZone.ROW_1_LEFT;
         }
         mZoneForSetTempP = 0;
-        if (prop.hasArea(VehicleZone.VEHICLE_ZONE_ROW_1_RIGHT)) {
-            mZoneForSetTempP = VehicleZone.VEHICLE_ZONE_ROW_1_RIGHT;
+        if (prop.hasArea(VehicleAreaZone.ROW_1_RIGHT)) {
+            mZoneForSetTempP = VehicleAreaZone.ROW_1_RIGHT;
         }
         int[] areas = prop.getAreaIds();
         if (mZoneForSetTempD == 0 && areas.length > 1) {
@@ -530,26 +527,26 @@
     }
 
     private void configureDefrosterOn(View v, CarPropertyConfig prop1) {
-        if (prop1.hasArea(VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD)) {
+        if (prop1.hasArea(VehicleAreaWindow.FRONT_WINDSHIELD)) {
             mTbDefrostFront = (ToggleButton) v.findViewById(R.id.tbDefrostFront);
             mTbDefrostFront.setEnabled(true);
             mTbDefrostFront.setOnClickListener(view -> {
                 try {
                     mCarHvacManager.setBooleanProperty(CarHvacManager.ID_WINDOW_DEFROSTER_ON,
-                            VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD,
+                            VehicleAreaWindow.FRONT_WINDSHIELD,
                             mTbDefrostFront.isChecked());
                 } catch (CarNotConnectedException e) {
                     Log.e(TAG, "Failed to set HVAC window defroster property", e);
                 }
             });
         }
-        if (prop1.hasArea(VehicleWindow.VEHICLE_WINDOW_REAR_WINDSHIELD)) {
+        if (prop1.hasArea(VehicleAreaWindow.REAR_WINDSHIELD)) {
             mTbDefrostRear = (ToggleButton) v.findViewById(R.id.tbDefrostRear);
             mTbDefrostRear.setEnabled(true);
             mTbDefrostRear.setOnClickListener(view -> {
                 try {
                     mCarHvacManager.setBooleanProperty(CarHvacManager.ID_WINDOW_DEFROSTER_ON,
-                            VehicleWindow.VEHICLE_WINDOW_REAR_WINDSHIELD,
+                            VehicleAreaWindow.REAR_WINDSHIELD,
                             mTbDefrostRear.isChecked());
                 } catch (CarNotConnectedException e) {
                     Log.e(TAG, "Failed to set HVAC window defroster property", e);
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/input/InputTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/input/InputTestFragment.java
index a177c00..ef8eb86 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/input/InputTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/input/InputTestFragment.java
@@ -17,42 +17,25 @@
 
 import android.annotation.Nullable;
 import android.annotation.StringRes;
-import android.car.Car;
-import android.car.CarNotConnectedException;
-import android.car.test.CarTestManager;
-import android.car.test.CarTestManagerBinderWrapper;
-import android.content.ComponentName;
-import android.content.ServiceConnection;
+import android.hardware.vehicle.V2_0.VehicleHwKeyInputAction;
 import android.os.Bundle;
-import android.os.IBinder;
-import android.os.SystemClock;
 import android.support.v4.app.Fragment;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.View.OnTouchListener;
 import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.LinearLayout;
 
+import com.google.android.car.kitchensink.CarEmulator;
 import com.google.android.car.kitchensink.R;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleHwKeyInputAction;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
-
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleHwKeyInputAction;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
-
-import com.google.android.car.kitchensink.R;
-
 /**
  * Test input event handling to system.
  * vehicle hal should have VEHICLE_PROPERTY_HW_KEY_INPUT support for this to work.
@@ -63,10 +46,10 @@
 
     private static final Button BREAK_LINE = null;
 
-    private Car mCar;
-    private CarTestManager mTestManager;
     private final List<View> mButtons = new ArrayList<>();
 
+    private CarEmulator mCarEmulator;
+
     @Nullable
     @Override
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@@ -93,35 +76,9 @@
                 createButton(R.string.call_end, KeyEvent.KEYCODE_ENDCALL)
                 );
 
+        mCarEmulator = CarEmulator.create(getContext());
         addButtonsToPanel((LinearLayout) view.findViewById(R.id.input_buttons), mButtons);
 
-        mCar = Car.createCar(getContext(), new ServiceConnection() {
-            @Override
-            public void onServiceConnected(ComponentName name, IBinder service) {
-                try {
-                    mTestManager = new CarTestManager(
-                            (CarTestManagerBinderWrapper) mCar.getCarManager(Car.TEST_SERVICE));
-                } catch (CarNotConnectedException e) {
-                    throw new RuntimeException("Failed to create test service manager", e);
-                }
-                boolean hwKeySupported = mTestManager.isPropertySupported(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT);
-                if (!hwKeySupported) {
-                    Log.w(TAG, "VEHICLE_PROPERTY_HW_KEY_INPUT not supported");
-                }
-
-                for (View v : mButtons) {
-                    if (v != null) {
-                        v.setEnabled(hwKeySupported);
-                    }
-                }
-            }
-
-            @Override
-            public void onServiceDisconnected(ComponentName name) {
-            }
-        });
-        mCar.connect();
         return view;
     }
 
@@ -139,50 +96,32 @@
         return button;
     }
 
-    private void checkHwKeyInputSupported() {
-        boolean hwKeyInputSupported = mTestManager.isPropertySupported(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT);
-        if (!hwKeyInputSupported) {
-            Log.w(TAG, "VEHICLE_PROPERTY_HW_KEY_INPUT not supported");
-        }
-
-        for (View v : mButtons) {
-            if (v != null) {
-                v.setEnabled(hwKeyInputSupported);
-            }
-        }
-    }
-
     private void handleTouchEvent(MotionEvent event, int keyCode) {
-        int action = event.getActionMasked();
-        Log.i(TAG, "handleTouchEvent, action:" + action + ",keyCode:" + keyCode);
-        boolean shouldInject = false;
-        boolean isDown = false;
-        if (action == MotionEvent.ACTION_DOWN) {
-            shouldInject = true;
-            isDown = true;
-        } else if (action == MotionEvent.ACTION_UP) {
-            shouldInject = true;
-        }
-        if (shouldInject) {
-            int[] values = { isDown ? VehicleHwKeyInputAction.VEHICLE_HW_KEY_INPUT_ACTION_DOWN :
-                VehicleHwKeyInputAction.VEHICLE_HW_KEY_INPUT_ACTION_UP, keyCode, 0, 0 };
-            long now = SystemClock.elapsedRealtimeNanos();
-            mTestManager.injectEvent(VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT, values, now));
+        int androidAction = event.getActionMasked();
+        Log.i(TAG, "handleTouchEvent, action:" + androidAction + ",keyCode:" + keyCode);
+
+        switch (androidAction) {
+            case MotionEvent.ACTION_DOWN:
+                mCarEmulator.injectKey(keyCode, VehicleHwKeyInputAction.ACTION_DOWN);
+                break;
+            case MotionEvent.ACTION_UP:
+                mCarEmulator.injectKey(keyCode, VehicleHwKeyInputAction.ACTION_UP);
+                break;
+            default:
+                Log.w(TAG, "Unhandled touch action: " + androidAction);
+                break;
         }
     }
 
     @Override
     public void onDestroyView() {
         super.onDestroyView();
-        mCar.disconnect();
     }
 
     private void addButtonsToPanel(LinearLayout root, List<View> buttons) {
         LinearLayout panel = null;
         for (View button : buttons) {
-            if (button == BREAK_LINE) {
+            if (button == BREAK_LINE || panel == null) {
                 panel = new LinearLayout(getContext());
                 panel.setOrientation(LinearLayout.HORIZONTAL);
                 root.addView(panel);
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/volume/VolumeTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/volume/VolumeTestFragment.java
index 3bc34dd..6c987bb 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/volume/VolumeTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/volume/VolumeTestFragment.java
@@ -18,21 +18,18 @@
 import android.car.Car;
 import android.car.CarNotConnectedException;
 import android.car.media.CarAudioManager;
-import android.content.ComponentName;
 import android.content.Context;
-import android.content.ServiceConnection;
 import android.media.AudioManager;
 import android.media.IVolumeController;
 import android.os.Bundle;
 import android.os.Handler;
-import android.os.IBinder;
-import android.os.Looper;
 import android.os.Message;
 import android.os.RemoteException;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
 import android.util.Log;
 import android.util.SparseIntArray;
+import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -163,39 +160,30 @@
             }
         });
 
-        mCar = Car.createCar(getContext(), new ServiceConnection() {
-            @Override
-            public void onServiceConnected(ComponentName name, IBinder service) {
-                mCarEmulator = new CarEmulator(mCar);
-                mCarEmulator.start();
-                try {
-                    mCarAudioManager = (CarAudioManager) mCar.getCarManager(Car.AUDIO_SERVICE);
-                    initVolumeInfo();
-                    mCarAudioManager.setVolumeController(mVolumeController);
-                } catch (CarNotConnectedException e) {
-                    Log.e(TAG, "Car not connected!");
+        mCarEmulator = CarEmulator.create(getContext());
+        mCar = mCarEmulator.getCar();
+        try {
+            mCarAudioManager = (CarAudioManager) mCar.getCarManager(Car.AUDIO_SERVICE);
+            initVolumeInfo();
+            mCarAudioManager.setVolumeController(mVolumeController);
+        } catch (CarNotConnectedException e) {
+            throw new RuntimeException(e); // Should never occur in car emulator.
+        }
 
-                }
-            }
-            @Override
-            public void onServiceDisconnected(ComponentName name) {
-            }
-        });
-        mCar.connect();
         mVolumeUp = (Button) v.findViewById(R.id.volume_up);
         mVolumeDown = (Button) v.findViewById(R.id.volume_down);
 
         mVolumeUp.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                mCarEmulator.injectVolumeKey(true);
+                mCarEmulator.injectKey(KeyEvent.KEYCODE_VOLUME_UP);
             }
         });
 
         mVolumeDown.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                mCarEmulator.injectVolumeKey(false);
+                mCarEmulator.injectKey(KeyEvent.KEYCODE_VOLUME_DOWN);
             }
         });
 
diff --git a/tests/android_car_api_test/Android.mk b/tests/android_car_api_test/Android.mk
index 4048564..1489726 100644
--- a/tests/android_car_api_test/Android.mk
+++ b/tests/android_car_api_test/Android.mk
@@ -32,7 +32,9 @@
 
 LOCAL_PROGUARD_ENABLED := disabled
 
-LOCAL_STATIC_JAVA_LIBRARIES += car-systemtest android-support-test
+LOCAL_STATIC_JAVA_LIBRARIES += \
+        android-support-test \
+        android.hardware.vehicle@2.0-java-static \
 
 LOCAL_JAVA_LIBRARIES := android.car android.test.runner
 
diff --git a/tests/android_car_api_test/src/android/car/apitest/VehicleDoorTest.java b/tests/android_car_api_test/src/android/car/apitest/VehicleDoorTest.java
index 12998c8..53af5a5 100644
--- a/tests/android_car_api_test/src/android/car/apitest/VehicleDoorTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/VehicleDoorTest.java
@@ -16,28 +16,21 @@
 package android.car.apitest;
 
 import android.car.VehicleDoor;
+import android.hardware.vehicle.V2_0.VehicleAreaDoor;
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-
 @SmallTest
 public class VehicleDoorTest extends AndroidTestCase {
 
     public void testMatchWithVehicleHal() {
-        assertEquals(VehicleNetworkConsts.VehicleDoor.VEHICLE_DOOR_HOOD, VehicleDoor.DOOR_HOOD);
-        assertEquals(VehicleNetworkConsts.VehicleDoor.VEHICLE_DOOR_REAR, VehicleDoor.DOOR_REAR);
-        assertEquals(VehicleNetworkConsts.VehicleDoor.VEHICLE_DOOR_ROW_1_LEFT,
-                VehicleDoor.DOOR_ROW_1_LEFT);
-        assertEquals(VehicleNetworkConsts.VehicleDoor.VEHICLE_DOOR_ROW_1_RIGHT,
-                VehicleDoor.DOOR_ROW_1_RIGHT);
-        assertEquals(VehicleNetworkConsts.VehicleDoor.VEHICLE_DOOR_ROW_2_LEFT,
-                VehicleDoor.DOOR_ROW_2_LEFT);
-        assertEquals(VehicleNetworkConsts.VehicleDoor.VEHICLE_DOOR_ROW_2_RIGHT,
-                VehicleDoor.DOOR_ROW_2_RIGHT);
-        assertEquals(VehicleNetworkConsts.VehicleDoor.VEHICLE_DOOR_ROW_3_LEFT,
-                VehicleDoor.DOOR_ROW_3_LEFT);
-        assertEquals(VehicleNetworkConsts.VehicleDoor.VEHICLE_DOOR_ROW_3_RIGHT,
-                VehicleDoor.DOOR_ROW_3_RIGHT);
+        assertEquals(VehicleAreaDoor.HOOD, VehicleDoor.DOOR_HOOD);
+        assertEquals(VehicleAreaDoor.REAR, VehicleDoor.DOOR_REAR);
+        assertEquals(VehicleAreaDoor.ROW_1_LEFT, VehicleDoor.DOOR_ROW_1_LEFT);
+        assertEquals(VehicleAreaDoor.ROW_1_RIGHT, VehicleDoor.DOOR_ROW_1_RIGHT);
+        assertEquals(VehicleAreaDoor.ROW_2_LEFT, VehicleDoor.DOOR_ROW_2_LEFT);
+        assertEquals(VehicleAreaDoor.ROW_2_RIGHT, VehicleDoor.DOOR_ROW_2_RIGHT);
+        assertEquals(VehicleAreaDoor.ROW_3_LEFT, VehicleDoor.DOOR_ROW_3_LEFT);
+        assertEquals(VehicleAreaDoor.ROW_3_RIGHT, VehicleDoor.DOOR_ROW_3_RIGHT);
     }
 }
diff --git a/tests/android_car_api_test/src/android/car/apitest/VehicleSeatTest.java b/tests/android_car_api_test/src/android/car/apitest/VehicleSeatTest.java
index bbd85e9..36606dd 100644
--- a/tests/android_car_api_test/src/android/car/apitest/VehicleSeatTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/VehicleSeatTest.java
@@ -16,32 +16,22 @@
 package android.car.apitest;
 
 import android.car.VehicleSeat;
+import android.hardware.vehicle.V2_0.VehicleAreaSeat;
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-
 @SmallTest
 public class VehicleSeatTest extends AndroidTestCase {
 
     public void testMatchWithVehicleHal() {
-        assertEquals(VehicleNetworkConsts.VehicleSeat.VEHICLE_SEAT_ROW_1_LEFT,
-                VehicleSeat.SEAT_ROW_1_LEFT);
-        assertEquals(VehicleNetworkConsts.VehicleSeat.VEHICLE_SEAT_ROW_1_CENTER,
-                VehicleSeat.SEAT_ROW_1_CENTER);
-        assertEquals(VehicleNetworkConsts.VehicleSeat.VEHICLE_SEAT_ROW_1_RIGHT,
-                VehicleSeat.SEAT_ROW_1_RIGHT);
-        assertEquals(VehicleNetworkConsts.VehicleSeat.VEHICLE_SEAT_ROW_2_LEFT,
-                VehicleSeat.SEAT_ROW_2_LEFT);
-        assertEquals(VehicleNetworkConsts.VehicleSeat.VEHICLE_SEAT_ROW_2_CENTER,
-                VehicleSeat.SEAT_ROW_2_CENTER);
-        assertEquals(VehicleNetworkConsts.VehicleSeat.VEHICLE_SEAT_ROW_2_RIGHT,
-                VehicleSeat.SEAT_ROW_2_RIGHT);
-        assertEquals(VehicleNetworkConsts.VehicleSeat.VEHICLE_SEAT_ROW_3_LEFT,
-                VehicleSeat.SEAT_ROW_3_LEFT);
-        assertEquals(VehicleNetworkConsts.VehicleSeat.VEHICLE_SEAT_ROW_3_CENTER,
-                VehicleSeat.SEAT_ROW_3_CENTER);
-        assertEquals(VehicleNetworkConsts.VehicleSeat.VEHICLE_SEAT_ROW_3_RIGHT,
-                VehicleSeat.SEAT_ROW_3_RIGHT);
+        assertEquals(VehicleAreaSeat.ROW_1_LEFT, VehicleSeat.SEAT_ROW_1_LEFT);
+        assertEquals(VehicleAreaSeat.ROW_1_CENTER, VehicleSeat.SEAT_ROW_1_CENTER);
+        assertEquals(VehicleAreaSeat.ROW_1_RIGHT, VehicleSeat.SEAT_ROW_1_RIGHT);
+        assertEquals(VehicleAreaSeat.ROW_2_LEFT, VehicleSeat.SEAT_ROW_2_LEFT);
+        assertEquals(VehicleAreaSeat.ROW_2_CENTER, VehicleSeat.SEAT_ROW_2_CENTER);
+        assertEquals(VehicleAreaSeat.ROW_2_RIGHT, VehicleSeat.SEAT_ROW_2_RIGHT);
+        assertEquals(VehicleAreaSeat.ROW_3_LEFT, VehicleSeat.SEAT_ROW_3_LEFT);
+        assertEquals(VehicleAreaSeat.ROW_3_CENTER, VehicleSeat.SEAT_ROW_3_CENTER);
+        assertEquals(VehicleAreaSeat.ROW_3_RIGHT, VehicleSeat.SEAT_ROW_3_RIGHT);
     }
 }
diff --git a/tests/android_car_api_test/src/android/car/apitest/VehicleWindowTest.java b/tests/android_car_api_test/src/android/car/apitest/VehicleWindowTest.java
index 79677ed..7f1cfdf 100644
--- a/tests/android_car_api_test/src/android/car/apitest/VehicleWindowTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/VehicleWindowTest.java
@@ -16,32 +16,22 @@
 package android.car.apitest;
 
 import android.car.VehicleWindow;
+import android.hardware.vehicle.V2_0.VehicleAreaWindow;
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-
 @SmallTest
 public class VehicleWindowTest extends AndroidTestCase {
 
     public void testMatchWithVehicleHal() {
-        assertEquals(VehicleNetworkConsts.VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD,
-                VehicleWindow.WINDOW_FRONT_WINDSHIELD);
-        assertEquals(VehicleNetworkConsts.VehicleWindow.VEHICLE_WINDOW_REAR_WINDSHIELD,
-                VehicleWindow.WINDOW_REAR_WINDSHIELD);
-        assertEquals(VehicleNetworkConsts.VehicleWindow.VEHICLE_WINDOW_ROOF_TOP,
-                VehicleWindow.WINDOW_ROOF_TOP);
-        assertEquals(VehicleNetworkConsts.VehicleWindow.VEHICLE_WINDOW_ROW_1_LEFT,
-                VehicleWindow.WINDOW_ROW_1_LEFT);
-        assertEquals(VehicleNetworkConsts.VehicleWindow.VEHICLE_WINDOW_ROW_1_RIGHT,
-                VehicleWindow.WINDOW_ROW_1_RIGHT);
-        assertEquals(VehicleNetworkConsts.VehicleWindow.VEHICLE_WINDOW_ROW_2_LEFT,
-                VehicleWindow.WINDOW_ROW_2_LEFT);
-        assertEquals(VehicleNetworkConsts.VehicleWindow.VEHICLE_WINDOW_ROW_2_RIGHT,
-                VehicleWindow.WINDOW_ROW_2_RIGHT);
-        assertEquals(VehicleNetworkConsts.VehicleWindow.VEHICLE_WINDOW_ROW_3_LEFT,
-                VehicleWindow.WINDOW_ROW_3_LEFT);
-        assertEquals(VehicleNetworkConsts.VehicleWindow.VEHICLE_WINDOW_ROW_3_RIGHT,
-                VehicleWindow.WINDOW_ROW_3_RIGHT);
+        assertEquals(VehicleAreaWindow.FRONT_WINDSHIELD, VehicleWindow.WINDOW_FRONT_WINDSHIELD);
+        assertEquals(VehicleAreaWindow.REAR_WINDSHIELD, VehicleWindow.WINDOW_REAR_WINDSHIELD);
+        assertEquals(VehicleAreaWindow.ROOF_TOP, VehicleWindow.WINDOW_ROOF_TOP);
+        assertEquals(VehicleAreaWindow.ROW_1_LEFT, VehicleWindow.WINDOW_ROW_1_LEFT);
+        assertEquals(VehicleAreaWindow.ROW_1_RIGHT, VehicleWindow.WINDOW_ROW_1_RIGHT);
+        assertEquals(VehicleAreaWindow.ROW_2_LEFT, VehicleWindow.WINDOW_ROW_2_LEFT);
+        assertEquals(VehicleAreaWindow.ROW_2_RIGHT, VehicleWindow.WINDOW_ROW_2_RIGHT);
+        assertEquals(VehicleAreaWindow.ROW_3_LEFT, VehicleWindow.WINDOW_ROW_3_LEFT);
+        assertEquals(VehicleAreaWindow.ROW_3_RIGHT, VehicleWindow.WINDOW_ROW_3_RIGHT);
     }
 }
diff --git a/tests/android_car_api_test/src/android/car/apitest/VehicleZoneTest.java b/tests/android_car_api_test/src/android/car/apitest/VehicleZoneTest.java
index 93ff50a..794ef92 100644
--- a/tests/android_car_api_test/src/android/car/apitest/VehicleZoneTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/VehicleZoneTest.java
@@ -16,48 +16,30 @@
 package android.car.apitest;
 
 import android.car.VehicleZone;
+import android.hardware.vehicle.V2_0.VehicleAreaZone;
 import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
 import android.test.suitebuilder.annotation.SmallTest;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-
 @SmallTest
 public class VehicleZoneTest extends AndroidTestCase {
 
     public void testMatchWithVehicleHal() {
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ALL, VehicleZone.ZONE_ALL);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_1_ALL,
-                VehicleZone.ZONE_ROW_1_ALL);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_1_CENTER,
-                VehicleZone.ZONE_ROW_1_CENTER);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_1_LEFT,
-                VehicleZone.ZONE_ROW_1_LEFT);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_1_RIGHT,
-                VehicleZone.ZONE_ROW_1_RIGHT);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_2_ALL,
-                VehicleZone.ZONE_ROW_2_ALL);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_2_CENTER,
-                VehicleZone.ZONE_ROW_2_CENTER);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_2_LEFT,
-                VehicleZone.ZONE_ROW_2_LEFT);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_2_RIGHT,
-                VehicleZone.ZONE_ROW_2_RIGHT);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_3_ALL,
-                VehicleZone.ZONE_ROW_3_ALL);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_3_CENTER,
-                VehicleZone.ZONE_ROW_3_CENTER);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_3_LEFT,
-                VehicleZone.ZONE_ROW_3_LEFT);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_3_RIGHT,
-                VehicleZone.ZONE_ROW_3_RIGHT);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_4_ALL,
-                VehicleZone.ZONE_ROW_4_ALL);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_4_CENTER,
-                VehicleZone.ZONE_ROW_4_CENTER);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_4_LEFT,
-                VehicleZone.ZONE_ROW_4_LEFT);
-        assertEquals(VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_4_RIGHT,
-                VehicleZone.ZONE_ROW_4_RIGHT);
+        assertEquals(VehicleAreaZone.WHOLE_CABIN, VehicleZone.ZONE_ALL);
+        assertEquals(VehicleAreaZone.ROW_1, VehicleZone.ZONE_ROW_1_ALL);
+        assertEquals(VehicleAreaZone.ROW_1_CENTER, VehicleZone.ZONE_ROW_1_CENTER);
+        assertEquals(VehicleAreaZone.ROW_1_LEFT, VehicleZone.ZONE_ROW_1_LEFT);
+        assertEquals(VehicleAreaZone.ROW_1_RIGHT, VehicleZone.ZONE_ROW_1_RIGHT);
+        assertEquals(VehicleAreaZone.ROW_2, VehicleZone.ZONE_ROW_2_ALL);
+        assertEquals(VehicleAreaZone.ROW_2_CENTER, VehicleZone.ZONE_ROW_2_CENTER);
+        assertEquals(VehicleAreaZone.ROW_2_LEFT, VehicleZone.ZONE_ROW_2_LEFT);
+        assertEquals(VehicleAreaZone.ROW_2_RIGHT, VehicleZone.ZONE_ROW_2_RIGHT);
+        assertEquals(VehicleAreaZone.ROW_3, VehicleZone.ZONE_ROW_3_ALL);
+        assertEquals(VehicleAreaZone.ROW_3_CENTER, VehicleZone.ZONE_ROW_3_CENTER);
+        assertEquals(VehicleAreaZone.ROW_3_LEFT, VehicleZone.ZONE_ROW_3_LEFT);
+        assertEquals(VehicleAreaZone.ROW_3_RIGHT, VehicleZone.ZONE_ROW_3_RIGHT);
+        assertEquals(VehicleAreaZone.ROW_4, VehicleZone.ZONE_ROW_4_ALL);
+        assertEquals(VehicleAreaZone.ROW_4_CENTER, VehicleZone.ZONE_ROW_4_CENTER);
+        assertEquals(VehicleAreaZone.ROW_4_LEFT, VehicleZone.ZONE_ROW_4_LEFT);
+        assertEquals(VehicleAreaZone.ROW_4_RIGHT, VehicleZone.ZONE_ROW_4_RIGHT);
     }
 }
diff --git a/tests/carservice_test/Android.mk b/tests/carservice_test/Android.mk
index b8f7c00..dd7f8a3 100644
--- a/tests/carservice_test/Android.mk
+++ b/tests/carservice_test/Android.mk
@@ -33,6 +33,7 @@
 LOCAL_PROGUARD_ENABLED := disabled
 
 LOCAL_STATIC_JAVA_LIBRARIES += car-service-lib-for-test \
+                               vehicle-hal-support-lib \
                                car-systemtest \
                                android-support-test
 
diff --git a/tests/carservice_test/src/com/android/car/test/AppFocusTest.java b/tests/carservice_test/src/com/android/car/test/AppFocusTest.java
index b643f0f..b63383e 100644
--- a/tests/carservice_test/src/com/android/car/test/AppFocusTest.java
+++ b/tests/carservice_test/src/com/android/car/test/AppFocusTest.java
@@ -28,12 +28,6 @@
     private static final String TAG = AppFocusTest.class.getSimpleName();
     private static final long DEFAULT_WAIT_TIMEOUT_MS = 1000;
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        getVehicleHalEmulator().start();
-    }
-
     public void testFocusChange() throws Exception {
         CarAppFocusManager manager = (CarAppFocusManager) getCar().getCarManager(
                 Car.APP_FOCUS_SERVICE);
diff --git a/tests/carservice_test/src/com/android/car/test/AudioRoutingPolicyTest.java b/tests/carservice_test/src/com/android/car/test/AudioRoutingPolicyTest.java
index 7831817..fa8c149 100644
--- a/tests/carservice_test/src/com/android/car/test/AudioRoutingPolicyTest.java
+++ b/tests/carservice_test/src/com/android/car/test/AudioRoutingPolicyTest.java
@@ -15,148 +15,126 @@
  */
 package com.android.car.test;
 
-import android.car.test.VehicleHalEmulator.VehicleHalPropertyHandler;
+import android.hardware.vehicle.V2_0.VehicleAudioContextFlag;
+import android.hardware.vehicle.V2_0.VehicleAudioRoutingPolicyIndex;
+import android.hardware.vehicle.V2_0.VehiclePermissionModel;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.hardware.vehicle.V2_0.VehiclePropertyAccess;
 import android.test.suitebuilder.annotation.SmallTest;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioContextFlag;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioRoutingPolicyIndex;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePermissionModel;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
+import com.google.android.collect.Lists;
 
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
+import com.android.car.vehiclehal.test.MockedVehicleHal.FailingPropertyHandler;
+import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
+
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
 
 @SmallTest
 public class AudioRoutingPolicyTest extends MockedCarTestBase {
+    private static final String TAG = AudioRoutingPolicyTest.class.getSimpleName();
 
     private static final long TIMEOUT_MS = 3000;
 
     private final VehicleHalPropertyHandler mAudioRoutingPolicyHandler =
-            new VehicleHalPropertyHandler() {
+            new FailingPropertyHandler() {
 
         @Override
         public void onPropertySet(VehiclePropValue value) {
             handlePropertySetEvent(value);
         }
-
-        @Override
-        public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            fail("cannot get");
-            return null;
-        }
-
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-            fail("cannot subscribe");
-        }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) {
-            fail("cannot unsubscribe");
-        }
     };
 
     private final Semaphore mWaitSemaphore = new Semaphore(0);
-    private final LinkedList<VehiclePropValue> mEvents = new LinkedList<VehiclePropValue>();
+    private final LinkedList<VehiclePropValue> mEvents = new LinkedList<>();
 
     @Override
-    protected void setUp() throws Exception {
+    protected synchronized void setUp() throws Exception {
         super.setUp();
-
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                mAudioRoutingPolicyHandler);
     }
 
-    public void testNoHwVaraint() throws Exception {
-        getVehicleHalEmulator().removeProperty(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT);
-        getVehicleHalEmulator().start();
+    @Override
+    protected synchronized void configureMockedHal() {
+        addProperty(VehicleProperty.AUDIO_ROUTING_POLICY, mAudioRoutingPolicyHandler)
+                .setAccess(VehiclePropertyAccess.WRITE)
+                .setPermissionModel(VehiclePermissionModel.SYSTEM_APP_ONLY);
+    }
+
+    public void testNoHwVariant() throws Exception {
         checkPolicy0();
     }
 
     public void testHwVariant0() throws Exception {
-        getVehicleHalEmulator().addStaticProperty(
-                VehiclePropConfigUtil.createStaticStringProperty(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT),
-                VehiclePropValueUtil.createIntValue(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT, 0, 0));
-        getVehicleHalEmulator().start();
+        addStaticProperty(VehicleProperty.AUDIO_HW_VARIANT,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_HW_VARIANT)
+                        .addIntValue(0)
+                        .build())
+                .setConfigArray(Lists.newArrayList(0));
+
+        mEvents.clear();
+        reinitializeMockedHal();
+
         checkPolicy0();
     }
 
     public void testHwVariantForTest() throws Exception {
-        getVehicleHalEmulator().addStaticProperty(
-                VehiclePropConfigUtil.createStaticStringProperty(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT),
-                VehiclePropValueUtil.createIntValue(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT, -1, 0));
-        getVehicleHalEmulator().start();
+        addStaticProperty(VehicleProperty.AUDIO_HW_VARIANT,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_HW_VARIANT)
+                        .addIntValue(-1)
+                        .build())
+                .setConfigArray(Lists.newArrayList(0));
+
+        mEvents.clear();
+        reinitializeMockedHal();
+
         checkPolicyForTest();
     }
 
     private void checkPolicy0() throws Exception {
         assertTrue(mWaitSemaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        VehiclePropValue v = mEvents.get(0);
-        assertEquals(0, v.getInt32Values(
-                VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM));
-        int contexts = v.getInt32Values(
-                VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS);
+        ArrayList<Integer> v = mEvents.get(0).value.int32Values;
+        assertEquals(0, v.get(VehicleAudioRoutingPolicyIndex.STREAM).intValue());
+        int contexts = v.get(VehicleAudioRoutingPolicyIndex.CONTEXTS);
         // check if all contexts are allowed ones.
         assertTrue((contexts & ~(
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CALL_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG)) == 0);
+                VehicleAudioContextFlag.ALARM_FLAG |
+                VehicleAudioContextFlag.CALL_FLAG |
+                VehicleAudioContextFlag.MUSIC_FLAG |
+                VehicleAudioContextFlag.RADIO_FLAG |
+                VehicleAudioContextFlag.NAVIGATION_FLAG |
+                VehicleAudioContextFlag.NOTIFICATION_FLAG |
+                VehicleAudioContextFlag.UNKNOWN_FLAG |
+                VehicleAudioContextFlag.VOICE_COMMAND_FLAG |
+                VehicleAudioContextFlag.SYSTEM_SOUND_FLAG |
+                VehicleAudioContextFlag.SAFETY_ALERT_FLAG)) == 0);
     }
 
     private void checkPolicyForTest() throws Exception {
         // write happens twice.
         assertTrue(mWaitSemaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
         assertTrue(mWaitSemaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
-        VehiclePropValue v = mEvents.get(0);
-        assertEquals(0, v.getInt32Values(
-                VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM));
+        ArrayList<Integer> v = mEvents.get(0).value.int32Values;
+        assertEquals(0, v.get(VehicleAudioRoutingPolicyIndex.STREAM).intValue());
         assertEquals(
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CALL_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG,
-                v.getInt32Values(
-                        VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS)
-                        );
-        v = mEvents.get(1);
-        assertEquals(1, v.getInt32Values(
-                VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM));
+                VehicleAudioContextFlag.CALL_FLAG |
+                VehicleAudioContextFlag.MUSIC_FLAG |
+                VehicleAudioContextFlag.RADIO_FLAG |
+                VehicleAudioContextFlag.UNKNOWN_FLAG,
+                v.get(VehicleAudioRoutingPolicyIndex.CONTEXTS).intValue());
+        v = mEvents.get(1).value.int32Values;
+        assertEquals(1, v.get(VehicleAudioRoutingPolicyIndex.STREAM).intValue());
         assertEquals(
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG,
-                v.getInt32Values(
-                        VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS)
-                        );
+                VehicleAudioContextFlag.ALARM_FLAG |
+                VehicleAudioContextFlag.NAVIGATION_FLAG |
+                VehicleAudioContextFlag.NOTIFICATION_FLAG |
+                VehicleAudioContextFlag.VOICE_COMMAND_FLAG |
+                VehicleAudioContextFlag.SYSTEM_SOUND_FLAG |
+                VehicleAudioContextFlag.SAFETY_ALERT_FLAG,
+                v.get(VehicleAudioRoutingPolicyIndex.CONTEXTS).intValue());
     }
 
     private void handlePropertySetEvent(VehiclePropValue value) {
diff --git a/tests/carservice_test/src/com/android/car/test/CarAudioExtFocusTest.java b/tests/carservice_test/src/com/android/car/test/CarAudioExtFocusTest.java
index 2e8a5b5..fe0a646 100644
--- a/tests/carservice_test/src/com/android/car/test/CarAudioExtFocusTest.java
+++ b/tests/carservice_test/src/com/android/car/test/CarAudioExtFocusTest.java
@@ -15,31 +15,34 @@
  */
 package com.android.car.test;
 
+import static android.hardware.vehicle.V2_0.VehicleProperty.AUDIO_FOCUS;
+import static java.lang.Integer.toHexString;
+
 import android.car.Car;
 import android.car.media.CarAudioManager;
-import android.car.test.VehicleHalEmulator.VehicleHalPropertyHandler;
 import android.content.Context;
+import android.hardware.vehicle.V2_0.VehicleAudioContextFlag;
+import android.hardware.vehicle.V2_0.VehicleAudioExtFocusFlag;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusIndex;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusRequest;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusState;
+import android.hardware.vehicle.V2_0.VehicleAudioStream;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.hardware.vehicle.V2_0.VehiclePropertyAccess;
 import android.media.AudioAttributes;
 import android.media.AudioManager;
 import android.os.SystemClock;
 import android.test.suitebuilder.annotation.MediumTest;
 import android.util.Log;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioContextFlag;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioExtFocusFlag;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusIndex;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusRequest;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusState;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioStream;
-import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePermissionModel;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
+import com.google.android.collect.Lists;
 
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
+import com.android.car.vehiclehal.test.MockedVehicleHal.FailingPropertyHandler;
+import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
+
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.concurrent.Semaphore;
@@ -52,27 +55,11 @@
     private static final long TIMEOUT_MS = 3000;
 
     private final VehicleHalPropertyHandler mAudioRoutingPolicyPropertyHandler =
-            new VehicleHalPropertyHandler() {
+            new FailingPropertyHandler() {
         @Override
         public void onPropertySet(VehiclePropValue value) {
             //TODO
         }
-
-        @Override
-        public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            fail("cannot get");
-            return null;
-        }
-
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-            fail("cannot subscribe");
-        }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) {
-            fail("cannot unsubscribe");
-        }
     };
 
     private final FocusPropertyHandler mAudioFocusPropertyHandler =
@@ -93,6 +80,22 @@
     private CarAudioManager mCarAudioManager;
 
     @Override
+    protected synchronized void configureMockedHal() {
+        addProperty(VehicleProperty.AUDIO_ROUTING_POLICY, mAudioRoutingPolicyPropertyHandler);
+        addProperty(VehicleProperty.AUDIO_FOCUS, mAudioFocusPropertyHandler);
+
+        addStaticProperty(VehicleProperty.AUDIO_HW_VARIANT,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_HW_VARIANT)
+                        .addIntValue(-1)
+                        .build())
+                .setConfigArray(Lists.newArrayList(0));
+
+        addProperty(VehicleProperty.AUDIO_EXT_ROUTING_HINT, mExtRoutingHintPropertyHandler)
+                .setAccess(VehiclePropertyAccess.WRITE)
+                .setConfigString(EXT_ROUTING_CONFIG);
+    }
+
+    @Override
     protected void setUp() throws Exception {
         super.setUp();
         // AudioManager should be created in main thread to get focus event. :(
@@ -103,40 +106,6 @@
             }
         });
 
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                        mAudioRoutingPolicyPropertyHandler);
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                        mAudioFocusPropertyHandler);
-        getVehicleHalEmulator().addStaticProperty(
-                VehiclePropConfigUtil.createStaticStringProperty(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT),
-                VehiclePropValueUtil.createIntValue(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT, -1, 0));
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).
-                        setConfigString(EXT_ROUTING_CONFIG).build(),
-                        mExtRoutingHintPropertyHandler);
-        getVehicleHalEmulator().start();
         mCarAudioManager = (CarAudioManager) getCar().getCarManager(Car.AUDIO_SERVICE);
         assertNotNull(mCarAudioManager);
     }
@@ -171,8 +140,7 @@
         assertNotNull(attrb);
 
         try {
-            attrb = mCarAudioManager.getAudioAttributesForRadio(
-                    CarAudioManager.CAR_RADIO_TYPE_AM_FM_HD);
+            mCarAudioManager.getAudioAttributesForRadio(CarAudioManager.CAR_RADIO_TYPE_AM_FM_HD);
             fail();
         } catch (IllegalArgumentException e) {
             // expected
@@ -193,7 +161,7 @@
         assertNotNull(attrb);
 
         try {
-            attrb = mCarAudioManager.getAudioAttributesForExternalSource(
+            mCarAudioManager.getAudioAttributesForExternalSource(
                     CarAudioManager.CAR_RADIO_TYPE_AM_FM_HD);
             fail();
         } catch (IllegalArgumentException e) {
@@ -206,8 +174,8 @@
                 CarAudioManager.CAR_RADIO_TYPE_AM_FM);
         assertNotNull(attrb);
         checkSingleRequestRelease(attrb, AudioManager.AUDIOFOCUS_GAIN, new int[] {1, 0, 0, 0},
-                0, VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG);
+                0, VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
+                VehicleAudioContextFlag.RADIO_FLAG);
     }
 
     public void testRadioSatelliteGainFocus() throws Exception {
@@ -215,8 +183,8 @@
                 CarAudioManager.CAR_RADIO_TYPE_SATELLITE);
         assertNotNull(attrb);
         checkSingleRequestRelease(attrb, AudioManager.AUDIOFOCUS_GAIN, new int[] {2, 0, 0, 0},
-                0, VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG);
+                0, VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
+                VehicleAudioContextFlag.RADIO_FLAG);
     }
 
     public void testCdGainFocus() throws Exception {
@@ -224,8 +192,8 @@
                 CarAudioManager.CAR_EXTERNAL_SOURCE_TYPE_CD_DVD);
         assertNotNull(attrb);
         checkSingleRequestRelease(attrb, AudioManager.AUDIOFOCUS_GAIN, new int[] {0, 2, 0, 0},
-                0, VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CD_ROM_FLAG);
+                0, VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
+                VehicleAudioContextFlag.CD_ROM_FLAG);
     }
 
     public void testAuxInFocus() throws Exception {
@@ -233,8 +201,8 @@
                 CarAudioManager.CAR_EXTERNAL_SOURCE_TYPE_AUX_IN0);
         assertNotNull(attrb);
         checkSingleRequestRelease(attrb, AudioManager.AUDIOFOCUS_GAIN, new int[] {0x1<<5, 0, 0, 0},
-                0, VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_AUX_AUDIO_FLAG);
+                0, VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
+                VehicleAudioContextFlag.AUX_AUDIO_FLAG);
     }
 
     public void testExtNavInFocus() throws Exception {
@@ -242,8 +210,8 @@
                 CarAudioManager.CAR_EXTERNAL_SOURCE_TYPE_EXT_NAV_GUIDANCE);
         assertNotNull(attrb);
         checkSingleRequestRelease(attrb, AudioManager.AUDIOFOCUS_GAIN, new int[] {0x1<<4, 0, 0, 0},
-                0, VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_EXT_SOURCE_FLAG);
+                0, VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
+                VehicleAudioContextFlag.EXT_SOURCE_FLAG);
     }
 
     public void testCustomInFocus() throws Exception {
@@ -251,8 +219,8 @@
                 "com.google.test.SOMETHING_SPECIAL");
         assertNotNull(attrb);
         checkSingleRequestRelease(attrb, AudioManager.AUDIOFOCUS_GAIN, new int[] {0, 0, 1, 0},
-                0, VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_EXT_SOURCE_FLAG);
+                0, VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
+                VehicleAudioContextFlag.EXT_SOURCE_FLAG);
     }
 
     public void testMediaNavFocus() throws Exception {
@@ -263,16 +231,16 @@
                 AudioManager.AUDIOFOCUS_GAIN);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0, request[1]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM0, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
 
         // nav guidance start
         AudioFocusListener listenerNav = new AudioFocusListener();
@@ -280,45 +248,45 @@
                 setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION).
                 setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE).
                 build();
-        res = mAudioManager.requestAudioFocus(listenerNav, navAttrib,
+        mAudioManager.requestAudioFocus(listenerNav, navAttrib,
                 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
         assertEquals(0x3, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG |
+                VehicleAudioContextFlag.NAVIGATION_FLAG, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN, request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioFocusState.STATE_GAIN, request[1],
+                VehicleAudioExtFocusFlag.NONE_FLAG);
 
         // nav guidance done
         mAudioManager.abandonAudioFocus(listenerNav);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0, request[1]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM0, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN, request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioFocusState.STATE_GAIN, request[1],
+                VehicleAudioExtFocusFlag.NONE_FLAG);
 
         // music done
         mAudioManager.abandonAudioFocus(listenerMusic);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE, request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS, request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioFocusState.STATE_LOSS, request[1],
+                VehicleAudioExtFocusFlag.NONE_FLAG);
     }
 
     public void testMediaExternalMediaNavFocus() throws Exception {
@@ -329,22 +297,22 @@
                 AudioManager.AUDIOFOCUS_GAIN);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0, request[1]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM0, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
 
         // car plays external media (=outside Android)
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG);
+                VehicleAudioExtFocusFlag.PERMANENT_FLAG);
         int focusChange = listenerMusic.waitAndGetFocusChange(TIMEOUT_MS);
         assertEquals(AudioManager.AUDIOFOCUS_LOSS, focusChange);
 
@@ -354,38 +322,38 @@
                 setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION).
                 setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE).
                 build();
-        res = mAudioManager.requestAudioFocus(listenerNav, navAttrib,
+        mAudioManager.requestAudioFocus(listenerNav, navAttrib,
                 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT_MAY_DUCK,
                 request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM1, request[1]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM1, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.NAVIGATION_FLAG, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT,
-                0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM1,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG);
+                VehicleAudioFocusState.STATE_GAIN_TRANSIENT,
+                0x1 << VehicleAudioStream.STREAM1,
+                VehicleAudioExtFocusFlag.PERMANENT_FLAG);
 
         // nav guidance ends
         mAudioManager.abandonAudioFocus(listenerNav);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE, request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG);
+                VehicleAudioExtFocusFlag.PERMANENT_FLAG);
 
         // now ends external play
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 0,
                 0);
         mAudioManager.abandonAudioFocus(listenerMusic);
@@ -404,17 +372,17 @@
                 radioAttributes, AudioManager.AUDIOFOCUS_GAIN, 0);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
         assertEquals(0, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.RADIO_FLAG, request[3]);
         assertArrayEquals(new int[] {1, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG);
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG);
 
         //external nav
         AudioFocusListener listenerNav = new AudioFocusListener();
@@ -424,44 +392,44 @@
                 extNavAttributes, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN,
                 request[0]);
         assertEquals(0, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_EXT_SOURCE_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.RADIO_FLAG |
+                VehicleAudioContextFlag.EXT_SOURCE_FLAG, request[3]);
         assertArrayEquals(new int[] {1 | 1<<4, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG);
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG);
 
         mAudioManager.abandonAudioFocus(listenerNav);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
         assertEquals(0, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.RADIO_FLAG, request[3]);
         assertArrayEquals(new int[] {1, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG);
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG);
 
         mAudioManager.abandonAudioFocus(listenerRadio);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE, request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 0,
                 0);
     }
@@ -474,16 +442,16 @@
                 AudioManager.AUDIOFOCUS_GAIN);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0, request[1]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM0, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
 
         //external nav
         AudioFocusListener listenerNav = new AudioFocusListener();
@@ -493,43 +461,43 @@
                 extNavAttributes, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN,
                 request[0]);
         assertEquals(0x1, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_EXT_SOURCE_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG |
+                VehicleAudioContextFlag.EXT_SOURCE_FLAG, request[3]);
         assertArrayEquals(new int[] {1<<4, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0x1,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG);
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG);
 
         mAudioManager.abandonAudioFocus(listenerNav);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0, request[1]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM0, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
 
         mAudioManager.abandonAudioFocus(listenerMusic);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE, request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 0,
                 0);
     }
@@ -549,17 +517,17 @@
                 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT_MAY_DUCK,
                 request[0]);
         assertEquals(0x2, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.NAVIGATION_FLAG, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
 
         //external nav
         AudioFocusListener listenerExtNav = new AudioFocusListener();
@@ -569,43 +537,43 @@
                 extNavAttributes, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN,
                 request[0]);
         assertEquals(0, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_EXT_SOURCE_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.EXT_SOURCE_FLAG, request[3]);
         assertArrayEquals(new int[] {1<<4, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0x1,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG);
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG);
 
         mAudioManager.abandonAudioFocus(listenerExtNav);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT_MAY_DUCK,
                 request[0]);
         assertEquals(0x2, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.NAVIGATION_FLAG, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
 
         mAudioManager.abandonAudioFocus(listenerIntNav);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE, request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 0,
                 0);
     }
@@ -618,16 +586,16 @@
                 AudioManager.AUDIOFOCUS_GAIN);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0, request[1]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM0, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
 
         // android radio
         AudioFocusListener listenerRadio = new AudioFocusListener();
@@ -640,17 +608,17 @@
                 radioAttributes, AudioManager.AUDIOFOCUS_GAIN, 0);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
         assertEquals(0, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.RADIO_FLAG, request[3]);
         assertArrayEquals(new int[] {1, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG);
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG);
 
         // nav guidance start
         AudioFocusListener listenerNav = new AudioFocusListener();
@@ -661,35 +629,35 @@
         res = mAudioManager.requestAudioFocus(listenerNav, navAttrib,
                 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN,
                 request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM1, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
+        assertEquals(0x1 << VehicleAudioStream.STREAM1, request[1]);
+        assertEquals(VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.NAVIGATION_FLAG |
+                VehicleAudioContextFlag.RADIO_FLAG, request[3]);
         assertArrayEquals(new int[] {1, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
-                0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM1,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG);
+                VehicleAudioFocusState.STATE_GAIN,
+                0x1 << VehicleAudioStream.STREAM1,
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG);
 
         // nav guidance ends
         mAudioManager.abandonAudioFocus(listenerNav);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN,
                 request[0]);
         assertEquals(0, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.RADIO_FLAG, request[3]);
         assertArrayEquals(new int[] {1, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG);
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG);
 
         // ends radio. music will get the focus GAIN.
         // Music app is supposed to stop and release focus when it has lost focus, but here just
@@ -697,30 +665,30 @@
         mAudioManager.abandonAudioFocus(listenerRadio);
         listenerMusic.waitForFocus(TIMEOUT_MS, AudioManager.AUDIOFOCUS_GAIN);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0, request[1]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM0, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
-                0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0,
+                VehicleAudioFocusState.STATE_GAIN,
+                0x1 << VehicleAudioStream.STREAM0,
                 0);
 
         // now music release focus.
         mAudioManager.abandonAudioFocus(listenerMusic);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE, request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
     }
 
     private void checkSingleRequestRelease(AudioAttributes attrb, int androidFocusToRequest,
@@ -730,22 +698,22 @@
         int res = mCarAudioManager.requestAudioFocus(lister, attrb, androidFocusToRequest, 0);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        int expectedFocusRequest = VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE;
-        int response = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS;
+        int expectedFocusRequest = VehicleAudioFocusRequest.REQUEST_RELEASE;
+        int response = VehicleAudioFocusState.STATE_LOSS;
         switch (androidFocusToRequest) {
             case AudioManager.AUDIOFOCUS_GAIN:
-                expectedFocusRequest = VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN;
-                response = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN;
+                expectedFocusRequest = VehicleAudioFocusRequest.REQUEST_GAIN;
+                response = VehicleAudioFocusState.STATE_GAIN;
                 break;
             case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT:
                 expectedFocusRequest =
-                    VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT;
-                response = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT;
+                    VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT;
+                response = VehicleAudioFocusState.STATE_GAIN_TRANSIENT;
                 break;
             case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:
                 expectedFocusRequest =
-                    VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK;
-                response = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT;
+                    VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT_MAY_DUCK;
+                response = VehicleAudioFocusState.STATE_GAIN_TRANSIENT;
                 break;
         }
         assertEquals(expectedFocusRequest, request[0]);
@@ -756,33 +724,33 @@
         mAudioFocusPropertyHandler.sendAudioFocusState(
                 response,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
         mAudioManager.abandonAudioFocus(lister);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE, request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
     }
 
     public void testRadioMute() throws Exception {
         testMediaMute(CarAudioManager.CAR_AUDIO_USAGE_RADIO,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG);
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
+                VehicleAudioContextFlag.RADIO_FLAG);
     }
 
     public void testMusicMute() throws Exception {
         testMediaMute(CarAudioManager.CAR_AUDIO_USAGE_MUSIC,
                 0x1,
                 0,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG);
+                VehicleAudioContextFlag.MUSIC_FLAG);
     }
 
     private void testMediaMute(int mediaUsage, int primaryStream, int extFocusFlag,
@@ -798,7 +766,7 @@
                 radioAttributes, AudioManager.AUDIOFOCUS_GAIN, 0);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
         assertEquals(primaryStream, request[1]);
         assertEquals(extFocusFlag, request[2]);
         assertEquals(mediaContext, request[3]);
@@ -810,7 +778,7 @@
                     mExtRoutingHintPropertyHandler.getLastHint());
         }
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 primaryStream,
                 extFocusFlag);
         // now mute it.
@@ -818,18 +786,18 @@
         Log.i(TAG, "mute media");
         assertTrue(carAudioManager.setMediaMute(true));
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT,
                 request[0]);
         assertEquals(0, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.MUTE_MEDIA_FLAG,
                 request[2]);
         assertEquals(0, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG);
+                VehicleAudioExtFocusFlag.MUTE_MEDIA_FLAG);
         assertTrue(carAudioManager.isMediaMuted());
         // nav guidance on top of it
         AudioFocusListener listenerNav = new AudioFocusListener();
@@ -841,42 +809,42 @@
         res = mAudioManager.requestAudioFocus(listenerNav, navAttrib,
                 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT_MAY_DUCK,
                 request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM1, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG,
+        assertEquals(0x1 << VehicleAudioStream.STREAM1, request[1]);
+        assertEquals(VehicleAudioExtFocusFlag.MUTE_MEDIA_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.NAVIGATION_FLAG, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         assertTrue(carAudioManager.isMediaMuted());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
-                0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM1,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG);
+                VehicleAudioFocusState.STATE_GAIN,
+                0x1 << VehicleAudioStream.STREAM1,
+                VehicleAudioExtFocusFlag.MUTE_MEDIA_FLAG);
         assertTrue(carAudioManager.isMediaMuted());
         // nav guidance ends
         mAudioManager.abandonAudioFocus(listenerNav);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT,
                 request[0]);
         assertEquals(0, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.MUTE_MEDIA_FLAG,
                 request[2]);
         assertEquals(0, request[3]);
         assertArrayEquals(new int[] {0, 0, 0, 0},
                 mExtRoutingHintPropertyHandler.getLastHint());
         assertTrue(carAudioManager.isMediaMuted());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG);
+                VehicleAudioExtFocusFlag.MUTE_MEDIA_FLAG);
         // now unmute it. media should resume.
         assertTrue(carAudioManager.isMediaMuted());
         assertFalse(carAudioManager.setMediaMute(false));
         assertFalse(carAudioManager.isMediaMuted());
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
         assertEquals(primaryStream, request[1]);
         assertEquals(extFocusFlag,
                 request[2]);
@@ -890,7 +858,7 @@
         }
         assertFalse(carAudioManager.isMediaMuted());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 primaryStream,
                 extFocusFlag);
         assertFalse(carAudioManager.isMediaMuted());
@@ -926,7 +894,7 @@
 
     protected static class FocusPropertyHandler implements VehicleHalPropertyHandler {
 
-        private int mState = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS;
+        private int mState = VehicleAudioFocusState.STATE_LOSS;
         private int mStreams = 0;
         private int mExtFocus = 0;
         private int mRequest;
@@ -947,10 +915,11 @@
                 mStreams = streams;
                 mExtFocus = extFocus;
             }
-            int[] values = { state, streams, extFocus, 0 };
-            mCarTest.getVehicleHalEmulator().injectEvent(VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, values,
-                    SystemClock.elapsedRealtimeNanos()));
+            mCarTest.getMockedVehicleHal().injectEvent(
+                    VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_FOCUS)
+                            .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                            .addIntValue(state, streams, extFocus, 0)
+                            .build());
         }
 
         public int[] waitForAudioFocusRequest(long timeoutMs) throws Exception {
@@ -965,47 +934,46 @@
 
         @Override
         public void onPropertySet(VehiclePropValue value) {
-            assertEquals(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, value.getProp());
+            Log.i(TAG, "onPropertySet, prop: 0x" + toHexString(value.prop));
+            assertEquals(AUDIO_FOCUS, value.prop);
+            ArrayList<Integer> v = value.value.int32Values;
             synchronized (this) {
-                mRequest = value.getInt32Values(
-                        VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_FOCUS);
-                mRequestedStreams = value.getInt32Values(
-                        VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_STREAMS);
-                mRequestedExtFocus = value.getInt32Values(
-                        VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_EXTERNAL_FOCUS_STATE);
-                mRequestedAudioContexts = value.getInt32Values(
-                        VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_AUDIO_CONTEXTS);
+                mRequest = v.get(VehicleAudioFocusIndex.FOCUS);
+                mRequestedStreams = v.get(VehicleAudioFocusIndex.STREAMS);
+                mRequestedExtFocus = v.get(VehicleAudioFocusIndex.EXTERNAL_FOCUS_STATE);
+                mRequestedAudioContexts = v.get(VehicleAudioFocusIndex.AUDIO_CONTEXTS);
             }
+            Log.i(TAG, "onPropertySet, values: " + Arrays.toString(v.toArray()));
             mSetWaitSemaphore.release();
         }
 
         @Override
         public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            assertEquals(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, value.getProp());
+            assertEquals(AUDIO_FOCUS, value.prop);
             int state, streams, extFocus;
             synchronized (this) {
                 state = mState;
                 streams = mStreams;
                 extFocus = mExtFocus;
             }
-            int[] values = { state, streams, extFocus, 0 };
-            return VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, values,
-                    SystemClock.elapsedRealtimeNanos());
+            return VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_FOCUS)
+                    .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                    .addIntValue(state, streams, extFocus, 0)
+                    .build();
         }
 
         @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-            assertEquals(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, property);
+        public void onPropertySubscribe(int property, int zones, float sampleRate) {
+            assertEquals(AUDIO_FOCUS, property);
         }
 
         @Override
         public void onPropertyUnsubscribe(int property) {
-            assertEquals(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, property);
+            assertEquals(AUDIO_FOCUS, property);
         }
     }
 
-    private static class ExtRoutingHintPropertyHandler implements VehicleHalPropertyHandler {
+    private static class ExtRoutingHintPropertyHandler extends FailingPropertyHandler {
         private int[] mLastHint = {0, 0, 0, 0};
 
         public int[] getLastHint() {
@@ -1018,30 +986,13 @@
 
         @Override
         public void onPropertySet(VehiclePropValue value) {
-            assertEquals(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_EXT_ROUTING_HINT,
-                    value.getProp());
-            assertEquals(mLastHint.length, value.getInt32ValuesCount());
+            assertEquals(VehicleProperty.AUDIO_EXT_ROUTING_HINT, value.prop);
+            assertEquals(mLastHint.length, value.value.int32Values.size());
             synchronized (this) {
                 for (int i = 0; i < mLastHint.length; i++) {
-                    mLastHint[i] = value.getInt32Values(i);
+                    mLastHint[i] = value.value.int32Values.get(i);
                 }
             }
         }
-
-        @Override
-        public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            fail("write only");
-            return null;
-        }
-
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-            fail("cannot subsctibe");
-        }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) {
-            fail("cannot subsctibe");
-        }
     }
 }
diff --git a/tests/carservice_test/src/com/android/car/test/CarAudioFocusSystemSoundTest.java b/tests/carservice_test/src/com/android/car/test/CarAudioFocusSystemSoundTest.java
index 72c585b..21f22b4 100644
--- a/tests/carservice_test/src/com/android/car/test/CarAudioFocusSystemSoundTest.java
+++ b/tests/carservice_test/src/com/android/car/test/CarAudioFocusSystemSoundTest.java
@@ -15,32 +15,32 @@
  */
 package com.android.car.test;
 
+import static android.hardware.vehicle.V2_0.VehicleProperty.AUDIO_FOCUS;
+
 import android.car.Car;
 import android.car.media.CarAudioManager;
-import android.car.test.VehicleHalEmulator.VehicleHalPropertyHandler;
 import android.content.Context;
+import android.hardware.vehicle.V2_0.VehicleAudioContextFlag;
+import android.hardware.vehicle.V2_0.VehicleAudioExtFocusFlag;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusIndex;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusRequest;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusState;
+import android.hardware.vehicle.V2_0.VehicleAudioStream;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.hardware.vehicle.V2_0.VehiclePropertyAccess;
 import android.media.AudioAttributes;
 import android.media.AudioManager;
 import android.os.SystemClock;
 import android.test.suitebuilder.annotation.MediumTest;
-import android.util.Log;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioContextFlag;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioExtFocusFlag;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusIndex;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusRequest;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusState;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioStream;
-import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePermissionModel;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
+import com.google.android.collect.Lists;
 
-import java.util.LinkedList;
+import com.android.car.vehiclehal.test.MockedVehicleHal.FailingPropertyHandler;
+import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
+
+import java.util.ArrayList;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
 
@@ -54,37 +54,32 @@
     private static final long TIMEOUT_MS = 3000;
 
     private final VehicleHalPropertyHandler mAudioRoutingPolicyPropertyHandler =
-            new VehicleHalPropertyHandler() {
+            new FailingPropertyHandler() {
         @Override
         public void onPropertySet(VehiclePropValue value) {
             //TODO
         }
-
-        @Override
-        public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            fail("cannot get");
-            return null;
-        }
-
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-            fail("cannot subscribe");
-        }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) {
-            fail("cannot unsubscribe");
-        }
     };
 
     private final FocusPropertyHandler mAudioFocusPropertyHandler =
             new FocusPropertyHandler(this);
 
-    private final Semaphore mWaitSemaphore = new Semaphore(0);
-    private final LinkedList<VehiclePropValue> mEvents = new LinkedList<VehiclePropValue>();
     private AudioManager mAudioManager;
 
     @Override
+    protected synchronized void configureMockedHal() {
+        addProperty(VehicleProperty.AUDIO_ROUTING_POLICY, mAudioRoutingPolicyPropertyHandler)
+                .setAccess(VehiclePropertyAccess.WRITE);
+        addProperty(VehicleProperty.AUDIO_FOCUS, mAudioFocusPropertyHandler);
+
+        addStaticProperty(VehicleProperty.AUDIO_HW_VARIANT,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_HW_VARIANT)
+                        .addIntValue(-1)
+                        .build())
+                .setConfigArray(Lists.newArrayList(0));
+    }
+
+    @Override
     protected void setUp() throws Exception {
         super.setUp();
         // AudioManager should be created in main thread to get focus event. :(
@@ -94,65 +89,41 @@
                 mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
             }
         });
-
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                        mAudioRoutingPolicyPropertyHandler);
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                        mAudioFocusPropertyHandler);
-        getVehicleHalEmulator().addStaticProperty(
-                VehiclePropConfigUtil.createStaticStringProperty(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT),
-                VehiclePropValueUtil.createIntValue(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT, -1, 0));
-        getVehicleHalEmulator().start();
     }
 
     private void notifyStreamState(int streamNumber, boolean active) {
         int[] values = { active ? 1 : 0, streamNumber };
         long now = SystemClock.elapsedRealtimeNanos();
-        getVehicleHalEmulator().injectEvent(VehiclePropValueUtil.createIntVectorValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_INTERNAL_AUDIO_STREAM_STATE,values, now));
+        // TODO(pavelm): we don't have internal properties anymore.
+//        getMockedVehicleHal().injectEvent(VehiclePropValueUtil.createIntVectorValue(
+//                INTERNAL_AUDIO_STREAM_STATE, values, now));
     }
 
     public void testSystemSoundPlayStop() throws Exception {
         //system sound start
         notifyStreamState(1, true);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_NO_DUCK,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT_NO_DUCK,
                 request[0]);
         assertEquals(0x2, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.SYSTEM_SOUND_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT,
+                VehicleAudioFocusState.STATE_GAIN_TRANSIENT,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
         // system sound stop
         notifyStreamState(1, false);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE,
                 request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
     }
 
     public void testRadioSystemSound() throws Exception {
@@ -167,51 +138,51 @@
                 radioAttributes, AudioManager.AUDIOFOCUS_GAIN, 0);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
         assertEquals(0, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.RADIO_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG);
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG);
         // system sound start
         notifyStreamState(1, true);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
         assertEquals(0x2, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.RADIO_FLAG |
+                VehicleAudioContextFlag.SYSTEM_SOUND_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG);
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG);
         // system sound stop
         notifyStreamState(1, false);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
         assertEquals(0, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.RADIO_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG);
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG);
         // radio stop
         mAudioManager.abandonAudioFocus(listenerRadio);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE, request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
     }
 
     public void testMusicSystemSound() throws Exception {
@@ -222,48 +193,48 @@
                 AudioManager.AUDIOFOCUS_GAIN);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0, request[1]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM0, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
         // system sound start
         notifyStreamState(1, true);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
         assertEquals(0x1 | 0x2, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG |
+                VehicleAudioContextFlag.SYSTEM_SOUND_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
         // system sound stop
         notifyStreamState(1, false);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0, request[1]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM0, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
         // music stop
         mAudioManager.abandonAudioFocus(listenerMusic);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE, request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
     }
 
     public void testNavigationSystemSound() throws Exception {
@@ -277,15 +248,15 @@
                 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT_MAY_DUCK,
                 request[0]);
         assertEquals(0x2, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.NAVIGATION_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT,
+                VehicleAudioFocusState.STATE_GAIN_TRANSIENT,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
         // system sound start
         notifyStreamState(1, true);
         // cannot distinguish this case from nav only. so no focus change.
@@ -296,20 +267,21 @@
         // nav guidance stop
         mAudioManager.abandonAudioFocus(listenerNav);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE, request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
     }
 
-    protected static class AudioFocusListener implements AudioManager.OnAudioFocusChangeListener {
+    private static class AudioFocusListener implements AudioManager.OnAudioFocusChangeListener {
         private final Semaphore mFocusChangeWait = new Semaphore(0);
         private int mLastFocusChange;
 
+        // TODO: not used?
         public int waitAndGetFocusChange(long timeoutMs) throws Exception {
             if (!mFocusChangeWait.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) {
                 fail("timeout waiting for focus change");
@@ -332,9 +304,9 @@
         }
     }
 
-    protected static class FocusPropertyHandler implements VehicleHalPropertyHandler {
+    private static class FocusPropertyHandler implements VehicleHalPropertyHandler {
 
-        private int mState = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS;
+        private int mState = VehicleAudioFocusState.STATE_LOSS;
         private int mStreams = 0;
         private int mExtFocus = 0;
         private int mRequest;
@@ -345,23 +317,24 @@
 
         private final Semaphore mSetWaitSemaphore = new Semaphore(0);
 
-        public FocusPropertyHandler(MockedCarTestBase carTest) {
+        FocusPropertyHandler(MockedCarTestBase carTest) {
             mCarTest = carTest;
         }
 
-        public void sendAudioFocusState(int state, int streams, int extFocus) {
+        void sendAudioFocusState(int state, int streams, int extFocus) {
             synchronized (this) {
                 mState = state;
                 mStreams = streams;
                 mExtFocus = extFocus;
             }
-            int[] values = { state, streams, extFocus, 0 };
-            mCarTest.getVehicleHalEmulator().injectEvent(VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, values,
-                    SystemClock.elapsedRealtimeNanos()));
+            mCarTest.getMockedVehicleHal().injectEvent(
+                    VehiclePropValueBuilder.newBuilder(AUDIO_FOCUS)
+                            .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                            .addIntValue(state, streams, extFocus, 0)
+                            .build());
         }
 
-        public int[] waitForAudioFocusRequest(long timeoutMs) throws Exception {
+        int[] waitForAudioFocusRequest(long timeoutMs) throws Exception {
             if (!mSetWaitSemaphore.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) {
                 fail("timeout");
             }
@@ -371,7 +344,7 @@
             }
         }
 
-        public void assertNoFocusRequest(long timeoutMs) throws Exception {
+        void assertNoFocusRequest(long timeoutMs) throws Exception {
             if (mSetWaitSemaphore.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) {
                 fail("should not get focus request");
             }
@@ -379,43 +352,40 @@
 
         @Override
         public void onPropertySet(VehiclePropValue value) {
-            assertEquals(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, value.getProp());
+            assertEquals(AUDIO_FOCUS, value.prop);
+            ArrayList<Integer> v = value.value.int32Values;
             synchronized (this) {
-                mRequest = value.getInt32Values(
-                        VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_FOCUS);
-                mRequestedStreams = value.getInt32Values(
-                        VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_STREAMS);
-                mRequestedExtFocus = value.getInt32Values(
-                        VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_EXTERNAL_FOCUS_STATE);
-                mRequestedAudioContexts = value.getInt32Values(
-                        VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_AUDIO_CONTEXTS);
+                mRequest = v.get(VehicleAudioFocusIndex.FOCUS);
+                mRequestedStreams = v.get(VehicleAudioFocusIndex.STREAMS);
+                mRequestedExtFocus = v.get(VehicleAudioFocusIndex.EXTERNAL_FOCUS_STATE);
+                mRequestedAudioContexts = v.get(VehicleAudioFocusIndex.AUDIO_CONTEXTS);
             }
             mSetWaitSemaphore.release();
         }
 
         @Override
         public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            assertEquals(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, value.getProp());
+            assertEquals(VehicleProperty.AUDIO_FOCUS, value.prop);
             int state, streams, extFocus;
             synchronized (this) {
                 state = mState;
                 streams = mStreams;
                 extFocus = mExtFocus;
             }
-            int[] values = { state, streams, extFocus, 0 };
-            return VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, values,
-                    SystemClock.elapsedRealtimeNanos());
+            return VehiclePropValueBuilder.newBuilder(AUDIO_FOCUS)
+                    .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                    .addIntValue(state, streams, extFocus, 0)
+                    .build();
         }
 
         @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-            assertEquals(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, property);
+        public void onPropertySubscribe(int property, int zones, float sampleRate) {
+            assertEquals(VehicleProperty.AUDIO_FOCUS, property);
         }
 
         @Override
         public void onPropertyUnsubscribe(int property) {
-            assertEquals(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, property);
+            assertEquals(VehicleProperty.AUDIO_FOCUS, property);
         }
     }
 }
diff --git a/tests/carservice_test/src/com/android/car/test/CarAudioFocusTest.java b/tests/carservice_test/src/com/android/car/test/CarAudioFocusTest.java
index da0b6ac..8cc2187 100644
--- a/tests/carservice_test/src/com/android/car/test/CarAudioFocusTest.java
+++ b/tests/carservice_test/src/com/android/car/test/CarAudioFocusTest.java
@@ -15,35 +15,37 @@
  */
 package com.android.car.test;
 
+import static android.hardware.vehicle.V2_0.VehicleProperty.AUDIO_FOCUS;
+
 import android.car.Car;
 import android.car.media.CarAudioManager;
-import android.car.test.VehicleHalEmulator.VehicleHalPropertyHandler;
 import android.content.Context;
+import android.hardware.vehicle.V2_0.VehicleAudioContextFlag;
+import android.hardware.vehicle.V2_0.VehicleAudioExtFocusFlag;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusIndex;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusRequest;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusState;
+import android.hardware.vehicle.V2_0.VehicleAudioStream;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.hardware.vehicle.V2_0.VehiclePropertyAccess;
 import android.media.AudioAttributes;
 import android.media.AudioManager;
 import android.os.SystemClock;
 import android.test.suitebuilder.annotation.MediumTest;
 import android.util.Log;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioContextFlag;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioExtFocusFlag;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusIndex;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusRequest;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusState;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioStream;
-import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePermissionModel;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
+import com.google.android.collect.Lists;
 
-import java.util.LinkedList;
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
+import com.android.car.vehiclehal.test.MockedVehicleHal.FailingPropertyHandler;
+import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
+
+import java.util.ArrayList;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
 
+// TODO: refactor all CarAudio*Test classes, they have a lot of common logic.
 @MediumTest
 public class CarAudioFocusTest extends MockedCarTestBase {
     private static final String TAG = CarAudioFocusTest.class.getSimpleName();
@@ -51,37 +53,33 @@
     private static final long TIMEOUT_MS = 3000;
 
     private final VehicleHalPropertyHandler mAudioRoutingPolicyPropertyHandler =
-            new VehicleHalPropertyHandler() {
+            new FailingPropertyHandler() {
         @Override
         public void onPropertySet(VehiclePropValue value) {
             //TODO
         }
-
-        @Override
-        public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            fail("cannot get");
-            return null;
-        }
-
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-            fail("cannot subscribe");
-        }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) {
-            fail("cannot unsubscribe");
-        }
     };
 
     private final FocusPropertyHandler mAudioFocusPropertyHandler =
             new FocusPropertyHandler(this);
 
-    private final Semaphore mWaitSemaphore = new Semaphore(0);
-    private final LinkedList<VehiclePropValue> mEvents = new LinkedList<VehiclePropValue>();
     private AudioManager mAudioManager;
 
     @Override
+    protected synchronized void configureMockedHal() {
+        addProperty(VehicleProperty.AUDIO_ROUTING_POLICY, mAudioRoutingPolicyPropertyHandler)
+                .setAccess(VehiclePropertyAccess.WRITE);
+
+        addProperty(VehicleProperty.AUDIO_FOCUS, mAudioFocusPropertyHandler);
+
+        addStaticProperty(VehicleProperty.AUDIO_HW_VARIANT,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_HW_VARIANT)
+                        .addIntValue(-1)
+                        .build())
+                .setConfigArray(Lists.newArrayList(0));
+    }
+
+    @Override
     protected void setUp() throws Exception {
         super.setUp();
         // AudioManager should be created in main thread to get focus event. :(
@@ -91,31 +89,6 @@
                 mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
             }
         });
-
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                        mAudioRoutingPolicyPropertyHandler);
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                        mAudioFocusPropertyHandler);
-        getVehicleHalEmulator().addStaticProperty(
-                VehiclePropConfigUtil.createStaticStringProperty(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT),
-                VehiclePropValueUtil.createIntValue(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT, -1, 0));
-        getVehicleHalEmulator().start();
     }
 
     public void testMediaGainFocus() throws Exception {
@@ -123,40 +96,40 @@
         checkSingleRequestRelease(
                 AudioManager.STREAM_MUSIC,
                 AudioManager.AUDIOFOCUS_GAIN,
-                VehicleAudioStream.VEHICLE_AUDIO_STREAM0,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG);
+                VehicleAudioStream.STREAM0,
+                VehicleAudioContextFlag.MUSIC_FLAG);
     }
 
     public void testMediaGainTransientFocus() throws Exception {
         checkSingleRequestRelease(
                 AudioManager.STREAM_MUSIC,
                 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT,
-                VehicleAudioStream.VEHICLE_AUDIO_STREAM0,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG);
+                VehicleAudioStream.STREAM0,
+                VehicleAudioContextFlag.MUSIC_FLAG);
     }
 
     public void testMediaGainTransientMayDuckFocus() throws Exception {
         checkSingleRequestRelease(
                 AudioManager.STREAM_MUSIC,
                 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK,
-                VehicleAudioStream.VEHICLE_AUDIO_STREAM0,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG);
+                VehicleAudioStream.STREAM0,
+                VehicleAudioContextFlag.MUSIC_FLAG);
     }
 
     public void testAlarmGainTransientFocus() throws Exception {
         checkSingleRequestRelease(
                 AudioManager.STREAM_ALARM,
                 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT,
-                VehicleAudioStream.VEHICLE_AUDIO_STREAM1,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG);
+                VehicleAudioStream.STREAM1,
+                VehicleAudioContextFlag.ALARM_FLAG);
     }
 
     public void testAlarmGainTransientMayDuckFocus() throws Exception {
         checkSingleRequestRelease(
                 AudioManager.STREAM_ALARM,
                 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK,
-                VehicleAudioStream.VEHICLE_AUDIO_STREAM1,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG);
+                VehicleAudioStream.STREAM1,
+                VehicleAudioContextFlag.ALARM_FLAG);
     }
 
     public void testMediaNavFocus() throws Exception {
@@ -167,14 +140,14 @@
                 AudioManager.AUDIOFOCUS_GAIN);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0, request[1]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM0, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
 
         // nav guidance start
         AudioFocusListener listenerNav = new AudioFocusListener();
@@ -182,39 +155,39 @@
                 setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION).
                 setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE).
                 build();
-        res = mAudioManager.requestAudioFocus(listenerNav, navAttrib,
+        mAudioManager.requestAudioFocus(listenerNav, navAttrib,
                 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
         assertEquals(0x3, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG |
+                VehicleAudioContextFlag.NAVIGATION_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN, request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioFocusState.STATE_GAIN, request[1],
+                VehicleAudioExtFocusFlag.NONE_FLAG);
 
         // nav guidance done
         mAudioManager.abandonAudioFocus(listenerNav);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0, request[1]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM0, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN, request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioFocusState.STATE_GAIN, request[1],
+                VehicleAudioExtFocusFlag.NONE_FLAG);
 
         // music done
         mAudioManager.abandonAudioFocus(listenerMusic);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE, request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS, request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioFocusState.STATE_LOSS, request[1],
+                VehicleAudioExtFocusFlag.NONE_FLAG);
     }
 
     public void testMediaExternalMediaNavFocus() throws Exception {
@@ -225,20 +198,20 @@
                 AudioManager.AUDIOFOCUS_GAIN);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0, request[1]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM0, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
 
         // car plays external media (=outside Android)
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG);
+                VehicleAudioExtFocusFlag.PERMANENT_FLAG);
         int focusChange = listenerMusic.waitAndGetFocusChange(TIMEOUT_MS);
         assertEquals(AudioManager.AUDIOFOCUS_LOSS, focusChange);
 
@@ -248,34 +221,34 @@
                 setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION).
                 setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE).
                 build();
-        res = mAudioManager.requestAudioFocus(listenerNav, navAttrib,
+        mAudioManager.requestAudioFocus(listenerNav, navAttrib,
                 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT_MAY_DUCK,
                 request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM1, request[1]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM1, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.NAVIGATION_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT,
-                0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM1,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG);
+                VehicleAudioFocusState.STATE_GAIN_TRANSIENT,
+                0x1 << VehicleAudioStream.STREAM1,
+                VehicleAudioExtFocusFlag.PERMANENT_FLAG);
 
         // nav guidance ends
         mAudioManager.abandonAudioFocus(listenerNav);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE, request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PERMANENT_FLAG);
+                VehicleAudioExtFocusFlag.PERMANENT_FLAG);
 
         // now ends external play
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 0,
                 0);
         mAudioManager.abandonAudioFocus(listenerMusic);
@@ -290,14 +263,14 @@
                 AudioManager.AUDIOFOCUS_GAIN);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0, request[1]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM0, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
 
         // android radio
         AudioFocusListener listenerRadio = new AudioFocusListener();
@@ -310,15 +283,15 @@
                 radioAttributes, AudioManager.AUDIOFOCUS_GAIN, 0);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
         assertEquals(0, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.RADIO_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG);
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG);
 
         // nav guidance start
         AudioFocusListener listenerNav = new AudioFocusListener();
@@ -329,31 +302,31 @@
         res = mAudioManager.requestAudioFocus(listenerNav, navAttrib,
                 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN,
                 request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM1, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
+        assertEquals(0x1 << VehicleAudioStream.STREAM1, request[1]);
+        assertEquals(VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG |
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.NAVIGATION_FLAG |
+                VehicleAudioContextFlag.RADIO_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
-                0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM1,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG);
+                VehicleAudioFocusState.STATE_GAIN,
+                0x1 << VehicleAudioStream.STREAM1,
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG);
 
         // nav guidance ends
         mAudioManager.abandonAudioFocus(listenerNav);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN,
                 request[0]);
         assertEquals(0, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.RADIO_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG);
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG);
 
         // ends radio. music will get the focus GAIN.
         // Music app is supposed to stop and release focus when it has lost focus, but here just
@@ -361,26 +334,26 @@
         mAudioManager.abandonAudioFocus(listenerRadio);
         listenerMusic.waitForFocus(TIMEOUT_MS, AudioManager.AUDIOFOCUS_GAIN);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0, request[1]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
+        assertEquals(0x1 << VehicleAudioStream.STREAM0, request[1]);
         assertEquals(0, request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.MUSIC_FLAG, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
-                0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM0,
+                VehicleAudioFocusState.STATE_GAIN,
+                0x1 << VehicleAudioStream.STREAM0,
                 0);
 
         // now music release focus.
         mAudioManager.abandonAudioFocus(listenerMusic);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE, request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
     }
 
     private void checkSingleRequestRelease(int streamType, int androidFocus, int streamNumber,
@@ -392,22 +365,22 @@
                 androidFocus);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        int expectedRequest = VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE;
-        int response = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS;
+        int expectedRequest = VehicleAudioFocusRequest.REQUEST_RELEASE;
+        int response = VehicleAudioFocusState.STATE_LOSS;
         switch (androidFocus) {
             case AudioManager.AUDIOFOCUS_GAIN:
-                expectedRequest = VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN;
-                response = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN;
+                expectedRequest = VehicleAudioFocusRequest.REQUEST_GAIN;
+                response = VehicleAudioFocusState.STATE_GAIN;
                 break;
             case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT:
                 expectedRequest =
-                    VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT;
-                response = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT;
+                    VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT;
+                response = VehicleAudioFocusState.STATE_GAIN_TRANSIENT;
                 break;
             case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:
                 expectedRequest =
-                    VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK;
-                response = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN_TRANSIENT;
+                    VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT_MAY_DUCK;
+                response = VehicleAudioFocusState.STATE_GAIN_TRANSIENT;
                 break;
         }
         assertEquals(expectedRequest, request[0]);
@@ -417,31 +390,31 @@
         mAudioFocusPropertyHandler.sendAudioFocusState(
                 response,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
         mAudioManager.abandonAudioFocus(lister);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_RELEASE, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_RELEASE, request[0]);
         assertEquals(0, request[1]);
         assertEquals(0, request[2]);
         assertEquals(0, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS,
+                VehicleAudioFocusState.STATE_LOSS,
                 request[1],
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                VehicleAudioExtFocusFlag.NONE_FLAG);
     }
 
     public void testRadioMute() throws Exception {
         doTestMediaMute(CarAudioManager.CAR_AUDIO_USAGE_RADIO,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_PLAY_ONLY_FLAG,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG);
+                VehicleAudioExtFocusFlag.PLAY_ONLY_FLAG,
+                VehicleAudioContextFlag.RADIO_FLAG);
     }
 
     public void testMusicMute() throws Exception {
         doTestMediaMute(CarAudioManager.CAR_AUDIO_USAGE_MUSIC,
                 0x1,
                 0,
-                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG);
+                VehicleAudioContextFlag.MUSIC_FLAG);
     }
 
     private void doTestMediaMute(int mediaUsage, int primaryStream, int extFocusFlag,
@@ -457,12 +430,12 @@
                 radioAttributes, AudioManager.AUDIOFOCUS_GAIN, 0);
         assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
         int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
         assertEquals(primaryStream, request[1]);
         assertEquals(extFocusFlag, request[2]);
         assertEquals(mediaContext, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 primaryStream,
                 extFocusFlag);
         // now mute it.
@@ -470,16 +443,16 @@
         Log.i(TAG, "mute media");
         assertTrue(carAudioManager.setMediaMute(true));
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT,
                 request[0]);
         assertEquals(0, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.MUTE_MEDIA_FLAG,
                 request[2]);
         assertEquals(0, request[3]);
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG);
+                VehicleAudioExtFocusFlag.MUTE_MEDIA_FLAG);
         assertTrue(carAudioManager.isMediaMuted());
         // nav guidance on top of it
         AudioFocusListener listenerNav = new AudioFocusListener();
@@ -491,45 +464,45 @@
         res = mAudioManager.requestAudioFocus(listenerNav, navAttrib,
                 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT_MAY_DUCK,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT_MAY_DUCK,
                 request[0]);
-        assertEquals(0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM1, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG,
+        assertEquals(0x1 << VehicleAudioStream.STREAM1, request[1]);
+        assertEquals(VehicleAudioExtFocusFlag.MUTE_MEDIA_FLAG,
                 request[2]);
-        assertEquals(VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG, request[3]);
+        assertEquals(VehicleAudioContextFlag.NAVIGATION_FLAG, request[3]);
         assertTrue(carAudioManager.isMediaMuted());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
-                0x1 << VehicleAudioStream.VEHICLE_AUDIO_STREAM1,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG);
+                VehicleAudioFocusState.STATE_GAIN,
+                0x1 << VehicleAudioStream.STREAM1,
+                VehicleAudioExtFocusFlag.MUTE_MEDIA_FLAG);
         assertTrue(carAudioManager.isMediaMuted());
         // nav guidance ends
         mAudioManager.abandonAudioFocus(listenerNav);
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN_TRANSIENT,
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN_TRANSIENT,
                 request[0]);
         assertEquals(0, request[1]);
-        assertEquals(VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG,
+        assertEquals(VehicleAudioExtFocusFlag.MUTE_MEDIA_FLAG,
                 request[2]);
         assertEquals(0, request[3]);
         assertTrue(carAudioManager.isMediaMuted());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 0,
-                VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_CAR_MUTE_MEDIA_FLAG);
+                VehicleAudioExtFocusFlag.MUTE_MEDIA_FLAG);
         // now unmute it. radio should resume.
         assertTrue(carAudioManager.isMediaMuted());
         assertFalse(carAudioManager.setMediaMute(false));
         assertFalse(carAudioManager.isMediaMuted());
         request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
-        assertEquals(VehicleAudioFocusRequest.VEHICLE_AUDIO_FOCUS_REQUEST_GAIN, request[0]);
+        assertEquals(VehicleAudioFocusRequest.REQUEST_GAIN, request[0]);
         assertEquals(primaryStream, request[1]);
         assertEquals(extFocusFlag,
                 request[2]);
         assertEquals(mediaContext, request[3]);
         assertFalse(carAudioManager.isMediaMuted());
         mAudioFocusPropertyHandler.sendAudioFocusState(
-                VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                VehicleAudioFocusState.STATE_GAIN,
                 primaryStream,
                 extFocusFlag);
         assertFalse(carAudioManager.isMediaMuted());
@@ -537,18 +510,18 @@
         mAudioManager.abandonAudioFocus(listenerMedia);
     }
 
-    protected static class AudioFocusListener implements AudioManager.OnAudioFocusChangeListener {
+    static class AudioFocusListener implements AudioManager.OnAudioFocusChangeListener {
         private final Semaphore mFocusChangeWait = new Semaphore(0);
         private int mLastFocusChange;
 
-        public int waitAndGetFocusChange(long timeoutMs) throws Exception {
+        int waitAndGetFocusChange(long timeoutMs) throws Exception {
             if (!mFocusChangeWait.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) {
                 fail("timeout waiting for focus change");
             }
             return mLastFocusChange;
         }
 
-        public void waitForFocus(long timeoutMs, int expectedFocus) throws Exception {
+        void waitForFocus(long timeoutMs, int expectedFocus) throws Exception {
             while (mLastFocusChange != expectedFocus) {
                 if (!mFocusChangeWait.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) {
                     fail("timeout waiting for focus change");
@@ -563,9 +536,9 @@
         }
     }
 
-    protected static class FocusPropertyHandler implements VehicleHalPropertyHandler {
+    static class FocusPropertyHandler implements VehicleHalPropertyHandler {
 
-        private int mState = VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_LOSS;
+        private int mState = VehicleAudioFocusState.STATE_LOSS;
         private int mStreams = 0;
         private int mExtFocus = 0;
         private int mRequest;
@@ -576,23 +549,24 @@
 
         private final Semaphore mSetWaitSemaphore = new Semaphore(0);
 
-        public FocusPropertyHandler(MockedCarTestBase carTest) {
+        FocusPropertyHandler(MockedCarTestBase carTest) {
             mCarTest = carTest;
         }
 
-        public void sendAudioFocusState(int state, int streams, int extFocus) {
+        void sendAudioFocusState(int state, int streams, int extFocus) {
             synchronized (this) {
                 mState = state;
                 mStreams = streams;
                 mExtFocus = extFocus;
             }
-            int[] values = { state, streams, extFocus, 0 };
-            mCarTest.getVehicleHalEmulator().injectEvent(VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, values,
-                    SystemClock.elapsedRealtimeNanos()));
+            mCarTest.getMockedVehicleHal().injectEvent(
+                    VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_FOCUS)
+                            .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                            .addIntValue(state, streams, extFocus, 0)
+                            .build());
         }
 
-        public int[] waitForAudioFocusRequest(long timeoutMs) throws Exception {
+        int[] waitForAudioFocusRequest(long timeoutMs) throws Exception {
             if (!mSetWaitSemaphore.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) {
                 fail("timeout");
             }
@@ -604,43 +578,40 @@
 
         @Override
         public void onPropertySet(VehiclePropValue value) {
-            assertEquals(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, value.getProp());
+            assertEquals(VehicleProperty.AUDIO_FOCUS, value.prop);
+            ArrayList<Integer> v = value.value.int32Values;
             synchronized (this) {
-                mRequest = value.getInt32Values(
-                        VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_FOCUS);
-                mRequestedStreams = value.getInt32Values(
-                        VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_STREAMS);
-                mRequestedExtFocus = value.getInt32Values(
-                        VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_EXTERNAL_FOCUS_STATE);
-                mRequestedAudioContexts = value.getInt32Values(
-                        VehicleAudioFocusIndex.VEHICLE_AUDIO_FOCUS_INDEX_AUDIO_CONTEXTS);
+                mRequest = v.get(VehicleAudioFocusIndex.FOCUS);
+                mRequestedStreams = v.get(VehicleAudioFocusIndex.STREAMS);
+                mRequestedExtFocus = v.get(VehicleAudioFocusIndex.EXTERNAL_FOCUS_STATE);
+                mRequestedAudioContexts = v.get(VehicleAudioFocusIndex.AUDIO_CONTEXTS);
             }
             mSetWaitSemaphore.release();
         }
 
         @Override
         public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            assertEquals(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, value.getProp());
+            assertEquals(VehicleProperty.AUDIO_FOCUS, value.prop);
             int state, streams, extFocus;
             synchronized (this) {
                 state = mState;
                 streams = mStreams;
                 extFocus = mExtFocus;
             }
-            int[] values = { state, streams, extFocus, 0 };
-            return VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, values,
-                    SystemClock.elapsedRealtimeNanos());
+            return VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_FOCUS)
+                    .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                    .addIntValue(state, streams, extFocus, 0)
+                    .build();
         }
 
         @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-            assertEquals(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, property);
+        public void onPropertySubscribe(int property, int zones, float sampleRate) {
+            assertEquals(AUDIO_FOCUS, property);
         }
 
         @Override
         public void onPropertyUnsubscribe(int property) {
-            assertEquals(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS, property);
+            assertEquals(AUDIO_FOCUS, property);
         }
     }
 }
diff --git a/tests/carservice_test/src/com/android/car/test/CarCabinManagerTest.java b/tests/carservice_test/src/com/android/car/test/CarCabinManagerTest.java
index bf13bda..7024250 100644
--- a/tests/carservice_test/src/com/android/car/test/CarCabinManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/test/CarCabinManagerTest.java
@@ -17,22 +17,19 @@
 package com.android.car.test;
 
 import android.car.Car;
+import android.car.hardware.CarPropertyValue;
 import android.car.hardware.cabin.CarCabinManager;
 import android.car.hardware.cabin.CarCabinManager.CarCabinEventCallback;
-import android.car.hardware.CarPropertyValue;
-import android.car.test.VehicleHalEmulator;
+import android.hardware.vehicle.V2_0.VehicleAreaDoor;
+import android.hardware.vehicle.V2_0.VehicleAreaWindow;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.os.SystemClock;
 import android.test.suitebuilder.annotation.MediumTest;
 import android.util.Log;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleDoor;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleWindow;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
+import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
 
 import java.util.HashMap;
 import java.util.concurrent.Semaphore;
@@ -47,63 +44,52 @@
 
     private CarCabinManager mCarCabinManager;
     private boolean mEventBoolVal;
-    private float mEventFloatVal;
     private int mEventIntVal;
     private int mEventZoneVal;
 
     @Override
+    protected synchronized void configureMockedHal() {
+        CabinPropertyHandler handler = new CabinPropertyHandler();
+        addProperty(VehicleProperty.DOOR_LOCK, handler)
+                .setSupportedAreas(VehicleAreaDoor.ROW_1_LEFT);
+        addProperty(VehicleProperty.WINDOW_POS, handler)
+                .setSupportedAreas(VehicleAreaWindow.ROW_1_LEFT);
+    }
+
+    @Override
     protected void setUp() throws Exception {
         super.setUp();
         mAvailable = new Semaphore(0);
-        CabinPropertyHandler handler = new CabinPropertyHandler();
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.createZonedProperty(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_DOOR_LOCK,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN,
-                        VehicleNetworkConsts.VehicleDoor.VEHICLE_DOOR_ROW_1_LEFT,
-                        0), handler);
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.createZonedProperty(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_WINDOW_POS,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32,
-                        VehicleWindow.VEHICLE_WINDOW_ROW_1_LEFT,
-                        0), handler);
-
-        getVehicleHalEmulator().start();
         mCarCabinManager = (CarCabinManager) getCar().getCarManager(Car.CABIN_SERVICE);
     }
 
     // Test a boolean property
     public void testCabinDoorLockOn() throws Exception {
         mCarCabinManager.setBooleanProperty(CarCabinManager.ID_DOOR_LOCK,
-                VehicleDoor.VEHICLE_DOOR_ROW_1_LEFT, true);
+                VehicleAreaDoor.ROW_1_LEFT, true);
         boolean lock = mCarCabinManager.getBooleanProperty(CarCabinManager.ID_DOOR_LOCK,
-                VehicleDoor.VEHICLE_DOOR_ROW_1_LEFT);
+                VehicleAreaDoor.ROW_1_LEFT);
         assertTrue(lock);
 
         mCarCabinManager.setBooleanProperty(CarCabinManager.ID_DOOR_LOCK,
-                VehicleDoor.VEHICLE_DOOR_ROW_1_LEFT, false);
+                VehicleAreaDoor.ROW_1_LEFT, false);
         lock = mCarCabinManager.getBooleanProperty(CarCabinManager.ID_DOOR_LOCK,
-                VehicleDoor.VEHICLE_DOOR_ROW_1_LEFT);
+                VehicleAreaDoor.ROW_1_LEFT);
         assertFalse(lock);
     }
 
     // Test an integer property
     public void testCabinWindowPos() throws Exception {
         mCarCabinManager.setIntProperty(CarCabinManager.ID_WINDOW_POS,
-                VehicleWindow.VEHICLE_WINDOW_ROW_1_LEFT, 50);
+                VehicleAreaWindow.ROW_1_LEFT, 50);
         int windowPos = mCarCabinManager.getIntProperty(CarCabinManager.ID_WINDOW_POS,
-                VehicleWindow.VEHICLE_WINDOW_ROW_1_LEFT);
+                VehicleAreaWindow.ROW_1_LEFT);
         assertEquals(50, windowPos);
 
         mCarCabinManager.setIntProperty(CarCabinManager.ID_WINDOW_POS,
-                VehicleWindow.VEHICLE_WINDOW_ROW_1_LEFT, 25);
+                VehicleAreaWindow.ROW_1_LEFT, 25);
         windowPos = mCarCabinManager.getIntProperty(CarCabinManager.ID_WINDOW_POS,
-                VehicleWindow.VEHICLE_WINDOW_ROW_1_LEFT);
+                VehicleAreaWindow.ROW_1_LEFT);
         assertEquals(25, windowPos);
     }
 
@@ -112,47 +98,52 @@
         mCarCabinManager.registerCallback(new EventListener());
 
         // Inject a boolean event and wait for its callback in onPropertySet.
-        VehiclePropValue v = VehiclePropValueUtil.createZonedBooleanValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_DOOR_LOCK,
-                VehicleDoor.VEHICLE_DOOR_ROW_1_LEFT, true, 0);
+        VehiclePropValue v = VehiclePropValueBuilder.newBuilder(VehicleProperty.DOOR_LOCK)
+                .setAreaId(VehicleAreaDoor.ROW_1_LEFT)
+                .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                .addIntValue(1)
+                .build();
+
         assertEquals(0, mAvailable.availablePermits());
-        getVehicleHalEmulator().injectEvent(v);
+        getMockedVehicleHal().injectEvent(v);
 
         assertTrue(mAvailable.tryAcquire(2L, TimeUnit.SECONDS));
         assertTrue(mEventBoolVal);
-        assertEquals(mEventZoneVal, VehicleDoor.VEHICLE_DOOR_ROW_1_LEFT);
+        assertEquals(VehicleAreaDoor.ROW_1_LEFT, mEventZoneVal);
 
         // Inject an integer event and wait for its callback in onPropertySet.
-        v = VehiclePropValueUtil.createZonedIntValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_WINDOW_POS,
-                VehicleWindow.VEHICLE_WINDOW_ROW_1_LEFT, 75, 0);
+        v = VehiclePropValueBuilder.newBuilder(VehicleProperty.WINDOW_POS)
+                .setAreaId(VehicleAreaWindow.ROW_1_LEFT)
+                .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                .addIntValue(75)
+                .build();
+
         assertEquals(0, mAvailable.availablePermits());
-        getVehicleHalEmulator().injectEvent(v);
+        getMockedVehicleHal().injectEvent(v);
 
         assertTrue(mAvailable.tryAcquire(2L, TimeUnit.SECONDS));
         assertEquals(mEventIntVal, 75);
-        assertEquals(mEventZoneVal, VehicleWindow.VEHICLE_WINDOW_ROW_1_LEFT);
+        assertEquals(VehicleAreaWindow.ROW_1_LEFT, mEventZoneVal);
     }
 
 
-    private class CabinPropertyHandler
-            implements VehicleHalEmulator.VehicleHalPropertyHandler {
+    private class CabinPropertyHandler implements VehicleHalPropertyHandler {
         HashMap<Integer, VehiclePropValue> mMap = new HashMap<>();
 
         @Override
         public synchronized void onPropertySet(VehiclePropValue value) {
-            mMap.put(value.getProp(), value);
+            mMap.put(value.prop, value);
         }
 
         @Override
         public synchronized VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            VehiclePropValue currentValue = mMap.get(value.getProp());
-            // VNS will call getProperty method when subscribe is called, just return empty value.
+            VehiclePropValue currentValue = mMap.get(value.prop);
+            // VNS will call get method when subscribe is called, just return empty value.
             return currentValue != null ? currentValue : value;
         }
 
         @Override
-        public synchronized void onPropertySubscribe(int property, float sampleRate, int zones) {
+        public synchronized void onPropertySubscribe(int property, int zones, float sampleRate) {
             Log.d(TAG, "onPropertySubscribe property " + property + " sampleRate " + sampleRate);
         }
 
@@ -163,7 +154,7 @@
     }
 
     private class EventListener implements CarCabinEventCallback {
-        public EventListener() { }
+        EventListener() { }
 
         @Override
         public void onChangeEvent(final CarPropertyValue value) {
diff --git a/tests/carservice_test/src/com/android/car/test/CarHvacManagerTest.java b/tests/carservice_test/src/com/android/car/test/CarHvacManagerTest.java
index c422173..8510e4c 100644
--- a/tests/carservice_test/src/com/android/car/test/CarHvacManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/test/CarHvacManagerTest.java
@@ -17,22 +17,21 @@
 package com.android.car.test;
 
 import android.car.Car;
+import android.car.hardware.CarPropertyValue;
 import android.car.hardware.hvac.CarHvacManager;
 import android.car.hardware.hvac.CarHvacManager.CarHvacEventCallback;
-import android.car.hardware.CarPropertyValue;
-import android.car.test.VehicleHalEmulator;
+import android.hardware.vehicle.V2_0.VehicleAreaWindow;
+import android.hardware.vehicle.V2_0.VehicleAreaZone;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.hardware.vehicle.V2_0.VehiclePropertyAccess;
+import android.hardware.vehicle.V2_0.VehiclePropertyChangeMode;
+import android.os.SystemClock;
 import android.test.suitebuilder.annotation.MediumTest;
 import android.util.Log;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleWindow;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZone;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
+import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
 
 import java.util.HashMap;
 import java.util.concurrent.Semaphore;
@@ -52,89 +51,69 @@
     private int mEventZoneVal;
 
     @Override
+    protected synchronized void configureMockedHal() {
+        HvacPropertyHandler handler = new HvacPropertyHandler();
+        addProperty(VehicleProperty.HVAC_DEFROSTER, handler)
+                .setSupportedAreas(VehicleAreaWindow.FRONT_WINDSHIELD);
+        addProperty(VehicleProperty.HVAC_FAN_SPEED, handler)
+                .setSupportedAreas(VehicleAreaZone.ROW_1_LEFT);
+        addProperty(VehicleProperty.HVAC_TEMPERATURE_SET, handler)
+                .setSupportedAreas(VehicleAreaZone.ROW_1_LEFT);
+        addProperty(VehicleProperty.HVAC_TEMPERATURE_CURRENT, handler)
+                .setChangeMode(VehiclePropertyChangeMode.CONTINUOUS)
+                .setAccess(VehiclePropertyAccess.READ)
+                .setSupportedAreas(VehicleAreaZone.ROW_1);
+    }
+
+    @Override
     protected void setUp() throws Exception {
         super.setUp();
         mAvailable = new Semaphore(0);
-        HvacPropertyHandler handler = new HvacPropertyHandler();
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.createZonedProperty(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_DEFROSTER,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN,
-                        VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD,
-                        0), handler);
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.createZonedProperty(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_FAN_SPEED,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32,
-                        VehicleZone.VEHICLE_ZONE_ROW_1_LEFT,
-                        0), handler);
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.createZonedProperty(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT,
-                        VehicleZone.VEHICLE_ZONE_ROW_1_LEFT,
-                        0), handler);
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.createZonedProperty(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_TEMPERATURE_CURRENT,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_CONTINUOUS,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT,
-                        VehicleZone.VEHICLE_ZONE_ROW_1_ALL,
-                        0), handler);
-
-        getVehicleHalEmulator().start();
         mCarHvacManager = (CarHvacManager) getCar().getCarManager(Car.HVAC_SERVICE);
     }
 
     // Test a boolean property
     public void testHvacRearDefrosterOn() throws Exception {
         mCarHvacManager.setBooleanProperty(CarHvacManager.ID_WINDOW_DEFROSTER_ON,
-                VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD, true);
+                VehicleAreaWindow.FRONT_WINDSHIELD, true);
         boolean defrost = mCarHvacManager.getBooleanProperty(CarHvacManager.ID_WINDOW_DEFROSTER_ON,
-                VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD);
+                VehicleAreaWindow.FRONT_WINDSHIELD);
         assertTrue(defrost);
 
         mCarHvacManager.setBooleanProperty(CarHvacManager.ID_WINDOW_DEFROSTER_ON,
-                VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD, false);
+                VehicleAreaWindow.FRONT_WINDSHIELD, false);
         defrost = mCarHvacManager.getBooleanProperty(CarHvacManager.ID_WINDOW_DEFROSTER_ON,
-                VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD);
+                VehicleAreaWindow.FRONT_WINDSHIELD);
         assertFalse(defrost);
     }
 
     // Test an integer property
     public void testHvacFanSpeed() throws Exception {
         mCarHvacManager.setIntProperty(CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT, 15);
+                VehicleAreaZone.ROW_1_LEFT, 15);
         int speed = mCarHvacManager.getIntProperty(CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT);
+                VehicleAreaZone.ROW_1_LEFT);
         assertEquals(15, speed);
 
         mCarHvacManager.setIntProperty(CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT, 23);
+                VehicleAreaZone.ROW_1_LEFT, 23);
         speed = mCarHvacManager.getIntProperty(CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT);
+                VehicleAreaZone.ROW_1_LEFT);
         assertEquals(23, speed);
     }
 
     // Test an float property
     public void testHvacTempSetpoint() throws Exception {
         mCarHvacManager.setFloatProperty(CarHvacManager.ID_ZONED_TEMP_SETPOINT,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT, 70);
+                VehicleAreaZone.ROW_1_LEFT, 70);
         float temp = mCarHvacManager.getFloatProperty(CarHvacManager.ID_ZONED_TEMP_SETPOINT,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT);
+                VehicleAreaZone.ROW_1_LEFT);
         assertEquals(70.0, temp, 0);
 
         mCarHvacManager.setFloatProperty(CarHvacManager.ID_ZONED_TEMP_SETPOINT,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT, (float) 65.5);
+                VehicleAreaZone.ROW_1_LEFT, (float) 65.5);
         temp = mCarHvacManager.getFloatProperty(CarHvacManager.ID_ZONED_TEMP_SETPOINT,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT);
+                VehicleAreaZone.ROW_1_LEFT);
         assertEquals(65.5, temp, 0);
     }
 
@@ -143,58 +122,62 @@
         mCarHvacManager.registerCallback(new EventListener());
 
         // Inject a boolean event and wait for its callback in onPropertySet.
-        VehiclePropValue v = VehiclePropValueUtil.createZonedBooleanValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_DEFROSTER,
-                VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD, true, 0);
+        VehiclePropValue v = VehiclePropValueBuilder.newBuilder(VehicleProperty.HVAC_DEFROSTER)
+                .setAreaId(VehicleAreaWindow.FRONT_WINDSHIELD)
+                .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                .addIntValue(1)
+                .build();
         assertEquals(0, mAvailable.availablePermits());
-        getVehicleHalEmulator().injectEvent(v);
+        getMockedVehicleHal().injectEvent(v);
 
         assertTrue(mAvailable.tryAcquire(2L, TimeUnit.SECONDS));
         assertTrue(mEventBoolVal);
-        assertEquals(mEventZoneVal, VehicleWindow.VEHICLE_WINDOW_FRONT_WINDSHIELD);
+        assertEquals(mEventZoneVal, VehicleAreaWindow.FRONT_WINDSHIELD);
 
         // Inject a float event and wait for its callback in onPropertySet.
-        v = VehiclePropValueUtil.createZonedFloatValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_TEMPERATURE_CURRENT,
-                VehicleZone.VEHICLE_ZONE_ROW_1_ALL, 67, 0);
+        v = VehiclePropValueBuilder.newBuilder(VehicleProperty.HVAC_TEMPERATURE_CURRENT)
+                .setAreaId(VehicleAreaZone.ROW_1)
+                .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                .addFloatValue(67f)
+                .build();
         assertEquals(0, mAvailable.availablePermits());
-        getVehicleHalEmulator().injectEvent(v);
+        getMockedVehicleHal().injectEvent(v);
 
         assertTrue(mAvailable.tryAcquire(2L, TimeUnit.SECONDS));
-        assertEquals(mEventFloatVal, 67, 0);
-        assertEquals(mEventZoneVal, VehicleZone.VEHICLE_ZONE_ROW_1_ALL);
+        assertEquals(67, mEventFloatVal, 0);
+        assertEquals(VehicleAreaZone.ROW_1, mEventZoneVal);
 
         // Inject an integer event and wait for its callback in onPropertySet.
-        v = VehiclePropValueUtil.createZonedIntValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_FAN_SPEED,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT, 4, 0);
+        v = VehiclePropValueBuilder.newBuilder(VehicleProperty.HVAC_FAN_SPEED)
+                .setAreaId(VehicleAreaZone.ROW_1_LEFT)
+                .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                .addIntValue(4)
+                .build();
         assertEquals(0, mAvailable.availablePermits());
-        getVehicleHalEmulator().injectEvent(v);
+        getMockedVehicleHal().injectEvent(v);
 
         assertTrue(mAvailable.tryAcquire(2L, TimeUnit.SECONDS));
-        assertEquals(mEventIntVal, 4);
-        assertEquals(mEventZoneVal, VehicleZone.VEHICLE_ZONE_ROW_1_LEFT);
+        assertEquals(4, mEventIntVal);
+        assertEquals(VehicleAreaZone.ROW_1_LEFT, mEventZoneVal);
     }
 
-
-    private class HvacPropertyHandler
-            implements VehicleHalEmulator.VehicleHalPropertyHandler {
+    private class HvacPropertyHandler implements VehicleHalPropertyHandler {
         HashMap<Integer, VehiclePropValue> mMap = new HashMap<>();
 
         @Override
         public synchronized void onPropertySet(VehiclePropValue value) {
-            mMap.put(value.getProp(), value);
+            mMap.put(value.prop, value);
         }
 
         @Override
         public synchronized VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            VehiclePropValue currentValue = mMap.get(value.getProp());
-            // VNS will call getProperty method when subscribe is called, just return empty value.
+            VehiclePropValue currentValue = mMap.get(value.prop);
+            // VNS will call get method when subscribe is called, just return empty value.
             return currentValue != null ? currentValue : value;
         }
 
         @Override
-        public synchronized void onPropertySubscribe(int property, float sampleRate, int zones) {
+        public synchronized void onPropertySubscribe(int property, int zones, float sampleRate) {
             Log.d(TAG, "onPropertySubscribe property " + property + " sampleRate " + sampleRate);
         }
 
@@ -205,7 +188,7 @@
     }
 
     private class EventListener implements CarHvacEventCallback {
-        public EventListener() { }
+        EventListener() { }
 
         @Override
         public void onChangeEvent(final CarPropertyValue value) {
diff --git a/tests/carservice_test/src/com/android/car/test/CarInfoManagerTest.java b/tests/carservice_test/src/com/android/car/test/CarInfoManagerTest.java
index 5221970..151a24d 100644
--- a/tests/carservice_test/src/com/android/car/test/CarInfoManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/test/CarInfoManagerTest.java
@@ -17,43 +17,35 @@
 
 import android.car.Car;
 import android.car.CarInfoManager;
-import android.os.Bundle;
-import android.util.Log;
+import android.hardware.vehicle.V2_0.VehicleProperty;
 
-import com.android.car.test.MockedCarTestBase;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
 
 public class CarInfoManagerTest extends MockedCarTestBase {
-
-    private static final String TAG = CarInfoManagerTest.class.getSimpleName();
-
     private static final String MAKE_NAME = "ANDROID";
 
     private CarInfoManager mCarInfoManager;
 
     @Override
+    protected synchronized void configureMockedHal() {
+        addStaticProperty(VehicleProperty.INFO_MAKE,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.INFO_MAKE)
+                        .setStringValue(MAKE_NAME)
+                        .build());
+
+    }
+
+    @Override
     protected void setUp() throws Exception {
         super.setUp();
-        getVehicleHalEmulator().addStaticProperty(
-                VehiclePropConfigUtil.createStaticStringProperty(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_INFO_MAKE),
-                VehiclePropValueUtil.createStringValue(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_INFO_MAKE, MAKE_NAME, 0));
-        getVehicleHalEmulator().removeProperty(VehicleNetworkConsts.VEHICLE_PROPERTY_INFO_MODEL);
-        getVehicleHalEmulator().removeProperty(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_INFO_MODEL_YEAR);
-        getVehicleHalEmulator().start();
-        mCarInfoManager =
-                (CarInfoManager) getCar().getCarManager(Car.INFO_SERVICE);
+        mCarInfoManager = (CarInfoManager) getCar().getCarManager(Car.INFO_SERVICE);
     }
 
     public void testVehicleId() throws Exception {
         assertNotNull(mCarInfoManager.getVehicleId());
     }
 
-    public void testManufactuter() throws Exception {
+    public void testManufacturer() throws Exception {
         assertEquals(MAKE_NAME, mCarInfoManager.getManufacturer());
     }
 
diff --git a/tests/carservice_test/src/com/android/car/test/CarPackageManagerTest.java b/tests/carservice_test/src/com/android/car/test/CarPackageManagerTest.java
index e17e3cb..c455bc4 100644
--- a/tests/carservice_test/src/com/android/car/test/CarPackageManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/test/CarPackageManagerTest.java
@@ -20,13 +20,9 @@
 import android.car.content.pm.AppBlockingPackageInfo;
 import android.car.content.pm.CarAppBlockingPolicy;
 import android.car.content.pm.CarPackageManager;
-import android.content.pm.PackageManager;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.util.Log;
 
-import com.android.car.test.MockedCarTestBase;
-import com.android.car.test.TestAppBlockingPolicyService;
-
 @SmallTest
 public class CarPackageManagerTest extends MockedCarTestBase {
     private static final String TAG = CarPackageManagerTest.class.getSimpleName();
@@ -35,19 +31,14 @@
     private static final long POLLING_SLEEP = 100;
 
     private CarPackageManager mCarPm;
-    private PackageManager mPm;
-
 
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        mPm = getContext().getPackageManager();
-
     }
 
     private void init(boolean policyFromService) throws Exception {
         TestAppBlockingPolicyService.controlPolicySettingFromService(policyFromService);
-        getVehicleHalEmulator().start();
         mCarPm = (CarPackageManager) getCar().getCarManager(Car.PACKAGE_SERVICE);
         assertNotNull(mCarPm);
     }
@@ -136,11 +127,11 @@
                 activityNotAllowed));
     }
 
-    public interface PollingChecker {
+    interface PollingChecker {
         boolean check();
     }
 
-    public static boolean pollingCheck(PollingChecker checker, int maxRetry, long sleepMs)
+    static boolean pollingCheck(PollingChecker checker, int maxRetry, long sleepMs)
             throws Exception {
         int retry = 0;
         boolean checked = checker.check();
diff --git a/tests/carservice_test/src/com/android/car/test/CarPowerManagementTest.java b/tests/carservice_test/src/com/android/car/test/CarPowerManagementTest.java
index 364d0a6..d89ada3 100644
--- a/tests/carservice_test/src/com/android/car/test/CarPowerManagementTest.java
+++ b/tests/carservice_test/src/com/android/car/test/CarPowerManagementTest.java
@@ -15,31 +15,23 @@
  */
 package com.android.car.test;
 
-import android.car.test.VehicleHalEmulator.VehicleHalPropertyHandler;
-import android.content.Context;
-import android.hardware.display.DisplayManager;
-import android.os.Handler;
-import android.os.Looper;
+import android.hardware.vehicle.V2_0.VehicleApPowerBootupReason;
+import android.hardware.vehicle.V2_0.VehicleApPowerSetState;
+import android.hardware.vehicle.V2_0.VehicleApPowerState;
+import android.hardware.vehicle.V2_0.VehicleApPowerStateConfigFlag;
+import android.hardware.vehicle.V2_0.VehicleApPowerStateIndex;
+import android.hardware.vehicle.V2_0.VehicleApPowerStateShutdownParam;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
 import android.os.SystemClock;
 import android.test.suitebuilder.annotation.MediumTest;
-import android.util.Log;
-import android.view.Display;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleApPowerBootupReason;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleApPowerSetState;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleApPowerState;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleApPowerStateConfigFlag;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleApPowerStateIndex;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleApPowerStateShutdownParam;
-import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePermissionModel;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
+import com.google.android.collect.Lists;
 
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
+import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
+
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
@@ -47,81 +39,40 @@
 @MediumTest
 public class CarPowerManagementTest extends MockedCarTestBase {
 
-    private static final long TIMEOUT_MS = 3000;
-    private static final String TAG = CarPowerManagementTest.class.getSimpleName();
-
     private final PowerStatePropertyHandler mPowerStateHandler = new PowerStatePropertyHandler();
-    private final Handler mMainHandler = new Handler(Looper.getMainLooper());
-    private final DisplayStateListener mDisplayListener = new DisplayStateListener();
-    private DisplayManager mDisplayManager;
-
-    @Override
-    protected synchronized void setUp() throws Exception {
-        super.setUp();
-        mDisplayManager = (DisplayManager) getContext().getSystemService(Context.DISPLAY_SERVICE);
-        mDisplayManager.registerDisplayListener(mDisplayListener, mMainHandler);
-    }
-
-    @Override
-    protected synchronized void tearDown() throws Exception {
-        super.tearDown();
-        mDisplayManager.unregisterDisplayListener(mDisplayListener);
-    }
 
     private void setupPowerPropertyAndStart(boolean allowSleep) {
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_STATE,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        allowSleep ?
-                                VehicleApPowerStateConfigFlag.VEHICLE_AP_POWER_STATE_CONFIG_ENABLE_DEEP_SLEEP_FLAG
-                                : 0
-                            /*configFlags*/,
-                        0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                mPowerStateHandler);
-        getVehicleHalEmulator().addStaticProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_BOOTUP_REASON,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32,
-                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                VehiclePropValueUtil.createIntValue(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_BOOTUP_REASON,
-                        VehicleApPowerBootupReason.VEHICLE_AP_POWER_BOOTUP_REASON_USER_POWER_ON,
-                        0));
-        getVehicleHalEmulator().start();
+        addProperty(VehicleProperty.AP_POWER_STATE, mPowerStateHandler)
+                .setConfigArray(Lists.newArrayList(
+                        allowSleep ? VehicleApPowerStateConfigFlag.ENABLE_DEEP_SLEEP_FLAG : 0));
+
+        addStaticProperty(VehicleProperty.AP_POWER_BOOTUP_REASON,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.AP_POWER_BOOTUP_REASON)
+                        .addIntValue(VehicleApPowerBootupReason.USER_POWER_ON)
+                        .build());
+
+        reinitializeMockedHal();
     }
 
     public void testImmediateShutdown() throws Exception {
         setupPowerPropertyAndStart(true);
         assertBootComplete();
         mPowerStateHandler.sendPowerState(
-                VehicleApPowerState.VEHICLE_AP_POWER_STATE_SHUTDOWN_PREPARE,
-                VehicleApPowerStateShutdownParam.VEHICLE_AP_POWER_SHUTDOWN_PARAM_SHUTDOWN_IMMEDIATELY);
-        mPowerStateHandler.waitForStateSetAndGetAll(TIMEOUT_MS,
-                VehicleApPowerSetState.VEHICLE_AP_POWER_SET_SHUTDOWN_START);
-        mPowerStateHandler.sendPowerState(
-                VehicleApPowerState.VEHICLE_AP_POWER_STATE_ON_FULL,
-                0);
+                VehicleApPowerState.SHUTDOWN_PREPARE,
+                VehicleApPowerStateShutdownParam.SHUTDOWN_IMMEDIATELY);
+        mPowerStateHandler.waitForStateSetAndGetAll(DEFAULT_WAIT_TIMEOUT_MS,
+                VehicleApPowerSetState.SHUTDOWN_START);
+        mPowerStateHandler.sendPowerState(VehicleApPowerState.ON_FULL, 0);
     }
 
     public void testDisplayOnOff() throws Exception {
         setupPowerPropertyAndStart(true);
         assertBootComplete();
         for (int i = 0; i < 2; i++) {
-            mPowerStateHandler.sendPowerState(
-                    VehicleApPowerState.VEHICLE_AP_POWER_STATE_ON_DISP_OFF,
-                    0);
-            mDisplayListener.waitForDisplayState(false, TIMEOUT_MS);
-            mPowerStateHandler.sendPowerState(
-                    VehicleApPowerState.VEHICLE_AP_POWER_STATE_ON_FULL,
-                    0);
-            mDisplayListener.waitForDisplayState(true, TIMEOUT_MS);
+            mPowerStateHandler.sendPowerState(VehicleApPowerState.ON_DISP_OFF, 0);
+            waitForFakeDisplayState(false);
+            mPowerStateHandler.sendPowerState(VehicleApPowerState.ON_FULL, 0);
+            waitForFakeDisplayState(true);
         }
     }
 
@@ -129,41 +80,36 @@
     public void testSleepEntry() throws Exception {
         assertBootComplete();
         mPowerStateHandler.sendPowerState(
-                VehicleApPowerState.VEHICLE_AP_POWER_STATE_SHUTDOWN_PREPARE,
-                VehicleApPowerStateShutdownParam.VEHICLE_AP_POWER_SHUTDOWN_PARAM_CAN_SLEEP);
-        assertResponse(VehicleApPowerSetState.VEHICLE_AP_POWER_SET_DEEP_SLEEP_ENTRY, 0);
-        assertResponse(VehicleApPowerSetState.VEHICLE_AP_POWER_SET_DEEP_SLEEP_EXIT, 0);
+                VehicleApPowerState.SHUTDOWN_PREPARE,
+                VehicleApPowerStateShutdownParam.CAN_SLEEP);
+        assertResponse(VehicleApPowerSetState.DEEP_SLEEP_ENTRY, 0);
+        assertResponse(VehicleApPowerSetState.DEEP_SLEEP_EXIT, 0);
         mPowerStateHandler.sendPowerState(
-                VehicleApPowerState.VEHICLE_AP_POWER_STATE_ON_FULL,
+                VehicleApPowerState.ON_FULL,
                 0);
     }*/
 
     private void assertResponse(int expectedResponseState, int expectedResponseParam)
             throws Exception {
-        LinkedList<int[]> setEvents = mPowerStateHandler.waitForStateSetAndGetAll(TIMEOUT_MS,
-                expectedResponseState);
+        LinkedList<int[]> setEvents = mPowerStateHandler.waitForStateSetAndGetAll(
+                DEFAULT_WAIT_TIMEOUT_MS, expectedResponseState);
         int[] last = setEvents.getLast();
         assertEquals(expectedResponseState, last[0]);
         assertEquals(expectedResponseParam, last[1]);
     }
 
     private void assertBootComplete() throws Exception {
-        mPowerStateHandler.waitForSubscription(TIMEOUT_MS);
-        LinkedList<int[]> setEvents = mPowerStateHandler.waitForStateSetAndGetAll(TIMEOUT_MS,
-                VehicleApPowerSetState.VEHICLE_AP_POWER_SET_BOOT_COMPLETE);
+        mPowerStateHandler.waitForSubscription(DEFAULT_WAIT_TIMEOUT_MS);
+        LinkedList<int[]> setEvents = mPowerStateHandler.waitForStateSetAndGetAll(
+                DEFAULT_WAIT_TIMEOUT_MS, VehicleApPowerSetState.BOOT_COMPLETE);
         int[] first = setEvents.getFirst();
-        assertEquals(VehicleApPowerSetState.VEHICLE_AP_POWER_SET_BOOT_COMPLETE, first[0]);
+        assertEquals(VehicleApPowerSetState.BOOT_COMPLETE, first[0]);
         assertEquals(0, first[1]);
     }
 
-    private synchronized boolean isMainDisplayOn() {
-        Display disp = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY);
-        return disp.getState() == Display.STATE_ON;
-    }
-
     private class PowerStatePropertyHandler implements VehicleHalPropertyHandler {
 
-        private int mPowerState = VehicleApPowerState.VEHICLE_AP_POWER_STATE_ON_FULL;
+        private int mPowerState = VehicleApPowerState.ON_FULL;
         private int mPowerParam = 0;
 
         private final Semaphore mSubscriptionWaitSemaphore = new Semaphore(0);
@@ -172,27 +118,26 @@
 
         @Override
         public void onPropertySet(VehiclePropValue value) {
+            ArrayList<Integer> v = value.value.int32Values;
             synchronized (this) {
                 mSetStates.add(new int[] {
-                        value.getInt32Values(
-                                VehicleApPowerStateIndex.VEHICLE_AP_POWER_STATE_INDEX_STATE),
-                        value.getInt32Values(
-                                VehicleApPowerStateIndex.VEHICLE_AP_POWER_STATE_INDEX_ADDITIONAL)
-                                });
+                        v.get(VehicleApPowerStateIndex.STATE),
+                        v.get(VehicleApPowerStateIndex.ADDITIONAL)
+                });
             }
             mSetWaitSemaphore.release();
         }
 
         @Override
         public synchronized VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            int[] values = { mPowerState, mPowerParam };
-            return VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_STATE, values,
-                    SystemClock.elapsedRealtimeNanos());
+            return VehiclePropValueBuilder.newBuilder(VehicleProperty.AP_POWER_STATE)
+                    .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                    .addIntValue(mPowerState, mPowerParam)
+                    .build();
         }
 
         @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
+        public void onPropertySubscribe(int property, int zones, float sampleRate) {
             mSubscriptionWaitSemaphore.release();
         }
 
@@ -235,43 +180,11 @@
         }
 
         private void sendPowerState(int state, int param) {
-            int[] values = { state, param };
-            getVehicleHalEmulator().injectEvent(
-                    VehiclePropValueUtil.createIntVectorValue(
-                            VehicleNetworkConsts.VEHICLE_PROPERTY_AP_POWER_STATE, values,
-                            SystemClock.elapsedRealtimeNanos()));
-        }
-    }
-
-    private class DisplayStateListener implements DisplayManager.DisplayListener {
-
-        private final Semaphore mDisplayWait = new Semaphore(0);
-
-        private void waitForDisplayState(boolean expectedState, long timeoutMs) throws Exception {
-            while (isMainDisplayOn() != expectedState) {
-                if (!mDisplayWait.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) {
-                    fail("waitForDisplayState timeout, expected:" + expectedState);
-                }
-            }
-        }
-
-        @Override
-        public void onDisplayAdded(int displayId) {
-            // not used
-        }
-
-        @Override
-        public void onDisplayChanged(int displayId) {
-            Log.i(TAG, "onDisplayChanged, id:" + displayId + " main display on:" +
-                    isMainDisplayOn());
-            if (displayId == Display.DEFAULT_DISPLAY) {
-                mDisplayWait.release();
-            }
-        }
-
-        @Override
-        public void onDisplayRemoved(int displayId) {
-            // not used
+            getMockedVehicleHal().injectEvent(
+                    VehiclePropValueBuilder.newBuilder(VehicleProperty.AP_POWER_STATE)
+                            .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                            .addIntValue(state, param)
+                            .build());
         }
     }
 }
diff --git a/tests/carservice_test/src/com/android/car/test/CarProjectionManagerTest.java b/tests/carservice_test/src/com/android/car/test/CarProjectionManagerTest.java
index 8c2f83e..b4bedd6 100644
--- a/tests/carservice_test/src/com/android/car/test/CarProjectionManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/test/CarProjectionManagerTest.java
@@ -18,16 +18,17 @@
 
 import android.car.Car;
 import android.car.CarProjectionManager;
-import android.car.test.VehicleHalEmulator;
+import android.hardware.vehicle.V2_0.VehicleHwKeyInputAction;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.hardware.vehicle.V2_0.VehiclePropertyAccess;
 import android.os.SystemClock;
 import android.test.suitebuilder.annotation.MediumTest;
 import android.util.Log;
 import android.view.KeyEvent;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
+import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
 
 import java.util.HashMap;
 import java.util.concurrent.Semaphore;
@@ -55,21 +56,14 @@
     private CarProjectionManager mManager;
 
     @Override
+    protected synchronized void configureMockedHal() {
+        addProperty(VehicleProperty.HW_KEY_INPUT, new PropertyHandler())
+                .setAccess(VehiclePropertyAccess.READ);
+    }
+
+    @Override
     protected void setUp() throws Exception {
         super.setUp();
-        PropertyHandler handler = new PropertyHandler();
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT,
-                        VehicleNetworkConsts.VehiclePropAccess.VEHICLE_PROP_ACCESS_READ,
-                        VehicleNetworkConsts.VehiclePropChangeMode
-                            .VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4,
-                        VehicleNetworkConsts.VehiclePermissionModel
-                            .VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                handler);
-        getVehicleHalEmulator().start();
         mManager = (CarProjectionManager) getCar().getCarManager(Car.PROJECTION_SERVICE);
     }
 
@@ -114,52 +108,50 @@
     }
 
     public void sendVoiceKey(boolean isLong) throws InterruptedException {
-        int[] values = {
-            VehicleNetworkConsts.VehicleHwKeyInputAction.VEHICLE_HW_KEY_INPUT_ACTION_DOWN,
-            KeyEvent.KEYCODE_VOICE_ASSIST, 0, 0 };
+        int[] values = {VehicleHwKeyInputAction.ACTION_DOWN, KeyEvent.KEYCODE_VOICE_ASSIST, 0, 0};
 
-        VehiclePropValue injectValue = VehiclePropValueUtil.createIntVectorValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT, values,
-                SystemClock.elapsedRealtimeNanos());
+        VehiclePropValue injectValue =
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.HW_KEY_INPUT)
+                        .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                        .addIntValue(values)
+                        .build();
 
-        getVehicleHalEmulator().injectEvent(injectValue);
+        getMockedVehicleHal().injectEvent(injectValue);
 
         if (isLong) {
             Thread.sleep(1200); // Long press is > 1s.
         }
 
-        int[] upValues = {
-            VehicleNetworkConsts.VehicleHwKeyInputAction.VEHICLE_HW_KEY_INPUT_ACTION_UP,
-            KeyEvent.KEYCODE_VOICE_ASSIST, 0, 0 };
+        int[] upValues = {VehicleHwKeyInputAction.ACTION_UP, KeyEvent.KEYCODE_VOICE_ASSIST, 0, 0 };
 
-        injectValue = VehiclePropValueUtil.createIntVectorValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT, upValues,
-                SystemClock.elapsedRealtimeNanos());
+        injectValue = VehiclePropValueBuilder.newBuilder(VehicleProperty.HW_KEY_INPUT)
+                .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                .addIntValue(upValues)
+                .build();
 
-        getVehicleHalEmulator().injectEvent(injectValue);
+        getMockedVehicleHal().injectEvent(injectValue);
     }
 
 
-    private class PropertyHandler
-            implements VehicleHalEmulator.VehicleHalPropertyHandler {
+    private class PropertyHandler implements VehicleHalPropertyHandler {
         HashMap<Integer, VehiclePropValue> mMap = new HashMap<>();
 
         @Override
         public synchronized void onPropertySet(VehiclePropValue value) {
             Log.d(TAG, "onPropertySet:" + value);
-            mMap.put(value.getProp(), value);
+            mMap.put(value.prop, value);
         }
 
         @Override
         public synchronized VehiclePropValue onPropertyGet(VehiclePropValue value) {
             Log.d(TAG, "onPropertyGet:" + value);
-            VehiclePropValue currentValue = mMap.get(value.getProp());
-            // VNS will call getProperty method when subscribe is called, just return empty value.
+            VehiclePropValue currentValue = mMap.get(value.prop);
+            // VNS will call get method when subscribe is called, just return empty value.
             return currentValue != null ? currentValue : value;
         }
 
         @Override
-        public synchronized void onPropertySubscribe(int property, float sampleRate, int zones) {
+        public synchronized void onPropertySubscribe(int property, int zones, float sampleRate) {
             Log.d(TAG, "onPropertySubscribe property " + property + " sampleRate " + sampleRate);
         }
 
diff --git a/tests/carservice_test/src/com/android/car/test/CarRadioManagerTest.java b/tests/carservice_test/src/com/android/car/test/CarRadioManagerTest.java
index 4975dfc..97170b6 100644
--- a/tests/carservice_test/src/com/android/car/test/CarRadioManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/test/CarRadioManagerTest.java
@@ -16,26 +16,25 @@
 package com.android.car.test;
 
 import android.car.Car;
-import android.car.test.VehicleHalEmulator;
 import android.car.hardware.radio.CarRadioEvent;
 import android.car.hardware.radio.CarRadioManager;
 import android.car.hardware.radio.CarRadioManager.CarRadioEventListener;
 import android.car.hardware.radio.CarRadioPreset;
 import android.hardware.radio.RadioManager;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.os.SystemClock;
 import android.test.suitebuilder.annotation.MediumTest;
 import android.util.Log;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
+import com.google.android.collect.Lists;
 
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
+import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
+
+import java.util.HashMap;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
-import java.util.HashMap;
 
 @MediumTest
 public class CarRadioManagerTest extends MockedCarTestBase {
@@ -46,22 +45,19 @@
     private Semaphore mAvailable;
 
     private static final int NUM_PRESETS = 2;
-    private final HashMap<Integer, CarRadioPreset> mRadioPresets =
-        new HashMap<Integer, CarRadioPreset>();
+    private final HashMap<Integer, CarRadioPreset> mRadioPresets = new HashMap<>();
 
     private CarRadioManager mCarRadioManager;
 
-    private class RadioPresetPropertyHandler
-            implements VehicleHalEmulator.VehicleHalPropertyHandler {
+    private class RadioPresetPropertyHandler implements VehicleHalPropertyHandler {
         public RadioPresetPropertyHandler() { }
 
         @Override
         public synchronized void onPropertySet(VehiclePropValue value) {
-            assertEquals(value.getProp(), VehicleNetworkConsts.VEHICLE_PROPERTY_RADIO_PRESET);
-            assertEquals(value.getValueType(), VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4);
+            assertEquals(value.prop, VehicleProperty.RADIO_PRESET);
 
             Integer[] valueList = new Integer[4];
-            value.getInt32ValuesList().toArray(valueList);
+            value.value.int32Values.toArray(valueList);
             assertFalse(
                 "Index out of range: " + valueList[0] + " (0, " + NUM_PRESETS + ")",
                 valueList[0] < 1);
@@ -82,32 +78,30 @@
 
         @Override
         public synchronized VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            assertEquals(value.getProp(), VehicleNetworkConsts.VEHICLE_PROPERTY_RADIO_PRESET);
-            assertEquals(value.getValueType(), VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4);
+            assertEquals(value.prop, VehicleProperty.RADIO_PRESET);
 
             Integer[] valueList = new Integer[4];
-            value.getInt32ValuesList().toArray(valueList);
+            value.value.int32Values.toArray(valueList);
 
             // Get the actual preset.
             if (valueList[0] < 1 || valueList[0] > NUM_PRESETS) {
-                // VNS will call getProperty method when subscribe is called, just return an empty
+                // VNS will call get method when subscribe is called, just return an empty
                 // value.
                 return value;
             }
             CarRadioPreset preset = mRadioPresets.get(valueList[0]);
-            VehiclePropValue v =
-                VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_RADIO_PRESET,
-                    new int[] {
-                        preset.getPresetNumber(),
-                        preset.getBand(),
-                        preset.getChannel(),
-                        preset.getSubChannel()}, 0);
-            return v;
+            return VehiclePropValueBuilder.newBuilder(VehicleProperty.RADIO_PRESET)
+                    .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                    .addIntValue(
+                            preset.getPresetNumber(),
+                            preset.getBand(),
+                            preset.getChannel(),
+                            preset.getSubChannel())
+                    .build();
         }
 
         @Override
-        public synchronized void onPropertySubscribe(int property, float sampleRate, int zones) {
+        public synchronized void onPropertySubscribe(int property, int zones, float sampleRate) {
             Log.d(TAG, "onPropertySubscribe property: " + property + " rate: " + sampleRate);
             if (mAvailable.availablePermits() != 0) {
                 Log.d(TAG, "Lock was free, should have been locked.");
@@ -138,20 +132,16 @@
     }
 
     @Override
+    protected synchronized void configureMockedHal() {
+        addProperty(VehicleProperty.RADIO_PRESET, new RadioPresetPropertyHandler())
+                .setConfigArray(Lists.newArrayList(NUM_PRESETS));
+    }
+
+    @Override
     protected void setUp() throws Exception {
         super.setUp();
         mAvailable = new Semaphore(0);
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.createProperty(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_RADIO_PRESET,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4,
-                        NUM_PRESETS),
-                new RadioPresetPropertyHandler());
-        getVehicleHalEmulator().start();
-        mCarRadioManager =
-                (CarRadioManager) getCar().getCarManager(Car.RADIO_SERVICE);
+        mCarRadioManager = (CarRadioManager) getCar().getCarManager(Car.RADIO_SERVICE);
     }
 
     public void testPresetCount() throws Exception {
@@ -185,14 +175,16 @@
 
         // Inject an event and wait for its callback in onPropertySet.
         CarRadioPreset preset = new CarRadioPreset(2, RadioManager.BAND_AM, 4321, -1);
-        VehiclePropValue v = VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_RADIO_PRESET,
-                    new int[] {
+
+        VehiclePropValue v = VehiclePropValueBuilder.newBuilder(VehicleProperty.RADIO_PRESET)
+                .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                .addIntValue(
                         preset.getPresetNumber(),
                         preset.getBand(),
                         preset.getChannel(),
-                        preset.getSubChannel()}, 0);
-        getVehicleHalEmulator().injectEvent(v);
+                        preset.getSubChannel())
+                .build();
+        getMockedVehicleHal().injectEvent(v);
 
         success = mAvailable.tryAcquire(5L, TimeUnit.SECONDS);
         assertEquals("injectEvent, onEvent timeout!", true, success);
diff --git a/tests/carservice_test/src/com/android/car/test/CarSensorManagerTest.java b/tests/carservice_test/src/com/android/car/test/CarSensorManagerTest.java
index b5c3eeb..c81ce34 100644
--- a/tests/carservice_test/src/com/android/car/test/CarSensorManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/test/CarSensorManagerTest.java
@@ -19,15 +19,13 @@
 import android.car.Car;
 import android.car.hardware.CarSensorEvent;
 import android.car.hardware.CarSensorManager;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.os.SystemClock;
 import android.test.suitebuilder.annotation.MediumTest;
 import android.util.Log;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
-
-import java.util.concurrent.Semaphore;
-import java.util.concurrent.TimeUnit;
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
 
 /**
  * Test the public entry points for the CarSensorManager
@@ -39,14 +37,41 @@
     private CarSensorManager mCarSensorManager;
 
     @Override
+    protected synchronized void configureMockedHal() {
+        addProperty(VehicleProperty.NIGHT_MODE,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.NIGHT_MODE)
+                        .addIntValue(0)
+                        .build());
+        addProperty(VehicleProperty.PERF_VEHICLE_SPEED,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.PERF_VEHICLE_SPEED)
+                        .addFloatValue(0f)
+                        .build());
+        addProperty(VehicleProperty.FUEL_LEVEL_LOW,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.FUEL_LEVEL_LOW)
+                        .setBooleanValue(false)
+                        .build());
+        addProperty(VehicleProperty.PARKING_BRAKE_ON,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.PARKING_BRAKE_ON)
+                        .setBooleanValue(true)
+                        .build());
+        addProperty(VehicleProperty.CURRENT_GEAR,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.CURRENT_GEAR)
+                        .addIntValue(0)
+                        .build());
+        addProperty(VehicleProperty.GEAR_SELECTION,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.GEAR_SELECTION)
+                        .addIntValue(0)
+                        .build());
+        addProperty(VehicleProperty.DRIVING_STATUS,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.DRIVING_STATUS)
+                        .addIntValue(0)
+                        .build());
+    }
+
+    @Override
     protected void setUp() throws Exception {
         super.setUp();
-
-        // Our tests simply rely on the properties already added by default in the
-        // VehilceHalEmulator.  We don't actually need to add any of our own.
-
         // Start the HAL layer and set up the sensor manager service
-        getVehicleHalEmulator().start();
         mCarSensorManager = (CarSensorManager) getCar().getCarManager(Car.SENSOR_SERVICE);
     }
 
@@ -122,25 +147,19 @@
                 CarSensorManager.SENSOR_TYPE_NIGHT,
                 CarSensorManager.SENSOR_RATE_NORMAL);
 
-        VehiclePropValue value = null;
+        VehiclePropValue value;
+        CarSensorEvent event;
         CarSensorEvent.NightData data = null;
-        CarSensorEvent event = null;
 
-        // Consume any sensor events queued up on startup
-        while (listener.waitForSensorChange()) {};
-
-        // Validate that no events are now pending
-        listener.checkNoSensorChangePosted();
-
+        listener.reset();
 
         // Set the value TRUE and wait for the event to arrive
-        value = VehiclePropValueUtil.createBooleanValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_NIGHT_MODE, true, 1);
-        getVehicleHalEmulator().injectEvent(value);
-        assertTrue(listener.waitForSensorChange());
-
-        // Validate that no events remain pending
-        listener.checkNoSensorChangePosted();
+        getMockedVehicleHal().injectEvent(
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.NIGHT_MODE)
+                        .setBooleanValue(true)
+                        .setTimestamp(1L)
+                        .build());
+        assertTrue(listener.waitForSensorChange(1L));
 
         // Ensure we got the expected event
         assertEquals(listener.getLastEvent().sensorType, CarSensorManager.SENSOR_TYPE_NIGHT);
@@ -152,46 +171,52 @@
 
         // Ensure we have the expected value in the sensor manager's cache
         event = mCarSensorManager.getLatestSensorEvent(CarSensorManager.SENSOR_TYPE_NIGHT);
+        assertNotNull(event);
         data = event.getNightData(data);
         assertEquals("Unexpected event timestamp", data.timestamp, 1);
         assertTrue("Unexpected value", data.isNightMode);
 
-
+        listener.reset();
         // Set the value FALSE
-        value = VehiclePropValueUtil.createBooleanValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_NIGHT_MODE, false, 1001);
-        getVehicleHalEmulator().injectEvent(value);
-        assertTrue(listener.waitForSensorChange());
+        getMockedVehicleHal().injectEvent(
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.NIGHT_MODE)
+                        .setTimestamp(1001)
+                        .setBooleanValue(false)
+                        .build());
+        assertTrue(listener.waitForSensorChange(1001));
 
         // Ensure we got the expected event
         assertEquals(listener.getLastEvent().sensorType, CarSensorManager.SENSOR_TYPE_NIGHT);
 
         // Ensure we got the expected value in our callback
         data = listener.getLastEvent().getNightData(data);
-        assertEquals("Unexpected event timestamp", data.timestamp, 1001);
+        assertEquals("Unexpected event timestamp", 1001, data.timestamp);
         assertFalse("Unexpected value", data.isNightMode);
 
         // Ensure we have the expected value in the sensor manager's cache
         event = mCarSensorManager.getLatestSensorEvent(CarSensorManager.SENSOR_TYPE_NIGHT);
+        assertNotNull(event);
         data = event.getNightData(data);
         assertFalse(data.isNightMode);
 
         // Unregister our handler (from all sensor types)
         mCarSensorManager.unregisterListener(listener);
 
+        listener.reset();
         // Set the value TRUE again
-        value = VehiclePropValueUtil.createBooleanValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_NIGHT_MODE, true, 2001);
-        listener.checkNoSensorChangePosted();
-        getVehicleHalEmulator().injectEvent(value);
+        value = VehiclePropValueBuilder.newBuilder(VehicleProperty.NIGHT_MODE)
+                .setTimestamp(2001)
+                .setBooleanValue(true)
+                .build();
+        getMockedVehicleHal().injectEvent(value);
 
         // Ensure we did not get a callback (should timeout)
         Log.i(TAG, "waiting for unexpected callback -- should timeout.");
-        assertFalse(listener.waitForSensorChange());
-        listener.checkNoSensorChangePosted();
+        assertFalse(listener.waitForSensorChange(2001));
 
         // Despite us not having a callback registered, the Sensor Manager should see the update
         event = mCarSensorManager.getLatestSensorEvent(CarSensorManager.SENSOR_TYPE_NIGHT);
+        assertNotNull(event);
         data = event.getNightData(data);
         assertEquals("Unexpected event timestamp", data.timestamp, 2001);
         assertTrue("Unexpected value", data.isNightMode);
@@ -204,9 +229,9 @@
      */
     public void testEventsWithMultipleListeners() throws Exception {
         // Set up our listeners callback
-        SensorListener listener1 = new SensorListener("1");
-        SensorListener listener2 = new SensorListener("2");
-        SensorListener listener3 = new SensorListener("3");
+        SensorListener listener1 = new SensorListener();
+        SensorListener listener2 = new SensorListener();
+        SensorListener listener3 = new SensorListener();
 
         mCarSensorManager.registerListener(listener1,
                 CarSensorManager.SENSOR_TYPE_NIGHT,
@@ -220,44 +245,25 @@
                 CarSensorManager.SENSOR_TYPE_NIGHT,
                 CarSensorManager.SENSOR_RATE_FASTEST);
 
-        VehiclePropValue value = null;
         CarSensorEvent.NightData data = null;
-        CarSensorEvent event = null;
+        VehiclePropValue value;
+        CarSensorEvent event;
 
-        // Consume any sensor events queued up on startup
-        while (listener1.waitForSensorChange()) {};
-
-        // Consume any sensor events queued up on startup
-        while (listener2.waitForSensorChange()) {};
-
-        // Consume any sensor events queued up on startup
-        while (listener3.waitForSensorChange()) {};
-
-        // Validate that no events are now pending
-        listener1.checkNoSensorChangePosted();
-
-        // Validate that no events are now pending
-        listener2.checkNoSensorChangePosted();
-
-        // Validate that no events are now pending
-        listener3.checkNoSensorChangePosted();
+        listener1.reset();
+        listener2.reset();
+        listener3.reset();
 
         // Set the value TRUE and wait for the event to arrive
-        value = VehiclePropValueUtil.createBooleanValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_NIGHT_MODE, true, 1);
-        getVehicleHalEmulator().injectEvent(value);
-        assertTrue(listener1.waitForSensorChange());
-        assertTrue(listener2.waitForSensorChange());
-        assertTrue(listener3.waitForSensorChange());
+        value = VehiclePropValueBuilder.newBuilder(VehicleProperty.NIGHT_MODE)
+                    .setTimestamp(42L)
+                    .setBooleanValue(true)
+                    .build();
 
-        // Validate that no events remain pending
-        listener1.checkNoSensorChangePosted();
+        getMockedVehicleHal().injectEvent(value);
 
-        // Validate that no events remain pending
-        listener2.checkNoSensorChangePosted();
-
-        // Validate that no events remain pending
-        listener3.checkNoSensorChangePosted();
+        assertTrue(listener1.waitForSensorChange(42L));
+        assertTrue(listener2.waitForSensorChange(42L));
+        assertTrue(listener3.waitForSensorChange(42L));
 
         // Ensure we got the expected event
         assertEquals(listener1.getLastEvent().sensorType, CarSensorManager.SENSOR_TYPE_NIGHT);
@@ -280,25 +286,21 @@
         // Ensure we have the expected value in the sensor manager's cache
         event = mCarSensorManager.getLatestSensorEvent(CarSensorManager.SENSOR_TYPE_NIGHT);
         data = event.getNightData(data);
-        assertEquals("Unexpected event timestamp", data.timestamp, 1);
+        assertEquals("Unexpected event timestamp", 42, data.timestamp);
         assertTrue("Unexpected value", data.isNightMode);
 
+        listener1.reset();
+        listener2.reset();
+        listener3.reset();
         // Set the value FALSE
-        value = VehiclePropValueUtil.createBooleanValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_NIGHT_MODE, false, 1001);
-        getVehicleHalEmulator().injectEvent(value);
-        assertTrue(listener1.waitForSensorChange());
-        assertTrue(listener2.waitForSensorChange());
-        assertTrue(listener3.waitForSensorChange());
-
-        // Validate that no events remain pending
-        listener1.checkNoSensorChangePosted();
-
-        // Validate that no events remain pending
-        listener2.checkNoSensorChangePosted();
-
-        // Validate that no events remain pending
-        listener3.checkNoSensorChangePosted();
+        value = VehiclePropValueBuilder.newBuilder(VehicleProperty.NIGHT_MODE)
+                .setTimestamp(1001)
+                .setBooleanValue(false)
+                .build();
+        getMockedVehicleHal().injectEvent(value);
+        assertTrue(listener1.waitForSensorChange(1001));
+        assertTrue(listener2.waitForSensorChange(1001));
+        assertTrue(listener3.waitForSensorChange(1001));
 
         // Ensure we got the expected event
         assertEquals(listener1.getLastEvent().sensorType, CarSensorManager.SENSOR_TYPE_NIGHT);
@@ -307,15 +309,16 @@
 
         // Ensure we got the expected value in our callback
         data = listener1.getLastEvent().getNightData(data);
-        assertEquals("Unexpected event timestamp", data.timestamp, 1001);
+        assertEquals("Unexpected event timestamp", 1001, data.timestamp);
         assertFalse("Unexpected value", data.isNightMode);
 
         data = listener2.getLastEvent().getNightData(data);
-        assertEquals("Unexpected event timestamp", data.timestamp, 1001);
+        assertEquals("Unexpected event timestamp", 1001, data.timestamp);
         assertFalse("Unexpected value", data.isNightMode);
 
         data = listener3.getLastEvent().getNightData(data);
-        assertEquals("Unexpected event timestamp", data.timestamp, 1001);
+        listener3.reset();
+        assertEquals("Unexpected event timestamp", 1001, data.timestamp);
         assertFalse("Unexpected value", data.isNightMode);
 
         // Ensure we have the expected value in the sensor manager's cache
@@ -329,34 +332,35 @@
         Log.d(TAG, "Rate changed - expect sensor restart and change event sent.");
         assertTrue(listener1.waitForSensorChange());
         assertTrue(listener2.waitForSensorChange());
-        assertFalse(listener2.waitForSensorChange());
+        assertFalse(listener3.waitForSensorChange());
 
+        listener1.reset();
+        listener2.reset();
+        listener3.reset();
         // Set the value TRUE again
-        value = VehiclePropValueUtil.createBooleanValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_NIGHT_MODE, true, 2001);
-        listener1.checkNoSensorChangePosted();
-        listener2.checkNoSensorChangePosted();
-        listener3.checkNoSensorChangePosted();
-        getVehicleHalEmulator().injectEvent(value);
+        value = VehiclePropValueBuilder.newBuilder(VehicleProperty.NIGHT_MODE)
+                .setTimestamp()
+                .setBooleanValue(true)
+                .build();
+        getMockedVehicleHal().injectEvent(value);
 
         assertTrue(listener1.waitForSensorChange());
         assertTrue(listener2.waitForSensorChange());
 
+        listener1.reset();
+        listener2.reset();
+
         // Ensure we did not get a callback (should timeout)
         Log.i(TAG, "waiting for unexpected callback -- should timeout.");
         assertFalse(listener3.waitForSensorChange());
 
-        listener1.checkNoSensorChangePosted();
-        listener2.checkNoSensorChangePosted();
-        listener3.checkNoSensorChangePosted();
-
         Log.d(TAG, "Unregistering listener2");
         mCarSensorManager.unregisterListener(listener3);
 
         Log.d(TAG, "Rate did nor change - dont expect sensor restart and change event sent.");
         assertFalse(listener1.waitForSensorChange());
         assertFalse(listener2.waitForSensorChange());
-        assertFalse(listener2.waitForSensorChange());
+        assertFalse(listener3.waitForSensorChange());
     }
 
 
@@ -366,53 +370,48 @@
      * and keeps a reference to the most recent event delivered.
      */
     class SensorListener implements CarSensorManager.OnSensorChangedListener {
-        private final String mTag;
-
-        SensorListener(String tag) {
-            mTag = tag;
-        }
-
-        SensorListener() {
-            this("");
-        }
-
-        // Initialize the semaphore with ZERO callback events indicated
-        private Semaphore mAvailable = new Semaphore(0);
+        private final Object mSync = new Object();
 
         private CarSensorEvent mLastEvent = null;
 
-        public CarSensorEvent getLastEvent() {
+        CarSensorEvent getLastEvent() {
             return mLastEvent;
         }
 
-        public void checkNoSensorChangePosted() {
-            // Verify that no permits are available (ie: the callback has not fired)
-            assertEquals("No events expected at this point for " + mTag + ".",
-                    0, mAvailable.availablePermits());
+        void reset() {
+            synchronized (mSync) {
+                mLastEvent = null;
+            }
+        }
+
+        boolean waitForSensorChange() throws InterruptedException {
+            return waitForSensorChange(0);
         }
 
         // Returns True to indicate receipt of a sensor event.  False indicates a timeout.
-        public boolean waitForSensorChange() throws InterruptedException {
-            Log.i(TAG, mTag + ":Waiting to for sensor update...");
-
-            long startTime = System.currentTimeMillis();
-            boolean result = mAvailable.tryAcquire(2L, TimeUnit.SECONDS);
-            long duration  = System.currentTimeMillis() - startTime;
-
-            Log.d(TAG, mTag + ": tryAcquire returned " + result + " in " + duration + "ms");
-
-            return result;
+        boolean waitForSensorChange(long eventTimeStamp) throws InterruptedException {
+            long start = SystemClock.elapsedRealtime();
+            boolean matchTimeStamp = eventTimeStamp != 0;
+            synchronized (mSync) {
+                Log.d(TAG, "waitForSensorChange, mLastEvent: " + mLastEvent);
+                while ((mLastEvent == null
+                        || (matchTimeStamp && mLastEvent.timestamp != eventTimeStamp))
+                        && (start + SHORT_WAIT_TIMEOUT_MS > SystemClock.elapsedRealtime())) {
+                    mSync.wait(10L);
+                }
+                return mLastEvent != null &&
+                        (!matchTimeStamp || mLastEvent.timestamp == eventTimeStamp);
+            }
         }
 
         @Override
         public void onSensorChanged(CarSensorEvent event) {
-            Log.d(TAG, mTag + ": onSensorChanged: " + event);
-
-            // We're going to hold a reference to this object
-            mLastEvent = event;
-
-            // Add one to the semaphore, indicating that we have run
-            mAvailable.release();
+            Log.d(TAG, "onSensorChanged, event: " + event);
+            synchronized (mSync) {
+                // We're going to hold a reference to this object
+                mLastEvent = event;
+                mSync.notify();
+            }
         }
     }
 
diff --git a/tests/carservice_test/src/com/android/car/test/CarVendorExtensionManagerTest.java b/tests/carservice_test/src/com/android/car/test/CarVendorExtensionManagerTest.java
index 08d4941..e56d8f2 100644
--- a/tests/carservice_test/src/com/android/car/test/CarVendorExtensionManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/test/CarVendorExtensionManagerTest.java
@@ -16,36 +16,24 @@
 
 package com.android.car.test;
 
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePermissionModel.VEHICLE_PERMISSION_NO_RESTRICTION;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_BYTES;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_INT32;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_STRING;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_1_LEFT;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZone.VEHICLE_ZONE_ROW_1_RIGHT;
-import static com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue.newBuilder;
-import static java.util.Collections.singletonList;
+import static com.android.car.CarServiceUtils.toByteArray;
 
 import android.car.Car;
 import android.car.hardware.CarPropertyConfig;
 import android.car.hardware.CarVendorExtensionManager;
-import android.car.test.CarTestManager;
-import android.car.test.CarTestManagerBinderWrapper;
+import android.hardware.vehicle.V2_0.StatusCode;
+import android.hardware.vehicle.V2_0.VehicleArea;
+import android.hardware.vehicle.V2_0.VehicleAreaZone;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehiclePropertyGroup;
+import android.hardware.vehicle.V2_0.VehiclePropertyType;
 import android.os.SystemClock;
 import android.util.Log;
 import android.util.SparseArray;
 
-import com.google.android.collect.Lists;
-import com.google.protobuf.ByteString;
-
-import com.android.car.vehiclenetwork.VehicleNetwork.VehicleNetworkHalMock;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfigs;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
+import com.android.car.vehiclehal.test.MockedVehicleHal;
+import com.android.car.vehiclehal.test.VehiclePropConfigBuilder;
 
 import org.junit.Assert;
 
@@ -61,15 +49,19 @@
     private static final String TAG = CarVendorExtensionManager.class.getSimpleName();
 
     private static final int CUSTOM_GLOBAL_INT_PROP_ID =
-            VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START;
+            0x1 | VehiclePropertyGroup.VENDOR | VehiclePropertyType.INT32 | VehicleArea.GLOBAL;
+
     private static final int CUSTOM_ZONED_FLOAT_PROP_ID =
-            VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START + 1;
+            0x2 | VehiclePropertyGroup.VENDOR | VehiclePropertyType.FLOAT | VehicleArea.ZONE;
+
     private static final int CUSTOM_BYTES_PROP_ID_1 =
-            VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START + 2;
+            0x3 | VehiclePropertyGroup.VENDOR | VehiclePropertyType.BYTES | VehicleArea.ZONE;
+
     private static final int CUSTOM_BYTES_PROP_ID_2 =
-            VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START + 3;
+            0x4 | VehiclePropertyGroup.VENDOR | VehiclePropertyType.BYTES | VehicleArea.GLOBAL;
+
     private static final int CUSTOM_STRING_PROP_ID =
-            VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START + 4;
+            0x5 | VehiclePropertyGroup.VENDOR | VehiclePropertyType.STRING | VehicleArea.GLOBAL;
 
     private static final float EPS = 1e-9f;
     private static final int MILLION = 1000 * 1000;
@@ -80,80 +72,30 @@
     private static final float MIN_PROP_FLOAT = 10.42f;
     private static final float MAX_PROP_FLOAT = 42.10f;
 
-    private static final MockedVehicleHal mVehicleHal = new MockedVehicleHal();
+//    private static final MockedVehicleHal mVehicleHal = new MockedVehicleHal();
 
-    private static final VehiclePropConfigs VEHICLE_HAL_CONFIGS = VehiclePropConfigs.newBuilder()
-            .addConfigs(VehiclePropConfig.newBuilder()
-                    .setProp(CUSTOM_GLOBAL_INT_PROP_ID)
-                    .setAccess(VEHICLE_PROP_ACCESS_READ_WRITE)
-                    .setChangeMode(VEHICLE_PROP_CHANGE_MODE_ON_CHANGE)
-                    .setValueType(VEHICLE_VALUE_TYPE_INT32)
-                    .setPermissionModel(VEHICLE_PERMISSION_NO_RESTRICTION)
-                    .addConfigArray(0)
-                    .setSampleRateMin(0f)
-                    .setSampleRateMax(0f)
-                    .addAllInt32Mins(singletonList(MIN_PROP_INT32))
-                    .addAllInt32Maxs(singletonList(MAX_PROP_INT32))
-                    .build())
-            .addConfigs(VehiclePropConfig.newBuilder()
-                    .setProp(CUSTOM_ZONED_FLOAT_PROP_ID)
-                    .setAccess(VEHICLE_PROP_ACCESS_READ_WRITE)
-                    .setChangeMode(VEHICLE_PROP_CHANGE_MODE_ON_CHANGE)
-                    .setValueType(VEHICLE_VALUE_TYPE_ZONED_FLOAT)
-                    .setPermissionModel(VEHICLE_PERMISSION_NO_RESTRICTION)
-                    .setZones(VEHICLE_ZONE_ROW_1_LEFT | VEHICLE_ZONE_ROW_1_RIGHT)
-                    .addConfigArray(0)
-                    .setSampleRateMin(0f)
-                    .setSampleRateMax(0f)
-                    .addAllFloatMins(Lists.newArrayList(MIN_PROP_FLOAT, MIN_PROP_FLOAT))
-                    .addAllFloatMaxs(Lists.newArrayList(MAX_PROP_FLOAT, MAX_PROP_FLOAT))
-                    .build())
-            .addConfigs(VehiclePropConfig.newBuilder()
-                    .setProp(CUSTOM_BYTES_PROP_ID_1)
-                    .setAccess(VEHICLE_PROP_ACCESS_READ_WRITE)
-                    .setChangeMode(VEHICLE_PROP_CHANGE_MODE_ON_CHANGE)
-                    .setValueType(VEHICLE_VALUE_TYPE_BYTES)
-                    .setPermissionModel(VEHICLE_PERMISSION_NO_RESTRICTION)
-                    .setZones(VEHICLE_ZONE_ROW_1_LEFT | VEHICLE_ZONE_ROW_1_RIGHT)
-                    .addConfigArray(0)
-                    .setSampleRateMin(0f)
-                    .setSampleRateMax(0f)
-                    .build())
-            .addConfigs(VehiclePropConfig.newBuilder()
-                    .setProp(CUSTOM_BYTES_PROP_ID_2)
-                    .setAccess(VEHICLE_PROP_ACCESS_READ_WRITE)
-                    .setChangeMode(VEHICLE_PROP_CHANGE_MODE_ON_CHANGE)
-                    .setValueType(VEHICLE_VALUE_TYPE_BYTES)
-                    .setPermissionModel(VEHICLE_PERMISSION_NO_RESTRICTION)
-                    .addConfigArray(0)
-                    .setSampleRateMin(0f)
-                    .setSampleRateMax(0f)
-                    .build())
-            .addConfigs(VehiclePropConfig.newBuilder()
-                    .setProp(CUSTOM_STRING_PROP_ID)
-                    .setAccess(VEHICLE_PROP_ACCESS_READ_WRITE)
-                    .setChangeMode(VEHICLE_PROP_CHANGE_MODE_ON_CHANGE)
-                    .setValueType(VEHICLE_VALUE_TYPE_STRING)
-                    .setPermissionModel(VEHICLE_PERMISSION_NO_RESTRICTION)
-                    .addConfigArray(0)
-                    .setSampleRateMin(0f)
-                    .setSampleRateMax(0f)
-                    .build())
-            .build();
+    private static final VehiclePropConfig mConfigs[] = new VehiclePropConfig[] {
+            VehiclePropConfigBuilder.newBuilder(CUSTOM_GLOBAL_INT_PROP_ID)
+                    .addAreaConfig(0, MIN_PROP_INT32, MAX_PROP_INT32)
+                    .build(),
+            VehiclePropConfigBuilder.newBuilder(CUSTOM_ZONED_FLOAT_PROP_ID)
+                    .setSupportedAreas(VehicleAreaZone.ROW_1_LEFT | VehicleAreaZone.ROW_1_RIGHT)
+                    .addAreaConfig(VehicleAreaZone.ROW_1_LEFT, MIN_PROP_FLOAT, MAX_PROP_FLOAT)
+                    .addAreaConfig(VehicleAreaZone.ROW_2_RIGHT, MIN_PROP_FLOAT, MAX_PROP_FLOAT)
+                    .build(),
+            VehiclePropConfigBuilder.newBuilder(CUSTOM_BYTES_PROP_ID_1)
+                    .setSupportedAreas(VehicleAreaZone.ROW_1_LEFT | VehicleAreaZone.ROW_1_RIGHT)
+                    .build(),
+            VehiclePropConfigBuilder.newBuilder(CUSTOM_BYTES_PROP_ID_2).build(),
+            VehiclePropConfigBuilder.newBuilder(CUSTOM_STRING_PROP_ID).build(),
+    };
 
     private CarVendorExtensionManager mManager;
-    private CarTestManager mCarTestManager;
 
     @Override
     protected void setUp() throws Exception {
         super.setUp();
 
-        CarTestManagerBinderWrapper testManagerWrapper =
-                (CarTestManagerBinderWrapper) getCar().getCarManager(Car.TEST_SERVICE);
-
-        mCarTestManager = new CarTestManager(testManagerWrapper);
-        mCarTestManager.startMocking(mVehicleHal, 0);
-
         mManager = (CarVendorExtensionManager) getCar().getCarManager(Car.VENDOR_EXTENSION_SERVICE);
         assertNotNull(mManager);
     }
@@ -161,12 +103,11 @@
     @Override
     protected void tearDown() throws Exception {
         super.tearDown();
-        mCarTestManager.stopMocking();
     }
 
     public void testPropertyList() throws Exception {
         List<CarPropertyConfig> configs = mManager.getProperties();
-        assertEquals(VEHICLE_HAL_CONFIGS.getConfigsCount(), configs.size());
+        assertEquals(mConfigs.length, configs.size());
 
         SparseArray<CarPropertyConfig> configById = new SparseArray<>(configs.size());
         for (CarPropertyConfig config : configs) {
@@ -192,11 +133,11 @@
         mManager.setProperty(
                 Float.class,
                 CUSTOM_ZONED_FLOAT_PROP_ID,
-                VEHICLE_ZONE_ROW_1_RIGHT,
+                VehicleAreaZone.ROW_1_RIGHT,
                 value);
 
         float actualValue = mManager.getProperty(
-                Float.class, CUSTOM_ZONED_FLOAT_PROP_ID, VEHICLE_ZONE_ROW_1_RIGHT);
+                Float.class, CUSTOM_ZONED_FLOAT_PROP_ID, VehicleAreaZone.ROW_1_RIGHT);
         assertEquals(value, actualValue, EPS);
     }
 
@@ -278,59 +219,56 @@
         return sb.toString();
     }
 
-    private static class MockedVehicleHal implements VehicleNetworkHalMock {
+    @Override
+    protected synchronized MockedVehicleHal createMockedVehicleHal() {
+        MockedVehicleHal hal = new VendorExtMockedVehicleHal();
+        hal.addProperties(mConfigs);
+        return hal;
+    }
+
+    private static class VendorExtMockedVehicleHal extends MockedVehicleHal {
         private final SparseArray<VehiclePropValue> mValues = new SparseArray<>();
 
         private byte[] mBytes = null;
 
         @Override
-        public VehiclePropConfigs onListProperties() {
-            return VEHICLE_HAL_CONFIGS;
-        }
-
-        @Override
-        public void onPropertySet(VehiclePropValue value) {
-            if (value.getProp() == CUSTOM_BYTES_PROP_ID_1) {
-                mBytes = value.getBytesValue().toByteArray();
+        public synchronized int set(VehiclePropValue propValue) {
+            if (propValue.prop == CUSTOM_BYTES_PROP_ID_1) {
+                mBytes = toByteArray(propValue.value.bytes);
             }
 
-            mValues.put(value.getProp(), newBuilder(value).build());
+            mValues.put(propValue.prop, propValue);
+            return StatusCode.OK;
         }
 
         @Override
-        public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            Log.d(TAG, "onPropertyGet: 0x" + Integer.toHexString(value.getProp()) + ", "
-                    + VehiclePropValueUtil.toString(value));
+        public synchronized void get(VehiclePropValue requestedPropValue, getCallback cb) {
+            if (!isVendorProperty(requestedPropValue.prop)) {
+                cb.onValues(StatusCode.INVALID_ARG, null);
+                return;
+            }
+            VehiclePropValue result = new VehiclePropValue();
+            result.prop = requestedPropValue.prop;
+            result.areaId = requestedPropValue.areaId;
 
-            if (value.getProp() == CUSTOM_BYTES_PROP_ID_2 && mBytes != null) {
+            if (requestedPropValue.prop == CUSTOM_BYTES_PROP_ID_2 && mBytes != null) {
                 Log.d(TAG, "Returning byte array property, value: " + Arrays.toString(mBytes));
-                return VehiclePropValue
-                        .newBuilder(value)
-                        .setBytesValue(ByteString.copyFrom(mBytes))
-                        .build();
-            }
-
-            VehiclePropValue existingValue = mValues.get(value.getProp());
-            if (existingValue != null) {
-                return existingValue;
-            }
-
-            int type = value.getValueType();
-
-            // VehicleNetwork will fail if we do not set empty data for these properties.
-            if (type == VEHICLE_VALUE_TYPE_BYTES && !value.hasBytesValue()) {
-                return VehiclePropValue.newBuilder(value).setBytesValue(ByteString.EMPTY).build();
-            } else if (type == VEHICLE_VALUE_TYPE_STRING && !value.hasStringValue()) {
-                return VehiclePropValue.newBuilder(value).setStringValue("").build();
+                for (byte b : mBytes) {
+                    result.value.bytes.add(b);
+                }
             } else {
-                return value;
+                VehiclePropValue existingValue = mValues.get(requestedPropValue.prop);
+                if (existingValue != null) {
+                    result = existingValue;
+                } else {
+                    result = requestedPropValue;
+                }
             }
+            cb.onValues(StatusCode.OK, result);
         }
 
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) { }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) { }
+        private boolean isVendorProperty(int prop) {
+            return VehiclePropertyGroup.VENDOR == (prop & VehiclePropertyGroup.VENDOR);
+        }
     }
 }
diff --git a/tests/carservice_test/src/com/android/car/test/CarVolumeServiceTest.java b/tests/carservice_test/src/com/android/car/test/CarVolumeServiceTest.java
index 54bbb29..bd53c02 100644
--- a/tests/carservice_test/src/com/android/car/test/CarVolumeServiceTest.java
+++ b/tests/carservice_test/src/com/android/car/test/CarVolumeServiceTest.java
@@ -18,8 +18,15 @@
 import android.car.Car;
 import android.car.CarNotConnectedException;
 import android.car.media.CarAudioManager;
-import android.car.test.VehicleHalEmulator;
 import android.content.Context;
+import android.hardware.vehicle.V2_0.VehicleAudioExtFocusFlag;
+import android.hardware.vehicle.V2_0.VehicleAudioFocusState;
+import android.hardware.vehicle.V2_0.VehicleAudioVolumeIndex;
+import android.hardware.vehicle.V2_0.VehicleHwKeyInputAction;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.hardware.vehicle.V2_0.VehiclePropertyAccess;
+import android.hardware.vehicle.V2_0.VehiclePropertyChangeMode;
 import android.media.AudioAttributes;
 import android.media.AudioManager;
 import android.media.IVolumeController;
@@ -29,12 +36,11 @@
 import android.util.SparseIntArray;
 import android.view.KeyEvent;
 
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioExtFocusFlag;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioFocusState;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
+import com.google.android.collect.Lists;
+
+import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
+import com.android.car.vehiclehal.test.VehiclePropConfigBuilder;
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
 import com.android.internal.annotations.GuardedBy;
 
 import java.util.ArrayList;
@@ -124,9 +130,9 @@
             assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
             int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
             mAudioFocusPropertyHandler.sendAudioFocusState(
-                    VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                    VehicleAudioFocusState.STATE_GAIN,
                     request[1],
-                    VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                    VehicleAudioExtFocusFlag.NONE_FLAG);
 
             // focus gives to Alarm, there should be a audio context change.
             CarAudioFocusTest.AudioFocusListener listenerAlarm = new
@@ -138,8 +144,8 @@
                     AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
             request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
             mAudioFocusPropertyHandler.sendAudioFocusState(
-                    VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN, request[1],
-                    VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                    VehicleAudioFocusState.STATE_GAIN, request[1],
+                    VehicleAudioExtFocusFlag.NONE_FLAG);
             // should not show UI
             volumeChangeVerificationPoll(AudioManager.STREAM_ALARM, false, volumeController);
 
@@ -171,9 +177,9 @@
             assertEquals(AudioManager.AUDIOFOCUS_REQUEST_GRANTED, res);
             int[] request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
             mAudioFocusPropertyHandler.sendAudioFocusState(
-                    VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN,
+                    VehicleAudioFocusState.STATE_GAIN,
                     request[1],
-                    VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                    VehicleAudioExtFocusFlag.NONE_FLAG);
 
 
             assertEquals(musicVol, mCarAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
@@ -191,8 +197,8 @@
                     AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
             request = mAudioFocusPropertyHandler.waitForAudioFocusRequest(TIMEOUT_MS);
             mAudioFocusPropertyHandler.sendAudioFocusState(
-                    VehicleAudioFocusState.VEHICLE_AUDIO_FOCUS_STATE_GAIN, request[1],
-                    VehicleAudioExtFocusFlag.VEHICLE_AUDIO_EXT_FOCUS_NONE_FLAG);
+                    VehicleAudioFocusState.STATE_GAIN, request[1],
+                    VehicleAudioExtFocusFlag.NONE_FLAG);
 
             sendVolumeKey(true /*vol up*/);
             callVol++;
@@ -250,8 +256,7 @@
         }
     }
 
-    private class SingleChannelVolumeHandler implements
-            VehicleHalEmulator.VehicleHalPropertyHandler {
+    private class SingleChannelVolumeHandler implements VehicleHalPropertyHandler {
         private final List<Integer> mMins;
         private final List<Integer> mMaxs;
         private final SparseIntArray mCurrent;
@@ -269,36 +274,31 @@
 
         @Override
         public void onPropertySet(VehiclePropValue value) {
-            int stream = value.getInt32Values(
-                    VehicleNetworkConsts.VehicleAudioVolumeIndex.VEHICLE_AUDIO_VOLUME_INDEX_STREAM);
-            int volume = value.getInt32Values(
-                    VehicleNetworkConsts.VehicleAudioVolumeIndex.VEHICLE_AUDIO_VOLUME_INDEX_VOLUME);
-            int state = value.getInt32Values(
-                    VehicleNetworkConsts.VehicleAudioVolumeIndex.VEHICLE_AUDIO_VOLUME_INDEX_STATE);
+            ArrayList<Integer> v = value.value.int32Values;
+            int stream = v.get(VehicleAudioVolumeIndex.INDEX_STREAM);
+            int volume = v.get(VehicleAudioVolumeIndex.INDEX_VOLUME);
+            int state = v.get(VehicleAudioVolumeIndex.INDEX_STATE);
 
-            int[] values = {stream, volume, state};
-            VehiclePropValue injectValue = VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME, values,
-                    SystemClock.elapsedRealtimeNanos());
             mCurrent.put(stream, volume);
-            getVehicleHalEmulator().injectEvent(injectValue);
+            getMockedVehicleHal().injectEvent(
+                    VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_VOLUME)
+                            .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                            .addIntValue(stream, volume, state)
+                            .build());
         }
 
         @Override
         public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            int stream = value.getInt32Values(
-                    VehicleNetworkConsts.VehicleAudioVolumeIndex.VEHICLE_AUDIO_VOLUME_INDEX_STREAM);
-
+            int stream = value.value.int32Values.get(VehicleAudioVolumeIndex.INDEX_STREAM);
             int volume = mCurrent.get(stream);
-            int[] values = {stream, volume, 0};
-            VehiclePropValue propValue = VehiclePropValueUtil.createIntVectorValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME, values,
-                    SystemClock.elapsedRealtimeNanos());
-            return propValue;
+            return VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_VOLUME)
+                    .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                    .addIntValue(stream, volume, 0)
+                    .build();
         }
 
         @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
+        public void onPropertySubscribe(int property, int zones, float sampleRate) {
         }
 
         @Override
@@ -309,8 +309,8 @@
     private final CarAudioFocusTest.FocusPropertyHandler mAudioFocusPropertyHandler =
             new CarAudioFocusTest.FocusPropertyHandler(this);
 
-    private final VehicleHalEmulator.VehicleHalPropertyHandler mAudioRoutingPolicyPropertyHandler =
-            new VehicleHalEmulator.VehicleHalPropertyHandler() {
+    private final VehicleHalPropertyHandler mAudioRoutingPolicyPropertyHandler =
+            new VehicleHalPropertyHandler() {
                 @Override
                 public void onPropertySet(VehiclePropValue value) {
                     //TODO
@@ -323,7 +323,7 @@
                 }
 
                 @Override
-                public void onPropertySubscribe(int property, float sampleRate, int zones) {
+                public void onPropertySubscribe(int property, int zones, float sampleRate) {
                     fail("cannot subscribe");
                 }
 
@@ -333,8 +333,7 @@
                 }
             };
 
-    private final VehicleHalEmulator.VehicleHalPropertyHandler mHWKeyHandler =
-            new VehicleHalEmulator.VehicleHalPropertyHandler() {
+    private final VehicleHalPropertyHandler mHWKeyHandler = new VehicleHalPropertyHandler() {
                 @Override
                 public void onPropertySet(VehiclePropValue value) {
                     //TODO
@@ -342,14 +341,14 @@
 
                 @Override
                 public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-                    int[] values = {0, 0, 0, 0 };
-                    return VehiclePropValueUtil.createIntVectorValue(
-                            VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT, values,
-                            SystemClock.elapsedRealtimeNanos());
+                    return VehiclePropValueBuilder.newBuilder(VehicleProperty.HW_KEY_INPUT)
+                            .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                            .addIntValue(0, 0, 0, 0)
+                            .build();
                 }
 
                 @Override
-                public void onPropertySubscribe(int property, float sampleRate, int zones) {
+                public void onPropertySubscribe(int property, int zones, float sampleRate) {
                     //
                 }
 
@@ -364,83 +363,60 @@
         SingleChannelVolumeHandler singleChannelVolumeHandler =
                 new SingleChannelVolumeHandler(mins, maxs);
         int zones = (1<<maxs.size()) - 1;
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.getBuilder(VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_VOLUME,
-                        VehicleNetworkConsts.VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehicleNetworkConsts.VehiclePropChangeMode
-                                .VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC3,
-                        VehicleNetworkConsts.VehiclePermissionModel
-                                .VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        supportedAudioVolumeContext /*configFlags*/,
-                        0 /*sampleRateMax*/, 0 /*sampleRateMin*/,
-                        maxs, mins).setZones(zones).build(),
-                singleChannelVolumeHandler);
 
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT,
-                        VehicleNetworkConsts.VehiclePropAccess.VEHICLE_PROP_ACCESS_READ,
-                        VehicleNetworkConsts.VehiclePropChangeMode
-                                .VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4,
-                        VehicleNetworkConsts.VehiclePermissionModel
-                                .VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                mHWKeyHandler);
+        ArrayList<Integer> audioVolumeConfigArray =
+                Lists.newArrayList(
+                        supportedAudioVolumeContext,
+                        0  /* capability flag*/,
+                        0, /* reserved */
+                        0  /* reserved */);
+        audioVolumeConfigArray.addAll(maxs);
 
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_FOCUS,
-                        VehicleNetworkConsts.VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehicleNetworkConsts.VehiclePropChangeMode
-                                .VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4,
-                        VehicleNetworkConsts.VehiclePermissionModel
-                                .VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                mAudioFocusPropertyHandler);
-        getVehicleHalEmulator().addProperty(
-                VehiclePropConfigUtil.getBuilder(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY,
-                        VehicleNetworkConsts.VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE,
-                        VehicleNetworkConsts.VehiclePropChangeMode
-                                .VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2,
-                        VehicleNetworkConsts.VehiclePermissionModel
-                                .VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                mAudioRoutingPolicyPropertyHandler);
+        addProperty(VehicleProperty.AUDIO_VOLUME, singleChannelVolumeHandler)
+                        .setConfigArray(audioVolumeConfigArray)
+                        .setSupportedAreas(zones);
 
-        getVehicleHalEmulator().addStaticProperty(
-                VehiclePropConfigUtil.createStaticStringProperty(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT),
-                VehiclePropValueUtil.createIntValue(
-                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT, 1, 0));
+        addProperty(VehicleProperty.HW_KEY_INPUT, mHWKeyHandler)
+                .setAccess(VehiclePropertyAccess.READ);
 
-        getVehicleHalEmulator().start();
+        addProperty(VehicleProperty.AUDIO_FOCUS, mAudioFocusPropertyHandler);
+
+        addProperty(VehicleProperty.AUDIO_ROUTING_POLICY, mAudioFocusPropertyHandler)
+                        .setAccess(VehiclePropertyAccess.WRITE);
+
+        addStaticProperty(VehicleProperty.AUDIO_HW_VARIANT,
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.AUDIO_HW_VARIANT)
+                        .addIntValue(-1)
+                        .build())
+                .setConfigArray(Lists.newArrayList(0));
+
+        reinitializeMockedHal();
     }
 
-    public void sendVolumeKey(boolean volUp) {
-        int[] values = {
-                VehicleNetworkConsts.VehicleHwKeyInputAction.VEHICLE_HW_KEY_INPUT_ACTION_DOWN,
+    private void sendVolumeKey(boolean volUp) {
+        int[] actionDown = {
+                VehicleHwKeyInputAction.ACTION_DOWN,
+                volUp ? KeyEvent.KEYCODE_VOLUME_UP : KeyEvent.KEYCODE_VOLUME_DOWN, 0, 0};
+
+        VehiclePropValue injectValue =
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.HW_KEY_INPUT)
+                        .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                        .addIntValue(actionDown)
+                        .build();
+
+        getMockedVehicleHal().injectEvent(injectValue);
+
+        int[] actionUp = {
+                VehicleHwKeyInputAction.ACTION_UP,
                 volUp ? KeyEvent.KEYCODE_VOLUME_UP : KeyEvent.KEYCODE_VOLUME_DOWN, 0, 0 };
 
-        VehiclePropValue injectValue = VehiclePropValueUtil.createIntVectorValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT, values,
-                SystemClock.elapsedRealtimeNanos());
+        injectValue =
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.HW_KEY_INPUT)
+                        .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                        .addIntValue(actionUp)
+                        .build();
 
-        getVehicleHalEmulator().injectEvent(injectValue);
-
-        int[] upValues = {
-                VehicleNetworkConsts.VehicleHwKeyInputAction.VEHICLE_HW_KEY_INPUT_ACTION_UP,
-                volUp ? KeyEvent.KEYCODE_VOLUME_UP : KeyEvent.KEYCODE_VOLUME_DOWN, 0, 0 };
-
-        injectValue = VehiclePropValueUtil.createIntVectorValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_HW_KEY_INPUT, upValues,
-                SystemClock.elapsedRealtimeNanos());
-
-        getVehicleHalEmulator().injectEvent(injectValue);
+        getMockedVehicleHal().injectEvent(injectValue);
     }
 
     private static class VolumeController extends IVolumeController.Stub {
diff --git a/tests/carservice_test/src/com/android/car/test/MockedCarTestBase.java b/tests/carservice_test/src/com/android/car/test/MockedCarTestBase.java
index 799f577..0c3f84b 100644
--- a/tests/carservice_test/src/com/android/car/test/MockedCarTestBase.java
+++ b/tests/carservice_test/src/com/android/car/test/MockedCarTestBase.java
@@ -15,76 +15,148 @@
  */
 package com.android.car.test;
 
-import android.car.test.VehicleHalEmulator;
+import android.car.test.CarTestManager;
+import android.car.test.CarTestManagerBinderWrapper;
 import android.content.ComponentName;
+import android.content.Context;
 import android.content.ServiceConnection;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehiclePropertyAccess;
+import android.hardware.vehicle.V2_0.VehiclePropertyChangeMode;
+import android.os.Binder;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
 import android.test.AndroidTestCase;
 import android.util.Log;
 
+import com.android.car.CarPowerManagementService;
+import com.android.car.ICarImpl;
+import com.android.car.SystemInterface;
+import com.android.car.vehiclehal.test.MockedVehicleHal;
+import com.android.car.vehiclehal.test.MockedVehicleHal.DefaultPropertyHandler;
+import com.android.car.vehiclehal.test.MockedVehicleHal.StaticPropertyHandler;
+import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
+import com.android.car.vehiclehal.test.VehiclePropConfigBuilder;
+
 import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
 
 /**
  * Base class for testing with mocked vehicle HAL (=car).
- * It is up to each app to start emulation by getVehicleHalEmulator().start() as there will be
+ * It is up to each app to start emulation by getMockedVehicleHal().start() as there will be
  * per test set up that should be done before starting.
  */
 public class MockedCarTestBase extends AndroidTestCase {
     private static final String TAG = MockedCarTestBase.class.getSimpleName();
-    private static final long DEFAULT_WAIT_TIMEOUT_MS = 3000;
+    static final long DEFAULT_WAIT_TIMEOUT_MS = 3000;
+    static final long SHORT_WAIT_TIMEOUT_MS = 500;
 
     private android.car.Car mCar;
-    private VehicleHalEmulator mVehicleHalEmulator;
+    private ICarImpl mCarImpl;
+    private MockedVehicleHal mMockedVehicleHal;
+    private FakeSystemInterface mFakeSystemInterface;
 
-    private final Semaphore mConnectionWaitForCar = new Semaphore(0);
     private final Semaphore mWaitForMain = new Semaphore(0);
     private final Handler mMainHandler = new Handler(Looper.getMainLooper());
 
-    public static <T> void assertArrayEquals(T[] expected, T[] actual) {
-        if (!Arrays.equals(expected, actual)) {
-            fail("expected:<" + Arrays.toString(expected) +
-                "> but was:<" + Arrays.toString(actual) + ">");
-        }
+    private static final IBinder mCarServiceToken = new Binder();
+    private static boolean mRealCarServiceReleased = false;
+
+    protected synchronized MockedVehicleHal createMockedVehicleHal() {
+        return new MockedVehicleHal();
     }
 
-    public static void assertArrayEquals(int[] expected, int[] actual) {
-        if (!Arrays.equals(expected, actual)) {
-            fail("expected:<" + Arrays.toString(expected) +
-                "> but was:<" + Arrays.toString(actual) + ">");
-        }
+    protected synchronized MockedVehicleHal getMockedVehicleHal() {
+        return mMockedVehicleHal;
+    }
+
+    protected synchronized void configureMockedHal() {
     }
 
     @Override
     protected synchronized void setUp() throws Exception {
         super.setUp();
-        mCar = android.car.Car.createCar(getContext(), new ServiceConnection() {
 
-            @Override
-            public void onServiceConnected(ComponentName name, IBinder service) {
-                mConnectionWaitForCar.release();
-            }
+        releaseRealCarService(getContext());
 
-            @Override
-            public void onServiceDisconnected(ComponentName name) {
-            }
-        });
-        mCar.connect();
-        assertTrue(mConnectionWaitForCar.tryAcquire(DEFAULT_WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS)
-                );
-        mVehicleHalEmulator = new VehicleHalEmulator(mCar);
+        mMockedVehicleHal = createMockedVehicleHal();
+        configureMockedHal();
+
+        mFakeSystemInterface = new FakeSystemInterface();
+        Context context = getCarServiceContext();
+        mCarImpl = new ICarImpl(context, mMockedVehicleHal, mFakeSystemInterface);
+
+        initMockedHal(false /* no need to release */);
+
+        mCar = new android.car.Car(context, mCarImpl, null /* handler */);
     }
 
     @Override
     protected synchronized void tearDown() throws Exception {
         super.tearDown();
-        if (mVehicleHalEmulator.isStarted()) {
-            mVehicleHalEmulator.stop();
-        }
+
         mCar.disconnect();
+        mCarImpl.release();
+    }
+
+    private Context getCarServiceContext() throws NameNotFoundException {
+        return getContext()
+                .createPackageContext("com.android.car", Context.CONTEXT_IGNORE_SECURITY);
+    }
+
+    protected synchronized void reinitializeMockedHal() {
+        initMockedHal(true /* release */);
+    }
+
+    private synchronized void initMockedHal(boolean release) {
+        if (release) {
+            mCarImpl.release();
+        }
+
+        for (Map.Entry<VehiclePropConfigBuilder, VehicleHalPropertyHandler> entry
+                : mHalConfig.entrySet()) {
+            mMockedVehicleHal.addProperty(entry.getKey().build(), entry.getValue());
+        }
+        mHalConfig.clear();
+        mCarImpl.init();
+    }
+
+    private final Map<VehiclePropConfigBuilder, VehicleHalPropertyHandler> mHalConfig =
+            new HashMap<>();
+
+    protected synchronized VehiclePropConfigBuilder addProperty(int propertyId,
+            VehicleHalPropertyHandler propertyHandler) {
+        VehiclePropConfigBuilder builder = VehiclePropConfigBuilder.newBuilder(propertyId);
+        mHalConfig.put(builder, propertyHandler);
+        return builder;
+    }
+
+    protected synchronized VehiclePropConfigBuilder addProperty(int propertyId) {
+        VehiclePropConfigBuilder builder = VehiclePropConfigBuilder.newBuilder(propertyId);
+        mHalConfig.put(builder, new DefaultPropertyHandler(builder.build(), null));
+        return builder;
+    }
+
+    protected synchronized VehiclePropConfigBuilder addProperty(int propertyId,
+            VehiclePropValue value) {
+        VehiclePropConfigBuilder builder = VehiclePropConfigBuilder.newBuilder(propertyId);
+        mHalConfig.put(builder, new DefaultPropertyHandler(builder.build(), value));
+        return builder;
+    }
+
+    protected synchronized VehiclePropConfigBuilder addStaticProperty(int propertyId,
+            VehiclePropValue value) {
+        VehiclePropConfigBuilder builder = VehiclePropConfigBuilder.newBuilder(propertyId)
+                .setChangeMode(VehiclePropertyChangeMode.STATIC)
+                .setAccess(VehiclePropertyAccess.READ);
+
+        mHalConfig.put(builder, new StaticPropertyHandler(value));
+        return builder;
     }
 
     protected synchronized android.car.Car getCar() {
@@ -106,7 +178,118 @@
         mWaitForMain.acquire();
     }
 
-    protected synchronized VehicleHalEmulator getVehicleHalEmulator() {
-        return mVehicleHalEmulator;
+    protected boolean waitForFakeDisplayState(boolean expectedState) throws Exception {
+        return mFakeSystemInterface.waitForDisplayState(expectedState, SHORT_WAIT_TIMEOUT_MS);
+    }
+
+    public static <T> void assertArrayEquals(T[] expected, T[] actual) {
+        if (!Arrays.equals(expected, actual)) {
+            fail("expected:<" + Arrays.toString(expected) +
+                    "> but was:<" + Arrays.toString(actual) + ">");
+        }
+    }
+
+    public static void assertArrayEquals(int[] expected, int[] actual) {
+        if (!Arrays.equals(expected, actual)) {
+            fail("expected:<" + Arrays.toString(expected) +
+                    "> but was:<" + Arrays.toString(actual) + ">");
+        }
+    }
+
+    /*
+     * In order to eliminate interfering with real car service we will disable it. It will be
+     * enabled back in CarTestService when mCarServiceToken will go away (tests finish).
+     */
+    private synchronized static void releaseRealCarService(Context context) throws Exception {
+        if (mRealCarServiceReleased) {
+            return;  // We just want to release it once.
+        }
+
+        mRealCarServiceReleased = true;  // To make sure it was called once.
+
+        Object waitForConnection = new Object();
+        android.car.Car car = android.car.Car.createCar(context, new ServiceConnection() {
+            @Override
+            public void onServiceConnected(ComponentName name, IBinder service) {
+                synchronized (waitForConnection) {
+                    waitForConnection.notify();
+                }
+            }
+
+            @Override
+            public void onServiceDisconnected(ComponentName name) { }
+        });
+
+        car.connect();
+        synchronized (waitForConnection) {
+            if (!car.isConnected()) {
+                waitForConnection.wait(DEFAULT_WAIT_TIMEOUT_MS);
+            }
+        }
+
+        if (car.isConnected()) {
+            Log.i(TAG, "Connected to real car service");
+            CarTestManagerBinderWrapper binderWrapper =
+                    (CarTestManagerBinderWrapper) car.getCarManager(android.car.Car.TEST_SERVICE);
+            assertNotNull(binderWrapper);
+
+            CarTestManager mgr = new CarTestManager(binderWrapper.binder);
+            mgr.stopCarService(mCarServiceToken);
+        }
+    }
+
+    private static class FakeSystemInterface extends SystemInterface {
+
+        private boolean mDisplayOn = true;
+        private final Semaphore mDisplayStateWait = new Semaphore(0);
+
+        @Override
+        public synchronized void setDisplayState(boolean on) {
+            mDisplayOn = on;
+            mDisplayStateWait.release();
+        }
+
+        boolean waitForDisplayState(boolean expectedState, long timeoutMs)
+                throws Exception {
+            if (expectedState == mDisplayOn) {
+                return true;
+            }
+            mDisplayStateWait.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS);
+            return expectedState == mDisplayOn;
+        }
+
+        @Override
+        public void releaseAllWakeLocks() {
+        }
+
+        @Override
+        public void shutdown() { }
+
+        @Override
+        public void enterDeepSleep(int wakeupTimeSec) { }
+
+        @Override
+        public boolean isSystemSupportingDeepSleep() {
+            return false;
+        }
+
+        @Override
+        public void switchToPartialWakeLock() {
+        }
+
+        @Override
+        public void switchToFullWakeLock() {
+        }
+
+        @Override
+        public void startDisplayStateMonitoring(CarPowerManagementService service) {
+        }
+
+        @Override
+        public void stopDisplayStateMonitoring() {
+        }
+
+        @Override
+        public boolean isWakeupCausedByTimer() { return false; }
     }
 }
diff --git a/tests/carservice_test/src/com/android/car/test/SystemActivityMonitoringServiceTest.java b/tests/carservice_test/src/com/android/car/test/SystemActivityMonitoringServiceTest.java
index 3281865..44e1d99 100644
--- a/tests/carservice_test/src/com/android/car/test/SystemActivityMonitoringServiceTest.java
+++ b/tests/carservice_test/src/com/android/car/test/SystemActivityMonitoringServiceTest.java
@@ -16,18 +16,18 @@
 package com.android.car.test;
 
 import android.app.Activity;
-import android.car.test.VehicleHalEmulator;
 import android.content.ComponentName;
 import android.content.Intent;
+import android.hardware.vehicle.V2_0.VehicleDrivingStatus;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehicleProperty;
+import android.hardware.vehicle.V2_0.VehiclePropertyAccess;
 import android.os.SystemClock;
 
 import com.android.car.SystemActivityMonitoringService;
 import com.android.car.SystemActivityMonitoringService.TopTaskInfoContainer;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleDrivingStatus;
-import com.android.car.vehiclenetwork.VehicleNetworkProto;
-import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
+import com.android.car.vehiclehal.VehiclePropValueBuilder;
+import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -42,28 +42,22 @@
     private final DrivingStatusHandler mDrivingStatusHandler = new DrivingStatusHandler();
 
     @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        getVehicleHalEmulator().addProperty(VehiclePropConfigUtil.getBuilder(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_DRIVING_STATUS,
-                VehicleNetworkConsts.VehiclePropAccess.VEHICLE_PROP_ACCESS_READ,
-                VehicleNetworkConsts.VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                VehicleNetworkConsts.VehicleValueType.VEHICLE_VALUE_TYPE_INT32,
-                VehicleNetworkConsts.VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
-                0 /*configFlags*/,
-                0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
-                mDrivingStatusHandler);
+    protected synchronized void configureMockedHal() {
+        addProperty(VehicleProperty.DRIVING_STATUS, mDrivingStatusHandler)
+                .setAccess(VehiclePropertyAccess.READ);
     }
 
     private void init(boolean drivingStatusRestricted) {
         // Set no restriction to driving status, to avoid CarPackageManagerService to launch a
         // blocking activity.
         mDrivingStatusHandler.setDrivingStatusRestricted(drivingStatusRestricted);
-        getVehicleHalEmulator().start();
-        VehicleNetworkProto.VehiclePropValue injectValue = VehiclePropValueUtil.createIntValue(
-                VehicleNetworkConsts.VEHICLE_PROPERTY_DRIVING_STATUS, 0,
-                SystemClock.elapsedRealtimeNanos());
-        getVehicleHalEmulator().injectEvent(injectValue);
+
+        VehiclePropValue injectValue =
+                VehiclePropValueBuilder.newBuilder(VehicleProperty.DRIVING_STATUS)
+                        .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                        .addIntValue(0)
+                        .build();
+        getMockedVehicleHal().injectEvent(injectValue);
     }
 
     public void testActivityLaunch() {
@@ -195,30 +189,28 @@
     public static class BlockingActivity extends Activity {
     }
 
-    private class DrivingStatusHandler implements VehicleHalEmulator.VehicleHalPropertyHandler {
-        int mDrivingStatus =
-                VehicleNetworkConsts.VehicleDrivingStatus.VEHICLE_DRIVING_STATUS_UNRESTRICTED;
+    private class DrivingStatusHandler implements VehicleHalPropertyHandler {
+        int mDrivingStatus = VehicleDrivingStatus.UNRESTRICTED;
 
         public void setDrivingStatusRestricted(boolean restricted) {
-            mDrivingStatus = restricted ? VehicleDrivingStatus.VEHICLE_DRIVING_STATUS_NO_VIDEO
-                    : VehicleDrivingStatus.VEHICLE_DRIVING_STATUS_UNRESTRICTED;
+            mDrivingStatus = restricted ? VehicleDrivingStatus.NO_VIDEO
+                    : VehicleDrivingStatus.UNRESTRICTED;
         }
 
         @Override
-        public void onPropertySet(VehicleNetworkProto.VehiclePropValue value) {
+        public void onPropertySet(VehiclePropValue value) {
         }
 
         @Override
-        public VehicleNetworkProto.VehiclePropValue onPropertyGet(
-                VehicleNetworkProto.VehiclePropValue value) {
-            return VehiclePropValueUtil.createIntValue(
-                    VehicleNetworkConsts.VEHICLE_PROPERTY_DRIVING_STATUS,
-                    mDrivingStatus,
-                    SystemClock.elapsedRealtimeNanos());
+        public VehiclePropValue onPropertyGet(VehiclePropValue value) {
+            return VehiclePropValueBuilder.newBuilder(VehicleProperty.DRIVING_STATUS)
+                    .setTimestamp(SystemClock.elapsedRealtimeNanos())
+                    .addIntValue(mDrivingStatus)
+                    .build();
         }
 
         @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
+        public void onPropertySubscribe(int property, int zones, float sampleRate) {
         }
 
         @Override
diff --git a/tests/carservice_unit_test/src/com/android/car/test/CarPowerManagementServiceTest.java b/tests/carservice_unit_test/src/com/android/car/test/CarPowerManagementServiceTest.java
index ca0d18a..bb462ee 100644
--- a/tests/carservice_unit_test/src/com/android/car/test/CarPowerManagementServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/test/CarPowerManagementServiceTest.java
@@ -24,6 +24,7 @@
 import com.android.car.CarPowerManagementService.PowerServiceEventListener;
 import com.android.car.hal.PowerHalService;
 import com.android.car.hal.PowerHalService.PowerState;
+import com.android.car.SystemInterface;
 
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
@@ -32,8 +33,9 @@
     private static final String TAG = CarPowerManagementServiceTest.class.getSimpleName();
     private static final long WAIT_TIMEOUT_MS = 2000;
     private static final long WAIT_TIMEOUT_LONG_MS = 5000;
+
     private MockedPowerHalService mPowerHal;
-    private SystemIntefaceImpl mSystemInterface;
+    private SystemInterfaceImpl mSystemInterface;
     private CarPowerManagementService mService;
     private final PowerEventListener mPowerEventListener = new PowerEventListener();
     private PowerEventProcessingHandlerImpl mPowerEventProcessingHandler;
@@ -43,7 +45,7 @@
         super.setUp();
         mPowerHal = new MockedPowerHalService(true /*isPowerStateSupported*/,
                 true /*isDeepSleepAllowed*/, true /*isTimedWakeupAllowed*/);
-        mSystemInterface = new SystemIntefaceImpl();
+        mSystemInterface = new SystemInterfaceImpl();
     }
 
     @Override
@@ -55,7 +57,7 @@
     }
 
     public void testBootComplete() throws Exception {
-        mService = new CarPowerManagementService(getContext(), mPowerHal, mSystemInterface);
+        mService = new CarPowerManagementService(mPowerHal, mSystemInterface);
         mService.init();
         mService.registerPowerEventListener(mPowerEventListener);
         mPowerEventProcessingHandler = new PowerEventProcessingHandlerImpl(0, 0);
@@ -65,7 +67,7 @@
     }
 
     public void testDisplayOff() throws Exception {
-        mService = new CarPowerManagementService(getContext(), mPowerHal, mSystemInterface);
+        mService = new CarPowerManagementService(mPowerHal, mSystemInterface);
         mService.init();
         mService.registerPowerEventListener(mPowerEventListener);
         mPowerEventProcessingHandler = new PowerEventProcessingHandlerImpl(0, 0);
@@ -82,7 +84,7 @@
         // start with display off
         mSystemInterface.setDisplayState(false);
         mSystemInterface.waitForDisplayStateChange(WAIT_TIMEOUT_MS);
-        mService = new CarPowerManagementService(getContext(), mPowerHal, mSystemInterface);
+        mService = new CarPowerManagementService(mPowerHal, mSystemInterface);
         mService.init();
         mService.registerPowerEventListener(mPowerEventListener);
         mPowerEventProcessingHandler = new PowerEventProcessingHandlerImpl(0, 0);
@@ -96,7 +98,7 @@
 
     public void testShutdown() throws Exception {
         final int wakeupTime = 100;
-        mService = new CarPowerManagementService(getContext(), mPowerHal, mSystemInterface);
+        mService = new CarPowerManagementService(mPowerHal, mSystemInterface);
         mService.init();
         mService.registerPowerEventListener(mPowerEventListener);
         mPowerEventProcessingHandler = new PowerEventProcessingHandlerImpl(0, wakeupTime);
@@ -116,7 +118,7 @@
     public void testShutdownWithProcessing() throws Exception {
         final long processingTimeMs = 3000;
         final int wakeupTime = 100;
-        mService = new CarPowerManagementService(getContext(), mPowerHal, mSystemInterface);
+        mService = new CarPowerManagementService(mPowerHal, mSystemInterface);
         mService.init();
         mService.registerPowerEventListener(mPowerEventListener);
         mPowerEventProcessingHandler = new PowerEventProcessingHandlerImpl(processingTimeMs,
@@ -137,7 +139,7 @@
 
     public void testSleepEntryAndWakeup() throws Exception {
         final int wakeupTime = 100;
-        mService = new CarPowerManagementService(getContext(), mPowerHal, mSystemInterface);
+        mService = new CarPowerManagementService(mPowerHal, mSystemInterface);
         mService.init();
         mService.registerPowerEventListener(mPowerEventListener);
         mPowerEventProcessingHandler = new PowerEventProcessingHandlerImpl(0, wakeupTime);
@@ -161,7 +163,7 @@
     public void testSleepEntryAndPowerOnWithProcessing() throws Exception {
         final long processingTimeMs = 3000;
         final int wakeupTime = 100;
-        mService = new CarPowerManagementService(getContext(), mPowerHal, mSystemInterface);
+        mService = new CarPowerManagementService(mPowerHal, mSystemInterface);
         mService.init();
         mService.registerPowerEventListener(mPowerEventListener);
         mPowerEventProcessingHandler = new PowerEventProcessingHandlerImpl(processingTimeMs,
@@ -191,7 +193,7 @@
     public void testSleepEntryAndWakeUpForProcessing() throws Exception {
         final long processingTimeMs = 3000;
         final int wakeupTime = 100;
-        mService = new CarPowerManagementService(getContext(), mPowerHal, mSystemInterface);
+        mService = new CarPowerManagementService(mPowerHal, mSystemInterface);
         mService.init();
         mService.registerPowerEventListener(mPowerEventListener);
         mPowerEventProcessingHandler = new PowerEventProcessingHandlerImpl(processingTimeMs,
@@ -257,7 +259,7 @@
         }
     }
 
-    private class SystemIntefaceImpl implements CarPowerManagementService.SystemInteface {
+    private static class SystemInterfaceImpl extends SystemInterface {
 
         private boolean mDisplayOn = true;
         private final Semaphore mDisplayStateWait = new Semaphore(0);
@@ -269,7 +271,6 @@
 
         @Override
         public synchronized void setDisplayState(boolean on) {
-            Log.i(TAG, "SystemIntefaceImpl.setDisplayState " + on);
             mDisplayOn = on;
             mDisplayStateWait.release();
         }
diff --git a/tests/libvehiclenetwork-java-test/Android.mk b/tests/libvehiclenetwork-java-test/Android.mk
deleted file mode 100644
index 6dae564..0000000
--- a/tests/libvehiclenetwork-java-test/Android.mk
+++ /dev/null
@@ -1,49 +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.
-#
-#
-
-LOCAL_PATH:= $(call my-dir)
-##################################
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := LibVehicleNetworkJavaTest
-
-LOCAL_CERTIFICATE := platform
-
-LOCAL_MODULE_TAGS := tests
-
-# When built explicitly put it in the data partition
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-
-LOCAL_PROGUARD_ENABLED := disabled
-
-LOCAL_STATIC_JAVA_LIBRARIES += libvehiclenetwork-java
-
-LOCAL_JAVA_LIBRARIES := android.test.runner
-
-include $(BUILD_PACKAGE)
-
-##################################
-include $(CLEAR_VARS)
-#vendor_vns_policy for testing purpose
-LOCAL_MODULE := vendor_vns_policy.xml
-LOCAL_SRC_FILES := $(LOCAL_MODULE)
-LOCAL_MODULE_TAGS := tests
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/vns
-include $(BUILD_PREBUILT)
-
diff --git a/tests/libvehiclenetwork-java-test/AndroidManifest.xml b/tests/libvehiclenetwork-java-test/AndroidManifest.xml
deleted file mode 100644
index 99fe234..0000000
--- a/tests/libvehiclenetwork-java-test/AndroidManifest.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
-        package="com.android.car.vehiclenetwork.libtest"
-        android:sharedUserId="android.uid.system" >
-
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
-            android:targetPackage="com.android.car.vehiclenetwork.libtest"
-            android:label="Tests for Car APIs"/>
-
-    <application android:label="LibVehicleNetworkJavaTest">
-        <uses-library android:name="android.test.runner" />
-    </application>
-</manifest>
diff --git a/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkMockedTest.java b/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkMockedTest.java
deleted file mode 100644
index 2d7cf1e..0000000
--- a/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkMockedTest.java
+++ /dev/null
@@ -1,596 +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.vehiclenetwork.libtest;
-
-import android.os.HandlerThread;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.util.Log;
-
-import com.android.car.vehiclenetwork.VehicleNetwork;
-import com.android.car.vehiclenetwork.VehicleNetwork.SubscribeFlags;
-import com.android.car.vehiclenetwork.VehicleNetwork.VehicleNetworkHalMock;
-import com.android.car.vehiclenetwork.VehicleNetwork.VehicleNetworkListener;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleZone;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfigs;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValues;
-import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
-import com.android.car.vehiclenetwork.VehiclePropValueUtil;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.concurrent.Semaphore;
-import java.util.concurrent.TimeUnit;
-
-@MediumTest
-public class VehicleNetworkMockedTest extends AndroidTestCase {
-    private static final String TAG = VehicleNetworkMockedTest.class.getSimpleName();
-
-    private static final long TIMEOUT_MS = 1000;
-
-    private static final int CUSTOM_PROPERTY_INT32 =
-            VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START;
-    private static final int CUSTOM_PROPERTY_ZONED_INT32 =
-            VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START + 1;
-    private static final int CUSTOM_PROPERTY_ZONED_INT32_VEC2 =
-            VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START + 2;
-    private static final int CUSTOM_PROPERTY_ZONED_INT32_VEC3 =
-            VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START + 3;
-    private static final int CUSTOM_PROPERTY_ZONED_FLOAT_VEC2 =
-            VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START + 4;
-    private static final int CUSTOM_PROPERTY_ZONED_FLOAT_VEC3 =
-            VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START + 5;
-    private static final int CUSTOM_PROPERTY_FLOAT_VEC2 =
-            VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START + 6;
-    private static final int CUSTOM_PROPERTY_INT32_VEC2 =
-            VehicleNetworkConsts.VEHICLE_PROPERTY_CUSTOM_START + 7;
-
-    private final HandlerThread mHandlerThread = new HandlerThread(
-            VehicleNetworkTest.class.getSimpleName());
-    private VehicleNetwork mVehicleNetwork;
-    private EventListener mListener = new EventListener();
-    private final VehicleHalMock mVehicleHalMock = new VehicleHalMock();
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mHandlerThread.start();
-        mVehicleNetwork = VehicleNetwork.createVehicleNetwork(mListener,
-                mHandlerThread.getLooper());
-        mVehicleHalMock.registerProperty(
-                VehiclePropConfigUtil.createProperty(
-                        CUSTOM_PROPERTY_INT32,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32, 0x0),
-                new DefaultVehiclePropertyHandler(VehiclePropValueUtil.createIntValue(
-                        CUSTOM_PROPERTY_INT32, 0, 0)));
-        mVehicleHalMock.registerProperty(
-                VehiclePropConfigUtil.createProperty(
-                        CUSTOM_PROPERTY_ZONED_INT32,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32, 0x0),
-                new DefaultVehiclePropertyHandler(VehiclePropValueUtil.createZonedIntValue(
-                        CUSTOM_PROPERTY_ZONED_INT32, VehicleZone.VEHICLE_ZONE_ROW_2_LEFT, 0, 0)));
-        mVehicleHalMock.registerProperty(
-                VehiclePropConfigUtil.createProperty(
-                        CUSTOM_PROPERTY_ZONED_INT32_VEC2,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2, 0x0),
-                new DefaultVehiclePropertyHandler(VehiclePropValueUtil.createZonedIntVectorValue(
-                        CUSTOM_PROPERTY_ZONED_INT32_VEC2,
-                        VehicleZone.VEHICLE_ZONE_ROW_1_LEFT,
-                        new int[2], 0)));
-        mVehicleHalMock.registerProperty(
-                VehiclePropConfigUtil.createProperty(
-                        CUSTOM_PROPERTY_INT32_VEC2,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2, 0x0),
-                new DefaultVehiclePropertyHandler(VehiclePropValueUtil.createIntVectorValue(
-                        CUSTOM_PROPERTY_INT32_VEC2, new int[2], 0)));
-        mVehicleHalMock.registerProperty(
-                VehiclePropConfigUtil.createZonedProperty(
-                        CUSTOM_PROPERTY_ZONED_INT32_VEC3,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3,
-                        VehicleZone.VEHICLE_ZONE_ROW_1_LEFT,
-                        0x0),
-                new DefaultVehiclePropertyHandler(VehiclePropValueUtil.createZonedIntVectorValue(
-                        CUSTOM_PROPERTY_ZONED_INT32_VEC3,
-                        VehicleZone.VEHICLE_ZONE_ROW_1_LEFT,
-                        new int[3], 0)));
-        mVehicleHalMock.registerProperty(
-                VehiclePropConfigUtil.createZonedProperty(
-                        CUSTOM_PROPERTY_ZONED_FLOAT_VEC2,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2,
-                        VehicleZone.VEHICLE_ZONE_ROW_1_LEFT,
-                        0x0),
-                new DefaultVehiclePropertyHandler(VehiclePropValueUtil.createZonedFloatVectorValue(
-                        CUSTOM_PROPERTY_ZONED_FLOAT_VEC2,
-                        VehicleZone.VEHICLE_ZONE_ROW_1_LEFT,
-                        new float[2], 0)));
-        mVehicleHalMock.registerProperty(
-                VehiclePropConfigUtil.createProperty(
-                        CUSTOM_PROPERTY_FLOAT_VEC2,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC2, 0x0),
-                new DefaultVehiclePropertyHandler(VehiclePropValueUtil.createFloatVectorValue(
-                        CUSTOM_PROPERTY_FLOAT_VEC2, new float[2], 0)));
-        mVehicleHalMock.registerProperty(
-                VehiclePropConfigUtil.createZonedProperty(
-                        CUSTOM_PROPERTY_ZONED_FLOAT_VEC3,
-                        VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE,
-                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
-                        VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3,
-                        VehicleZone.VEHICLE_ZONE_ROW_1_LEFT,
-                        0x0),
-                new DefaultVehiclePropertyHandler(VehiclePropValueUtil.createZonedFloatVectorValue(
-                        CUSTOM_PROPERTY_ZONED_FLOAT_VEC3,
-                        VehicleZone.VEHICLE_ZONE_ROW_1_LEFT,
-                        new float[3], 0)));
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        mHandlerThread.quit();
-        mVehicleNetwork.stopMocking();
-    }
-
-    public void testHalRestartListening() throws Exception {
-        mVehicleNetwork.startHalRestartMonitoring();
-        mVehicleNetwork.startMocking(mVehicleHalMock);
-        assertTrue(mListener.waitForHalRestartAndAssert(TIMEOUT_MS, true /*expectedInMocking*/));
-        mVehicleNetwork.stopMocking();
-        assertTrue(mListener.waitForHalRestartAndAssert(TIMEOUT_MS, false /*expectedInMocking*/));
-        mVehicleNetwork.stopHalRestartMonitoring();
-    }
-
-    public void testCustomZonedIntProperties() {
-        final int INT_VALUE = 10;
-        final int INT_VALUE2 = 20;
-
-        mVehicleNetwork.startMocking(mVehicleHalMock);
-
-        mVehicleNetwork.setIntProperty(CUSTOM_PROPERTY_INT32, INT_VALUE);
-        assertEquals(INT_VALUE, mVehicleNetwork.getIntProperty(CUSTOM_PROPERTY_INT32));
-
-        mVehicleNetwork.setZonedIntProperty(CUSTOM_PROPERTY_ZONED_INT32,
-                VehicleZone.VEHICLE_ZONE_ROW_2_LEFT, INT_VALUE);
-        mVehicleNetwork.setZonedIntProperty(CUSTOM_PROPERTY_ZONED_INT32,
-                VehicleZone.VEHICLE_ZONE_ROW_2_RIGHT, INT_VALUE2);
-
-        assertEquals(INT_VALUE,
-                mVehicleNetwork.getZonedIntProperty(CUSTOM_PROPERTY_ZONED_INT32,
-                        VehicleZone.VEHICLE_ZONE_ROW_2_LEFT));
-        assertEquals(INT_VALUE2,
-                mVehicleNetwork.getZonedIntProperty(CUSTOM_PROPERTY_ZONED_INT32,
-                        VehicleZone.VEHICLE_ZONE_ROW_2_RIGHT));
-        assertEquals(INT_VALUE,
-                mVehicleNetwork.getZonedIntProperty(CUSTOM_PROPERTY_ZONED_INT32,
-                        VehicleZone.VEHICLE_ZONE_ROW_2_LEFT));
-    }
-
-    public void testCustomZonedIntVecProperties() {
-        final int[] ZONED_INT_VALUE_LEFT = new int[] {30, 40};
-        final int[] ZONED_INT_VALUE_RIGHT = new int[] {50, 60};
-        final int[] ZONED_INT_VALUE_VEC3 = new int[] {30, 40, 50};
-
-        mVehicleNetwork.startMocking(mVehicleHalMock);
-
-        int[] actualValue = mVehicleNetwork.getZonedIntVectorProperty(
-                CUSTOM_PROPERTY_ZONED_INT32_VEC2,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT);
-        // Verify the default values before calling setProperty.
-        assertArrayEquals(new int[2], actualValue);
-        mVehicleNetwork.setZonedIntVectorProperty(CUSTOM_PROPERTY_ZONED_INT32_VEC2,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT,
-                ZONED_INT_VALUE_LEFT);
-        actualValue = mVehicleNetwork.getZonedIntVectorProperty(
-                CUSTOM_PROPERTY_ZONED_INT32_VEC2,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT);
-        assertArrayEquals(ZONED_INT_VALUE_LEFT, actualValue);
-
-        // Verify different zone for the same property
-        mVehicleNetwork.setZonedIntVectorProperty(CUSTOM_PROPERTY_ZONED_INT32_VEC2,
-                VehicleZone.VEHICLE_ZONE_ROW_1_RIGHT,
-                ZONED_INT_VALUE_RIGHT);
-        actualValue = mVehicleNetwork.getZonedIntVectorProperty(
-                CUSTOM_PROPERTY_ZONED_INT32_VEC2,
-                VehicleZone.VEHICLE_ZONE_ROW_1_RIGHT);
-        assertArrayEquals(ZONED_INT_VALUE_RIGHT, actualValue);
-
-        mVehicleNetwork.setZonedIntVectorProperty(CUSTOM_PROPERTY_ZONED_INT32_VEC3,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT,
-                ZONED_INT_VALUE_VEC3);
-        actualValue = mVehicleNetwork.getZonedIntVectorProperty(
-                CUSTOM_PROPERTY_ZONED_INT32_VEC3,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT);
-        assertArrayEquals(ZONED_INT_VALUE_VEC3, actualValue);
-    }
-
-    public void testCustomZonedFloatVecProperties() {
-        final float[] ZONED_FLOAT_VALUE_LEFT = new float[] {30.1f, 40.3f};
-        final float[] ZONED_FLOAT_VALUE_RIGHT = new float[] {50.5f, 60};
-        final float[] ZONED_FLOAT_VALUE_VEC3 = new float[] {30, 40.3f, 50};
-
-        mVehicleNetwork.startMocking(mVehicleHalMock);
-
-        float[] actualValue = mVehicleNetwork.getZonedFloatVectorProperty(
-                CUSTOM_PROPERTY_ZONED_FLOAT_VEC2,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT);
-        // Verify the default values before calling setProperty.
-        assertArrayEquals(new float[2], actualValue);
-        mVehicleNetwork.setZonedFloatVectorProperty(CUSTOM_PROPERTY_ZONED_FLOAT_VEC2,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT,
-                ZONED_FLOAT_VALUE_LEFT);
-        actualValue = mVehicleNetwork.getZonedFloatVectorProperty(
-                CUSTOM_PROPERTY_ZONED_FLOAT_VEC2,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT);
-        assertArrayEquals(ZONED_FLOAT_VALUE_LEFT, actualValue);
-
-        // Verify different zone for the same property
-        mVehicleNetwork.setZonedFloatVectorProperty(CUSTOM_PROPERTY_ZONED_FLOAT_VEC2,
-                VehicleZone.VEHICLE_ZONE_ROW_1_RIGHT,
-                ZONED_FLOAT_VALUE_RIGHT);
-        actualValue = mVehicleNetwork.getZonedFloatVectorProperty(
-                CUSTOM_PROPERTY_ZONED_FLOAT_VEC2,
-                VehicleZone.VEHICLE_ZONE_ROW_1_RIGHT);
-        assertArrayEquals(ZONED_FLOAT_VALUE_RIGHT, actualValue);
-
-        mVehicleNetwork.setZonedFloatVectorProperty(CUSTOM_PROPERTY_ZONED_FLOAT_VEC3,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT,
-                ZONED_FLOAT_VALUE_VEC3);
-        actualValue = mVehicleNetwork.getZonedFloatVectorProperty(
-                CUSTOM_PROPERTY_ZONED_FLOAT_VEC3,
-                VehicleZone.VEHICLE_ZONE_ROW_1_LEFT);
-        assertArrayEquals(ZONED_FLOAT_VALUE_VEC3, actualValue);
-    }
-
-    public void testCustomFloatVecProperties() {
-        final float[] FLOAT_VALUE = new float[] {30.1f, 40.3f};
-
-        mVehicleNetwork.startMocking(mVehicleHalMock);
-
-        float[] actualValue = mVehicleNetwork.getFloatVectorProperty(
-                CUSTOM_PROPERTY_FLOAT_VEC2);
-        // Verify the default values before calling setProperty.
-        assertArrayEquals(new float[2], actualValue);
-        mVehicleNetwork.setFloatVectorProperty(CUSTOM_PROPERTY_FLOAT_VEC2, FLOAT_VALUE);
-        actualValue = mVehicleNetwork.getFloatVectorProperty(
-                CUSTOM_PROPERTY_FLOAT_VEC2);
-        assertArrayEquals(FLOAT_VALUE, actualValue);
-    }
-
-    public void testCustomIntVecProperties() {
-        final int[] INT32_VALUE = new int[] {30, 40};
-
-        mVehicleNetwork.startMocking(mVehicleHalMock);
-
-        int[] actualValue = mVehicleNetwork.getIntVectorProperty(
-                CUSTOM_PROPERTY_INT32_VEC2);
-        // Verify the default values before calling setProperty.
-        assertArrayEquals(new int[2], actualValue);
-        mVehicleNetwork.setIntVectorProperty(CUSTOM_PROPERTY_INT32_VEC2, INT32_VALUE);
-        actualValue = mVehicleNetwork.getIntVectorProperty(
-                CUSTOM_PROPERTY_INT32_VEC2);
-        assertArrayEquals(INT32_VALUE, actualValue);
-    }
-
-    public void testGlobalErrorListening() throws Exception {
-        mVehicleNetwork.startErrorListening();
-        mVehicleNetwork.startMocking(mVehicleHalMock);
-        final int ERROR_CODE = 0x1;
-        final int ERROR_OPERATION = 0x10;
-        mVehicleNetwork.injectHalError(ERROR_CODE, 0, ERROR_OPERATION);
-        assertTrue(mListener.waitForHalErrorAndAssert(TIMEOUT_MS, ERROR_CODE, 0, ERROR_OPERATION));
-        mVehicleNetwork.injectHalError(ERROR_CODE, CUSTOM_PROPERTY_INT32, ERROR_OPERATION);
-        assertTrue(mListener.waitForHalErrorAndAssert(TIMEOUT_MS,
-                ERROR_CODE, CUSTOM_PROPERTY_INT32, ERROR_OPERATION));
-        mVehicleNetwork.stopMocking();
-        mVehicleNetwork.stopErrorListening();
-    }
-
-    public void testPropertyErrorListening() throws Exception {
-        mVehicleNetwork.startMocking(mVehicleHalMock);
-        mVehicleNetwork.subscribe(CUSTOM_PROPERTY_INT32, 0);
-        final int ERROR_CODE = 0x1;
-        final int ERROR_OPERATION = 0x10;
-        mVehicleNetwork.injectHalError(ERROR_CODE, CUSTOM_PROPERTY_INT32, ERROR_OPERATION);
-        assertTrue(mListener.waitForHalErrorAndAssert(TIMEOUT_MS,
-                ERROR_CODE, CUSTOM_PROPERTY_INT32, ERROR_OPERATION));
-        mVehicleNetwork.unsubscribe(CUSTOM_PROPERTY_INT32);
-        mVehicleNetwork.stopMocking();
-    }
-
-    public void testSubscribe() throws Exception {
-        final int PROPERTY = CUSTOM_PROPERTY_ZONED_INT32_VEC3;
-        final int ZONE = VehicleZone.VEHICLE_ZONE_ROW_1_LEFT;
-        final int[] VALUES = new int[] {10, 20, 30};
-        mVehicleNetwork.startMocking(mVehicleHalMock);
-        mVehicleNetwork.subscribe(PROPERTY, 0, ZONE);
-        VehiclePropValue value = VehiclePropValueUtil.createZonedIntVectorValue(
-                PROPERTY, ZONE, VALUES, 0);
-        mVehicleNetwork.injectEvent(value);
-        assertTrue(mListener.waitForEvent(TIMEOUT_MS, value));
-        mVehicleNetwork.unsubscribe(PROPERTY);
-    }
-
-    public void testSubscribe_OnPropertySet() throws Exception {
-        final int PROPERTY = CUSTOM_PROPERTY_ZONED_INT32_VEC3;
-        final int ZONE = VehicleZone.VEHICLE_ZONE_ROW_1_LEFT;
-        final int[] VALUES = new int[] {10, 20, 30};
-        mVehicleNetwork.startMocking(mVehicleHalMock);
-        mVehicleNetwork.subscribe(PROPERTY, 0, ZONE, SubscribeFlags.SET_CALL);
-
-        mVehicleNetwork.setZonedIntVectorProperty(PROPERTY, ZONE, VALUES);
-
-        VehiclePropValue expectedValue = VehiclePropValueUtil.createZonedIntVectorValue(
-                PROPERTY, ZONE, VALUES, 0);
-
-        assertTrue(mListener.waitForOnPropertySet(TIMEOUT_MS, expectedValue));
-
-        mVehicleNetwork.injectEvent(expectedValue);
-        // Not subscribed to HAL events. No notifications expected here.
-        assertFalse(mListener.waitForEvent(TIMEOUT_MS, expectedValue));
-
-        mVehicleNetwork.unsubscribe(PROPERTY);
-    }
-
-    public void testSubscribe_HalEventAndOnPropertySet() throws Exception {
-        final int PROPERTY = CUSTOM_PROPERTY_ZONED_INT32_VEC3;
-        final int ZONE = VehicleZone.VEHICLE_ZONE_ROW_1_LEFT;
-        final int[] VALUES = new int[] {10, 20, 30};
-        mVehicleNetwork.startMocking(mVehicleHalMock);
-        mVehicleNetwork.subscribe(PROPERTY, 0, ZONE,
-                SubscribeFlags.SET_CALL | SubscribeFlags.HAL_EVENT);
-
-        mVehicleNetwork.setZonedIntVectorProperty(PROPERTY, ZONE, VALUES);
-
-        VehiclePropValue expectedValue = VehiclePropValueUtil.createZonedIntVectorValue(
-                PROPERTY, ZONE, VALUES, 0);
-
-        assertTrue(mListener.waitForOnPropertySet(TIMEOUT_MS, expectedValue));
-
-        mVehicleNetwork.injectEvent(expectedValue);
-        assertTrue(mListener.waitForEvent(TIMEOUT_MS, expectedValue));
-
-        mVehicleNetwork.unsubscribe(PROPERTY);
-    }
-
-    public void testGetPropertyFailsForCustom() {
-        try {
-            mVehicleNetwork.getProperty(CUSTOM_PROPERTY_INT32);
-            fail();
-        } catch (IllegalArgumentException expected) {
-            // Expected.
-        }
-    }
-
-    private void assertArrayEquals(int[] expected, int[] actual) {
-        assertEquals(Arrays.toString(expected), Arrays.toString(actual));
-    }
-
-    private void assertArrayEquals(float[] expected, float[] actual) {
-        assertEquals(Arrays.toString(expected), Arrays.toString(actual));
-    }
-
-    private class EventListener implements VehicleNetworkListener {
-        boolean mInMocking;
-        int mErrorCode;
-        int mErrorProperty;
-        int mErrorOperation;
-        VehiclePropValues mValuesReceived;
-        VehiclePropValue mPropertySetValue;
-
-        private final Semaphore mRestartWait = new Semaphore(0);
-        private final Semaphore mErrorWait = new Semaphore(0);
-        private final Semaphore mEventWait = new Semaphore(0);
-        private final Semaphore mOnPropertySetWait = new Semaphore(0);
-
-        @Override
-        public void onVehicleNetworkEvents(VehiclePropValues values) {
-            Log.i(TAG, "onVehicleNetworkEvents");
-            mValuesReceived = values;
-            mEventWait.release();
-        }
-
-        @Override
-        public void onHalError(int errorCode, int property, int operation) {
-            mErrorCode = errorCode;
-            mErrorProperty = property;
-            mErrorOperation = operation;
-            mErrorWait.release();
-        }
-
-        public boolean waitForHalErrorAndAssert(long timeoutMs, int expectedErrorCode,
-                int expectedErrorProperty, int expectedErrorOperation) throws Exception {
-            if (!mErrorWait.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) {
-                return false;
-            }
-            assertEquals(expectedErrorCode, mErrorCode);
-            assertEquals(expectedErrorProperty, mErrorProperty);
-            assertEquals(expectedErrorOperation, mErrorOperation);
-            return true;
-        }
-
-        @Override
-        public void onHalRestart(boolean inMocking) {
-            mInMocking = inMocking;
-            mRestartWait.release();
-        }
-
-        @Override
-        public void onPropertySet(VehiclePropValue value) {
-            mPropertySetValue = value;
-            mOnPropertySetWait.release();
-        }
-
-        public boolean waitForHalRestartAndAssert(long timeoutMs, boolean expectedInMocking)
-                throws Exception {
-            if (!mRestartWait.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) {
-                return false;
-            }
-            assertEquals(expectedInMocking, mInMocking);
-            return true;
-        }
-
-        public boolean waitForEvent(long timeoutMs, VehiclePropValue expected)
-                throws InterruptedException {
-            if (!mEventWait.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) {
-                Log.w(TAG, "Timed out waiting for event.");
-                return false;
-            }
-            assertEquals(1, mValuesReceived.getValuesCount());
-            assertEquals(VehiclePropValueUtil.toString(expected),
-                    VehiclePropValueUtil.toString(mValuesReceived.getValues(0)));
-            return true;
-        }
-
-        public boolean waitForOnPropertySet(long timeoutMs, VehiclePropValue expected)
-                throws InterruptedException {
-            if (!mOnPropertySetWait.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS)) {
-                Log.w(TAG, "Timed out waiting for onPropertySet.");
-                return false;
-            }
-            assertEquals(VehiclePropValueUtil.toString(expected),
-                    VehiclePropValueUtil.toString(mPropertySetValue));
-            return true;
-        }
-    }
-
-    private interface VehiclePropertyHandler {
-        void onPropertySet(VehiclePropValue value);
-        VehiclePropValue onPropertyGet(VehiclePropValue property);
-        void onPropertySubscribe(int property, float sampleRate, int zones);
-        void onPropertyUnsubscribe(int property);
-    }
-
-    private class VehicleHalMock implements VehicleNetworkHalMock {
-        private LinkedList<VehiclePropConfig> mConfigs = new LinkedList<>();
-        private HashMap<Integer, VehiclePropertyHandler> mHandlers = new HashMap<>();
-
-        public synchronized void registerProperty(VehiclePropConfig config,
-                VehiclePropertyHandler handler) {
-            int property = config.getProp();
-            mConfigs.add(config);
-            mHandlers.put(property, handler);
-        }
-
-        @Override
-        public synchronized VehiclePropConfigs onListProperties() {
-            Log.i(TAG, "onListProperties, num properties:" + mConfigs.size());
-            VehiclePropConfigs configs =
-                    VehiclePropConfigs.newBuilder().addAllConfigs(mConfigs).build();
-            return configs;
-        }
-
-        @Override
-        public void onPropertySet(VehiclePropValue value) {
-            int property = value.getProp();
-            VehiclePropertyHandler handler = getPropertyHandler(property);
-            if (handler == null) {
-                fail("onPropertySet for unknown property " + Integer.toHexString(property));
-            }
-            handler.onPropertySet(value);
-        }
-
-        @Override
-        public VehiclePropValue onPropertyGet(VehiclePropValue value) {
-            int property = value.getProp();
-            VehiclePropertyHandler handler = getPropertyHandler(property);
-            if (handler == null) {
-                fail("onPropertyGet for unknown property " + Integer.toHexString(property));
-            }
-            VehiclePropValue propValue = handler.onPropertyGet(value);
-            return propValue;
-        }
-
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-            VehiclePropertyHandler handler = getPropertyHandler(property);
-            if (handler == null) {
-                fail("onPropertySubscribe for unknown property " + Integer.toHexString(property));
-            }
-            handler.onPropertySubscribe(property, sampleRate, zones);
-        }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) {
-            VehiclePropertyHandler handler = getPropertyHandler(property);
-            if (handler == null) {
-                fail("onPropertyUnsubscribe for unknown property " + Integer.toHexString(property));
-            }
-            handler.onPropertyUnsubscribe(property);
-        }
-
-        public synchronized VehiclePropertyHandler getPropertyHandler(int property) {
-            return mHandlers.get(property);
-        }
-    }
-
-    private class DefaultVehiclePropertyHandler implements VehiclePropertyHandler {
-        private Map<Integer, VehiclePropValue> mZoneValueMap = new HashMap<>();
-
-        DefaultVehiclePropertyHandler(VehiclePropValue initialValue) {
-            setValue(initialValue);
-        }
-
-        @Override
-        public void onPropertySet(VehiclePropValue value) {
-            setValue(value);
-        }
-
-        @Override
-        public synchronized VehiclePropValue onPropertyGet(VehiclePropValue property) {
-            int zone = property.getZone();
-            VehiclePropValue value = mZoneValueMap.get(zone);
-            if (value == null) {
-                Log.w(TAG, "Property not found: " + property.getProp() + ", zone: " + zone);
-            }
-            return value;
-        }
-
-        @Override
-        public void onPropertySubscribe(int property, float sampleRate, int zones) {
-            Log.i(TAG, "Property subscribed:0x" + Integer.toHexString(property) +
-                    " zones:0x" + Integer.toHexString(zones));
-        }
-
-        @Override
-        public void onPropertyUnsubscribe(int property) {
-        }
-
-        private void setValue(VehiclePropValue value) {
-            mZoneValueMap.put(value.getZone(), VehiclePropValue.newBuilder(value).build());
-        }
-    }
-}
diff --git a/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTest.java b/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTest.java
deleted file mode 100644
index 6ec9e54..0000000
--- a/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTest.java
+++ /dev/null
@@ -1,245 +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.vehiclenetwork.libtest;
-
-import android.os.HandlerThread;
-import android.os.SystemClock;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.util.ArraySet;
-import android.util.Log;
-
-import com.android.car.vehiclenetwork.VehicleNetwork;
-import com.android.car.vehiclenetwork.VehicleNetwork.VehicleNetworkListener;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfigs;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValues;
-import com.android.car.vehiclenetwork.VehicleNetworkProtoUtil;
-
-import java.util.LinkedList;
-
-@MediumTest
-public class VehicleNetworkTest extends AndroidTestCase {
-    private static final String TAG = VehicleNetworkTest.class.getSimpleName();
-    private static final long TIMEOUT_MS = 2000;
-
-    private final HandlerThread mHandlerThread = new HandlerThread(
-            VehicleNetworkTest.class.getSimpleName());
-    private VehicleNetwork mVehicleNetwork;
-    private final TestListener mListener = new TestListener();
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mHandlerThread.start();
-        mVehicleNetwork = VehicleNetwork.createVehicleNetwork(mListener,
-                mHandlerThread.getLooper());
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        mHandlerThread.quit();
-    }
-
-    public void testListProperties() {
-        VehiclePropConfigs configs = mVehicleNetwork.listProperties();
-        assertNotNull(configs);
-        assertTrue(configs.getConfigsCount() > 0);
-        Log.i(TAG, "got configs:" + configs.getConfigsCount());
-        for (VehiclePropConfig config : configs.getConfigsList()) {
-            Log.i(TAG, VehicleNetworkProtoUtil.VehiclePropConfigToString(config));
-        }
-
-        int oneProperty = configs.getConfigs(0).getProp();
-        VehiclePropConfigs configs2 = mVehicleNetwork.listProperties(oneProperty);
-        assertEquals(1, configs2.getConfigsCount());
-        assertTrue(VehicleNetworkProtoUtil.VehiclePropConfigEquals(
-                configs.getConfigs(0), configs2.getConfigs(0)));
-
-        VehiclePropConfigs configs3 = mVehicleNetwork.listProperties(-1);
-        assertNull(configs3);
-    }
-
-    public void testGetProperty() {
-        try {
-            VehiclePropValue value = mVehicleNetwork.getProperty(-1);
-            fail();
-        } catch (IllegalArgumentException e) {
-            // expected
-        }
-        VehiclePropConfigs configs = mVehicleNetwork.listProperties();
-        assertNotNull(configs);
-        assertTrue(configs.getConfigsCount() > 0);
-        Log.i(TAG, "got configs:" + configs.getConfigsCount());
-        for (VehiclePropConfig config : configs.getConfigsList()) {
-            if ((config.getAccess() & VehiclePropAccess.VEHICLE_PROP_ACCESS_READ) != 0) {
-                if (config.getProp() == VehicleNetworkConsts.VEHICLE_PROPERTY_RADIO_PRESET) {
-                    continue;
-                }
-                if (config.getProp() >= VehicleNetworkConsts.VEHICLE_PROPERTY_INTERNAL_START &&
-                        config.getProp() <= VehicleNetworkConsts.VEHICLE_PROPERTY_INTERNAL_END) {
-                    // internal property requires write to read
-                    VehiclePropValue v = VehicleNetworkTestUtil.createDummyValue(config.getProp(),
-                            config.getValueType());
-                    mVehicleNetwork.setProperty(v);
-                }
-                VehiclePropValue value = mVehicleNetwork.getProperty(config.getProp());
-                assertEquals(config.getProp(), value.getProp());
-                assertEquals(config.getValueType(), value.getValueType());
-                Log.i(TAG, " got property:" +
-                        VehicleNetworkProtoUtil.VehiclePropValueToString(value));
-            }
-        }
-    }
-
-    public void testSetProperty() {
-        try {
-            VehiclePropValue value = VehiclePropValue.newBuilder().
-                setProp(-1).
-                setValueType(VehicleValueType.VEHICLE_VALUE_TYPE_INT32).
-                addInt32Values(0).
-                build();
-            mVehicleNetwork.setProperty(value);
-            fail();
-        } catch (SecurityException e) {
-            // expected
-        }
-        VehiclePropConfigs configs = mVehicleNetwork.listProperties();
-        assertNotNull(configs);
-        assertTrue(configs.getConfigsCount() > 0);
-        Log.i(TAG, "got configs:" + configs.getConfigsCount());
-        for (VehiclePropConfig config : configs.getConfigsList()) {
-            if ((config.getAccess() & VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE) != 0) {
-                if (config.getValueType() == VehicleValueType.VEHICLE_VALUE_TYPE_INT32) {
-                    VehiclePropValue value = VehiclePropValue.newBuilder().
-                            setProp(config.getProp()).
-                            setValueType(config.getValueType()).
-                            addInt32Values(0).
-                            build();
-                    mVehicleNetwork.setProperty(value);
-                }
-            } else {
-                try {
-                    VehiclePropValue value = VehiclePropValue.newBuilder().
-                            setProp(config.getProp()).
-                            setValueType(config.getValueType()).
-                            build();
-                    mVehicleNetwork.setProperty(value);
-                    fail();
-                } catch (IllegalArgumentException e) {
-                    // expected
-                }
-            }
-        }
-    }
-
-    public void testSubscribe() throws Exception {
-        try {
-            mVehicleNetwork.subscribe(-1, 0);
-            fail();
-        } catch (SecurityException e) {
-            //expected
-        }
-        VehiclePropConfigs configs = mVehicleNetwork.listProperties();
-        assertNotNull(configs);
-        assertTrue(configs.getConfigsCount() > 0);
-        Log.i(TAG, "got configs:" + configs.getConfigsCount());
-        LinkedList<Integer> subscribedProperties = new LinkedList<Integer>();
-        for (VehiclePropConfig config : configs.getConfigsList()) {
-            if (config.getChangeMode() == VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_STATIC) {
-                // cannot subscribe
-                try {
-                    mVehicleNetwork.subscribe(config.getProp(), config.getSampleRateMin());
-                    fail();
-                } catch (IllegalArgumentException e) {
-                    //expected
-                }
-            } else if ((config.getAccess() & VehiclePropAccess.VEHICLE_PROP_ACCESS_READ) != 0){
-                mVehicleNetwork.subscribe(config.getProp(), config.getSampleRateMin());
-                subscribedProperties.add(config.getProp());
-                if (config.getProp() >= VehicleNetworkConsts.VEHICLE_PROPERTY_INTERNAL_START &&
-                        config.getProp() <= VehicleNetworkConsts.VEHICLE_PROPERTY_INTERNAL_END) {
-                    // internal property requires write to get notification
-                    VehiclePropValue v = VehicleNetworkTestUtil.createDummyValue(config.getProp(),
-                            config.getValueType());
-                    mVehicleNetwork.setProperty(v);
-                }
-            }
-        }
-        // now confirm event
-        for (Integer prop : subscribedProperties) {
-            mListener.waitForEvent(prop, TIMEOUT_MS);
-            mVehicleNetwork.unsubscribe(prop);
-        }
-        // wait for already patched events to go away.
-        Thread.sleep(1000);
-        mListener.resetEventRecord();
-        Thread.sleep(2000);
-        assertEquals(0, mListener.getActiveEventsCount());
-    }
-
-    private class TestListener implements VehicleNetworkListener {
-        private final ArraySet<Integer> mEventRecord = new ArraySet<Integer>();
-
-        @Override
-        public void onVehicleNetworkEvents(VehiclePropValues values) {
-            for (VehiclePropValue value : values.getValuesList()) {
-                Log.i(TAG, "event " + VehicleNetworkProtoUtil.VehiclePropValueToString(value));
-                synchronized (this) {
-                    mEventRecord.add(value.getProp());
-                    notifyAll();
-                }
-            }
-        }
-
-        @Override
-        public void onHalError(int errorCode, int property, int operation) {
-        }
-
-        @Override
-        public void onHalRestart(boolean inMocking) {
-        }
-
-        @Override
-        public void onPropertySet(VehiclePropValue value) { }
-
-        private synchronized boolean waitForEvent(Integer prop, long timeoutMs)
-                throws InterruptedException {
-            long now = SystemClock.elapsedRealtime();
-            long end = now + timeoutMs;
-            long timeToWait = end - now;
-            while (timeToWait > 0 && !mEventRecord.contains(prop)) {
-                wait(timeToWait);
-                timeToWait = end - SystemClock.elapsedRealtime();
-            }
-            return mEventRecord.contains(prop);
-        }
-
-        private synchronized void resetEventRecord() {
-            mEventRecord.clear();
-        }
-
-        private synchronized int getActiveEventsCount() {
-            return mEventRecord.size();
-        }
-    }
-}
diff --git a/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTestUtil.java b/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTestUtil.java
deleted file mode 100644
index 91c155b..0000000
--- a/tests/libvehiclenetwork-java-test/src/com/android/car/vehiclenetwork/libtest/VehicleNetworkTestUtil.java
+++ /dev/null
@@ -1,67 +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.vehiclenetwork.libtest;
-
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.google.protobuf.ByteString;
-
-public class VehicleNetworkTestUtil {
-
-    public static VehiclePropValue createDummyValue(int prop, int valueType) {
-        VehiclePropValue.Builder builder = VehiclePropValue.newBuilder().
-                setProp(prop).
-                setValueType(valueType);
-        switch (valueType) {
-            case VehicleValueType.VEHICLE_VALUE_TYPE_STRING:
-                builder.setStringValue("");
-                break;
-            case VehicleValueType.VEHICLE_VALUE_TYPE_BYTES:
-                builder.setBytesValue(ByteString.copyFrom(new byte[1]));
-                break;
-            case VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN:
-                builder.addInt32Values(0);
-                break;
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN:
-                builder.setZone(0).addInt32Values(0);
-            case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT:
-                builder.setZone(0).addFloatValues(0f);
-            case VehicleValueType.VEHICLE_VALUE_TYPE_INT64:
-                builder.setInt64Value(0);
-                break;
-            case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC2:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC3:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC4: {
-                int n = valueType - VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT + 1;
-                for (int i = 0; i < n; i++) {
-                    builder.addFloatValues(0f);
-                }
-            } break;
-            case VehicleValueType.VEHICLE_VALUE_TYPE_INT32:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC3:
-            case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4: {
-                int n = valueType - VehicleValueType.VEHICLE_VALUE_TYPE_INT32 + 1;
-                for (int i = 0; i < n; i++) {
-                    builder.addInt32Values(0);
-                }
-            } break;
-        }
-        return builder.build();
-    }
-}
diff --git a/tests/libvehiclenetwork-java-test/vendor_vns_policy.xml b/tests/libvehiclenetwork-java-test/vendor_vns_policy.xml
deleted file mode 100644
index 8d48fdb..0000000
--- a/tests/libvehiclenetwork-java-test/vendor_vns_policy.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<ALLOW>
-  <PROPERTY name="CUSTOM_PROPERTY_INT32" value = "0x70000000">
-    <UID name="AID_SYSTEM" access="rw" value="1000"/>
-  </PROPERTY>
-
-  <PROPERTY name="CUSTOM_PROPERTY_ZONED_INT32" value = "0x70000001">
-    <UID name="AID_SYSTEM" access="rw" value="1000"/>
-  </PROPERTY>
-
-  <PROPERTY name="CUSTOM_PROPERTY_ZONED_INT32_VEC2" value = "0x70000002">
-    <UID name="AID_SYSTEM" access="rw" value="1000"/>
-  </PROPERTY>
-
-  <PROPERTY name="CUSTOM_PROPERTY_ZONED_INT32_VEC3" value = "0x70000003">
-    <UID name="AID_SYSTEM" access="rw" value="1000"/>
-  </PROPERTY>
-
-  <PROPERTY name="CUSTOM_PROPERTY_ZONED_FLOAT_VEC2" value = "0x70000004">
-    <UID name="AID_SYSTEM" access="rw" value="1000"/>
-  </PROPERTY>
-
-  <PROPERTY name="CUSTOM_PROPERTY_ZONED_FLOAT_VEC3" value = "0x70000005">
-    <UID name="AID_SYSTEM" access="rw" value="1000"/>
-  </PROPERTY>
-
-  <PROPERTY name="CUSTOM_PROPERTY_FLOAT_VEC2" value = "0x70000006">
-    <UID name="AID_SYSTEM" access="rw" value="1000"/>
-  </PROPERTY>
-
-  <PROPERTY name="CUSTOM_PROPERTY_INT32_VEC2" value = "0x70000007">
-    <UID name="AID_SYSTEM" access="rw" value="1000"/>
-  </PROPERTY>
-</ALLOW>
-
diff --git a/tests/vehicle_hal_test/Android.mk b/tests/vehicle_hal_test/Android.mk
deleted file mode 100644
index 77bc6f8..0000000
--- a/tests/vehicle_hal_test/Android.mk
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright (C) 2016 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.
-#
-#
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := AndroidVehicleHalTests
-
-# for system|priviledged permission.
-LOCAL_CERTIFICATE := platform
-
-LOCAL_MODULE_TAGS := tests
-
-# When built explicitly put it in the data partition
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-
-LOCAL_PROGUARD_ENABLED := disabled
-
-LOCAL_STATIC_JAVA_LIBRARIES := libvehiclenetwork-java
-
-LOCAL_JAVA_LIBRARIES := android.car android.test.runner
-
-include $(BUILD_PACKAGE)
diff --git a/tests/vehicle_hal_test/AndroidManifest.xml b/tests/vehicle_hal_test/AndroidManifest.xml
deleted file mode 100644
index 5fbb62d..0000000
--- a/tests/vehicle_hal_test/AndroidManifest.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
-        package="com.android.car.vehiclenetwork.haltest"
-        android:sharedUserId="android.uid.system" >
-
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
-            android:targetPackage="com.android.car.vehiclenetwork.haltest"
-            android:label="Tests for vehicle hal using vehicle network service"/>
-
-    <application android:label="VehicleHalTest">
-        <uses-library android:name="android.test.runner" />
-        <activity android:name=".TestCarProxyActivity">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-            </intent-filter>
-        </activity>
-    </application>
-</manifest>
diff --git a/tests/vehicle_hal_test/src/com/android/car/vehiclenetwork/haltest/HvacVnsHalTest.java b/tests/vehicle_hal_test/src/com/android/car/vehiclenetwork/haltest/HvacVnsHalTest.java
deleted file mode 100644
index 6111746..0000000
--- a/tests/vehicle_hal_test/src/com/android/car/vehiclenetwork/haltest/HvacVnsHalTest.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (C) 2016 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.vehiclenetwork.haltest;
-
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_AC_ON;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_DEFROSTER;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_FAN_DIRECTION;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_FAN_SPEED;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_MAX_AC_ON;
-import static com.android.car.vehiclenetwork.VehicleNetworkConsts.VEHICLE_PROPERTY_HVAC_RECIRC_ON;
-
-import android.util.Log;
-
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleHvacFanDirection;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-
-/**
- * Test HVAC vehicle HAL using vehicle network service.
- */
-public class HvacVnsHalTest extends VnsHalBaseTestCase {
-
-    public void testAcProperty() throws Exception {
-        int propertyId = VEHICLE_PROPERTY_HVAC_AC_ON;
-        if (!isPropertyAvailable(propertyId)) {
-            return;
-        }
-
-        VehiclePropConfig config = mConfigsMap.get(propertyId);
-        assertEquals(VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN, config.getValueType());
-        assertEquals(VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE, config.getAccess());
-
-        int zone = getFirstZoneForProperty(propertyId);
-        setPropertyAndVerify(propertyId, zone, false);
-
-        mVehicleNetwork.subscribe(propertyId, 0, 0);
-        mListener.reset();
-        mListener.addExpectedValues(propertyId, zone, true);
-        setPropertyAndVerify(propertyId, zone, true);
-        mListener.waitAndVerifyValues();
-    }
-
-    public void testRecirculateProperty() {
-        int propertyId = VEHICLE_PROPERTY_HVAC_RECIRC_ON;
-        if (!isPropertyAvailable(propertyId)) {
-            return;
-        }
-        VehiclePropConfig config = mConfigsMap.get(propertyId);
-        assertEquals(VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN, config.getValueType());
-        assertEquals(VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE, config.getAccess());
-
-        // Verify subsequent calls ends-up with right value.
-        mVehicleNetwork.setBooleanProperty(propertyId, false);
-        mVehicleNetwork.setBooleanProperty(propertyId, true);
-        mVehicleNetwork.setBooleanProperty(propertyId, false);
-        mVehicleNetwork.setBooleanProperty(propertyId, true);
-        verifyValue(propertyId, true);
-
-        // Verify subsequent calls ends-up with right value.
-        mVehicleNetwork.setBooleanProperty(propertyId, false);
-        mVehicleNetwork.setBooleanProperty(propertyId, true);
-        mVehicleNetwork.setBooleanProperty(propertyId, false);
-        verifyValue(propertyId, false);
-
-        setPropertyAndVerify(propertyId, false);
-        setPropertyAndVerify(propertyId, true);
-        setPropertyAndVerify(propertyId, false);
-    }
-
-    public void testMaxAcProperty() throws Exception {
-        if (!isPropertyAvailable(
-                VEHICLE_PROPERTY_HVAC_MAX_AC_ON,
-                VEHICLE_PROPERTY_HVAC_AC_ON,
-                VEHICLE_PROPERTY_HVAC_RECIRC_ON)) {
-            return;
-        }
-        VehiclePropConfig config = mConfigsMap.get(VEHICLE_PROPERTY_HVAC_MAX_AC_ON);
-        assertEquals(VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN, config.getValueType());
-        assertEquals(VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE, config.getAccess());
-
-        int acZone = getFirstZoneForProperty(VEHICLE_PROPERTY_HVAC_AC_ON);
-
-        // Turn off related properties.
-        setPropertyAndVerify(VEHICLE_PROPERTY_HVAC_MAX_AC_ON, false);
-        setPropertyAndVerify(VEHICLE_PROPERTY_HVAC_AC_ON, acZone, false);
-        setPropertyAndVerify(VEHICLE_PROPERTY_HVAC_RECIRC_ON, false);
-
-        // Now turning max A/C and verify that other related HVAC props turned on.
-        mVehicleNetwork.subscribe(VEHICLE_PROPERTY_HVAC_AC_ON, 0f, acZone);
-        mVehicleNetwork.subscribe(VEHICLE_PROPERTY_HVAC_RECIRC_ON, 0f);
-        mListener.reset();
-        mListener.addExpectedValues(VEHICLE_PROPERTY_HVAC_AC_ON, acZone, true);
-        mListener.addExpectedValues(VEHICLE_PROPERTY_HVAC_RECIRC_ON, 0, true);
-        setPropertyAndVerify(VEHICLE_PROPERTY_HVAC_MAX_AC_ON, true);
-        verifyValue(VEHICLE_PROPERTY_HVAC_AC_ON, acZone, true);
-        verifyValue(VEHICLE_PROPERTY_HVAC_RECIRC_ON, true);
-        mListener.waitAndVerifyValues();
-
-        // When max A/C turned off, A/C should remain to be turned on, but circulation should has
-        // the value it had before turning max A/C on, which if OFF in this case.
-        setPropertyAndVerify(VEHICLE_PROPERTY_HVAC_MAX_AC_ON, false);
-        verifyValue(VEHICLE_PROPERTY_HVAC_AC_ON, acZone, true);
-        verifyValue(VEHICLE_PROPERTY_HVAC_RECIRC_ON, false);
-    }
-
-    public void testDefroster() {
-        final int propertyId = VEHICLE_PROPERTY_HVAC_DEFROSTER;
-        if (!isPropertyAvailable(propertyId)) {
-            return;
-        }
-
-        VehiclePropConfig config = mConfigsMap.get(propertyId);
-        assertEquals(VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN, config.getValueType());
-        assertEquals(VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE, config.getAccess());
-
-        iterateOnZones(config, (message, zone, minValue, maxValue) -> {
-            Log.i(TAG, "testDefroster, " + message);
-            setPropertyAndVerify(propertyId, zone, false);
-            setPropertyAndVerify(propertyId, zone, true);
-        });
-    }
-
-    public void testFanSpeed() throws Exception {
-        if (!isPropertyAvailable(VEHICLE_PROPERTY_HVAC_FAN_SPEED)) {
-            return;
-        }
-
-        VehiclePropConfig config = mConfigsMap.get(VEHICLE_PROPERTY_HVAC_FAN_SPEED);
-        assertEquals(VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32, config.getValueType());
-        assertEquals(VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE, config.getAccess());
-
-        verifyIntZonedProperty(VEHICLE_PROPERTY_HVAC_FAN_SPEED);
-    }
-
-    public void testFanDirection() throws Exception {
-        final int propertyId = VEHICLE_PROPERTY_HVAC_FAN_DIRECTION;
-
-        if (!isPropertyAvailable(propertyId)) {
-            return;
-        }
-
-        VehiclePropConfig config = mConfigsMap.get(propertyId);
-        assertEquals(VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32, config.getValueType());
-        assertEquals(VehiclePropAccess.VEHICLE_PROP_ACCESS_READ_WRITE, config.getAccess());
-
-        // Assert setting edge-case values.
-        iterateOnZones(config, (message, zone, minValue, maxValue) -> {
-            setPropertyAndVerify(message, propertyId, zone, minValue);
-            setPropertyAndVerify(message, propertyId, zone, maxValue);
-        });
-
-        iterateOnZones(config, ((message, zone, minValue, maxValue)
-                -> setPropertyAndVerify(message, propertyId, zone,
-                        VehicleHvacFanDirection.VEHICLE_HVAC_FAN_DIRECTION_DEFROST_AND_FLOOR)));
-    }
-}
diff --git a/tests/vehicle_hal_test/src/com/android/car/vehiclenetwork/haltest/RecordingVehicleNetworkListener.java b/tests/vehicle_hal_test/src/com/android/car/vehiclenetwork/haltest/RecordingVehicleNetworkListener.java
deleted file mode 100644
index 282d9e9..0000000
--- a/tests/vehicle_hal_test/src/com/android/car/vehiclenetwork/haltest/RecordingVehicleNetworkListener.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (C) 2016 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.vehiclenetwork.haltest;
-
-import static java.lang.Integer.toHexString;
-import static junit.framework.Assert.assertTrue;
-
-import android.util.Log;
-
-import com.android.car.vehiclenetwork.VehicleNetwork.VehicleNetworkListener;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValues;
-import com.android.car.vehiclenetwork.VehicleNetworkProtoUtil;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-
-/**
- * This class must be used in testing environment only. Here's an example of usage:
- * <ul>
- *     <li>listener.reset();
- *     <li>listener.addExpectedValues(myPropertyId, myZone, 10, 20, 30)
- *     <li>... set values through VehicleNetworkService ...
- *     <li>listener.waitAndVerifyValues()
- *</ul>
- *
- */
-class RecordingVehicleNetworkListener implements VehicleNetworkListener {
-
-    private final static String TAG = VnsHalBaseTestCase.TAG;
-    private final static int EVENTS_WAIT_TIMEOUT_MS = 2000;
-
-    private final Set<NormalizedValue> mExpectedValues = new HashSet<>();
-    // Using Set here instead of List as we probably shouldn't assert the order event was received.
-    private final Set<NormalizedValue> mRecordedEvents = new HashSet<>();
-
-    synchronized void reset() {
-        mExpectedValues.clear();
-        mRecordedEvents.clear();
-    }
-
-    void addExpectedValues(int propertyId, int zone, Object... values) {
-        for (Object value : values) {
-            mExpectedValues.add(NormalizedValue.createFor(propertyId, zone, value));
-        }
-    }
-
-    /**
-     * Waits for events to come for #EVENTS_WAIT_TIMEOUT_MS milliseconds and asserts that recorded
-     * values match with expected.
-     * */
-    synchronized void waitAndVerifyValues() throws InterruptedException {
-        long currentTime = System.currentTimeMillis();
-        long deadline = currentTime + EVENTS_WAIT_TIMEOUT_MS;
-        while (currentTime < deadline && !isExpectedMatchedRecorded()) {
-            wait(deadline - currentTime);
-            currentTime = System.currentTimeMillis();
-        }
-        assertTrue("Expected values: " + Arrays.toString(mExpectedValues.toArray())
-                        + " doesn't match recorded: " + Arrays.toString(mRecordedEvents.toArray()),
-                isExpectedMatchedRecorded());
-    }
-
-    private boolean isExpectedMatchedRecorded() {
-        for (NormalizedValue expectedValue : mExpectedValues) {
-            if (!mRecordedEvents.contains(expectedValue)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    @Override
-    public void onVehicleNetworkEvents(VehiclePropValues values) {
-        for (VehiclePropValue value : values.getValuesList()) {
-            Log.d(TAG, "onVehicleNetworkEvents, value: "
-                    + VehicleNetworkProtoUtil.VehiclePropValueToString(value));
-
-            synchronized (this) {
-                mRecordedEvents.add(NormalizedValue.createFor(value));
-                notifyAll();
-            }
-        }
-    }
-
-    @Override
-    public void onHalError(int errorCode, int property, int operation) {
-    }
-
-    @Override
-    public void onHalRestart(boolean inMocking) {
-    }
-
-    @Override
-    public void onPropertySet(VehiclePropValue value) {
-    }
-
-    // To be used to compare expected vs recorded values.
-    private static class NormalizedValue {
-        private final int propertyId;
-        private final int zone;
-        private final List<Object> value;
-
-        static NormalizedValue createFor(VehiclePropValue value) {
-            return new NormalizedValue(value.getProp(), value.getZone(), getObjectValue(value));
-        }
-
-        static NormalizedValue createFor(int propertyId, int zone, Object value) {
-            return new NormalizedValue(propertyId, zone, wrapSingleObjectToList(value));
-        }
-
-        // Do not call this ctor directly, use appropriate factory methods to create an object.
-        private NormalizedValue(int propertyId, int zone, List<Object> value) {
-            this.propertyId = propertyId;
-            this.zone = zone;
-            this.value = value;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) {
-                return true;
-            }
-            if (o == null || getClass() != o.getClass()) {
-                return false;
-            }
-            NormalizedValue propValue = (NormalizedValue) o;
-            return propertyId == propValue.propertyId &&
-                    zone == propValue.zone &&
-                    Objects.equals(value, propValue.value);
-        }
-
-        @Override
-        public int hashCode() {
-            return Objects.hash(propertyId, zone, value);
-        }
-
-        @Override
-        public String toString() {
-            return getClass().getSimpleName() + " { "
-                    + "prop: 0x" + toHexString(propertyId)
-                    + ", zone: 0x" + toHexString(zone)
-                    + ", value: " + Arrays.toString(value.toArray())
-                    + " }";
-        }
-
-        private static List<Object> wrapSingleObjectToList(Object value) {
-            if (value instanceof Integer
-                    || value instanceof Float) {
-                List<Object> list = new ArrayList<>(1);
-                list.add(value);
-                return list;
-            } else if (value instanceof Boolean) {
-                List<Object> list = new ArrayList<>(1);
-                list.add((Boolean)value ? 1 : 0);
-                return list;
-            } else if (value instanceof Collection<?>) {
-                return new ArrayList<>((Collection<?>) value);
-            } else {
-                throw new IllegalArgumentException("Unexpected type: " + value);
-            }
-        }
-
-        // Converts any VehiclePropValue to either ArrayList<Integer> or ArrayList<Float>
-        private static List<Object> getObjectValue(VehiclePropValue val) {
-            switch (val.getValueType()) {
-                case VehicleValueType.VEHICLE_VALUE_TYPE_BOOLEAN:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_INT32:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC3:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC4:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC2:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC3:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_INT32_VEC4:
-                    return new ArrayList<>(val.getInt32ValuesList());
-                case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC2:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC3:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_FLOAT_VEC4:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC2:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC3:
-                case VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_FLOAT_VEC4:
-                    return new ArrayList<>(val.getFloatValuesList());
-                default:
-                    throw new IllegalArgumentException("Unexpected type: " + val.getValueType());
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/tests/vehicle_hal_test/src/com/android/car/vehiclenetwork/haltest/VnsHalBaseTestCase.java b/tests/vehicle_hal_test/src/com/android/car/vehiclenetwork/haltest/VnsHalBaseTestCase.java
deleted file mode 100644
index adcc336..0000000
--- a/tests/vehicle_hal_test/src/com/android/car/vehiclenetwork/haltest/VnsHalBaseTestCase.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (C) 2016 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.vehiclenetwork.haltest;
-
-import static java.lang.Integer.toHexString;
-
-import android.car.VehicleZoneUtil;
-import android.os.HandlerThread;
-import android.test.AndroidTestCase;
-import android.util.Log;
-
-import com.android.car.vehiclenetwork.VehicleNetwork;
-import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
-import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropConfig;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Base class for testing vehicle HAL using vehicle network service (VNS).
- */
-public class VnsHalBaseTestCase extends AndroidTestCase {
-
-    protected static final String TAG = "VnsHalTest";
-
-    protected static final int PROP_TIMEOUT_MS = 5000;
-    protected static final int NO_ZONE = -1;
-
-    private final HandlerThread mHandlerThread =
-            new HandlerThread(VnsHalBaseTestCase.class.getSimpleName());
-    protected VehicleNetwork mVehicleNetwork;
-    protected RecordingVehicleNetworkListener mListener;
-
-    protected Map<Integer, VehiclePropConfig> mConfigsMap;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mHandlerThread.start();
-        mListener = new RecordingVehicleNetworkListener();
-        mVehicleNetwork = VehicleNetwork.createVehicleNetwork(mListener,
-                mHandlerThread.getLooper());
-        setupConfigsMap();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        mHandlerThread.quit();
-    }
-
-    private void setupConfigsMap() {
-        mConfigsMap = new HashMap<>();
-        for (VehiclePropConfig config : mVehicleNetwork.listProperties().getConfigsList()) {
-            mConfigsMap.put(config.getProp(), config);
-        }
-        assertTrue(mConfigsMap.size() > 0);
-    }
-
-    protected boolean isPropertyAvailable(int... properties) {
-        assertTrue(properties.length > 0);
-
-        for (int propertyId : properties) {
-            if (!mConfigsMap.containsKey(propertyId)) {
-                // Property is not supported by vehicle HAL, nothing to test.
-                Log.w(TAG, "Property: 0x" + Integer.toHexString(propertyId)
-                        + " is not available, ignoring...");
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    protected void setPropertyAndVerify(int propertyId, boolean switchOn) {
-        setPropertyAndVerify(propertyId, NO_ZONE, switchOn);
-    }
-
-    protected void setPropertyAndVerify(int propertyId, int zone, boolean switchOn) {
-        int val = switchOn ? 1 : 0;
-
-        if (zone == NO_ZONE) {
-            mVehicleNetwork.setBooleanProperty(propertyId, switchOn);
-        } else {
-            mVehicleNetwork.setZonedBooleanProperty(propertyId, zone, switchOn);
-        }
-        verifyValue(propertyId, zone, val);
-    }
-
-    protected void setPropertyAndVerify(String message, int propertyId, int zone, int value) {
-        if (zone == NO_ZONE) {
-            mVehicleNetwork.setIntProperty(propertyId, value);
-        } else {
-            mVehicleNetwork.setZonedIntProperty(propertyId, zone, value);
-        }
-        verifyValue(message, propertyId, zone, value);
-    }
-
-    protected void verifyValue(int propertyId, boolean val) {
-        verifyValue(propertyId, NO_ZONE, val);
-    }
-
-    protected void verifyValue(int propertyId, int zone, boolean val) {
-        int intVal = val ? 1 : 0;
-        assertEquals(intVal, waitForIntValue(propertyId, zone, intVal));
-    }
-
-    protected void verifyValue(int propertyId, int zone, int val) {
-        assertEquals(val, waitForIntValue(propertyId, zone, val));
-    }
-
-    protected void verifyValue(String message, int propertyId, int zone, int val) {
-        assertEquals(message, val, waitForIntValue(propertyId, zone, val));
-    }
-
-    protected int getFirstZoneForProperty(int propertyId) {
-        return VehicleZoneUtil.getFirstZone(mConfigsMap.get(propertyId).getZones());
-    }
-
-    protected void verifyIntZonedProperty(int propertyId) throws InterruptedException {
-        if (!isPropertyAvailable(propertyId)) {
-            return;
-        }
-
-        VehiclePropConfig config = mConfigsMap.get(propertyId);
-
-        // Assert setting edge-case values.
-        iterateOnZones(config, (message, zone, minValue, maxValue) -> {
-            setPropertyAndVerify(message, propertyId, zone, minValue);
-            setPropertyAndVerify(message, propertyId, zone, maxValue);
-        });
-
-        // Setting out of the range values.
-        iterateOnZones(config, ((message, zone, minValue, maxValue) -> {
-            mVehicleNetwork.setZonedIntProperty(propertyId, zone, minValue - 1);
-            verifyValue(message, propertyId, zone, minValue);
-
-            mVehicleNetwork.setZonedIntProperty(propertyId, zone, maxValue + 20);
-            verifyValue(message, propertyId, zone, maxValue);
-        }));
-
-        // Verify that subsequent SET calls will result in correct value at the end.
-        mVehicleNetwork.subscribe(propertyId, 0f, config.getZones());
-        int zone = VehicleZoneUtil.getFirstZone(config.getZones());
-        int minValue = config.getInt32Mins(0);
-        int maxValue = config.getInt32Maxs(0);
-        int finalValue = (minValue + maxValue) / 2;
-        mListener.reset();
-        // We can only expect to see finalValue in the events as vehicle HAL may batch
-        // set commands and use only last value.
-        mListener.addExpectedValues(propertyId, zone, finalValue);
-        mVehicleNetwork.setZonedIntProperty(propertyId, zone, minValue);
-        mVehicleNetwork.setZonedIntProperty(propertyId, zone, maxValue);
-        mVehicleNetwork.setZonedIntProperty(propertyId, zone, finalValue);
-        verifyValue(propertyId, zone, finalValue);
-        mListener.waitAndVerifyValues();
-        mVehicleNetwork.unsubscribe(propertyId);
-    }
-
-    protected int waitForIntValue(int propertyId, int zone, int expectedValue) {
-        int actualValue = mVehicleNetwork.getZonedIntProperty(propertyId, zone);
-        long deadline = System.currentTimeMillis() + PROP_TIMEOUT_MS;
-
-        while (System.currentTimeMillis() <= deadline && actualValue != expectedValue) {
-            try {
-                Thread.sleep(100);
-            } catch (InterruptedException ex) {
-                throw new RuntimeException(ex);
-            }
-            actualValue = mVehicleNetwork.getZonedIntProperty(propertyId, zone);
-        }
-
-        return actualValue;
-    }
-
-    protected void iterateOnZones(VehiclePropConfig config, IntZonesFunctor f) {
-        int[] zones = VehicleZoneUtil.listAllZones(config.getZones());
-        int zoneIndex = 0;
-        boolean isBooleanType = config.getValueType() ==
-                VehicleValueType.VEHICLE_VALUE_TYPE_ZONED_BOOLEAN;
-
-        for (int zone : zones) {
-            int minValue = isBooleanType ? 0 : config.getInt32Mins(zoneIndex);
-            int maxValue = isBooleanType ? 1 : config.getInt32Maxs(zoneIndex);
-            String message = "PropertyId: 0x" + toHexString(config.getProp())
-                    + ", zone[" + zoneIndex + "]: 0x" + toHexString(zone);
-            f.func(message, zone, minValue, maxValue);
-            zoneIndex++;
-        }
-
-    }
-
-    protected interface IntZonesFunctor {
-        void func(String message, int zone, int minValue, int maxValue);
-    }
-
-
-}
diff --git a/libvehiclenetwork/java/Android.mk b/vehicle-hal-support-lib/Android.mk
similarity index 76%
rename from libvehiclenetwork/java/Android.mk
rename to vehicle-hal-support-lib/Android.mk
index 95e9089..154b4da 100644
--- a/libvehiclenetwork/java/Android.mk
+++ b/vehicle-hal-support-lib/Android.mk
@@ -12,20 +12,17 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-#
 
 LOCAL_PATH:= $(call my-dir)
 
 include $(CLEAR_VARS)
 
-LOCAL_MODULE := libvehiclenetwork-java
+LOCAL_MODULE := vehicle-hal-support-lib
+
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-Iaidl-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    libvehiclenetworkproto-java \
-    libprotobuf-java-lite
-
+LOCAL_STATIC_JAVA_LIBRARIES += android.hardware.vehicle@2.0-java-static
 
 include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/vehicle-hal-support-lib/src/com/android/car/vehiclehal/VehiclePropValueBuilder.java b/vehicle-hal-support-lib/src/com/android/car/vehiclehal/VehiclePropValueBuilder.java
new file mode 100644
index 0000000..f68d7ee
--- /dev/null
+++ b/vehicle-hal-support-lib/src/com/android/car/vehiclehal/VehiclePropValueBuilder.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2016 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.vehiclehal;
+
+import android.annotation.CheckResult;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.os.SystemClock;
+
+/** A builder class for {@link android.hardware.vehicle.V2_0.VehiclePropValue} */
+public class VehiclePropValueBuilder {
+    private final VehiclePropValue mPropValue;
+
+    public static VehiclePropValueBuilder newBuilder(int propId) {
+        return new VehiclePropValueBuilder(propId);
+    }
+
+    public static VehiclePropValueBuilder newBuilder(VehiclePropValue propValue) {
+        return new VehiclePropValueBuilder(propValue);
+    }
+
+    private VehiclePropValueBuilder(int propId) {
+        mPropValue = new VehiclePropValue();
+        mPropValue.prop = propId;
+    }
+
+    private VehiclePropValueBuilder(VehiclePropValue propValue) {
+        mPropValue = clone(propValue);
+    }
+
+    private VehiclePropValue clone(VehiclePropValue propValue) {
+        VehiclePropValue newValue = new VehiclePropValue();
+
+        newValue.prop = propValue.prop;
+        newValue.areaId = propValue.areaId;
+        newValue.timestamp = propValue.timestamp;
+        newValue.value.stringValue = propValue.value.stringValue;
+        newValue.value.int32Values.addAll(propValue.value.int32Values);
+        newValue.value.floatValues.addAll(propValue.value.floatValues);
+        newValue.value.int64Values.addAll(propValue.value.int64Values);
+        newValue.value.bytes.addAll(propValue.value.bytes);
+
+        return newValue;
+    }
+
+    @CheckResult
+    public VehiclePropValueBuilder setAreaId(int areaId) {
+        mPropValue.areaId = areaId;
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropValueBuilder setTimestamp(long timestamp) {
+        mPropValue.timestamp = timestamp;
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropValueBuilder setTimestamp() {
+        mPropValue.timestamp = SystemClock.elapsedRealtimeNanos();
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropValueBuilder addIntValue(int... values) {
+        for (int val : values) {
+            mPropValue.value.int32Values.add(val);
+        }
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropValueBuilder addFloatValue(float... values) {
+        for (float val : values) {
+            mPropValue.value.floatValues.add(val);
+        }
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropValueBuilder addByteValue(byte... values) {
+        for (byte val : values) {
+            mPropValue.value.bytes.add(val);
+        }
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropValueBuilder setInt64Value(long... values) {
+        for (long val : values) {
+            mPropValue.value.int64Values.add(val);
+        }
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropValueBuilder setBooleanValue(boolean value) {
+        mPropValue.value.int32Values.clear();
+        mPropValue.value.int32Values.add(value ? 1 : 0);
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropValueBuilder setStringValue(String val) {
+        mPropValue.value.stringValue = val;
+        return this;
+    }
+
+    public VehiclePropValue build() {
+        return clone(mPropValue);
+    }
+}
diff --git a/vehicle-hal-support-lib/src/com/android/car/vehiclehal/test/MockedVehicleHal.java b/vehicle-hal-support-lib/src/com/android/car/vehiclehal/test/MockedVehicleHal.java
new file mode 100644
index 0000000..5713037
--- /dev/null
+++ b/vehicle-hal-support-lib/src/com/android/car/vehiclehal/test/MockedVehicleHal.java
@@ -0,0 +1,255 @@
+/*
+ * Copyright (C) 2016 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.vehiclehal.test;
+
+import static java.lang.Integer.toHexString;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.fail;
+
+import android.hardware.vehicle.V2_0.IVehicle;
+import android.hardware.vehicle.V2_0.IVehicleCallback;
+import android.hardware.vehicle.V2_0.StatusCode;
+import android.hardware.vehicle.V2_0.SubscribeOptions;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropValue;
+import android.hardware.vehicle.V2_0.VehiclePropertyAccess;
+import android.os.IHwBinder;
+
+import com.google.android.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Mocked implementation of {@link IVehicle}.
+ */
+public class MockedVehicleHal implements IVehicle {
+    /**
+     * Interface for handler of each property.
+     */
+    public interface VehicleHalPropertyHandler {
+        default void onPropertySet(VehiclePropValue value) {}
+        default VehiclePropValue onPropertyGet(VehiclePropValue value) { return null; }
+        default void onPropertySubscribe(int property, int zones, float sampleRate) {}
+        default void onPropertyUnsubscribe(int property) {}
+
+        VehicleHalPropertyHandler NOP = new VehicleHalPropertyHandler() {};
+    }
+
+    private final Map<Integer, VehicleHalPropertyHandler> mPropertyHandlerMap = new HashMap<>();
+    private final Map<Integer, VehiclePropConfig> mConfigs = new HashMap<>();
+    private final Map<Integer, List<IVehicleCallback>> mSubscribers = new HashMap<>();
+
+    public synchronized void addProperties(VehiclePropConfig... configs) {
+        for (VehiclePropConfig config : configs) {
+            addProperty(config, new DefaultPropertyHandler(config, null));
+        }
+    }
+
+    public synchronized void addProperty(VehiclePropConfig config,
+            VehicleHalPropertyHandler handler) {
+        mPropertyHandlerMap.put(config.prop, handler);
+        mConfigs.put(config.prop, config);
+    }
+
+    public synchronized void addStaticProperty(VehiclePropConfig config,
+            VehiclePropValue value) {
+        addProperty(config, new StaticPropertyHandler(value));
+    }
+
+    public synchronized void injectEvent(VehiclePropValue value) {
+        List<IVehicleCallback> callbacks = mSubscribers.get(value.prop);
+        assertNotNull("Injecting event failed for property: " + value.prop + ". No listeners found",
+                callbacks);
+        for (IVehicleCallback callback : callbacks) {
+            callback.onPropertyEvent(Lists.newArrayList(value));
+        }
+    }
+
+    @Override
+    public IHwBinder asBinder() {
+        return null;
+    }
+
+    @Override
+    public synchronized ArrayList<VehiclePropConfig> getAllPropConfigs() {
+        return new ArrayList<>(mConfigs.values());
+    }
+
+    @Override
+    public synchronized void getPropConfigs(ArrayList<Integer> props, getPropConfigsCallback cb) {
+        ArrayList<VehiclePropConfig> res = new ArrayList<>();
+        for (Integer prop : props) {
+            VehiclePropConfig config = mConfigs.get(prop);
+            if (config == null) {
+                cb.onValues(StatusCode.INVALID_ARG, new ArrayList<>());
+                return;
+            }
+            res.add(config);
+        }
+        cb.onValues(StatusCode.OK, res);
+    }
+
+    @Override
+    public synchronized void get(VehiclePropValue requestedPropValue, getCallback cb) {
+        VehicleHalPropertyHandler handler = mPropertyHandlerMap.get(requestedPropValue.prop);
+        if (handler == null) {
+            cb.onValues(StatusCode.INVALID_ARG, null);
+        } else {
+            cb.onValues(StatusCode.OK, handler.onPropertyGet(requestedPropValue));
+        }
+    }
+
+    @Override
+    public synchronized int set(VehiclePropValue propValue) {
+        VehicleHalPropertyHandler handler = mPropertyHandlerMap.get(propValue.prop);
+        if (handler == null) {
+            return StatusCode.INVALID_ARG;
+        } else {
+            handler.onPropertySet(propValue);
+            return StatusCode.OK;
+        }
+    }
+
+    @Override
+    public synchronized int subscribe(IVehicleCallback callback,
+            ArrayList<SubscribeOptions> options) {
+        for (SubscribeOptions opt : options) {
+            VehicleHalPropertyHandler handler = mPropertyHandlerMap.get(opt.propId);
+            if (handler == null) {
+                return StatusCode.INVALID_ARG;
+            }
+
+            handler.onPropertySubscribe(opt.propId, opt.vehicleAreas, opt.sampleRate);
+            List<IVehicleCallback>  subscribers = mSubscribers.get(opt.propId);
+            if (subscribers == null) {
+                subscribers = new ArrayList<>();
+                mSubscribers.put(opt.propId, subscribers);
+            }
+            subscribers.add(callback);
+        }
+        return StatusCode.OK;
+    }
+
+    @Override
+    public synchronized int unsubscribe(IVehicleCallback callback, int propId) {
+        VehicleHalPropertyHandler handler = mPropertyHandlerMap.get(propId);
+        if (handler == null) {
+            return StatusCode.INVALID_ARG;
+        }
+
+        handler.onPropertyUnsubscribe(propId);
+        List<IVehicleCallback>  subscribers = mSubscribers.get(propId);
+        if (subscribers != null) {
+            subscribers.remove(callback);
+            if (subscribers.size() == 0) {
+                mSubscribers.remove(propId);
+            }
+        }
+        return StatusCode.OK;
+    }
+
+    @Override
+    public String debugDump() {
+        return null;
+    }
+
+    @Override
+    public ArrayList<String> interfaceChain() {
+        return null;
+    }
+
+    public static class FailingPropertyHandler implements VehicleHalPropertyHandler {
+        @Override
+        public void onPropertySet(VehiclePropValue value) {
+            fail("Unexpected onPropertySet call");
+        }
+
+        @Override
+        public VehiclePropValue onPropertyGet(VehiclePropValue value) {
+            fail("Unexpected onPropertyGet call");
+            return null;
+        }
+
+        @Override
+        public void onPropertySubscribe(int property, int zones, float sampleRate) {
+            fail("Unexpected onPropertySubscribe call");
+        }
+
+        @Override
+        public void onPropertyUnsubscribe(int property) {
+            fail("Unexpected onPropertyUnsubscribe call");
+        }
+    }
+
+    public static class StaticPropertyHandler extends FailingPropertyHandler {
+        private final VehiclePropValue mValue;
+
+        public StaticPropertyHandler(VehiclePropValue value) {
+            mValue = value;
+        }
+
+        @Override
+        public synchronized VehiclePropValue onPropertyGet(VehiclePropValue value) {
+            return mValue;
+        }
+    }
+
+    public static class DefaultPropertyHandler implements VehicleHalPropertyHandler {
+        private final VehiclePropConfig mConfig;
+        private VehiclePropValue mValue;
+        private boolean mSubscribed = false;
+
+        public DefaultPropertyHandler(VehiclePropConfig config, VehiclePropValue initialValue) {
+            mConfig = config;
+            mValue = initialValue;
+        }
+
+        @Override
+        public synchronized void onPropertySet(VehiclePropValue value) {
+            assertEquals(mConfig.prop, value.prop);
+            assertEquals(VehiclePropertyAccess.WRITE, mConfig.access & VehiclePropertyAccess.WRITE);
+            mValue = value;
+        }
+
+        @Override
+        public synchronized VehiclePropValue onPropertyGet(VehiclePropValue value) {
+            assertEquals(mConfig.prop, value.prop);
+            assertEquals(VehiclePropertyAccess.READ, mConfig.access & VehiclePropertyAccess.READ);
+            return mValue;
+        }
+
+        @Override
+        public synchronized void onPropertySubscribe(int property, int zones, float sampleRate) {
+            assertEquals(mConfig.prop, property);
+            mSubscribed = true;
+        }
+
+        @Override
+        public synchronized void onPropertyUnsubscribe(int property) {
+            assertEquals(mConfig.prop, property);
+            if (!mSubscribed) {
+                throw new IllegalArgumentException("Property was not subscribed 0x"
+                        + toHexString( property));
+            }
+            mSubscribed = false;
+        }
+    }
+}
diff --git a/vehicle-hal-support-lib/src/com/android/car/vehiclehal/test/VehiclePropConfigBuilder.java b/vehicle-hal-support-lib/src/com/android/car/vehiclehal/test/VehiclePropConfigBuilder.java
new file mode 100644
index 0000000..c801067
--- /dev/null
+++ b/vehicle-hal-support-lib/src/com/android/car/vehiclehal/test/VehiclePropConfigBuilder.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2016 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.vehiclehal.test;
+
+import android.annotation.CheckResult;
+import android.hardware.vehicle.V2_0.VehicleAreaConfig;
+import android.hardware.vehicle.V2_0.VehiclePermissionModel;
+import android.hardware.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.vehicle.V2_0.VehiclePropertyAccess;
+import android.hardware.vehicle.V2_0.VehiclePropertyChangeMode;
+
+import java.util.Collection;
+
+/**
+ * A builder class for {@link android.hardware.vehicle.V2_0.VehiclePropConfig}
+ */
+public class VehiclePropConfigBuilder {
+
+    private final VehiclePropConfig mConfig;
+
+    @CheckResult
+    public static VehiclePropConfigBuilder newBuilder(int propId) {
+        return new VehiclePropConfigBuilder(propId);
+    }
+
+    private VehiclePropConfigBuilder(int propId) {
+        mConfig = new VehiclePropConfig();
+        mConfig.prop = propId;
+        mConfig.access = VehiclePropertyAccess.READ_WRITE;
+        mConfig.changeMode = VehiclePropertyChangeMode.ON_CHANGE;
+        mConfig.permissionModel = VehiclePermissionModel.NO_RESTRICTION;
+    }
+
+    private VehiclePropConfig clone(VehiclePropConfig propConfig) {
+        VehiclePropConfig newConfig = new VehiclePropConfig();
+
+        newConfig.prop = propConfig.prop;
+        newConfig.access = propConfig.access;
+        newConfig.changeMode = propConfig.changeMode;
+        newConfig.permissionModel = propConfig.permissionModel;
+        newConfig.supportedAreas = propConfig.supportedAreas;
+        newConfig.configFlags = propConfig.configFlags;
+        newConfig.configString = propConfig.configString;
+        newConfig.minSampleRate = propConfig.minSampleRate;
+        newConfig.maxSampleRate = propConfig.maxSampleRate;
+        newConfig.configArray.addAll(propConfig.configArray);
+        for (VehicleAreaConfig area : propConfig.areaConfigs) {
+            VehicleAreaConfig newArea = new VehicleAreaConfig();
+            newArea.areaId = area.areaId;
+            newArea.minInt32Value = area.minInt32Value;
+            newArea.maxInt32Value = area.maxInt32Value;
+            newArea.minInt64Value = area.minInt64Value;
+            newArea.maxInt64Value = area.maxInt64Value;
+            newArea.minFloatValue = area.minFloatValue;
+            newArea.maxFloatValue = area.maxFloatValue;
+            newConfig.areaConfigs.add(newArea);
+        }
+
+        return newConfig;
+    }
+
+    @CheckResult
+    public VehiclePropConfigBuilder setAccess(int access) {
+        mConfig.access = access;
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropConfigBuilder setChangeMode(int changeMode) {
+        mConfig.changeMode = changeMode;
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropConfigBuilder setPermissionModel(int permissionModel) {
+        mConfig.permissionModel = permissionModel;
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropConfigBuilder setSupportedAreas(int supportedAreas) {
+        mConfig.supportedAreas = supportedAreas;
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropConfigBuilder setConfigFlags(int configFlags) {
+        mConfig.configFlags = configFlags;
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropConfigBuilder setConfigString(String configString) {
+        mConfig.configString = configString;
+        return this;
+    }
+
+
+    @CheckResult
+    public VehiclePropConfigBuilder setConfigArray(Collection<Integer> configArray) {
+        mConfig.configArray.clear();
+        mConfig.configArray.addAll(configArray);
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropConfigBuilder addAreaConfig(int areaId, int minValue, int maxValue) {
+        VehicleAreaConfig area = new VehicleAreaConfig();
+        area.areaId = areaId;
+        area.minInt32Value = minValue;
+        area.maxInt32Value = maxValue;
+        mConfig.areaConfigs.add(area);
+        return this;
+    }
+
+    @CheckResult
+    public VehiclePropConfigBuilder addAreaConfig(int areaId, float minValue, float maxValue) {
+        VehicleAreaConfig area = new VehicleAreaConfig();
+        area.areaId = areaId;
+        area.minFloatValue = minValue;
+        area.maxFloatValue = maxValue;
+        mConfig.areaConfigs.add(area);
+        return this;
+    }
+
+    public VehiclePropConfig build() {
+        return clone(mConfig);
+    }
+}