/*
 * Copyright 2017 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.hardware.usb;

import android.annotation.NonNull;
import android.service.usb.UsbAccessoryFilterProto;

import com.android.internal.util.dump.DualDumpOutputStream;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;

import java.io.IOException;
import java.util.Objects;

This class is used to describe a USB accessory. When used in HashMaps all values must be specified, but wildcards can be used for any of the fields in the package meta-data.
@hide
/** * This class is used to describe a USB accessory. * When used in HashMaps all values must be specified, * but wildcards can be used for any of the fields in * the package meta-data. * * @hide */
public class AccessoryFilter { // USB accessory manufacturer (or null for unspecified) public final String mManufacturer; // USB accessory model (or null for unspecified) public final String mModel; // USB accessory version (or null for unspecified) public final String mVersion; public AccessoryFilter(String manufacturer, String model, String version) { mManufacturer = manufacturer; mModel = model; mVersion = version; } public AccessoryFilter(UsbAccessory accessory) { mManufacturer = accessory.getManufacturer(); mModel = accessory.getModel(); mVersion = accessory.getVersion(); } public static AccessoryFilter read(XmlPullParser parser) throws XmlPullParserException, IOException { String manufacturer = null; String model = null; String version = null; int count = parser.getAttributeCount(); for (int i = 0; i < count; i++) { String name = parser.getAttributeName(i); String value = parser.getAttributeValue(i); if ("manufacturer".equals(name)) { manufacturer = value; } else if ("model".equals(name)) { model = value; } else if ("version".equals(name)) { version = value; } } return new AccessoryFilter(manufacturer, model, version); } public void write(XmlSerializer serializer)throws IOException { serializer.startTag(null, "usb-accessory"); if (mManufacturer != null) { serializer.attribute(null, "manufacturer", mManufacturer); } if (mModel != null) { serializer.attribute(null, "model", mModel); } if (mVersion != null) { serializer.attribute(null, "version", mVersion); } serializer.endTag(null, "usb-accessory"); } public boolean matches(UsbAccessory acc) { if (mManufacturer != null && !acc.getManufacturer().equals(mManufacturer)) return false; if (mModel != null && !acc.getModel().equals(mModel)) return false; return !(mVersion != null && !acc.getVersion().equals(mVersion)); }
Is the accessories described accessory covered by this filter?
Params:
  • accessory – A filter describing the accessory
Returns:true iff this the filter covers the accessory
/** * Is the accessories described {@code accessory} covered by this filter? * * @param accessory A filter describing the accessory * * @return {@code true} iff this the filter covers the accessory */
public boolean contains(AccessoryFilter accessory) { if (mManufacturer != null && !Objects.equals(accessory.mManufacturer, mManufacturer)) { return false; } if (mModel != null && !Objects.equals(accessory.mModel, mModel)) return false; return !(mVersion != null && !Objects.equals(accessory.mVersion, mVersion)); } @Override public boolean equals(Object obj) { // can't compare if we have wildcard strings if (mManufacturer == null || mModel == null || mVersion == null) { return false; } if (obj instanceof AccessoryFilter) { AccessoryFilter filter = (AccessoryFilter)obj; return (mManufacturer.equals(filter.mManufacturer) && mModel.equals(filter.mModel) && mVersion.equals(filter.mVersion)); } if (obj instanceof UsbAccessory) { UsbAccessory accessory = (UsbAccessory)obj; return (mManufacturer.equals(accessory.getManufacturer()) && mModel.equals(accessory.getModel()) && mVersion.equals(accessory.getVersion())); } return false; } @Override public int hashCode() { return ((mManufacturer == null ? 0 : mManufacturer.hashCode()) ^ (mModel == null ? 0 : mModel.hashCode()) ^ (mVersion == null ? 0 : mVersion.hashCode())); } @Override public String toString() { return "AccessoryFilter[mManufacturer=\"" + mManufacturer + "\", mModel=\"" + mModel + "\", mVersion=\"" + mVersion + "\"]"; }
Write a description of the filter to a dump stream.
/** * Write a description of the filter to a dump stream. */
public void dump(@NonNull DualDumpOutputStream dump, String idName, long id) { long token = dump.start(idName, id); dump.write("manufacturer", UsbAccessoryFilterProto.MANUFACTURER, mManufacturer); dump.write("model", UsbAccessoryFilterProto.MODEL, mModel); dump.write("version", UsbAccessoryFilterProto.VERSION, mVersion); dump.end(token); } }