Skip to content

Commit 5a86c5f

Browse files
authored
Merge pull request #153 from jinfengf/develop
Develop
2 parents 671d65b + 51e0a15 commit 5a86c5f

62 files changed

Lines changed: 1033 additions & 1876 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

chatapp/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,5 +72,6 @@ dependencies {
7272
implementation 'cn.jiguang.sdk:jmessage:2.9.0' // 此处以J
7373
implementation 'cn.jiguang.sdk:jcore:2.0.0'
7474
implementation 'org.greenrobot:eventbus:3.1.1'
75-
implementation 'in.srain.cube:ptr-load-more:1.0.6'
75+
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-26'
76+
implementation 'com.github.mtotschnig:StickyListHeaders:2.7.1'
7677
}

chatapp/src/main/java/jiguang/chat/activity/BaseActivity.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,12 @@ public void initTitle(boolean returnBtn, boolean titleLeftDesc, String titleLeft
6969
mReturn_btn.setOnClickListener(new View.OnClickListener() {
7070
@Override
7171
public void onClick(View v) {
72+
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
73+
if (imm.isActive() && getCurrentFocus() != null) {
74+
if (getCurrentFocus().getWindowToken() != null) {
75+
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
76+
}
77+
}
7278
finish();
7379
}
7480
});

chatapp/src/main/java/jiguang/chat/activity/ChatActivity.java

Lines changed: 80 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535

3636
import java.io.File;
3737
import java.lang.ref.WeakReference;
38+
import java.lang.reflect.Constructor;
39+
import java.lang.reflect.Field;
3840
import java.util.ArrayList;
3941
import java.util.List;
4042

@@ -43,6 +45,7 @@
4345
import cn.jpush.im.android.api.ChatRoomManager;
4446
import cn.jpush.im.android.api.JMessageClient;
4547
import cn.jpush.im.android.api.callback.GetGroupInfoCallback;
48+
import cn.jpush.im.android.api.callback.GetUserInfoListCallback;
4649
import cn.jpush.im.android.api.callback.RequestCallback;
4750
import cn.jpush.im.android.api.content.EventNotificationContent;
4851
import cn.jpush.im.android.api.content.FileContent;
@@ -53,6 +56,7 @@
5356
import cn.jpush.im.android.api.enums.ConversationType;
5457
import cn.jpush.im.android.api.enums.MessageDirect;
5558
import cn.jpush.im.android.api.event.ChatRoomMessageEvent;
59+
import cn.jpush.im.android.api.event.ChatRoomNotificationEvent;
5660
import cn.jpush.im.android.api.event.CommandNotificationEvent;
5761
import cn.jpush.im.android.api.event.MessageEvent;
5862
import cn.jpush.im.android.api.event.MessageReceiptStatusChangeEvent;
@@ -526,6 +530,9 @@ public void onBackPressed() {
526530
private void returnBtn() {
527531
mConv.resetUnreadCount();
528532
dismissSoftInput();
533+
if (mChatAdapter != null) {
534+
mChatAdapter.stopMediaPlayer();
535+
}
529536
JMessageClient.exitConversation();
530537
//发送保存为草稿事件到会话列表
531538
EventBus.getDefault().post(new Event.Builder().setType(EventType.draft)
@@ -673,16 +680,18 @@ protected void onPause() {
673680
@Override
674681
protected void onResume() {
675682
String targetId = getIntent().getStringExtra(TARGET_ID);
676-
if (!mIsSingle) {
683+
if (mIsSingle) {
684+
if (null != targetId) {
685+
String appKey = getIntent().getStringExtra(TARGET_APP_KEY);
686+
JMessageClient.enterSingleConversation(targetId, appKey);
687+
}
688+
} else if (!isChatRoom) {
677689
long groupId = getIntent().getLongExtra(GROUP_ID, 0);
678690
if (groupId != 0) {
679691
JGApplication.isAtMe.put(groupId, false);
680692
JGApplication.isAtall.put(groupId, false);
681693
JMessageClient.enterGroupConversation(groupId);
682694
}
683-
} else if (null != targetId) {
684-
String appKey = getIntent().getStringExtra(TARGET_APP_KEY);
685-
JMessageClient.enterSingleConversation(targetId, appKey);
686695
}
687696

688697
//历史消息中删除后返回到聊天界面刷新界面
@@ -695,7 +704,9 @@ protected void onResume() {
695704
mChatAdapter.notifyDataSetChanged();
696705
//发送名片返回聊天界面刷新信息
697706
if (SharePreferenceManager.getIsOpen()) {
698-
initData();
707+
if (!isChatRoom) {
708+
initData();
709+
}
699710
SharePreferenceManager.setIsOpen(false);
700711
}
701712
super.onResume();
@@ -730,6 +741,49 @@ public void onEventMainThread(ChatRoomMessageEvent event) {
730741
mChatAdapter.addMsgListToList(messages);
731742
}
732743

744+
public void onEventMainThread(ChatRoomNotificationEvent event) {
745+
try {
746+
Constructor constructor = EventNotificationContent.class.getDeclaredConstructor();
747+
constructor.setAccessible(true);
748+
List<Message> messages = new ArrayList<>();
749+
switch (event.getType()) {
750+
case add_chatroom_admin:
751+
case del_chatroom_admin:
752+
event.getTargetUserInfoList(new GetUserInfoListCallback() {
753+
@Override
754+
public void gotResult(int i, String s, List<UserInfo> list) {
755+
if (i == 0) {
756+
for (UserInfo userInfo : list) {
757+
try {
758+
EventNotificationContent content = (EventNotificationContent) constructor.newInstance();
759+
Field field = content.getClass().getSuperclass().getDeclaredField("contentType");
760+
field.setAccessible(true);
761+
field.set(content, ContentType.eventNotification);
762+
String user = userInfo.getUserID() == JMessageClient.getMyInfo().getUserID()
763+
? "你" : TextUtils.isEmpty(userInfo.getNickname()) ? userInfo.getUserName() : userInfo.getNickname();
764+
String result = event.getType() == ChatRoomNotificationEvent.Type.add_chatroom_admin ? "被设置成管理员" : "被取消管理员";
765+
content.setStringExtra("msg", user + result);
766+
if (mConv != null) {
767+
messages.add(mConv.createSendMessage(content));
768+
}
769+
} catch (Exception e) {
770+
e.printStackTrace();
771+
}
772+
}
773+
if (messages.size() > 0) {
774+
mChatAdapter.addMsgListToList(messages);
775+
}
776+
}
777+
}
778+
});
779+
break;
780+
default:
781+
}
782+
} catch (Exception e) {
783+
e.printStackTrace();
784+
}
785+
}
786+
733787
public void onEvent(MessageEvent event) {
734788
final Message message = event.getMessage();
735789

@@ -873,6 +927,9 @@ private void refreshGroupNum() {
873927

874928
@Override
875929
public void onContentLongClick(final int position, View view) {
930+
if (isChatRoom) {
931+
return;
932+
}
876933
final Message msg = mChatAdapter.getMessage(position);
877934

878935
if (msg == null) {
@@ -1147,10 +1204,10 @@ public void onEventMainThread(ImageEvent event) {
11471204
break;
11481205
case JGApplication.BUSINESS_CARD:
11491206
intent = new Intent(mContext, FriendListActivity.class);
1150-
intent.putExtra("isSingle", mIsSingle);
1151-
intent.putExtra("userId", mTargetId);
1152-
intent.putExtra("groupId", mGroupId);
1153-
startActivity(intent);
1207+
intent.putExtra(JGApplication.CONV_TYPE, mConv.getType());
1208+
intent.putExtra(JGApplication.TARGET_ID, mTargetId);
1209+
intent.putExtra(JGApplication.TARGET_APP_KEY, mTargetAppKey);;
1210+
startActivityForResult(intent, JGApplication.REQUEST_CODE_FRIEND_LIST);
11541211
break;
11551212
case JGApplication.TACK_VIDEO:
11561213
case JGApplication.TACK_VOICE:
@@ -1173,6 +1230,20 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
11731230
case RequestCode.PICK_IMAGE://4
11741231
onPickImageActivityResult(requestCode, data);
11751232
break;
1233+
case JGApplication.REQUEST_CODE_FRIEND_LIST:
1234+
// 发送名片成功后,聊天室需要添加消息
1235+
if (resultCode == RESULT_OK && isChatRoom) {
1236+
String msgJson = data.getStringExtra(JGApplication.MSG_JSON);
1237+
if (msgJson != null) {
1238+
Message msg = Message.fromJson(msgJson);
1239+
if (msg != null) {
1240+
mChatAdapter.addMsgToList(msg);
1241+
mChatAdapter.notifyDataSetChanged();
1242+
}
1243+
}
1244+
}
1245+
break;
1246+
11761247
}
11771248

11781249
switch (resultCode) {

chatapp/src/main/java/jiguang/chat/activity/ChatRoomInfoActivity.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ public void onClick(View v) {
9898
};
9999
exitDialog = DialogCreator.createBaseDialogWithTitle(ChatRoomInfoActivity.this, "确定退出聊天室", listener);
100100
exitDialog.show();
101+
break;
101102
default:
102103
break;
103104
}
@@ -129,6 +130,9 @@ private void initData() {
129130
mTvChatRoomDesc = (TextView) findViewById(R.id.tv_chatRoomDesc);
130131
mTvChatRoomOwner = (TextView) findViewById(R.id.tv_chatRoomOwner);
131132
mGvChatRoomKeeper = (NoScrollGridView) findViewById(R.id.grid_chatRommKeeper);
133+
mGvChatRoomKeeper.setClickable(false);
134+
mGvChatRoomKeeper.setPressed(false);
135+
mGvChatRoomKeeper.setEnabled(false);
132136
roomId = getIntent().getLongExtra("chatRoomId", 0);
133137
findViewById(R.id.ll_chat_room_name).setOnClickListener(this);
134138
findViewById(R.id.ll_chat_room_desc).setOnClickListener(this);

chatapp/src/main/java/jiguang/chat/activity/ChatRoomKeeperActivity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ public void gotResult(int i, String s, List<UserInfo> userInfos) {
8888
}
8989
mAdapter = new ChatRoomKeeperListAdapter(ChatRoomKeeperActivity.this, mShowKeeperList, roomID, isOwner);
9090
mLvKeeper.setAdapter(mAdapter);
91+
mLvKeeper.setOnItemClickListener(mAdapter);
9192
loadingDialog.dismiss();
9293
} else {
9394
loadingDialog.dismiss();

chatapp/src/main/java/jiguang/chat/activity/ChooseAtMemberActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import jiguang.chat.utils.keyboard.widget.EmoticonsEditText;
2424
import jiguang.chat.utils.pinyin.UserComparator;
2525
import jiguang.chat.utils.sidebar.SideBar;
26-
import jiguang.chat.view.listview.StickyListHeadersListView;
26+
import se.emilsjolander.stickylistheaders.StickyListHeadersListView;
2727

2828

2929
/**

chatapp/src/main/java/jiguang/chat/activity/CreateGroupActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import jiguang.chat.utils.keyboard.utils.EmoticonsKeyboardUtils;
3131
import jiguang.chat.utils.pinyin.PinyinComparator;
3232
import jiguang.chat.utils.sidebar.SideBar;
33-
import jiguang.chat.view.listview.StickyListHeadersListView;
33+
import se.emilsjolander.stickylistheaders.StickyListHeadersListView;
3434

3535

3636
/**

chatapp/src/main/java/jiguang/chat/activity/ForwardMsgActivity.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import cn.jpush.im.android.api.JMessageClient;
1717
import cn.jpush.im.android.api.content.TextContent;
18+
import cn.jpush.im.android.api.enums.ConversationType;
1819
import cn.jpush.im.android.api.model.Conversation;
1920
import cn.jpush.im.android.api.model.Message;
2021
import cn.jpush.im.android.api.options.MessageSendingOptions;
@@ -64,7 +65,7 @@ private void initView() {
6465
private void initData() {
6566
List<Conversation> conversationList = JMessageClient.getConversationList();
6667
for (Conversation conv : conversationList) {
67-
if (!conv.getTargetId().equals("feedback_Android")) {
68+
if (!conv.getTargetId().equals("feedback_Android") && conv.getType() != ConversationType.chatroom) {
6869
forwardList.add(conv);
6970
}
7071
}

chatapp/src/main/java/jiguang/chat/activity/FriendListActivity.java

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,22 @@
1717

1818
import cn.jpush.im.android.api.JMessageClient;
1919
import cn.jpush.im.android.api.content.TextContent;
20+
import cn.jpush.im.android.api.enums.ConversationType;
2021
import cn.jpush.im.android.api.model.Conversation;
2122
import cn.jpush.im.android.api.model.Message;
2223
import cn.jpush.im.android.api.options.MessageSendingOptions;
2324
import cn.jpush.im.api.BasicCallback;
2425
import jiguang.chat.R;
2526
import jiguang.chat.adapter.FriendListAdapter;
27+
import jiguang.chat.application.JGApplication;
2628
import jiguang.chat.database.FriendEntry;
2729
import jiguang.chat.database.UserEntry;
2830
import jiguang.chat.utils.DialogCreator;
2931
import jiguang.chat.utils.HandleResponseCode;
3032
import jiguang.chat.utils.SharePreferenceManager;
3133
import jiguang.chat.utils.pinyin.PinyinComparator;
3234
import jiguang.chat.utils.sidebar.SideBar;
33-
import jiguang.chat.view.listview.StickyListHeadersListView;
35+
import se.emilsjolander.stickylistheaders.StickyListHeadersListView;
3436

3537
/**
3638
* Created by ${chenyn} on 2017/9/21.
@@ -87,10 +89,26 @@ public void onClick(View v) {
8789
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
8890
Object itemAtPosition = parent.getItemAtPosition(position);
8991
FriendEntry friendEntry = (FriendEntry) itemAtPosition;
90-
if (getIntent().getBooleanExtra("isSingle", false)) {
91-
setBusinessCard(friendEntry, JMessageClient.getSingleConversation(getIntent().getStringExtra("userId")));
92-
} else {
93-
setBusinessCard(friendEntry, JMessageClient.getGroupConversation(getIntent().getLongExtra("groupId", 0)));
92+
ConversationType convType = (ConversationType) getIntent().getSerializableExtra(JGApplication.CONV_TYPE);
93+
String targetId = getIntent().getStringExtra(JGApplication.TARGET_ID);
94+
String targetAppKey = getIntent().getStringExtra(JGApplication.TARGET_APP_KEY);
95+
Conversation conv = null;
96+
if (convType != null) {
97+
switch (convType) {
98+
case single:
99+
conv = JMessageClient.getSingleConversation(targetId, targetAppKey);
100+
break;
101+
case group:
102+
conv = JMessageClient.getGroupConversation(Long.valueOf(targetId));
103+
break;
104+
case chatroom:
105+
conv = JMessageClient.getChatRoomConversation(Long.valueOf(targetId));
106+
break;
107+
default:
108+
}
109+
}
110+
if (conv != null) {
111+
setBusinessCard(friendEntry, conv);
94112
}
95113
}
96114
});
@@ -133,6 +151,9 @@ public void gotResult(int i, String s) {
133151
if (i == 0) {
134152
SharePreferenceManager.setIsOpen(true);
135153
Toast.makeText(FriendListActivity.this, "发送成功", Toast.LENGTH_SHORT).show();
154+
Intent intent = new Intent();
155+
intent.putExtra(JGApplication.MSG_JSON, textMessage.toJson());
156+
FriendListActivity.this.setResult(RESULT_OK, intent);
136157
finish();
137158
} else {
138159
HandleResponseCode.onHandle(FriendListActivity.this, i, false);

chatapp/src/main/java/jiguang/chat/activity/FriendRecommendActivity.java

Lines changed: 0 additions & 77 deletions
This file was deleted.

0 commit comments

Comments
 (0)