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.printservice;
184b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
194b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.ComponentName;
204b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.Context;
214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.pm.PackageManager;
224b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.pm.PackageManager.NameNotFoundException;
234b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.pm.ResolveInfo;
244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.res.Resources;
254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.res.TypedArray;
264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.res.XmlResourceParser;
274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcel;
284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcelable;
294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.util.AttributeSet;
304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.util.Log;
314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.util.Xml;
324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport org.xmlpull.v1.XmlPullParser;
344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport org.xmlpull.v1.XmlPullParserException;
354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport java.io.IOException;
374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov/**
394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * This class describes a {@link PrintService}. A print service knows
404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * how to communicate with one or more printers over one or more protocols
414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * and exposes printers for use by the applications via the platform print
424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * APIs.
434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov *
444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @see PrintService
454b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @see android.print.PrintManager
464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov *
474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @hide
484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */
494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovpublic final class PrintServiceInfo implements Parcelable {
504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private static final String LOG_TAG = PrintServiceInfo.class.getSimpleName();
524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private static final String TAG_PRINT_SERVICE = "print-service";
544b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private final String mId;
564b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
574b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private final ResolveInfo mResolveInfo;
584b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private final String mSettingsActivityName;
604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private final String mAddPrintersActivityName;
624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
63b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    private final String mAdvancedPrintOptionsActivityName;
64b4fda134761c9521a7e127db3806a07a18763b77Svetoslav
654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Creates a new instance.
674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
684b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @hide
694b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
704b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public PrintServiceInfo(Parcel parcel) {
714b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mId = parcel.readString();
724b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mResolveInfo = parcel.readParcelable(null);
734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mSettingsActivityName = parcel.readString();
744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mAddPrintersActivityName = parcel.readString();
75b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        mAdvancedPrintOptionsActivityName = parcel.readString();
764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Creates a new instance.
804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param resolveInfo The service resolve info.
824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param settingsActivityName Optional settings activity name.
834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param addPrintersActivityName Optional add printers activity name.
84b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @param advancedPrintOptionsActivityName Optional advanced print options activity.
854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
864b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public PrintServiceInfo(ResolveInfo resolveInfo, String settingsActivityName,
87b4fda134761c9521a7e127db3806a07a18763b77Svetoslav            String addPrintersActivityName, String advancedPrintOptionsActivityName) {
884b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mId = new ComponentName(resolveInfo.serviceInfo.packageName,
894b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                resolveInfo.serviceInfo.name).flattenToString();
904b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mResolveInfo = resolveInfo;
914b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mSettingsActivityName = settingsActivityName;
924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mAddPrintersActivityName = addPrintersActivityName;
93b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        mAdvancedPrintOptionsActivityName = advancedPrintOptionsActivityName;
944b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
974b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Creates a new instance.
984b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
994b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param resolveInfo The service resolve info.
1004b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param context Context for accessing resources.
1014b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @throws XmlPullParserException If a XML parsing error occurs.
1024b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @throws IOException If a I/O error occurs.
1034b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
1044b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public static PrintServiceInfo create(ResolveInfo resolveInfo, Context context) {
1054b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        String settingsActivityName = null;
1064b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        String addPrintersActivityName = null;
107b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        String advancedPrintOptionsActivityName = null;
1084b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1094b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        XmlResourceParser parser = null;
1104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        PackageManager packageManager = context.getPackageManager();
1114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parser = resolveInfo.serviceInfo.loadXmlMetaData(packageManager,
1124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                PrintService.SERVICE_META_DATA);
1134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        if (parser != null) {
1144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            try {
1154b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                int type = 0;
1164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                while (type != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) {
1174b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                    type = parser.next();
1184b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                }
1194b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1204b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                String nodeName = parser.getName();
1214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                if (!TAG_PRINT_SERVICE.equals(nodeName)) {
1228c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                    Log.e(LOG_TAG, "Ignoring meta-data that does not start with "
1238c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                            + TAG_PRINT_SERVICE + " tag");
1248c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                } else {
1258c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                    Resources resources = packageManager.getResourcesForApplication(
1268c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                            resolveInfo.serviceInfo.applicationInfo);
1278c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                    AttributeSet allAttributes = Xml.asAttributeSet(parser);
1288c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                    TypedArray attributes = resources.obtainAttributes(allAttributes,
1298c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                            com.android.internal.R.styleable.PrintService);
1308c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov
1318c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                    settingsActivityName = attributes.getString(
1328c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                            com.android.internal.R.styleable.PrintService_settingsActivity);
1338c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov
1348c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                    addPrintersActivityName = attributes.getString(
1358c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                            com.android.internal.R.styleable.PrintService_addPrintersActivity);
1368c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov
137b4fda134761c9521a7e127db3806a07a18763b77Svetoslav                    advancedPrintOptionsActivityName = attributes.getString(com.android.internal
138b4fda134761c9521a7e127db3806a07a18763b77Svetoslav                            .R.styleable.PrintService_advancedPrintOptionsActivity);
139b4fda134761c9521a7e127db3806a07a18763b77Svetoslav
1408c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                    attributes.recycle();
1414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                }
1424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            } catch (IOException ioe) {
1434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                Log.w(LOG_TAG, "Error reading meta-data:" + ioe);
1444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            } catch (XmlPullParserException xppe) {
1454b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                Log.w(LOG_TAG, "Error reading meta-data:" + xppe);
1464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            } catch (NameNotFoundException e) {
1474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                Log.e(LOG_TAG, "Unable to load resources for: "
1484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                        + resolveInfo.serviceInfo.packageName);
1494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            } finally {
1504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                if (parser != null) {
1514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                    parser.close();
1524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                }
1534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            }
1544b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
1554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
156b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        return new PrintServiceInfo(resolveInfo, settingsActivityName,
157b4fda134761c9521a7e127db3806a07a18763b77Svetoslav                addPrintersActivityName, advancedPrintOptionsActivityName);
1584b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
1594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
1614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * The accessibility service id.
1624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <p>
1634b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <strong>Generated by the system.</strong>
1644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * </p>
1654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
1664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The id.
1674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
1684b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public String getId() {
1694b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mId;
1704b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
1714b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1724b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
1734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * The service {@link ResolveInfo}.
1744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
1754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The info.
1764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
1774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public ResolveInfo getResolveInfo() {
1784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mResolveInfo;
1794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
1804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
1824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * The settings activity name.
1834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <p>
1844b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <strong>Statically set from
1854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * {@link PrintService#SERVICE_META_DATA meta-data}.</strong>
1864b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * </p>
1874b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
1884b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The settings activity name.
1894b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
1904b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public String getSettingsActivityName() {
1914b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mSettingsActivityName;
1924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
1934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1944b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
1954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * The add printers activity name.
1964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <p>
1974b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <strong>Statically set from
1984b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * {@link PrintService#SERVICE_META_DATA meta-data}.</strong>
1994b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * </p>
2004b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
2014b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The add printers activity name.
2024b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
2034b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public String getAddPrintersActivityName() {
2044b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mAddPrintersActivityName;
2054b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2064b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2074b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
208b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * The advanced print options activity name.
209b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * <p>
210b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * <strong>Statically set from
211b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * {@link PrintService#SERVICE_META_DATA meta-data}.</strong>
212b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * </p>
213b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     *
214b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @return The advanced print options activity name.
215b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     */
216b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    public String getAdvancedOptionsActivityName() {
217b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        return mAdvancedPrintOptionsActivityName;
218b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    }
219b4fda134761c9521a7e127db3806a07a18763b77Svetoslav
220b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    /**
2214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * {@inheritDoc}
2224b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
2234b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public int describeContents() {
2244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return 0;
2254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public void writeToParcel(Parcel parcel, int flagz) {
2284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parcel.writeString(mId);
2294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parcel.writeParcelable(mResolveInfo, 0);
2304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parcel.writeString(mSettingsActivityName);
2314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parcel.writeString(mAddPrintersActivityName);
232b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        parcel.writeString(mAdvancedPrintOptionsActivityName);
2334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    @Override
2364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public int hashCode() {
237a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        return 31 + ((mId == null) ? 0 : mId.hashCode());
2384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    @Override
2414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public boolean equals(Object obj) {
2424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        if (this == obj) {
2434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return true;
2444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
2454b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        if (obj == null) {
2464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return false;
2474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
2484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        if (getClass() != obj.getClass()) {
2494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return false;
2504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
2514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        PrintServiceInfo other = (PrintServiceInfo) obj;
2524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        if (mId == null) {
2534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            if (other.mId != null) {
2544b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                return false;
2554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            }
2564b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        } else if (!mId.equals(other.mId)) {
2574b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return false;
2584b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
2594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return true;
2604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    @Override
2634b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public String toString() {
2644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        StringBuilder builder = new StringBuilder();
2654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        builder.append("PrintServiceInfo{");
266b669917825a49421ee79be4819ead765f5de8aaeSvetoslav Ganov        builder.append("id=").append(mId);
267b669917825a49421ee79be4819ead765f5de8aaeSvetoslav Ganov        builder.append(", resolveInfo=").append(mResolveInfo);
268b669917825a49421ee79be4819ead765f5de8aaeSvetoslav Ganov        builder.append(", settingsActivityName=").append(mSettingsActivityName);
269b669917825a49421ee79be4819ead765f5de8aaeSvetoslav Ganov        builder.append(", addPrintersActivityName=").append(mAddPrintersActivityName);
270b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        builder.append(", advancedPrintOptionsActivityName=")
271b4fda134761c9521a7e127db3806a07a18763b77Svetoslav                .append(mAdvancedPrintOptionsActivityName);
2724b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        builder.append("}");
2734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return builder.toString();
2744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public static final Parcelable.Creator<PrintServiceInfo> CREATOR =
2774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            new Parcelable.Creator<PrintServiceInfo>() {
2784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        public PrintServiceInfo createFromParcel(Parcel parcel) {
2794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return new PrintServiceInfo(parcel);
2804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
2814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        public PrintServiceInfo[] newArray(int size) {
2834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return new PrintServiceInfo[size];
2844b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
2854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    };
2864b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov}
287