Commit 1d77a571893007ffde073e557eca2af9a2431351

Authored by 陈硕
1 parent bf007192

添加语音 图片

Showing 27 changed files with 1056 additions and 333 deletions
app/src/main/AndroidManifest.xml
@@ -34,26 +34,20 @@ @@ -34,26 +34,20 @@
34 34
35 <activity 35 <activity
36 android:name="com.cnlive.im.ui.ChatRoomActivity" 36 android:name="com.cnlive.im.ui.ChatRoomActivity"
37 - android:windowSoftInputMode="adjustResize"  
38 android:theme="@style/Theme.AppCompat.Light.NoActionBar" 37 android:theme="@style/Theme.AppCompat.Light.NoActionBar"
39 - >  
40 - </activity> 38 + android:windowSoftInputMode="adjustResize"></activity>
41 39
42 <activity 40 <activity
43 android:name="com.cnlive.im.ui.LoGinActivity" 41 android:name="com.cnlive.im.ui.LoGinActivity"
44 - /> 42 + android:screenOrientation="portrait" />
45 43
46 <activity 44 <activity
47 android:name=".ui.UserLoginActivity" 45 android:name=".ui.UserLoginActivity"
48 - />  
49 - <activity  
50 - android:name="com.cnlive.im.ui.PrivateChatActivity"  
51 - /> 46 + android:screenOrientation="portrait" />
52 47
53 <activity 48 <activity
54 android:name="com.cnlive.im.ui.CommentActivity" 49 android:name="com.cnlive.im.ui.CommentActivity"
55 - />  
56 - 50 + android:screenOrientation="portrait" />
57 51
58 52
59 <service 53 <service
@@ -61,11 +55,13 @@ @@ -61,11 +55,13 @@
61 android:exported="true" 55 android:exported="true"
62 android:process=":ipc" /> 56 android:process=":ipc" />
63 57
64 - <service android:name="io.rong.imlib.ReConnectService"  
65 - android:exported="true"/> 58 + <service
  59 + android:name="io.rong.imlib.ReConnectService"
  60 + android:exported="true" />
66 61
67 - <receiver android:name="io.rong.imlib.ConnectChangeReceiver"  
68 - android:exported="true"/> 62 + <receiver
  63 + android:name="io.rong.imlib.ConnectChangeReceiver"
  64 + android:exported="true" />
