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