// 正在发送文字或语音
 private void sendingTextOrVoice(final ViewHolder holder, Animation sendingAnim, Message msg) {
   holder.sendingIv.setVisibility(View.VISIBLE);
   holder.sendingIv.startAnimation(sendingAnim);
   holder.resend.setVisibility(View.GONE);
   // 消息正在发送,重新注册一个监听消息发送完成的Callback
   if (!msg.isSendCompleteCallbackExists()) {
     msg.setOnSendCompleteCallback(
         new BasicCallback() {
           @Override
           public void gotResult(final int status, final String desc) {
             holder.sendingIv.setVisibility(View.GONE);
             holder.sendingIv.clearAnimation();
             if (status == 803008) {
               CustomContent customContent = new CustomContent();
               customContent.setBooleanValue("blackList", true);
               Message customMsg = mConv.createSendMessage(customContent);
               addMsgToList(customMsg);
             } else if (status != 0) {
               HandleResponseCode.onHandle(mContext, status, false);
               holder.resend.setVisibility(View.VISIBLE);
             }
           }
         });
   }
 }
  private void sendingImage(
      final ViewHolder holder, final Animation sendingAnim, final Message msg) {
    holder.picture.setAlpha(0.75f);
    holder.sendingIv.setVisibility(View.VISIBLE);
    holder.sendingIv.startAnimation(sendingAnim);
    holder.progressTv.setVisibility(View.VISIBLE);
    holder.resend.setVisibility(View.GONE);
    // 如果图片正在发送,重新注册上传进度Callback
    if (!msg.isContentUploadProgressCallbackExists()) {
      msg.setOnContentUploadProgressCallback(
          new ProgressUpdateCallback() {
            @Override
            public void onProgressUpdate(double v) {
              String progressStr = (int) (v * 100) + "%";
              Log.d(TAG, "msg.getId: " + msg.getId() + " progress: " + progressStr);
              holder.progressTv.setText(progressStr);
            }
          });
    }
    if (!msg.isSendCompleteCallbackExists()) {
      msg.setOnSendCompleteCallback(
          new BasicCallback() {
            @Override
            public void gotResult(final int status, String desc) {
              Log.d(TAG, "Got result status: " + status);
              if (!mMsgQueue.isEmpty() && mMsgQueue.element().getId() == mSendMsgId) {
                mMsgQueue.poll();
                if (!mMsgQueue.isEmpty()) {
                  Message nextMsg = mMsgQueue.element();
                  JMessageClient.sendMessage(nextMsg);
                  mSendMsgId = nextMsg.getId();
                }
              }
              holder.picture.setAlpha(1.0f);
              holder.sendingIv.clearAnimation();
              holder.sendingIv.setVisibility(View.GONE);
              holder.progressTv.setVisibility(View.GONE);
              if (status == 803008) {
                CustomContent customContent = new CustomContent();
                customContent.setBooleanValue("blackList", true);
                Message customMsg = mConv.createSendMessage(customContent);
                addMsgToList(customMsg);
              } else if (status != 0) {
                HandleResponseCode.onHandle(mContext, status, false);
                holder.resend.setVisibility(View.VISIBLE);
              }

              Message message = mConv.getMessage(msg.getId());
              mMsgList.set(mMsgList.indexOf(msg), message);
              Log.d(TAG, "msg.getId " + msg.getId() + " msg.getStatus " + msg.getStatus());
              Log.d(
                  TAG,
                  "message.getId " + message.getId() + " message.getStatus " + message.getStatus());
            }
          });
    }
  }
 private void resendImage(final ViewHolder holder, Animation sendingAnim, Message msg) {
   ImageContent imgContent = (ImageContent) msg.getContent();
   final String path = imgContent.getLocalThumbnailPath();
   holder.sendingIv.setVisibility(View.VISIBLE);
   holder.sendingIv.startAnimation(sendingAnim);
   holder.picture.setAlpha(0.75f);
   holder.resend.setVisibility(View.GONE);
   holder.progressTv.setVisibility(View.VISIBLE);
   try {
     // 显示上传进度
     msg.setOnContentUploadProgressCallback(
         new ProgressUpdateCallback() {
           @Override
           public void onProgressUpdate(final double progress) {
             mActivity.runOnUiThread(
                 new Runnable() {
                   @Override
                   public void run() {
                     String progressStr = (int) (progress * 100) + "%";
                     holder.progressTv.setText(progressStr);
                   }
                 });
           }
         });
     if (!msg.isSendCompleteCallbackExists()) {
       msg.setOnSendCompleteCallback(
           new BasicCallback() {
             @Override
             public void gotResult(final int status, String desc) {
               holder.sendingIv.clearAnimation();
               holder.sendingIv.setVisibility(View.GONE);
               holder.progressTv.setVisibility(View.GONE);
               holder.picture.setAlpha(1.0f);
               if (status != 0) {
                 HandleResponseCode.onHandle(mContext, status, false);
                 holder.resend.setVisibility(View.VISIBLE);
               }
             }
           });
     }
     JMessageClient.sendMessage(msg);
   } catch (Exception e) {
     e.printStackTrace();
   }
 }
 // 正在发送文字
 private void sendingText(ViewHolder holder, Animation sendingAnim, Message msg) {
   holder.sendSending.setVisibility(View.VISIBLE);
   holder.sendSending.startAnimation(sendingAnim);
   holder.sendFail.setVisibility(View.GONE);
   // 消息正在发送,重新注册一个监听消息发送完成的Callback
   if (!msg.isSendCompleteCallbackExists()) {
     msg.setOnSendCompleteCallback(
         new BasicCallback() {
           @Override
           public void gotResult(final int status, final String desc) {
             mActivity.runOnUiThread(
                 new Runnable() {
                   @Override
                   public void run() {
                     if (status != 0) notifyDataSetChanged();
                   }
                 });
           }
         });
   }
 }
  private void resendText(final ViewHolder holder, Animation sendingAnim, Message msg) {
    holder.sendFail.setVisibility(View.GONE);
    holder.sendSending.setVisibility(View.VISIBLE);
    holder.sendSending.startAnimation(sendingAnim);

    if (!msg.isSendCompleteCallbackExists()) {
      msg.setOnSendCompleteCallback(
          new BasicCallback() {
            @Override
            public void gotResult(final int status, String desc) {
              if (status != 0) {
                holder.sendSending.clearAnimation();
                holder.sendSending.setVisibility(View.GONE);
                holder.sendFail.setVisibility(View.VISIBLE);
              }
              notifyDataSetChanged();
            }
          });
    }

    JMessageClient.sendMessage(msg);
  }
  private void resendTextOrVoice(final ViewHolder holder, Animation sendingAnim, Message msg) {
    holder.resend.setVisibility(View.GONE);
    holder.sendingIv.setVisibility(View.VISIBLE);
    holder.sendingIv.startAnimation(sendingAnim);

    if (!msg.isSendCompleteCallbackExists()) {
      msg.setOnSendCompleteCallback(
          new BasicCallback() {
            @Override
            public void gotResult(final int status, String desc) {
              holder.sendingIv.clearAnimation();
              holder.sendingIv.setVisibility(View.GONE);
              if (status != 0) {
                HandleResponseCode.onHandle(mContext, status, false);
                holder.resend.setVisibility(View.VISIBLE);
                Log.i(TAG, "Resend message failed!");
              }
            }
          });
    }

    JMessageClient.sendMessage(msg);
  }