PrinterId.java revision 4b9a4d16872bbb50712e007b419ac0b35ff1582d
14b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov/* 24b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Copyright (C) 2013 The Android Open Source Project 34b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 44b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Licensed under the Apache License, Version 2.0 (the "License"); 54b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * you may not use this file except in compliance with the License. 64b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * You may obtain a copy of the License at 74b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 84b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * http://www.apache.org/licenses/LICENSE-2.0 94b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Unless required by applicable law or agreed to in writing, software 114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * distributed under the License is distributed on an "AS IS" BASIS, 124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * See the License for the specific language governing permissions and 144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * limitations under the License. 154b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 174b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovpackage android.print; 184b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 194b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.ComponentName; 204b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcel; 214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcelable; 224b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 234b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov/** 244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * This class represents the unique id of a printer. 254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovpublic final class PrinterId implements Parcelable { 274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov private final ComponentName mServiceComponentName; 294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov private final String mLocalId; 314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Creates a new instance. 344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @param serviceComponentName The managing print service. 364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @param localId The unique id within the managing service. 374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @hide 394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public PrinterId(ComponentName serviceComponentName, String localId) { 414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mServiceComponentName = serviceComponentName; 424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mLocalId = localId; 434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 454b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov private PrinterId(Parcel parcel) { 464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mServiceComponentName = parcel.readParcelable(null); 474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov mLocalId = parcel.readString(); 484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * The id of the print service this printer is managed by. 524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The print service component name. 544b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @hide 564b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 574b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public ComponentName getServiceComponentName() { 584b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mServiceComponentName; 594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Gets the local id of this printer in the context 634b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * of the print service that manages it. 644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The local id. 664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public String getLocalId() { 684b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mLocalId; 694b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 704b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 714b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 724b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public int describeContents() { 734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return 0; 744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public void writeToParcel(Parcel parcel, int flags) { 784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeParcelable(mServiceComponentName, flags); 794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov parcel.writeString(mLocalId); 804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public boolean equals(Object object) { 844b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov if (this == object) { 854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return true; 864b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 874b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov if (object == null) { 884b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return false; 894b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 904b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov if (getClass() != object.getClass()) { 914b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return false; 924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov PrinterId other = (PrinterId) object; 944b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov if (mServiceComponentName == null) { 954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov if (other.mServiceComponentName != null) { 964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return false; 974b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 984b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } else if (!mServiceComponentName.equals(other.mServiceComponentName)) { 994b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return false; 1004b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1014b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov if (mLocalId != other.mLocalId) { 1024b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return false; 1034b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1044b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return true; 1054b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1064b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1074b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 1084b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public int hashCode() { 1094b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov final int prime = 31; 1104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov int hashCode = 1; 1114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov hashCode = prime * hashCode + ((mServiceComponentName != null) 1124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov ? mServiceComponentName.hashCode() : 1); 1134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov hashCode = prime * hashCode + mLocalId.hashCode(); 1144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return hashCode; 1154b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1174b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 1184b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public String toString() { 1194b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov StringBuilder builder = new StringBuilder(); 1204b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append("PrinterId{"); 1214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append(mServiceComponentName.flattenToString()); 1224b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append(":"); 1234b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append(mLocalId); 1244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append('}'); 1254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return builder.toString(); 1264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @hide 1304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public String flattenToString() { 1324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return mServiceComponentName.flattenToString() + ":" + mLocalId; 1334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 1364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @hide 1374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 1384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public static PrinterId unflattenFromString(String string) { 1394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov String[] split = string.split(":"); 1404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov if (split.length != 2) { 1414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov throw new IllegalArgumentException("Not well-formed printer id:" + string); 1424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov ComponentName component = ComponentName.unflattenFromString(split[0]); 1444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov String localId = String.valueOf(split[1]); 1454b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return new PrinterId(component, localId); 1464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public static final Parcelable.Creator<PrinterId> CREATOR = 1494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov new Creator<PrinterId>() { 1504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 1514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public PrinterId createFromParcel(Parcel parcel) { 1524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return new PrinterId(parcel); 1534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1544b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 1564b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public PrinterId[] newArray(int size) { 1574b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return new PrinterId[size]; 1584b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov }; 1604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov} 161