Commit 22283030460cdc166dbf306e0f055f1d981e6d06

Authored by 谷俊
1 parent b979c751

添加ugc消息体的使用demo

app/src/main/java/com/cnlive/im/adapter/ChatRoomAdpter.java
... ... @@ -16,6 +16,7 @@ import com.cnlive.im.adapter.base.BaseRecyclerAdapter;
16 16 import com.cnlive.im.adapter.base.ItemClickListener;
17 17 import com.cnlive.im.mode.ImagMessage;
18 18 import com.cnlive.im.mode.StringMessage;
  19 +import com.cnlive.im.mode.UgcVideoMessage;
19 20 import com.cnlive.im.mode.VideoMessage;
20 21 import com.cnlive.im.mode.VoiceMessage;
21 22 import com.cnlive.im.util.FileUtil;
... ... @@ -39,6 +40,8 @@ public class ChatRoomAdpter extends BaseRecyclerAdapter {
39 40 private int voiceOppsite = 6;
40 41 private int videoUser = 7;
41 42 private int videoOppsite = 8;
  43 + private int ugcVideoUser = 9;
  44 + private int ugcVideoOppsite = 10;
42 45 private Context mContext;
43 46 private ItemClickListener mItemClickListener;
44 47  
... ... @@ -79,6 +82,12 @@ public class ChatRoomAdpter extends BaseRecyclerAdapter {
79 82 return videoUser;
80 83 else return videoOppsite;
81 84  
  85 + } else if (o instanceof UgcVideoMessage) {
  86 + UgcVideoMessage o1 = (UgcVideoMessage) o;
  87 + if (o1.isUserSend())
  88 + return ugcVideoUser;
  89 + else return ugcVideoOppsite;
  90 +
82 91 }
83 92 return 0;
84 93 }
... ... @@ -101,6 +110,10 @@ public class ChatRoomAdpter extends BaseRecyclerAdapter {
101 110 return new VideoMessageHolder(LayoutInflater.from(mContext).inflate(R.layout.video_layout_item_user, null));
102 111 } else if (viewType == videoOppsite) {
103 112 return new VideoMessageHolder(LayoutInflater.from(mContext).inflate(R.layout.video_layout_item_oppsite, null));
  113 + } else if (viewType == ugcVideoUser) {
  114 + return new VideoMessageHolder(LayoutInflater.from(mContext).inflate(R.layout.video_layout_item_user, null));
  115 + } else if (viewType == ugcVideoOppsite) {
  116 + return new VideoMessageHolder(LayoutInflater.from(mContext).inflate(R.layout.video_layout_item_oppsite, null));
104 117 }
105 118 return null;
106 119 }
... ... @@ -127,6 +140,11 @@ public class ChatRoomAdpter extends BaseRecyclerAdapter {
127 140 final Object o = mItems.get(position);
128 141 final VideoMessage o1 = (VideoMessage) o;
129 142 holder1.showMessage(o1);
  143 + } else if (holder instanceof UgcVideoMessageHolder) {
  144 + final UgcVideoMessageHolder holder1 = (UgcVideoMessageHolder) holder;
  145 + final Object o = mItems.get(position);
  146 + final UgcVideoMessage o1 = (UgcVideoMessage) o;
  147 + holder1.showMessage(o1);
130 148 }
131 149  
132 150 }
... ... @@ -382,4 +400,78 @@ public class ChatRoomAdpter extends BaseRecyclerAdapter {
382 400 }
383 401 }
384 402  
  403 + public class UgcVideoMessageHolder extends RecyclerView.ViewHolder {
  404 +
  405 + private TextView video_user_name;
  406 + private ImageView video_cover;
  407 + private View videoLayout;
  408 + private TextView status;
  409 +
  410 + public UgcVideoMessageHolder(View itemView) {
  411 + super(itemView);
  412 + video_user_name = (TextView) itemView.findViewById(R.id.user_name);
  413 + video_cover = (ImageView) itemView.findViewById(R.id.img_content);
  414 + videoLayout = itemView.findViewById(R.id.videoLayout);
  415 + status = (TextView) itemView.findViewById(R.id.status);
  416 + }
  417 +
  418 + public void showMessage(final UgcVideoMessage videoMessage) {
  419 + video_user_name.setText(videoMessage.getCnUgcMessage().getUserInfo().getUserName());
  420 + switch (videoMessage.getCnUgcMessage().getStatus()) {
  421 + case IChat.CN_MSG_STATUS_SENDING:
  422 + if (status != null)
  423 + status.setText("发送中");
  424 + Glide.with(mContext).load(videoMessage.getCnUgcMessage().getCoverPath()).into(video_cover);
  425 + break;
  426 + case IChat.CN_MSG_STATUS_SEND_FAIL:
  427 + if (status != null)
  428 + status.setText("发送失败");
  429 + Glide.with(mContext).load(videoMessage.getCnUgcMessage().getCoverPath()).into(video_cover);
  430 + break;
  431 + case IChat.CN_MSG_STATUS_SEND_SUCCESS:
  432 + if (status != null)
  433 + status.setText("发送成功");
  434 + sendSuccess(videoMessage);
  435 + break;
  436 + }
  437 + }
  438 +
  439 + private void sendSuccess(final UgcVideoMessage videoMessage) {
  440 + videoLayout.setOnClickListener(new View.OnClickListener() {
  441 + @Override
  442 + public void onClick(View v) {
  443 + if (mItemClickListener != null)
  444 + mItemClickListener.onUgcVideoClick(videoMessage);
  445 + }
  446 + });
  447 + if (videoMessage.getCnUgcMessage().isSelf()) {
  448 + Glide.with(mContext).load(videoMessage.getCnUgcMessage().getCoverPath()).into(video_cover);
  449 + } else {
  450 + String coverUuid = videoMessage.getCnUgcMessage().getFileId() + "_image";
  451 + final String imagePath = FileUtil.getCacheFilePath(coverUuid);
  452 + if (FileUtil.isCacheFileExist(coverUuid)) {
  453 + if (video_cover != null && mContext != null)
  454 + Glide.with(mContext).load(imagePath).into(video_cover);
  455 + } else {
  456 + if (!videoMessage.isDownloading()) {
  457 + videoMessage.setDownloading(true);
  458 + videoMessage.getCnUgcMessage().getCover().getImage(imagePath, new IChat.OnDownloadListener() {
  459 + @Override
  460 + public void onSuccess() {
  461 + videoMessage.setDownloading(false);
  462 + if (video_cover != null && mContext != null)
  463 + Glide.with(mContext).load(imagePath).into(video_cover);
  464 + }
  465 +
  466 + @Override
  467 + public void onError(int i, String s) {
  468 + videoMessage.setDownloading(false);
  469 + }
  470 + });
  471 + }
  472 + }
  473 + }
  474 + }
  475 + }
  476 +
