Activity

package activity;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.json.JSONException;
import org.json.JSONObject;

import com.example.chatsysdemo.R;


import synProcess.LocalDataProcess;

import messageClasses.ChatContentMessage;
import messageClasses.Friends;
import messageClasses.Message;
import messageClasses.MsgViewContainer;
import messageClasses.MyAdapter;
import messageClasses.OnlineStatusChangeMessage;


import commontool.CommonFunctions;
import commontool.Constants;
import commontool.Controller;
import commontool.DataController;
import ServerInteract.HttpRequestServer;
import ServerInteract.SocketInteractServer;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class ActChat extends Activity {
	public static final String TAG = "ActChat";
	private final static int TIMEINTEVAL=15;  //5秒没人操作则自动获取服务器的数据发
	private final static int GETRESPONSE=1;
    private int autoMsgNum;
    private Friends friend;
    
	private EditText edtMsg;
	private TextView tvGuest;
	private TextView tvStatus;
	private Button btnSend;
	private ListView lvMessage;
    private String lastMsgString="";
    private boolean isReportGenerated=false;
	//private SimpleAdapter listItemAdapter;
//	private ArrayList<HashMap<String, Object>> listItem;
	private MyAdapter myAdapter;
	
	private ImageView ivHead;
	
	private boolean isResponsed=false;
  //  private ArrayList<String> topicList;
    private String selectedTopic="null";
    
	SocketInteractServer msgSocket = null;
	private MySMSReceiver smsReceiver = null;
	
	AutoSendMsg autoSendMsg;
	
	// 保存新的消息,用于之后将新的消息记录保存到数据库中
	private ArrayList<ChatContentMessage> newMessageList = new ArrayList<ChatContentMessage>();

    private  int times=TIMEINTEVAL;//无操作时间三十秒则选择自聊天
	
    private boolean timeLock=true;
    
    public synchronized boolean isTimeLocked()
    {
    	return timeLock;
    }
    
    public synchronized void  lock()
    {
    	timeLock=true;
    }
    
    public synchronized void  unlock()
    {
    	timeLock=false;
    }
    
	public  synchronized void resetTime()
	{
		times=TIMEINTEVAL;
	}
	
	public  synchronized void resetTime(int t)
	{
		times=t;
	}
	
	public  synchronized void minusTime()
	{
		times--;
	}
	
	Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			if(msg.what==GETRESPONSE)
			{
				String content=msg.obj.toString();
				Log.v(TAG, "handle接受到自动聊天内荣:(待发送)"+content);
				sendMsg(content);
			    autoMsgNum--;
			    if(0==autoMsgNum)
			    {
			    	sendMsg("/*/over/*/");
			    	autoSendMsg.endThread();
			    	generateChatReport();
			    }
			}
		}
	};
	public class AutoSendMsg implements Runnable{
		private boolean isContinue=true;
		@Override
		public void run() {
		// TODO Auto-generated method stub
			while (isContinue) {
				try {			    	
						Thread.sleep(1000);//线程暂停10秒,单位毫秒
						if(isTimeLocked())
							continue;
						minusTime();
						if(times==0 || isResponsed==true)
						{
							if(isResponsed==true)
							{ 
							  //  isResponsed=false;  //等待从服务器获得数据发送数
								lock(); //停止计数器
							    new Thread(new GetServerMsgThread()).run();
							}
							resetTime();
						}
				} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				}
			}
			CommonFunctions.generateLogV(TAG, "停止AutoSendMsg线程");
		}
		public void endThread()
		{
			isContinue=false;
		}
	}
	
	public class  GetServerMsgThread implements Runnable
	{
			@Override
			public void run() {
				// TODO Auto-generated method stub
				//向服务器请求获得自聊天消息
				Log.v(TAG, "向服务器请求聊天内容");
				HttpRequestServer requestServer = new HttpRequestServer();
				JSONObject jobj = null;
					try {
						if(selectedTopic.equals("null"))
						{
							Log.v(TAG,"所选话题为空!");
							selectedTopic="天气";
						}
						jobj=requestServer.getAutoChatMsg(Controller.getUserId(), selectedTopic, lastMsgString);
						Log.v(TAG, "获得聊天内容:"+jobj.toString());
					} catch (Exception e) {
						// TODO Auto-generated catch block
						Log.v(TAG, "error");
						e.printStackTrace();
						unlock();
					}
					if(jobj==null)
						return ;
					String content="null";
					try {
						content = (String) jobj.get(Constants.MESSAGE_CONTENT);
						CommonFunctions.generateLogV(TAG, content);
					} catch (JSONException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
						unlock();
					}
					int len=CommonFunctions.generateRandamNum(6, 12);
					try {
						Thread.sleep(len*1000);  //延迟
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
					handler.obtainMessage(GETRESPONSE, content).sendToTarget();
			}
	}
	
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onPause");
		super.onPause();
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.v(TAG, "onCreate");
		setContentView(R.layout.chat);
		
		getInstance();
		fillAdapter();

		// 添加并且显示
	//	lvMessage.setAdapter(listItemAdapter);
		lvMessage.setAdapter(myAdapter);
		btnSend.setOnClickListener(new btnSendClickOmpl());

		IntentFilter myIntentFilter = new IntentFilter();
		myIntentFilter.addAction(Constants.SMS_RECEIVER_CHAT);
		smsReceiver = new MySMSReceiver();
		registerReceiver(smsReceiver, myIntentFilter);
		
		if(Controller.getChatStatus().equals("Positive"))
			isResponsed=true;//可主动发起聊天
		else {
			isResponsed=false;//不可主动发起聊天
		}
		if(friend!=null && friend.type!=1)
		{
			autoMsgNum=5; //自动交流10句之后停止并生成报告
			unlock();
			autoSendMsg=new  AutoSendMsg();
		    new Thread(autoSendMsg).start();
		}
		    Controller.setCurrentActivity(TAG);
		
	}

	private void getInstance() {
		Intent requestIntent = getIntent();
		
		int userId = requestIntent.getIntExtra(Constants.USER_ID,-1);
		
		friend=Controller.getFriendbyId(userId);
		
        if(friend==null)
        {
        	friend=new Friends(userId, "null", "1", Constants.ONLINE);
        	friend.type=2;
        }
//还得设置头像
		
		tvGuest = (TextView) findViewById(R.id.tvguestName);
		tvStatus=(TextView) findViewById(R.id.tvguestStatus);
		tvStatus.setText(friend.status);
		
		ivHead=(ImageView)findViewById(R.id.guestImage);
		ivHead.setImageResource(DataController.head[Integer.parseInt(friend.headImageUrl)]);
		if(friend.status.equals(Constants.OFFLINE))
			ivHead.setImageAlpha(100);
		edtMsg = (EditText) findViewById(R.id.editMessage);
		
		btnSend = (Button) findViewById(R.id.buttonSend);
		lvMessage = (ListView) findViewById(R.id.lvMessage);
		
		myAdapter=new MyAdapter(this);
		
		
		String guestName=Controller.getNameById(userId);
		tvGuest.setText(guestName);

		// 获得与服务器的Socket连接(在主界面已经建立连接)
		msgSocket = Controller.getMsgSocket();
	  
		 //获得自动聊天的话题,已经从服务器获得
		selectedTopic=Controller.getSelectedTopic();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		// 注销服务
		Log.v(TAG, "onDestroy");
		if(autoSendMsg!=null)
	 		autoSendMsg.endThread();
		if (smsReceiver != null)
			unregisterReceiver(smsReceiver);
		// 重置当前聊天对象
		if(1==friend.type)
		{
			Controller.setCurrentChatObjId(-1);
			//Controller.setCurrentChatobjName("");
		}
		else
		{
			Controller.setCurrentMachChatObjId(-1);
			//Controller.setCurrentMachChatObjName("");
		}
		// 将聊天记录保存到本地数据库中
		LocalDataProcess localDataProcess=new LocalDataProcess();
		localDataProcess.upLocalNewMessageRecord(newMessageList);
		
		this.finish();
		super.onDestroy();
	}

	private class MySMSReceiver extends BroadcastReceiver {
		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub
			String messageString;
			messageString = intent.getStringExtra(Constants.BROADCAST_MESSAGE);
			
			JSONObject jsonObject = null;
			try {
				jsonObject = new JSONObject(messageString);
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				CommonFunctions.generateLogV(TAG,
						"new JSONObject(messageString);", "JSONException");
				e.printStackTrace();
			}
			Message message = CommonFunctions
					.castJsonToMessage(jsonObject);
			parseMessage(message);
		}
	}
	/**
	 * 解析接收到的消息
	 * @param message
	 */
	protected void parseMessage(Message message)
	{
		Log.v(TAG,"接收到广播消息:"+message.toString());
		String typeString=message.type;
		if(typeString.equals(Constants.CHAT_MESSAGE))
		{
			ChatContentMessage chatContentMessage=(ChatContentMessage)message;
			lastMsgString=chatContentMessage.msg;
			
			if(lastMsgString.equals("/*/over/*/"))
			{
				autoSendMsg.endThread();//自动聊天结束,生成报告
				generateChatReport();
				return ;
			}
		    appendMsg(chatContentMessage);
			isResponsed=true;  //收到回复之后标记置为true
			Log.v(TAG, String.valueOf(isResponsed));
		    resetTime();
			//handler.obtainMessage(1, lastMsgString).sendToTarget();
		}
		else if(typeString.equals(Constants.FRIEND_ONLINE_STATUS_CHANGE))
		{
			OnlineStatusChangeMessage onlineStatusChangeMessage=(OnlineStatusChangeMessage)message;
			if(onlineStatusChangeMessage.userId==friend.userId)
			{
				friend.status=onlineStatusChangeMessage.status;
				if(friend.status.equals(Constants.ONLINE))
					ivHead.setImageAlpha(0);
				else
					ivHead.setImageAlpha(100);
			    tvStatus.setText("["+friend.status+"]");
			}
		}
	}
	private void generateChatReport() {
		// TODO Auto-generated method stub
		if(isReportGenerated==false)
		{
			 isReportGenerated=true; 
			 CommonFunctions.showMessage(ActChat.this, "自动聊天结束,显示聊天结果");
			 Intent intent=new Intent(ActChat.this,ActReport.class);
			 startActivity(intent);
		}

	}

	public class btnSendClickOmpl implements android.view.View.OnClickListener {
		@Override
		public void onClick(View v) {
			String msg = edtMsg.getText().toString().trim();
			sendMsg(msg);
		}
	}

	private void fillAdapter() {
	//	listItem = new ArrayList<HashMap<String, Object>>();

		// 生成适配器的Item和动态数组对应的元素
	//	listItemAdapter = new SimpleAdapter(this, listItem,// 数据源
	//			R.layout.chat_message_item,// ListItem的XML实现
				// 动态数组与ImageItem对应的子项
	//			new String[] { Constants.USER_NAME, Constants.SEND_TIME,
//						Constants.MESSAGE_CONTENT,Constants.USER_ID },
				// ImageItem的XML文件里面的一个ImageView,两个TextView ID
//				new int[] { R.id.MsgSender, R.id.MsgDateTime, R.id.MsgContent });
		 //先从数据库获得历史记录,
		addHistoryMessage();

		// 获得未读消息
		ArrayList<ChatContentMessage> messageList = (ArrayList<ChatContentMessage>) Controller
				.getUnreadMessage(friend.userId);
		
		if (messageList != null)
			addUnreadMessage(messageList);

		// 这句不要往,不然列表控件显示不会更新
	//	listItemAdapter.notifyDataSetChanged();
		myAdapter.notifyDataSetChanged();
		// 清除未读消息
		Controller.clearUnreadMessage(friend.userId);
	}
	protected void sendMsg(String msg) {
		// TODO Auto-generated method stub
		// 发送送消息,默认消息类型为Constants.CHAT_MESSAGE
		
	//	resetTime();  //自动发送消息计时器重新计时
//		if (msg == "")
//			return;
//
//		if (false == msgSocket.isConnected()) {
//			CommonFunctions.showMessage(ActChat.this,
//					"发送数据的SOCKET尚未连接到服务器!");
//			return;
//		}
//		if(friend.status.equals(Constants.OFFLINE)) {
//			CommonFunctions.showMessage(ActChat.this,
//					"当前用户已离线!");
//			return;
//		}    
		
		ChatContentMessage message = new ChatContentMessage(Constants.CHAT_MESSAGE,Controller.getUserId(), friend.userId,
				msg, CommonFunctions.getSysTime());
		String msgPackage = null;
		try {
			msgPackage = CommonFunctions.castMessageclassToJsonStr(message);
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			Log.v(TAG,"CommonFunctions.castMessageclassToJsonStr(message)失败:JSONException");
			e.printStackTrace();
		}
		boolean result = msgSocket.writeStr(msgPackage);
		isResponsed=false;//发送消息之后是否已经回复标记置为false;
		if (result == true) {
			// 将数据更新到消息界面......................................
			appendMsg(message);
			// 清空数据
			edtMsg.setText("");
			edtMsg.requestFocus();
		} else {
			CommonFunctions.showMessage(ActChat.this, "消息发送失败,请重试");
			edtMsg.requestFocus();
		}
	}
	public void appendMsg(ChatContentMessage message) {
		if
		newMessageList.add(message);
		/*
		HashMap<String, Object> map = new HashMap<String, Object>();
		String name=Controller.getNameById(message.senderId);
		map.put(Constants.USER_ID, message.senderId);
		map.put(Constants.USER_NAME, name);
		map.put(Constants.SEND_TIME, message.time);
		map.put(Constants.MESSAGE_CONTENT, message.msg);
		listItem.add(map);
	    listItemAdapter.notifyDataSetChanged();
		*/
		Log.v("MESSAGE", message.msg);
		MsgViewContainer msg=null;
	    if(message.senderId==friend.userId)
	    {
	    	msg =new MsgViewContainer(1, DataController.head[Integer.parseInt(friend.headImageUrl)],
	    			friend.userName, message.time, message.msg);
	    }
	    else
	    {
	    	//自己头像暂时写死
	    	msg =new MsgViewContainer(2, DataController.head[Controller.getUserId()%8],
	    			Controller.getUserName(), message.time, message.msg);
	    }
	   
		myAdapter.addMessage(msg);
	
		myAdapter.notifyDataSetChanged();
		
		resetTime();
		unlock();//
		
	}
	private void addUnreadMessage(ArrayList<ChatContentMessage> messageList) {
		if (messageList == null)
			return;
		Iterator<ChatContentMessage> iterator = messageList.iterator();
		ChatContentMessage message=null;
		while (iterator.hasNext()) {
//			HashMap<String, Object> map = new HashMap<String, Object>();
		    message = iterator.next();
//			map.put(Constants.USER_ID, message.senderId);
//			String name=Controller.getNameById(message.senderId);
//			map.put(Constants.USER_NAME, name);
//			map.put(Constants.MESSAGE_CONTENT, message.msg);
//			map.put(Constants.SEND_TIME, message.time);
//			listItem.add(map);
		    
		    appendMsg(message);
			
			// 将未读消息加入到新消息队列,便于之后保存到数据库中
		//	newMessageList.add(message);
		}
		if(message!=null)
		   lastMsgString=message.msg;
	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onStop");
		super.onStop();
	}

	
	
	private void addHistoryMessage() {
		// 查询本地数据库获得聊天记录
	//	List<ChatContentMessage> historyMsgList = dbManager
		//		.queryMessagesRecord(hostName, friend.userName);
		List<ChatContentMessage> historyMsgList =null;
		LocalDataProcess localDataProcess=new LocalDataProcess();
		historyMsgList=localDataProcess.downLoadHistoryMessageRecord(Controller.getUserId(), friend.userId);
		
		Iterator<ChatContentMessage> iterator = historyMsgList.iterator();
		while (iterator.hasNext()) {
			ChatContentMessage messageClass = iterator.next();
			appendMsg(messageClass);
			/*
			HashMap<String, Object> map = new HashMap<String, Object>();
			int id=messageClass.senderId;
			String name=Controller.getNameById(id);
			map.put(Constants.USER_ID, id);
			map.put(Constants.USER_NAME, name);
			map.put(Constants.MESSAGE_CONTENT, messageClass.msg);
			map.put(Constants.SEND_TIME, messageClass.time);
			listItem.add(map);
			*/
		}
	}


	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		Log.v(TAG, "keydown");
		 if (keyCode == KeyEvent.KEYCODE_BACK) {  
			 if(autoSendMsg!=null)
			 		autoSendMsg.endThread();
			  this.finish();
			    return super.onKeyDown(keyCode, event); 
		 }
		 else if(keyCode == KeyEvent.KEYCODE_F10)
		 {
			 if(autoSendMsg!=null)
				 		autoSendMsg.endThread();
		 }
		 return false;
	}
}

