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