385 477 }
... ...
app/src/main/java/com/cnlive/im/adapter/base/ItemClickListener.java
... ... @@ -3,6 +3,7 @@ package com.cnlive.im.adapter.base;
3 3 import android.graphics.drawable.AnimationDrawable;
4 4  
5 5 import com.cnlive.im.mode.ImagMessage;
  6 +import com.cnlive.im.mode.UgcVideoMessage;
6 7 import com.cnlive.im.mode.VideoMessage;
7 8 import com.cnlive.im.mode.VoiceMessage;
8 9  
... ... @@ -16,5 +17,7 @@ public interface ItemClickListener {
16 17  
17 18 void onVideoClick(VideoMessage videoMessage);
18 19  
  20 + void onUgcVideoClick(UgcVideoMessage ugcVideoMessage);
  21 +
19 22 void onImageClick(ImagMessage imagMessage);
20 23 }
... ...
app/src/main/java/com/cnlive/im/ui/ChatRoomActivity.java
... ... @@ -40,6 +40,7 @@ import com.cnlive.im.adapter.ChatRoomAdpter;
40 40 import com.cnlive.im.adapter.base.ItemClickListener;
41 41 import com.cnlive.im.mode.ImagMessage;
42 42 import com.cnlive.im.mode.StringMessage;
  43 +import com.cnlive.im.mode.UgcVideoMessage;
43 44 import com.cnlive.im.mode.VideoMessage;
44 45 import com.cnlive.im.mode.VoiceMessage;
45 46 import com.cnlive.im.util.AudioRecordUtil;
... ... @@ -53,6 +54,7 @@ import com.cnlive.libs.util.chat.base.IChat;
53 54 import com.cnlive.libs.util.chat.model.CNBaseMessage;
54 55 import com.cnlive.libs.util.chat.model.CNImgMessage;
55 56 import com.cnlive.libs.util.chat.model.CNMessage;
  57 +import com.cnlive.libs.util.chat.model.CNUgcMessage;
