• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2013 The Android Open Source Project
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 
17 package com.android.settings.print;
18 
19 import android.content.Context;
20 import android.os.Bundle;
21 import android.print.PrintJob;
22 import android.print.PrintJobId;
23 import android.print.PrintJobInfo;
24 import android.print.PrintManager;
25 import android.print.PrintManager.PrintJobStateChangeListener;
26 import android.support.v7.preference.Preference;
27 import android.text.TextUtils;
28 import android.text.format.DateUtils;
29 import android.view.LayoutInflater;
30 import android.view.Menu;
31 import android.view.MenuInflater;
32 import android.view.MenuItem;
33 import android.view.View;
34 
35 import android.view.ViewGroup;
36 import com.android.internal.logging.MetricsProto.MetricsEvent;
37 import com.android.settings.R;
38 import com.android.settings.SettingsPreferenceFragment;
39 
40 import java.text.DateFormat;
41 
42 /**
43  * Fragment for management of a print job.
44  */
45 public class PrintJobSettingsFragment extends SettingsPreferenceFragment {
46     private static final int MENU_ITEM_ID_CANCEL = 1;
47     private static final int MENU_ITEM_ID_RESTART = 2;
48 
49     private static final String EXTRA_PRINT_JOB_ID = "EXTRA_PRINT_JOB_ID";
50 
51     private static final String PRINT_JOB_PREFERENCE = "print_job_preference";
52     private static final String PRINT_JOB_MESSAGE_PREFERENCE = "print_job_message_preference";
53 
54     private final PrintJobStateChangeListener mPrintJobStateChangeListener =
55             new PrintJobStateChangeListener() {
56         @Override
57         public void onPrintJobStateChanged(PrintJobId printJobId) {
58             updateUi();
59         }
60     };
61 
62     private PrintManager mPrintManager;
63 
64     private Preference mPrintJobPreference;
65     private Preference mMessagePreference;
66 
67     private PrintJobId mPrintJobId;
68 
69     @Override
getMetricsCategory()70     protected int getMetricsCategory() {
71         return MetricsEvent.PRINT_JOB_SETTINGS;
72     }
73 
74     @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)75     public View onCreateView(LayoutInflater inflater, ViewGroup container,
76             Bundle savedInstanceState) {
77         View view = super.onCreateView(inflater, container, savedInstanceState);
78 
79         addPreferencesFromResource(R.xml.print_job_settings);
80         mPrintJobPreference = findPreference(PRINT_JOB_PREFERENCE);
81         mMessagePreference = findPreference(PRINT_JOB_MESSAGE_PREFERENCE);
82 
83         mPrintManager = ((PrintManager) getActivity().getSystemService(
84                 Context.PRINT_SERVICE)).getGlobalPrintManagerForUser(
85                         getActivity().getUserId());
86 
87         getActivity().getActionBar().setTitle(R.string.print_print_job);
88 
89         processArguments();
90 
91         setHasOptionsMenu(true);
92 
93         return  view;
94     }
95 
96     @Override
onViewCreated(View view, Bundle savedInstanceState)97     public void onViewCreated(View view, Bundle savedInstanceState) {
98         super.onViewCreated(view, savedInstanceState);
99         getListView().setEnabled(false);
100     }
101 
102     @Override
onStart()103     public void onStart() {
104         super.onStart();
105         mPrintManager.addPrintJobStateChangeListener(
106                 mPrintJobStateChangeListener);
107         updateUi();
108     }
109 
110     @Override
onStop()111     public void onStop() {
112         super.onStop();
113         mPrintManager.removePrintJobStateChangeListener(
114                 mPrintJobStateChangeListener);
115     }
116 
117     @Override
onCreateOptionsMenu(Menu menu, MenuInflater inflater)118     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
119         super.onCreateOptionsMenu(menu, inflater);
120 
121         PrintJob printJob = getPrintJob();
122         if (printJob == null) {
123             return;
124         }
125 
126         if (!printJob.getInfo().isCancelling()) {
127             MenuItem cancel = menu.add(0, MENU_ITEM_ID_CANCEL, Menu.NONE,
128                     getString(R.string.print_cancel));
129             cancel.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
130         }
131 
132         if (printJob.isFailed()) {
133             MenuItem restart = menu.add(0, MENU_ITEM_ID_RESTART, Menu.NONE,
134                     getString(R.string.print_restart));
135             restart.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
136         }
137     }
138 
139     @Override
onOptionsItemSelected(MenuItem item)140     public boolean onOptionsItemSelected(MenuItem item) {
141         PrintJob printJob = getPrintJob();
142 
143         if (printJob != null) {
144             switch (item.getItemId()) {
145                 case MENU_ITEM_ID_CANCEL: {
146                     printJob.cancel();
147                     finish();
148                     return true;
149                 }
150 
151                 case MENU_ITEM_ID_RESTART: {
152                     printJob.restart();
153                     finish();
154                     return true;
155                 }
156             }
157         }
158 
159         return super.onOptionsItemSelected(item);
160     }
161 
processArguments()162     private void processArguments() {
163         String printJobId = getArguments().getString(EXTRA_PRINT_JOB_ID);
164         if (printJobId == null) {
165             finish();
166         } else {
167             mPrintJobId = PrintJobId.unflattenFromString(printJobId);
168         }
169     }
170 
getPrintJob()171     private PrintJob getPrintJob() {
172         return mPrintManager.getPrintJob(mPrintJobId);
173     }
174 
updateUi()175     private void updateUi() {
176         PrintJob printJob = getPrintJob();
177 
178         if (printJob == null) {
179             finish();
180             return;
181         }
182 
183         if (printJob.isCancelled() || printJob.isCompleted()) {
184             finish();
185             return;
186         }
187 
188         PrintJobInfo info = printJob.getInfo();
189 
190         switch (info.getState()) {
191             case PrintJobInfo.STATE_QUEUED:
192             case PrintJobInfo.STATE_STARTED: {
193                 if (!printJob.getInfo().isCancelling()) {
194                     mPrintJobPreference.setTitle(getString(
195                             R.string.print_printing_state_title_template, info.getLabel()));
196                 } else {
197                     mPrintJobPreference.setTitle(getString(
198                             R.string.print_cancelling_state_title_template, info.getLabel()));
199                 }
200             } break;
201 
202             case PrintJobInfo.STATE_FAILED: {
203                 mPrintJobPreference.setTitle(getString(
204                         R.string.print_failed_state_title_template, info.getLabel()));
205             } break;
206 
207             case PrintJobInfo.STATE_BLOCKED: {
208                 if (!printJob.getInfo().isCancelling()) {
209                     mPrintJobPreference.setTitle(getString(
210                             R.string.print_blocked_state_title_template, info.getLabel()));
211                 } else {
212                     mPrintJobPreference.setTitle(getString(
213                             R.string.print_cancelling_state_title_template, info.getLabel()));
214                 }
215             } break;
216         }
217 
218         mPrintJobPreference.setSummary(getString(R.string.print_job_summary,
219                 info.getPrinterName(), DateUtils.formatSameDayTime(
220                         info.getCreationTime(), info.getCreationTime(), DateFormat.SHORT,
221                         DateFormat.SHORT)));
222 
223         switch (info.getState()) {
224             case PrintJobInfo.STATE_QUEUED:
225             case PrintJobInfo.STATE_STARTED: {
226                 mPrintJobPreference.setIcon(R.drawable.ic_print);
227             } break;
228 
229             case PrintJobInfo.STATE_FAILED:
230             case PrintJobInfo.STATE_BLOCKED: {
231                 mPrintJobPreference.setIcon(R.drawable.ic_print_error);
232             } break;
233         }
234 
235         CharSequence status = info.getStatus(getPackageManager());
236         if (!TextUtils.isEmpty(status)) {
237             if (getPreferenceScreen().findPreference(PRINT_JOB_MESSAGE_PREFERENCE) == null) {
238                 getPreferenceScreen().addPreference(mMessagePreference);
239             }
240             mMessagePreference.setSummary(status);
241         } else {
242             getPreferenceScreen().removePreference(mMessagePreference);
243         }
244 
245         getActivity().invalidateOptionsMenu();
246     }
247 }
248