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