56 58 import com.cnlive.libs.util.chat.model.CNUserInfo;
57 59 import com.cnlive.libs.util.chat.model.CNVideoMessage;
58 60 import com.cnlive.libs.util.chat.model.CNVoiceMessage;
... ... @@ -228,7 +230,8 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL
228 230 */
229 231 public void updateItem(CNBaseMessage o) {
230 232 int updateIndex = groupChatOneListMy.indexOf(o.getMessageId());
231   - if (updateIndex < 0 || chatListAdapterOne.getItemCount() <= 0) return;
  233 + if (updateIndex < 0 || chatListAdapterOne.getItemCount() <= 0 || updateIndex > chatListAdapterOne.getItemCount() - 1)
  234 + return;
232 235 if (o.getMsgType() == IChat.CN_MSG_TYPE_TEXT) {
233 236 CNMessage o1 = (CNMessage) o;
234 237 chatListAdapterOne.updateItem(new StringMessage(MessageType.stringMessage, o1, o1.isSelf()), updateIndex);
... ... @@ -243,6 +246,10 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL
243 246 CNVideoMessage ol = (CNVideoMessage) o;
244 247 VideoMessage videoMessage = new VideoMessage(MessageType.videoMessage, ol, ol.isSelf());
245 248 chatListAdapterOne.updateItem(videoMessage, updateIndex);
  249 + } else if (o.getMsgType() == IChat.CN_MSG_TYPE_UGC) {
  250 + CNUgcMessage ol = (CNUgcMessage) o;
  251 + UgcVideoMessage ugcVideoMessage = new UgcVideoMessage(MessageType.ugcVideoMessage, ol, ol.isSelf());
  252 + chatListAdapterOne.updateItem(ugcVideoMessage, updateIndex);
246 253 }
247 254 }
248 255  
... ... @@ -267,8 +274,13 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL
267 274 CNVideoMessage ol = (CNVideoMessage) o;
268 275 VideoMessage videoMessage = new VideoMessage(MessageType.videoMessage, ol, ol.isSelf());
269 276 chatListAdapterOne.addItem(videoMessage);
  277 + } else if (o.getMsgType() == IChat.CN_MSG_TYPE_UGC) {
  278 + CNUgcMessage ol = (CNUgcMessage) o;
  279 + UgcVideoMessage ugcVideoMessage = new UgcVideoMessage(MessageType.ugcVideoMessage, ol, ol.isSelf());
  280 + chatListAdapterOne.addItem(ugcVideoMessage);
270 281 }
271   - listViewOne.smoothScrollToPosition(chatListAdapterOne.getItemCount() - 1);
  282 + if (chatListAdapterOne.getItemCount() > 0)
  283 + listViewOne.smoothScrollToPosition(chatListAdapterOne.getItemCount() - 1);
272 284 }
273 285  
274 286  
... ... @@ -380,7 +392,7 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL
380 392 openSystemRecorder();
381 393 break;
382 394 case R.id.ugcVideoBtn:
383   -
  395 + openSystemRecorder();
384 396 break;
385 397 }
386 398 }
... ... @@ -562,6 +574,37 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL
562 574 }
563 575  
564 576 @Override
  577 + public void onUgcVideoClick(UgcVideoMessage ugcVideoMessage) {
  578 + if (ugcVideoMessage.getCnUgcMessage().isSelf()) {
  579 + Intent intent = new Intent(ChatRoomActivity.this, VideoActivity.class);
  580 + intent.putExtra("videoPath", ugcVideoMessage.getCnUgcMessage().getVideoPath());
  581 + startActivity(intent);
  582 + } else {
  583 + String videoUuid = ugcVideoMessage.getCnUgcMessage().getFileId() + "_video";
  584 + final String videoPath = FileUtil.getCacheFilePath(videoUuid);
  585 + if (FileUtil.isCacheFileExist(videoUuid)) {
  586 + Intent intent = new Intent(ChatRoomActivity.this, VideoActivity.class);
  587 + intent.putExtra("videoPath", videoPath);
  588 + startActivity(intent);
  589 + } else {
  590 + ugcVideoMessage.getCnUgcMessage().getVideo().getVideo(videoPath, new IChat.OnDownloadListener() {
  591 + @Override
  592 + public void onSuccess() {
  593 + Intent intent = new Intent(ChatRoomActivity.this, VideoActivity.class);
  594 + intent.putExtra("videoPath", videoPath);
  595 + startActivity(intent);
  596 + }
  597 +
  598 + @Override
  599 + public void onError(int i, String s) {
  600 +
  601 + }
  602 + });
  603 + }
  604 + }
  605 + }
  606 +
  607 + @Override
