diff options
Diffstat (limited to 'packages/PrintSpooler/src')
-rw-r--r-- | packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java | 55 |
1 files changed, 46 insertions, 9 deletions
diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java index 8d11a93..963b287 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java +++ b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java @@ -818,8 +818,6 @@ public class PrintJobConfigActivity extends Activity { private PrinterInfo mCurrentPrinter; - private boolean mRequestedCurrentPrinterRefresh; - private final OnItemSelectedListener mOnItemSelectedListener = new AdapterView.OnItemSelectedListener() { @Override @@ -839,7 +837,7 @@ public class PrintJobConfigActivity extends Activity { return; } - mRequestedCurrentPrinterRefresh = false; + mCapabilitiesTimeout.remove(); mCurrentPrinter = (PrinterInfo) mDestinationSpinnerAdapter .getItem(position); @@ -854,8 +852,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 { @@ -1128,6 +1125,9 @@ public class PrintJobConfigActivity extends Activity { } }; + private final WaitForPrinterCapabilitiesTimeout mCapabilitiesTimeout = + new WaitForPrinterCapabilitiesTimeout(); + private int mEditorState; private boolean mIgnoreNextDestinationChange; @@ -1173,16 +1173,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(); @@ -1971,6 +1971,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>(); |