2 * Copyright (C) 2013 The Android Open Source Project
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.android.settings.print;
19 import android.app.ActivityManager;
20 import android.content.Context;
21 import android.graphics.drawable.Drawable;
22 import android.os.Bundle;
23 import android.preference.Preference;
24 import android.print.PrintJob;
25 import android.print.PrintJobId;
26 import android.print.PrintJobInfo;
27 import android.print.PrintManager;
28 import android.print.PrintManager.PrintJobStateChangeListener;
29 import android.text.TextUtils;
30 import android.text.format.DateUtils;
31 import android.view.Menu;
32 import android.view.MenuInflater;
33 import android.view.MenuItem;
34 import android.view.View;
36 import com.android.settings.R;
37 import com.android.settings.SettingsPreferenceFragment;
39 import java.text.DateFormat;
42 * Fragment for management of a print job.
44 public class PrintJobSettingsFragment extends SettingsPreferenceFragment {
45 private static final int MENU_ITEM_ID_CANCEL = 1;
46 private static final int MENU_ITEM_ID_RESTART = 2;
48 private static final String EXTRA_PRINT_JOB_ID = "EXTRA_PRINT_JOB_ID";
50 private static final String PRINT_JOB_PREFERENCE = "print_job_preference";
51 private static final String PRINT_JOB_MESSAGE_PREFERENCE = "print_job_message_preference";
53 private Drawable mListDivider;
55 private final PrintJobStateChangeListener mPrintJobStateChangeListener =
56 new PrintJobStateChangeListener() {
58 public void onPrintJobStateChanged(PrintJobId printJobId) {
63 private PrintManager mPrintManager;
65 private Preference mPrintJobPreference;
66 private Preference mMessagePreference;
68 private PrintJobId mPrintJobId;
69 private PrintJob mPrintJob;
72 public void onCreate(Bundle icicle) {
73 super.onCreate(icicle);
75 addPreferencesFromResource(R.xml.print_job_settings);
76 mPrintJobPreference = findPreference(PRINT_JOB_PREFERENCE);
77 mMessagePreference = findPreference(PRINT_JOB_MESSAGE_PREFERENCE);
79 mPrintManager = ((PrintManager) getActivity().getSystemService(
80 Context.PRINT_SERVICE)).getGlobalPrintManagerForUser(
81 getActivity().getUserId());
83 getActivity().getActionBar().setTitle(R.string.print_print_job);
87 setHasOptionsMenu(true);
91 public void onViewCreated(View view, Bundle savedInstanceState) {
92 super.onViewCreated(view, savedInstanceState);
93 getListView().setEnabled(false);
97 public void onResume() {
99 mPrintManager.addPrintJobStateChangeListener(
100 mPrintJobStateChangeListener);
105 public void onPause() {
107 mPrintManager.removePrintJobStateChangeListener(
108 mPrintJobStateChangeListener);
112 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
113 super.onCreateOptionsMenu(menu, inflater);
115 PrintJob printJob = getPrintJob();
116 if (printJob == null) {
120 if (!printJob.getInfo().isCancelling()) {
121 MenuItem cancel = menu.add(0, MENU_ITEM_ID_CANCEL, Menu.NONE,
122 getString(R.string.print_cancel));
123 cancel.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
126 if (printJob.isFailed()) {
127 MenuItem restart = menu.add(0, MENU_ITEM_ID_RESTART, Menu.NONE,
128 getString(R.string.print_restart));
129 restart.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
134 public boolean onOptionsItemSelected(MenuItem item) {
135 switch (item.getItemId()) {
136 case MENU_ITEM_ID_CANCEL: {
137 getPrintJob().cancel();
142 case MENU_ITEM_ID_RESTART: {
143 getPrintJob().restart();
149 return super.onOptionsItemSelected(item);
152 private void processArguments() {
153 String printJobId = getArguments().getString(EXTRA_PRINT_JOB_ID);
154 mPrintJobId = PrintJobId.unflattenFromString(printJobId);
155 if (mPrintJobId == null) {
160 private PrintJob getPrintJob() {
161 if (mPrintJob == null) {
162 mPrintJob = mPrintManager.getPrintJob(mPrintJobId);
167 private void updateUi() {
168 PrintJob printJob = getPrintJob();
170 if (printJob == null) {
175 if (printJob.isCancelled() || printJob.isCompleted()) {
180 PrintJobInfo info = printJob.getInfo();
182 switch (info.getState()) {
183 case PrintJobInfo.STATE_QUEUED:
184 case PrintJobInfo.STATE_STARTED: {
185 if (!printJob.getInfo().isCancelling()) {
186 mPrintJobPreference.setTitle(getString(
187 R.string.print_printing_state_title_template, info.getLabel()));
189 mPrintJobPreference.setTitle(getString(
190 R.string.print_cancelling_state_title_template, info.getLabel()));
194 case PrintJobInfo.STATE_FAILED: {
195 mPrintJobPreference.setTitle(getString(
196 R.string.print_failed_state_title_template, info.getLabel()));
199 case PrintJobInfo.STATE_BLOCKED: {
200 if (!printJob.getInfo().isCancelling()) {
201 mPrintJobPreference.setTitle(getString(
202 R.string.print_blocked_state_title_template, info.getLabel()));
204 mPrintJobPreference.setTitle(getString(
205 R.string.print_cancelling_state_title_template, info.getLabel()));
210 mPrintJobPreference.setSummary(getString(R.string.print_job_summary,
211 info.getPrinterName(), DateUtils.formatSameDayTime(
212 info.getCreationTime(), info.getCreationTime(), DateFormat.SHORT,
215 switch (info.getState()) {
216 case PrintJobInfo.STATE_QUEUED:
217 case PrintJobInfo.STATE_STARTED: {
218 mPrintJobPreference.setIcon(R.drawable.ic_print);
221 case PrintJobInfo.STATE_FAILED:
222 case PrintJobInfo.STATE_BLOCKED: {
223 mPrintJobPreference.setIcon(R.drawable.ic_print_error);
227 String stateReason = info.getStateReason();
228 if (!TextUtils.isEmpty(stateReason)) {
229 if (getPreferenceScreen().findPreference(PRINT_JOB_MESSAGE_PREFERENCE) == null) {
230 getPreferenceScreen().addPreference(mMessagePreference);
232 mMessagePreference.setSummary(stateReason);
233 getListView().setDivider(null);
235 getPreferenceScreen().removePreference(mMessagePreference);
236 getListView().setDivider(mListDivider);
239 getActivity().invalidateOptionsMenu();