565 608 public void onImageClick(final ImagMessage imagMessage) {
566 609 if (imagMessage.getCnImgMessage().isSelf()) {
567 610 Intent intent = new Intent(ChatRoomActivity.this, ImageViewActivity.class);
... ...
app/src/main/java/com/cnlive/im/ui/PrivateActivity.java
... ... @@ -42,6 +42,7 @@ import com.cnlive.im.adapter.base.ItemClickListener;
42 42 import com.cnlive.im.mode.CNMessageModole;
43 43 import com.cnlive.im.mode.ImagMessage;
44 44 import com.cnlive.im.mode.StringMessage;
  45 +import com.cnlive.im.mode.UgcVideoMessage;
45 46 import com.cnlive.im.mode.VideoMessage;
46 47 import com.cnlive.im.mode.VoiceMessage;
47 48 import com.cnlive.im.util.AudioRecordUtil;
... ... @@ -55,6 +56,7 @@ import com.cnlive.libs.util.chat.base.IChat;
55 56 import com.cnlive.libs.util.chat.model.CNBaseMessage;
56 57 import com.cnlive.libs.util.chat.model.CNImgMessage;
57 58 import com.cnlive.libs.util.chat.model.CNMessage;
  59 +import com.cnlive.libs.util.chat.model.CNUgcMessage;
58 60 import com.cnlive.libs.util.chat.model.CNUserInfo;
59 61 import com.cnlive.libs.util.chat.model.CNVideoMessage;
60 62 import com.cnlive.libs.util.chat.model.CNVoiceMessage;
... ... @@ -266,7 +268,7 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi
266 268 openSystemRecorder();
267 269 break;
268 270 case R.id.ugcVideoBtn:
269   -
  271 + openSystemRecorder();
270 272 break;
271 273 }
272 274 }
... ... @@ -443,7 +445,8 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi
443 445 */
444 446 public void updateItem(CNBaseMessage o) {
445 447 int updateIndex = messageList.indexOf(o.getMessageId());
446   - if (updateIndex < 0 || chatListAdapter.getItemCount() <= 0) return;
  448 + if (updateIndex < 0 || chatListAdapter.getItemCount() <= 0 || updateIndex > chatListAdapter.getItemCount() - 1)
  449 + return;
447 450 if (o.getMsgType() == IChat.CN_MSG_TYPE_TEXT) {
448 451 CNMessage o1 = (CNMessage) o;
449 452 chatListAdapter.updateItem(new StringMessage(MessageType.stringMessage, o1, o1.isSelf()), updateIndex);
... ... @@ -458,6 +461,10 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi
458 461 CNVideoMessage ol = (CNVideoMessage) o;
459 462 VideoMessage videoMessage = new VideoMessage(MessageType.videoMessage, ol, ol.isSelf());
460 463 chatListAdapter.updateItem(videoMessage, updateIndex);
  464 + } else if (o.getMsgType() == IChat.CN_MSG_TYPE_UGC) {
  465 + CNUgcMessage ol = (CNUgcMessage) o;
  466 + UgcVideoMessage ugcVideoMessage = new UgcVideoMessage(MessageType.ugcVideoMessage, ol, ol.isSelf());
  467 + chatListAdapter.updateItem(ugcVideoMessage, updateIndex);
461 468 }
462 469 }
463 470  
... ... @@ -467,7 +474,6 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi
467 474 * @param o
468 475 */
469 476 private void showMessage(CNBaseMessage o, boolean isReceivedMsg) {
470   - messageList.add(o.getMessageId());
471 477 if (o.getMsgType() == IChat.CN_MSG_TYPE_TEXT) {
472 478 if (isReceivedMsg) {
473 479 CNMessage o1 = (CNMessage) o;
... ... @@ -484,29 +490,56 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi
484 490 sendInfo = 4;
485 491 } else if ("4".equals(type)) {
486 492 Log.v(TAG, o1.getContent().toString());
  493 + messageList.add(o.getMessageId());
487 494 chatListAdapter.addItem(new StringMessage(MessageType.stringMessage, o1, false));
488   - chatListView.smoothScrollToPosition(chatListAdapter.getItemCount() - 1);
489 495 }
490 496 } catch (JSONException e) {
491 497 e.printStackTrace();
492 498 }
493 499 } else {
494 500 CNMessage o1 = (CNMessage) o;
495   - chatListAdapter.addItem(new StringMessage(MessageType.stringMessage, o1, o1.isSelf()));
  501 + JSONObject jsonObject = null;
  502 + try {
  503 + jsonObject = new JSONObject(o1.getContent().toString());
  504 + String type = (String) jsonObject.get("type");
  505 + String message = (String) jsonObject.get("message");
  506 + Toast.makeText(PrivateActivity.this, "发送消息成功", Toast.LENGTH_SHORT).show();
  507 + if ("3".equals(type) && message.equals("你好我们可以进行私聊吗")) {
  508 + sendInfo = 2;
  509 + Toast.makeText(PrivateActivity.this, "申请已发送等待对方验证", Toast.LENGTH_SHORT).show();
  510 + } else if ("3".equals(type) && message.equals("拒绝")) {
  511 + sendInfo = 5;
  512 + } else if ("3".equals(type) && message.equals("同意")) {
  513 + sendInfo = 1;
  514 + } else if ("4".equals(type)) {
  515 + messageList.add(o.getMessageId());
  516 + chatListAdapter.addItem(new StringMessage(MessageType.stringMessage, o1, true));
  517 + }
  518 + } catch (JSONException e) {
  519 + }
496 520 }
497 521 } else if (o.getMsgType() == IChat.CN_MSG_TYPE_IMAGE) {
  522 + messageList.add(o.getMessageId());
498 523 CNImgMessage o1 = (CNImgMessage) o;
499 524 chatListAdapter.addItem(new ImagMessage(MessageType.imaMessage, o1, o1.isSelf()));
500 525 } else if (o.getMsgType() == IChat.CN_MSG_TYPE_VOICE) {
  526 + messageList.add(o.getMessageId());
501 527 CNVoiceMessage o1 = (CNVoiceMessage) o;
502 528 VoiceMessage voiceMessage = new VoiceMessage(MessageType.voiceMessage, o1, o1.isSelf());
503 529 chatListAdapter.addItem(voiceMessage);
504 530 } else if (o.getMsgType() == IChat.CN_MSG_TYPE_VIDEO) {
  531 + messageList.add(o.getMessageId());
505 532 CNVideoMessage ol = (CNVideoMessage) o;
506 533 VideoMessage videoMessage = new VideoMessage(MessageType.videoMessage, ol, ol.isSelf());
507 534 chatListAdapter.addItem(videoMessage);
  535 + } else if (o.getMsgType() == IChat.CN_MSG_TYPE_UGC) {
  536 + messageList.add(o.getMessageId());
  537 + CNUgcMessage ol = (CNUgcMessage) o;
  538 + UgcVideoMessage ugcVideoMessage = new UgcVideoMessage(MessageType.ugcVideoMessage, ol, ol.isSelf());
  539 + chatListAdapter.addItem(ugcVideoMessage);
508 540 }
509   - chatListView.smoothScrollToPosition(chatListAdapter.getItemCount() - 1);
  541 + if (chatListAdapter.getItemCount() > 0)
  542 + chatListView.smoothScrollToPosition(chatListAdapter.getItemCount() - 1);
