140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood/*
240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * Copyright (C) 2011 The Android Open Source Project
340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood *
440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * Licensed under the Apache License, Version 2.0 (the "License");
540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * you may not use this file except in compliance with the License.
640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * You may obtain a copy of the License at
740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood *
840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood *      http://www.apache.org/licenses/LICENSE-2.0
940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood *
1040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * Unless required by applicable law or agreed to in writing, software
1140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * distributed under the License is distributed on an "AS IS" BASIS,
1240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * See the License for the specific language governing permissions and
1440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * limitations under the License.
1540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood */
1640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood
171110748b2df664f9c5066819c1f0616eae3394a7Mike Lockwoodpackage com.android.future.usb;
1840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood
1940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood/**
2040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood * A class representing a USB accessory.
2140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood */
22638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwoodpublic class UsbAccessory {
2340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood
2440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    private final String mManufacturer;
2540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    private final String mModel;
262cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood    private final String mDescription;
2740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    private final String mVersion;
282cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood    private final String mUri;
29638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood    private final String mSerial;
3040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood
3140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    /* package */ UsbAccessory(android.hardware.usb.UsbAccessory accessory) {
3240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood        mManufacturer = accessory.getManufacturer();
3340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood        mModel = accessory.getModel();
342cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood        mDescription = accessory.getDescription();
3540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood        mVersion = accessory.getVersion();
362cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood        mUri = accessory.getUri();
37638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood        mSerial = accessory.getSerial();
3840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    }
3940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood
4040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    /**
4140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood     * Returns the manufacturer of the accessory.
4240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood     *
4340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood     * @return the accessory manufacturer
4440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood     */
4540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    public String getManufacturer() {
4640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood        return mManufacturer;
4740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    }
4840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood
4940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    /**
5040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood     * Returns the model name of the accessory.
5140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood     *
5240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood     * @return the accessory model
5340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood     */
5440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    public String getModel() {
5540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood        return mModel;
5640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    }
5740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood
5840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    /**
592cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood     * Returns a user visible description of the accessory.
6040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood     *
612cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood     * @return the accessory description
6240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood     */
632cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood    public String getDescription() {
642cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood        return mDescription;
6540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    }
6640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood
6740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    /**
6840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood     * Returns the version of the accessory.
6940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood     *
7040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood     * @return the accessory version
7140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood     */
7240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    public String getVersion() {
7340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood        return mVersion;
7440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    }
7540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood
762cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood    /**
772cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood     * Returns the URI for the accessory.
782cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood     * This is an optional URI that might show information about the accessory
792cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood     * or provide the option to download an application for the accessory
802cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood     *
812cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood     * @return the accessory URI
822cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood     */
832cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood    public String getUri() {
842cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood        return mUri;
852cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood    }
862cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood
87638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood    /**
88638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood     * Returns the unique serial number for the accessory.
89638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood     * This is an optional serial number that can be used to differentiate
90638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood     * between individual accessories of the same model and manufacturer
91638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood     *
92638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood     * @return the unique serial number
93638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood     */
94638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood    public String getSerial() {
95638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood        return mSerial;
96638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood    }
97638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood
9840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    private static boolean compare(String s1, String s2) {
9940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood        if (s1 == null) return (s2 == null);
10040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood        return s1.equals(s2);
10140bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    }
10240bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood
10340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    @Override
10440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    public boolean equals(Object obj) {
10540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood        if (obj instanceof UsbAccessory) {
10640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood            UsbAccessory accessory = (UsbAccessory)obj;
10740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood            return (compare(mManufacturer, accessory.getManufacturer()) &&
10840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood                    compare(mModel, accessory.getModel()) &&
1092cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood                    compare(mDescription, accessory.getDescription()) &&
1102cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood                    compare(mVersion, accessory.getVersion()) &&
111638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood                    compare(mUri, accessory.getUri()) &&
112638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood                    compare(mSerial, accessory.getSerial()));
11340bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood        }
11440bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood        return false;
11540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    }
11640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood
11740bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    @Override
1182cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood    public int hashCode() {
1192cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood        return ((mManufacturer == null ? 0 : mManufacturer.hashCode()) ^
1202cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood                (mModel == null ? 0 : mModel.hashCode()) ^
1212cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood                (mDescription == null ? 0 : mDescription.hashCode()) ^
1222cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood                (mVersion == null ? 0 : mVersion.hashCode()) ^
123638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood                (mUri == null ? 0 : mUri.hashCode()) ^
124638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood                (mSerial == null ? 0 : mSerial.hashCode()));
1252cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood    }
1262cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood
1272cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood    @Override
12840bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    public String toString() {
12940bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood        return "UsbAccessory[mManufacturer=" + mManufacturer +
13040bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood                            ", mModel=" + mModel +
1312cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood                            ", mDescription=" + mDescription +
1322cc0377200b94b2f68f34e34554f2aa39e09cbceMike Lockwood                            ", mVersion=" + mVersion +
133638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood                            ", mUri=" + mUri +
134638d7cb3ee0bb3596b01dc19eca9456fa72a36e0Mike Lockwood                            ", mSerial=" + mSerial + "]";
13540bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood    }
13640bbf9295d5245d3917629ce15f7b37670aef1acMike Lockwood}
137