package com.sogouchat.widget; import java.util.ArrayList; import com.sogouchat.R; import com.sogouchat.bean.TelNode; import com.sogouchat.ui.CreateActivity; import com.sogouchat.ui.SlidingActivity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.text.Spannable; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.style.ClickableSpan; import android.text.style.ImageSpan; import android.util.AttributeSet; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class ContactEditText extends EditText { private CreateActivity mCreate; private String mContent; private Paint mPaint; private String mKeyWord; public ContactEditText(Context context) { super(context); mCreate = (CreateActivity) context; mPaint=new Paint(); mPaint.setTextSize(18); } public ContactEditText(Context context, AttributeSet attrs) { super(context, attrs); mCreate = (CreateActivity) context; mPaint=new Paint(); mPaint.setTextSize(18); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } public void insertTel(TelNode tel){ mCreate.mSelectList.add(tel); mKeyWord=getKeyWord(); updateSelect(); } public void removeTel(TelNode tel){ mCreate.mSelectList.remove(tel); mKeyWord=getKeyWord(); updateSelect(); } private void updateSelect(){ int start=0; int end =0; String content = getText().toString(); SpannableStringBuilder sb = new SpannableStringBuilder(); for(int i=0;i<mCreate.mSelectList.size();i++){ TelNode telNd = mCreate.mSelectList.get(i); String telStr = "["+telNd.mTel+"]"; end = start +telStr.length(); sb.append(telStr); float[] widths = new float[telNd.mName.length()]; mPaint.getTextWidths(telNd.mName, widths); float w=0; for(int ii=0;ii < telNd.mName.length();ii++){ w +=widths[ii]; } Drawable db = getResources().getDrawable(R.drawable.frame); db.setBounds(0, 0, (int) w+24, db.getIntrinsicHeight()); ContactSpan span = new ContactSpan(telNd, db, ImageSpan.ALIGN_BOTTOM); sb.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); ClickableSpan click_span = new ClickableSpan() { @Override public void onClick(View widget) { Toast.makeText(ContactEditText.this.getContext(), "Image Clicked " + "xx", Toast.LENGTH_SHORT).show(); } }; sb.setSpan(click_span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); start +=telStr.length(); } sb.append(mKeyWord); setText(sb); setSelection(getText().length()); } public String getKeyWord(){ String content = getText().toString(); String[] array=content.split("]") ; String keyWord=""; if (content.length() ==0) return keyWord; boolean change; int sInx; for(String s: array) { if(s.charAt(0) !='['){ content += s.substring(1); sInx = s.indexOf('['); if (sInx == -1) keyWord +=s.substring(0); else keyWord += s.substring(0,sInx); } } return keyWord; } public void moveKey(){ String content = getText().toString(); String[] array=content.split("]") ; content = ""; String last=""; boolean change; int sInx; for(String s: array) { if(s.charAt(0) =='['){ content +=s+']'; } else { content += s.substring(1); sInx = s.indexOf('['); if (sInx == -1) last +=s.substring(0); else last += s.substring(0,sInx); } } mKeyWord = last; if (mKeyWord.length()>0&& ( mKeyWord.charAt(mKeyWord.length()-1) == ';' || mKeyWord.charAt(mKeyWord.length()-1) == ';' ) ){ String tel = mKeyWord.substring(0, mKeyWord.length()-1); if (tel.length()>0) { // add a strange tel TelNode telNd = new TelNode(); telNd.mContactId = 0; telNd.mTel = tel; telNd.mName = telNd.mTel; mCreate.mSelectList.add(telNd); } mKeyWord = ""; } else { for(int i=0;i<mCreate.mSelectList.size();i++){ TelNode telNd = mCreate.mSelectList.get(i); // validate telnode if (content.indexOf(telNd.mTel) == -1 ) { //remove it mCreate.mSelectList.remove(i); continue; } } } updateSelect(); } }