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.app.ActivityManager;
20bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.content.Context;
21bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.graphics.drawable.Drawable;
22d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslavimport android.net.Uri;
23bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.os.Bundle;
24bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.preference.Preference;
25bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintJob;
26bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintJobId;
27bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintJobInfo;
28bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintManager;
29bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.print.PrintManager.PrintJobStateChangeListener;
30bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.text.TextUtils;
31bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.text.format.DateUtils;
32bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.view.Menu;
33bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.view.MenuInflater;
34bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.view.MenuItem;
35bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganovimport android.view.View;
36bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
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 Drawable mListDivider;
55bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
56bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private final PrintJobStateChangeListener mPrintJobStateChangeListener =
57bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            new PrintJobStateChangeListener() {
58bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        @Override
59d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav        public void onPrintJobStateChanged(PrintJobId printJobId) {
60bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            updateUi();
61bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
62bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    };
63bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
64bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private PrintManager mPrintManager;
65bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
66bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private Preference mPrintJobPreference;
67bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private Preference mMessagePreference;
68bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
69bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private PrintJobId mPrintJobId;
70bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private PrintJob mPrintJob;
71bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
72bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
73bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public void onCreate(Bundle icicle) {
74bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        super.onCreate(icicle);
75bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
76bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        addPreferencesFromResource(R.xml.print_job_settings);
77bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintJobPreference = findPreference(PRINT_JOB_PREFERENCE);
78bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mMessagePreference = findPreference(PRINT_JOB_MESSAGE_PREFERENCE);
79bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
80bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintManager = ((PrintManager) getActivity().getSystemService(
81bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                Context.PRINT_SERVICE)).getGlobalPrintManagerForUser(
82bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                        ActivityManager.getCurrentUser());
83bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
8424e49f06132dfca6040c27886b1ce0ba895a068cSvetoslav        getActivity().setTitle(R.string.print_print_job);
85bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
86bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        processArguments();
87bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
88bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        setHasOptionsMenu(true);
89bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
90bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
91bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
92bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public void onViewCreated(View view, Bundle savedInstanceState) {
93bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        super.onViewCreated(view, savedInstanceState);
94bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        getListView().setEnabled(false);
95bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
96bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
97bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
98bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public void onResume() {
99bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        super.onResume();
100bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintManager.addPrintJobStateChangeListener(
101bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJobStateChangeListener);
102bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        updateUi();
103bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
104bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
105bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
106bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public void onPause() {
107bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        super.onPause();
108bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintManager.removePrintJobStateChangeListener(
109bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJobStateChangeListener);
110bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
111bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
112bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
113bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
114bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        super.onCreateOptionsMenu(menu, inflater);
115bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
116bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        MenuItem cancel = menu.add(0, MENU_ITEM_ID_CANCEL, Menu.NONE,
117bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                getString(R.string.print_cancel));
118bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        cancel.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
119bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
120bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        if (mPrintJob.isFailed()) {
121bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            MenuItem restart = menu.add(0, MENU_ITEM_ID_RESTART, Menu.NONE,
122bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                    getString(R.string.print_restart));
123bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            restart.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
124bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
125bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
126bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
127bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    @Override
128bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    public boolean onOptionsItemSelected(MenuItem item) {
129bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        switch (item.getItemId()) {
130bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case MENU_ITEM_ID_CANCEL: {
131bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJob.cancel();
132bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                finish();
133bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                return true;
134bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            }
135bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
136bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case MENU_ITEM_ID_RESTART: {
137bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJob.restart();
138bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                finish();
139bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                return true;
140bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            }
141bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
142bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
143bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        return super.onOptionsItemSelected(item);
144bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
145bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
146bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private void processArguments() {
147d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav        String printJobId = getArguments().getString(EXTRA_PRINT_JOB_ID);
148d9f156ddf072775c894db1ca3c3fe8989be4dbebSvetoslav        mPrintJobId = PrintJobId.unflattenFromString(printJobId);
149bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        if (mPrintJobId == null) {
150bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            finish();
151bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
152bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
153bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
154bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    private void updateUi() {
155bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintJob = mPrintManager.getPrintJob(mPrintJobId);
156bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
157bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        if (mPrintJob == null) {
158bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            finish();
159dc00bf648338386e11ece255a8e7ce29ea3a70abSvetoslav Ganov            return;
160bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
161bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
162bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        if (mPrintJob.isCancelled() || mPrintJob.isCompleted()) {
163bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            finish();
164dc00bf648338386e11ece255a8e7ce29ea3a70abSvetoslav Ganov            return;
165bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
166bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
167bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        PrintJobInfo info = mPrintJob.getInfo();
168bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
169bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        switch (info.getState()) {
170bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_QUEUED:
171bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_STARTED: {
172bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJobPreference.setTitle(getString(
173bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                        R.string.print_printing_state_title_template, info.getLabel()));
174bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
175bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
176bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_FAILED: {
177bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJobPreference.setTitle(getString(
178bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                        R.string.print_failed_state_title_template, info.getLabel()));
179bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
180bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
181bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_BLOCKED: {
182bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJobPreference.setTitle(getString(
183bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                        R.string.print_blocked_state_title_template, info.getLabel()));
184bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
185bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
186bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
187bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        mPrintJobPreference.setSummary(getString(R.string.print_job_summary,
188bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                info.getPrinterName(), DateUtils.formatSameDayTime(
189bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                        info.getCreationTime(), info.getCreationTime(), DateFormat.SHORT,
190bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                        DateFormat.SHORT)));
191bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
192bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        switch (info.getState()) {
193bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_QUEUED:
194bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_STARTED: {
195bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJobPreference.setIcon(com.android.internal.R.drawable.ic_print);
196bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
197bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
198bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_FAILED:
199bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            case PrintJobInfo.STATE_BLOCKED: {
200bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                mPrintJobPreference.setIcon(com.android.internal.R.drawable.ic_print_error);
201bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            } break;
202bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
203bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
204bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        String stateReason = info.getStateReason();
205bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        if (!TextUtils.isEmpty(stateReason)) {
206bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            if (getPreferenceScreen().findPreference(PRINT_JOB_MESSAGE_PREFERENCE) == null) {
207bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov                getPreferenceScreen().addPreference(mMessagePreference);
208bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            }
209bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            mMessagePreference.setSummary(stateReason);
210bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            getListView().setDivider(null);
211bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        } else {
212bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            getPreferenceScreen().removePreference(mMessagePreference);
213bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov            getListView().setDivider(mListDivider);
214bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        }
215bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov
216bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov        getActivity().invalidateOptionsMenu();
217bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov    }
218bc2c3db8f923b9ee25345f5ebbad9f6c762a1e23Svetoslav Ganov}
219