Merge "Adding a timeout for waiting to get the selected printer's capabilities." into klp-dev

This commit is contained in:
Svetoslav Ganov
2013-09-28 00:28:07 +00:00
committed by Android (Google) Code Review
2 changed files with 49 additions and 9 deletions

View File

@ -109,6 +109,9 @@
<!-- Label for an unknown reason for failed or blocked print job. [CHAR LIMIT=25] -->
<string name="reason_unknown">unknown</string>
<!-- Label for a printer that is not available. [CHAR LIMIT=25] -->
<string name="printer_unavailable"><xliff:g id="print_job_name" example="Canon-123GHT">%1$s</xliff:g> &#8211; unavailable</string>
<!-- Arrays -->
<!-- Color mode labels. -->

View File

@ -819,8 +819,6 @@ public class PrintJobConfigActivity extends Activity {
private PrinterInfo mCurrentPrinter;
private boolean mRequestedCurrentPrinterRefresh;
private final OnItemSelectedListener mOnItemSelectedListener =
new AdapterView.OnItemSelectedListener() {
@Override
@ -840,7 +838,7 @@ public class PrintJobConfigActivity extends Activity {
return;
}
mRequestedCurrentPrinterRefresh = false;
mCapabilitiesTimeout.remove();
mCurrentPrinter = (PrinterInfo) mDestinationSpinnerAdapter
.getItem(position);
@ -855,8 +853,7 @@ public class PrintJobConfigActivity extends Activity {
PrinterCapabilitiesInfo capabilities = mCurrentPrinter.getCapabilities();
if (capabilities == null) {
// TODO: We need a timeout for the update.
mRequestedCurrentPrinterRefresh = true;
mCapabilitiesTimeout.post();
updateUi();
refreshCurrentPrinter();
} else {
@ -1129,6 +1126,9 @@ public class PrintJobConfigActivity extends Activity {
}
};
private final WaitForPrinterCapabilitiesTimeout mCapabilitiesTimeout =
new WaitForPrinterCapabilitiesTimeout();
private int mEditorState;
private boolean mIgnoreNextDestinationChange;
@ -1174,16 +1174,16 @@ public class PrintJobConfigActivity extends Activity {
if (mCurrentPrinter.getStatus() == PrinterInfo.STATUS_UNAVAILABLE
&& printer.getStatus() != PrinterInfo.STATUS_UNAVAILABLE
&& printer.getCapabilities() == null
&& !mRequestedCurrentPrinterRefresh) {
mRequestedCurrentPrinterRefresh = true;
&& !mCapabilitiesTimeout.isPosted()) {
mCapabilitiesTimeout.post();
refreshCurrentPrinter();
return;
}
// We just refreshed the current printer.
if (printer.getCapabilities() != null
&& mRequestedCurrentPrinterRefresh) {
mRequestedCurrentPrinterRefresh = false;
&& mCapabilitiesTimeout.isPosted()) {
mCapabilitiesTimeout.remove();
updatePrintAttributes(printer.getCapabilities());
updateUi();
mController.update();
@ -1972,6 +1972,43 @@ public class PrintJobConfigActivity extends Activity {
}
}
private final class WaitForPrinterCapabilitiesTimeout implements Runnable {
private static final long GET_CAPABILITIES_TIMEOUT_MILLIS = 10000; // 10sec
private boolean mIsPosted;
public void post() {
if (!mIsPosted) {
mDestinationSpinner.postDelayed(this,
GET_CAPABILITIES_TIMEOUT_MILLIS);
mIsPosted = true;
}
}
public void remove() {
if (mIsPosted) {
mIsPosted = false;
mDestinationSpinner.removeCallbacks(this);
}
}
public boolean isPosted() {
return mIsPosted;
}
@Override
public void run() {
mIsPosted = false;
if (mDestinationSpinner.getSelectedItemPosition() >= 0) {
View itemView = mDestinationSpinner.getSelectedView();
TextView titleView = (TextView) itemView.findViewById(R.id.title);
String title = getString(R.string.printer_unavailable,
mCurrentPrinter.getName());
titleView.setText(title);
}
}
}
private final class DestinationAdapter extends BaseAdapter
implements LoaderManager.LoaderCallbacks<List<PrinterInfo>>{
private final List<PrinterInfo> mPrinters = new ArrayList<PrinterInfo>();