diff --git a/res/values/strings.xml b/res/values/strings.xml index e7442ed5d90..e7a77118150 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3841,6 +3841,15 @@ Printing + + + + 1 print job + %d print jobs + + + %1$s print job + Print services diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java index c2d3ac2273f..a526022c96b 100644 --- a/src/com/android/settings/print/PrintSettingsFragment.java +++ b/src/com/android/settings/print/PrintSettingsFragment.java @@ -16,6 +16,7 @@ package com.android.settings.print; +import android.app.Activity; import android.app.LoaderManager.LoaderCallbacks; import android.content.ActivityNotFoundException; import android.content.AsyncTaskLoader; @@ -56,11 +57,13 @@ import android.widget.AdapterView.OnItemSelectedListener; import android.widget.Button; import android.widget.Spinner; import android.widget.TextView; + import com.android.internal.content.PackageMonitor; import com.android.internal.logging.MetricsLogger; import com.android.settings.DialogCreatable; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.dashboard.SummaryLoader; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settings.search.SearchIndexableRaw; @@ -601,6 +604,65 @@ public class PrintSettingsFragment extends SettingsPreferenceFragment } } + /** + * Provider for the print settings summary + */ + private static class PrintSummaryProvider + implements SummaryLoader.SummaryProvider, PrintJobStateChangeListener { + private final Context mContext; + private final PrintManager mPrintManager; + private final SummaryLoader mSummaryLoader; + + /** + * Create a new {@link PrintSummaryProvider}. + * + * @param context The context this provider is for + * @param summaryLoader The summary load using this provider + */ + public PrintSummaryProvider(Context context, SummaryLoader summaryLoader) { + mContext = context; + mSummaryLoader = summaryLoader; + mPrintManager = ((PrintManager) context.getSystemService(Context.PRINT_SERVICE)) + .getGlobalPrintManagerForUser(context.getUserId()); + mPrintManager.addPrintJobStateChangeListener(this); + } + + @Override + public void setListening(boolean isListening) { + mPrintManager.removePrintJobStateChangeListener(this); + + if (isListening) { + mPrintManager.addPrintJobStateChangeListener(this); + } + onPrintJobStateChanged(null); + } + + @Override + public void onPrintJobStateChanged(PrintJobId printJobId) { + int numPrintJobs = mPrintManager.getPrintJobs().size(); + mSummaryLoader.setSummary(this, mContext.getResources().getQuantityString( + R.plurals.print_settings_title, numPrintJobs, numPrintJobs)); + } + + @Override + protected void finalize() { + mPrintManager.removePrintJobStateChangeListener(this); + } + } + + /** + * A factory for {@link PrintSummaryProvider providers} the settings app can use to read the + * print summary. + */ + public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY + = new SummaryLoader.SummaryProviderFactory() { + @Override + public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity, + SummaryLoader summaryLoader) { + return new PrintSummaryProvider(activity, summaryLoader); + } + }; + public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @Override