diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index cf7a5b234c6..493d7f4d626 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 dae3f6e3e0a..ded01d92f97 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3420,13 +3420,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 febb5b6857d..62d4aa899c6 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -962,4 +962,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))));
}