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