package edu.minggo.chat.ui; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.app.Instrumentation; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.Intent; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.location.Location; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.provider.MediaStore; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.text.Spannable; import android.text.TextUtils; import android.text.style.ImageSpan; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.LocationListener; import com.baidu.mapapi.MapActivity; import com.baidu.mobstat.StatService; import edu.minggo.chat.R; import edu.minggo.chat.adapters.ChatMessageAdapter; import edu.minggo.chat.adapters.SmileyPagerAdapter; import edu.minggo.chat.control.BluetoothChatService; import edu.minggo.chat.model.MessageEntity; import edu.minggo.chat.model.Smiley; import edu.minggo.chat.model.Task; import edu.minggo.chat.util.BaiMapGlobalApplication; import edu.minggo.chat.util.ClippingPicture; import edu.minggo.chat.util.ClippingSounds; import edu.minggo.chat.util.DateUtil; import edu.minggo.chat.util.OptionAlert; import edu.minggo.chat.util.PlaySound; import edu.minggo.chat.util.RecordButton; import edu.minggo.chat.util.RecordButton.OnEventListener; import edu.minggo.chat.util.VibratorUtil; /** * ��Ϣ���� * @author minggo * @created 2013-2-7����11:24:23 */ public class ChattingActivity extends MapActivity implements OnClickListener{ /********************��Щ��Ҫ�Ƕ����߼�����******************/ private static final int REQUEST_CONNECT_DEVICE_SECURE = 11;//����ȫ���� private static final int REQUEST_ENABLE_BT = 3; // ������������ private static final int DEVICE_OPERATION = 4;//���豸�IJ������ӻ��߿�̽�� public static final int MESSAGE_STATE_CHANGE = 1; // ��Ϣ״̬�ĸı� public static final int MESSAGE_SEND_OK = 2; // ��Ϣ���ͳɹ� public static final int MESSAGE_SEND_FAILED = 3; // ��Ϣ���ͳɹ� public static final int MESSAGE_READ = 4;//����Ϣ public static final int MESSAGE_WRITE = 6;//д��Ϣ public static final int MESSAGE_TOAST = 5; // Toast��������� public static final int MESSAGE_WRITE_BOUND_MAX = 7;//���͵��ļ�����1m public static final int STATE_CONNECT_THE_SAME = 8;//����ͬ�����豸 public static final int STATE_LISTEN = 1; // ����������״̬ public static final int STATE_CONNECTING = 2; // ��ʼ��һ����������ׯ�� public static final int STATE_CONNECTED = 3; // �Ѿ�����һ��Զ���豸״̬ public static AssetManager assetManager; private static String requestDeviceAdd; private BaiMapGlobalApplication baiMapApiUtil; private LocationListener mLocationListener = null; private double baiDu_Lon; private double baiDu_Lat; /*****************��Щ������Ҫ�Ƕ���ui����***********************/ public static final int GET_PHOTO_FROM_LOCAL = 1; public static final int GET_PHOTO_FROM_CARMERA = 0; public static final int GET_PHOTO_FROM_CARMERA_RETURN = 10; private static ArrayList<MessageEntity> messageEntities = null; private int smileyNoFlag=0; private Button backbt; private ImageButton menubt; private Button voicebt; private Button keyboardbt; private Button addbt; private Button sendbt; private RecordButton voicesendbt; private EditText contentet; private TextView friendname; private View addMorev; private ImageView expressionbt; private Button picbt; private Button locationbt; private Button cardbt; private boolean addMoreFlag; private boolean smileyTabFlag; private View smileyTabv; private View smileyLeaderv; private ListView chatMeassagelv; private ImageView page0iv; private ImageView page1iv; private ImageView page2iv; private ImageView page3iv; private ImageView page4iv; private ViewPager smileyPager; private TextView stab1,stab2,stab3; private View view1,view2,view3,view4,view5,view10,view20,view30,view40,view50; private int currIndex = 0;// ��ǰҳ����� private int currleader = 0; private ArrayList<View> viewsQQSmiley = new ArrayList<View>(); private ArrayList<View> viewsEmjiSmiley = new ArrayList<View>(); private SmileyPagerAdapter smileyPagerAdapter; private GridView expressionView0,expressionView1,expressionView2,expressionView3,expressionView4; private GridView expressionView00,expressionView10,expressionView20,expressionView30,expressionView40; private List<Map<String, Object>> contentQQSmile = new ArrayList<Map<String, Object>>(); private List<Map<String, Object>> contentEmji = new ArrayList<Map<String, Object>>(); public final KeyEvent keyEventDown = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DEL); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.chatting); backbt = (Button) findViewById(R.id.btn_back); menubt = (ImageButton) findViewById(R.id.right_btn); friendname = (TextView) findViewById(R.id.chatting_tv_friendname); voicebt = (Button) findViewById(R.id.chat_bt_voice); keyboardbt = (Button) findViewById(R.id.chat_bt_keyboard); addbt = (Button) findViewById(R.id.chat_bt_add); sendbt = (Button) findViewById(R.id.chat_btn_send); voicesendbt = (RecordButton) findViewById(R.id.chat_bt_send_voice); contentet = (EditText) findViewById(R.id.chat_et_sendmessage); addMorev = findViewById(R.id.chatting_add_v_menu); expressionbt = (ImageView) addMorev.findViewById(R.id.chatting_bt_simly); picbt = (Button)addMorev.findViewById(R.id.chatting_bt_pic); locationbt = (Button)addMorev.findViewById(R.id.chatting_bt_location); cardbt = (Button)addMorev.findViewById(R.id.chatting_bt_card); smileyTabv = findViewById(R.id.chatting_smiley_v); smileyLeaderv = smileyTabv.findViewById(R.id.chatting_smiley_leader_v); chatMeassagelv = (ListView) findViewById(R.id.chatting_message_listview); messageEntities = new ArrayList<MessageEntity>(); page0iv = (ImageView) smileyLeaderv.findViewById(R.id.page0); page1iv = (ImageView) smileyLeaderv.findViewById(R.id.page1); page2iv = (ImageView) smileyLeaderv.findViewById(R.id.page2); page3iv = (ImageView) smileyLeaderv.findViewById(R.id.page3); page4iv = (ImageView) smileyLeaderv.findViewById(R.id.page4); expressionbt.setOnClickListener(this); picbt.setOnClickListener(this); locationbt.setOnClickListener(this); cardbt.setOnClickListener(this); backbt.setOnClickListener(this); menubt.setOnClickListener(this); voicebt.setOnClickListener(this); keyboardbt.setOnClickListener(this); addbt.setOnClickListener(this); sendbt.setOnClickListener(this); voicesendbt.setOnEventListener(new VoiceListener()); initSmaleyPager(); assetManager = this.getResources().getAssets(); BluetoothChatService.allActivity.add(this); } /** * ʵ���Զ����¼����ť�Ŀ�ʼ¼���ͽ���¼�� * @author minggo * @created 2013-2-23����12:39:56 */ public class VoiceListener implements OnEventListener{ @Override public void onFinishedRecord(String audioPath, int time) { try { PlaySound.play("sound/qrcode_completed.mp3", assetManager); } catch (IOException e) { e.printStackTrace(); } mHandler.obtainMessage(MESSAGE_WRITE, 1, -1, time).sendToTarget(); } @Override public void onStartRecord() { try { VibratorUtil.Vibrate(ChattingActivity.this, (long) 100); PlaySound.play("sound/qrcode_completed.mp3", assetManager); } catch (IOException e) { e.printStackTrace(); } } } @Override protected void onStart() { super.onStart(); if (requestDeviceAdd!=null&&BluetoothChatService.connectDeviceAdd!=null&&BluetoothChatService.connectDeviceAdd.equals(requestDeviceAdd)) { BluetoothDevice device = BluetoothChatService.mAdapter.getRemoteDevice(requestDeviceAdd); HashMap<String, Object> param = new HashMap<String, Object>(); param.put("mHandler", mHandler); param.put("device", device); param.put("secure", true); Task task = new Task(Task.TASK_CONECT_DEVICE, param); BluetoothChatService.newTask(task); } if (!BluetoothChatService.mAdapter.isEnabled()) { Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableIntent, REQUEST_ENABLE_BT); } else { if (BluetoothChatService.serviceExist == null) { //setupChat(); // ����ͨ�ŷ��� /*Intent intent = new Intent(); intent.setClass(ChattingActivity.this, BluetoothChatService.class); startService(intent);*/ } } } /** * �Ƴ�activity����finish * @param keyCode */ public static void simulateKey(final int keyCode){ new Thread(){ public void run(){ try { Instrumentation isn = new Instrumentation(); isn.sendKeyDownUpSync(keyCode); } catch (Exception e) { e.printStackTrace(); } } }.start(); } /** * ��ʼ������ */ public void initSmaleyPager(){ addMoreFlag=false; smileyPager = (ViewPager)smileyTabv.findViewById(R.id.chatting_expression_tabpager); smileyPager.setOnPageChangeListener(new MyOnPageChangeListener()); stab1 = (TextView) smileyTabv.findViewById(R.id.chatting_qq_smiley_tab); stab2 = (TextView) smileyTabv.findViewById(R.id.chatting_char_smiley_tab); stab3 = (TextView) smileyTabv.findViewById(R.id.chatting_personal_smiley_tab); stab1.setOnClickListener(new MyOnClickListener(0)); stab2.setOnClickListener(new MyOnClickListener(1)); stab3.setOnClickListener(new MyOnClickListener(2)); //��Ҫ��ҳ��ʾ��Viewװ�������� LayoutInflater mLi = LayoutInflater.from(this); view1 = mLi.inflate(R.layout.chatting_qq_smiley1, null); view2 = mLi.inflate(R.layout.chatting_qq_smiley1, null); view3 = mLi.inflate(R.layout.chatting_qq_smiley1, null); view4 = mLi.inflate(R.layout.chatting_qq_smiley1, null); view5 = mLi.inflate(R.layout.chatting_qq_smiley1, null); view10 = mLi.inflate(R.layout.chatting_character_smiley, null); view20 = mLi.inflate(R.layout.chatting_character_smiley, null); view30 = mLi.inflate(R.layout.chatting_character_smiley, null); view40 = mLi.inflate(R.layout.chatting_character_smiley, null); view50 = mLi.inflate(R.layout.chatting_character_smiley, null); /*view6 = mLi.inflate(R.layout.chatting_personal_smiley, null);*/ for (int i = 0; i < Smiley.QQSIconIds.length; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("IMAGE", Smiley.QQSIconIds[i]); contentQQSmile.add(map); } for (int i = 0; i < Smiley.EmjiIconIds.length; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("IMAGE", Smiley.EmjiIconIds[i]); contentEmji.add(map); } expressionView0 = (GridView) view1.findViewById(R.id.expression_gridview); expressionView1 = (GridView) view2.findViewById(R.id.expression_gridview); expressionView2 = (GridView) view3.findViewById(R.id.expression_gridview); expressionView3 = (GridView) view4.findViewById(R.id.expression_gridview); expressionView4 = (GridView) view5.findViewById(R.id.expression_gridview); expressionView00 = (GridView) view10.findViewById(R.id.expression_gridview_emji); expressionView10 = (GridView) view20.findViewById(R.id.expression_gridview_emji); expressionView20 = (GridView) view30.findViewById(R.id.expression_gridview_emji); expressionView30 = (GridView) view40.findViewById(R.id.expression_gridview_emji); expressionView40 = (GridView) view50.findViewById(R.id.expression_gridview_emji); SimpleAdapter adapter0 = new SimpleAdapter(this, contentQQSmile.subList(0, 24), R.layout.chatting_qq_smiley_context, new String[] { "IMAGE" }, new int[] { R.id.chatting_qq_smiley_item }); SimpleAdapter adapter1 = new SimpleAdapter(this, contentQQSmile.subList(24, 48), R.layout.chatting_qq_smiley_context, new String[] { "IMAGE" }, new int[] { R.id.chatting_qq_smiley_item }); SimpleAdapter adapter2 = new SimpleAdapter(this, contentQQSmile.subList(48, 72), R.layout.chatting_qq_smiley_context, new String[] { "IMAGE" }, new int[] { R.id.chatting_qq_smiley_item }); SimpleAdapter adapter3 = new SimpleAdapter(this, contentQQSmile.subList(72, 96), R.layout.chatting_qq_smiley_context, new String[] { "IMAGE" }, new int[] { R.id.chatting_qq_smiley_item }); SimpleAdapter adapter4 = new SimpleAdapter(this, contentQQSmile.subList(96, 110), R.layout.chatting_qq_smiley_context, new String[] { "IMAGE" }, new int[] { R.id.chatting_qq_smiley_item }); SimpleAdapter adapter00 = new SimpleAdapter(this, contentEmji.subList(0, 24), R.layout.chatting_qq_smiley_context, new String[] { "IMAGE" }, new int[] { R.id.chatting_qq_smiley_item }); SimpleAdapter adapter10 = new SimpleAdapter(this, contentEmji.subList(24, 48), R.layout.chatting_qq_smiley_context, new String[] { "IMAGE" }, new int[] { R.id.chatting_qq_smiley_item }); SimpleAdapter adapter20 = new SimpleAdapter(this, contentEmji.subList(48, 72), R.layout.chatting_qq_smiley_context, new String[] { "IMAGE" }, new int[] { R.id.chatting_qq_smiley_item }); SimpleAdapter adapter30 = new SimpleAdapter(this, contentEmji.subList(72, 96), R.layout.chatting_qq_smiley_context, new String[] { "IMAGE" }, new int[] { R.id.chatting_qq_smiley_item }); SimpleAdapter adapter40 = new SimpleAdapter(this, contentEmji.subList(96, 120), R.layout.chatting_qq_smiley_context, new String[] { "IMAGE" }, new int[] { R.id.chatting_qq_smiley_item }); expressionView0.setAdapter(adapter0); expressionView1.setAdapter(adapter1); expressionView2.setAdapter(adapter2); expressionView3.setAdapter(adapter3); expressionView4.setAdapter(adapter4); expressionView00.setAdapter(adapter00); expressionView10.setAdapter(adapter10); expressionView20.setAdapter(adapter20); expressionView30.setAdapter(adapter30); expressionView40.setAdapter(adapter40); expressionView0.setOnItemClickListener(new SmileyItemListener(0,Smiley.QQSIconIds)); expressionView1.setOnItemClickListener(new SmileyItemListener(1,Smiley.QQSIconIds)); expressionView2.setOnItemClickListener(new SmileyItemListener(2,Smiley.QQSIconIds)); expressionView3.setOnItemClickListener(new SmileyItemListener(3,Smiley.QQSIconIds)); expressionView4.setOnItemClickListener(new SmileyItemListener(4,Smiley.QQSIconIds)); expressionView00.setOnItemClickListener(new SmileyItemListener(0,Smiley.EmjiIconIds)); expressionView10.setOnItemClickListener(new SmileyItemListener(1,Smiley.EmjiIconIds)); expressionView20.setOnItemClickListener(new SmileyItemListener(2,Smiley.EmjiIconIds)); expressionView30.setOnItemClickListener(new SmileyItemListener(3,Smiley.EmjiIconIds)); expressionView40.setOnItemClickListener(new SmileyItemListener(4,Smiley.EmjiIconIds)); //ÿ��ҳ���view���� viewsQQSmiley.add(view1); viewsQQSmiley.add(view2); viewsQQSmiley.add(view3); viewsQQSmiley.add(view4); viewsQQSmiley.add(view5); viewsEmjiSmiley.add(view10); viewsEmjiSmiley.add(view20); viewsEmjiSmiley.add(view30); viewsEmjiSmiley.add(view40); viewsEmjiSmiley.add(view50); smileyPagerAdapter = new SmileyPagerAdapter(viewsQQSmiley); smileyPager.setAdapter(smileyPagerAdapter); } /** * ͼƬ��������� * @author minggo * @created 2013-2-16����09:26:34 */ public class SmileyItemListener implements OnItemClickListener{ private int i; private int data[]; public SmileyItemListener(int i,int data[]){ this.i=i; this.data = data; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if((position+(23*i))%23!=0&&(position+(24*(i)))!=(data.length-1)||position==0){ if(smileyNoFlag==0) setFace(position +(24*i), data[position+(24*i)]); else if(smileyNoFlag==1) setFace(position +(24*i)+110, data[position+(24*i)]); }else{ contentet.onKeyDown(KeyEvent.KEYCODE_DEL, keyEventDown); } } } /** * ��ӱ��� * @param faceTitle * @param faceImg */ private void setFace(int faceTitle, int faceImg) { int start = contentet.getSelectionStart(); Spannable ss = contentet.getText().insert(start, "[" + faceTitle + "]"); Drawable d = getResources().getDrawable(faceImg); d.setBounds(0, 0, 32, 32); ImageSpan span = new ImageSpan(d, faceTitle + ".gif", ImageSpan.ALIGN_BOTTOM); ss.setSpan(span, start, start + ("[" + faceTitle + "]").length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } /** * ɾ�����飨���ֱ���ij��Ȳ�һ������������ʺϣ� */ @SuppressWarnings("unused") private void deleteSmiley(){ int len = contentet.getText().length(); if (len>0) { contentet.getText().delete(len-3, len); } } /** * ͷ�������� */ public class MyOnClickListener implements View.OnClickListener { private int index = 0; public MyOnClickListener(int i) { index = i; } @Override public void onClick(View v) { smileyPager.setCurrentItem(0); if(v==stab1){ smileyNoFlag=0; stab1.setBackgroundResource(R.drawable.smiley_tab_pressed); if (currIndex == 1) { stab2.setBackgroundDrawable(getResources().getDrawable(R.drawable.smiley_tab_nor)); } else if (currIndex == 2) { stab3.setBackgroundDrawable(getResources().getDrawable(R.drawable.smiley_tab_nor)); } if(currIndex!=0){ smileyPagerAdapter.views = viewsQQSmiley; smileyPagerAdapter.notifyDataSetChanged(); smileyPager.setAdapter(smileyPagerAdapter); } initLeaderView(); currIndex = index; }else if (v==stab2) { smileyNoFlag=1; stab2.setBackgroundDrawable(getResources().getDrawable(R.drawable.smiley_tab_pressed)); if (currIndex == 0) { stab1.setBackgroundDrawable(getResources().getDrawable(R.drawable.smiley_tab_nor)); } else if (currIndex == 2) { stab3.setBackgroundDrawable(getResources().getDrawable(R.drawable.smiley_tab_nor)); } if(currIndex!=1){ smileyPagerAdapter.views = viewsEmjiSmiley; smileyPagerAdapter.notifyDataSetChanged(); smileyPager.setAdapter(smileyPagerAdapter); } currIndex = index; initLeaderView(); }else if (v==stab3) { smileyNoFlag=2; stab3.setBackgroundDrawable(getResources().getDrawable(R.drawable.smiley_tab_pressed)); if (currIndex == 0) { stab1.setBackgroundDrawable(getResources().getDrawable(R.drawable.smiley_tab_nor)); } else if (currIndex == 1) { stab2.setBackgroundDrawable(getResources().getDrawable(R.drawable.smiley_tab_nor)); } currIndex = index; initLeaderView(); } } }; /** * * @param duration * @return */ public boolean setBluetoothDiscovering(int duration) { try { Intent setDiscovery = new Intent( BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); setDiscovery.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,duration); ChattingActivity.this.startActivity(setDiscovery); } catch (Exception e) { Log.i("����������̽�����--->", e.toString()); return false; } return true; } /** * ���ֻص��¼� */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case DEVICE_OPERATION: if (resultCode == 1) { if (BluetoothAdapter.getDefaultAdapter().isEnabled()) { setBluetoothDiscovering(300); }else{ BluetoothAdapter.getDefaultAdapter().enable(); setBluetoothDiscovering(300); } }else if (resultCode == 2) { Intent serverIntent = new Intent(this, DeviceListActivity.class); startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE_SECURE); } break; case REQUEST_ENABLE_BT: // ������������ if (resultCode == Activity.RESULT_OK) { //setupChat(); new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(); intent.setClass(ChattingActivity.this, BluetoothChatService.class); intent.putExtra("can_call_start", true); startService(intent); } }, 5000); } else { Toast.makeText(this, "����δ����",2000).show(); } break; case REQUEST_CONNECT_DEVICE_SECURE: // ��ȫ�������� if (resultCode == Activity.RESULT_OK) { requestDeviceAdd = data.getExtras().getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS); BluetoothDevice device = BluetoothChatService.mAdapter.getRemoteDevice(requestDeviceAdd); HashMap<String, Object> param = new HashMap<String, Object>(); param.put("mHandler", mHandler); param.put("device", device); param.put("secure", true); Task task = new Task(Task.TASK_CONECT_DEVICE, param); BluetoothChatService.newTask(task); } break; case GET_PHOTO_FROM_CARMERA_RETURN://����� if (resultCode == Activity.RESULT_OK) { Bitmap bitmap = (Bitmap) data.getExtras().get("data"); bitmap = ClippingPicture.Resize(bitmap); ClippingPicture.saveTalkBitmap(bitmap); mHandler.obtainMessage(MESSAGE_WRITE, 0, -1).sendToTarget(); } break; case GET_PHOTO_FROM_LOCAL://�ӱ���ȡ if (data!=null&&data.getData()!=null) { Uri originalUri = data.getData(); if (originalUri != null) { ClippingPicture.saveGetPicFromLocal(ChattingActivity.this, originalUri); mHandler.obtainMessage(MESSAGE_WRITE, 0, -1).sendToTarget(); } } break; } } /** * ҳ��ı������ * @author minggo * @created 2013-2-18����07:00:14 */ private class MyOnPageChangeListener implements OnPageChangeListener{ @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { switch (arg0) { case 0: page0iv.setImageResource(R.drawable.white_dot); if (currleader==1) { page1iv.setImageResource(R.drawable.dark_dot); } currleader=0; break; case 1: if (currleader==0) { page0iv.setImageResource(R.drawable.dark_dot); }else if (currleader==2) { page2iv.setImageResource(R.drawable.dark_dot); } page1iv.setImageResource(R.drawable.white_dot); currleader=1; break; case 2: if (currleader==1) { page1iv.setImageResource(R.drawable.dark_dot); }else if (currleader==3) { page3iv.setImageResource(R.drawable.dark_dot); } page2iv.setImageResource(R.drawable.white_dot); currleader=2; break; case 3: if (currleader==2) { page2iv.setImageResource(R.drawable.dark_dot); }else if (currleader==4) { page4iv.setImageResource(R.drawable.dark_dot); } page3iv.setImageResource(R.drawable.white_dot); currleader=3; break; case 4: if (currleader==3) { page3iv.setImageResource(R.drawable.dark_dot); } page4iv.setImageResource(R.drawable.white_dot); currleader=4; break; } } } public void initLeaderView(){ currleader= 0; page0iv.setImageResource(R.drawable.white_dot); page1iv.setImageResource(R.drawable.dark_dot); page2iv.setImageResource(R.drawable.dark_dot); page3iv.setImageResource(R.drawable.dark_dot); page4iv.setImageResource(R.drawable.dark_dot); } @Override protected void onResume() { super.onResume(); StatService.onResume(this); } @Override public void onClick(View v) { if (v==backbt) { simulateKey(KeyEvent.KEYCODE_BACK); }else if (v==expressionbt) { addMorev.setVisibility(View.GONE); addMoreFlag = false; if(smileyTabFlag==false){ smileyTabFlag = true; smileyTabv.setVisibility(View.VISIBLE); } }else if (picbt==v) { if (BluetoothChatService.getState() != BluetoothChatService.STATE_CONNECTED) { Toast.makeText(ChattingActivity.this, R.string.not_connected, Toast.LENGTH_SHORT).show(); return; }else{ OptionAlert.showAlert(ChattingActivity.this, ChattingActivity.this.getString(R.string.set_myinfo), ChattingActivity.this.getResources().getStringArray(R.array.set_myinfo_item), null, new OptionAlert.OnAlertSelectId(){ @Override public void onClick(int whichButton) { switch(whichButton){ case GET_PHOTO_FROM_LOCAL: Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); ChattingActivity.this.startActivityForResult(Intent.createChooser(intent, "Select Picture"),GET_PHOTO_FROM_LOCAL); break; case GET_PHOTO_FROM_CARMERA: Intent intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); ChattingActivity.this.startActivityForResult(intent1,GET_PHOTO_FROM_CARMERA_RETURN); break; } } } ); } }else if (locationbt==v) { baiMapApiUtil = (BaiMapGlobalApplication)(ChattingActivity.this.getApplication()); if (baiMapApiUtil.mBMapMan == null) { baiMapApiUtil.mBMapMan = new BMapManager(ChattingActivity.this.getApplication()); baiMapApiUtil.mBMapMan.init(baiMapApiUtil.mStrKey, new BaiMapGlobalApplication.MyGeneralListener()); } baiMapApiUtil.mBMapMan.start(); mLocationListener = new LocationListener(){ @Override public void onLocationChanged(Location location) { if(location != null){ baiDu_Lon = location.getLongitude(); baiDu_Lat = location.getLatitude(); mHandler.obtainMessage(MESSAGE_WRITE, 2, 2).sendToTarget(); } } }; baiMapApiUtil.mBMapMan.getLocationManager().requestLocationUpdates(mLocationListener); baiMapApiUtil.mBMapMan.start(); }else if (cardbt==v) { }else if (v==menubt) { Intent serverIntent = new Intent(this, DeviceDetectDialogActivity.class); startActivityForResult(serverIntent, DEVICE_OPERATION); }else if (v==voicebt) { voicebt.setVisibility(View.GONE); sendbt.setVisibility(View.GONE); contentet.setVisibility(View.GONE); keyboardbt.setVisibility(View.VISIBLE); voicesendbt.setVisibility(View.VISIBLE); }else if (v==addbt) { if(addMoreFlag==false){ addMoreFlag = true; if (smileyTabFlag==true) { smileyTabFlag = false; smileyTabv.setVisibility(View.GONE); addMoreFlag = false; }else{ addMorev.setVisibility(View.VISIBLE); } }else{ addMoreFlag = false; addMorev.setVisibility(View.GONE); } }else if (v==keyboardbt) { voicebt.setVisibility(View.VISIBLE); sendbt.setVisibility(View.VISIBLE); contentet.setVisibility(View.VISIBLE); keyboardbt.setVisibility(View.GONE); voicesendbt.setVisibility(View.GONE); }else if (sendbt==v) { if (BluetoothChatService.getState() != BluetoothChatService.STATE_CONNECTED) { Toast.makeText(this, R.string.not_connected, Toast.LENGTH_SHORT).show(); return; } if(TextUtils.isEmpty(contentet.getText())){ }else{ String sendContent = contentet.getText().toString(); System.out.println(contentet.getText().toString()+"++++��������"); MessageEntity d = new MessageEntity(contentet.getText().toString(), R.layout.chatting_item_msg_text_right,"1",DateUtil.getCurrentTiem()); d.setTtmContent(sendContent); d.setLayoutID(R.layout.chatting_item_msg_text_right); d.setTtmType(1); d.setRemoteDeviceNo(requestDeviceAdd); d.setMyDeviceNo(BluetoothChatService.mAdapter.getAddress()); d.setTtmTime(DateUtil.getCurrentTiem()); /*MessageSQLService.getInstance(TalkMessageAct.this).save(d);*/ messageEntities.add(d); chatMeassagelv.setAdapter(new ChatMessageAdapter(ChattingActivity.this,messageEntities,"1")); chatMeassagelv.setSelection(messageEntities.size()); contentet.setText(""); sendMessage(sendContent); } StatService.onEvent(ChattingActivity.this, "send_message_button", "chatting_message_send", 1); } } /** * ���Ͷ���Ϣ * @param message * �ı����͵��ַ���. * @throws UnsupportedEncodingException */ private void sendMessage(String message){ if (message.length() > 0) { // ��ȡ��Ϣ���ֽ� byte[] send = message.getBytes(); HashMap<Integer, byte[]> param = new HashMap<Integer, byte[]>(); param.put(BluetoothChatService.STATE_SEND_MESSAGE, send); Task task = new Task(Task.TASK_SEND_MESSAGE, param); BluetoothChatService.newTask(task); } } /** * ����ui���µ�handler */ private Handler mHandler = new Handler() { private MessageEntity d; @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch(msg.what){ case MESSAGE_WRITE_BOUND_MAX: Toast.makeText(ChattingActivity.this, "��Ǹ���������֧�ַ��ͳ���1M�ļ���", Toast.LENGTH_LONG).show(); break; case MESSAGE_STATE_CHANGE: if (msg.arg1==STATE_CONNECTING) { friendname.setText("��������..."); }else if (msg.arg1==STATE_CONNECTED) { friendname.setText("������"); } break; case MESSAGE_TOAST: if (msg.arg1==1) { Toast.makeText(ChattingActivity.this, "����ʧ��", 3000).show(); friendname.setText("δ����"); }else if (msg.arg1==2) { Toast.makeText(ChattingActivity.this, "�����ж�", 3000).show(); friendname.setText("�����ж�"); } break; case MESSAGE_SEND_OK: try { PlaySound.play("sound/sent_message.mp3", assetManager); } catch (IOException e) { e.printStackTrace(); } Toast.makeText(ChattingActivity.this, "���ͳɹ�", 3000).show(); break; case MESSAGE_SEND_FAILED: Toast.makeText(ChattingActivity.this, "����ʧ��", 3000).show(); break; case MESSAGE_READ: try { PlaySound.play("sound/shake_match.mp3", assetManager); } catch (IOException e) { e.printStackTrace(); } if (msg.arg1==0) {//���ַ��� String readMessage = null; try { readMessage = new String(((String) msg.obj).getBytes("GBK"),"UTF8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } d = new MessageEntity(readMessage,R.layout.chatting_item_msg_text_left,"1",DateUtil.getCurrentTiem()); d.setTtmContent(readMessage); d.setLayoutID(R.layout.chatting_item_msg_text_left); d.setTtmType(1); d.setRemoteDeviceNo(requestDeviceAdd); d.setMyDeviceNo(BluetoothChatService.mAdapter.getAddress()); /*MessageSQLService.getInstance(TalkMessageAct.this).save(d);*/ messageEntities.add(d); chatMeassagelv.setAdapter(new ChatMessageAdapter(ChattingActivity.this,messageEntities,"1")); chatMeassagelv.setSelection(messageEntities.size()); }else if(msg.arg1==1){//��ͼƬ d = new MessageEntity(ClippingPicture.talkPicName, R.layout.chatting_item_msg_image_left,"1",DateUtil.getCurrentTiem()); d.setTtmContent(ClippingPicture.talkPicName); d.setLayoutID(R.layout.chatting_item_msg_image_left); d.setTtmType(2); d.setRemoteDeviceNo(requestDeviceAdd); d.setMyDeviceNo(BluetoothChatService.mAdapter.getAddress()); messageEntities.add(d); chatMeassagelv.setAdapter(new ChatMessageAdapter(ChattingActivity.this,messageEntities,"1")); chatMeassagelv.setSelection(messageEntities.size()); }else if (msg.arg1==2) {//������ d = new MessageEntity(ClippingSounds.talkSoundName, R.layout.chatting_item_msg_voice_left,"1",DateUtil.getCurrentTiem()); d.setTtmContent(ClippingSounds.talkSoundName); d.setLayoutID(R.layout.chatting_item_msg_voice_left); d.setTtmType(2); d.setRemoteDeviceNo(requestDeviceAdd); d.setVoiceTime(msg.arg2+""); d.setMyDeviceNo(BluetoothChatService.mAdapter.getAddress()); messageEntities.add(d); chatMeassagelv.setAdapter(new ChatMessageAdapter(ChattingActivity.this,messageEntities,"1")); chatMeassagelv.setSelection(messageEntities.size()); }else if (msg.arg1==3) { d = new MessageEntity(msg.obj.toString(), R.layout.chatting_item_msg_location_left,"1",DateUtil.getCurrentTiem()); d.setTtmContent(msg.obj.toString()); d.setLayoutID(R.layout.chatting_item_msg_location_left); d.setTtmType(3); d.setRemoteDeviceNo(requestDeviceAdd); d.setMyDeviceNo(BluetoothChatService.mAdapter.getAddress()); messageEntities.add(d); chatMeassagelv.setAdapter(new ChatMessageAdapter(ChattingActivity.this,messageEntities,"1")); chatMeassagelv.setSelection(messageEntities.size()); } break; case MESSAGE_WRITE: if (msg.arg1==0) {//��ͼƬ d = new MessageEntity(ClippingPicture.talkPicName, R.layout.chatting_item_msg_image_right,"1",DateUtil.getCurrentTiem()); d.setTtmContent(ClippingPicture.talkPicName); d.setLayoutID(R.layout.chatting_item_msg_image_right); d.setTtmType(2); d.setRemoteDeviceNo(requestDeviceAdd); d.setMyDeviceNo(BluetoothChatService.mAdapter.getAddress()); //MessageSQLService.getInstance(TalkMessageAct.this).save(d); messageEntities.add(d); chatMeassagelv.setAdapter(new ChatMessageAdapter(ChattingActivity.this,messageEntities,"1")); chatMeassagelv.setSelection(messageEntities.size()); HashMap<String, Object> param = new HashMap<String, Object>(); param.put("talkPicPath", ClippingPicture.TALK_FILES+"/"+ClippingPicture.talkPicName); Task task = new Task(Task.TASK_SEND_IMAGE, param); BluetoothChatService.newTask(task); }else if (msg.arg1==1) {//��¼�� d = new MessageEntity(ClippingSounds.talkSoundName,R.layout.chatting_item_msg_voice_right, "1",DateUtil.getCurrentTiem()); d.setTtmContent(ClippingSounds.talkSoundName); d.setLayoutID(R.layout.chatting_item_msg_voice_right); d.setTtmType(3); d.setRemoteDeviceNo(requestDeviceAdd); d.setMyDeviceNo(BluetoothChatService.mAdapter.getAddress()); d.setVoiceTime(msg.obj.toString()); //MessageSQLService.getInstance(TalkMessageAct.this).save(d); messageEntities.add(d); chatMeassagelv.setAdapter(new ChatMessageAdapter(ChattingActivity.this,messageEntities,"1")); chatMeassagelv.setSelection(messageEntities.size()); HashMap<String, Object> param = new HashMap<String, Object>(); param.put("talkSoundPath", ClippingSounds.TALKSOUND_FILE+ClippingSounds.talkSoundName); param.put("recordTime", msg.obj); Task task = new Task(Task.TASK_SEND_SOUND, param); BluetoothChatService.newTask(task); }else if (msg.arg1==2) {//��λ�� d = new MessageEntity(baiDu_Lat+","+baiDu_Lon,R.layout.chatting_item_msg_location_right, "1",DateUtil.getCurrentTiem()); d.setTtmContent(baiDu_Lat+","+baiDu_Lon); d.setLayoutID(R.layout.chatting_item_msg_location_right); d.setTtmType(4); d.setRemoteDeviceNo(requestDeviceAdd); d.setMyDeviceNo(BluetoothChatService.mAdapter.getAddress()); //MessageSQLService.getInstance(TalkMessageAct.this).save(d); messageEntities.add(d); chatMeassagelv.setAdapter(new ChatMessageAdapter(ChattingActivity.this,messageEntities,"1")); chatMeassagelv.setSelection(messageEntities.size()); HashMap<String, Object> param = new HashMap<String, Object>(); param.put("location", baiDu_Lat+","+baiDu_Lon); Task task = new Task(Task.TASK_SEND_LOCATION, param); BluetoothChatService.newTask(task); } break; } } }; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { //��ȡ back�� if(addMoreFlag==true){ addMoreFlag = false; if (smileyTabFlag==true) { smileyTabFlag = false; smileyTabv.setVisibility(View.GONE); } addMorev.setVisibility(View.GONE); }else{ if(smileyTabFlag==true){ smileyTabFlag = false; smileyTabv.setVisibility(View.GONE); addMorev.setVisibility(View.GONE); addMoreFlag = false; }else { finish(); } } } return true; } @SuppressWarnings("unused") private void ensureDiscoverable() { if (BluetoothChatService.mAdapter.getScanMode() != BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) { Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); startActivity(discoverableIntent); } } @Override protected void onPause() { BaiMapGlobalApplication app = (BaiMapGlobalApplication)this.getApplication(); // �Ƴ�listener app.mBMapMan.getLocationManager().removeUpdates(mLocationListener); app.mBMapMan.stop(); super.onPause(); StatService.onPause(this); } /** * �ص�������������Ϣ�������и��½�������ͼƬ�������Ľӷ�״̬(��ʱ������) * @author minggo * @created 2013-2-22����02:59:19 */ public interface SendOrReceiveFinish{ public void onFinishListener(int what,int position,int process,Object o); } @Override protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } }