// 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() + "]"); } } } } }
/** * @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); } }