69 65
70 <receiver 66 <receiver
71 android:name="io.rong.imlib.HeartbeatReceiver" 67 android:name="io.rong.imlib.HeartbeatReceiver"
app/src/main/java/com/cnlive/im/adapter/ChatListAdapter.java
1 package com.cnlive.im.adapter; 1 package com.cnlive.im.adapter;
2 2
3 -import android.annotation.TargetApi;  
4 -import android.content.Context;  
5 -import android.graphics.Color;  
6 -import android.os.Build;  
7 -import android.view.LayoutInflater;  
8 -import android.view.View;  
9 -import android.view.ViewGroup;  
10 -import android.widget.BaseAdapter;  
11 -import android.widget.RelativeLayout;  
12 -import android.widget.TextView;  
13 -  
14 -import com.cnlive.im.R;  
15 -import com.cnlive.im.ui.ChatRoomActivity;  
16 -  
17 -import org.json.JSONException;  
18 -import org.json.JSONObject;  
19 -  
20 -import java.util.ArrayList;  
21 -import java.util.List;  
22 -  
23 /** 3 /**
24 * Created by Lynn on 2/13/2017. 4 * Created by Lynn on 2/13/2017.
25 */ 5 */
26 6
27 -public class ChatListAdapter extends BaseAdapter { 7 +public class ChatListAdapter {
28 8
29 - private List<ChatRoomActivity.CNMessageInfo> msgList; 9 + /* private List<Object> msgList;
30 private LayoutInflater mInflater = null; 10 private LayoutInflater mInflater = null;
31 private final RelativeLayout.LayoutParams layoutParams; 11 private final RelativeLayout.LayoutParams layoutParams;
  12 + Context mContext;
32 13
33 public ChatListAdapter(Context context) { 14 public ChatListAdapter(Context context) {
  15 + this.mContext = context;
34 msgList = new ArrayList<>(); 16 msgList = new ArrayList<>();
35 mInflater = LayoutInflater.from(context); 17 mInflater = LayoutInflater.from(context);
36 layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 18 layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
@@ -54,52 +36,92 @@ public class ChatListAdapter extends BaseAdapter { @@ -54,52 +36,92 @@ public class ChatListAdapter extends BaseAdapter {
54 @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) 36 @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
55 @Override 37 @Override
56 public View getView(int position, View convertView, ViewGroup parent) { 38 public View getView(int position, View convertView, ViewGroup parent) {
57 - ViewHolder viewHolder;  
58 - if (convertView == null) {  
59 - viewHolder = new ViewHolder();  
60 - convertView = mInflater.inflate(R.layout.msg_text_view, null);  
61 - viewHolder.mRelativeLayout = (RelativeLayout) convertView.findViewById(R.id.re_chat_room);  
62 - viewHolder.userName = (TextView) convertView.findViewById(R.id.user_name);  
63 - viewHolder.msgContent = (TextView) convertView.findViewById(R.id.msg_text);  
64 - convertView.setTag(viewHolder);  
65 - } else {  
66 - viewHolder = (ViewHolder) convertView.getTag();  
67 - }  
68 39
69 - if (msgList.get(position).isSendMesageInfo()) {  
70 - viewHolder.msgContent.setText(msgList.get(position).getCnMessage().getUserInfo().getUserName() == null ? "" : " : " + msgList.get(position).getCnMessage().getUserInfo().getUserName());  
71 - try {  
72 - viewHolder.userName.setText(msgList.get(position).getCnMessage().getContent() == null ? "" : (String) new JSONObject(msgList.get(position).getCnMessage().getContent()).get("message"));  
73 - } catch (JSONException e) {  
74 - e.printStackTrace();  
75 - }  
76 - layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_START);  
77 - layoutParams.addRule(RelativeLayout.ALIGN_PARENT_END);  
78 - viewHolder.mRelativeLayout.setLayoutParams(layoutParams);  
79 - viewHolder.msgContent.setTextColor(Color.parseColor("#d61d0c"));  
80 - viewHolder.userName.setTextColor(Color.BLACK);  
81 - } else {  
82 - viewHolder.userName.setText(msgList.get(position).getCnMessage().getUserInfo().getUserName() == null ? "" : msgList.get(position).getCnMessage().getUserInfo().getUserName() + " : ");  
83 - try {  
84 - viewHolder.msgContent.setText(msgList.get(position).getCnMessage().getContent() == null ? "" : msgList.get(position).getCnMessage().getContent() == null ? "" : (String) new JSONObject(msgList.get(position).getCnMessage().getContent()).get("message"));  
85 - } catch (JSONException e) {  
86 - e.printStackTrace(); 40 + cnStringMessage(position, convertView, parent);
  41 + cnImaMessage(position, convertView,parent);
  42 +
  43 +
  44 + return convertView;
  45 +
  46 + }
  47 +
  48 + private void cnImaMessage(int position, View convertView,ViewGroup parent) {
  49 + ImaViewHolder viewHolder;
  50 + Object cnImagMessage = msgList.get(position);
  51 + if (cnImagMessage instanceof ImagMessage) {
  52 + if (convertView == null) {
  53 + viewHolder = new ImaViewHolder();
  54 + if (((ImagMessage) cnImagMessage).isUserSend()) {
  55 + convertView = mInflater.inflate(R.layout.imag_layout_item_user, parent,false);
  56 + viewHolder.userName = (TextView) convertView.findViewById(R.id.img_user_name);
  57 + viewHolder.userImaView = (ImageView) convertView.findViewById(R.id.img_content);
  58 + convertView.setTag(viewHolder);
  59 + }
  60 +
  61 + } else {
  62 + viewHolder = (ImaViewHolder) convertView.getTag();
87 } 63 }
88 - viewHolder.mRelativeLayout.setLayoutParams(layoutParams);  
89 - layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_END);  
90 - layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START);  
91 - viewHolder.userName.setTextColor(Color.parseColor("#d61d0c"));  
92 - viewHolder.msgContent.setTextColor(Color.BLACK); 64 + ImagMessage cnImagMessage1 = (ImagMessage) cnImagMessage;
  65 + viewHolder.userName.setText(cnImagMessage1.getCnImgMessage().getUserInfo().getUserName());
  66 + Glide.with(mContext).load(cnImagMessage1.getCnImgMessage().getThumUri()).into(viewHolder.userImaView);
  67 +
  68 +
93 } 69 }
94 70
95 71
96 - return convertView;  
97 72
98 } 73 }
99 74
  75 + @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
  76 + private void cnStringMessage(int position, View convertView, ViewGroup parent) {
  77 + ViewHolder viewHolder;
  78 + Object o = msgList.get(position);
  79 + if (o instanceof ChatRoomActivity.CNMessageInfo) {
  80 + if (convertView == null) {
  81 + viewHolder = new ViewHolder();
  82 + convertView = mInflater.inflate(R.layout.msg_text_view, parent,false);
  83 + viewHolder.mRelativeLayout = (RelativeLayout) convertView.findViewById(R.id.re_chat_room);
  84 + viewHolder.userName = (TextView) convertView.findViewById(R.id.user_name);
  85 + viewHolder.msgContent = (TextView) convertView.findViewById(R.id.msg_text);
  86 + convertView.setTag(viewHolder);
  87 + } else {
  88 + viewHolder = (ViewHolder) convertView.getTag();
  89 + }
  90 + ChatRoomActivity.CNMessageInfo cnMessageInfo = (ChatRoomActivity.CNMessageInfo) msgList.get(position);
  91 + if (cnMessageInfo.isSendMesageInfo()) {
  92 + viewHolder.msgContent.setText(cnMessageInfo.getCnMessage().getUserInfo().getUserName() == null ? "" : " : " + cnMessageInfo.getCnMessage().getUserInfo().getUserName());
  93 + try {
  94 + viewHolder.userName.setText(cnMessageInfo.getCnMessage().getContent() == null ? "" : (String) new JSONObject(cnMessageInfo.getCnMessage().getContent()).get("message"));
  95 + } catch (JSONException e) {
  96 + e.printStackTrace();
  97 + }
  98 + layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_START);
  99 + layoutParams.addRule(RelativeLayout.ALIGN_PARENT_END);
  100 + viewHolder.mRelativeLayout.setLayoutParams(layoutParams);
  101 + viewHolder.msgContent.setTextColor(Color.parseColor("#d61d0c"));
  102 + viewHolder.userName.setTextColor(Color.BLACK);
  103 + } else {
  104 + viewHolder.userName.setText(cnMessageInfo.getCnMessage().getUserInfo().getUserName() == null ? "" : cnMessageInfo.getCnMessage().getUserInfo().getUserName() + " : ");
  105 + try {
  106 + viewHolder.msgContent.setText(cnMessageInfo.getCnMessage().getContent() == null ? "" : cnMessageInfo.getCnMessage().getContent() == null ? "" : (String) new JSONObject(cnMessageInfo.getCnMessage().getContent()).get("message"));
  107 + } catch (JSONException e) {
  108 + e.printStackTrace();
  109 + }
  110 + viewHolder.mRelativeLayout.setLayoutParams(layoutParams);
  111 + layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_END);
  112 + layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START);
  113 + viewHolder.userName.setTextColor(Color.parseColor("#d61d0c"));
  114 + viewHolder.msgContent.setTextColor(Color.BLACK);
  115 + }
100 116
101 117
102 - public void updateItems(List<ChatRoomActivity.CNMessageInfo> items) { 118 + }
  119 +
  120 +
  121 + }
  122 +
  123 +
  124 + public void updateItems(List<Object> items) {
103 if (items == null) return; 125 if (items == null) return;
104 msgList.clear(); 126 msgList.clear();
105 msgList.addAll(items); 127 msgList.addAll(items);
@@ -112,4 +134,11 @@ public class ChatListAdapter extends BaseAdapter { @@ -112,4 +134,11 @@ public class ChatListAdapter extends BaseAdapter {
112 RelativeLayout mRelativeLayout; 134 RelativeLayout mRelativeLayout;
113 135
114 } 136 }
  137 +
  138 +
  139 + private class ImaViewHolder {
  140 + TextView userName;
  141 + ImageView userImaView;
  142 +
  143 + }*/
115 } 144 }
app/src/main/java/com/cnlive/im/adapter/ChatRoomAdpter.java 0 → 100644
  1 +package com.cnlive.im.adapter;
  2 +
  3 +import android.content.Context;
  4 +import android.graphics.Color;
  5 +import android.net.Uri;
  6 +import android.support.v7.widget.RecyclerView;
  7 +import android.view.LayoutInflater;
  8 +import android.view.View;
  9 +import android.view.ViewGroup;
  10 +import android.widget.ImageView;
  11 +import android.widget.TextView;
  12 +
  13 +import com.bumptech.glide.Glide;
  14 +import com.cnlive.im.R;
  15 +import com.cnlive.im.adapter.base.BaseRecyclerAdapter;
  16 +import com.cnlive.im.adapter.base.VoiceItemClickListener;
  17 +import com.cnlive.im.mode.ImagMessage;
  18 +import com.cnlive.im.mode.StringMessage;
  19 +import com.cnlive.im.mode.VoiceMessage;
  20 +
  21 +/**
  22 + * @author 陈硕
  23 + * @time 2017/7/14 14:35
  24 + * @desc ${TODD}
  25 + */
  26 +public class ChatRoomAdpter extends BaseRecyclerAdapter {
  27 +
  28 + private int stringUser = 1;
  29 + private int stringOppsite = 2;
  30 + private int imaUser = 3;
  31 + private int imaOppsite = 4;
  32 + private int voiceUser = 5;
  33 + private int voiceOppsite = 6;
  34 + private Context mContext;
  35 + private VoiceItemClickListener mVoiceItemClickListener;
  36 +
  37 + public ChatRoomAdpter(Context context) {
  38 + super(context);
  39 + this.mContext = context;
  40 +
  41 + }
  42 +
  43 +
  44 + public void setonVoiceItemClickListener(VoiceItemClickListener voiveItemClickListener) {
  45 + this.mVoiceItemClickListener = voiveItemClickListener;
  46 + }
  47 +
  48 + @Override
  49 + public int getItemViewType(int position) {
  50 + Object o = mItems.get(position);
  51 + if (o instanceof StringMessage) {
  52 + StringMessage o1 = (StringMessage) o;
  53 + boolean userSend = o1.isUserSend();
  54 + if (userSend) return stringUser;
  55 + else return stringOppsite;
  56 + } else if (o instanceof ImagMessage) {
  57 + ImagMessage o1 = (ImagMessage) o;
  58 + if (o1.isUserSend()) return imaUser;
  59 + else return imaOppsite;
  60 + } else if (o instanceof VoiceMessage) {
  61 + VoiceMessage o1 = (VoiceMessage) o;
  62 + if (o1.isUserSend())
  63 + return voiceUser;
  64 + else return voiceOppsite;
  65 +
  66 + }
  67 + return 0;
  68 + }
  69 +
  70 + @Override
  71 + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  72 + if (viewType == imaUser) {
  73 + return new ImaMessageHolder(LayoutInflater.from(mContext).inflate(R.layout.imag_layout_item_user, null));
  74 + } else if (viewType == imaOppsite) {
  75 + return new ImaMessageHolder(LayoutInflater.from(mContext).inflate(R.layout.imag_layout_item_oppsite, null));
  76 + } else if (viewType == stringUser) {
  77 + return new StringMessageHolder(LayoutInflater.from(mContext).inflate(R.layout.string_layout_item_user, null));
  78 + } else if (viewType == stringOppsite) {
  79 + return new StringMessageHolder(LayoutInflater.from(mContext).inflate(R.layout.string_layout_item_oppsite, null));
  80 + } else if (viewType == voiceUser) {
  81 + return new VoiceMessageHolder(LayoutInflater.from(mContext).inflate(R.layout.voice_layout_item_user, null));
  82 + } else if (viewType == voiceOppsite) {
  83 + return new VoiceMessageHolder(LayoutInflater.from(mContext).inflate(R.layout.voice_layout_item_oppsite, null));
  84 + }
  85 + return null;
  86 + }
  87 +
  88 + @Override
  89 + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
  90 + if (holder instanceof StringMessageHolder) {
  91 + StringMessageHolder holder1 = (StringMessageHolder) holder;
  92 + Object o = mItems.get(position);
  93 + StringMessage o1 = (StringMessage) o;
  94 + holder1.msg_text.setText(o1.getCnMessage().getContent());
  95 + holder1.user_name.setText(o1.getCnMessage().getUserInfo().getUserName());
  96 + holder1.user_name.setTextColor(Color.parseColor("#d61d0c"));
  97 + holder1.msg_text.setTextColor(Color.BLACK);
  98 + } else if (holder instanceof ImaMessageHolder) {
  99 + ImaMessageHolder holder1 = (ImaMessageHolder) holder;
  100 + Object o = mItems.get(position);
  101 + ImagMessage o1 = (ImagMessage) o;
  102 + holder1.ima_user_name.setTextColor(Color.parseColor("#d61d0c"));
  103 + Glide.with(mContext).load(o1.getCnImgMessage().getRemoteUri()).into(holder1.img_content);
  104 + holder1.ima_user_name.setText(o1.getCnImgMessage().getUserInfo().getUserName());
  105 + } else if (holder instanceof VoiceMessageHolder) {
  106 + VoiceMessageHolder holder1 = (VoiceMessageHolder) holder;
  107 + Object o = mItems.get(position);
  108 + VoiceMessage o1 = (VoiceMessage) o;
  109 + holder1.voice_user_name.setText(o1.getCnVoiceMessage().getUserInfo().getUserName());
  110 + final Uri voiceUri = o1.getCnVoiceMessage().getVoiceUri();
  111 + holder1.itemView.setOnClickListener(new View.OnClickListener() {
  112 + @Override
  113 + public void onClick(View v) {
  114 + mVoiceItemClickListener.onItemClick(voiceUri);
  115 + }
  116 + });
  117 + }
  118 +
  119 + }
  120 +
  121 + public class StringMessageHolder extends RecyclerView.ViewHolder {
  122 + private TextView user_name;
  123 + private TextView msg_text;
  124 +
  125 + public StringMessageHolder(View itemView) {
  126 + super(itemView);
  127 + user_name = (TextView) itemView.findViewById(R.id.user_name);
  128 + msg_text = (TextView) itemView.findViewById(R.id.msg_text);
  129 +
  130 + }
  131 + }
  132 +
  133 + public class ImaMessageHolder extends RecyclerView.ViewHolder {
  134 +
  135 + private TextView ima_user_name;
  136 + private ImageView img_content;
  137 +
  138 + public ImaMessageHolder(View itemView) {
  139 + super(itemView);
  140 + ima_user_name = (TextView) itemView.findViewById(R.id.img_user_name);
  141 + img_content = (ImageView) itemView.findViewById(R.id.img_content);
  142 + }
  143 + }
  144 +
  145 + public class VoiceMessageHolder extends RecyclerView.ViewHolder {
  146 +
  147 +
  148 + private TextView voice_user_name;
  149 + private ImageView voice_content;
  150 +
  151 + public VoiceMessageHolder(View itemView) {
  152 + super(itemView);
  153 + voice_user_name = (TextView) itemView.findViewById(R.id.voice_user_name);
  154 + voice_content = (ImageView) itemView.findViewById(R.id.voice_content);
  155 + }
  156 + }
  157 +
  158 +
  159 +
  160 +}
