Allow multiple device entries in usb-car-handler
There are might be cases when device reports multiple products we always
need to filter db by VID + PID
Bug: 62575964
Test: manually on Mojave
Change-Id: I3b661517a770e7cda7c7ec267d9d627105b5ccb1
diff --git a/car-usb-handler/src/android/car/usb/handler/UsbSettingsStorage.java b/car-usb-handler/src/android/car/usb/handler/UsbSettingsStorage.java
index 1b251f8..7e8704e 100644
--- a/car-usb-handler/src/android/car/usb/handler/UsbSettingsStorage.java
+++ b/car-usb-handler/src/android/car/usb/handler/UsbSettingsStorage.java
@@ -24,6 +24,7 @@
import android.database.sqlite.SQLiteOpenHelper;
import android.hardware.usb.UsbDevice;
import android.util.Log;
+
import java.util.ArrayList;
import java.util.List;
@@ -51,25 +52,23 @@
private Cursor queryFor(SQLiteDatabase db, UsbDevice device) {
String serial = device.getSerialNumber();
String selection;
- String[] selectionArgs;
+ List<String> selectionArgs = new ArrayList<>();
if (AoapInterface.isDeviceInAoapMode(device)) {
selection = COLUMN_SERIAL + " = ? AND " + COLUMN_AOAP + " = 1";
- selectionArgs = new String[] {serial};
+ selectionArgs.add(serial);
} else if (serial == null) {
- selection = COLUMN_SERIAL + " IS NULL AND "
- + COLUMN_VID + " = ? AND " + COLUMN_PID + " = ?";
- selectionArgs = new String[] {
- Integer.toString(device.getVendorId()),
- Integer.toString(device.getProductId())};
+ selection = COLUMN_SERIAL + " IS NULL";
} else {
- selection =
- COLUMN_SERIAL + " = ? AND " + COLUMN_VID + " = ? AND " + COLUMN_PID + " = ?";
- selectionArgs = new String[] {
- device.getSerialNumber(),
- Integer.toString(device.getVendorId()),
- Integer.toString(device.getProductId())};
+ selection = COLUMN_SERIAL + " = ?";
+ selectionArgs.add(serial);
}
- return db.query(TABLE_USB_SETTINGS, null, selection, selectionArgs, null, null, null);
+
+ selection += " AND " + COLUMN_VID + " = ? AND " + COLUMN_PID + " = ?";
+ selectionArgs.add(String.valueOf(device.getVendorId()));
+ selectionArgs.add(String.valueOf(device.getProductId()));
+
+ return db.query(TABLE_USB_SETTINGS, null, selection,
+ selectionArgs.toArray(new String[0]), null, null, null);
}
/**