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.graphics.drawable.Drawable;
21bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.os.Bundle;
22bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.preference.Preference;
23bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintJob;
24bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintJobId;
25bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintJobInfo;
26bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintManager;
27bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintManager.PrintJobStateChangeListener;
28bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.text.TextUtils;
29bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.text.format.DateUtils;
30bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.view.Menu;
31bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.view.MenuInflater;
32bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.view.MenuItem;
33bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.view.View;
34bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
358a963babe2e36b7a41f77b8d2598c97658196e58Chris Wrenimport com.android.internal.logging.MetricsLogger;
36bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport com.android.settings.R;
37bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport com.android.settings.SettingsPreferenceFragment;
38bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
39bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport java.text.DateFormat;
40bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
41bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov/**
42bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov * Fragment for management of a print job.
43bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov */
44bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovpublic class PrintJobSettingsFragment extends SettingsPreferenceFragment {
45bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private static final int MENU_ITEM_ID_CANCEL = 1;
46bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private static final int MENU_ITEM_ID_RESTART = 2;
47bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
48d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav    private static final String EXTRA_PRINT_JOB_ID = "EXTRA_PRINT_JOB_ID";
49d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav
50bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private static final String PRINT_JOB_PREFERENCE = "print_job_preference";
51bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private static final String PRINT_JOB_MESSAGE_PREFERENCE = "print_job_message_preference";
52bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
53bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private Drawable mListDivider;
54bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
55bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private final PrintJobStateChangeListener mPrintJobStateChangeListener =
56bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            new PrintJobStateChangeListener() {
57bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        @Override
58d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav        public void onPrintJobStateChanged(PrintJobId printJobId) {
59bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            updateUi();
60bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
61bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    };
62bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
63bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private PrintManager mPrintManager;
64bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
65bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private Preference mPrintJobPreference;
66bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private Preference mMessagePreference;
67bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
68bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private PrintJobId mPrintJobId;
69bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private PrintJob mPrintJob;
70bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
71bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
728a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    protected int getMetricsCategory() {
738a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren        return MetricsLogger.PRINT_JOB_SETTINGS;
748a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    }
758a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren
768a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    @Override
77bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public void onCreate(Bundle icicle) {
78bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        super.onCreate(icicle);
79bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
80bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        addPreferencesFromResource(R.xml.print_job_settings);
81bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintJobPreference = findPreference(PRINT_JOB_PREFERENCE);
82bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mMessagePreference = findPreference(PRINT_JOB_MESSAGE_PREFERENCE);
83bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
84bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintManager = ((PrintManager) getActivity().getSystemService(
85bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                Context.PRINT_SERVICE)).getGlobalPrintManagerForUser(
866cfe7996541d608438fa7bec2cbad813ace93a4fSvetoslav                        getActivity().getUserId());
87bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
88bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        getActivity().getActionBar().setTitle(R.string.print_print_job);
89bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
90bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        processArguments();
91bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
92bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        setHasOptionsMenu(true);
93bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
94bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
95bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
96bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public void onViewCreated(View view, Bundle savedInstanceState) {
97bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        super.onViewCreated(view, savedInstanceState);
98bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        getListView().setEnabled(false);
99bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
100bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
101bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
102bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public void onResume() {
103bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        super.onResume();
104bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintManager.addPrintJobStateChangeListener(
105bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJobStateChangeListener);
106bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        updateUi();
107bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
108bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
109bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
110bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public void onPause() {
111bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        super.onPause();
112bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintManager.removePrintJobStateChangeListener(
113bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJobStateChangeListener);
114bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
115bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
116bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
117bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
118bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        super.onCreateOptionsMenu(menu, inflater);
119bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
12043835e006e2988f05ad30fb926ed958a832785c1Svetoslav        PrintJob printJob = getPrintJob();
12143835e006e2988f05ad30fb926ed958a832785c1Svetoslav        if (printJob == null) {
12243835e006e2988f05ad30fb926ed958a832785c1Svetoslav            return;
12343835e006e2988f05ad30fb926ed958a832785c1Svetoslav        }
12443835e006e2988f05ad30fb926ed958a832785c1Svetoslav
12543835e006e2988f05ad30fb926ed958a832785c1Svetoslav        if (!printJob.getInfo().isCancelling()) {
12697e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav            MenuItem cancel = menu.add(0, MENU_ITEM_ID_CANCEL, Menu.NONE,
12797e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                    getString(R.string.print_cancel));
12897e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav            cancel.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
12997e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav        }
130bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
13143835e006e2988f05ad30fb926ed958a832785c1Svetoslav        if (printJob.isFailed()) {
132bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            MenuItem restart = menu.add(0, MENU_ITEM_ID_RESTART, Menu.NONE,
133bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                    getString(R.string.print_restart));
134bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            restart.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
135bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
136bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
137bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
138bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
139bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public boolean onOptionsItemSelected(MenuItem item) {
140bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        switch (item.getItemId()) {
141bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case MENU_ITEM_ID_CANCEL: {
14285dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav                getPrintJob().cancel();
143bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                finish();
144bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                return true;
145bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            }
146bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
147bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case MENU_ITEM_ID_RESTART: {
14885dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav                getPrintJob().restart();
149bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                finish();
150bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                return true;
151bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            }
152bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
153bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
154bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        return super.onOptionsItemSelected(item);
155bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
156bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
157bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private void processArguments() {
158d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav        String printJobId = getArguments().getString(EXTRA_PRINT_JOB_ID);
159d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav        mPrintJobId = PrintJobId.unflattenFromString(printJobId);
160bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        if (mPrintJobId == null) {
161bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            finish();
162bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
163bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
164bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
16585dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav    private PrintJob getPrintJob() {
16685dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav        if (mPrintJob == null) {
16785dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav            mPrintJob = mPrintManager.getPrintJob(mPrintJobId);
16885dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav        }
16985dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav        return mPrintJob;
17085dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav    }
17185dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav
172bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private void updateUi() {
17385dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav        PrintJob printJob = getPrintJob();
174bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
1754a361df54b0c00dfe730b29b879abcd836a5d85aSvetoslav        if (printJob == null) {
176bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            finish();
177dc00bf648338386e11ece255a8e7ce29ea3a70abSvetoslav Ganov            return;
178bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
179bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
1804a361df54b0c00dfe730b29b879abcd836a5d85aSvetoslav        if (printJob.isCancelled() || printJob.isCompleted()) {
181bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            finish();
182dc00bf648338386e11ece255a8e7ce29ea3a70abSvetoslav Ganov            return;
183bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
184bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
18585dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav        PrintJobInfo info = printJob.getInfo();
186bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
187bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        switch (info.getState()) {
188bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_QUEUED:
189bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_STARTED: {
19085dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav                if (!printJob.getInfo().isCancelling()) {
19197e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                    mPrintJobPreference.setTitle(getString(
19297e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                            R.string.print_printing_state_title_template, info.getLabel()));
19397e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                } else {
19497e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                    mPrintJobPreference.setTitle(getString(
19597e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                            R.string.print_cancelling_state_title_template, info.getLabel()));
19697e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                }
197bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
198bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
199bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_FAILED: {
200bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJobPreference.setTitle(getString(
201bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                        R.string.print_failed_state_title_template, info.getLabel()));
202bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
203bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
204bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_BLOCKED: {
20585dcef12263f3cbae05240a155e92e7cf386d58fSvetoslav                if (!printJob.getInfo().isCancelling()) {
20697e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                    mPrintJobPreference.setTitle(getString(
20797e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                            R.string.print_blocked_state_title_template, info.getLabel()));
20897e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                } else {
20997e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                    mPrintJobPreference.setTitle(getString(
21097e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                            R.string.print_cancelling_state_title_template, info.getLabel()));
21197e962cd36e1a2bbadc264ec9ce8627a7decf268Svetoslav                }
212bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
213bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
214bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
215bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintJobPreference.setSummary(getString(R.string.print_job_summary,
216bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                info.getPrinterName(), DateUtils.formatSameDayTime(
217bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                        info.getCreationTime(), info.getCreationTime(), DateFormat.SHORT,
218bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                        DateFormat.SHORT)));
219bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
220bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        switch (info.getState()) {
221bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_QUEUED:
222bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_STARTED: {
223031e8b14322ec0a4ec3620de920fd5966290625cSvetoslav                mPrintJobPreference.setIcon(R.drawable.ic_print);
224bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
225bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
226bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_FAILED:
227bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_BLOCKED: {
228031e8b14322ec0a4ec3620de920fd5966290625cSvetoslav                mPrintJobPreference.setIcon(R.drawable.ic_print_error);
229bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
230bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
231bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
232bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        String stateReason = info.getStateReason();
233bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        if (!TextUtils.isEmpty(stateReason)) {
234bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            if (getPreferenceScreen().findPreference(PRINT_JOB_MESSAGE_PREFERENCE) == null) {
235bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                getPreferenceScreen().addPreference(mMessagePreference);
236bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            }
237bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            mMessagePreference.setSummary(stateReason);
238bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            getListView().setDivider(null);
239bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        } else {
240bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            getPreferenceScreen().removePreference(mMessagePreference);
241bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            getListView().setDivider(mListDivider);
242bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
243bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
244bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        getActivity().invalidateOptionsMenu();
245bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
246bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov}
247