app/src/main/java/com/cnlive/im/adapter/base/BaseRecyclerAdapter.java 0 → 100644
  1 +package com.cnlive.im.adapter.base;
  2 +
  3 +import android.content.Context;
  4 +import android.support.annotation.NonNull;
  5 +import android.support.annotation.Nullable;
  6 +import android.support.v7.widget.RecyclerView;
  7 +import android.util.Log;
  8 +import android.view.LayoutInflater;
  9 +
  10 +import java.util.ArrayList;
  11 +import java.util.List;
  12 +
  13 +
  14 +/**
  15 + * Created by zuoxian on 15/9/7.
  16 + */
  17 +public abstract class BaseRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
  18 +
  19 +
  20 + protected List<Object> mItems ;
  21 + protected Context mContext;
  22 + public LayoutInflater inflater;
  23 + public BaseRecyclerAdapter(Context context){
  24 + this.mContext = context;
  25 + inflater = LayoutInflater.from(context);
  26 + mItems = new ArrayList<>();
  27 + }
  28 +
  29 + public List<Object> getList() {
  30 + return mItems;
  31 + }
  32 +
  33 + public void addItem(@Nullable Object item) {
  34 + if(item == null) return ;
  35 + mItems.add(mItems.size(), item);
  36 + notifyItemInserted(mItems.size());
  37 + }
  38 +
  39 + public void addItems(@Nullable List<Object> items){
  40 + if(items == null) return ;
  41 + this.mItems.addAll(items);
  42 + notifyDataSetChanged();
  43 + }
  44 +
  45 + public boolean containsAll(@NonNull List<Object> items){
  46 + return mItems.containsAll(items);
  47 + }
  48 +
  49 + public void updateItem(@Nullable Object tasks, int position) {
  50 + if(tasks == null) return ;
  51 + mItems.set(position, tasks);
  52 + notifyItemChanged(position);
  53 + }
  54 +
  55 + public void updateItems(@Nullable List<Object> items){
  56 + if(items == null) return;
  57 + this.mItems.clear();
  58 + this.mItems.addAll(items);
  59 + Log.v("getItemCount",mItems.size()+"");
  60 +
  61 + notifyDataSetChanged();
  62 + }
  63 +
  64 + public void removeItem(int index) {
  65 + mItems.remove(index);
  66 + notifyItemRemoved(index);
  67 + }
  68 +
  69 + public void getView(int position , RecyclerView.ViewHolder viewHolder, int type, Object item){}
  70 +
  71 + public Object getItem(int location) {
  72 + return mItems.get(location);
  73 + }
  74 +
  75 + @Override
  76 + public int getItemCount() {
  77 + Log.v("getItemCount",mItems.size()+"");
  78 + return mItems == null ? 0 : mItems.size();
  79 + }
  80 +
  81 + public void clear(){
  82 + mItems.clear();
  83 + notifyDataSetChanged();
  84 + }
  85 +
  86 +}
app/src/main/java/com/cnlive/im/adapter/base/VoiceItemClickListener.java 0 → 100644
  1 +package com.cnlive.im.adapter.base;
  2 +
  3 +import android.net.Uri;
  4 +
  5 +/**
  6 + * @author 陈硕
  7 + * @time 2017/7/14 17:50
  8 + * @desc ${TODD}
  9 + */
  10 +public interface VoiceItemClickListener {
  11 + void onItemClick(Uri uri);
  12 +}
app/src/main/java/com/cnlive/im/mode/ImagMessage.java 0 → 100644
  1 +package com.cnlive.im.mode;
  2 +
  3 +import com.cnlive.libs.util.chat.model.CNImgMessage;
  4 +
  5 +/**
  6 + * @author 陈硕
  7 + * @time 2017/7/14 11:51
  8 + * @desc ${TODD}
  9 + */
  10 +public class ImagMessage {
  11 + private String type;
  12 + private CNImgMessage cnImgMessage;
  13 + boolean isUserSend;
  14 +
  15 +
  16 + public String getType() {
  17 + return type;
  18 + }
  19 +
  20 + public void setType(String type) {
  21 + this.type = type;
  22 + }
  23 +
  24 + public CNImgMessage getCnImgMessage() {
  25 + return cnImgMessage;
  26 + }
  27 +
  28 + public void setCnImgMessage(CNImgMessage cnImgMessage) {
  29 + this.cnImgMessage = cnImgMessage;
  30 + }
  31 +
  32 + public boolean isUserSend() {
  33 + return isUserSend;
  34 + }
  35 +
  36 + public void setUserSend(boolean userSend) {
  37 + isUserSend = userSend;
  38 + }
  39 +
  40 + public ImagMessage( String type,CNImgMessage cnImgMessage, boolean isUserSend) {
  41 + this.type = type;
  42 + this.cnImgMessage = cnImgMessage;
  43 + this.isUserSend = isUserSend;
  44 + }
  45 +}
app/src/main/java/com/cnlive/im/mode/StringMessage.java 0 → 100644
  1 +package com.cnlive.im.mode;
  2 +
  3 +import com.cnlive.libs.util.chat.model.CNMessage;
  4 +
  5 +/**
  6 + * @author 陈硕
  7 + * @time 2017/7/14 14:43
  8 + * @desc ${TODD}
  9 + */
  10 +public class StringMessage {
  11 +
  12 + private String type;
  13 + private CNMessage cnMessage;
  14 + boolean isUserSend;
  15 +
  16 + public StringMessage(String type, CNMessage cnMessage, boolean isUserSend) {
  17 + this.type = type;
  18 + this.cnMessage = cnMessage;
  19 + this.isUserSend = isUserSend;
  20 + }
  21 +
  22 + public String getType() {
  23 + return type;
  24 + }
  25 +
  26 + public void setType(String type) {
  27 + this.type = type;
  28 + }
  29 +
  30 + public CNMessage getCnMessage() {
  31 + return cnMessage;
  32 + }
  33 +
  34 + public void setCnMessage(CNMessage cnMessage) {
  35 + this.cnMessage = cnMessage;
  36 + }
  37 +
  38 + public boolean isUserSend() {
  39 + return isUserSend;
  40 + }
  41 +
  42 + public void setUserSend(boolean userSend) {
  43 + isUserSend = userSend;
  44 + }
  45 +}
app/src/main/java/com/cnlive/im/mode/VoiceMessage.java 0 → 100644
  1 +package com.cnlive.im.mode;
  2 +
  3 +import com.cnlive.libs.util.chat.model.CNVoiceMessage;
  4 +
  5 +/**
  6 + * @author 陈硕
  7 + * @time 2017/7/14 16:51
  8 + * @desc ${TODD}
  9 + */
  10 +public class VoiceMessage {
  11 + private String type;
  12 + private CNVoiceMessage cnVoiceMessage;
  13 + boolean isUserSend;
  14 +
  15 + public VoiceMessage(String type, CNVoiceMessage cnVoiceMessage, boolean isUserSend) {
  16 + this.type = type;
  17 + this.cnVoiceMessage = cnVoiceMessage;
  18 + this.isUserSend = isUserSend;
  19 + }
  20 +
  21 + public String getType() {
  22 + return type;
  23 + }
  24 +
  25 + public void setType(String type) {
  26 + this.type = type;
  27 + }
  28 +
  29 + public CNVoiceMessage getCnVoiceMessage() {
  30 + return cnVoiceMessage;
  31 + }
  32 +
  33 + public void setCnVoiceMessage(CNVoiceMessage cnVoiceMessage) {
  34 + this.cnVoiceMessage = cnVoiceMessage;
  35 + }
  36 +
  37 + public boolean isUserSend() {
  38 + return isUserSend;
  39 + }
  40 +
  41 + public void setUserSend(boolean userSend) {
  42 + isUserSend = userSend;
  43 + }
  44 +}
app/src/main/java/com/cnlive/im/ui/ChatRoomActivity.java
1 package com.cnlive.im.ui; 1 package com.cnlive.im.ui;
2 2
  3 +import android.Manifest;
  4 +import android.app.Activity;
3 import android.content.Intent; 5 import android.content.Intent;
  6 +import android.content.pm.PackageManager;
  7 +import android.net.Uri;
  8 +import android.os.Build;
4 import android.os.Bundle; 9 import android.os.Bundle;
5 import android.os.Handler; 10 import android.os.Handler;
  11 +import android.support.v4.content.ContextCompat;
6 import android.support.v7.app.AppCompatActivity; 12 import android.support.v7.app.AppCompatActivity;
  13 +import android.support.v7.widget.LinearLayoutManager;
  14 +import android.support.v7.widget.RecyclerView;
7 import android.util.Log; 15 import android.util.Log;
  16 +import android.view.MotionEvent;
8 import android.view.View; 17 import android.view.View;
9 import android.widget.Button; 18 import android.widget.Button;
10 import android.widget.EditText; 19 import android.widget.EditText;
11 import android.widget.LinearLayout; 20 import android.widget.LinearLayout;
12 -import android.widget.ListView;  
13 import android.widget.RelativeLayout; 21 import android.widget.RelativeLayout;
14 import android.widget.Toast; 22 import android.widget.Toast;
15 23
16 import com.cnlive.im.R; 24 import com.cnlive.im.R;
17 -import com.cnlive.im.adapter.ChatListAdapter;  
18 -import com.cnlive.im.mode.CNMessageModole;  
19 -import com.cnlive.im.util.ToStringUtils; 25 +import com.cnlive.im.adapter.ChatRoomAdpter;
  26 +import com.cnlive.im.adapter.base.VoiceItemClickListener;
  27 +import com.cnlive.im.mode.ImagMessage;
  28 +import com.cnlive.im.mode.StringMessage;
  29 +import com.cnlive.im.mode.VoiceMessage;
  30 +import com.cnlive.im.util.MediaRecorderUtil;
  31 +import com.cnlive.im.util.MessageType;
20 import com.cnlive.libs.util.chat.ChatUtil; 32 import com.cnlive.libs.util.chat.ChatUtil;
21 import com.cnlive.libs.util.chat.base.IChat; 33 import com.cnlive.libs.util.chat.base.IChat;
22 -import com.cnlive.libs.util.chat.model.CNChatRoomInfo;  
23 -import com.cnlive.libs.util.chat.model.CNChatRoomMemberInfo; 34 +import com.cnlive.libs.util.chat.model.CNImgMessage;
24 import com.cnlive.libs.util.chat.model.CNMessage; 35 import com.cnlive.libs.util.chat.model.CNMessage;
25 import com.cnlive.libs.util.chat.model.CNUserInfo; 36 import com.cnlive.libs.util.chat.model.CNUserInfo;
  37 +import com.cnlive.libs.util.chat.model.CNVoiceMessage;