package activity;

import java.util.ArrayList;
import java.util.HashMap;
import messageClasses.OnlineStatusChangeMessage;
import messageClasses.OpenSessionMessage;

import org.json.JSONException;
import org.json.JSONObject;


import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;

import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;

import com.example.chatsysdemo.R;
import commontool.CommonFunctions;
import commontool.Constants;
import commontool.Controller;
import commontool.DataController;

public class ActFinding extends Activity {
	public final static String TAG = "ActFinding";
	
	
	private SensorManager sensorManager;
	private Vibrator vibrator;
	private final static int SENSOR_SHAKE=10;
	private final static int GetServerData=8;
	private final static int StartChat=6;
	
	private final static int TIMEINTEVAL=15;
//	private Button btnSearch;
	private ImageView ivNotice;
	private	String userName;
	private int userId;
	private ListView lvfoundFriends;
	
	private ArrayList<HashMap<String, Object>> listItem;
	private SimpleAdapter listItemAdapter;
	
	private MySMSReceiver smsReceiver = null;
	
	private  static  int times=TIMEINTEVAL;//无操作时间三十秒则选择自聊天
	
	
	
	private ChoseObjThread choseObjThread=null;
	private FillDataThread fillDataThread=null;
	public static synchronized void resetTime()
	{
		times=TIMEINTEVAL;
	}
	
