Fix synchrnoization issue in car-usb-handler

Pass UsbDevice instead of using class field whenever possible to avoid
synchoronization issues

Bug: 120438693

Test: m && flash mojave
Test: manually verify projection works
Change-Id: I1646166b674846595b51d4d7bf8a1b10f9a7e798
diff --git a/car-usb-handler/src/android/car/usb/handler/UsbHostController.java b/car-usb-handler/src/android/car/usb/handler/UsbHostController.java
index 5c61a98..e4b6df3 100644
--- a/car-usb-handler/src/android/car/usb/handler/UsbHostController.java
+++ b/car-usb-handler/src/android/car/usb/handler/UsbHostController.java
@@ -25,7 +25,9 @@
 import android.os.Looper;
 import android.os.Message;
 import android.util.Log;
+
 import com.android.internal.annotations.GuardedBy;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -90,7 +92,6 @@
         filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
         filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
         context.registerReceiver(mUsbBroadcastReceiver, filter);
-
     }
 
     private synchronized void setActiveDeviceIfMatch(UsbDevice device) {
@@ -129,11 +130,11 @@
         return activeDevice != null && UsbUtil.isDevicesMatching(activeDevice, device);
     }
 
-    private String generateTitle() {
-        String manufacturer = mActiveDevice.getManufacturerName();
-        String product = mActiveDevice.getProductName();
+    private static String generateTitle(Context context, UsbDevice usbDevice) {
+        String manufacturer = usbDevice.getManufacturerName();
+        String product = usbDevice.getProductName();
         if (manufacturer == null && product == null) {
-            return mContext.getString(R.string.usb_unknown_device);
+            return context.getString(R.string.usb_unknown_device);
         }
         if (manufacturer != null && product != null) {
             return manufacturer + " " + product;
@@ -158,14 +159,14 @@
 
         UsbDeviceSettings settings = mUsbSettingsStorage.getSettings(device);
         if (settings != null && mUsbResolver.dispatch(
-                    mActiveDevice, settings.getHandler(), settings.getAoap())) {
+                    device, settings.getHandler(), settings.getAoap())) {
             if (LOCAL_LOGV) {
                 Log.v(TAG, "Usb Device: " + device + " was sent to component: "
                         + settings.getHandler());
             }
             return;
         }
-        mCallback.titleChanged(generateTitle());
+        mCallback.titleChanged(generateTitle(mContext, device));
         mUsbResolver.resolve(device);
     }