26 38
27 import org.json.JSONException; 39 import org.json.JSONException;
28 -import org.json.JSONObject;  
29 40
30 import java.util.ArrayList; 41 import java.util.ArrayList;
31 -import java.util.List;  
32 42
33 43
34 /** 44 /**
@@ -36,24 +46,33 @@ import java.util.List; @@ -36,24 +46,33 @@ import java.util.List;
36 * @time 2017/3/7 14:36 46 * @time 2017/3/7 14:36
37 * @desc ${TODD} 47 * @desc ${TODD}
38 */ 48 */
39 -public class ChatRoomActivity extends AppCompatActivity implements View.OnClickListener { 49 +public class ChatRoomActivity extends AppCompatActivity implements View.OnClickListener, View.OnTouchListener, VoiceItemClickListener {
40 private static final String TAG = "ChatRoomActivity"; 50 private static final String TAG = "ChatRoomActivity";
41 - private ArrayList<CNMessageInfo> groupChatOneListMy; 51 + private ArrayList<Object> groupChatOneListMy;
42 private String roomIdOne = "ChatRoom05"; 52 private String roomIdOne = "ChatRoom05";
43 private EditText editText; 53 private EditText editText;
44 private Button send_messageOneBtn; 54 private Button send_messageOneBtn;
45 - private ListView listViewOne;  
46 - private ChatListAdapter chatListAdapterOne; 55 + private RecyclerView listViewOne;
  56 + private ChatRoomAdpter chatListAdapterOne;
47 private Button foundChatBtn; 57 private Button foundChatBtn;
48 private Handler mHandler; 58 private Handler mHandler;
49 private RelativeLayout re_chat; 59 private RelativeLayout re_chat;
50 private LinearLayout lin_user; 60 private LinearLayout lin_user;
51 private EditText user_id, user_name; 61 private EditText user_id, user_name;
52 private Button exit_chat1; 62 private Button exit_chat1;
53 - private Button chat_info_mationBtn;  
54 public static String user_name_string; 63 public static String user_name_string;
55 - int i = 0;  
56 private boolean isUserLogin = false; 64 private boolean isUserLogin = false;
  65 + private Button ima_send;
  66 + private Button voice_send;
  67 +
  68 +
  69 + public static final int IMG_FROM_PICTURE = 0x1001;
  70 + public static final int VOICE = 0x1002;
  71 + public static final int PICTURE_REQUEST_CODE = 0x1003;
  72 + public static final int VOICE_REQUEST_CODE = 0x1004;
  73 + private MediaRecorderUtil mediaRecorderUtil;
  74 + private long l;
  75 + int i;
57 76
58 @Override 77 @Override
59 protected void onCreate(Bundle savedInstanceState) { 78 protected void onCreate(Bundle savedInstanceState) {
@@ -63,12 +82,11 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL @@ -63,12 +82,11 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL
63 initUI(); 82 initUI();
64 //设置监听 83 //设置监听
65 mHandler = new Handler(); 84 mHandler = new Handler();
  85 + mediaRecorderUtil = new MediaRecorderUtil();
66 ChatUtil.setOnConnectStatusListener(connectStatusListener); 86 ChatUtil.setOnConnectStatusListener(connectStatusListener);
67 ChatUtil.setOnChatRoomActionListener(chatRoomActionListener); 87 ChatUtil.setOnChatRoomActionListener(chatRoomActionListener);
68 ChatUtil.setOnReceiveMessageListener(receiveMessageListener); 88 ChatUtil.setOnReceiveMessageListener(receiveMessageListener);
69 -  
70 ChatUtil.setKickedOfflineListener(onKickedOfflineListener); 89 ChatUtil.setKickedOfflineListener(onKickedOfflineListener);
71 -  
72 Intent intent = getIntent(); 90 Intent intent = getIntent();
73 user_name_string = intent.getStringExtra("user_name_string"); 91 user_name_string = intent.getStringExtra("user_name_string");
74 String user_id_string = intent.getStringExtra("user_id_string"); 92 String user_id_string = intent.getStringExtra("user_id_string");
@@ -80,23 +98,28 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL @@ -80,23 +98,28 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL
80 98
81 99
82 private void initUI() { 100 private void initUI() {
83 - chat_info_mationBtn = (Button) findViewById(R.id.chat_info_mation);  
84 - chat_info_mationBtn.setOnClickListener(this); 101 + voice_send = (Button) findViewById(R.id.voice_send);
  102 + ima_send = (Button) findViewById(R.id.ima_send);
85 exit_chat1 = (Button) findViewById(R.id.exit_chat1); 103 exit_chat1 = (Button) findViewById(R.id.exit_chat1);
86 user_id = (EditText) findViewById(R.id.user_ID); 104 user_id = (EditText) findViewById(R.id.user_ID);
87 user_name = (EditText) findViewById(R.id.user_name); 105 user_name = (EditText) findViewById(R.id.user_name);
88 lin_user = (LinearLayout) findViewById(R.id.lin_user); 106 lin_user = (LinearLayout) findViewById(R.id.lin_user);
89 re_chat = (RelativeLayout) findViewById(R.id.re_chat); 107 re_chat = (RelativeLayout) findViewById(R.id.re_chat);
90 foundChatBtn = (Button) findViewById(R.id.creatChat); 108 foundChatBtn = (Button) findViewById(R.id.creatChat);
91 - listViewOne = (ListView) findViewById(R.id.chat_list_viewOne); 109 + listViewOne = (RecyclerView) findViewById(R.id.chat_list_viewOne);
92 editText = (EditText) findViewById(R.id.message_content); 110 editText = (EditText) findViewById(R.id.message_content);
93 send_messageOneBtn = (Button) findViewById(R.id.send_messageOne); 111 send_messageOneBtn = (Button) findViewById(R.id.send_messageOne);
  112 + ima_send.setOnClickListener(this);
94 exit_chat1.setOnClickListener(this); 113 exit_chat1.setOnClickListener(this);
95 foundChatBtn.setOnClickListener(this); 114 foundChatBtn.setOnClickListener(this);
96 send_messageOneBtn.setOnClickListener(this); 115 send_messageOneBtn.setOnClickListener(this);
97 groupChatOneListMy = new ArrayList<>(); 116 groupChatOneListMy = new ArrayList<>();
98 - chatListAdapterOne = new ChatListAdapter(ChatRoomActivity.this); 117 + chatListAdapterOne = new ChatRoomAdpter(ChatRoomActivity.this);
  118 + chatListAdapterOne.setonVoiceItemClickListener(this);
  119 + listViewOne.setLayoutManager(new LinearLayoutManager(ChatRoomActivity.this));
99 listViewOne.setAdapter(chatListAdapterOne); 120 listViewOne.setAdapter(chatListAdapterOne);
  121 + voice_send.setOnTouchListener(this);
  122 +
100 } 123 }
101 124
102 125
@@ -111,23 +134,21 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL @@ -111,23 +134,21 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL
111 } 134 }
112 135
113 @Override 136 @Override
114 - public void onSuccess(Object o) throws JSONException {  
115 - final CNMessage cnMessage = (CNMessage) o; 137 + public void onSuccess(final Object o) throws JSONException {
116 mHandler.post(new Runnable() { 138 mHandler.post(new Runnable() {
117 @Override 139 @Override
118 public void run() { 140 public void run() {
119 - try {  
120 - if (((String) new JSONObject(cnMessage.getContent()).get("type")).equals("2"))  
121 - return;  
122 - } catch (JSONException e) {  
123 - e.printStackTrace();  
124 - }  
125 - if ((roomIdOne).equals(cnMessage.getTargetId())) {  
126 - groupChatOneListMy.add(new CNMessageInfo(cnMessage, true));  
127 - chatListAdapterOne.updateItems(groupChatOneListMy);  
128 - chatListAdapterOne.notifyDataSetChanged(); 141 + if (o instanceof CNMessage) {
  142 + CNMessage o1 = (CNMessage) o;
  143 + chatListAdapterOne.addItem(new StringMessage(MessageType.stringMessage, o1, true));
  144 + } else if (o instanceof CNImgMessage) {
  145 + CNImgMessage o1 = (CNImgMessage) o;
  146 + chatListAdapterOne.addItem(new ImagMessage(MessageType.imaMessage, o1, true));
  147 + } else if (o instanceof CNVoiceMessage) {
  148 + CNVoiceMessage o1 = (CNVoiceMessage) o;
  149 + VoiceMessage voiceMessage = new VoiceMessage(MessageType.voiceMessage, o1, true);
  150 + chatListAdapterOne.addItem(voiceMessage);
129 } 151 }
130 -  
131 } 152 }
132 }); 153 });
133 } 154 }
@@ -151,62 +172,25 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL @@ -151,62 +172,25 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL
151 private IChat.OnReceiveMessageListener receiveMessageListener = new IChat.OnReceiveMessageListener() { 172 private IChat.OnReceiveMessageListener receiveMessageListener = new IChat.OnReceiveMessageListener() {
152 @Override 173 @Override
153 public void processMessage(final Object o) { 174 public void processMessage(final Object o) {
154 - final CNMessage cnMessage = (CNMessage) o;  
155 -  
156 mHandler.post(new Runnable() { 175 mHandler.post(new Runnable() {
157 @Override 176 @Override
158 public void run() { 177 public void run() {
159 - try {  
160 - JSONObject jsonObject = new JSONObject(cnMessage.getContent().toString());  
161 - String type = (String) jsonObject.get("type");  
162 - if ("2".equals(type)) {  
163 - Toast.makeText(ChatRoomActivity.this, cnMessage.getUserInfo().getUserName() + "加入聊天室", Toast.LENGTH_SHORT).show();  
164 - return;  
165 - }  
166 - } catch (JSONException e) {  
167 - e.printStackTrace();  
168 - }  
169 - {  
170 - groupChatOneListMy.add(new CNMessageInfo(cnMessage, false));  
171 - chatListAdapterOne.updateItems(groupChatOneListMy);  
172 - chatListAdapterOne.notifyDataSetChanged(); 178 + if (o instanceof CNMessage) {
  179 + CNMessage o1 = (CNMessage) o;
  180 + chatListAdapterOne.addItem(new StringMessage(MessageType.stringMessage, o1, false));
  181 + } else if (o instanceof CNImgMessage) {
  182 + CNImgMessage o1 = (CNImgMessage) o;
  183 + chatListAdapterOne.addItem(new ImagMessage(MessageType.imaMessage, o1, false));
  184 + } else if (o instanceof CNVoiceMessage) {
  185 + CNVoiceMessage o1 = (CNVoiceMessage) o;
  186 + VoiceMessage voiceMessage = new VoiceMessage(MessageType.voiceMessage, o1, false);
  187 + chatListAdapterOne.addItem(voiceMessage);
173 } 188 }
174 } 189 }
175 }); 190 });
176 - }  
177 - };  
178 191
179 -  
180 - //接收消息监听  
181 - /*private IChat.OnReceiveMessageListener receiveMessageListener = new IChat.OnReceiveMessageListener() {  
182 - @Override  
183 - public void processMessage(final CNMessage cnMessage) {  
184 - Log.v(TAG, "receiveMessageListener" + " " + cnMessage.getTargetId() + " " + cnMessage.getContent());  
185 -  
186 - mHandler.post(new Runnable() {  
187 - @Override  
188 - public void run() {  
189 -  
190 - try {  
191 - JSONObject jsonObject = new JSONObject(cnMessage.getContent().toString());  
192 - String type = (String) jsonObject.get("type");  
193 - if ("2".equals(type)) {  
194 - Toast.makeText(ChatRoomActivity.this, cnMessage.getUserInfo().getUserName() + "加入聊天室", Toast.LENGTH_SHORT).show();  
195 - return;  
196 - }  
197 - } catch (JSONException e) {  
198 - e.printStackTrace();  
199 - }  
200 - {  
201 - groupChatOneListMy.add(new CNMessageInfo(cnMessage, false));  
202 - chatListAdapterOne.updateItems(groupChatOneListMy);  
203 - chatListAdapterOne.notifyDataSetChanged();  
204 - }  
205 - }  
206 - });  
207 } 192 }
208 }; 193 };
209 -*/  
210 194
211 195
212 //聊天室操作 196 //聊天室操作
@@ -265,18 +249,7 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL @@ -265,18 +249,7 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL
265 @Override 249 @Override
266 public void onSuccess(int what, final String extra) { 250 public void onSuccess(int what, final String extra) {
267 Log.v(TAG, +what + extra); 251 Log.v(TAG, +what + extra);
268 - mHandler.post(new Runnable() {  
269 - @Override  
270 - public void run() {  
271 - if (i == 0) {  
272 - String objToJsonString = ToStringUtils.objToJsonString(new CNMessageModole(user_name_string + "加入聊天室", "2"));  
273 - ChatUtil.sendMessage(IChat.CHATROOM, roomIdOne, objToJsonString, sendMessageListener);  
274 - ++i;  
275 - }  
276 - Toast.makeText(ChatRoomActivity.this, extra, Toast.LENGTH_SHORT).show();  
277 252
278 - }  
279 - });  
280 253
281 } 254 }
282 255
@@ -296,8 +269,7 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL @@ -296,8 +269,7 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL
296 if (editText.getText().toString().isEmpty()) { 269 if (editText.getText().toString().isEmpty()) {
297 Toast.makeText(this, "不能发送空消息呦~", Toast.LENGTH_SHORT).show(); 270 Toast.makeText(this, "不能发送空消息呦~", Toast.LENGTH_SHORT).show();
298 } else { 271 } else {
299 - String objToJsonString = ToStringUtils.objToJsonString(new CNMessageModole(editText.getText().toString(), "1"));  
300 - ChatUtil.sendMessage(IChat.CHATROOM, roomIdOne, objToJsonString, sendMessageListener); 272 + ChatUtil.sendMessage(IChat.CHATROOM, roomIdOne, editText.getText().toString(), sendMessageListener);
301 editText.setText(""); 273 editText.setText("");
302 } 274 }
303 break; 275 break;
@@ -307,25 +279,104 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL @@ -307,25 +279,104 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL
307 case R.id.exit_chat1: 279 case R.id.exit_chat1:
308 ChatUtil.quitChatRoom(roomIdOne, onOperationListener); 280 ChatUtil.quitChatRoom(roomIdOne, onOperationListener);
309 break; 281 break;
310 - case R.id.chat_info_mation:  
311 - ChatUtil.getChatRoomInfo(roomIdOne, 30, CNChatRoomInfo.ChatRoomMemberOrder.RC_CHAT_ROOM_MEMBER_ASC, new IChat.CNResultCallback<CNChatRoomInfo>() {  
312 - @Override  
313 - public void onSuccess(CNChatRoomInfo cnChatRoomInfo) {  
314 - List<CNChatRoomMemberInfo> memberInfos = cnChatRoomInfo.getMemberInfo();  
315 - for (CNChatRoomMemberInfo memberInfo : memberInfos) {  
316 - String userId = memberInfo.getUserId();  
317 - Log.v("userId", userId);  
318 - }  
319 - } 282 + case R.id.ima_send:
  283 + fromPicture();
  284 + break;
  285 + }
  286 + }
320 287
321 - @Override  
322 - public void onError(int i, String s) {  
323 - Log.v("userId", i + "" + s); 288 + public void mediaRecorder() {
  289 + if (Build.VERSION.SDK_INT >= 23) {
  290 + int checkCallPhonePermission = ContextCompat.checkSelfPermission(ChatRoomActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
  291 + int checkCallPhonePermission1 = ContextCompat.checkSelfPermission(ChatRoomActivity.this, Manifest.permission.RECORD_AUDIO);
  292 +
  293 + if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED || checkCallPhonePermission1 != PackageManager.PERMISSION_GRANTED) {
  294 + requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO}, VOICE_REQUEST_CODE);
  295 + return;
  296 + } else {
  297 + recorder();
  298 + }
  299 + } else {
  300 + recorder();
  301 + }
  302 + }
324 303
325 - }  
326 - }); 304 +
  305 + public String getRecoderFile() {
  306 +
  307 + return mediaRecorderUtil.getRecorderFile();
  308 +
  309 + }
  310 +
  311 + public void recorder() {
  312 + mediaRecorderUtil.record();
  313 +
  314 + }
  315 +
  316 + public void releaseRecord() {
  317 + mediaRecorderUtil.releaseRecord();
  318 +
  319 + }
  320 +
  321 + public void fromPicture() {
  322 + if (Build.VERSION.SDK_INT >= 23) {
  323 + int checkCallPhonePermission = ContextCompat.checkSelfPermission(ChatRoomActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
  324 + if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) {
  325 + requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PICTURE_REQUEST_CODE);
  326 + return;
  327 + } else {
  328 + toIntentPicture();
  329 + }
  330 + } else {
  331 + toIntentPicture();
  332 + }
  333 + }
  334 +
  335 +
  336 + private void toIntentPicture() {
  337 + Intent intent = new Intent();
  338 + intent.setType("image/*");
  339 + intent.setAction(Intent.ACTION_GET_CONTENT);
  340 + startActivityForResult(intent, IMG_FROM_PICTURE);
  341 + }
  342 +
  343 +
  344 + @Override
  345 + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
  346 + super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  347 + switch (requestCode) {
  348 + case PICTURE_REQUEST_CODE:
  349 + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  350 + toIntentPicture();
  351 + } else {
  352 + Toast.makeText(ChatRoomActivity.this, "权限已被禁止,请打开,再使用此功能", Toast.LENGTH_LONG).show();
  353 + }
  354 + break;
  355 +
  356 + case VOICE_REQUEST_CODE:
  357 + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  358 + recorder();
  359 + } else {
  360 + Toast.makeText(ChatRoomActivity.this, "权限已被禁止,请打开,再使用此功能", Toast.LENGTH_LONG).show();
  361 + }
