blob: 288f5982fe1698ffc4838cdc6e2201941beead3c [file] [log] [blame]
/*
* 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 android.car.usb.handler;
import android.content.ComponentName;
import android.hardware.usb.UsbDevice;
/**
* Settings for USB device.
* @hide
*/
public final class UsbDeviceSettings {
private final String mSerialNumber;
private final int mVid;
private final int mPid;
private String mDeviceName;
private ComponentName mHandler;
private boolean mAoap;
private boolean mDefaultHandler;
UsbDeviceSettings(String serialNumber, int vid, int pid) {
mSerialNumber = serialNumber;
mVid = vid;
mPid = pid;
}
public String getSerialNumber() {
return mSerialNumber;
}
public int getVid() {
return mVid;
}
public int getPid() {
return mPid;
}
public void setDeviceName(String deviceName) {
mDeviceName = deviceName;
}
public String getDeviceName() {
return mDeviceName;
}
public void setHandler(ComponentName handler) {
mHandler = handler;
}
public ComponentName getHandler() {
return mHandler;
}
public void setAoap(boolean aoap) {
mAoap = aoap;
}
public boolean getAoap() {
return mAoap;
}
public void setDefaultHandler(boolean defaultHandler) {
mDefaultHandler = defaultHandler;
}
public boolean isDefaultHandler() {
return mDefaultHandler;
}
@Override
public String toString() {
return "UsbDeviceSettings{serial=" + mSerialNumber + ", vid=" + mVid + ", pid=" + mPid
+ ", name=" + mDeviceName + ", handler=" + mHandler.toString() + ", aoap=" + mAoap
+ ", default=" + mDefaultHandler + "}";
}
/**
* Checks if setting matches {@code UsbDevice}.
*/
public boolean matchesDevice(UsbDevice device) {
String deviceSerial = device.getSerialNumber();
if (AoapInterface.isDeviceInAoapMode(device)) {
return mAoap && deviceSerial.equals(mSerialNumber);
} else if (deviceSerial == null) {
return mVid == device.getVendorId() && mPid == device.getProductId();
} else {
return mVid == device.getVendorId() && mPid == device.getProductId()
&& deviceSerial.equals(mSerialNumber);
}
}
/**
* Creates settings from {@code UsbDevice}.
*/
public static UsbDeviceSettings constructSettings(UsbDevice device) {
UsbDeviceSettings settings = new UsbDeviceSettings(
device.getSerialNumber(), device.getVendorId(), device.getProductId());
settings.setDeviceName(device.getProductName());
return settings;
}
/**
* Creates settings from other settings.
* <p>
* Only basic properties are inherited.
*/
public static UsbDeviceSettings constructSettings(UsbDeviceSettings origSettings) {
UsbDeviceSettings settings = new UsbDeviceSettings(
origSettings.getSerialNumber(), origSettings.getVid(), origSettings.getPid());
settings.setDeviceName(origSettings.getDeviceName());
return settings;
}
/**
* Creates settings.
*/
public static UsbDeviceSettings constructSettings(String serialNumber, int vid, int pid,
String deviceName, ComponentName handler, boolean aoap) {
UsbDeviceSettings settings = new UsbDeviceSettings(serialNumber, vid, pid);
settings.setDeviceName(deviceName);
settings.setHandler(handler);
settings.setAoap(aoap);
return settings;
}
}