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);
}