327 break; 362 break;
  363 + }
  364 + }
328 365
  366 +
  367 + @Override
  368 + public void onActivityResult(int requestCode, int resultCode, Intent data) {
  369 + super.onActivityResult(requestCode, resultCode, data);
  370 + if (resultCode == Activity.RESULT_OK) {
  371 + switch (requestCode) {
  372 + case IMG_FROM_PICTURE:
  373 + Uri uri = data.getData();
  374 + ChatUtil.sendImaMessage(IChat.CHATROOM, roomIdOne, uri, uri, sendMessageListener);
  375 + break;
  376 +
  377 + default:
  378 + break;
  379 + }
329 } 380 }
330 } 381 }
331 382
@@ -354,31 +405,54 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL @@ -354,31 +405,54 @@ public class ChatRoomActivity extends AppCompatActivity implements View.OnClickL
354 }; 405 };
355 406
356 407
357 - public static class CNMessageInfo {  
358 - CNMessage cnMessage;  
359 - boolean sendMesageInfo; 408 + @Override
  409 + public boolean onTouch(View v, MotionEvent event) {
360 410
361 - public CNMessage getCnMessage() {  
362 - return cnMessage;  
363 - } 411 + switch (event.getAction()) {
  412 + case MotionEvent.ACTION_DOWN:
  413 + l = System.currentTimeMillis();
  414 + mediaRecorder();
  415 + break;
  416 + case MotionEvent.ACTION_UP:
364 417
365 - public void setCnMessage(CNMessage cnMessage) {  
366 - this.cnMessage = cnMessage;  
367 - } 418 + if (Build.VERSION.SDK_INT >= 23) {
  419 + int checkCallPhonePermission = ContextCompat.checkSelfPermission(ChatRoomActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
  420 + int checkCallPhonePermission1 = ContextCompat.checkSelfPermission(ChatRoomActivity.this, Manifest.permission.RECORD_AUDIO);
368 421
369 - public boolean isSendMesageInfo() {  
370 - return sendMesageInfo;  
371 - } 422 + if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED || checkCallPhonePermission1 != PackageManager.PERMISSION_GRANTED) {
  423 + requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO}, VOICE_REQUEST_CODE);
  424 + } else {
  425 + sendVoice();
  426 + }
  427 + } else {
  428 + sendVoice();
  429 + }
  430 +
  431 +
  432 + break;
372 433
373 - public void setSendMesageInfo(boolean sendMesageInfo) {  
374 - this.sendMesageInfo = sendMesageInfo;  
375 - }  
376 434
377 - public CNMessageInfo(CNMessage cnMessage, boolean sendMesageInfo) {  
378 - this.cnMessage = cnMessage;  
379 - this.sendMesageInfo = sendMesageInfo;  
380 } 435 }
  436 +
  437 + return true;
  438 + }
  439 +
  440 + private void sendVoice() {
  441 + long l1 = System.currentTimeMillis();
  442 + long l2 = (l1 - l) / 1000;
  443 + i = (int) l2;
  444 + releaseRecord();
  445 + String recoderFile = getRecoderFile();
  446 + ChatUtil.sendVoiceMessage(IChat.CHATROOM, roomIdOne, Uri.parse(recoderFile), i, sendMessageListener);
381 } 447 }
382 448
  449 + @Override
  450 + public void onItemClick(Uri uri) {
  451 + plaVoice(uri);
383 452
  453 + }
  454 +
  455 + public void plaVoice(Uri uri) {
  456 + mediaRecorderUtil.plaVoice(uri, this);
  457 + }
384 } 458 }
app/src/main/java/com/cnlive/im/ui/LoGinActivity.java
@@ -42,16 +42,15 @@ public class LoGinActivity extends AppCompatActivity implements View.OnClickList @@ -42,16 +42,15 @@ public class LoGinActivity extends AppCompatActivity implements View.OnClickList
42 case R.id.vis_login: 42 case R.id.vis_login:
43 Intent intent = new Intent(LoGinActivity.this, ChatRoomActivity.class); 43 Intent intent = new Intent(LoGinActivity.this, ChatRoomActivity.class);
44 startActivity(intent); 44 startActivity(intent);
45 -  
46 break; 45 break;
47 case R.id.user_logOut: 46 case R.id.user_logOut:
48 ChatUtil.disconnect(false); 47 ChatUtil.disconnect(false);
49 LoGinActivity.this.finish(); 48 LoGinActivity.this.finish();
50 break; 49 break;
51 case R.id.user_login: 50 case R.id.user_login:
52 - Intent intent2 = new Intent(LoGinActivity.this, UserLoginActivity.class);  
53 - startActivity(intent2); 51 + startActivity(new Intent(LoGinActivity.this, UserLoginActivity.class));
54 break; 52 break;
  53 +