	public static synchronized void minusTime()
	{
		times--;
	}
	
	
	Handler handler = new Handler() {
		public void handleMessage(Message Message) {
			//要做的事情
			switch(Message.what)
			{
				case SENSOR_SHAKE:
					if(choseObjThread==null)
					{
					    CommonFunctions.showMessage(ActFinding.this, "开启自动聊天模式,再摇一次关闭自动聊天模式");
						fillDataThread=new FillDataThread();
						new Thread(fillDataThread).start();
					}
					else
					{
						 CommonFunctions.showMessage(ActFinding.this, "关闭启自动聊天模式,再摇一次开启自动聊天模式");
						Log.v(TAG, "关闭启自动聊天模式,再摇一次开启闭自动聊天模式");
						choseObjThread.endThread();
						choseObjThread=null;
					}
					break;
				case GetServerData :
					if(listItem.size()<=0 || Controller.getChatStatus().equals("Negative") || Controller.getCurrentMachChatObjId()!=-1)
						break;
					fillData();
					if(choseObjThread!=null)
					{//开启定时自动聊线程
						choseObjThread.endThread();
						choseObjThread=null;
					}
					Log.v(TAG, "开启自动聊天模式,再摇一次关闭自动聊天模式");
                    choseObjThread = new ChoseObjThread();
					new Thread(choseObjThread).start();
					break;
				case StartChat:
					if(Controller.getChatStatus().equals("Negative") || Controller.getCurrentMachChatObjId()!=-1)
						return ;
					if(Controller.getOthersFriendsList()!=null && Controller.getOthersFriendsList().size()>0)
					{
						autoChat(0);//  默认找第一个人聊
					}
					break;
				default:
					break;
			}
			
			
		}
	};
	
	public class FillDataThread implements Runnable{

		@Override
		public void run() {
			// TODO Auto-generated method stub
			try {
				listItem=DataController.fillData(ActFinding.this, userId,2);
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			Message message=new Message();
			message.what=GetServerData;
			handler.sendMessage(message);//发送消息
		}
	}
	
	public class ChoseObjThread implements Runnable{
		private boolean isContinue=true;
		@Override
		public void run() {
		// TODO Auto-generated method stub
			while (isContinue) {
				try {
					if(Controller.getChatStatus().equals("Negative"))
				    	{
							resetTime();
							continue;//被动方式,不主动发起会话,但保持循环监听是否设置为Positive模式
				    	}
				    Thread.sleep(1000);//线程暂停1秒
		
					minusTime();
					if(times==0)
					{
						Message message=new Message();
						message.what=StartChat;
						handler.sendMessage(message);//发送消息
						resetTime();
					}
				} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				}
			}
			CommonFunctions.generateLogV(TAG, "停止ChoseObjThread");
		}
		public void  endThread()
		{
			isContinue=false;
		}
	}
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		Log.v(TAG, "keydown");
		 return false;
	   // return super.onKeyDown(keyCode, event);  
	}
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		Log.v(TAG, "onCreate");
		
		setContentView(R.layout.finding_list);
		//if(自动机器人聊天)
		//   fillData();
		getInstance();
	//	if(Controller.getChatStatus().equals("Positive"))
//lz12/21		choseObjThread=	new ChoseObjThread();
//lz12/21		new Thread(choseObjThread).start();
		
//		btnSearch.setOnClickListener(new OnClickListener() {
//			@Override
//			public void onClick(View arg0) {
//				// TODO Auto-generated method stub
//				fillData();
//			}
//		});
		lvfoundFriends.setOnItemClickListener(new lvItemClickListener());
		
		IntentFilter myIntentFilter = new IntentFilter();
		//myIntentFilter.addAction(Constants.SMS_RECEIVER_GUEST);
		myIntentFilter.addAction(Constants.SMS_RECEIVER_Finding);
		smsReceiver = new MySMSReceiver();
		registerReceiver(smsReceiver, myIntentFilter);
		
		if(sensorManager!=null)
		{
			Log.v(TAG, "regist");
			sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor
					(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
			
		}
		
	}
	
	public class lvItemClickListener implements OnItemClickListener {
		@Override
		public void onItemClick(AdapterView<?> lv, View view, int position,
				long id) {
			times=60;
			
			HashMap<String, Object> map = (HashMap<String, Object>) listItem
					.get(position);
			 int userId = (Integer) map.get("fi_user_id");
			 
			 Intent intent=new Intent(ActFinding.this,ActPersonalInfo.class);
			 intent.putExtra(Constants.USER_ID, userId);
			 startActivity(intent);
		}
	}
	
	private void autoChat(int position)
	{
		 HashMap<String, Object> map = (HashMap<String, Object>) listItem
				.get(position);
		 int id=(Integer)map.get("fi_user_id");
		
	     OpenSessionMessage opMessage=new OpenSessionMessage();
	     opMessage.type=Constants.OPEN_SESSION;
	     opMessage.friendType=2;  //非好友
	     opMessage.time=CommonFunctions.getSysTime();
	     opMessage.userId=id;
	     
	    String messageString = null;
		try {
			messageString = CommonFunctions.castMessageclassToJsonStr(opMessage);
		} catch (JSONException e) {
			CommonFunctions.generateLogV(TAG, "CommonFunctions.castMessageclassToJsonStr(opMessage);", "JSONException");
			e.printStackTrace();
		}
		
	    CommonFunctions.sendMyBroadcast(ActFinding.this, messageString, Constants.SMS_RECEIVER_SESSION);
	    startChat(id,position);
	}
	private void startChat(int _id,int position) {
		// TODO Auto-generated method stub
		Intent intentAct = new Intent(ActFinding.this, ActChat.class);
		intentAct.putExtra(Constants.USER_ID, _id);
		intentAct.putExtra("type", 2);
		// 设置当前聊天对象
		Controller.setCurrentMachChatObjId(_id);
		startActivity(intentAct);
	}
	
	private class MySMSReceiver extends BroadcastReceiver {
		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub
			String messageString;
			messageString = intent.getStringExtra(Constants.BROADCAST_MESSAGE);
			JSONObject jsonObject = null;
			try {
				jsonObject = new JSONObject(messageString);
			} catch (JSONException e) {
				CommonFunctions.generateLogV(TAG,
						"new JSONObject(messageString)", "JSONException");
				e.printStackTrace();
			}
			messageClasses.Message message = CommonFunctions
					.castJsonToMessage(jsonObject);
			parseMessage(message);
			
		}
	}
	private void parseMessage(messageClasses.Message message) {
	//	String typeString=message.type;
	///	if (typeString.equals(Constants.FRIEND_ONLINE_STATUS_CHANGE)) {
//			OnlineStatusChangeMessage onlineStatusChangeMessage=(OnlineStatusChangeMessage)message;
//			int position = 0;
//			position=DataController.findTheListPositon(listItem,"fi_user_id", onlineStatusChangeMessage.userId);
//			if(position==-1)
//				return ;
//			//改变在线状态
//			DataController.changeListItemValue(2,onlineStatusChangeMessage.userId ,position,"fi_user_status", onlineStatusChangeMessage.status, listItem);
//			Controller.changeUserStatus(onlineStatusChangeMessage.userId,onlineStatusChangeMessage.status);
//		}
//		if(listItemAdapter!=null)
//		   listItemAdapter.notifyDataSetChanged();
	}
	
	private void fillData(){
		// TODO Auto-generated method stub
		if(listItem==null)
			return;
		String[] froms=new String[] {"fi_user_image", "fi_user_name","fi_user_status","fi_user_location","fi_user_locDes","fi_user_id"};
		int[] tos=new int[] { R.id.fi_user_image, R.id.fi_user_name,R.id.fi_user_status,R.id.fi_user_location,R.id.fi_user_locDes};
//		try {
//			listItem=DataController.fillData(ActFinding.this, userId,2);
//		} catch (JSONException e) {
//			// TODO Auto-generated catch block
//			CommonFunctions.generateLogV(TAG, "friendslistPro.fillData(ActFriendsList.this, userId,2)", "JSONException");
//			e.printStackTrace();
//		}
		if(listItem.size()>0)
		{
			ivNotice.setVisibility(View.GONE);
		}
		listItemAdapter = new SimpleAdapter(this,listItem,// 数据源
							R.layout.finding_list_item,// ListItem的XML实现
							froms,// 动态数组与ImageItem对应的子项
							tos);// ImageItem的XML文件里面的一个ImageView,两个TextView ID		
		lvfoundFriends.setAdapter(listItemAdapter);
	}
	
	private void getInstance() {
		lvfoundFriends = (ListView) findViewById(R.id.lvfoundFriends);
		userName = Controller.getUserName(); 
		userId = Controller.getUserId();
	//	btnSearch=(Button)findViewById(R.id.btnSearch);
		
		ivNotice=(ImageView)findViewById(R.id.ivNotice);
		sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
		vibrator=(Vibrator)getSystemService(VIBRATOR_SERVICE);
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		if(sensorManager!=null)
		{
			sensorManager.unregisterListener(sensorEventListener);
		}
		if (smsReceiver != null)
			unregisterReceiver(smsReceiver);
		if(choseObjThread!=null)
			choseObjThread.endThread();
		
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Log.v(TAG, "onPause");
		
		
	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		Log.v(TAG, "onResume");
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Log.v(TAG, "onResume");
		
	}
	
	private SensorEventListener sensorEventListener =new SensorEventListener()
	{

		@Override
		public void onAccuracyChanged(Sensor sensor, int accuracy) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void onSensorChanged(SensorEvent event) {
			// TODO Auto-generated method stub
			if(Controller.getCurrentActivity()!=TAG)  //只有当停 留在当前窗口时才触发摇一摇事件
			{
				return ;
			}
			float[] values=event.values;
			float x=values[0];
			float y=values[1];
			float z=values[2];
			//Log.v(TAG, "X方向加速度"+x+";Y方向加速度"+y+";Z方向加速度"+z);
			int medumValue=19;
			if(Math.abs(x)>medumValue || Math.abs(y)>medumValue || Math.abs(z)>medumValue)
			{
				vibrator.vibrate(200);
				Message msg=new Message();
				msg.what=SENSOR_SHAKE;
				handler.sendMessage(msg);
			}
		}
		
	};
	
	
}

 

 

