Merge "Add # of active print jobs back to print setting summary"

This commit is contained in:
TreeHugger Robot
2017-05-27 01:25:44 +00:00
committed by Android (Google) Code Review
2 changed files with 80 additions and 30 deletions

View File

@@ -164,8 +164,7 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment
/** /**
* Adds preferences for all print services to the {@value PRINT_SERVICES_CATEGORY} cathegory. * Adds preferences for all print services to the {@value PRINT_SERVICES_CATEGORY} cathegory.
*/ */
private final class PrintServicesController implements private final class PrintServicesController implements LoaderCallbacks<List<PrintServiceInfo>> {
LoaderCallbacks<List<PrintServiceInfo>> {
@Override @Override
public Loader<List<PrintServiceInfo>> onCreateLoader(int id, Bundle args) { public Loader<List<PrintServiceInfo>> onCreateLoader(int id, Bundle args) {
PrintManager printManager = PrintManager printManager =
@@ -290,7 +289,7 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment
} }
} }
private final class PrintJobsController implements LoaderCallbacks<List<PrintJobInfo>> { private final class PrintJobsController implements LoaderCallbacks<List<PrintJobInfo>> {
@Override @Override
public Loader<List<PrintJobInfo>> onCreateLoader(int id, Bundle args) { public Loader<List<PrintJobInfo>> onCreateLoader(int id, Bundle args) {
@@ -326,7 +325,7 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment
switch (printJob.getState()) { switch (printJob.getState()) {
case PrintJobInfo.STATE_QUEUED: case PrintJobInfo.STATE_QUEUED:
case PrintJobInfo.STATE_STARTED: { case PrintJobInfo.STATE_STARTED:
if (!printJob.isCancelling()) { if (!printJob.isCancelling()) {
preference.setTitle(getString( preference.setTitle(getString(
R.string.print_printing_state_title_template, R.string.print_printing_state_title_template,
@@ -336,15 +335,13 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment
R.string.print_cancelling_state_title_template, R.string.print_cancelling_state_title_template,
printJob.getLabel())); printJob.getLabel()));
} }
} break; break;
case PrintJobInfo.STATE_FAILED:
case PrintJobInfo.STATE_FAILED: {
preference.setTitle(getString( preference.setTitle(getString(
R.string.print_failed_state_title_template, R.string.print_failed_state_title_template,
printJob.getLabel())); printJob.getLabel()));
} break; break;
case PrintJobInfo.STATE_BLOCKED:
case PrintJobInfo.STATE_BLOCKED: {
if (!printJob.isCancelling()) { if (!printJob.isCancelling()) {
preference.setTitle(getString( preference.setTitle(getString(
R.string.print_blocked_state_title_template, R.string.print_blocked_state_title_template,
@@ -354,7 +351,7 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment
R.string.print_cancelling_state_title_template, R.string.print_cancelling_state_title_template,
printJob.getLabel())); printJob.getLabel()));
} }
} break; break;
} }
preference.setSummary(getString(R.string.print_job_summary, preference.setSummary(getString(R.string.print_job_summary,
@@ -364,14 +361,13 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment
switch (printJob.getState()) { switch (printJob.getState()) {
case PrintJobInfo.STATE_QUEUED: case PrintJobInfo.STATE_QUEUED:
case PrintJobInfo.STATE_STARTED: { case PrintJobInfo.STATE_STARTED:
preference.setIcon(R.drawable.ic_print); preference.setIcon(R.drawable.ic_print);
} break; break;
case PrintJobInfo.STATE_FAILED: case PrintJobInfo.STATE_FAILED:
case PrintJobInfo.STATE_BLOCKED: { case PrintJobInfo.STATE_BLOCKED:
preference.setIcon(R.drawable.ic_print_error); preference.setIcon(R.drawable.ic_print_error);
} break; break;
} }
Bundle extras = preference.getExtras(); Bundle extras = preference.getExtras();
@@ -475,7 +471,7 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment
PrintJobInfo printJob = printJobs.get(i).getInfo(); PrintJobInfo printJob = printJobs.get(i).getInfo();
if (shouldShowToUser(printJob)) { if (shouldShowToUser(printJob)) {
if (printJobInfos == null) { if (printJobInfos == null) {
printJobInfos = new ArrayList<PrintJobInfo>(); printJobInfos = new ArrayList<>();
} }
printJobInfos.add(printJob); printJobInfos.add(printJob);
} }
@@ -505,8 +501,9 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment
/** /**
* Provider for the print settings summary * Provider for the print settings summary
*/ */
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) @VisibleForTesting
static class PrintSummaryProvider implements SummaryLoader.SummaryProvider { static class PrintSummaryProvider
implements SummaryLoader.SummaryProvider, PrintJobStateChangeListener {
private final Context mContext; private final Context mContext;
private final PrintManagerWrapper mPrintManager; private final PrintManagerWrapper mPrintManager;
private final SummaryLoader mSummaryLoader; private final SummaryLoader mSummaryLoader;
@@ -528,19 +525,43 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment
public void setListening(boolean isListening) { public void setListening(boolean isListening) {
if (mPrintManager != null) { if (mPrintManager != null) {
if (isListening) { if (isListening) {
List<PrintServiceInfo> services = mPrintManager.addPrintJobStateChanegListner(this);
mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES); onPrintJobStateChanged(null);
if (services == null || services.isEmpty()) { } else {
mSummaryLoader.setSummary(this, mPrintManager.removePrintJobStateChangeListener(this);
mContext.getString(R.string.print_settings_summary_no_service)); }
} else { }
final int count = services.size(); }
mSummaryLoader.setSummary(this,
mContext.getResources().getQuantityString( @Override
R.plurals.print_settings_summary, count, count)); public void onPrintJobStateChanged(PrintJobId printJobId) {
final List<PrintJob> 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<PrintServiceInfo> 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 { static class PrintManagerWrapper {
@@ -555,6 +576,18 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment
public List<PrintServiceInfo> getPrintServices(int selectionFlags) { public List<PrintServiceInfo> getPrintServices(int selectionFlags) {
return mPrintManager.getPrintServices(selectionFlags); return mPrintManager.getPrintServices(selectionFlags);
} }
public void addPrintJobStateChanegListner(PrintJobStateChangeListener listener) {
mPrintManager.addPrintJobStateChangeListener(listener);
}
public void removePrintJobStateChangeListener(PrintJobStateChangeListener listener) {
mPrintManager.removePrintJobStateChangeListener(listener);
}
public List<PrintJob> getPrintJobs() {
return mPrintManager.getPrintJobs();
}
} }
} }

View File

@@ -22,6 +22,8 @@ import static org.mockito.Mockito.when;
import android.app.Activity; import android.app.Activity;
import android.content.res.Resources; import android.content.res.Resources;
import android.print.PrintJob;
import android.print.PrintJobInfo;
import android.print.PrintManager; import android.print.PrintManager;
import android.printservice.PrintServiceInfo; import android.printservice.PrintServiceInfo;
@@ -34,9 +36,11 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -62,6 +66,19 @@ public class PrintSettingsFragmentTest {
mPrintManager); mPrintManager);
} }
@Test
public void testSummary_hasActiveJob_shouldSetSummaryToNumberOfJobs() {
final List<PrintJob> 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 @Test
public void testSummary_shouldSetSummaryToNumberOfPrintServices() { public void testSummary_shouldSetSummaryToNumberOfPrintServices() {
final List<PrintServiceInfo> printServices = mock(List.class); final List<PrintServiceInfo> printServices = mock(List.class);
@@ -69,7 +86,7 @@ public class PrintSettingsFragmentTest {
when(printServices.size()).thenReturn(2); when(printServices.size()).thenReturn(2);
// 2 services // 2 services
when(mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES)) when(mPrintManager.getPrintServices(PrintManager.ENABLED_SERVICES))
.thenReturn(printServices); .thenReturn(printServices);
mSummaryProvider.setListening(true); mSummaryProvider.setListening(true);