diff --git a/packages/PrintSpooler/res/layout/select_printer_activity.xml b/packages/PrintSpooler/res/layout/select_printer_activity.xml index 2792dcf17605d..6fc77df16f28f 100644 --- a/packages/PrintSpooler/res/layout/select_printer_activity.xml +++ b/packages/PrintSpooler/res/layout/select_printer_activity.xml @@ -48,6 +48,7 @@ Choose print service - + Searching for printers + + No printers found + diff --git a/packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java b/packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java index 0f2961444d2a4..4ce7d05e52537 100644 --- a/packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java +++ b/packages/PrintSpooler/src/com/android/printspooler/SelectPrinterFragment.java @@ -36,6 +36,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; +import android.database.DataSetObserver; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; @@ -94,7 +95,21 @@ public final class SelectPrinterFragment extends ListFragment { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - setListAdapter(new DestinationAdapter()); + final DestinationAdapter adapter = new DestinationAdapter(); + adapter.registerDataSetObserver(new DataSetObserver() { + @Override + public void onChanged() { + if (adapter.getCount() <= 0) { + updateEmptyView(adapter); + } + } + + @Override + public void onInvalidated() { + updateEmptyView(adapter); + } + }); + setListAdapter(adapter); View emptyView = getActivity().findViewById(R.id.empty_print_state); getListView().setEmptyView(emptyView); } @@ -214,6 +229,18 @@ public final class SelectPrinterFragment extends ListFragment { transaction.commit(); } + public void updateEmptyView(DestinationAdapter adapter) { + TextView titleView = (TextView) getActivity().findViewById(R.id.title); + View progressBar = getActivity().findViewById(R.id.progress_bar); + if (adapter.getUnfilteredCount() <= 0) { + titleView.setText(R.string.print_searching_for_printers); + progressBar.setVisibility(View.VISIBLE); + } else { + titleView.setText(R.string.print_no_printers); + progressBar.setVisibility(View.GONE); + } + } + public static class AddPrinterAlertDialogFragment extends DialogFragment { private String mAddPrintServiceItem; @@ -339,6 +366,12 @@ public final class SelectPrinterFragment extends ListFragment { }; } + public int getUnfilteredCount() { + synchronized (mLock) { + return mPrinters.size(); + } + } + @Override public int getCount() { synchronized (mLock) {