if (subString.length() > 0) { addToken(subString, tokens, tokenType); addOffsets(subStrOffset, shortSubStrOffset); } tokens.add(t); for(int j=0; j < tokenSize;j++) subStrOffset.append((char)mPos); addOffsets(subStrOffset,shortSubStrOffset); tokenType = Token.PINYIN; caseTypePre = DialerSearchToken.FIRSTCASE; mPos++; } else { //Comment out. Do not cover special characters SINCE they can not be input. // if (tokenType != t.type && subString.length() > 0) { // addToken(subString, tokens, tokenType); // addOffsets(subStrOffset, shortSubStrOffset); // caseTypePre = Token.FIRSTCASE; // }else{ // caseTypeCurr = (character>='A' && character<='Z') Token.UPPERCASE:Token.LOWERCASE; // if(caseTypePre == Token.LOWERCASE && caseTypeCurr == Token.UPPERCASE){ // addToken(subString, tokens, tokenType); // addOffsets(subStrOffset, shortSubStrOffset); // } // caseTypePre = caseTypeCurr; // } // tokenType = t.type; // Character c = Character.toUpperCase(character); // if(c != null){ // subString.append(c); // subStrOffset.append(mPos); // } mPos++; } } //IF the name string is too long, cut it off to meet the storage request of dialer search. if(mPos > 127) break; } if (subString.length() > 0) { addToken(subString, tokens, tokenType); addOffsets(subStrOffset, shortSubStrOffset); } addSubString(tokens,shortSubStrOffset,subStrSet,offsets); return subStrSet.toString(); } private void addOffsets(final StringBuilder sb, final ArrayList shortSubStrOffset){ String str = sb.toString(); shortSubStrOffset.add(str); sb.setLength(0); } private void addSubString(final ArrayList tokens, final ArrayList shortSubStrOffset, StringBuilder subStrSet, StringBuilder offsets){ if(tokens == null || tokens.isEmpty()) return; int size = tokens.size(); int len = 0; StringBuilder mShortSubStr = new StringBuilder(); StringBuilder mShortSubStrOffsets = new StringBuilder(); StringBuilder mShortSubStrSet = new StringBuilder(); StringBuilder mShortSubStrOffsetsSet = new StringBuilder(); for(int i=size-1; i>=0 ; i--){ String mTempStr = tokens.get(i).target; len += mTempStr.length(); String mTempOffset = shortSubStrOffset.get(i); if(mShortSubStr.length()>0){ mShortSubStr.deleteCharAt(0); mShortSubStrOffsets.deleteCharAt(0); } mShortSubStr.insert(0, mTempStr); mShortSubStr.insert(0,(char)len); mShortSubStrOffsets.insert(0,mTempOffset); mShortSubStrOffsets.insert(0,(char)len); mShortSubStrSet.insert(0,mShortSubStr); mSh |