OSDN Git Service

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