127555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood/*
227555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood * Copyright (C) 2011 The Android Open Source Project
327555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood *
427555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
527555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood * you may not use this file except in compliance with the License.
627555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood * You may obtain a copy of the License at
727555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood *
827555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
927555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood *
1027555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood * Unless required by applicable law or agreed to in writing, software
1127555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
1227555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1327555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood * See the License for the specific language governing permissions and
1427555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood * limitations under the License.
1527555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood */
1627555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood
17b547fc297f24ce2d74fc86ef2a79a4424b6b4c59Mike Lockwoodpackage com.android.future.usb;
1827555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood
1927555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood/**
2027555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood * A class representing a USB accessory.
2127555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood */
22015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwoodpublic class UsbAccessory {
2327555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood
2427555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    private final String mManufacturer;
2527555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    private final String mModel;
26ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    private final String mDescription;
2727555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    private final String mVersion;
28ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    private final String mUri;
29015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood    private final String mSerial;
3027555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood
31c4308f01c965571dc2354107c3574df113e397eeMike Lockwood    /* package */ UsbAccessory(android.hardware.usb.UsbAccessory accessory) {
3227555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood        mManufacturer = accessory.getManufacturer();
3327555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood        mModel = accessory.getModel();
34ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood        mDescription = accessory.getDescription();
3527555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood        mVersion = accessory.getVersion();
36ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood        mUri = accessory.getUri();
37015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood        mSerial = accessory.getSerial();
3827555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    }
3927555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood
4027555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    /**
4127555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood     * Returns the manufacturer of the accessory.
4227555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood     *
4327555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood     * @return the accessory manufacturer
4427555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood     */
4527555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    public String getManufacturer() {
4627555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood        return mManufacturer;
4727555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    }
4827555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood
4927555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    /**
5027555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood     * Returns the model name of the accessory.
5127555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood     *
5227555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood     * @return the accessory model
5327555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood     */
5427555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    public String getModel() {
5527555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood        return mModel;
5627555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    }
5727555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood
5827555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    /**
59ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     * Returns a user visible description of the accessory.
6027555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood     *
61ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     * @return the accessory description
6227555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood     */
63ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    public String getDescription() {
64ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood        return mDescription;
6527555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    }
6627555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood
6727555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    /**
6827555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood     * Returns the version of the accessory.
6927555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood     *
7027555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood     * @return the accessory version
7127555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood     */
7227555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    public String getVersion() {
7327555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood        return mVersion;
7427555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    }
7527555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood
76ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    /**
77ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     * Returns the URI for the accessory.
78ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     * This is an optional URI that might show information about the accessory
79ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     * or provide the option to download an application for the accessory
80ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     *
81ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     * @return the accessory URI
82ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     */
83ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    public String getUri() {
84ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood        return mUri;
85ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    }
86ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood
87015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood    /**
88015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood     * Returns the unique serial number for the accessory.
89015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood     * This is an optional serial number that can be used to differentiate
90015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood     * between individual accessories of the same model and manufacturer
91015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood     *
92015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood     * @return the unique serial number
93015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood     */
94015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood    public String getSerial() {
95015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood        return mSerial;
96015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood    }
97015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood
9827555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    private static boolean compare(String s1, String s2) {
9927555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood        if (s1 == null) return (s2 == null);
10027555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood        return s1.equals(s2);
10127555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    }
10227555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood
10327555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    @Override
10427555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    public boolean equals(Object obj) {
10527555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood        if (obj instanceof UsbAccessory) {
10627555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood            UsbAccessory accessory = (UsbAccessory)obj;
10727555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood            return (compare(mManufacturer, accessory.getManufacturer()) &&
10827555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood                    compare(mModel, accessory.getModel()) &&
109ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood                    compare(mDescription, accessory.getDescription()) &&
110ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood                    compare(mVersion, accessory.getVersion()) &&
111015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood                    compare(mUri, accessory.getUri()) &&
112015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood                    compare(mSerial, accessory.getSerial()));
11327555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood        }
11427555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood        return false;
11527555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    }
11627555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood
11727555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    @Override
118ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    public int hashCode() {
119ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood        return ((mManufacturer == null ? 0 : mManufacturer.hashCode()) ^
120ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood                (mModel == null ? 0 : mModel.hashCode()) ^
121ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood                (mDescription == null ? 0 : mDescription.hashCode()) ^
122ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood                (mVersion == null ? 0 : mVersion.hashCode()) ^
123015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood                (mUri == null ? 0 : mUri.hashCode()) ^
124015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood                (mSerial == null ? 0 : mSerial.hashCode()));
125ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    }
126ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood
127ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    @Override
12827555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    public String toString() {
12927555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood        return "UsbAccessory[mManufacturer=" + mManufacturer +
13027555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood                            ", mModel=" + mModel +
131ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood                            ", mDescription=" + mDescription +
132ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood                            ", mVersion=" + mVersion +
133015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood                            ", mUri=" + mUri +
134015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood                            ", mSerial=" + mSerial + "]";
13527555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood    }
13627555315629ffce59a19bd03ba51a8323cc864b0Mike Lockwood}
137