package activity;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import messageClasses.AddFriendMessage;
import messageClasses.ChatContentMessage;
import messageClasses.Friends;
import messageClasses.Message;
import messageClasses.OnlineStatusChangeMessage;
import messageClasses.OpenSessionMessage;
import messageClasses.Session;
import messageProcessPackage.SocketCommunicationService;
import messageProcessPackage.SocketCommunicationService.LocalBinder;

import org.apache.http.client.ClientProtocolException;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import sqliteDB.DBManager;
import com.example.chatsysdemo.R;
import commontool.*;
import android.R.integer;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.BroadcastReceiver;

import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.ServiceConnection;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.IntentFilter;

import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;


import ServerInteract.HttpRequestServer;

public class ActFriendsList extends Activity{
	public final static String TAG = "ActFriendsList";
	private ListView lvFriends;
	
	private	String userName;
	private int userId;
	
	private ArrayList<HashMap<String, Object>> listItem;
	private SimpleAdapter listItemAdapter;
	private MySMSReceiver smsReceiver = null;
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		Log.v(TAG, "keydown");
		
	    return false; 
	}
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.friends_list);
		Log.v(TAG, "onCreate");
		getInstance();
        fillData();
    
		// startService方式启动服务
		// Intent intent = new Intent("SocketCommunicationService");
		// startService(intent);

		// 启动广播接收器
		IntentFilter myIntentFilter = new IntentFilter();
		//myIntentFilter.addAction(Constants.SMS_RECEIVER_CHATMAIN);
		myIntentFilter.addAction(Constants.SMS_RECEIVER_FRIENDSLIST);
		smsReceiver = new MySMSReceiver();
		registerReceiver(smsReceiver, myIntentFilter);
		
		lvFriends.setOnItemClickListener(new lvItemClickListener());
	}

	private void fillData(){
		// TODO Auto-generated method stub
		String[] froms=new String[] { "fr_user_image", "fr_user_name","fr_user_status","fr_user_ivStatus","fr_user_id",};
		int[] tos=new int[] { R.id.fr_user_image, R.id.fr_user_name, R.id.fr_user_status,R.id.fr_user_ivStatus};
		try {
			listItem=DataController.fillData(ActFriendsList.this, userId,1);
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			CommonFunctions.generateLogV(TAG, "friendslistPro.fillData(ActFriendsList.this, userId,1)", "JSONException");
			e.printStackTrace();
		}
		listItemAdapter = new SimpleAdapter(this,listItem,// 数据源
							R.layout.friends_list_item,// ListItem的XML实现
							froms,// 动态数组与ImageItem对应的子项
							tos);// ImageItem的XML文件里面的一个ImageView,两个TextView ID		
	    lvFriends.setAdapter(listItemAdapter);
	}

	private class MySMSReceiver extends BroadcastReceiver {
		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub
			String messageString;
			messageString = intent.getStringExtra(Constants.BROADCAST_MESSAGE);
			JSONObject jsonObject = null;
			try {
				jsonObject = new JSONObject(messageString);
			} catch (JSONException e) {
				CommonFunctions.generateLogV(TAG,
						"new JSONObject(messageString)", "JSONException");
				e.printStackTrace();
			}
			Message message = CommonFunctions
					.castJsonToMessage(jsonObject);
			CommonFunctions.generateLogV("xxxxx11", message.toString());
			parseMessage(message);
		}
	}

	private void parseMessage(Message message) {
		String typeString=message.type;
		if (typeString.equals(Constants.FRIEND_ONLINE_STATUS_CHANGE)) {
			
			OnlineStatusChangeMessage onlineStatusChangeMessage=(OnlineStatusChangeMessage)message;
			CommonFunctions.generateLogV("status","change:"+onlineStatusChangeMessage.status);
			int position = 0;
			position=DataController.findTheListPositon(listItem, "fr_user_id",onlineStatusChangeMessage.userId);
			//改变在线状态
			if(-1==position)//非好友发送的消息
				return ;
			
			DataController.changeListItemValue(2,onlineStatusChangeMessage.userId, position,"fr_user_status", onlineStatusChangeMessage.status, listItem);
			CommonFunctions.generateLogV("status",onlineStatusChangeMessage.userId+","+ onlineStatusChangeMessage.status);
			Controller.changeUserStatus(onlineStatusChangeMessage.userId, onlineStatusChangeMessage.status);
			listItemAdapter.notifyDataSetChanged();
		}
		else if(typeString.equals(Constants.ADD_FRIEND))
		{
			AddFriendMessage adMsg=(AddFriendMessage)message;
			int guestId=adMsg.guestId;
			Friends friend=Controller.getFriendbyId(guestId);
			DataController.addItem(2, friend, listItem);
			listItemAdapter.notifyDataSetChanged();
		}
	}
    
	public class lvItemClickListener implements OnItemClickListener {
		@Override
		public void onItemClick(AdapterView<?> lv, View view, int position,
				long id) {
			//应该打开用户信息界面并有一个按钮发送消息,点击发送消息后执行以下代码发送打开会话的session,并打开聊天窗口
			HashMap<String, Object> map = (HashMap<String, Object>) listItem
					.get(position);
			 int guestId = (Integer) map.get("fr_user_id");
			 Intent intent=new Intent(ActFriendsList.this,ActPersonalInfo.class);
			 intent.putExtra(Constants.USER_ID,  guestId );
			 startActivity(intent);
		}
	}
	private void getInstance() {
		lvFriends = (ListView) findViewById(R.id.lvFriends);
		userName = Controller.getUserName(); 
		userId = Controller.getUserId();
	}
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onPause");
		super.onPause();
	}

	@Override
	protected void onDestroy() {
		Log.v(TAG, "onDestroy");
		super.onDestroy();
	}
}


 

package activity;

import org.json.JSONObject;

import synProcess.LoadServerData;
import synProcess.LocalDataProcess;

import com.example.chatsysdemo.R;

import commontool.CommonFunctions;
import commontool.Constants;
import commontool.Controller;
import commontool.PreferenceService;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import ServerInteract.HttpRequestServer;

public class ActLogin extends Activity {
	private Button btnLogin;
	private Button btnRegister;

	private Button btnConfig;

	private EditText edtName;
	private EditText edtPwd;

	private TextView tvTip;
	private TextView tvRegistLink;

	private Thread mThread;
	String name, pwd;
	int id;

	private Spinner spnStatus;

	private Handler mHandler = new Handler() {
		// message对象中包含了线程方法发过来的数据
		public void handleMessage(Message msg) {
			tvTip.setText("result:" + msg.obj);
			if ("SUCCESS".equals(msg.obj.toString())) {
				Intent intent = new Intent(ActLogin.this, ActTabHost.class);
				intent.putExtra(Constants.USER_NAME, name);
				intent.putExtra(Constants.USER_PASSWORD, pwd);

				startActivity(intent);

				ActLogin.this.finish();
			}
		}
	};

