From 74648ac808b6a625f6c91035a263822b3765215d Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Wed, 4 Sep 2013 23:52:28 -0700 Subject: [PATCH] Print settings polish 1. Added support for launching the top level print settings. 2. Updated some strings. 3. Removed the uninstall option for a print service. 4. Added search for the list of printers of a print service. Change-Id: I9e175ba78b2d22b2bf90cf79153dc73327dfaff1 --- AndroidManifest.xml | 16 +++ res/menu/print_service_settings.xml | 13 ++- res/menu/print_settings.xml | 4 +- res/values/strings.xml | 6 +- src/com/android/settings/Settings.java | 1 + .../print/PrintServiceSettingsFragment.java | 104 +++++++++++++++--- .../settings/print/PrintSettingsFragment.java | 2 +- 7 files changed, 121 insertions(+), 25 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index b2e5179889f..28165a7ce29 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1132,6 +1132,22 @@ android:resource="@id/development_settings" /> + + + + + + + + + + + + + - - diff --git a/res/menu/print_settings.xml b/res/menu/print_settings.xml index 44ddf50465c..9df1181ef5a 100644 --- a/res/menu/print_settings.xml +++ b/res/menu/print_settings.xml @@ -16,8 +16,8 @@ diff --git a/res/values/strings.xml b/res/values/strings.xml index 5323300afd7..d263e707ec7 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3418,13 +3418,13 @@ Off - I don\'t see mine + Add service Add printer - - Uninstall + + Search Printers diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 35fe885c56e..29945be766a 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -960,4 +960,5 @@ public class Settings extends PreferenceActivity public static class UsbSettingsActivity extends Settings { /* empty */ } public static class TrustedCredentialsSettingsActivity extends Settings { /* empty */ } public static class PaymentSettingsActivity extends Settings { /* empty */ } + public static class PrintSettingsActivity extends Settings { /* empty */ } } diff --git a/src/com/android/settings/print/PrintServiceSettingsFragment.java b/src/com/android/settings/print/PrintServiceSettingsFragment.java index c65e43e4e95..73b13cba567 100644 --- a/src/com/android/settings/print/PrintServiceSettingsFragment.java +++ b/src/com/android/settings/print/PrintServiceSettingsFragment.java @@ -50,6 +50,9 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; +import android.widget.Filter; +import android.widget.Filterable; +import android.widget.SearchView; import android.widget.TextView; import com.android.settings.R; @@ -284,10 +287,20 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment menu.removeItem(R.id.print_menu_item_settings); } - MenuItem uninstall = menu.findItem(R.id.print_menu_item_uninstall); - Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, - Uri.parse("package:" + mComponentName.getPackageName())); - uninstall.setIntent(uninstallIntent); + MenuItem searchItem = menu.findItem(R.id.print_menu_item_search); + SearchView searchView = (SearchView) searchItem.getActionView(); + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + return true; + } + + @Override + public boolean onQueryTextChange(String searchString) { + ((Filterable) getListView().getAdapter()).getFilter().filter(searchString); + return true; + } + }); } private ToggleSwitch createAndAddActionBarToggleSwitch(Activity activity) { @@ -325,21 +338,74 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment } private final class PrintersAdapter extends BaseAdapter - implements LoaderManager.LoaderCallbacks>{ + implements LoaderManager.LoaderCallbacks>, Filterable { + private final Object mLock = new Object(); + private final List mPrinters = new ArrayList(); + private final List mFilteredPrinters = new ArrayList(); + + private CharSequence mLastSearchString; + public PrintersAdapter() { getLoaderManager().initLoader(LOADER_ID_PRINTERS_LOADER, null, this); } + @Override + public Filter getFilter() { + return new Filter() { + @Override + protected FilterResults performFiltering(CharSequence constraint) { + synchronized (mLock) { + if (TextUtils.isEmpty(constraint)) { + return null; + } + FilterResults results = new FilterResults(); + List filteredPrinters = new ArrayList(); + String constraintLowerCase = constraint.toString().toLowerCase(); + final int printerCount = mPrinters.size(); + for (int i = 0; i < printerCount; i++) { + PrinterInfo printer = mPrinters.get(i); + if (printer.getName().toLowerCase().contains(constraintLowerCase)) { + filteredPrinters.add(printer); + } + } + results.values = filteredPrinters; + results.count = filteredPrinters.size(); + return results; + } + } + + @Override + @SuppressWarnings("unchecked") + protected void publishResults(CharSequence constraint, FilterResults results) { + synchronized (mLock) { + mLastSearchString = constraint; + mFilteredPrinters.clear(); + if (results == null) { + mFilteredPrinters.addAll(mPrinters); + } else { + List printers = (List) results.values; + mFilteredPrinters.addAll(printers); + } + } + notifyDataSetChanged(); + } + }; + } + @Override public int getCount() { - return mPrinters.size(); + synchronized (mLock) { + return mFilteredPrinters.size(); + } } @Override public Object getItem(int position) { - return mPrinters.get(position); + synchronized (mLock) { + return mFilteredPrinters.get(position); + } } @Override @@ -391,12 +457,19 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment @Override public void onLoadFinished(Loader> loader, List printers) { - mPrinters.clear(); - final int printerCount = printers.size(); - for (int i = 0; i < printerCount; i++) { - PrinterInfo printer = printers.get(i); - if (printer.getId().getServiceName().equals(mComponentName)) { - mPrinters.add(printer); + synchronized (mLock) { + mPrinters.clear(); + final int printerCount = printers.size(); + for (int i = 0; i < printerCount; i++) { + PrinterInfo printer = printers.get(i); + if (printer.getId().getServiceName().equals(mComponentName)) { + mPrinters.add(printer); + } + } + mFilteredPrinters.clear(); + mFilteredPrinters.addAll(mPrinters); + if (!TextUtils.isEmpty(mLastSearchString)) { + getFilter().filter(mLastSearchString); } } notifyDataSetChanged(); @@ -404,7 +477,10 @@ public class PrintServiceSettingsFragment extends SettingsPreferenceFragment @Override public void onLoaderReset(Loader> loader) { - mPrinters.clear(); + synchronized (mLock) { + mPrinters.clear(); + mFilteredPrinters.clear(); + } notifyDataSetInvalidated(); } } diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java index 6e7f52817d2..d2548421f71 100644 --- a/src/com/android/settings/print/PrintSettingsFragment.java +++ b/src/com/android/settings/print/PrintSettingsFragment.java @@ -111,7 +111,7 @@ public class PrintSettingsFragment extends SettingsPreferenceFragment implements public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.print_settings, menu); - MenuItem menuItem = menu.findItem(R.id.print_menu_item_download_print_service); + MenuItem menuItem = menu.findItem(R.id.print_menu_item_add_service); menuItem.setIntent(new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.download_print_service_query)))); }