1bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov/*
2bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov * Copyright (C) 2013 The Android Open Source Project
3bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov *
4bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov * Licensed under the Apache License, Version 2.0 (the "License");
5bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov * you may not use this file except in compliance with the License.
6bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov * You may obtain a copy of the License at
7bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov *
8bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov *      http://www.apache.org/licenses/LICENSE-2.0
9bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov *
10bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov * Unless required by applicable law or agreed to in writing, software
11bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov * distributed under the License is distributed on an "AS IS" BASIS,
12bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov * See the License for the specific language governing permissions and
14bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov * limitations under the License.
15bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov */
16bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
17bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovpackage com.android.settings.print;
18bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
19bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.content.Context;
20bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.os.Bundle;
21bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintJob;
22bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintJobId;
23bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintJobInfo;
24bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintManager;
25bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintManager.PrintJobStateChangeListener;
2639b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference;
27bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.text.TextUtils;
28bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.text.format.DateUtils;
2923176395a5413ad55eeaff780e60f36e7d70977ePhilip P. Moltmannimport android.view.LayoutInflater;
30bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.view.Menu;
31bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.view.MenuInflater;
32bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.view.MenuItem;
33bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.view.View;
34bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
3523176395a5413ad55eeaff780e60f36e7d70977ePhilip P. Moltmannimport android.view.ViewGroup;
36265d3c2a0c36251bf8a9f571d7239b6dd404d942Tamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent;
37bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport com.android.settings.R;
38bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport com.android.settings.SettingsPreferenceFragment;
39bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
40bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport java.text.DateFormat;
41bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
42bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov/**
43bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov * Fragment for management of a print job.
44bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov */
45bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovpublic class PrintJobSettingsFragment extends SettingsPreferenceFragment {
46bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private static final int MENU_ITEM_ID_CANCEL = 1;
47bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private static final int MENU_ITEM_ID_RESTART = 2;
48bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
49d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav    private static final String EXTRA_PRINT_JOB_ID = "EXTRA_PRINT_JOB_ID";
50d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav
51bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private static final String PRINT_JOB_PREFERENCE = "print_job_preference";
52bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private static final String PRINT_JOB_MESSAGE_PREFERENCE = "print_job_message_preference";
53bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
54bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private final PrintJobStateChangeListener mPrintJobStateChangeListener =
55bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            new PrintJobStateChangeListener() {
56bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        @Override
57d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav        public void onPrintJobStateChanged(PrintJobId printJobId) {
58bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            updateUi();
59bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
60bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    };
61bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
62bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private PrintManager mPrintManager;
63bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
64bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private Preference mPrintJobPreference;
65bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private Preference mMessagePreference;
66bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
67bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private PrintJobId mPrintJobId;
68bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
69bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
706507613ebcd22e4691c2af92a5c161bd327db336Fan Zhang    public int getMetricsCategory() {
719d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren        return MetricsEvent.PRINT_JOB_SETTINGS;
728a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    }
738a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren
748a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    @Override
7523176395a5413ad55eeaff780e60f36e7d70977ePhilip P. Moltmann    public View onCreateView(LayoutInflater inflater, ViewGroup container,
7623176395a5413ad55eeaff780e60f36e7d70977ePhilip P. Moltmann            Bundle savedInstanceState) {
7723176395a5413ad55eeaff780e60f36e7d70977ePhilip P. Moltmann        View view = super.onCreateView(inflater, container, savedInstanceState);
78bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
79bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        addPreferencesFromResource(R.xml.print_job_settings);
80bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintJobPreference = findPreference(PRINT_JOB_PREFERENCE);
81bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mMessagePreference = findPreference(PRINT_JOB_MESSAGE_PREFERENCE);
82bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
83bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintManager = ((PrintManager) getActivity().getSystemService(
84bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                Context.PRINT_SERVICE)).getGlobalPrintManagerForUser(
856cfe7996541d608438fa7bec2cbad813ace93a4fSvetoslav                        getActivity().getUserId());
86bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
87bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        getActivity().getActionBar().setTitle(R.string.print_print_job);
88bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
89bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        processArguments();
90bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
91bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        setHasOptionsMenu(true);
9223176395a5413ad55eeaff780e60f36e7d70977ePhilip P. Moltmann
9323176395a5413ad55eeaff780e60f36e7d70977ePhilip P. Moltmann        return  view;
94bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
95bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
96bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
97bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public void onViewCreated(View view, Bundle savedInstanceState) {
98bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        super.onViewCreated(view, savedInstanceState);
99bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        getListView().setEnabled(false);
100bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
101bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
102bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
10399f0bd4aa6480f76fb7740ada8101bff84c1feb3Philip P. Moltmann    public void onStart() {
10499f0bd4aa6480f76fb7740ada8101bff84c1feb3Philip P. Moltmann        super.onStart();
105bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintManager.addPrintJobStateChangeListener(
106bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJobStateChangeListener);
107bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        updateUi();
108bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
109bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
110bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
11199f0bd4aa6480f76fb7740ada8101bff84c1feb3Philip P. Moltmann    public void onStop() {
11299f0bd4aa6480f76fb7740ada8101bff84c1feb3Philip P. Moltmann        super.onStop();
113bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintManager.removePrintJobStateChangeListener(
114bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJobStateChangeListener);
115bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
116bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
117bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
118bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
119bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        super.onCreateOptionsMenu(menu, inflater);
120bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
12143835e006e2988f05ad30fb926ed958a832785c1Svetoslav        PrintJob printJob = getPrintJob();
12243835e006e2988f05ad30fb926ed958a832785c1Svetoslav        if (printJob == null) {
12343835e006e2988f05ad30fb926ed958a832785c1Svetoslav            return;
12443835e006e2988f05ad30fb926ed958a832785c1Svetoslav        }
12543835e006e2988f05ad30fb926ed958a832785c1Svetoslav
12643835e006e2988f05ad30fb926ed958a832785c1Svetoslav        if (!printJob.getInfo().isCancelling()) {
12797e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav            MenuItem cancel = menu.add(0, MENU_ITEM_ID_CANCEL, Menu.NONE,
12897e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                    getString(R.string.print_cancel));
12997e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav            cancel.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
13097e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav        }
131bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
13243835e006e2988f05ad30fb926ed958a832785c1Svetoslav        if (printJob.isFailed()) {
133bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            MenuItem restart = menu.add(0, MENU_ITEM_ID_RESTART, Menu.NONE,
134bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                    getString(R.string.print_restart));
135bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            restart.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
136bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
137bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
138bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
139bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
140bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public boolean onOptionsItemSelected(MenuItem item) {
141eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann        PrintJob printJob = getPrintJob();
142bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
143eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann        if (printJob != null) {
144eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann            switch (item.getItemId()) {
145eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann                case MENU_ITEM_ID_CANCEL: {
146eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann                    printJob.cancel();
147eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann                    finish();
148eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann                    return true;
149eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann                }
150eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann
151eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann                case MENU_ITEM_ID_RESTART: {
152eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann                    printJob.restart();
153eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann                    finish();
154eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann                    return true;
155eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann                }
156bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            }
157bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
158bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
159bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        return super.onOptionsItemSelected(item);
160bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
161bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
162bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private void processArguments() {
163d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav        String printJobId = getArguments().getString(EXTRA_PRINT_JOB_ID);
164be37bdff48e311e4df55bcc36f3acd1e49f74c9cPhilip P. Moltmann        if (printJobId == null) {
165bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            finish();
166be37bdff48e311e4df55bcc36f3acd1e49f74c9cPhilip P. Moltmann        } else {
167be37bdff48e311e4df55bcc36f3acd1e49f74c9cPhilip P. Moltmann            mPrintJobId = PrintJobId.unflattenFromString(printJobId);
168bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
169bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
170bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
17185dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav    private PrintJob getPrintJob() {
172eb01628ba897c116e434970309a4d5aff3fd03dbPhilip P. Moltmann        return mPrintManager.getPrintJob(mPrintJobId);
17385dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav    }
17485dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav
175bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private void updateUi() {
17685dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav        PrintJob printJob = getPrintJob();
177bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
1784a361df54b0c00dfe730b29b879abcd836a5d85aSvetoslav        if (printJob == null) {
179bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            finish();
180dc00bf648338386e11ece255a8e7ce29ea3a70abSvetoslav Ganov            return;
181bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
182bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
1834a361df54b0c00dfe730b29b879abcd836a5d85aSvetoslav        if (printJob.isCancelled() || printJob.isCompleted()) {
184bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            finish();
185dc00bf648338386e11ece255a8e7ce29ea3a70abSvetoslav Ganov            return;
186bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
187bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
18885dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav        PrintJobInfo info = printJob.getInfo();
189bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
190bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        switch (info.getState()) {
191bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_QUEUED:
192bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_STARTED: {
19385dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav                if (!printJob.getInfo().isCancelling()) {
19497e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                    mPrintJobPreference.setTitle(getString(
19597e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                            R.string.print_printing_state_title_template, info.getLabel()));
19697e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                } else {
19797e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                    mPrintJobPreference.setTitle(getString(
19897e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                            R.string.print_cancelling_state_title_template, info.getLabel()));
19997e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                }
200bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
201bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
202bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_FAILED: {
203bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJobPreference.setTitle(getString(
204bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                        R.string.print_failed_state_title_template, info.getLabel()));
205bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
206bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
207bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_BLOCKED: {
20885dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav                if (!printJob.getInfo().isCancelling()) {
20997e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                    mPrintJobPreference.setTitle(getString(
21097e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                            R.string.print_blocked_state_title_template, info.getLabel()));
21197e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                } else {
21297e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                    mPrintJobPreference.setTitle(getString(
21397e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                            R.string.print_cancelling_state_title_template, info.getLabel()));
21497e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                }
215bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
216bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
217bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
218bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintJobPreference.setSummary(getString(R.string.print_job_summary,
219bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                info.getPrinterName(), DateUtils.formatSameDayTime(
220bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                        info.getCreationTime(), info.getCreationTime(), DateFormat.SHORT,
221bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                        DateFormat.SHORT)));
222bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
223bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        switch (info.getState()) {
224bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_QUEUED:
225bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_STARTED: {
226031e8b14322ec0a4ec3620de920fd5966290625cSvetoslav                mPrintJobPreference.setIcon(R.drawable.ic_print);
227bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
228bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
229bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_FAILED:
230bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_BLOCKED: {
231031e8b14322ec0a4ec3620de920fd5966290625cSvetoslav                mPrintJobPreference.setIcon(R.drawable.ic_print_error);
232bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
233bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
234bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
235b05fbfa2747aeea8fe9c6647f2fcb0cb746c0dadPhilip P. Moltmann        CharSequence status = info.getStatus(getPackageManager());
236f793d6328274e7304f377cd4acf8c095f67e1194Philip P. Moltmann        if (!TextUtils.isEmpty(status)) {
237bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            if (getPreferenceScreen().findPreference(PRINT_JOB_MESSAGE_PREFERENCE) == null) {
238bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                getPreferenceScreen().addPreference(mMessagePreference);
239bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            }
240f793d6328274e7304f377cd4acf8c095f67e1194Philip P. Moltmann            mMessagePreference.setSummary(status);
241bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        } else {
242bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            getPreferenceScreen().removePreference(mMessagePreference);
243bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
244bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
245bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        getActivity().invalidateOptionsMenu();
246bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
247bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov}
248