From 206b774f79716ad6c02e5f5c5066d3eea7e72bf8 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 26 May 2017 16:39:28 -0700 Subject: [PATCH] Add # of active print jobs back to print setting summary Change-Id: Iefdde7d9e5f13a892bceff7c676c4c7b9aa8d206 Fix: 37640842 Test: make RunSettingsRoboTests --- .../settings/print/PrintSettingsFragment.java | 91 +++++++++++++------ .../print/PrintSettingsFragmentTest.java | 19 +++- 2 files changed, 80 insertions(+), 30 deletions(-) diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java index a1c166068a7..26e760c96f3 100644 --- a/src/com/android/settings/print/PrintSettingsFragment.java +++ b/src/com/android/settings/print/PrintSettingsFragment.java @@ -164,8 +164,7 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment /** * Adds preferences for all print services to the {@value PRINT_SERVICES_CATEGORY} cathegory. */ - private final class PrintServicesController implements - LoaderCallbacks> { + private final class PrintServicesController implements LoaderCallbacks> { @Override public Loader> onCreateLoader(int id, Bundle args) { PrintManager printManager = @@ -290,7 +289,7 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment } } - private final class PrintJobsController implements LoaderCallbacks> { + private final class PrintJobsController implements LoaderCallbacks> { @Override public Loader> onCreateLoader(int id, Bundle args) { @@ -326,7 +325,7 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment switch (printJob.getState()) { case PrintJobInfo.STATE_QUEUED: - case PrintJobInfo.STATE_STARTED: { + case PrintJobInfo.STATE_STARTED: if (!printJob.isCancelling()) { preference.setTitle(getString( R.string.print_printing_state_title_template, @@ -336,15 +335,13 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment R.string.print_cancelling_state_title_template, printJob.getLabel())); } - } break; - - case PrintJobInfo.STATE_FAILED: { + break; + case PrintJobInfo.STATE_FAILED: preference.setTitle(getString( R.string.print_failed_state_title_template, printJob.getLabel())); - } break; - - case PrintJobInfo.STATE_BLOCKED: { + break; + case PrintJobInfo.STATE_BLOCKED: if (!printJob.isCancelling()) { preference.setTitle(getString( R.string.print_blocked_state_title_template, @@ -354,7 +351,7 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment R.string.print_cancelling_state_title_template, printJob.getLabel())); } - } break; + break; } preference.setSummary(getString(R.string.print_job_summary, @@ -364,14 +361,13 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment switch (printJob.getState()) { case PrintJobInfo.STATE_QUEUED: - case PrintJobInfo.STATE_STARTED: { + case PrintJobInfo.STATE_STARTED: preference.setIcon(R.drawable.ic_print); - } break; - + break; case PrintJobInfo.STATE_FAILED: - case PrintJobInfo.STATE_BLOCKED: { + case PrintJobInfo.STATE_BLOCKED: preference.setIcon(R.drawable.ic_print_error); - } break; + break; } Bundle extras = preference.getExtras(); @@ -475,7 +471,7 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment PrintJobInfo printJob = printJobs.get(i).getInfo(); if (shouldShowToUser(printJob)) { if (printJobInfos == null) { - printJobInfos = new ArrayList(); + printJobInfos = new ArrayList<>(); } printJobInfos.add(printJob); } @@ -505,8 +501,9 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment /** * Provider for the print settings summary */ - @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) - static class PrintSummaryProvider implements SummaryLoader.SummaryProvider { + @VisibleForTesting + static class PrintSummaryProvider + implements SummaryLoader.SummaryProvider, PrintJobStateChangeListener { private final Context mContext; private final PrintManagerWrapper mPrintManager; private final SummaryLoader mSummaryLoader; @@ -528,19 +525,43 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment public void setListening(boolean isListening) { if (mPrintManager != null) { if (isListening) { - List services = - mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES); - if (services == null || services.isEmpty()) { - mSummaryLoader.setSummary(this, - mContext.getString(R.string.print_settings_summary_no_service)); - } else { - final int count = services.size(); - mSummaryLoader.setSummary(this, - mContext.getResources().getQuantityString( - R.plurals.print_settings_summary, count, count)); + mPrintManager.addPrintJobStateChanegListner(this); + onPrintJobStateChanged(null); + } else { + mPrintManager.removePrintJobStateChangeListener(this); + } + } + } + + @Override + public void onPrintJobStateChanged(PrintJobId printJobId) { + final List printJobs = mPrintManager.getPrintJobs(); + + int numActivePrintJobs = 0; + if (printJobs != null) { + for (PrintJob job : printJobs) { + if (shouldShowToUser(job.getInfo())) { + numActivePrintJobs++; } } } + + if (numActivePrintJobs > 0) { + mSummaryLoader.setSummary(this, mContext.getResources().getQuantityString( + R.plurals.print_jobs_summary, numActivePrintJobs, numActivePrintJobs)); + } else { + List services = + mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES); + if (services == null || services.isEmpty()) { + mSummaryLoader.setSummary(this, + mContext.getString(R.string.print_settings_summary_no_service)); + } else { + final int count = services.size(); + mSummaryLoader.setSummary(this, + mContext.getResources().getQuantityString( + R.plurals.print_settings_summary, count, count)); + } + } } static class PrintManagerWrapper { @@ -555,6 +576,18 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment public List getPrintServices(int selectionFlags) { return mPrintManager.getPrintServices(selectionFlags); } + + public void addPrintJobStateChanegListner(PrintJobStateChangeListener listener) { + mPrintManager.addPrintJobStateChangeListener(listener); + } + + public void removePrintJobStateChangeListener(PrintJobStateChangeListener listener) { + mPrintManager.removePrintJobStateChangeListener(listener); + } + + public List getPrintJobs() { + return mPrintManager.getPrintJobs(); + } } } diff --git a/tests/robotests/src/com/android/settings/print/PrintSettingsFragmentTest.java b/tests/robotests/src/com/android/settings/print/PrintSettingsFragmentTest.java index 0e2a2f6e1bc..57219d45e19 100644 --- a/tests/robotests/src/com/android/settings/print/PrintSettingsFragmentTest.java +++ b/tests/robotests/src/com/android/settings/print/PrintSettingsFragmentTest.java @@ -22,6 +22,8 @@ import static org.mockito.Mockito.when; import android.app.Activity; import android.content.res.Resources; +import android.print.PrintJob; +import android.print.PrintJobInfo; import android.print.PrintManager; import android.printservice.PrintServiceInfo; @@ -34,9 +36,11 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import java.util.ArrayList; import java.util.List; @@ -62,6 +66,19 @@ public class PrintSettingsFragmentTest { mPrintManager); } + @Test + public void testSummary_hasActiveJob_shouldSetSummaryToNumberOfJobs() { + final List printJobs = new ArrayList<>(); + final PrintJob job = mock(PrintJob.class, Mockito.RETURNS_DEEP_STUBS); + printJobs.add(job); + when(job.getInfo().getState()).thenReturn(PrintJobInfo.STATE_STARTED); + when(mPrintManager.getPrintJobs()).thenReturn(printJobs); + + mSummaryProvider.setListening(true); + + verify(mRes).getQuantityString(R.plurals.print_jobs_summary, 1, 1); + } + @Test public void testSummary_shouldSetSummaryToNumberOfPrintServices() { final List printServices = mock(List.class); @@ -69,7 +86,7 @@ public class PrintSettingsFragmentTest { when(printServices.size()).thenReturn(2); // 2 services when(mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES)) - .thenReturn(printServices); + .thenReturn(printServices); mSummaryProvider.setListening(true);