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