Commit 1d77a571893007ffde073e557eca2af9a2431351
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
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
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 |