add retry-wait logic to car service when vehicle network service is not
ready

bug: 25749013
Change-Id: Ie11c1935654253a49d7b0360d44d4b17db8f3838
(cherry picked from commit b9018a93cd0ad50bea9da80825c284c9c02f9d0e)
diff --git a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetwork.java b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetwork.java
index d2ce2b5..b6ae91a 100644
--- a/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetwork.java
+++ b/libvehiclenetwork/java/src/com/android/car/vehiclenetwork/VehicleNetwork.java
@@ -65,6 +65,9 @@
     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;
+
     /**
      * Factory method to create VehicleNetwork
      * @param listener listener for listening events
@@ -73,8 +76,21 @@
      */
     public static VehicleNetwork createVehicleNetwork(VehicleNetworkListener listener,
             Looper looper) {
-        IVehicleNetwork service = IVehicleNetwork.Stub.asInterface(ServiceManager.getService(
-                IVehicleNetwork.class.getCanonicalName()));
+        int retryCount = 0;
+        IVehicleNetwork service = null;
+        while (service == null) {
+            service = IVehicleNetwork.Stub.asInterface(ServiceManager.getService(
+                    IVehicleNetwork.class.getCanonicalName()));
+            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());