1fb290df3c9a6f37ec050163029e25844de2f8590RoboErik/* 2fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * Copyright (C) 2013 The Android Open Source Project 3fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * 4fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * Licensed under the Apache License, Version 2.0 (the "License"); 5fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * you may not use this file except in compliance with the License. 6fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * You may obtain a copy of the License at 7fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * 8fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * http://www.apache.org/licenses/LICENSE-2.0 9fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * 10fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * Unless required by applicable law or agreed to in writing, software 11fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * distributed under the License is distributed on an "AS IS" BASIS, 12fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * See the License for the specific language governing permissions and 14fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * limitations under the License. 15fb290df3c9a6f37ec050163029e25844de2f8590RoboErik */ 16fb290df3c9a6f37ec050163029e25844de2f8590RoboErik 17fb290df3c9a6f37ec050163029e25844de2f8590RoboErikpackage android.hardware.input; 18fb290df3c9a6f37ec050163029e25844de2f8590RoboErik 1907ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagiimport java.util.Objects; 2007ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi 21fb290df3c9a6f37ec050163029e25844de2f8590RoboErikimport android.os.Parcel; 22fb290df3c9a6f37ec050163029e25844de2f8590RoboErikimport android.os.Parcelable; 2307ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagiimport android.text.TextUtils; 24fb290df3c9a6f37ec050163029e25844de2f8590RoboErik 25fb290df3c9a6f37ec050163029e25844de2f8590RoboErik/** 26fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * Wrapper for passing identifying information for input devices. 27fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * 28fb290df3c9a6f37ec050163029e25844de2f8590RoboErik * @hide 29fb290df3c9a6f37ec050163029e25844de2f8590RoboErik */ 30fb290df3c9a6f37ec050163029e25844de2f8590RoboErikpublic final class InputDeviceIdentifier implements Parcelable { 31fb290df3c9a6f37ec050163029e25844de2f8590RoboErik private final String mDescriptor; 32fb290df3c9a6f37ec050163029e25844de2f8590RoboErik private final int mVendorId; 33fb290df3c9a6f37ec050163029e25844de2f8590RoboErik private final int mProductId; 34fb290df3c9a6f37ec050163029e25844de2f8590RoboErik 35fb290df3c9a6f37ec050163029e25844de2f8590RoboErik public InputDeviceIdentifier(String descriptor, int vendorId, int productId) { 36fb290df3c9a6f37ec050163029e25844de2f8590RoboErik this.mDescriptor = descriptor; 37fb290df3c9a6f37ec050163029e25844de2f8590RoboErik this.mVendorId = vendorId; 38fb290df3c9a6f37ec050163029e25844de2f8590RoboErik this.mProductId = productId; 39fb290df3c9a6f37ec050163029e25844de2f8590RoboErik } 40fb290df3c9a6f37ec050163029e25844de2f8590RoboErik 41fb290df3c9a6f37ec050163029e25844de2f8590RoboErik private InputDeviceIdentifier(Parcel src) { 42fb290df3c9a6f37ec050163029e25844de2f8590RoboErik mDescriptor = src.readString(); 43fb290df3c9a6f37ec050163029e25844de2f8590RoboErik mVendorId = src.readInt(); 44fb290df3c9a6f37ec050163029e25844de2f8590RoboErik mProductId = src.readInt(); 45fb290df3c9a6f37ec050163029e25844de2f8590RoboErik } 46fb290df3c9a6f37ec050163029e25844de2f8590RoboErik 47fb290df3c9a6f37ec050163029e25844de2f8590RoboErik @Override 48fb290df3c9a6f37ec050163029e25844de2f8590RoboErik public int describeContents() { 49fb290df3c9a6f37ec050163029e25844de2f8590RoboErik return 0; 50fb290df3c9a6f37ec050163029e25844de2f8590RoboErik } 51fb290df3c9a6f37ec050163029e25844de2f8590RoboErik 52fb290df3c9a6f37ec050163029e25844de2f8590RoboErik @Override 53fb290df3c9a6f37ec050163029e25844de2f8590RoboErik public void writeToParcel(Parcel dest, int flags) { 54fb290df3c9a6f37ec050163029e25844de2f8590RoboErik dest.writeString(mDescriptor); 55fb290df3c9a6f37ec050163029e25844de2f8590RoboErik dest.writeInt(mVendorId); 56fb290df3c9a6f37ec050163029e25844de2f8590RoboErik dest.writeInt(mProductId); 57fb290df3c9a6f37ec050163029e25844de2f8590RoboErik } 58fb290df3c9a6f37ec050163029e25844de2f8590RoboErik 59fb290df3c9a6f37ec050163029e25844de2f8590RoboErik public String getDescriptor() { 60fb290df3c9a6f37ec050163029e25844de2f8590RoboErik return mDescriptor; 61fb290df3c9a6f37ec050163029e25844de2f8590RoboErik } 62fb290df3c9a6f37ec050163029e25844de2f8590RoboErik 63fb290df3c9a6f37ec050163029e25844de2f8590RoboErik public int getVendorId() { 64fb290df3c9a6f37ec050163029e25844de2f8590RoboErik return mVendorId; 65fb290df3c9a6f37ec050163029e25844de2f8590RoboErik } 66fb290df3c9a6f37ec050163029e25844de2f8590RoboErik 67fb290df3c9a6f37ec050163029e25844de2f8590RoboErik public int getProductId() { 68fb290df3c9a6f37ec050163029e25844de2f8590RoboErik return mProductId; 69fb290df3c9a6f37ec050163029e25844de2f8590RoboErik } 70fb290df3c9a6f37ec050163029e25844de2f8590RoboErik 7107ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi @Override 7207ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi public boolean equals(Object o) { 7307ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi if (this == o) return true; 7407ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi if (o == null || !(o instanceof InputDeviceIdentifier)) return false; 7507ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi 7607ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi final InputDeviceIdentifier that = (InputDeviceIdentifier) o; 7707ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi return ((mVendorId == that.mVendorId) && (mProductId == that.mProductId) 7807ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi && TextUtils.equals(mDescriptor, that.mDescriptor)); 7907ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi } 8007ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi 8107ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi @Override 8207ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi public int hashCode() { 8307ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi return Objects.hash(mDescriptor, mVendorId, mProductId); 8407ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi } 8507ff292dcd1611a503b1a2fbe01920eebd712451Keisuke Kuroyanagi 86fb290df3c9a6f37ec050163029e25844de2f8590RoboErik public static final Parcelable.Creator<InputDeviceIdentifier> CREATOR = 87fb290df3c9a6f37ec050163029e25844de2f8590RoboErik new Parcelable.Creator<InputDeviceIdentifier>() { 88fb290df3c9a6f37ec050163029e25844de2f8590RoboErik 89fb290df3c9a6f37ec050163029e25844de2f8590RoboErik @Override 90fb290df3c9a6f37ec050163029e25844de2f8590RoboErik public InputDeviceIdentifier createFromParcel(Parcel source) { 91fb290df3c9a6f37ec050163029e25844de2f8590RoboErik return new InputDeviceIdentifier(source); 92fb290df3c9a6f37ec050163029e25844de2f8590RoboErik } 93fb290df3c9a6f37ec050163029e25844de2f8590RoboErik 94fb290df3c9a6f37ec050163029e25844de2f8590RoboErik @Override 95fb290df3c9a6f37ec050163029e25844de2f8590RoboErik public InputDeviceIdentifier[] newArray(int size) { 96fb290df3c9a6f37ec050163029e25844de2f8590RoboErik return new InputDeviceIdentifier[size]; 97fb290df3c9a6f37ec050163029e25844de2f8590RoboErik } 98fb290df3c9a6f37ec050163029e25844de2f8590RoboErik 99fb290df3c9a6f37ec050163029e25844de2f8590RoboErik }; 100fb290df3c9a6f37ec050163029e25844de2f8590RoboErik} 101