55 } 54 }
56 } 55 }
57 56
app/src/main/java/com/cnlive/im/ui/PrivateChatActivity.java
1 package com.cnlive.im.ui; 1 package com.cnlive.im.ui;
2 2
3 -import android.content.Intent;  
4 -import android.os.Bundle;  
5 -import android.os.Handler;  
6 -import android.support.v7.app.AppCompatActivity;  
7 -import android.util.Log;  
8 -import android.view.View;  
9 -import android.widget.Button;  
10 -import android.widget.EditText;  
11 -import android.widget.LinearLayout;  
12 -import android.widget.ListView;  
13 -import android.widget.Toast;  
14 -  
15 -import com.cnlive.im.R;  
16 -import com.cnlive.im.adapter.ChatListAdapter;  
17 -import com.cnlive.im.mode.CNMessageModole;  
18 -import com.cnlive.im.util.ToStringUtils;  
19 -import com.cnlive.libs.util.chat.ChatUtil;  
20 -import com.cnlive.libs.util.chat.base.IChat;  
21 -import com.cnlive.libs.util.chat.model.CNMessage;  
22 -import com.cnlive.libs.util.chat.model.CNUserInfo;  
23 -  
24 -import org.json.JSONException;  
25 -import org.json.JSONObject;  
26 -  
27 -import java.util.ArrayList;  
28 -  
29 -import static com.cnlive.im.R.id.opposite_id_edit;  
30 -  
31 -  
32 /** 3 /**
33 * @author 陈硕 4 * @author 陈硕
34 * @time 2017/3/7 14:36 5 * @time 2017/3/7 14:36
35 * @desc ${TODD} 6 * @desc ${TODD}
36 */ 7 */
37 -public class PrivateChatActivity extends AppCompatActivity implements View.OnClickListener {  
38 - 8 +public class PrivateChatActivity {
  9 +/*
39 10
40 private static final String TAG = "PrivateChatActivity"; 11 private static final String TAG = "PrivateChatActivity";
41 - private ListView chatListView; 12 + private RecyclerView chatListView;
42 private EditText messageContent; 13 private EditText messageContent;
43 private Button sendMessageBtn; 14 private Button sendMessageBtn;
44 private ChatListAdapter chatListAdapter; 15 private ChatListAdapter chatListAdapter;
45 - private ArrayList<ChatRoomActivity.CNMessageInfo> messageList = new ArrayList<>(); 16 + private ArrayList<Object> messageList = new ArrayList<>();
46 private CNMessage cnMessage; 17 private CNMessage cnMessage;
47 private LinearLayout linearLayoutUseID; 18 private LinearLayout linearLayoutUseID;
48 private EditText user_id_edit; 19 private EditText user_id_edit;
@@ -59,6 +30,8 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli @@ -59,6 +30,8 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli
59 private LinearLayout agree_reject_lin; 30 private LinearLayout agree_reject_lin;
60 boolean isCanSendMeaasge = false; 31 boolean isCanSendMeaasge = false;
61 private Button vistor_btn; 32 private Button vistor_btn;
  33 + private ChatRoomAdpter chatRoomAdpter;
  34 +
62 35
63 @Override 36 @Override
64 protected void onCreate(Bundle savedInstanceState) { 37 protected void onCreate(Bundle savedInstanceState) {
@@ -72,7 +45,7 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli @@ -72,7 +45,7 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli
72 45
73 private void initView() { 46 private void initView() {
74 opposite_name_edit = (EditText) findViewById(R.id.opposite_name_edit); 47 opposite_name_edit = (EditText) findViewById(R.id.opposite_name_edit);
75 - chatListView = (ListView) findViewById(R.id.private_list_view); 48 + chatListView = (RecyclerView) findViewById(R.id.private_list_view);
76 49
77 messageContent = (EditText) findViewById(R.id.message_content); 50 messageContent = (EditText) findViewById(R.id.message_content);
78 sendMessageBtn = (Button) findViewById(R.id.send_message); 51 sendMessageBtn = (Button) findViewById(R.id.send_message);
@@ -92,8 +65,9 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli @@ -92,8 +65,9 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli
92 agree_reject_lin = (LinearLayout) findViewById(R.id.agree_reject_lin); 65 agree_reject_lin = (LinearLayout) findViewById(R.id.agree_reject_lin);
93 vistor_btn = (Button) findViewById(R.id.vistor_Btn); 66 vistor_btn = (Button) findViewById(R.id.vistor_Btn);
94 vistor_btn.setOnClickListener(this); 67 vistor_btn.setOnClickListener(this);
95 - chatListAdapter = new ChatListAdapter(this);  
96 - chatListView.setAdapter(chatListAdapter); 68 + chatRoomAdpter = new ChatRoomAdpter(this);
  69 + chatListView.setLayoutManager(new LinearLayoutManager(this));
  70 + chatListView.setAdapter(chatRoomAdpter);
97 } 71 }
98 72
99 73
@@ -111,10 +85,9 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli @@ -111,10 +85,9 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli
111 85
112 } else if (sendInfo == 3) { 86 } else if (sendInfo == 3) {
113 Toast.makeText(this, "还没有邀请对方呦~", Toast.LENGTH_SHORT).show(); 87 Toast.makeText(this, "还没有邀请对方呦~", Toast.LENGTH_SHORT).show();
114 - }  
115 - else if (sendInfo == 5) { 88 + } else if (sendInfo == 5) {
116 Toast.makeText(this, "你已经拒绝对方不能发送消息", Toast.LENGTH_SHORT).show(); 89 Toast.makeText(this, "你已经拒绝对方不能发送消息", Toast.LENGTH_SHORT).show();
117 - }else { 90 + } else {
118 if (messageContent.getText().toString().isEmpty()) { 91 if (messageContent.getText().toString().isEmpty()) {
119 Toast.makeText(this, "不能发送空消息呦~", Toast.LENGTH_SHORT).show(); 92 Toast.makeText(this, "不能发送空消息呦~", Toast.LENGTH_SHORT).show();
120 } else { 93 } else {
@@ -139,7 +112,7 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli @@ -139,7 +112,7 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli
139 edit_layout.setVisibility(View.VISIBLE); 112 edit_layout.setVisibility(View.VISIBLE);
140 chatListView.setVisibility(View.VISIBLE); 113 chatListView.setVisibility(View.VISIBLE);
141 CNUserInfo cnName = new CNUserInfo(user_id_string, user_name_string, ""); 114 CNUserInfo cnName = new CNUserInfo(user_id_string, user_name_string, "");
142 - ChatUtil.login(cnName,connectListener); 115 + ChatUtil.login(cnName, connectListener);
143 116
144 } 117 }
145 118
@@ -192,19 +165,19 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli @@ -192,19 +165,19 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli
192 }; 165 };
193 166
194 167
195 - /** 168 + *//**
196 * 发送消息监听 169 * 发送消息监听
197 - */ 170 + *//*
198 171
199 - private IChat.OnSendMessageListener sendMessageListener = new IChat.OnSendMessageListener() { 172 + private IChat.OnSendMessageListener sendMessageListener = new IChat.OnSendMessageListener() {
200 @Override 173 @Override
201 public void onAttached(Object o) { 174 public void onAttached(Object o) {
202 175
203 } 176 }
204 177
205 @Override 178 @Override
206 - public void onSuccess(Object o) throws JSONException {  
207 - final CNMessage cnMessage = (CNMessage) o; 179 + public void onSuccess(final Object o) throws JSONException {
  180 +
208 181
209 if (View.VISIBLE == vistor_btn.getVisibility()) { 182 if (View.VISIBLE == vistor_btn.getVisibility()) {
210 vistor_btn.setVisibility(View.GONE); 183 vistor_btn.setVisibility(View.GONE);
@@ -213,28 +186,31 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli @@ -213,28 +186,31 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli
213 @Override 186 @Override
214 public void run() { 187 public void run() {
215 JSONObject jsonObject = null; 188 JSONObject jsonObject = null;
216 - try {  
217 - jsonObject = new JSONObject(cnMessage.getContent().toString());  
218 - String type = (String) jsonObject.get("type");  
219 - String message = (String) jsonObject.get("message");  
220 - Toast.makeText(PrivateChatActivity.this, "发送消息成功", Toast.LENGTH_SHORT).show();  
221 - if ("3".equals(type) && message.equals("你好我们可以进行私聊吗")) {  
222 - sendInfo = 2;  
223 - Toast.makeText(PrivateChatActivity.this, "申请已发送等待对方验证", Toast.LENGTH_SHORT).show();  
224 - } else if ("3".equals(type) && message.equals("拒绝")) {  
225 - sendInfo=5;  
226 - } else if ("3".equals(type) && message.equals("同意")) {  
227 - sendInfo=1;  
228 - } else if ("4".equals(type)) {  
229 - messageList.add(new ChatRoomActivity.CNMessageInfo(cnMessage, true));  
230 - chatListAdapter.updateItems(messageList);  
231 - chatListAdapter.notifyDataSetChanged();  
232 - }  
233 - } catch (JSONException e) { 189 + if (o instanceof CNMessage) {
  190 + final CNMessage cnMessage = (CNMessage) o;
  191 + try {
  192 + jsonObject = new JSONObject(cnMessage.getContent().toString());
  193 + String type = (String) jsonObject.get("type");
  194 + String message = (String) jsonObject.get("message");
  195 + Toast.makeText(PrivateChatActivity.this, "发送消息成功", Toast.LENGTH_SHORT).show();
  196 + if ("3".equals(type) && message.equals("你好我们可以进行私聊吗")) {
  197 + sendInfo = 2;
  198 + Toast.makeText(PrivateChatActivity.this, "申请已发送等待对方验证", Toast.LENGTH_SHORT).show();
  199 + } else if ("3".equals(type) && message.equals("拒绝")) {
  200 + sendInfo = 5;
  201 + } else if ("3".equals(type) && message.equals("同意")) {
  202 + sendInfo = 1;
  203 + } else if ("4".equals(type)) {
  204 + messageList.add(new StringMessage(MessageType.stringMessage, cnMessage, true));
  205 + }
  206 + } catch (JSONException e) {
  207 +
234 208
  209 + }
235 210
236 } 211 }
237 212
  213 +
238 } 214 }
239 }); 215 });
240 } 216 }
@@ -246,7 +222,6 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli @@ -246,7 +222,6 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli
246 }; 222 };
247 223
248 224
249 -  
250 //连接状态监听 225 //连接状态监听
251 private IChat.OnConnectStatusListener connectStatusListener = new IChat.OnConnectStatusListener() { 226 private IChat.OnConnectStatusListener connectStatusListener = new IChat.OnConnectStatusListener() {
252 @Override 227 @Override
@@ -257,7 +232,7 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli @@ -257,7 +232,7 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli
257 } 232 }
258 }; 233 };
259 //接收消息监听 234 //接收消息监听
260 - private IChat.OnReceiveMessageListener receiveMessageListener = new IChat.OnReceiveMessageListener() { 235 + private IChat.OnReceiveMessageListener receiveMessageListener = new IChat.OnReceiveMessageListener() {
261 @Override 236 @Override
262 public void processMessage(Object o) { 237 public void processMessage(Object o) {
263 final CNMessage cnMessage = (CNMessage) o; 238 final CNMessage cnMessage = (CNMessage) o;
@@ -278,48 +253,8 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli @@ -278,48 +253,8 @@ public class PrivateChatActivity extends AppCompatActivity implements View.OnCli
278 sendInfo = 4; 253 sendInfo = 4;
279 } else if ("4".equals(type)) { 254 } else if ("4".equals(type)) {
280 Log.v(TAG, cnMessage.getContent().toString()); 255 Log.v(TAG, cnMessage.getContent().toString());
281 - messageList.add(new ChatRoomActivity.CNMessageInfo(cnMessage, false));  
282 - chatListAdapter.updateItems(messageList);  
283 - chatListAdapter.notifyDataSetChanged();  
284 - } 256 + messageList.add(new StringMessage(MessageType.stringMessage, cnMessage, false));
285 257
286 - } catch (JSONException e) {  
287 - e.printStackTrace();  
288 - }  
289 -  
290 -  
291 - }  
292 - });  
293 -  
294 - }  
295 - };  
296 -  
297 -  
298 - /* private IChat.OnReceiveMessageListener receiveMessageListener = new IChat.OnReceiveMessageListener() {  
299 - @Override  
300 - public void processMessage(final CNMessage cnMessage) {  
301 -  
302 -  
303 - mHandler.post(new Runnable() {  
304 - @Override  
305 - public void run() {  
306 - Log.v("cnMessage", cnMessage.getTargetId() + "," + cnMessage.getUserInfo().getUserId());  
307 - JSONObject jsonObject = null;  
308 - try {  
309 - jsonObject = new JSONObject(cnMessage.getContent().toString());  
310 - String type = (String) jsonObject.get("type");  
311 - if ("3".equals(type) && "你好我们可以进行私聊吗".equals(jsonObject.get("message"))) {  
312 - vistor_btn.setVisibility(View.GONE);  
313 - agree_reject_lin.setVisibility(View.VISIBLE);  
314 - } else if ("3".equals(type) && "同意".equals(jsonObject.get("message"))) {  
315 - sendInfo = 1;  
316 - } else if ("3".equals(type) && "拒绝".equals(jsonObject.get("message"))) {  
317 - sendInfo = 4;  
318 - } else if ("4".equals(type)) {  
319 - Log.v(TAG, cnMessage.getContent().toString());  
320 - messageList.add(new ChatRoomActivity.CNMessageInfo(cnMessage, false));  
321 - chatListAdapter.updateItems(messageList);  
322 - chatListAdapter.notifyDataSetChanged();  
323 } 258 }
324 259
325 } catch (JSONException e) { 260 } catch (JSONException e) {
app/src/main/java/com/cnlive/im/ui/UserLoginActivity.java
@@ -50,7 +50,7 @@ public class UserLoginActivity extends AppCompatActivity implements View.OnClick @@ -50,7 +50,7 @@ public class UserLoginActivity extends AppCompatActivity implements View.OnClick
50 doIntentChatRoom(ChatRoomActivity.class); 50 doIntentChatRoom(ChatRoomActivity.class);
51 break; 51 break;
52 case R.id.private_chat: 52 case R.id.private_chat:
53 - doIntentChatRoom(PrivateChatActivity.class); 53 + // doIntentChatRoom(PrivateChatActivity.class);
54 54
55 break; 55 break;
56 } 56 }
app/src/main/java/com/cnlive/im/util/MediaRecorderUtil.java 0 → 100644
  1 +package com.cnlive.im.util;
  2 +
  3 +import android.content.Context;
  4 +import android.media.MediaPlayer;
  5 +import android.media.MediaRecorder;
  6 +import android.net.Uri;
  7 +import android.os.Environment;
  8 +
  9 +import java.io.File;
  10 +import java.io.IOException;
  11 +
  12 +/**
  13 + * @author 陈硕
  14 + * @time 2017/7/12 11:54
  15 + * @desc ${TODD}
  16 + */
  17 +public class MediaRecorderUtil {
  18 +
  19 + private String filePath;
  20 + private String saveFile;
  21 + private MediaRecorder mediaRecorder;
  22 +
  23 +
  24 + private void createRecorderFile() {
  25 + String absolutePath = Environment.getExternalStorageDirectory().getAbsolutePath();
  26 + filePath = absolutePath + "/recorder";
  27 + File file = new File(filePath);
  28 + if (!file.exists()) {
  29 + file.mkdir();
  30 + }
  31 + }
  32 +
  33 + public String getRecorderFile() {
  34 + return saveFile;
  35 + }
  36 +
  37 +
  38 + public void releaseRecord() {
  39 + if (mediaRecorder != null) {
  40 + mediaRecorder.release();//释放资源
  41 + mediaRecorder = null;
  42 + }
  43 +
  44 + }
  45 +
  46 +
  47 + public void record() {
  48 +
  49 + mediaRecorder = new MediaRecorder();
  50 + mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  51 +
  52 + mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  53 +
  54 + mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
  55 +
  56 + createRecorderFile();//创建保存录音的文件夹
  57 + saveFile = "sdcard/recorder" + "/" + "cnLive" + ".AAC";
  58 + mediaRecorder.setOutputFile(saveFile);
  59 +
  60 +
  61 + try {
  62 + mediaRecorder.prepare();
  63 + mediaRecorder.start();
  64 + } catch (IllegalStateException e) {
  65 + e.printStackTrace();
  66 + } catch (IOException e) {
  67 + e.printStackTrace();
  68 + }
  69 +
  70 + }
  71 +
  72 +
  73 + public void plaVoice(Uri uri, Context context) {
  74 + MediaPlayer mediaPlayer = new MediaPlayer();
  75 +
  76 + try {
  77 + mediaPlayer.setDataSource(context, uri);
  78 + mediaPlayer.prepare();
  79 + } catch (IOException e) {
  80 + e.printStackTrace();
  81 + }
  82 + mediaPlayer.start();
  83 +
  84 + }
  85 +
  86 +
  87 +}