	// 这是一个被后台线程执行的方法,由bnt2的click事件 创建线程并启动
	Runnable httpRequest = new Runnable() {
		public void run() {
			// 执行结果通过obtainMessage消息机制发送给UI线程
			boolean result = false;
			try {
				result = loginCheck();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (false == result)
				return;
			mHandler.obtainMessage(100, "登录验证成功" + Controller.getUserStatus())
					.sendToTarget();
			connectServer();
			mHandler.obtainMessage(100,
					"SOCKET连接成功,设置在线状态:" + Controller.getUserStatus())
					.sendToTarget();
			mHandler.obtainMessage(100, "SUCCESS").sendToTarget();
			// CommonFunctions.showMessage(ActLogin.this, "SUCCESS");
		}
	};

	protected boolean loginCheck() throws Exception {
		String resultString = "";
		HttpRequestServer requestServer = new HttpRequestServer();
		JSONObject jobj = null;

		jobj = requestServer.login(name, pwd);

		if (jobj == null) {
			mHandler.obtainMessage(100, "网络连接失败").sendToTarget();
			return false;
		}
		resultString = jobj.getString(Constants.STATUS);

		if (resultString.equals(Constants.SUCCESS)) {
			id = jobj.getInt(Constants.USER_ID);
			mHandler.obtainMessage(100, "登录验证成功!").sendToTarget();

			Controller.setUserName(name);
			Controller.setUserId(id);
			Controller.addMapForIdName(id, name);
			return true;
		} else {
			mHandler.obtainMessage(100, "登录验证失败!").sendToTarget();
			return false;
		}
	}

	protected void connectServer() {
		// 必须在设置ID之后,建立SOCKET连接并发送check_in
		Controller.createMsgSocket();

		mHandler.obtainMessage(100, "成功与服务器建立SOCKET连接成功").sendToTarget();

		HttpRequestServer changeOnlineStatusrequest = new HttpRequestServer();

		// 发送状态信息
		boolean result = changeOnlineStatusrequest.changeOnlineStatus(id,
				Controller.getUserStatus());
		if (false == result) {
			// CommonFunctions.showMessage(ActLogin.this, "状态设置信息发送失败");
			// Controller.setUserStatus(Constants.OFFLINE);
			mHandler.obtainMessage(100, "状态设置信息发送失败").sendToTarget();
		} else {
			mHandler.obtainMessage(100, "状态设置信息发送成功").sendToTarget();
			// Controller.setUserStatus(Constants.ONLINE);
		}
		mHandler.obtainMessage(100, "设置在线状态成功:" + Controller.getUserStatus())
				.sendToTarget();

		// 从服务器获得好友列表并将其更新到本地数据库
		LoadServerData loaddata = new LoadServerData();
		if (loaddata.loadFriendsList(Controller.getUserId(), 1))
			mHandler.obtainMessage(100, "从服务器加载好友列表成功").sendToTarget();
		else
			mHandler.obtainMessage(100, "从服务器加载好友列表失败").sendToTarget();

		// 从服务器获得好友列表并将其更新到本地数据库
		LoadServerData loadTopic = new LoadServerData();
		if (loadTopic.loadChatTopicList(Controller.getUserId()))
			mHandler.obtainMessage(100, "从服务器加载聊天主题成功").sendToTarget();
		else
			mHandler.obtainMessage(100, "从服务器加载聊天主题失败").sendToTarget();

		// 加载本地数据库
		LocalDataProcess localDataProcess = new LocalDataProcess();
		localDataProcess.downLoadLocalData();
		mHandler.obtainMessage(100, "从本地数据库加载数据完成!").sendToTarget();
	}

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login);
		getInstance();
		btnClickImpl impl = new btnClickImpl();
		btnLogin.setOnClickListener(impl);
		// btnRegister.setOnClickListener(impl);
	}

	class btnClickImpl implements OnClickListener {
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub

			// getSysConfigParams();//获得系统参数

			// if (v.getId() == R.id.btnRegister) {
			// Intent intent = new Intent(ActLogin.this, ActRegist.class);
			// startActivity(intent);
			// return;
			// }
			name = edtName.getText().toString().trim();
			pwd = edtPwd.getText().toString().trim();

			if (name == "" || pwd == "") {
				CommonFunctions.showMessage(ActLogin.this, "用户名和密码不能为空!");
				edtName.requestFocus();
				return;
			}

			mThread = new Thread(httpRequest);
			mThread.start();// 线程启动
			tvTip.setText("loading...");
		}

	}

	private Spinner.OnItemSelectedListener spnStatusSelList = new Spinner.OnItemSelectedListener() {

		@Override
		public void onItemSelected(AdapterView<?> parent, View arg1, int arg2,
				long arg3) {
			// TODO Auto-generated method stub
			Controller.setChatStatus(parent.getSelectedItem().toString());
		}

		@Override
		public void onNothingSelected(AdapterView<?> arg0) {
			// TODO Auto-generated method stub
		}
	};

	private void getInstance() {// 还要设置弹出软键盘
		btnLogin = (Button) findViewById(R.id.btnLogin);
		// btnRegister = (Button) findViewById(R.id.btnRegister);
		// btnConfig = (Button) findViewById(R.id.btnConfig);
		edtName = (EditText) findViewById(R.id.edtUserName);
		edtPwd = (EditText) findViewById(R.id.edtPwd);

		tvTip = (TextView) findViewById(R.id.tip);
		tvRegistLink = (TextView) findViewById(R.id.tvLink);

		String linkTxt = "Not A Member Yet ?  Regist Now !";
		SpannableString spannableLinkStr = new SpannableString(linkTxt);
		spannableLinkStr.setSpan(new ClickableSpan() {
			@Override
			public void onClick(View view) {
				Intent intent = new Intent(ActLogin.this, ActRegist.class);
				startActivity(intent);
			}
		}, 0, linkTxt.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
		tvRegistLink.setText(spannableLinkStr);
		tvRegistLink.setMovementMethod(LinkMovementMethod.getInstance());

		spnStatus = (Spinner) findViewById(R.id.spnStatus);
		ArrayAdapter<CharSequence> adapStatusList = ArrayAdapter
				.createFromResource(this, R.array.spnStatusList,
						R.layout.spinner_layout_small);
		spnStatus.setAdapter(adapStatusList);

		Controller.setUserStatus(Constants.ONLINE); // 
		Controller.setChatStatus("Positive");
		spnStatus.setOnItemSelectedListener(spnStatusSelList);

		// btnConfig.setOnClickListener(new OnClickListener() {
		// @Override
		// public void onClick(View arg0) {
		// // TODO Auto-generated method stub
		// Intent intent = new Intent(ActLogin.this, ActSysParamManage.class);
		// startActivity(intent);
		// }
		// });
	}

	private void getSysConfigParams() {
		// PreferenceService service =new
		// PreferenceService(getApplicationContext(), "preference");
		// Controller.setServerCategoryStr(service.getString("serverCategoryStr"));
		// Controller.setServerIP(service.getString("serverIP"));
		// Controller.setServerPort(Integer.parseInt(service.getString("serverPort")));
	}
}

 

package activity;

import java.io.IOException;

import messageClasses.AddFriendMessage;
import messageClasses.Friends;
import messageClasses.OpenSessionMessage;

import org.apache.http.client.ClientProtocolException;
import org.json.JSONException;
import org.json.JSONObject;

import com.example.chatsysdemo.R;

import commontool.CommonFunctions;
import commontool.Constants;
import commontool.Controller;
import commontool.DataController;

