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
198141bdfa56f13c3946bed12ba7801e492ec25c11Philip P. Moltmannimport android.annotation.NonNull;
207e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmannimport android.annotation.SystemApi;
214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.ComponentName;
224b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.Context;
234b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.pm.PackageManager;
244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.pm.PackageManager.NameNotFoundException;
254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.pm.ResolveInfo;
264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.res.Resources;
274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.res.TypedArray;
284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.content.res.XmlResourceParser;
294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcel;
304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.os.Parcelable;
314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.util.AttributeSet;
324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.util.Log;
334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport android.util.Xml;
344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport org.xmlpull.v1.XmlPullParser;
364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport org.xmlpull.v1.XmlPullParserException;
374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovimport java.io.IOException;
394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov/**
414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * This class describes a {@link PrintService}. A print service knows
424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * how to communicate with one or more printers over one or more protocols
434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * and exposes printers for use by the applications via the platform print
444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * APIs.
454b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov *
464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @see PrintService
474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @see android.print.PrintManager
484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov *
494b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov * @hide
504b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov */
517e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann@SystemApi
524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganovpublic final class PrintServiceInfo implements Parcelable {
534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
544b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private static final String LOG_TAG = PrintServiceInfo.class.getSimpleName();
554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
564b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private static final String TAG_PRINT_SERVICE = "print-service";
574b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
584b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private final String mId;
594b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
6066c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    private boolean mIsEnabled;
6166c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private final ResolveInfo mResolveInfo;
634b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private final String mSettingsActivityName;
654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    private final String mAddPrintersActivityName;
674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
68b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    private final String mAdvancedPrintOptionsActivityName;
69b4fda134761c9521a7e127db3806a07a18763b77Svetoslav
704b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
714b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Creates a new instance.
724b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @hide
744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public PrintServiceInfo(Parcel parcel) {
764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mId = parcel.readString();
7766c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        mIsEnabled = parcel.readByte() != 0;
784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mResolveInfo = parcel.readParcelable(null);
794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mSettingsActivityName = parcel.readString();
804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mAddPrintersActivityName = parcel.readString();
81b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        mAdvancedPrintOptionsActivityName = parcel.readString();
824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
844b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Creates a new instance.
864b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
874b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param resolveInfo The service resolve info.
884b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param settingsActivityName Optional settings activity name.
894b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param addPrintersActivityName Optional add printers activity name.
90b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @param advancedPrintOptionsActivityName Optional advanced print options activity.
917e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     *
927e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     * @hide
934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
944b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public PrintServiceInfo(ResolveInfo resolveInfo, String settingsActivityName,
95b4fda134761c9521a7e127db3806a07a18763b77Svetoslav            String addPrintersActivityName, String advancedPrintOptionsActivityName) {
964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mId = new ComponentName(resolveInfo.serviceInfo.packageName,
974b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                resolveInfo.serviceInfo.name).flattenToString();
984b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mResolveInfo = resolveInfo;
994b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mSettingsActivityName = settingsActivityName;
1004b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        mAddPrintersActivityName = addPrintersActivityName;
101b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        mAdvancedPrintOptionsActivityName = advancedPrintOptionsActivityName;
1024b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
1034b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1044b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
1058141bdfa56f13c3946bed12ba7801e492ec25c11Philip P. Moltmann     * Return the component name for this print service.
1068141bdfa56f13c3946bed12ba7801e492ec25c11Philip P. Moltmann     *
1078141bdfa56f13c3946bed12ba7801e492ec25c11Philip P. Moltmann     * @return The component name for this print service.
1088141bdfa56f13c3946bed12ba7801e492ec25c11Philip P. Moltmann     */
1098141bdfa56f13c3946bed12ba7801e492ec25c11Philip P. Moltmann    public @NonNull ComponentName getComponentName() {
1108141bdfa56f13c3946bed12ba7801e492ec25c11Philip P. Moltmann        return new ComponentName(mResolveInfo.serviceInfo.packageName,
1118141bdfa56f13c3946bed12ba7801e492ec25c11Philip P. Moltmann                mResolveInfo.serviceInfo.name);
1128141bdfa56f13c3946bed12ba7801e492ec25c11Philip P. Moltmann    }
1138141bdfa56f13c3946bed12ba7801e492ec25c11Philip P. Moltmann
1148141bdfa56f13c3946bed12ba7801e492ec25c11Philip P. Moltmann    /**
1154b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * Creates a new instance.
1164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
1174b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @param context Context for accessing resources.
1187e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     * @param resolveInfo The service resolve info.
119c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann     * @return The created instance.
1207e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     *
1217e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     * @hide
1224b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
1237e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann    public static PrintServiceInfo create(Context context, ResolveInfo resolveInfo) {
1244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        String settingsActivityName = null;
1254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        String addPrintersActivityName = null;
126b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        String advancedPrintOptionsActivityName = null;
1274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        XmlResourceParser parser = null;
1294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        PackageManager packageManager = context.getPackageManager();
1304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parser = resolveInfo.serviceInfo.loadXmlMetaData(packageManager,
1314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                PrintService.SERVICE_META_DATA);
1324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        if (parser != null) {
1334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            try {
1344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                int type = 0;
1354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                while (type != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) {
1364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                    type = parser.next();
1374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                }
1384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                String nodeName = parser.getName();
1404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                if (!TAG_PRINT_SERVICE.equals(nodeName)) {
1418c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                    Log.e(LOG_TAG, "Ignoring meta-data that does not start with "
1428c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                            + TAG_PRINT_SERVICE + " tag");
1438c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                } else {
1448c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                    Resources resources = packageManager.getResourcesForApplication(
1458c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                            resolveInfo.serviceInfo.applicationInfo);
1468c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                    AttributeSet allAttributes = Xml.asAttributeSet(parser);
1478c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                    TypedArray attributes = resources.obtainAttributes(allAttributes,
1488c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                            com.android.internal.R.styleable.PrintService);
1498c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov
1508c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                    settingsActivityName = attributes.getString(
1518c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                            com.android.internal.R.styleable.PrintService_settingsActivity);
1528c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov
1538c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                    addPrintersActivityName = attributes.getString(
1548c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                            com.android.internal.R.styleable.PrintService_addPrintersActivity);
1558c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov
156b4fda134761c9521a7e127db3806a07a18763b77Svetoslav                    advancedPrintOptionsActivityName = attributes.getString(com.android.internal
157b4fda134761c9521a7e127db3806a07a18763b77Svetoslav                            .R.styleable.PrintService_advancedPrintOptionsActivity);
158b4fda134761c9521a7e127db3806a07a18763b77Svetoslav
1598c43376ea83a67414bd6823a472b76d41160239eSvetoslav Ganov                    attributes.recycle();
1604b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                }
1614b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            } catch (IOException ioe) {
1624b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                Log.w(LOG_TAG, "Error reading meta-data:" + ioe);
1634b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            } catch (XmlPullParserException xppe) {
1644b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                Log.w(LOG_TAG, "Error reading meta-data:" + xppe);
1654b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            } catch (NameNotFoundException e) {
1664b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                Log.e(LOG_TAG, "Unable to load resources for: "
1674b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                        + resolveInfo.serviceInfo.packageName);
1684b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            } finally {
1694b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                if (parser != null) {
1704b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                    parser.close();
1714b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                }
1724b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            }
1734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
1744b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
175b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        return new PrintServiceInfo(resolveInfo, settingsActivityName,
176b4fda134761c9521a7e127db3806a07a18763b77Svetoslav                addPrintersActivityName, advancedPrintOptionsActivityName);
1774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
1784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1794b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
1804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * The accessibility service id.
1814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <p>
1824b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <strong>Generated by the system.</strong>
1834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * </p>
1844b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
1854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The id.
1867e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     *
1877e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     * @hide
1884b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
1894b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public String getId() {
1904b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mId;
1914b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
1924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
1934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
19466c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     * If the service was enabled when it was read from the system.
19566c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     *
19666c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     * @return The id.
1977e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     *
1987e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     * @hide
19966c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     */
20066c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    public boolean isEnabled() {
20166c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        return mIsEnabled;
20266c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    }
20366c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
20466c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    /**
20566c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     * Mark a service as enabled or not
20666c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     *
20766c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     * @param isEnabled If the service should be marked as enabled.
2087e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     *
2097e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     * @hide
21066c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann     */
21166c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    public void setIsEnabled(boolean isEnabled) {
21266c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        mIsEnabled = isEnabled;
21366c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    }
21466c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann
21566c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann    /**
2164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * The service {@link ResolveInfo}.
2174b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
2184b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The info.
2197e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     *
2207e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     * @hide
2214b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
2224b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public ResolveInfo getResolveInfo() {
2234b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mResolveInfo;
2244b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2254b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2264b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
2274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * The settings activity name.
2284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <p>
2294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <strong>Statically set from
2304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * {@link PrintService#SERVICE_META_DATA meta-data}.</strong>
2314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * </p>
2324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
2334b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The settings activity name.
2347e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     *
2357e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     * @hide
2364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
2374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public String getSettingsActivityName() {
2384b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mSettingsActivityName;
2394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
2424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * The add printers activity name.
2434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <p>
2444b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * <strong>Statically set from
2454b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * {@link PrintService#SERVICE_META_DATA meta-data}.</strong>
2464b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * </p>
2474b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     *
2484b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * @return The add printers activity name.
2497e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     *
2507e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     * @hide
2514b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
2524b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public String getAddPrintersActivityName() {
2534b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return mAddPrintersActivityName;
2544b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2554b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2564b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    /**
257b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * The advanced print options activity name.
258b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * <p>
259b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * <strong>Statically set from
260b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * {@link PrintService#SERVICE_META_DATA meta-data}.</strong>
261b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * </p>
262b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     *
263b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     * @return The advanced print options activity name.
2647e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     *
2657e01895e6972c0ebc552215b1207a519529af3fdPhilip P. Moltmann     * @hide
266b4fda134761c9521a7e127db3806a07a18763b77Svetoslav     */
267b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    public String getAdvancedOptionsActivityName() {
268b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        return mAdvancedPrintOptionsActivityName;
269b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    }
270b4fda134761c9521a7e127db3806a07a18763b77Svetoslav
271b4fda134761c9521a7e127db3806a07a18763b77Svetoslav    /**
2724b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     * {@inheritDoc}
2734b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov     */
274c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    @Override
2754b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public int describeContents() {
2764b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return 0;
2774b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2784b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
279c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann    @Override
2804b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public void writeToParcel(Parcel parcel, int flagz) {
2814b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parcel.writeString(mId);
28266c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        parcel.writeByte((byte)(mIsEnabled ? 1 : 0));
2834b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parcel.writeParcelable(mResolveInfo, 0);
2844b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parcel.writeString(mSettingsActivityName);
2854b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        parcel.writeString(mAddPrintersActivityName);
286b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        parcel.writeString(mAdvancedPrintOptionsActivityName);
2874b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2884b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2894b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    @Override
2904b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public int hashCode() {
291a00271533f639c8ed36429c663889ac9f654bc72Svetoslav Ganov        return 31 + ((mId == null) ? 0 : mId.hashCode());
2924b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
2934b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
2944b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    @Override
2954b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public boolean equals(Object obj) {
2964b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        if (this == obj) {
2974b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return true;
2984b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
2994b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        if (obj == null) {
3004b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return false;
3014b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
3024b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        if (getClass() != obj.getClass()) {
3034b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return false;
3044b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
3054b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        PrintServiceInfo other = (PrintServiceInfo) obj;
3064b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        if (mId == null) {
3074b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            if (other.mId != null) {
3084b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov                return false;
3094b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            }
3104b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        } else if (!mId.equals(other.mId)) {
3114b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return false;
3124b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
3134b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return true;
3144b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
3154b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
3164b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    @Override
3174b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public String toString() {
3184b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        StringBuilder builder = new StringBuilder();
3194b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        builder.append("PrintServiceInfo{");
320b669917825a49421ee79be4819ead765f5de8aaeSvetoslav Ganov        builder.append("id=").append(mId);
32166c96591e2ddb464c67e60dbf4193ef4ec8a620bPhilip P. Moltmann        builder.append("isEnabled=").append(mIsEnabled);
322b669917825a49421ee79be4819ead765f5de8aaeSvetoslav Ganov        builder.append(", resolveInfo=").append(mResolveInfo);
323b669917825a49421ee79be4819ead765f5de8aaeSvetoslav Ganov        builder.append(", settingsActivityName=").append(mSettingsActivityName);
324b669917825a49421ee79be4819ead765f5de8aaeSvetoslav Ganov        builder.append(", addPrintersActivityName=").append(mAddPrintersActivityName);
325b4fda134761c9521a7e127db3806a07a18763b77Svetoslav        builder.append(", advancedPrintOptionsActivityName=")
326b4fda134761c9521a7e127db3806a07a18763b77Svetoslav                .append(mAdvancedPrintOptionsActivityName);
3274b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        builder.append("}");
3284b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        return builder.toString();
3294b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    }
3304b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
3314b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    public static final Parcelable.Creator<PrintServiceInfo> CREATOR =
3324b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            new Parcelable.Creator<PrintServiceInfo>() {
333c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann        @Override
3344b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        public PrintServiceInfo createFromParcel(Parcel parcel) {
3354b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return new PrintServiceInfo(parcel);
3364b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
3374b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov
338c43639c3067dda5df189fb3cbf14f256c17e677dPhilip P. Moltmann        @Override
3394b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        public PrintServiceInfo[] newArray(int size) {
3404b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov            return new PrintServiceInfo[size];
3414b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov        }
3424b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov    };
3434b9a4d16872bbb50712e007b419ac0b35ff1582dSvetoslav Ganov}
344