/talkingdialer/src/com/google/marvin/talkingdialer/FilterableContactsList.java

http://eyes-free.googlecode.com/ · Java · 68 lines · 58 code · 10 blank · 0 comment · 11 complexity · d66cb538f3af5c1277f5f8d8151b4d2d MD5 · raw file

  1. package com.google.marvin.talkingdialer;
  2. import java.util.ArrayList;
  3. import java.util.ListIterator;
  4. public class FilterableContactsList {
  5. private ArrayList<ContactEntry> fullList;
  6. private ArrayList<ContactEntry> filteredList;
  7. private ListIterator<ContactEntry> filteredListIter;
  8. @SuppressWarnings("unchecked")
  9. public FilterableContactsList(ArrayList<String> names) {
  10. fullList = new ArrayList<ContactEntry>();
  11. for (int i = 0; i < names.size(); i++) {
  12. fullList.add(new ContactEntry(names.get(i), i));
  13. }
  14. filteredList = (ArrayList<ContactEntry>) fullList.clone();
  15. filteredListIter = filteredList.listIterator();
  16. }
  17. public ContactEntry next() {
  18. if (filteredList.size() < 1) {
  19. return null;
  20. }
  21. if (!filteredListIter.hasNext()) {
  22. filteredListIter = filteredList.listIterator();
  23. }
  24. return filteredListIter.next();
  25. }
  26. public ContactEntry previous() {
  27. if (filteredList.size() < 1) {
  28. return null;
  29. }
  30. if (!filteredListIter.hasPrevious()) {
  31. filteredListIter = filteredList.listIterator(filteredList.size());
  32. }
  33. return filteredListIter.previous();
  34. }
  35. @SuppressWarnings("unchecked")
  36. public boolean filter(String partialName) {
  37. filteredList = (ArrayList<ContactEntry>) fullList.clone();
  38. filteredListIter = filteredList.listIterator();
  39. if (partialName.length() > 0) {
  40. String lcPN = partialName.toLowerCase();
  41. filteredList = new ArrayList<ContactEntry>();
  42. for (int i = 0; i < fullList.size(); i++) {
  43. ContactEntry entry = fullList.get(i);
  44. if (entry.name != null) {
  45. String lcName = entry.name.toLowerCase();
  46. if (lcName.startsWith(lcPN)) {
  47. filteredList.add(entry);
  48. }
  49. }
  50. }
  51. filteredListIter = filteredList.listIterator();
  52. }
  53. if (filteredList.size() > 0) {
  54. return true;
  55. }
  56. return false;
  57. }
  58. }