Commit 22283030460cdc166dbf306e0f055f1d981e6d06
1 parent
b979c751
添加ugc消息体的使用demo
Showing
5 changed files
with
212 additions
and
9 deletions
app/src/main/java/com/cnlive/im/adapter/ChatRoomAdpter.java
| @@ -16,6 +16,7 @@ import com.cnlive.im.adapter.base.BaseRecyclerAdapter; | @@ -16,6 +16,7 @@ import com.cnlive.im.adapter.base.BaseRecyclerAdapter; | ||
| 16 | import com.cnlive.im.adapter.base.ItemClickListener; | 16 | import com.cnlive.im.adapter.base.ItemClickListener; |
| 17 | import com.cnlive.im.mode.ImagMessage; | 17 | import com.cnlive.im.mode.ImagMessage; |
| 18 | import com.cnlive.im.mode.StringMessage; | 18 | import com.cnlive.im.mode.StringMessage; |
| 19 | +import com.cnlive.im.mode.UgcVideoMessage; | ||
| 19 | import com.cnlive.im.mode.VideoMessage; | 20 | import com.cnlive.im.mode.VideoMessage; |
| 20 | import com.cnlive.im.mode.VoiceMessage; | 21 | import com.cnlive.im.mode.VoiceMessage; |
| 21 | import com.cnlive.im.util.FileUtil; | 22 | import com.cnlive.im.util.FileUtil; |
| @@ -39,6 +40,8 @@ public class ChatRoomAdpter extends BaseRecyclerAdapter { | @@ -39,6 +40,8 @@ public class ChatRoomAdpter extends BaseRecyclerAdapter { | ||
| 39 | private int voiceOppsite = 6; | 40 | private int voiceOppsite = 6; |
| 40 | private int videoUser = 7; | 41 | private int videoUser = 7; |
| 41 | private int videoOppsite = 8; | 42 | private int videoOppsite = 8; |
| 43 | + private int ugcVideoUser = 9; | ||
| 44 | + private int ugcVideoOppsite = 10; | ||
| 42 | private Context mContext; | 45 | private Context mContext; |
| 43 | private ItemClickListener mItemClickListener; | 46 | private ItemClickListener mItemClickListener; |
| 44 | 47 | ||
| @@ -79,6 +82,12 @@ public class ChatRoomAdpter extends BaseRecyclerAdapter { | @@ -79,6 +82,12 @@ public class ChatRoomAdpter extends BaseRecyclerAdapter { | ||
| 79 | return videoUser; | 82 | return videoUser; |
| 80 | else return videoOppsite; | 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 | return 0; | 92 | return 0; |
| 84 | } | 93 | } |
| @@ -101,6 +110,10 @@ public class ChatRoomAdpter extends BaseRecyclerAdapter { | @@ -101,6 +110,10 @@ public class ChatRoomAdpter extends BaseRecyclerAdapter { | ||
| 101 | return new VideoMessageHolder(LayoutInflater.from(mContext).inflate(R.layout.video_layout_item_user, null)); | 110 | return new VideoMessageHolder(LayoutInflater.from(mContext).inflate(R.layout.video_layout_item_user, null)); |
| 102 | } else if (viewType == videoOppsite) { | 111 | } else if (viewType == videoOppsite) { |
| 103 | return new VideoMessageHolder(LayoutInflater.from(mContext).inflate(R.layout.video_layout_item_oppsite, null)); | 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 | return null; | 118 | return null; |
| 106 | } | 119 | } |
| @@ -127,6 +140,11 @@ public class ChatRoomAdpter extends BaseRecyclerAdapter { | @@ -127,6 +140,11 @@ public class ChatRoomAdpter extends BaseRecyclerAdapter { | ||
| 127 | final Object o = mItems.get(position); | 140 | final Object o = mItems.get(position); |
| 128 | final VideoMessage o1 = (VideoMessage) o; | 141 | final VideoMessage o1 = (VideoMessage) o; |
| 129 | holder1.showMessage(o1); | 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,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,6 +3,7 @@ package com.cnlive.im.adapter.base; | ||
| 3 | import android.graphics.drawable.AnimationDrawable; | 3 | import android.graphics.drawable.AnimationDrawable; |
| 4 | 4 | ||
| 5 | import com.cnlive.im.mode.ImagMessage; | 5 | import com.cnlive.im.mode.ImagMessage; |
| 6 | +import com.cnlive.im.mode.UgcVideoMessage; | ||
| 6 | import com.cnlive.im.mode.VideoMessage; | 7 | import com.cnlive.im.mode.VideoMessage; |
| 7 | import com.cnlive.im.mode.VoiceMessage; | 8 | import com.cnlive.im.mode.VoiceMessage; |
| 8 | 9 | ||
| @@ -16,5 +17,7 @@ public interface ItemClickListener { | @@ -16,5 +17,7 @@ public interface ItemClickListener { | ||
| 16 | 17 | ||
| 17 | void onVideoClick(VideoMessage videoMessage); | 18 | void onVideoClick(VideoMessage videoMessage); |
| 18 | 19 | ||
| 20 | + void onUgcVideoClick(UgcVideoMessage ugcVideoMessage); | ||
| 21 | + | ||
| 19 | void onImageClick(ImagMessage imagMessage); | 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,6 +40,7 @@ import com.cnlive.im.adapter.ChatRoomAdpter; | ||
| 40 | import com.cnlive.im.adapter.base.ItemClickListener; | 40 | import com.cnlive.im.adapter.base.ItemClickListener; |
| 41 | import com.cnlive.im.mode.ImagMessage; | 41 | import com.cnlive.im.mode.ImagMessage; |
| 42 | import com.cnlive.im.mode.StringMessage; | 42 | import com.cnlive.im.mode.StringMessage; |
| 43 | +import com.cnlive.im.mode.UgcVideoMessage; | ||
| 43 | import com.cnlive.im.mode.VideoMessage; | 44 | import com.cnlive.im.mode.VideoMessage; |
| 44 | import com.cnlive.im.mode.VoiceMessage; | 45 | import com.cnlive.im.mode.VoiceMessage; |
| 45 | import com.cnlive.im.util.AudioRecordUtil; | 46 | import com.cnlive.im.util.AudioRecordUtil; |
| @@ -53,6 +54,7 @@ import com.cnlive.libs.util.chat.base.IChat; | @@ -53,6 +54,7 @@ import com.cnlive.libs.util.chat.base.IChat; | ||
| 53 | import com.cnlive.libs.util.chat.model.CNBaseMessage; | 54 | import com.cnlive.libs.util.chat.model.CNBaseMessage; |
| 54 | import com.cnlive.libs.util.chat.model.CNImgMessage; | 55 | import com.cnlive.libs.util.chat.model.CNImgMessage; |
| 55 | import com.cnlive.libs.util.chat.model.CNMessage; | 56 | import com.cnlive.libs.util.chat.model.CNMessage; |
| 57 | +import com.cnlive.libs.util.chat.model.CNUgcMessage; | ||
| 56 | import com.cnlive.libs.util.chat.model.CNUserInfo; | 58 | import com.cnlive.libs.util.chat.model.CNUserInfo; |
| 57 | import com.cnlive.libs.util.chat.model.CNVideoMessage; | 59 | import com.cnlive.libs.util.chat.model.CNVideoMessage; |
| 58 | import com.cnlive.libs.util.chat.model.CNVoiceMessage; | 60 | import com.cnlive.libs.util.chat.model.CNVoiceMessage; |
| @@ -228,7 +230,8 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL | @@ -228,7 +230,8 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL | ||
| 228 | */ | 230 | */ |
| 229 | public void updateItem(CNBaseMessage o) { | 231 | public void updateItem(CNBaseMessage o) { |
| 230 | int updateIndex = groupChatOneListMy.indexOf(o.getMessageId()); | 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 | if (o.getMsgType() == IChat.CN_MSG_TYPE_TEXT) { | 235 | if (o.getMsgType() == IChat.CN_MSG_TYPE_TEXT) { |
| 233 | CNMessage o1 = (CNMessage) o; | 236 | CNMessage o1 = (CNMessage) o; |
| 234 | chatListAdapterOne.updateItem(new StringMessage(MessageType.stringMessage, o1, o1.isSelf()), updateIndex); | 237 | chatListAdapterOne.updateItem(new StringMessage(MessageType.stringMessage, o1, o1.isSelf()), updateIndex); |
| @@ -243,6 +246,10 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL | @@ -243,6 +246,10 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL | ||
| 243 | CNVideoMessage ol = (CNVideoMessage) o; | 246 | CNVideoMessage ol = (CNVideoMessage) o; |
| 244 | VideoMessage videoMessage = new VideoMessage(MessageType.videoMessage, ol, ol.isSelf()); | 247 | VideoMessage videoMessage = new VideoMessage(MessageType.videoMessage, ol, ol.isSelf()); |
| 245 | chatListAdapterOne.updateItem(videoMessage, updateIndex); | 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,8 +274,13 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL | ||
| 267 | CNVideoMessage ol = (CNVideoMessage) o; | 274 | CNVideoMessage ol = (CNVideoMessage) o; |
| 268 | VideoMessage videoMessage = new VideoMessage(MessageType.videoMessage, ol, ol.isSelf()); | 275 | VideoMessage videoMessage = new VideoMessage(MessageType.videoMessage, ol, ol.isSelf()); |
| 269 | chatListAdapterOne.addItem(videoMessage); | 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,7 +392,7 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL | ||
| 380 | openSystemRecorder(); | 392 | openSystemRecorder(); |
| 381 | break; | 393 | break; |
| 382 | case R.id.ugcVideoBtn: | 394 | case R.id.ugcVideoBtn: |
| 383 | - | 395 | + openSystemRecorder(); |
| 384 | break; | 396 | break; |
| 385 | } | 397 | } |
| 386 | } | 398 | } |
| @@ -562,6 +574,37 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL | @@ -562,6 +574,37 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL | ||
| 562 | } | 574 | } |
| 563 | 575 | ||
| 564 | @Override | 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 | public void onImageClick(final ImagMessage imagMessage) { | 608 | public void onImageClick(final ImagMessage imagMessage) { |
| 566 | if (imagMessage.getCnImgMessage().isSelf()) { | 609 | if (imagMessage.getCnImgMessage().isSelf()) { |
| 567 | Intent intent = new Intent(ChatRoomActivity.this, ImageViewActivity.class); | 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,6 +42,7 @@ import com.cnlive.im.adapter.base.ItemClickListener; | ||
| 42 | import com.cnlive.im.mode.CNMessageModole; | 42 | import com.cnlive.im.mode.CNMessageModole; |
| 43 | import com.cnlive.im.mode.ImagMessage; | 43 | import com.cnlive.im.mode.ImagMessage; |
| 44 | import com.cnlive.im.mode.StringMessage; | 44 | import com.cnlive.im.mode.StringMessage; |
| 45 | +import com.cnlive.im.mode.UgcVideoMessage; | ||
| 45 | import com.cnlive.im.mode.VideoMessage; | 46 | import com.cnlive.im.mode.VideoMessage; |
| 46 | import com.cnlive.im.mode.VoiceMessage; | 47 | import com.cnlive.im.mode.VoiceMessage; |
| 47 | import com.cnlive.im.util.AudioRecordUtil; | 48 | import com.cnlive.im.util.AudioRecordUtil; |
| @@ -55,6 +56,7 @@ import com.cnlive.libs.util.chat.base.IChat; | @@ -55,6 +56,7 @@ import com.cnlive.libs.util.chat.base.IChat; | ||
| 55 | import com.cnlive.libs.util.chat.model.CNBaseMessage; | 56 | import com.cnlive.libs.util.chat.model.CNBaseMessage; |
| 56 | import com.cnlive.libs.util.chat.model.CNImgMessage; | 57 | import com.cnlive.libs.util.chat.model.CNImgMessage; |
| 57 | import com.cnlive.libs.util.chat.model.CNMessage; | 58 | import com.cnlive.libs.util.chat.model.CNMessage; |
| 59 | +import com.cnlive.libs.util.chat.model.CNUgcMessage; | ||
| 58 | import com.cnlive.libs.util.chat.model.CNUserInfo; | 60 | import com.cnlive.libs.util.chat.model.CNUserInfo; |
| 59 | import com.cnlive.libs.util.chat.model.CNVideoMessage; | 61 | import com.cnlive.libs.util.chat.model.CNVideoMessage; |
| 60 | import com.cnlive.libs.util.chat.model.CNVoiceMessage; | 62 | import com.cnlive.libs.util.chat.model.CNVoiceMessage; |
| @@ -266,7 +268,7 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi | @@ -266,7 +268,7 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi | ||
| 266 | openSystemRecorder(); | 268 | openSystemRecorder(); |
| 267 | break; | 269 | break; |
| 268 | case R.id.ugcVideoBtn: | 270 | case R.id.ugcVideoBtn: |
| 269 | - | 271 | + openSystemRecorder(); |
| 270 | break; | 272 | break; |
| 271 | } | 273 | } |
| 272 | } | 274 | } |
| @@ -443,7 +445,8 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi | @@ -443,7 +445,8 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi | ||
| 443 | */ | 445 | */ |
| 444 | public void updateItem(CNBaseMessage o) { | 446 | public void updateItem(CNBaseMessage o) { |
| 445 | int updateIndex = messageList.indexOf(o.getMessageId()); | 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 | if (o.getMsgType() == IChat.CN_MSG_TYPE_TEXT) { | 450 | if (o.getMsgType() == IChat.CN_MSG_TYPE_TEXT) { |
| 448 | CNMessage o1 = (CNMessage) o; | 451 | CNMessage o1 = (CNMessage) o; |
| 449 | chatListAdapter.updateItem(new StringMessage(MessageType.stringMessage, o1, o1.isSelf()), updateIndex); | 452 | chatListAdapter.updateItem(new StringMessage(MessageType.stringMessage, o1, o1.isSelf()), updateIndex); |
| @@ -458,6 +461,10 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi | @@ -458,6 +461,10 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi | ||
| 458 | CNVideoMessage ol = (CNVideoMessage) o; | 461 | CNVideoMessage ol = (CNVideoMessage) o; |
| 459 | VideoMessage videoMessage = new VideoMessage(MessageType.videoMessage, ol, ol.isSelf()); | 462 | VideoMessage videoMessage = new VideoMessage(MessageType.videoMessage, ol, ol.isSelf()); |
| 460 | chatListAdapter.updateItem(videoMessage, updateIndex); | 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,7 +474,6 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi | ||
| 467 | * @param o | 474 | * @param o |
| 468 | */ | 475 | */ |
| 469 | private void showMessage(CNBaseMessage o, boolean isReceivedMsg) { | 476 | private void showMessage(CNBaseMessage o, boolean isReceivedMsg) { |
| 470 | - messageList.add(o.getMessageId()); | ||
| 471 | if (o.getMsgType() == IChat.CN_MSG_TYPE_TEXT) { | 477 | if (o.getMsgType() == IChat.CN_MSG_TYPE_TEXT) { |
| 472 | if (isReceivedMsg) { | 478 | if (isReceivedMsg) { |
| 473 | CNMessage o1 = (CNMessage) o; | 479 | CNMessage o1 = (CNMessage) o; |
| @@ -484,29 +490,56 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi | @@ -484,29 +490,56 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi | ||
| 484 | sendInfo = 4; | 490 | sendInfo = 4; |
| 485 | } else if ("4".equals(type)) { | 491 | } else if ("4".equals(type)) { |
| 486 | Log.v(TAG, o1.getContent().toString()); | 492 | Log.v(TAG, o1.getContent().toString()); |
| 493 | + messageList.add(o.getMessageId()); | ||
| 487 | chatListAdapter.addItem(new StringMessage(MessageType.stringMessage, o1, false)); | 494 | chatListAdapter.addItem(new StringMessage(MessageType.stringMessage, o1, false)); |
| 488 | - chatListView.smoothScrollToPosition(chatListAdapter.getItemCount() - 1); | ||
| 489 | } | 495 | } |
| 490 | } catch (JSONException e) { | 496 | } catch (JSONException e) { |
| 491 | e.printStackTrace(); | 497 | e.printStackTrace(); |
| 492 | } | 498 | } |
| 493 | } else { | 499 | } else { |
| 494 | CNMessage o1 = (CNMessage) o; | 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 | } else if (o.getMsgType() == IChat.CN_MSG_TYPE_IMAGE) { | 521 | } else if (o.getMsgType() == IChat.CN_MSG_TYPE_IMAGE) { |
| 522 | + messageList.add(o.getMessageId()); | ||
| 498 | CNImgMessage o1 = (CNImgMessage) o; | 523 | CNImgMessage o1 = (CNImgMessage) o; |
| 499 | chatListAdapter.addItem(new ImagMessage(MessageType.imaMessage, o1, o1.isSelf())); | 524 | chatListAdapter.addItem(new ImagMessage(MessageType.imaMessage, o1, o1.isSelf())); |
| 500 | } else if (o.getMsgType() == IChat.CN_MSG_TYPE_VOICE) { | 525 | } else if (o.getMsgType() == IChat.CN_MSG_TYPE_VOICE) { |
| 526 | + messageList.add(o.getMessageId()); | ||
| 501 | CNVoiceMessage o1 = (CNVoiceMessage) o; | 527 | CNVoiceMessage o1 = (CNVoiceMessage) o; |
| 502 | VoiceMessage voiceMessage = new VoiceMessage(MessageType.voiceMessage, o1, o1.isSelf()); | 528 | VoiceMessage voiceMessage = new VoiceMessage(MessageType.voiceMessage, o1, o1.isSelf()); |
| 503 | chatListAdapter.addItem(voiceMessage); | 529 | chatListAdapter.addItem(voiceMessage); |
| 504 | } else if (o.getMsgType() == IChat.CN_MSG_TYPE_VIDEO) { | 530 | } else if (o.getMsgType() == IChat.CN_MSG_TYPE_VIDEO) { |
| 531 | + messageList.add(o.getMessageId()); | ||
| 505 | CNVideoMessage ol = (CNVideoMessage) o; | 532 | CNVideoMessage ol = (CNVideoMessage) o; |
| 506 | VideoMessage videoMessage = new VideoMessage(MessageType.videoMessage, ol, ol.isSelf()); | 533 | VideoMessage videoMessage = new VideoMessage(MessageType.videoMessage, ol, ol.isSelf()); |
| 507 | chatListAdapter.addItem(videoMessage); | 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,6 +792,37 @@ public class PrivateActivity extends AppCompatActivity implements View.OnClickLi | ||
| 759 | } | 792 | } |
| 760 | 793 | ||
| 761 | @Override | 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 | public void onImageClick(final ImagMessage imagMessage) { | 826 | public void onImageClick(final ImagMessage imagMessage) { |
| 763 | if (imagMessage.getCnImgMessage().isSelf()) { | 827 | if (imagMessage.getCnImgMessage().isSelf()) { |
| 764 | Intent intent = new Intent(PrivateActivity.this, ImageViewActivity.class); | 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,4 +10,5 @@ public class MessageType { | ||
| 10 | public static final String imaMessage = "2"; | 10 | public static final String imaMessage = "2"; |
| 11 | public static final String voiceMessage = "3"; | 11 | public static final String voiceMessage = "3"; |
| 12 | public static final String videoMessage = "4"; | 12 | public static final String videoMessage = "4"; |
| 13 | + public static final String ugcVideoMessage = "5"; | ||
| 13 | } | 14 | } |