import ServerInteract.HttpRequestServer;
import android.app.Activity;
import android.content.Intent;
import android.opengl.Visibility;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class ActPersonalInfo extends Activity {
	public final String TAG = "ActPersonalInfo";
	private Button btnSendMsg;
	private ImageButton addFriend;
	private ImageView headImageView;
	private TextView tvName;
	private ImageView  ivSex;
	Friends friend;
//	private String name;
	private int id;
//	private int friendType;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.v(TAG, "onCreate");
		setContentView(R.layout.personal_info);
		getInstance();
		
		  Controller.setCurrentActivity(TAG);
	}
	private void getInstance() {
		
		tvName=(TextView)findViewById(R.id.info_user_name);
		
	//	tvStatus=(TextView)findViewById(R.id.info_user_status);
		btnSendMsg = (Button) findViewById(R.id.btnInfoSendMsg);
		
		addFriend = (ImageButton) findViewById(R.id.btnInfoAddFriend);
		
		Intent requestIntent=getIntent();
		
		id=requestIntent.getIntExtra(Constants.USER_ID, -1);
		
		friend=Controller.getFriendbyId(id);
		
		 if(friend==null)
	       {
	        	friend=new Friends(id, "null", String.valueOf(R.drawable.head01), Constants.ONLINE);
	        	friend.type=2;
	       }
		 
		int r=Integer.parseInt(friend.headImageUrl);
		headImageView=(ImageView)findViewById(R.id.info_user_image);
		headImageView.setImageResource(DataController.head[r]);
		
		ivSex=(ImageView)findViewById(R.id.info_user_sex);
		
		if(friend.status.equals(Constants.OFFLINE))
			headImageView.setImageAlpha(100);
		
		tvName.setText(friend.userName);
		//tvStatus.setText("["+friend.status+"]");
		if(1==friend.type)
			addFriend.setVisibility(View.GONE);
		//需要设置头像
		btnSendMsg.setOnClickListener(new btnSendMsgOnclickImpl());
		addFriend.setOnClickListener(new btnAddFriendOnclickImpl());
	}
	public class btnSendMsgOnclickImpl implements OnClickListener
	{
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			
			  if((1==friend.type) && (Controller.getCurrentChatObjId()!=-1))
				{
					CommonFunctions.showMessage(ActPersonalInfo.this, "此类好友聊天窗口已打开!");
					return ;
				}
			    else if((2==friend.type) && Controller.getCurrentMachChatObjId()!=-1){
			    	CommonFunctions.showMessage(ActPersonalInfo.this, "此类好友聊天窗口已打开!");
					return ;
			    }
			
			     OpenSessionMessage opMessage=new OpenSessionMessage();
			     opMessage.type=Constants.OPEN_SESSION;
			     opMessage.friendType=friend.type;
			     opMessage.time=CommonFunctions.getSysTime();
			     opMessage.userId=id;
			     
			    String messageString = null;
				try {
					messageString = CommonFunctions.castMessageclassToJsonStr(opMessage);
				} catch (JSONException e) {
					CommonFunctions.generateLogV(TAG, "CommonFunctions.castMessageclassToJsonStr(opMessage);", "JSONException");
					e.printStackTrace();
				}
			   // CommonFunctions.sendMyBroadcast(ActPersonalInfo.this, messageString, Constants.SMS_RECEIVER_CHATMAIN);
			   //新增会话
				CommonFunctions.sendMyBroadcast(ActPersonalInfo.this, messageString, Constants.SMS_RECEIVER_SESSION);
			    startChat(id,friend.type);
		}
	}
	
	public class btnAddFriendOnclickImpl implements OnClickListener
	{
		@Override
		public void onClick(View v) {
			//添加好友
			AddFriendThread dTask = new AddFriendThread();  
            dTask.execute(new Object());
		}
	}
	
	class AddFriendThread extends AsyncTask
	{
		@Override
		protected Object doInBackground(Object... arg0) {
			// TODO Auto-generated method stub
			boolean isSuccess=false;
			HttpRequestServer requestServer = new HttpRequestServer();
			try {
				isSuccess=requestServer.addFriend(Controller.getUserId(), id);
			} catch (ClientProtocolException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return isSuccess;
		}

		@Override
		protected void onPostExecute(Object result) {
			// TODO Auto-generated method stub
			Boolean ans=(Boolean)result;
			CommonFunctions.generateLogV(TAG, String.valueOf(ans));
			if(true==ans)
			{
				CommonFunctions.showMessage(ActPersonalInfo.this, "添加好友成功!");
			//	ActPersonalInfo.this.finish();
				
				 AddFriendMessage adFriendMessage=new AddFriendMessage();
				 adFriendMessage.type=Constants.ADD_FRIEND;
				 adFriendMessage.time=CommonFunctions.getSysTime();
				 adFriendMessage.hostId=Controller.getUserId();
				 adFriendMessage.guestId=id;
				 
			    String messageString = null;
				try {
					messageString = CommonFunctions.castMessageclassToJsonStr(adFriendMessage);
				} catch (JSONException e) {
					CommonFunctions.generateLogV(TAG, "CommonFunctions.castMessageclassToJsonStr(opMessage);", "JSONException");
					e.printStackTrace();
				}
			   // CommonFunctions.sendMyBroadcast(ActPersonalInfo.this, messageString, Constants.SMS_RECEIVER_CHATMAIN);
			   //新增会话
				CommonFunctions.sendMyBroadcast(ActPersonalInfo.this, messageString, Constants.SMS_RECEIVER_FRIENDSLIST);
			   //将非好友转为好友
				Controller.addFriend(Controller.getFriendbyId(id));
			    Controller.deleteOtherFriendById(id);
			}
			else
			{
				CommonFunctions.showMessage(ActPersonalInfo.this, "添加好友失败!");
			}
			super.onPostExecute(result);
		}
	}
	
	//未完
	private void startChat(int _id,int type) { //当有未读消息时应关心Actsession中的未读消息数目
		// TODO Auto-generated method stub
		Intent intentAct = new Intent(ActPersonalInfo.this, ActChat.class);
		intentAct.putExtra(Constants.USER_ID, _id);
		intentAct.putExtra("type", type);
		if(1==type)//好友
		{
			// 设置当前聊天对象
			Controller.setCurrentChatObjId(id);
			//Controller.setCurrentChatobjName(guestName);	
		}
		else {//非好友
			Controller.setCurrentMachChatObjId(id);
		//	Controller.setCurrentMachChatObjName(guestName);	
		}
		
		startActivity(intentAct);
	}
}


 

package activity;

import java.util.ArrayList;
import java.util.HashMap;

import messageClasses.ChatContentMessage;
import messageClasses.Friends;
import messageClasses.Message;
import messageClasses.OnlineStatusChangeMessage;
import messageClasses.OpenSessionMessage;
import messageClasses.Session;

import org.json.JSONException;
import org.json.JSONObject;

import com.example.chatsysdemo.R;
import commontool.CommonFunctions;
import commontool.Constants;
import commontool.Controller;
import commontool.DataController;

import android.app.Activity;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;

import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;

/**
 * 会话Activity
 * 
 * @author lz
 * 
 */
public class ActSession extends Activity {
	public static final String TAG = "ActSession";

	private int userId = 0;
	// private String userName = "";
	// private String userPwd = "";

	private ListView lvSessions;

	private ArrayList<HashMap<String, Object>> listItem;
	private SimpleAdapter listItemAdapter;

	private MySMSReceiver smsReceiver = null;

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		Log.v(TAG, "keydown");
		return false;
		// return super.onKeyDown(keyCode, event);
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.v(TAG, "onCreate");
		setContentView(R.layout.sessions_list);

		getInstance();
		fillData();

		lvSessions.setOnItemClickListener(new lvItemClickListener());

		// 启动广播接收器
		IntentFilter myIntentFilter = new IntentFilter();
		// myIntentFilter.addAction(Constants.SMS_RECEIVER_CHATMAIN);
		myIntentFilter.addAction(Constants.SMS_RECEIVER_SESSION);
		smsReceiver = new MySMSReceiver();
		registerReceiver(smsReceiver, myIntentFilter);

