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 19c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmannimport android.annotation.NonNull; 204b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.ComponentName; 214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcel; 224b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcelable; 23cdf2b400349ca22fedfeb5a2deb8a043791b22efPhilip P. Moltmann 24cdf2b400349ca22fedfeb5a2deb8a043791b22efPhilip P. Moltmannimport com.android.internal.util.Preconditions; 254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov/** 274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * This class represents the unique id of a printer. 284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovpublic final class PrinterId implements Parcelable { 304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 31cdf2b400349ca22fedfeb5a2deb8a043791b22efPhilip P. Moltmann private final @NonNull ComponentName mServiceName; 324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 33cdf2b400349ca22fedfeb5a2deb8a043791b22efPhilip P. Moltmann private final @NonNull String mLocalId; 344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * Creates a new instance. 374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 388c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov * @param serviceName The managing print service. 39798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * @param localId The locally unique id within the managing service. 404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @hide 424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 43cdf2b400349ca22fedfeb5a2deb8a043791b22efPhilip P. Moltmann public PrinterId(@NonNull ComponentName serviceName, @NonNull String localId) { 448c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov mServiceName = serviceName; 45798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov mLocalId = localId; 464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 48cdf2b400349ca22fedfeb5a2deb8a043791b22efPhilip P. Moltmann private PrinterId(@NonNull Parcel parcel) { 49cdf2b400349ca22fedfeb5a2deb8a043791b22efPhilip P. Moltmann mServiceName = Preconditions.checkNotNull((ComponentName) parcel.readParcelable(null)); 50cdf2b400349ca22fedfeb5a2deb8a043791b22efPhilip P. Moltmann mLocalId = Preconditions.checkNotNull(parcel.readString()); 514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 544b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * The id of the print service this printer is managed by. 554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 564b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @return The print service component name. 574b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 584b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @hide 594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 60cdf2b400349ca22fedfeb5a2deb8a043791b22efPhilip P. Moltmann public @NonNull ComponentName getServiceName() { 618c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov return mServiceName; 624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 634b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov /** 65798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov * Gets the id of this printer which is unique in the context 664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * of the print service that manages it. 674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * 688c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov * @return The printer name. 694b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */ 70c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann public @NonNull String getLocalId() { 71798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov return mLocalId; 724b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public int describeContents() { 764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return 0; 774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public void writeToParcel(Parcel parcel, int flags) { 818c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov parcel.writeParcelable(mServiceName, flags); 82798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov parcel.writeString(mLocalId); 834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 844b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 864b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public boolean equals(Object object) { 874b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov if (this == object) { 884b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return true; 894b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 904b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov if (object == null) { 914b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return false; 924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov if (getClass() != object.getClass()) { 944b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return false; 954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov PrinterId other = (PrinterId) object; 97cdf2b400349ca22fedfeb5a2deb8a043791b22efPhilip P. Moltmann if (!mServiceName.equals(other.mServiceName)) { 984b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return false; 994b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 100cdf2b400349ca22fedfeb5a2deb8a043791b22efPhilip P. Moltmann if (!mLocalId.equals(other.mLocalId)) { 1014b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return false; 1024b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1034b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return true; 1044b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1054b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1064b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 1074b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public int hashCode() { 1084b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov final int prime = 31; 1094b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov int hashCode = 1; 110cdf2b400349ca22fedfeb5a2deb8a043791b22efPhilip P. Moltmann hashCode = prime * hashCode + mServiceName.hashCode(); 111798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov hashCode = prime * hashCode + mLocalId.hashCode(); 1124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return hashCode; 1134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1154b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 1164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public String toString() { 1174b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov StringBuilder builder = new StringBuilder(); 1184b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append("PrinterId{"); 119798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov builder.append("serviceName=").append(mServiceName.flattenToString()); 120798bed6cc7d273e72b0253288605db9cd2b57740Svetoslav Ganov builder.append(", localId=").append(mLocalId); 1214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov builder.append('}'); 1224b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return builder.toString(); 1234b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public static final Parcelable.Creator<PrinterId> CREATOR = 1264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov new Creator<PrinterId>() { 1274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 1284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public PrinterId createFromParcel(Parcel parcel) { 1294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return new PrinterId(parcel); 1304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov 1324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov @Override 1334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov public PrinterId[] newArray(int size) { 1344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov return new PrinterId[size]; 1354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov } 1364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov }; 1374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov} 138