| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963 |
- package com.sk.weichat.ui.message;
- import android.app.Activity;
- import android.content.ActivityNotFoundException;
- import android.content.BroadcastReceiver;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.content.ServiceConnection;
- import android.media.AudioManager;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Environment;
- import android.os.Handler;
- import android.os.IBinder;
- import android.os.Message;
- import android.text.TextUtils;
- import android.util.Log;
- import android.view.KeyEvent;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.android.volley.Response;
- import com.android.volley.VolleyError;
- import com.ipaulpro.afilechooser.FileUtils;
- import com.nostra13.universalimageloader.core.ImageLoader;
- import com.sk.weichat.AppConstant;
- import com.sk.weichat.MyApplication;
- import com.sk.weichat.R;
- import com.sk.weichat.bean.Friend;
- import com.sk.weichat.bean.User;
- import com.sk.weichat.bean.message.ChatMessage;
- import com.sk.weichat.bean.message.XmppMessage;
- import com.sk.weichat.broadcast.MsgBroadcast;
- import com.sk.weichat.db.dao.ChatMessageDao;
- import com.sk.weichat.db.dao.FriendDao;
- import com.sk.weichat.downloader.Downloader;
- import com.sk.weichat.helper.UploadEngine;
- import com.sk.weichat.ui.base.ActionBackActivity;
- import com.sk.weichat.ui.circle.BasicInfoActivity;
- import com.sk.weichat.ui.circle.SendBaiDuLocate;
- import com.sk.weichat.ui.erp.util.ViewUtil;
- import com.sk.weichat.ui.me.LocalVideoActivity;
- import com.sk.weichat.util.CameraUtil;
- import com.sk.weichat.util.Constants;
- import com.sk.weichat.util.TimeUtils;
- import com.sk.weichat.util.ToastUtil;
- import com.sk.weichat.view.ChatBottomView;
- import com.sk.weichat.view.ChatBottomView.ChatBottomListener;
- import com.sk.weichat.view.ChatContentView;
- import com.sk.weichat.view.ChatContentView.MessageEventListener;
- import com.sk.weichat.view.PullDownListView;
- import com.sk.weichat.volley.FastVolley;
- import com.sk.weichat.volley.ObjectResult;
- import com.sk.weichat.volley.Result;
- import com.sk.weichat.volley.StringJsonObjectRequest;
- import com.sk.weichat.xmpp.CoreService;
- import com.sk.weichat.xmpp.CoreService.CoreServiceBinder;
- import com.sk.weichat.xmpp.ListenerManager;
- import com.sk.weichat.xmpp.ReceiptManager;
- import com.sk.weichat.xmpp.listener.ChatMessageListener;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.UUID;
- /**
- * 聊天主界面
- *
- * @项目名称: SkWeiChat-Baidu
- * @包名: com.sk.weichat.ui.message
- * @作者:王阳
- * @创建时间: 2015年10月9日 下午2:48:05
- * @描述: TODO
- * @SVN版本号: $Rev$
- * @修改人: $Author$
- * @修改时间: $Date$
- * @修改的内容: TODO 修改聊天,点击用户头像,加入黑名单,返回,还可以和加入黑名单的用户聊天的bug
- */
- public class ChatActivity extends ActionBackActivity
- implements MessageEventListener, ChatBottomListener, ChatMessageListener {
- public static final String FRIEND = "friend";
- @SuppressWarnings("unused")
- private TextView mAuthStateTipTv;
- private ChatContentView mChatContentView;
- private ChatBottomView mChatBottomView;
- private AudioManager mAudioManager = null;
- private String mLoginUserId;
- private String mLoginNickName;
- private Friend mFriend;// 存储所有的当前聊天对象
- private List<ChatMessage> mChatMessages;// 存储聊天消息
- private Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case 5:
- break;
- }
- }
- };
- private CoreService mService;
- private List<Friend> mBlackList;
- private boolean mHasSend = false;// 有没有发送过消息,发送过需要更新界面
- private static final int REQUEST_CODE_SELECT_FILE = 4;
- private static final int REQUEST_CODE_SELECT_Locate = 5;
- private static final int REQUEST_CODE_SELECT_CARD = 6;
- private ChatMessage instantMessage;//转发消息传过来的message
- private String instantFilePath;//转发文件传过来的path
- private FastVolley mFastVolley;
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.chat);
- mLoginUserId = MyApplication.getInstance().mLoginUser.getUserId();
- mLoginNickName = MyApplication.getInstance().mLoginUser.getNickName();
- if (savedInstanceState != null) {
- mFriend = (Friend) savedInstanceState.getSerializable(AppConstant.EXTRA_FRIEND);
- } else if (getIntent() != null) {
- mFriend = (Friend) getIntent().getSerializableExtra(AppConstant.EXTRA_FRIEND);
- }
- mAudioManager = (AudioManager) getSystemService(android.app.Service.AUDIO_SERVICE);
- mChatMessages = new ArrayList<ChatMessage>();
- Downloader.getInstance().init(MyApplication.getInstance().mAppDir + File.separator + mLoginUserId
- + File.separator + Environment.DIRECTORY_MUSIC);
- initView();
- // 表示已读
- FriendDao.getInstance().markUserMessageRead(mLoginUserId, mFriend.getUserId());
- loadDatas(true);
- ListenerManager.getInstance().addChatMessageListener(this);
- bindService(CoreService.getIntent(), mConnection, BIND_AUTO_CREATE);
- instantMessage = (ChatMessage) getIntent().getParcelableExtra(Constants.INSTANT_MESSAGE);
- instantFilePath = getIntent().getStringExtra(Constants.INSTANT_MESSAGE_FILE);//只有转发文件才会有
- IntentFilter filter = new IntentFilter(Constants.CHAT_MESSAGE_DELETE_ACTION);
- registerReceiver(broadcastReceiver, filter);
- }
- BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.d("wang", "接收到广播");
- if (mChatContentView != null) {
- int position = intent.getIntExtra(Constants.CHAT_REMOVE_MESSAGE_POSITION, 10000);
- if (position == 10000) {
- return;
- }
- ChatMessage message = mChatMessages.get(position);
- boolean isSuccess = ChatMessageDao.getInstance().deleteSingleChatMessage(mLoginUserId, mFriend.getUserId(), message);
- if (isSuccess) {
- mChatMessages.remove(position);
- mChatContentView.notifyDataSetInvalidated(true);
- MsgBroadcast.broadcastMsgUiUpdate(mContext);
- } else {
- Toast.makeText(mContext, "删除失败", Toast.LENGTH_SHORT).show();
- }
- }
- }
- };
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putSerializable(AppConstant.EXTRA_FRIEND, mFriend);
- }
- private ServiceConnection mConnection = new ServiceConnection() {
- @Override
- public void onServiceDisconnected(ComponentName name) {
- mService = null;
- }
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- mService = ((CoreServiceBinder) service).getService();
- }
- };
- private void initView() {
- String remarkName = mFriend.getRemarkName();
- if (remarkName == null) {
- getSupportActionBar().setTitle(mFriend.getNickName());
- } else {
- getSupportActionBar().setTitle(remarkName);
- }
- findViewById(R.id.root_view);
- mAuthStateTipTv = (TextView) findViewById(R.id.auth_state_tip);
- mChatContentView = (ChatContentView) findViewById(R.id.chat_content_view);
- mChatContentView.setToUserId(mFriend.getUserId());
- mChatContentView.setData(mChatMessages);
- mChatContentView.setMessageEventListener(this);
- mChatContentView.setRefreshListener(new PullDownListView.RefreshingListener() {
- @Override
- public void onHeaderRefreshing() {
- loadDatas(false);
- }
- });
- mChatBottomView = (ChatBottomView) findViewById(R.id.chat_bottom_view);
- mChatBottomView.setChatBottomListener(this);
- }
- private void doBack() {
- if (mHasSend) {
- MsgBroadcast.broadcastMsgUiUpdate(mContext);
- }
- finish();
- }
- @Override
- public void onBackPressed() {
- doBack();
- }
- @Override
- protected boolean onHomeAsUp() {
- doBack();
- return true;
- }
- @Override
- protected void onStop() {
- // TODO Auto-generated method stub
- super.onStop();
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- mChatBottomView.recordCancel();
- if (mFastVolley!=null )
- mFastVolley.cancelAll(FRIEND);
- ListenerManager.getInstance().removeChatMessageListener(this);
- unbindService(mConnection);
- unregisterReceiver(broadcastReceiver);
- }
- @Override
- protected void onPause() {
- mChatContentView.reset();
- super.onPause();
- }
- @Override
- protected void onStart() {
- // TODO Auto-generated method stub
- super.onStart();
- mBlackList = FriendDao.getInstance().getAllBlacklists(mLoginUserId);
- instantChatMessage();
- }
- @Override
- protected void onResume() {
- // TODO Auto-generated method stub
- super.onResume();
- }
- /**
- * 转发消息
- */
- private void instantChatMessage() {
- if (instantMessage != null) {
- new Handler().postDelayed(new Runnable() {
- @Override
- public void run() {
- // TODO Auto-generated method stub
- int messageType = instantMessage.getType();
- if (messageType == XmppMessage.TYPE_TEXT) {// 转发文字
- sendText(instantMessage.getContent());
- } else if (messageType == XmppMessage.TYPE_IMAGE) {// 转发图片
- if (instantMessage.getFromUserId().equals(mLoginUserId)) {
- sendImage(new File(instantMessage.getFilePath()));
- } else {
- File file = ImageLoader.getInstance().getDiscCache().get(instantMessage.getContent());
- if (file == null || !file.exists()) {// 文件不存在,那么就表示需要重新下载
- Toast.makeText(ChatActivity.this, "图片还没有下载,稍等一会哦", Toast.LENGTH_SHORT).show();
- } else {
- sendImage(file);
- }
- }
- } else if (messageType == XmppMessage.TYPE_VOICE) {// 转发语音
- // if(instantMessage.getFromUserId().equals(mLoginUserId)){
- sendVoice(instantMessage.getFilePath(), instantMessage.getTimeLen());
- // }else{
- // }
- } else if (messageType == XmppMessage.TYPE_LOCATION) {// 转发地址
- sendLocate(Double.parseDouble(instantMessage.getLocation_x()),
- Double.parseDouble(instantMessage.getLocation_y()), instantMessage.getContent());
- } else if (messageType == XmppMessage.TYPE_VIDEO) {// 转发视频
- sendVideo(new File(instantMessage.getFilePath()));
- } else if (messageType == XmppMessage.TYPE_FILE && instantFilePath != null) {//转发文件
- File file = new File(instantFilePath);
- if (file.exists()) {
- sendFile(file);
- } else {
- Toast.makeText(ChatActivity.this, "文件解析错误", Toast.LENGTH_SHORT).show();
- }
- }
- /*
- * else if(messageType==XmppMessage.TYPE_CARD){
- * sendCard(instantMessage.getObjectId()); }
- */
- instantMessage = null;
- }
- }, 1000);
- }
- }
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_VOLUME_UP:
- mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE,
- AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
- return true;
- case KeyEvent.KEYCODE_VOLUME_DOWN:
- mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER,
- AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
- return true;
- default:
- break;
- }
- return super.onKeyDown(keyCode, event);
- }
- /***************
- * ChatContentView的回调
- ***************************************/
- @Override
- public void onMyAvatarClick() {
- Intent intent = new Intent(mContext, BasicInfoActivity.class);
- intent.putExtra(AppConstant.EXTRA_USER_ID, mLoginUserId);
- startActivity(intent);
- }
- @Override
- public void onFriendAvatarClick(String friendUserId) {
- Intent intent = new Intent(mContext, BasicInfoActivity.class);
- intent.putExtra(AppConstant.EXTRA_USER_ID, friendUserId);
- startActivity(intent);
- }
- @Override
- public void onMessageClick(ChatMessage chatMessage) {
- }
- @Override
- public void onMessageLongClick(ChatMessage chatMessage) {
- }
- @Override
- public void onEmptyTouch() {
- mChatBottomView.reset();
- }
- @Override
- public void onSendAgain(ChatMessage message) {
- if (interprect(message)) {
- return;
- }
- if (message.getType() == XmppMessage.TYPE_VOICE || message.getType() == XmppMessage.TYPE_IMAGE
- || message.getType() == XmppMessage.TYPE_VIDEO || message.getType() == XmppMessage.TYPE_FILE) {
- if (!message.isUpload()) {
- UploadEngine.uploadImFile(mFriend.getUserId(), message, mUploadResponse);
- } else {
- mService.sendChatMessage(mFriend.getUserId(), message);
- }
- } else {
- mService.sendChatMessage(mFriend.getUserId(), message);
- }
- // mService.sendChatMessage(mFriend.getUserId(), chatMessage);
- }
- /**
- * 拦截发送的消息
- *
- * @param message
- */
- public boolean interprect(ChatMessage message) {
- int len = 0;
- for (Friend friend : mBlackList) {
- if (friend.getUserId().equals(mFriend.getUserId())) {
- Toast.makeText(mContext, "已经加入黑名单,无法发送消息", Toast.LENGTH_SHORT).show();
- len++;
- }
- }
- Log.d("wang", "....kkkkk");
- if (len != 0) {
- // finish();
- ListenerManager.getInstance().notifyMessageSendStateChange(mLoginUserId, mFriend.getUserId(),
- message.get_id(), ChatMessageListener.MESSAGE_SEND_FAILED);
- return true;
- }
- return false;
- }
- /***************
- * ChatBottomView的回调
- ***************************************/
- private void sendMessage(final ChatMessage message) {
- if (interprect(message)) {
- return;
- }
- mHasSend = true;
- Log.d("roamer", "开始发送消息,ChatBottomView的回调 sendmessage");
- message.setPacketId(UUID.randomUUID().toString().replaceAll("-", ""));
- ChatMessageDao.getInstance().saveNewSingleChatMessage(mLoginUserId, mFriend.getUserId(), message);
- if (message.getType() == XmppMessage.TYPE_VOICE || message.getType() == XmppMessage.TYPE_IMAGE
- || message.getType() == XmppMessage.TYPE_VIDEO || message.getType() == XmppMessage.TYPE_FILE) {
- if (!message.isUpload()) {
- Log.d("roamer", "去更新服务器的数据");
- UploadEngine.uploadImFile(mFriend.getUserId(), message, mUploadResponse);
- } else {
- Log.d("roamer", "sendChatMessage....");
- mService.sendChatMessage(mFriend.getUserId(), message);
- }
- } else if (message.getType() == XmppMessage.TYPE_CARD) {
- Log.i("gongpengming", "card");
- mService.sendChatMessage(mFriend.getUserId(), message);
- //进行百度推送
- sendPushTask(mLoginUserId, mFriend.getUserId(), message.getContent());
- } else {
- Log.d("roamer", "sendChatMessage");
- mService.sendChatMessage(mFriend.getUserId(), message);
- //进行百度推送
- sendPushTask(mLoginUserId, mFriend.getUserId(), message.getContent());
- }
- }
- private UploadEngine.ImFileUploadResponse mUploadResponse = new UploadEngine.ImFileUploadResponse() {
- @Override
- public void onSuccess(String toUserId, ChatMessage message) {
- mService.sendChatMessage(mFriend.getUserId(), message);
- }
- @Override
- public void onFailure(String toUserId, ChatMessage message) {
- for (int i = 0; i < mChatMessages.size(); i++) {
- ChatMessage msg = mChatMessages.get(i);
- if (message.get_id() == msg.get_id()) {
- msg.setMessageState(ChatMessageListener.MESSAGE_SEND_FAILED);
- ChatMessageDao.getInstance().updateMessageSendState(mLoginUserId, mFriend.getUserId(),
- message.get_id(), ChatMessageListener.MESSAGE_SEND_FAILED);
- mChatContentView.notifyDataSetInvalidated(false);
- break;
- }
- }
- }
- };
- /**
- * 停止播放聊天的录音
- */
- @Override
- public void stopVoicePlay() {
- mChatContentView.stopPlayVoice();
- }
- @Override
- public void sendText(String text) {
- Log.d("wang", "sendText");
- if (TextUtils.isEmpty(text)) {
- return;
- }
- ChatMessage message = new ChatMessage();
- message.setType(XmppMessage.TYPE_TEXT);
- message.setContent(text);
- message.setFromUserName(mLoginNickName);
- message.setFromUserId(mLoginUserId);
- message.setTimeSend(TimeUtils.sk_time_current_time());
- mChatMessages.add(message);
- mChatContentView.notifyDataSetInvalidated(true);
- sendMessage(message);
- }
- @Override
- public void sendGif(String text) {
- Log.d("wang", "sendgif");
- if (TextUtils.isEmpty(text)) {
- return;
- }
- ChatMessage message = new ChatMessage();
- message.setType(XmppMessage.TYPE_GIF);
- message.setContent(text);
- message.setFromUserName(mLoginNickName);
- message.setFromUserId(mLoginUserId);
- message.setTimeSend(TimeUtils.sk_time_current_time());
- mChatMessages.add(message);
- mChatContentView.notifyDataSetInvalidated(true);
- sendMessage(message);
- }
- @Override
- public void sendVoice(String filePath, int timeLen) {
- if (TextUtils.isEmpty(filePath)) {
- return;
- }
- File file = new File(filePath);
- long fileSize = file.length();
- ChatMessage message = new ChatMessage();
- message.setType(XmppMessage.TYPE_VOICE);
- message.setContent("");
- message.setFromUserName(mLoginNickName);
- message.setFromUserId(mLoginUserId);
- message.setTimeSend(TimeUtils.sk_time_current_time());
- message.setFilePath(filePath);
- message.setFileSize((int) fileSize);
- message.setTimeLen(timeLen);
- mChatMessages.add(message);
- mChatContentView.notifyDataSetInvalidated(true);
- sendMessage(message);
- }
- public void sendImage(File file) {
- if (!file.exists()) {
- return;
- }
- long fileSize = file.length();
- ChatMessage message = new ChatMessage();
- message.setType(XmppMessage.TYPE_IMAGE);
- message.setContent("");
- message.setFromUserName(mLoginNickName);
- message.setFromUserId(mLoginUserId);
- message.setTimeSend(TimeUtils.sk_time_current_time());
- String filePath = file.getAbsolutePath();
- message.setFilePath(filePath);
- message.setFileSize((int) fileSize);
- mChatMessages.add(message);
- mChatContentView.notifyDataSetInvalidated(true);
- sendMessage(message);
- }
- public void sendVideo(File file) {
- if (!file.exists()) {
- return;
- }
- long fileSize = file.length();
- ChatMessage message = new ChatMessage();
- message.setType(XmppMessage.TYPE_VIDEO);
- message.setContent("");
- message.setFromUserName(mLoginNickName);
- message.setFromUserId(mLoginUserId);
- message.setTimeSend(TimeUtils.sk_time_current_time());
- String filePath = file.getAbsolutePath();
- message.setFilePath(filePath);
- message.setFileSize((int) fileSize);
- mChatMessages.add(message);
- mChatContentView.notifyDataSetInvalidated(true);
- sendMessage(message);
- }
- public void sendFile(File file) {
- if (!file.exists()) {
- return;
- }
- long fileSize = file.length();
- ChatMessage message = new ChatMessage();
- message.setType(XmppMessage.TYPE_FILE);
- message.setContent("");
- message.setFromUserName(mLoginNickName);
- message.setFromUserId(mLoginUserId);
- message.setTimeSend(TimeUtils.sk_time_current_time());
- String filePath = file.getAbsolutePath();
- message.setFilePath(filePath);
- message.setFileSize((int) fileSize);
- mChatMessages.add(message);
- mChatContentView.notifyDataSetInvalidated(true);
- Log.d("roamer", "开始发送文件");
- sendMessage(message);
- }
- public void sendLocate(double latitude, double longitude, String address) {
- ChatMessage message = new ChatMessage();
- message.setType(XmppMessage.TYPE_LOCATION);
- message.setFromUserName(mLoginNickName);
- message.setFromUserId(mLoginUserId);
- message.setTimeSend(TimeUtils.sk_time_current_time());
- message.setLocation_x(latitude + "");
- message.setLocation_y(longitude + "");
- message.setContent(address);
- mChatMessages.add(message);
- mChatContentView.notifyDataSetInvalidated(true);
- sendMessage(message);
- }
- private String objectId;
- //TODO 发送卡片
- public void sendCard(String ObjectId) {
- this.objectId = ObjectId;
- // ChatMessage message = new ChatMessage();
- // message.setType(XmppMessage.TYPE_CARD);
- // message.setFromUserName(mLoginNickName);
- // message.setFromUserId(mLoginUserId);
- // message.setTimeSend(TimeUtils.sk_time_current_time());
- //TODO 选择名片用户
- Intent intent = new Intent(this, SelectCardActivity.class);
- // intent.setAction("");
- startActivityForResult(intent, REQUEST_CODE_SELECT_CARD);
- //TODO 以下在返回里写
- // message.setObjectId(ObjectId);
- // message.setContent(MyApplication.getInstance().mLoginUser.getSex() + "");// 性别
- // 0表示女,1表示男
- // mChatMessages.add(message);
- // mChatContentView.notifyDataSetInvalidated(true);
- // sendMessage(message);
- }
- @Override
- public void clickPhoto() {
- Log.d("roamer", "clickphoto");
- CameraUtil.pickImageSimple(this, REQUEST_CODE_PICK_PHOTO);
- mChatBottomView.reset();
- }
- @Override
- public void clickCamera() {
- Log.d("roamer", "clickCamera");
- mNewPhotoUri = CameraUtil.getOutputMediaFileUri(this, CameraUtil.MEDIA_TYPE_IMAGE);
- CameraUtil.captureImage(this, mNewPhotoUri, REQUEST_CODE_CAPTURE_PHOTO);
- mChatBottomView.reset();
- }
- @Override
- public void clickVideo() {
- Intent intent = new Intent(mContext, LocalVideoActivity.class);
- intent.putExtra(AppConstant.EXTRA_ACTION, AppConstant.ACTION_SELECT);
- startActivityForResult(intent, REQUEST_CODE_SELECT_VIDE0);
- }
- @Override
- public void clickAudio() {//语音通话
- // Intent intent=new Intent(ChatActivity.this,Main.class);
- // Log.d("wang","usid.getUserId..."+mFriend.getUserId());
- // intent.putExtra(Constants.AUDIO_PHONENUMBER, mFriend.getUserId());
- // intent.putExtra(Constants.IS_AUDIO_OR_VIDEO, true);//true为语音
- // startActivity(intent);
- }
- @Override
- public void clickVideoChat() {//视频通话
- // Intent intent=new Intent(ChatActivity.this,Main.class);
- // Log.d("wang","usid.getUserId..."+mFriend.getUserId());
- // intent.putExtra(Constants.AUDIO_PHONENUMBER, mFriend.getUserId());
- // intent.putExtra(Constants.IS_AUDIO_OR_VIDEO, false);//true为语音
- // startActivity(intent);
- }
- @Override
- public void clickFile() {
- // Intent intent = new Intent(mContext, MemoryFileManagement.class);
- // startActivityForResult(intent, REQUEST_CODE_SELECT_FILE);
- Intent target = FileUtils.createGetContentIntent();
- // Create the chooser Intent
- Intent intent = Intent.createChooser(target, getString(R.string.chooser_title));
- try {
- startActivityForResult(intent, REQUEST_CODE_SELECT_FILE);
- } catch (ActivityNotFoundException e) {
- // The reason for the existence of aFileChooser
- }
- }
- @Override
- public void clickLocation() {
- Intent intent = new Intent(mContext, SendBaiDuLocate.class);
- startActivityForResult(intent, REQUEST_CODE_SELECT_Locate);
- }
- @Override
- public void clickCard() {
- sendCard(mLoginUserId);
- }
- /**
- * 新消息到来
- */
- @Override
- public boolean onNewMessage(String fromUserId, ChatMessage message, boolean isGroupMsg) {
- if (isGroupMsg) {
- return false;
- }
- if (mFriend.getUserId().compareToIgnoreCase(fromUserId) == 0) {// 是该人的聊天消息
- mChatMessages.add(message);
- mChatContentView.notifyDataSetInvalidated(true);
- return true;
- }
- return false;
- }
- @Override
- public void onMessageSendStateChange(int messageState, int msg_id) {
- for (int i = 0; i < mChatMessages.size(); i++) {
- ChatMessage msg = mChatMessages.get(i);
- if (msg_id == msg.get_id()) {
- msg.setMessageState(messageState);
- mChatContentView.notifyDataSetInvalidated(false);
- break;
- }
- }
- }
- private int mMinId = 0;
- private int mPageSize = 20;
- private boolean mHasMoreData = true;
- private void loadDatas(final boolean scrollToBottom) {
- if (mChatMessages.size() > 0) {
- mMinId = mChatMessages.get(0).get_id();
- } else {
- mMinId = 0;
- }
- List<ChatMessage> chatLists = ChatMessageDao.getInstance().getSingleChatMessages(mLoginUserId,
- mFriend.getUserId(), mMinId, mPageSize);
- if (chatLists == null || chatLists.size() <= 0) {
- mHasMoreData = false;
- } else {
- long currentTime = System.currentTimeMillis() / 1000;
- for (int i = 0; i < chatLists.size(); i++) {
- ChatMessage message = chatLists.get(i);
- if (message.isMySend() && message.getMessageState() == ChatMessageListener.MESSAGE_SEND_ING) {// 如果是我发的消息,有时候在消息发送中,直接退出了程序,此时消息发送状态可能使用是发送中,
- if (currentTime - message.getTimeSend() > ReceiptManager.MESSAGE_DELAY / 1000) {
- ChatMessageDao.getInstance().updateMessageSendState(mLoginUserId, mFriend.getUserId(),
- message.get_id(), ChatMessageListener.MESSAGE_SEND_FAILED);
- message.setMessageState(ChatMessageListener.MESSAGE_SEND_FAILED);
- }
- }
- mChatMessages.add(0, message);
- }
- }
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- mChatContentView.notifyDataSetInvalidated(scrollToBottom);
- mChatContentView.headerRefreshingCompleted();
- if (!mHasMoreData) {
- mChatContentView.setNeedRefresh(false);
- }
- }
- }, 1000);
- }
- /***********************
- * 拍照和选择照片
- **********************/
- private static final int REQUEST_CODE_CAPTURE_PHOTO = 1;
- private static final int REQUEST_CODE_PICK_PHOTO = 2;
- private Uri mNewPhotoUri;
- private static final int REQUEST_CODE_SELECT_VIDE0 = 3;
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- Log.d("roamer", "进入到activityResult...");
- if (requestCode == REQUEST_CODE_CAPTURE_PHOTO) {// 拍照返回
- if (resultCode == Activity.RESULT_OK) {
- Log.d("roamer", "拍照返回...");
- if (mNewPhotoUri != null) {
- sendImage(new File(mNewPhotoUri.getPath()));
- } else {
- // ToastUtil.showToast(this,
- // R.string.c_take_picture_failed);
- }
- }
- } else if (requestCode == REQUEST_CODE_PICK_PHOTO) {// 选择一张图片,然后立即调用裁减
- if (resultCode == Activity.RESULT_OK) {
- Log.d("roamer", "选择了一张图片...");
- if (data != null && data.getData() != null) {
- sendImage(new File(CameraUtil.getImagePathFromUri(this, data.getData())));
- } else {
- ToastUtil.showToast(this, R.string.c_photo_album_failed);
- }
- }
- } else if (requestCode == REQUEST_CODE_SELECT_VIDE0 && resultCode == RESULT_OK) {// 选择视频的返回
- if (data == null) {
- return;
- }
- String filePath = data.getStringExtra(AppConstant.EXTRA_FILE_PATH);
- if (TextUtils.isEmpty(filePath)) {
- ToastUtil.showToast(this, R.string.select_failed);
- return;
- }
- File file = new File(filePath);
- if (!file.exists()) {
- ToastUtil.showToast(this, R.string.select_failed);
- return;
- }
- sendVideo(file);
- } else if (requestCode == REQUEST_CODE_SELECT_FILE && resultCode == RESULT_OK) {
- String filePath = null;
- if (data != null) {
- // Get the URI of the selected file
- final Uri uri = data.getData();
- Log.i(TAG, "Uri = " + uri.toString());
- try {
- // Get the file path from the URI
- filePath = FileUtils.getPath(this, uri);
- } catch (Exception e) {
- Log.e("roamer", "File select error", e);
- }
- }
- // String filePath = data.getStringExtra(AppConstant.FILE_PAT_NAME);
- if (TextUtils.isEmpty(filePath)) {
- ToastUtil.showToast(this, R.string.select_failed);
- return;
- }
- File file = new File(filePath);
- Log.d("roamer", file.getAbsolutePath());
- if (!file.exists()) {
- ToastUtil.showToast(this, R.string.select_failed);
- return;
- }
- sendFile(file);
- } else if (requestCode == REQUEST_CODE_SELECT_Locate && resultCode == RESULT_OK) {
- double latitude = data.getDoubleExtra(AppConstant.EXTRA_LATITUDE, 0);
- double longitude = data.getDoubleExtra(AppConstant.EXTRA_LONGITUDE, 0);
- String address = MyApplication.getInstance().getBdLocationHelper().getAddress();
- if (latitude != 0 && longitude != 0 && !TextUtils.isEmpty(address)) {
- sendLocate(latitude, longitude, address);
- } else {
- ToastUtil.showToast(mContext, "请把定位开启!");
- }
- } else if (requestCode == REQUEST_CODE_SELECT_CARD && resultCode == RESULT_OK) {//选择名片返回
- Friend card = (Friend) data.getSerializableExtra("card");
- ChatMessage message = new ChatMessage();
- message.setType(XmppMessage.TYPE_CARD);
- message.setFromUserName(card.getNickName());
- message.setCardId(card.getUserId());
- message.setFromUserId(mLoginUserId);
- message.setMySend(true);
- message.setTimeSend(TimeUtils.sk_time_current_time());
- message.setObjectId(objectId);
- loadCardInfo(card.getUserId(), message);
- mChatMessages.add(message);
- mChatContentView.notifyDataSetInvalidated(true);
- // message.setContent(MyApplication.getInstance().mLoginUser.getSex() + "");// 性别
- // // 0表示女,1表示男
- sendMessage(message);
- }
- }
- private void loadCardInfo(String userId, final ChatMessage message) {
- //TODO 发送名片时候 访问网络获取性别
- mFastVolley = MyApplication.getInstance().getFastVolley();
- Map<String, String> params = new HashMap<String, String>();
- params.put("access_token", MyApplication.getInstance().mAccessToken);
- params.put("userId", userId);
- Log.i("LoginInfo", "发送网络数据:userid=" + userId);
- StringJsonObjectRequest<User> request = new StringJsonObjectRequest<User>(mConfig.USER_GET_URL,
- new Response.ErrorListener() {
- @Override
- public void onErrorResponse(VolleyError arg0) {
- Log.i("gongpengming", "获取失败");
- message.setContent(-1 + "");// 当失败时候显示保密
- // 0表示女,1表示男
- sendMessage(message);
- }
- }, new StringJsonObjectRequest.Listener<User>() {
- @Override
- public void onResponse(ObjectResult<User> result) {
- boolean success = Result.defaultParser(mContext, result, true);
- if (success && result.getData() != null) {
- User mUser = result.getData();
- message.setContent(mUser.getSex()+ "");// 成功时候显示性别
- // 0表示女,1表示男
- sendMessage(message);
- } else {
- Log.i("gongpengming", "获取失败");
- message.setContent(-1+ "");// 当失败时候显示保密
- // 0表示女,1表示男
- sendMessage(message);
- }
- }
- }, User.class, params);
- mFastVolley.addDefaultRequest(FRIEND , request);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_muc_chat, menu);
- return super.onCreateOptionsMenu(menu);
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == R.id.room_info) {
- Intent intent = new Intent(this, BasicInfoActivity.class);
- intent.putExtra(AppConstant.EXTRA_USER_ID, mFriend.getUserId());
- startActivity(intent);
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
- /**
- * @desc:推送给百度服务
- * @author:Administrator on 2016/3/14 19:37
- */
- public void sendPushTask(String from, String to, String body) {
- //http://113.105.74.140:8092/tigase/notify?from=100118&to=100254&body=rrrrr&ts=1
- //http://192.168.253.244:8092/tigase/notify
- String url = "http://113.105.74.140:8092/tigase/notify";
- Map<String, Object> params = new HashMap<String, Object>();
- // int[] str;
- // params.put("text", str);
- params.put("from", from);
- params.put("to", to);
- params.put("body", body);
- params.put("ts", 1);
- Log.i("push", "推送百度 from:" + from + "to:" + to + "body:" + body);
- ViewUtil.httpSendRequest(this, url, params, mHandler, null, 5, null, null, "get");
- }
- }
|