		// Controller.setCurrentActivity(TAG);
	}

	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onRestart");
		super.onRestart();
	}

	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onStart");
		super.onStart();
	}

	private void fillData() {
		// TODO Auto-generated method stub

		String[] froms = new String[] { "se_user_image", "se_user_name",
				"se_latest_msg", "se_message_num", "se_friend_type",
				"se_user_id" };
		int[] tos = new int[] { R.id.se_user_image, R.id.se_user_name,
				R.id.se_latest_msg, R.id.se_message_num, R.id.se_friend_type };
		if (listItem != null)// 清空数据
			listItem = null;
		try {
			listItem = DataController.fillData(ActSession.this, userId, 3);
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			CommonFunctions.generateLogV(TAG,
					"friendslistPro.fillData(ActFriendsList.this, userId,1)",
					"JSONException");
			e.printStackTrace();
		}
		listItemAdapter = new SimpleAdapter(this, listItem,// 数据源
				R.layout.sessions_list_item,// ListItem的XML实现
				froms, tos);
		lvSessions.setAdapter(listItemAdapter);
	}

	private class MySMSReceiver extends BroadcastReceiver {
		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub
			String messageString;

			messageString = intent.getStringExtra(Constants.BROADCAST_MESSAGE);

			CommonFunctions.generateLogV(TAG, messageString);

			JSONObject jsonObject = null;
			try {
				jsonObject = new JSONObject(messageString);
			} catch (JSONException e) {
				CommonFunctions.generateLogV(TAG,
						"new JSONObject(messageString)", "JSONException");
				e.printStackTrace();
			}

			Message message = CommonFunctions.castJsonToMessage(jsonObject);
			if (message == null)
				return;
			parseMessage(message);
		}
	}

	private void parseMessage(Message message) {
		String typeString = message.type;

		CommonFunctions.generateLogV("gej", "receive message" + typeString);
		if (typeString.equals(Constants.CHAT_MESSAGE)) {
			// 与该用户的聊天窗口已经打开则不用提示未读消息
			ChatContentMessage chatContentMessage = (ChatContentMessage) message;
			// 该用户的对话窗口已打开则在主界面不做处理

			int position = DataController.findTheListPositon(listItem,
					"se_user_id", chatContentMessage.senderId);

			if (-1 == position)// 对方主动发送消息
			{
				Session session = new Session();

				session.userId = chatContentMessage.senderId;
				Friends friend = Controller.getFriendbyId(session.userId);
				if (friend == null) // 匿名消息
				{// 非好友且不是摇一摇摇到的好友,或还未摇一摇,otherFriendlist为空
					session.type = 2;
					session.userName = "null";
					friend=new Friends(session.userId,"null","2",Constants.ONLINE);
					Controller.addOtherFriend(friend);
				} else {
					session.userName = friend.userName;
					session.type = friend.type;
				}

				session.lastMessage = session.userName + ":"
						+ chatContentMessage.msg;

				session.time = chatContentMessage.time;

				// lz12/21 session.unReadMessageNum="1";
				session.unReadMessageNum = "0";// lz12/21
				addSession(session);
				position = 0;// lz12/21 新加的会话在第一个位置
				// lz12/21 Controller.addUnreadMessage(session.userId,
				// chatContentMessage);

				// lz12/21 return ;
			}

			// 更新最新消息提示
			DataController
					.changeListItemValue(3, chatContentMessage.senderId,
							position, "se_latest_msg", chatContentMessage.msg,
							listItem);
			if ((Controller.getCurrentChatObjId() != chatContentMessage.senderId)
					&& (Controller.getCurrentMachChatObjId() != chatContentMessage.senderId)) {
				// 未读消息数目加1
				DataController.changeListItemValue(1,
						chatContentMessage.senderId, position,
						"se_message_num", "", listItem);

				Controller.addUnreadMessage(chatContentMessage.senderId,
						chatContentMessage);
			}
		}
		// else if (typeString.equals(Constants.FRIEND_ONLINE_STATUS_CHANGE)) {
		// OnlineStatusChangeMessage
		// onlineStatusChangeMessage=(OnlineStatusChangeMessage)message;
		// int position = -1;
		// //position=findTheListPositon(onlineStatusChangeMessage.userName);
		// position=DataController.findTheListPositon(listItem, "se_user_name",
		// onlineStatusChangeMessage.userName);
		// //改变在线状态
		// if(position==-1)
		// return ;
		// DataController.changeListItemValue(2,onlineStatusChangeMessage.userName,
		// position, Constants.ONLINE_VALUE, onlineStatusChangeMessage.status,
		// listItem);
		//
		// Controller.changeUserStatus(onlineStatusChangeMessage.userName,
		// onlineStatusChangeMessage.status);
		//
		// //changeListItemValue(2, position, onlineStatusChangeMessage.status);
		// }
		else if (typeString.equals(Constants.OPEN_SESSION)) {

			OpenSessionMessage opMsgMessage = (OpenSessionMessage) message;
			Session session = new Session();

			session.userId = opMsgMessage.userId;
			session.userName = Controller.getNameById(session.userId);
			if (true == Controller.isSessionExist(session.userId))
				return;
			session.lastMessage = "";
			session.time = opMsgMessage.time;

			session.type = opMsgMessage.friendType;
			session.unReadMessageNum = "";

			addSession(session);

		}
		listItemAdapter.notifyDataSetChanged();
	}

	protected void addSession(Session session) {
		DataController.addItem(1, session, listItem);
		Controller.addSession(session);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		// TODO Auto-generated method stub

		return super.onMenuItemSelected(featureId, item);
	}

	@Override
	protected void onDestroy() {
		Log.v(TAG, "onDestroy");
		super.onDestroy();
	}

	public class lvItemClickListener implements OnItemClickListener {
		@Override
		public void onItemClick(AdapterView<?> lv, View view, int position,
				long id) {

			HashMap<String, Object> map = (HashMap<String, Object>) listItem
					.get(position);
			int mId = (Integer) map.get("se_user_id");
			Integer friendType = (Integer) map.get("se_friend_type");
			startChat(mId, position, friendType);
		}

		private void startChat(int _id, int position, int type) {
			// TODO Auto-generated method stub
			Intent intentAct = new Intent(ActSession.this, ActChat.class);
			intentAct.putExtra(Constants.USER_ID, _id);
			// intentAct.putExtra("type", type);
			if (1 == type)// 好友
			{
				// 设置当前聊天对象
				Controller.setCurrentChatObjId(_id);
				// Controller.setCurrentChatobjName(guestName);
			} else {// 非好友
				Controller.setCurrentMachChatObjId(_id);
				// Controller.setCurrentMachChatObjName(guestName);
			}
			DataController.changeListItemValue(0, _id, position,
					"se_message_num", "", listItem);

			listItemAdapter.notifyDataSetChanged();
			startActivity(intentAct);
		}
	}

	private void getInstance() {
		lvSessions = (ListView) findViewById(R.id.lvSessionUsers);

		// userName = Controller.getUserName();

		userId = Controller.getUserId();
		listItem = new ArrayList<HashMap<String, Object>>();
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onPause");
		super.onPause();
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onResume");
		super.onResume();
	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onStop");
		super.onStop();
	}
}

 

 

package activity;

import java.util.ArrayList;
import java.util.Arrays;

import synProcess.LocalDataProcess;

import com.example.chatsysdemo.R;

import commontool.CommonFunctions;
import commontool.Constants;
import commontool.Controller;
import commontool.DataController;

import ServerInteract.HttpRequestServer;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.Switch;
import android.widget.TextView;

public class ActSetting extends Activity {
	public final static String TAG = "ActSetting";
	private Button btnLogout;
	private ImageButton ibtnEditProfile;
	private ImageView ivHead;
	private Switch statusSwitch;
	
	private TextView tvUserName;
	private Spinner spnChatTopics;
	private Spinner spnStatus;
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		Log.v(TAG, "keydown");
		 return false;
	   // return super.onKeyDown(keyCode, event);  
	}
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.v(TAG, "onCreate");
		setContentView(R.layout.setting);
		getInstance();
		setListener();
	}
	
	private void getInstance() {// 还要设置弹出软键盘
	    ibtnEditProfile=(ImageButton)findViewById(R.id.ibtnEditProfile);
	    tvUserName=(TextView)findViewById(R.id.tvUserName);
	    tvUserName.setText(Controller.getUserName());
	    
	    ivHead=(ImageView)findViewById(R.id.ivHeadImage);
	    ivHead.setImageResource(DataController.head[Controller.getUserId()%8]);
	    
	    statusSwitch=(Switch)findViewById(R.id.switchStatch);
	    if(Controller.getChatStatus().equals("Positive"))
	           statusSwitch.setChecked(true);
	    statusSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				// TODO Auto-generated method stub
				if(isChecked)
					Controller.setChatStatus("Positive");
				else 
					Controller.setChatStatus("Negative");
				 CommonFunctions.generateLogV("OnCheckedChangeListener", Controller.getChatStatus());
			}
		});
	    
	    spnChatTopics=(Spinner)findViewById(R.id.spnChatTopics);
	    spnStatus=(Spinner)findViewById(R.id.setSpnStatus);
	    
	    ArrayList<String> topicList=Controller.getTopicList();
	    ArrayAdapter<CharSequence> adapter=new ArrayAdapter(getApplicationContext(),R.layout.spinner_layout, topicList.toArray());
	    spnChatTopics.setAdapter(adapter);
	    
	    
		ArrayAdapter<CharSequence> adapStatusList = ArrayAdapter
				.createFromResource(this, R.array.spnUserStatusList,
						R.layout.spinner_layout);
		spnStatus.setAdapter(adapStatusList);
	    
	    btnLogout=(Button)findViewById(R.id.setting_btn_logout);
	    
	  
	}
	protected void setListener() {
		 spnChatTopics.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){

			@Override
			public void onItemSelected(AdapterView<?> parent, View arg1,
					int arg2, long arg3) {
				// TODO Auto-generated method stub
				Controller.setSelectedTopic(parent.getSelectedItem().toString());  
			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				// TODO Auto-generated method stub
			}
			 
		 }); 
		 ibtnEditProfile.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View arg0) {
					// TODO Auto-generated method stub
					Intent intent=new Intent(ActSetting.this,ActProfile.class);
					startActivity(intent);
				}
			});
		  
			btnLogout.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View arg0) {
					// TODO Auto-generated method stub
					AlertDialog.Builder builder = new Builder(ActSetting.this);
					builder.setMessage("确认退出吗?");
					builder.setTitle("提示");
				
					builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							dialog.dismiss();
						}

					});
					builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
							CommonFunctions.generateLogV(TAG, "确认退出");
							if (true == logout()) {
								Intent intent  = new Intent(Intent.ACTION_MAIN);
								intent.addCategory(Intent.CATEGORY_HOME);
								intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
								startActivity(intent);
								System.exit(0);
								dialog.dismiss();
								return;
							}
							dialog.dismiss();
						}
					});	
					builder.create().show();
				}
			});
	}
	
	protected boolean logout() {
		HttpRequestServer requestServer = new HttpRequestServer();
		boolean result= requestServer.changeOnlineStatus(Controller.getUserId(), Constants.OFFLINE);
		if(true==result)
		{
		//	LocalDataProcess localDataProcess = new LocalDataProcess();
		//	localDataProcess.upLocadLocalAllHistoryRecord();
			Controller.reset();
		}
		return result;
	}
	
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onDestroy");
		super.onDestroy();
	}
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onPause");
		super.onPause();
	}
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onResume");
		super.onResume();
	}
}


 

