package com.shang.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.shang.test.Face.GridAdapter;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Typeface;
import android.graphics.Paint.FontMetricsInt;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.Html.ImageGetter;
import android.text.style.ForegroundColorSpan;
import android.text.style.LeadingMarginSpan;
import android.text.style.LineHeightSpan;
import android.text.style.StyleSpan;
import android.text.style.TextAppearanceSpan;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.QuickContactBadge;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.TextView.OnEditorActionListener;
/**
*
* @author qintao
*
*/
public class TestBaseAdapter extends Activity implements OnEditorActionListener {
private ListView mListView;
private View mMms_content;
private static int i = 0;
private EditText mTextEditor;
private TextView mTextCounter;
Pattern mHighlight;
private Context contexts;
private BaseListAdapter baseListAdapter = null;
private int[] list;
private GridView gridview ;
private GridAdapter adapter;
private EditText mEditText;
private Button send;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.baseadapterlist);
this.contexts = this;
list = Smileys.sIconIds;
gridview = (GridView) findViewById(R.id.faces);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE |WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
// mTextEditor = (EditText)findViewById(R.id.embedded_text_editor);
// mTextEditor.requestFocus();
// mTextEditor.setOnEditorActionListener(this);
// mTextEditor.addTextChangedListener(mTextEditorWatcher);
mListView = (ListView) findViewById(R.id.baselist);
Button face = (Button)findViewById(R.id.face);
face.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
gridview.setVisibility(View.VISIBLE);
}
});
SmileyParser.init(getBaseContext());
((ListView) mListView).setDivider(null);
if(baseListAdapter == null) baseListAdapter = new BaseListAdapter(this);
mListView.setAdapter(baseListAdapter);
mEditText = (EditText) findViewById(R.id.edit_text);
adapter = new GridAdapter(contexts);
adapter.setList(list);
gridview.setAdapter(adapter);
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
ImageGetter imageGetter = new ImageGetter() {
public Drawable getDrawable(String source) {
int id = Integer.parseInt(source);
Drawable d = getResources().getDrawable(id);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
return d;
}
};
CharSequence cs = Html.fromHtml("<img
src='" + list[position]+ "'/>",imageGetter,null);
mEditText.getText().append(cs);
//faceContent =FilterHtml(Html.toHtml(mEditText.getText()));
}
});
send = (Button)findViewById(R.id.send);
send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//Toast.makeText(TestBaseAdapter.this, Html.toHtml(mEditText.getText()), Toast.LENGTH_SHORT).show();
Message msg = new Message();
msg.what=0;
mHandler.sendMessage(msg);
}
});
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(20000);
Message msg = new Message();
msg.what=0;
mHandler.sendMessage(msg);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
public Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what == 0){
List<HashMap<String, Object>> a = getData();
if(!"".equals(mEditText.getText())){
HashMap<String, Object> bHashMap = new HashMap<String, Object>();
bHashMap.put("image", R.drawable.s);
bHashMap.put("title", "");
bHashMap.put("info", FilterHtml(Html.toHtml(mEditText.getText())));
bHashMap.put("times", "cccccccccc");
a.add(bHashMap);
}
a.get(2).put("info", "aaaaaaaaaaaaa");
a.get(3).put("info","bbbbbbbbbbbbbbb");
//BaseListAdapter adapter = new BaseListAdapter(contexts);
baseListAdapter.reSetList(a);
baseListAdapter.notifyDataSetChanged();
System.out.println("ccccccccccccccc");
}else{
System.out.println("bbbb");
}
}
};
private void ensureCorrectButtonHeight() {
int currentTextLines = mTextEditor.getLineCount();
if (currentTextLines <= 2) {
mTextCounter.setVisibility(View.GONE);
} else if (currentTextLines > 2 && mTextCounter.getVisibility() == View.GONE) {
// Making the counter invisible ensures that it is used to correctly
// calculate the position of the send button even if we choose not
// to
// display the text.
mTextCounter.setVisibility(View.INVISIBLE);
}
}
private final TextWatcher mTextEditorWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
// This is a workaround for bug 1609057. Since onUserInteraction()
// is
// not called when the user touches the soft keyboard, we pretend it
// was
// called when textfields changes. This should be removed when the
// bug
// is fixed.
onUserInteraction();
// mWorkingMessage.setText(s);
// updateSendButtonState();
// updateCounter(s, start, before, count);
ensureCorrectButtonHeight();
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
};
private List<HashMap<String, Object>> getData() {
List<HashMap<String, Object>> maps = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("image", R.drawable.s);
map.put("title", "");
map.put("info", "噢~好吧,:-):-):-):-)agc@126.com"+"<img
src='" + list[5]+ "'/>"+"");
map.put("times", "10:30");
maps.add(map);
map = new HashMap<String, Object>();
map.put("image", R.drawable.d);
map.put("title", "");
map.put("info", "o_O
13888888888 记住"+"<img src='" + list[8]+ "'/>");
map.put("times", "半天前");
maps.add(map);
map = new HashMap<String, Object>();
map.put("image", R.drawable.s);
map.put("title", "");
map.put("info", "O:-)哎呀~别问了!");
map.put("times", "1天前");
maps.add(map);
map = new HashMap<String, Object>();
map.put("image", R.drawable.d);
map.put("title", "");
map.put("info", "www.douban.com
推荐阿");
map.put("times", "1天前");
maps.add(map);
return maps;
}
private class BaseListAdapter extends BaseAdapter implements OnClickListener {
private Context mContext;
private LayoutInflater inflater;
private List<HashMap<String, Object>> mList;
public BaseListAdapter(Context mContext) {
this.mContext = mContext;
mList = getData();
inflater = LayoutInflater.from(mContext);
}
public void reSetList(List<HashMap<String, Object>> list){
Log.v("mlist", list.get(2).get("info")+"********************");
mList = list;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
// QuickContactBadge mLeft_Avatar = (QuickContactBadge)
// findViewById(R.id.left_avatar);
// QuickContactBadge mRight_Avatar = (QuickContactBadge)
// findViewById(R.id.right_avatar);
// mMms_content.setBackgroundResource(R.drawable.droid_widget_focused);
// mMms_content.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.droid_widget_focused));
QuickContactBadge mLeft_Avatar = null;
QuickContactBadge mRight_Avatar = null;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.testbaseadapter, null);
viewHolder.img = (ImageView) convertView.findViewById(R.id.img);
viewHolder.title = (TextView) convertView.findViewById(R.id.title);
viewHolder.info = (TextView) convertView.findViewById(R.id.info);
viewHolder.times = (TextView) convertView.findViewById(R.id.times);
// viewHolder.button = (Button)
// convertView.findViewById(R.id.basebutton);
mMms_content = (View) convertView.findViewById(R.id.mms_content);
mMms_content.setBackgroundResource(R.drawable.droid_widget_focused);
mLeft_Avatar = (QuickContactBadge) convertView.findViewById(R.id.left_avatar);
mRight_Avatar = (QuickContactBadge) convertView.findViewById(R.id.right_avatar);
mLeft_Avatar.setImageDrawable(getResources().getDrawable(R.drawable.icon));
mRight_Avatar.setImageDrawable(getResources().getDrawable(R.drawable.icon));
convertView.setTag(viewHolder);
if (i % 2 == 0) {
mLeft_Avatar.setVisibility(View.GONE);
mRight_Avatar.setVisibility(View.VISIBLE);
// viewHolder.times.setVisibility(View.GONE);
viewHolder.times.setText((CharSequence) mList.get(position).get("times"));
mMms_content.setBackgroundResource(R.drawable.droid_widget_focused);
} else {
mLeft_Avatar.setVisibility(View.VISIBLE);
mRight_Avatar.setVisibility(View.GONE);
viewHolder.times.setVisibility(View.GONE);
// viewHolder.times.setText((CharSequence)
// getData().get(position).get("times"));
mMms_content.setBackgroundResource(R.drawable.droid_widget_focused_left);
Log.v("++++++++++++", "aaaaaaaa");
}
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
Log.v("i----", "" + i);
i++;
System.out.println("viewHolder
= " + viewHolder);
CharSequence formattedMessage;
formattedMessage = formatMessage((String) mList.get(position).get("info"),mHighlight);
viewHolder.img.setBackgroundResource((Integer) mList.get(position).get("image"));
viewHolder.title.setText((CharSequence) mList.get(position).get("title"));
//viewHolder.info.setText((CharSequence) getData().get(position).get("info"));
//viewHolder.info.setText(formattedMessage);
// viewHolder.button.setOnClickListener(this);
ImageGetter imageGetter = new ImageGetter() {
public Drawable getDrawable(String source) {
int id = Integer.parseInt(source);
Drawable d = getResources().getDrawable(id);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
return d;
}
};
CharSequence cs = Html.fromHtml(mList.get(position).get("info").toString(),imageGetter,null);
//mEditText.getText().append(cs);
viewHolder.info.setText(cs);
return convertView;
}
class ViewHolder {
ImageView img;
TextView title;
TextView info;
TextView times;
// Button button;
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.basebutton:
showInfo();
break;
}
}
private void showInfo() {
new AlertDialog.Builder(TestBaseAdapter.this).setTitle("my
listview").setMessage("introduce....").setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).show();
}
}
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event != null) {
// if shift key is down, then we want to insert the '\n' char in the
// TextView;
// otherwise, the default action is to send the message.
// dengll 20110228 modify for PROD02224767 begin
/*
* if (!event.isShiftPressed()) {
*/
if (!event.isShiftPressed() && event.getKeyCode() != KeyEvent.KEYCODE_ENTER) {
// dengll 20110228 modify for PROD02224767 end
// if (isPreparedForSending()) {
// confirmSendMessageIfNeeded();
// }
return true;
}
return false;
}
// if (isPreparedForSending()) {
// confirmSendMessageIfNeeded();
// }
return true;
}
private LeadingMarginSpan mLeadingMarginSpan;
private LineHeightSpan mSpan = new LineHeightSpan() {
public void chooseHeight(CharSequence text, int start,
int end, int spanstartv, int v, FontMetricsInt
fm) {
fm.ascent -= 10;
}
};
ForegroundColorSpan mColorSpan = null;
private CharSequence formatMessage(String body,Pattern highlight) {
//CharSequence template = getResources().getText(R.string.name_colon);
SpannableStringBuilder buf = new SpannableStringBuilder();
// boolean hasSubject = !TextUtils.isEmpty(subject);
// if (hasSubject) {
// buf.append(getResources().getString(R.string.inline_subject, subject));
// }
String contentType = null;
if (!TextUtils.isEmpty(body)) {
// Converts html to spannable if ContentType is "text/html".
if (contentType != null ) {
buf.append("\n");
buf.append(Html.fromHtml(body));
} else {
// if (hasSubject) {
// buf.append(" - ");
// }
SmileyParser parser = SmileyParser.getInstance();
buf.append(parser.addSmileySpans(body));
}
}
// If we're in the process of sending a message (i.e. pending), then we
// show a "Sending..."
// string in place of the timestamp.
// We always show two lines because the optional icon bottoms are
// aligned with the
// bottom of the text field, assuming there are two lines for the
// message and the sent time.
int startOffset = buf.length();
StringBuilder sentTo = new StringBuilder();
try {
// ContactList recipients = ((ComposeMessageActivity) mContext).mConversation.getRecipients();
// if (recipients.size() != 1 && !msgItem.isMms()) {
// boolean fromcontact = false;
// Iterator<Contact> it = recipients.iterator();
//
// while (it.hasNext()) {
// Contact recipient = it.next();
// if (recipient.getNumber().equals(msgItem.getmSentTo().toString())) {
// sentTo.append("<" + recipient.getNameAndNumber() + ">");
// fromcontact = true;
// break;
// }
//
// }
// if (!fromcontact) {
// sentTo.append("<" + msgItem.getmSentTo() + ">");
// }
// }
} catch (Exception e) {
}
if (sentTo.length() > 0) {
buf.append("\n");
buf.append(sentTo);
buf.setSpan(null, startOffset, buf.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
buf.setSpan(mSpan, startOffset + 1, buf.length(), 0);
// Make the timestamp text not as dark
buf.setSpan(mColorSpan, startOffset, buf.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
if (highlight != null) {
Matcher m = highlight.matcher(buf.toString());
while (m.find()) {
buf.setSpan(new StyleSpan(Typeface.BOLD), m.start(), m.end(), 0);
}
}
buf.setSpan(mLeadingMarginSpan, 0, buf.length(), 0);
return buf;
}
public class GridAdapter extends BaseAdapter {
private class GridHolder {
ImageView appImage;
}
private Context context;
private LayoutInflater mInflater;
private int[] list;
public GridAdapter(Context c) {
super();
this.context = c;
}
public void setList(int[] list) {
this.list = list;
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
// TODO Auto-generated method stub
return list.length;
}
@Override
public Object getItem(int index) {
return list[index];
}
@Override
public long getItemId(int index) {
return index;
}
@Override
public View getView(int index, View convertView, ViewGroup parent) {
GridHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.face_item, null);
holder = new GridHolder();
holder.appImage = (ImageView)convertView.findViewById(R.id.itemImage);
convertView.setTag(holder);
holder.appImage.setImageDrawable(context.getResources()
.getDrawable(list[index]));
}else{
holder = (GridHolder) convertView.getTag();
}
return convertView;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 按下键盘上返回按钮
if (keyCode == KeyEvent.KEYCODE_BACK) {
gridview.setVisibility(View.GONE);
return true;
} else {
return super.onKeyDown(keyCode, event);
}
}
public static String UnicodeToGBK2(String s){
String[] k = s.split(";") ;
String rs = "" ;
for(int i=0;i<k.length;i++) {
int strIndex=k[i].indexOf("&#");
String newstr = k[i];
if(strIndex>-1) {
String kstr = "";
if(strIndex>0) {
kstr = newstr.substring(0,strIndex);
rs+=kstr;
newstr = newstr.substring(strIndex);
}
int m = Integer.parseInt(newstr.replace("&#",""));
char c = (char)m ;
rs+= c ;
} else {
rs+=k;
}
}
return rs;
}
public static String FilterHtml(String str){
str = str .replaceAll("<(?!br|img)[^>]+>", "").trim();
return UnicodeToGBK2(str);
}
}
|