0 \ No newline at end of file 88 \ No newline at end of file
app/src/main/java/com/cnlive/im/util/MessageType.java 0 → 100644
  1 +package com.cnlive.im.util;
  2 +
  3 +/**
  4 + * @author 陈硕
  5 + * @time 2017/7/14 11:40
  6 + * @desc ${TODD}
  7 + */
  8 +public class MessageType {
  9 + public static final String stringMessage = "1";
  10 + public static final String imaMessage = "2";
  11 + public static final String voiceMessage = "3";
  12 +}
app/src/main/res/drawable-hdpi/voice_msg_left.png 0 → 100644

1.2 KB

app/src/main/res/drawable-hdpi/voice_msg_right.9.png 0 → 100644

1.19 KB

app/src/main/res/layout/activity_groupchat.xml
@@ -8,6 +8,9 @@ @@ -8,6 +8,9 @@
8 android:id="@+id/re_chat" 8 android:id="@+id/re_chat"
9 android:layout_width="match_parent" 9 android:layout_width="match_parent"
10 android:layout_height="match_parent" 10 android:layout_height="match_parent"
  11 + android:layout_alignParentLeft="true"
  12 + android:layout_alignParentStart="true"
  13 + android:layout_alignParentTop="true"
11 android:visibility="visible"> 14 android:visibility="visible">
12 15
13 <LinearLayout 16 <LinearLayout
@@ -24,16 +27,14 @@ @@ -24,16 +27,14 @@
24 android:layout_height="match_parent" 27 android:layout_height="match_parent"
25 android:orientation="vertical"> 28 android:orientation="vertical">
26 29
27 -  
28 - <ListView 30 + <android.support.v7.widget.RecyclerView
29 android:id="@+id/chat_list_viewOne" 31 android:id="@+id/chat_list_viewOne"
30 - android:layout_width="match_parent"  
31 - android:layout_height="150dp" 32 + android:layout_width="fill_parent"
  33 + android:layout_height="170dp"
32 android:layout_above="@+id/edit_layout" 34 android:layout_above="@+id/edit_layout"
33 - android:layout_alignParentTop="true"  
34 android:divider="@null" 35 android:divider="@null"
35 - android:scrollbars="none"  
36 - android:transcriptMode="alwaysScroll"/> 36 + android:fastScrollEnabled="true"
  37 + android:scrollbars="none" />
37 </LinearLayout> 38 </LinearLayout>
38 </LinearLayout> 39 </LinearLayout>
39 40
@@ -51,6 +52,7 @@ @@ -51,6 +52,7 @@
51 android:layout_gravity="center" 52 android:layout_gravity="center"
52 android:layout_weight="0.7" /> 53 android:layout_weight="0.7" />
53 54
  55 +
54 <Button 56 <Button
55 android:id="@+id/send_messageOne" 57 android:id="@+id/send_messageOne"
56 android:layout_width="0dp" 58 android:layout_width="0dp"
@@ -59,7 +61,7 @@ @@ -59,7 +61,7 @@
59 android:layout_weight="0.2" 61 android:layout_weight="0.2"
60 android:text="发送" /> 62 android:text="发送" />
61 63
62 - </LinearLayout> 64 + </LinearLayout>
63 65
64 <LinearLayout 66 <LinearLayout
65 android:layout_width="match_parent" 67 android:layout_width="match_parent"
@@ -79,32 +81,27 @@ @@ -79,32 +81,27 @@
79 android:text="加入聊天室" /> 81 android:text="加入聊天室" />
80 82
81 <Button 83 <Button
82 - android:id="@+id/chat_info_mation" 84 + android:id="@+id/ima_send"
83 android:layout_width="wrap_content" 85 android:layout_width="wrap_content"
84 android:layout_height="wrap_content" 86 android:layout_height="wrap_content"
85 - android:layout_weight="1"  
86 - android:text="获取聊天室信息" /> 87 + android:text="图片" />
  88 +