package activity;

import com.example.chatsysdemo.R;

import activity.ActLogin.btnClickImpl;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
/**
 * 启动画面
 * @author lz
 *
 */
public class ActSplash extends Activity {
	private final int SPLASH_DISPLAY_LENGHT = 500; // 延迟2秒

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.splash);

		new Handler().postDelayed(new Runnable() {
			public void run() {
				Intent mainIntent = new Intent(ActSplash.this, ActLogin.class);
				ActSplash.this.startActivity(mainIntent);
				ActSplash.this.finish();
			}
		}, SPLASH_DISPLAY_LENGHT);
	}
}


 

package activity;

import java.util.ArrayList;

import synProcess.LoadServerData;
import synProcess.LocalDataProcess;
import messageClasses.Friends;
import messageProcessPackage.SocketCommunicationService;
import messageProcessPackage.SocketCommunicationService.LocalBinder;

import com.example.chatsysdemo.R;

import commontool.CommonFunctions;
import commontool.Constants;
import commontool.Controller;

import ServerInteract.HttpRequestServer;
import activity.ActChat.btnSendClickOmpl;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.LocalActivityManager;
import android.app.AlertDialog.Builder;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TabHost;

public class ActTabHost extends Activity implements OnCheckedChangeListener {
	private final String TAG = "ActTabHost";
	private TabHost tabHost;
	private Intent sessionIntent; // 会话
	private Intent friendsListIntent; // 好友

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		Log.v(TAG, "keydown");
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			exit();
			return super.onKeyDown(keyCode, event);
		}
		return false;
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onDestroy");
		if (true == logout()) {
			Intent intent = new Intent(Intent.ACTION_MAIN);
			intent.addCategory(Intent.CATEGORY_HOME);
			intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			startActivity(intent);
			System.exit(0);
			return;
		}
		super.onDestroy();
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onPause");
		super.onPause();
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onResume");
		super.onResume();
	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onStop");
		super.onStop();
	}

	private void exit() {
		// TODO Auto-generated method stub
		AlertDialog.Builder builder = new Builder(ActTabHost.this);
		builder.setMessage("确认退出吗?");
		builder.setTitle("提示");

		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
			}

		});
		builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				if (true == logout()) {
					Intent intent = new Intent(Intent.ACTION_MAIN);
					intent.addCategory(Intent.CATEGORY_HOME);
					intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
					startActivity(intent);
					System.exit(0);
					dialog.dismiss();
					return;
				}
				dialog.dismiss();
			}
		});
		builder.create().show();
	}

	protected boolean logout() {
		HttpRequestServer requestServer = new HttpRequestServer();
		boolean result = requestServer.changeOnlineStatus(
				Controller.getUserId(), Constants.OFFLINE);
		if (true == result) {
			// LocalDataProcess localDataProcess = new LocalDataProcess();
			// localDataProcess.upLocadLocalAllHistoryRecord();
			Controller.reset();
		}
		return result;
	}

	private Intent findingIntent; // 发现
	private Intent settingIntent; // 设置

	private Thread mThread;

	private ServiceConnection mServiceConnection = null;
	private SocketCommunicationService myService = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.tabhost);
		Log.v(TAG, "onCreate");
		tabHost = (TabHost) findViewById(R.id.tabhost);
		LocalActivityManager groupActivity = new LocalActivityManager(this,
				false);

		groupActivity.dispatchCreate(savedInstanceState);

		tabHost.setup(groupActivity);

		// 绑定服务并启动接收消息的服务
		bindMyReceiveMsgService();

		// if(mThread == null) {
		// mThread = new Thread(loadData);
		// mThread.start();//线程启动
		// }

		initIntent();

		addSpec();

		((RadioGroup) findViewById(R.id.tab_radiogroup))
				.setOnCheckedChangeListener(this);

	};

	private Handler mHandler = new Handler() {
		// message对象中包含了线程方法发过来的数据
		public void handleMessage(Message msg) {

		}
	};

	// 这是一个被后台线程执行的方法,由bnt2的click事件 创建线程并启动
	Runnable loadData = new Runnable() {
		public void run() {
			LoadServerData loaddata = new LoadServerData();
			if (loaddata.loadFriendsList(Controller.getUserId(), 1))
				CommonFunctions.generateLogV("100", "从服务器加载好友列表成功!");
			else
				CommonFunctions.generateLogV("100", "从服务器加载好友列表失败!");
			// 从本地数据库取数据
			LocalDataProcess localDataProcess = new LocalDataProcess();
			localDataProcess.downLoadLocalData();
			CommonFunctions.generateLogV("100", "从本地数据库加载数据完成!");
		}
	};

	/**
	 * 初始化各个tab标签对应的intent
	 */
	private void initIntent() {
		sessionIntent = new Intent(this, ActSession.class);
		friendsListIntent = new Intent(this, ActFriendsList.class);
		findingIntent = new Intent(this, ActFinding.class);
		settingIntent = new Intent(this, ActSetting.class);
	}

	/**
	 * 为tabHost添加各个标签项
	 */
	private void addSpec() {
		tabHost.addTab(this.buildTagSpec("tab_session", "会话1", R.drawable.chat,
				sessionIntent));
		tabHost.addTab(this.buildTagSpec("tab_friendlist", "好友1",
				R.drawable.friends, friendsListIntent));
		tabHost.addTab(this.buildTagSpec("tab_finding", "发现1",
				R.drawable.discover, findingIntent));
		tabHost.addTab(this.buildTagSpec("tab_setting", "设置1",
				R.drawable.setting, settingIntent));
	}

	/**
	 * 自定义创建标签项的方法
	 * 
	 * @param tagName
	 *            标签标识
	 * @param tagLable
	 *            标签文字
	 * @param icon
	 *            标签图标
	 * @param content
	 *            标签对应的内容
	 * @return
	 */

	private TabHost.TabSpec buildTagSpec(String tagName, String tagLable,
			int icon, Intent content) {
		return tabHost.newTabSpec(tagName)
				.setIndicator(tagLable, getResources().getDrawable(icon))
				.setContent(content);
	}

	@Override
	public void onCheckedChanged(RadioGroup group, int checkedId) {
		// TODO Auto-generated method stub
		switch (checkedId) {

		case R.id.radio_button_session:

			tabHost.setCurrentTabByTag("tab_session");
			Controller.setCurrentActivity(ActSession.TAG);
			break;

		case R.id.radio_button_friendlist:

			tabHost.setCurrentTabByTag("tab_friendlist");
			Controller.setCurrentActivity(ActFriendsList.TAG);

			break;
		case R.id.radio_button_find:

			tabHost.setCurrentTabByTag("tab_finding");
			Controller.setCurrentActivity(ActFinding.TAG);
			break;

		case R.id.radio_button_setting:

			tabHost.setCurrentTabByTag("tab_setting");
			Controller.setCurrentActivity(ActSetting.TAG);
			break;
		}
	}

	public void bindMyReceiveMsgService() {
		mServiceConnection = new ServiceConnection() {
			@Override
			public void onServiceConnected(ComponentName name, IBinder service) {
				// TODO Auto-generated method stub
				LocalBinder binder = (LocalBinder) service;
				myService = binder.getService();
				myService.startReceiveMsgThread();
			}

			@Override
			public void onServiceDisconnected(ComponentName name) {
				// TODO Auto-generated method stub
				CommonFunctions.generateLogV(TAG, "onServiceDisconnected");
			}
		};
		Intent intent = new Intent(ActTabHost.this,
				SocketCommunicationService.class);
		if (false == bindService(intent, mServiceConnection,
				Context.BIND_AUTO_CREATE)) {
			CommonFunctions.showMessage(ActTabHost.this, "接收消息服务绑定失败!");
			return;
		}
	}

}



 


 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值