コード例 #1
0
 // just for debug
 public void showContactsInfo() {
   int contactsCount = ContactsHelper.getInstance().getBaseContacts().size();
   for (int i = 0; i < contactsCount; i++) {
     Contacts currentCoutacts = null;
     for (currentCoutacts = ContactsHelper.getInstance().getBaseContacts().get(i);
         null != currentCoutacts;
         currentCoutacts = currentCoutacts.getNextContacts()) {
       Log.i(TAG, "======================================================================");
       String name = currentCoutacts.getName();
       List<PinyinUnit> pinyinUnit = currentCoutacts.getNamePinyinUnits();
       Log.i(
           TAG,
           "++++++++++++++++++++++++++++++:name=["
               + name
               + "] phoneNumber"
               + currentCoutacts.getPhoneNumber()
               + currentCoutacts.isHideMultipleContacts()
               + "firstCharacter=["
               + PinyinUtil.getFirstCharacter(pinyinUnit)
               + "]"
               + "firstLetter=["
               + PinyinUtil.getFirstLetter(pinyinUnit)
               + "]"
               + "+++++++++++++++++++++++++++++");
       int pinyinUnitCount = pinyinUnit.size();
       for (int j = 0; j < pinyinUnitCount; j++) {
         PinyinUnit pyUnit = pinyinUnit.get(j);
         Log.i(
             TAG,
             "j="
                 + j
                 + ",isPinyin["
                 + pyUnit.isPinyin()
                 + "],startPosition=["
                 + pyUnit.getStartPosition()
                 + "]");
         List<PinyinBaseUnit> stringIndex = pyUnit.getPinyinBaseUnitIndex();
         int stringIndexLength = stringIndex.size();
         for (int k = 0; k < stringIndexLength; k++) {
           Log.i(
               TAG,
               "k="
                   + k
                   + "["
                   + stringIndex.get(k).getOriginalString()
                   + "]"
                   + "["
                   + stringIndex.get(k).getPinyin()
                   + "]+["
                   + stringIndex.get(k).getNumber()
                   + "]");
         }
       }
     }
   }
 }
コード例 #2
0
  /**
   * @description search base data according to string parameter
   * @param search
   * @return void
   */
  public void parseQwertyInputSearchContacts(String search) {
    if (null == search) { // add all base data to search
      if (null != mSearchContacts) {
        mSearchContacts.clear();
      } else {
        mSearchContacts = new ArrayList<Contacts>();
      }

      for (int i = 0; i < mBaseContacts.size(); i++) {
        Contacts currentContacts = null;
        for (currentContacts = mBaseContacts.get(i);
            null != currentContacts;
            currentContacts = currentContacts.getNextContacts()) {
          currentContacts.setSearchByType(SearchByType.SearchByNull);
          currentContacts.clearMatchKeywords();
          currentContacts.setMatchStartIndex(-1);
          currentContacts.setMatchLength(0);
          if (true == currentContacts.isFirstMultipleContacts()) {
            mSearchContacts.add(currentContacts);
          } else {
            if (false == currentContacts.isHideMultipleContacts()) {
              mSearchContacts.add(currentContacts);
            }
          }
        }
      }

      // mSearchContacts.addAll(mBaseContacts);
      mFirstNoSearchResultInput.delete(0, mFirstNoSearchResultInput.length());
      Log.i(
          TAG,
          "null==search,mFirstNoSearchResultInput.length()=" + mFirstNoSearchResultInput.length());
      return;
    }

    if (mFirstNoSearchResultInput.length() > 0) {
      if (search.contains(mFirstNoSearchResultInput.toString())) {
        Log.i(
            TAG,
            "no need  to search,null!=search,mFirstNoSearchResultInput.length()="
                + mFirstNoSearchResultInput.length()
                + "["
                + mFirstNoSearchResultInput.toString()
                + "]"
                + ";searchlen="
                + search.length()
                + "["
                + search
                + "]");
        return;
      } else {
        Log.i(
            TAG,
            "delete  mFirstNoSearchResultInput, null!=search,mFirstNoSearchResultInput.length()="
                + mFirstNoSearchResultInput.length()
                + "["
                + mFirstNoSearchResultInput.toString()
                + "]"
                + ";searchlen="
                + search.length()
                + "["
                + search
                + "]");
        mFirstNoSearchResultInput.delete(0, mFirstNoSearchResultInput.length());
      }
    }

    if (null != mSearchContacts) {
      mSearchContacts.clear();
    } else {
      mSearchContacts = new ArrayList<Contacts>();
    }

    int contactsCount = mBaseContacts.size();

    /**
     * search process: 1:Search by name (1)Search by original name (2)Search by name pinyin
     * characters(original name->name pinyin characters) 2:Search by phone number
     */
    for (int i = 0; i < contactsCount; i++) {

      List<PinyinUnit> pinyinUnits = mBaseContacts.get(i).getNamePinyinUnits();
      StringBuffer chineseKeyWord =
          new StringBuffer(); // In order to get Chinese KeyWords.Ofcourse it's maybe not Chinese
                              // characters.

      String name = mBaseContacts.get(i).getName();
      if (true
          == QwertyMatchPinyinUnits.matchPinyinUnits(
              pinyinUnits, name, search, chineseKeyWord)) { // search by NamePinyinUnits;
        Contacts currentContacts = null;
        Contacts firstContacts = null;
        for (currentContacts = mBaseContacts.get(i), firstContacts = currentContacts;
            null != currentContacts;
            currentContacts = currentContacts.getNextContacts()) {
          currentContacts.setSearchByType(SearchByType.SearchByName);
          currentContacts.setMatchKeywords(chineseKeyWord.toString());
          currentContacts.setMatchStartIndex(
              firstContacts.getName().indexOf(firstContacts.getMatchKeywords().toString()));
          currentContacts.setMatchLength(firstContacts.getMatchKeywords().length());
          mSearchContacts.add(currentContacts);
        }
        chineseKeyWord.delete(0, chineseKeyWord.length());

        continue;
      } else {
        Contacts currentContacts = null;
        for (currentContacts = mBaseContacts.get(i);
            null != currentContacts;
            currentContacts = currentContacts.getNextContacts()) {
          if (currentContacts.getPhoneNumber().contains(search)) { // search by phone number
            currentContacts.setSearchByType(SearchByType.SearchByPhoneNumber);
            currentContacts.setMatchKeywords(search);
            currentContacts.setMatchStartIndex(currentContacts.getPhoneNumber().indexOf(search));
            currentContacts.setMatchLength(search.length());
            mSearchContacts.add(currentContacts);
          }
        }
        continue;
      }
    }

    if (mSearchContacts.size() <= 0) {
      if (mFirstNoSearchResultInput.length() <= 0) {
        mFirstNoSearchResultInput.append(search);
        Log.i(
            TAG,
            "no search result,null!=search,mFirstNoSearchResultInput.length()="
                + mFirstNoSearchResultInput.length()
                + "["
                + mFirstNoSearchResultInput.toString()
                + "]"
                + ";searchlen="
                + search.length()
                + "["
                + search
                + "]");
      } else {

      }
    } else {
      Collections.sort(mSearchContacts, Contacts.mSearchComparator);
    }
  }