510 543 }
511 544  
512 545 /**
... ... @@ -759,6 +792,37 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi
759 792 }
760 793  
761 794 @Override
  795 + public void onUgcVideoClick(UgcVideoMessage ugcVideoMessage) {
  796 + if (ugcVideoMessage.getCnUgcMessage().isSelf()) {
  797 + Intent intent = new Intent(PrivateActivity.this, VideoActivity.class);
  798 + intent.putExtra("videoPath", ugcVideoMessage.getCnUgcMessage().getVideoPath());
  799 + startActivity(intent);
  800 + } else {
  801 + String videoUuid = ugcVideoMessage.getCnUgcMessage().getFileId() + "_video";
  802 + final String videoPath = FileUtil.getCacheFilePath(videoUuid);
  803 + if (FileUtil.isCacheFileExist(videoUuid)) {
  804 + Intent intent = new Intent(PrivateActivity.this, VideoActivity.class);
  805 + intent.putExtra("videoPath", videoPath);
  806 + startActivity(intent);
  807 + } else {
  808 + ugcVideoMessage.getCnUgcMessage().getVideo().getVideo(videoPath, new IChat.OnDownloadListener() {
  809 + @Override
  810 + public void onSuccess() {
  811 + Intent intent = new Intent(PrivateActivity.this, VideoActivity.class);
  812 + intent.putExtra("videoPath", videoPath);
  813 + startActivity(intent);
  814 + }
  815 +
  816 + @Override
  817 + public void onError(int i, String s) {
  818 +
  819 + }
  820 + });
  821 + }
  822 + }
  823 + }
  824 +
  825 + @Override
762 826 public void onImageClick(final ImagMessage imagMessage) {
763 827 if (imagMessage.getCnImgMessage().isSelf()) {
764 828 Intent intent = new Intent(PrivateActivity.this, ImageViewActivity.class);
... ...
app/src/main/java/com/cnlive/im/util/MessageType.java
... ... @@ -10,4 +10,5 @@ public class MessageType {
10 10 public static final String imaMessage = "2";
11 11 public static final String voiceMessage = "3";
12 12 public static final String videoMessage = "4";
  13 + public static final String ugcVideoMessage = "5";
13 14 }
... ...