87 <Button 89 <Button
88 - android:id="@+id/exit_chat1" 90 + android:id="@+id/voice_send"
89 android:layout_width="wrap_content" 91 android:layout_width="wrap_content"
90 android:layout_height="wrap_content" 92 android:layout_height="wrap_content"
91 - android:text="退出聊天室" />  
92 -  
93 - </LinearLayout>  
94 -  
95 -  
96 -  
97 -  
98 - 93 + android:text="语音" />
99 94
100 95
  96 + <Button
  97 + android:id="@+id/exit_chat1"
  98 + android:layout_width="wrap_content"
  99 + android:layout_height="wrap_content"
  100 + android:text="退出" />
101 101
  102 + </LinearLayout>
102 103
103 </LinearLayout> 104 </LinearLayout>
104 </RelativeLayout> 105 </RelativeLayout>
105 106
106 -  
107 -  
108 -  
109 -  
110 </RelativeLayout> 107 </RelativeLayout>
app/src/main/res/layout/activity_image.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="match_parent"
  4 + android:layout_height="match_parent"
  5 + android:orientation="vertical">
  6 +
  7 + <Button
  8 + android:id="@+id/image_send_btn"
  9 + android:layout_width="match_parent"
  10 + android:layout_height="wrap_content"
  11 + android:text="发送图片" />
  12 +
  13 + <Button
  14 + android:id="@+id/voice_btn"
  15 + android:layout_width="wrap_content"
  16 + android:layout_height="wrap_content"
  17 + android:text="音频" />
  18 +
  19 +
  20 +</LinearLayout>
0 \ No newline at end of file 21 \ No newline at end of file
app/src/main/res/layout/activity_login.xml
@@ -33,4 +33,6 @@ @@ -33,4 +33,6 @@
33 android:text="退出" /> 33 android:text="退出" />
34 34
35 </LinearLayout> 35 </LinearLayout>
  36 +
  37 +
36 </RelativeLayout> 38 </RelativeLayout>
37 \ No newline at end of file 39 \ No newline at end of file
app/src/main/res/layout/activity_private_chat.xml
@@ -10,7 +10,7 @@ @@ -10,7 +10,7 @@
10 android:orientation="vertical"> 10 android:orientation="vertical">
11 11
12 12
13 - <ListView 13 + <android.support.v7.widget.RecyclerView
14 android:id="@+id/private_list_view" 14 android:id="@+id/private_list_view"
15 android:layout_width="match_parent" 15 android:layout_width="match_parent"
16 android:layout_height="300dp" 16 android:layout_height="300dp"
app/src/main/res/layout/imag_layout_item_oppsite.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="match_parent"
  4 + android:layout_height="match_parent"
  5 + android:orientation="vertical">
  6 +
  7 +
  8 + <RelativeLayout
  9 + android:layout_width="wrap_content"
  10 + android:layout_height="wrap_content">
  11 +
  12 + <TextView
  13 + android:id="@+id/img_user_name"
  14 + android:layout_width="wrap_content"
  15 + android:layout_height="wrap_content"
  16 + android:layout_alignParentLeft="true"
  17 + android:layout_centerVertical="true"
  18 + android:text="游客" />
  19 +
  20 + <ImageView
  21 + android:id="@+id/img_content"
  22 + android:layout_width="wrap_content"
  23 + android:layout_height="wrap_content"
  24 + android:layout_marginLeft="5dp"
  25 + android:layout_toRightOf="@+id/img_user_name"
  26 + android:src="@drawable/vod_detail_good_on" />
  27 +
  28 + </RelativeLayout>
  29 +
  30 +</LinearLayout>
0 \ No newline at end of file 31 \ No newline at end of file
app/src/main/res/layout/imag_layout_item_user.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="match_parent"
  4 + android:layout_height="match_parent"
  5 + android:orientation="vertical">
  6 +
  7 + <RelativeLayout
  8 + android:layout_width="wrap_content"
  9 + android:layout_height="wrap_content">
  10 +
  11 + <TextView
  12 + android:layout_centerVertical="true"
  13 + android:id="@+id/img_user_name"
  14 + android:layout_width="wrap_content"
  15 + android:layout_height="wrap_content"
  16 + android:layout_alignParentRight="true"
  17 + android:text="游客" />
  18 +
  19 + <ImageView
  20 + android:layout_toLeftOf="@+id/img_user_name"
  21 + android:layout_marginRight="5dp"
  22 + android:id="@+id/img_content"
  23 + android:layout_width="wrap_content"
  24 + android:layout_height="wrap_content"
  25 + android:src="@drawable/vod_detail_good_on"/>
  26 +
  27 + </RelativeLayout>
  28 +
  29 +</LinearLayout>
0 \ No newline at end of file 30 \ No newline at end of file
app/src/main/res/layout/msg_text_view.xml
@@ -15,6 +15,7 @@ @@ -15,6 +15,7 @@
15 android:layout_height="wrap_content" 15 android:layout_height="wrap_content"
16 android:gravity="center_vertical" 16 android:gravity="center_vertical"
17 android:textColor="#d61d0c" 17 android:textColor="#d61d0c"
  18 + android:text="ddd"
18 android:textSize="14sp" /> 19 android:textSize="14sp" />
19 20
20 <TextView 21 <TextView
@@ -23,6 +24,7 @@ @@ -23,6 +24,7 @@
23 android:layout_height="wrap_content" 24 android:layout_height="wrap_content"
24 android:layout_toRightOf="@id/user_name" 25 android:layout_toRightOf="@id/user_name"
25 android:textColor="@android:color/black" 26 android:textColor="@android:color/black"
  27 + android:text="vfgfgf"
26 android:textSize="15sp" /> 28 android:textSize="15sp" />
27 </RelativeLayout> 29 </RelativeLayout>
28 30
app/src/main/res/layout/string_layout_item_oppsite.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="wrap_content"
  4 + android:layout_height="wrap_content"
  5 + android:orientation="vertical">
  6 +
  7 + <RelativeLayout
  8 + android:id="@+id/re_chat_room"
  9 + android:layout_width="wrap_content"
  10 + android:layout_height="wrap_content">
  11 +
  12 + <TextView
  13 + android:id="@+id/user_name"
  14 + android:layout_width="wrap_content"
  15 + android:layout_height="wrap_content"
  16 + android:gravity="center_vertical"
  17 + android:text="ddd"
  18 + android:textColor="#d61d0c"
  19 + android:textSize="14sp" />
  20 +
  21 + <TextView
  22 + android:id="@+id/msg_text"
  23 + android:layout_width="wrap_content"
  24 + android:layout_height="wrap_content"
  25 + android:layout_toRightOf="@id/user_name"
  26 + android:text="vfgfgf"
  27 + android:textColor="@android:color/black"
  28 + android:textSize="15sp" />
  29 + </RelativeLayout>
  30 +
  31 +</RelativeLayout>
0 \ No newline at end of file 32 \ No newline at end of file
app/src/main/res/layout/string_layout_item_user.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="wrap_content"
  4 + android:layout_height="wrap_content">
  5 +
  6 + <RelativeLayout
  7 + android:id="@+id/re_chat_room"
  8 + android:layout_width="wrap_content"
  9 + android:layout_height="wrap_content">
  10 +
  11 + <TextView
  12 + android:id="@+id/user_name"
  13 + android:layout_width="wrap_content"
  14 + android:layout_height="wrap_content"
  15 + android:layout_alignParentRight="true"
  16 + android:gravity="center_vertical"
  17 + android:text="ddd"
  18 + android:textColor="#d61d0c"
  19 + android:textSize="14sp" />
  20 +
  21 + <TextView
  22 + android:id="@+id/msg_text"
  23 + android:layout_width="wrap_content"
  24 + android:layout_height="wrap_content"
  25 + android:layout_toLeftOf="@id/user_name"
  26 + android:text="vfgfgf"
  27 + android:textColor="@android:color/black"
  28 + android:textSize="15sp" />
  29 + </RelativeLayout>
  30 +
  31 +
  32 +</RelativeLayout>
0 \ No newline at end of file 33 \ No newline at end of file
app/src/main/res/layout/voice_layout_item_oppsite.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="wrap_content"
  4 + android:layout_height="wrap_content">
  5 +
  6 +
  7 + <RelativeLayout
  8 + android:layout_width="wrap_content"
  9 + android:layout_height="wrap_content">
  10 +
  11 + <TextView
  12 + android:id="@+id/voice_user_name"
  13 + android:layout_width="wrap_content"
  14 + android:layout_height="wrap_content"
  15 + android:layout_alignParentLeft="true"
  16 + android:layout_centerVertical="true"
  17 + android:text="游客" />
  18 +
  19 + <ImageView
  20 + android:id="@+id/voice_content"
  21 + android:layout_width="wrap_content"
  22 + android:layout_height="wrap_content"
  23 + android:layout_toRightOf="@+id/voice_user_name"
  24 + android:src="@drawable/voice_msg_left" />
  25 +
  26 +
  27 + </RelativeLayout>
  28 +
  29 +</RelativeLayout>
0 \ No newline at end of file 30 \ No newline at end of file
app/src/main/res/layout/voice_layout_item_user.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:layout_width="wrap_content"
  4 + android:layout_height="wrap_content">
  5 +
  6 + <RelativeLayout
  7 + android:layout_width="wrap_content"
  8 + android:layout_height="wrap_content">
  9 +
  10 + <TextView
  11 + android:id="@+id/voice_user_name"
  12 + android:layout_width="wrap_content"
  13 + android:layout_height="wrap_content"
  14 + android:layout_alignParentRight="true"
  15 + android:layout_centerVertical="true"
  16 + android:text="游客" />
  17 +
  18 + <ImageView
  19 + android:id="@+id/voice_content"
  20 + android:layout_width="wrap_content"
  21 + android:layout_height="wrap_content"
  22 + android:layout_toLeftOf="@+id/voice_user_name"
  23 + android:src="@drawable/voice_msg_right" />
  24 +
  25 + </RelativeLayout>
  26 +
  27 +</RelativeLayout>
0 \ No newline at end of file 28 \ No newline at end of file