|
@@ -0,0 +1,327 @@
|
|
|
+package com.sheishuo.app.impl;
|
|
|
+
|
|
|
+import android.app.Activity;
|
|
|
+import android.content.Context;
|
|
|
+import android.content.Intent;
|
|
|
+import android.os.Bundle;
|
|
|
+import android.util.Log;
|
|
|
+import android.view.Menu;
|
|
|
+import android.view.MenuInflater;
|
|
|
+import android.view.MenuItem;
|
|
|
+import android.view.View;
|
|
|
+import android.widget.TextView;
|
|
|
+import android.widget.Toast;
|
|
|
+
|
|
|
+import com.netease.nim.uikit.cache.FriendDataCache;
|
|
|
+import com.netease.nim.uikit.cache.SimpleCallback;
|
|
|
+import com.netease.nim.uikit.cache.TeamDataCache;
|
|
|
+import com.netease.nim.uikit.session.SessionCustomization;
|
|
|
+import com.netease.nim.uikit.session.activity.TeamMessageActivity;
|
|
|
+import com.netease.nim.uikit.session.constant.Extras;
|
|
|
+import com.netease.nim.uikit.session.fragment.MessageFragment;
|
|
|
+import com.netease.nim.uikit.session.helper.MessageListPanelHelper;
|
|
|
+import com.netease.nimlib.sdk.NIMClient;
|
|
|
+import com.netease.nimlib.sdk.msg.MsgService;
|
|
|
+import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
|
|
|
+import com.netease.nimlib.sdk.msg.model.IMMessage;
|
|
|
+import com.netease.nimlib.sdk.team.TeamService;
|
|
|
+import com.netease.nimlib.sdk.team.constant.TeamTypeEnum;
|
|
|
+import com.netease.nimlib.sdk.team.model.Team;
|
|
|
+import com.netease.nimlib.sdk.team.model.TeamMember;
|
|
|
+import com.sheishuo.app.R;
|
|
|
+import com.sheishuo.app.common.views.BaseToolbar;
|
|
|
+import com.sheishuo.app.session.search.SearchMessageActivity;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Created by KN on 2017/8/18.
|
|
|
+ */
|
|
|
+
|
|
|
+public class SheishuoTeamMessageActivity extends TeamMessageActivity {
|
|
|
+
|
|
|
+ private String TAG = this.getClass().getSimpleName();
|
|
|
+
|
|
|
+ private Context context = this;
|
|
|
+ private BaseToolbar toolbar;
|
|
|
+
|
|
|
+ private Toast toast;
|
|
|
+
|
|
|
+ // model
|
|
|
+ protected Team team;
|
|
|
+
|
|
|
+ protected View invalidTeamTipView;
|
|
|
+
|
|
|
+ protected TextView invalidTeamTipText;
|
|
|
+
|
|
|
+ protected SheishuoTeamMessageFragment fragment;
|
|
|
+
|
|
|
+ protected Class<? extends Activity> backToClass;
|
|
|
+
|
|
|
+ public static void start(Context context, String tid, SessionCustomization customization,
|
|
|
+ Class<? extends Activity> backToClass, IMMessage anchor) {
|
|
|
+ Intent intent = new Intent();
|
|
|
+ intent.putExtra(Extras.EXTRA_ACCOUNT, tid);
|
|
|
+ intent.putExtra(Extras.EXTRA_CUSTOMIZATION, customization);
|
|
|
+ intent.putExtra(Extras.EXTRA_BACK_TO_CLASS, backToClass);
|
|
|
+ if (anchor != null) {
|
|
|
+ intent.putExtra(Extras.EXTRA_ANCHOR, anchor);
|
|
|
+ }
|
|
|
+ intent.setClass(context, SheishuoTeamMessageActivity.class);
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
|
+
|
|
|
+ context.startActivity(intent);
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void findViews() {
|
|
|
+ invalidTeamTipView = findView(R.id.invalid_team_tip);
|
|
|
+ invalidTeamTipText = findView(R.id.invalid_team_text);
|
|
|
+ toolbar = findView(R.id.toolbar);
|
|
|
+ initToolbar();
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void initToolbar() {
|
|
|
+
|
|
|
+ toolbar.getTitleTV().setOnClickListener(new View.OnClickListener() {
|
|
|
+ @Override
|
|
|
+ public void onClick(View v) {
|
|
|
+ //群组资料
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ setSupportActionBar(toolbar);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onCreate(Bundle savedInstanceState) {
|
|
|
+ super.onCreate(savedInstanceState);
|
|
|
+
|
|
|
+ backToClass = (Class<? extends Activity>) getIntent().getSerializableExtra(Extras.EXTRA_BACK_TO_CLASS);
|
|
|
+ findViews();
|
|
|
+
|
|
|
+ registerTeamUpdateObserver(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void onDestroy() {
|
|
|
+ super.onDestroy();
|
|
|
+
|
|
|
+ registerTeamUpdateObserver(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void onResume() {
|
|
|
+ super.onResume();
|
|
|
+ requestTeamInfo();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean onCreateOptionsMenu(Menu menu) {
|
|
|
+ MenuInflater inflater = new MenuInflater(context);
|
|
|
+ inflater.inflate(R.menu.team_chat_menu, menu);
|
|
|
+ return super.onCreateOptionsMenu(menu);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean onOptionsItemSelected(MenuItem item) {
|
|
|
+ switch (item.getItemId()) {
|
|
|
+ case R.id.team_chat_menu_search:
|
|
|
+ //搜索聊天记录
|
|
|
+ SearchMessageActivity.start(context, team.getId(), SessionTypeEnum.Team);
|
|
|
+ break;
|
|
|
+ case R.id.team_chat_menu_clear_chat_history:
|
|
|
+ //清空聊天记录
|
|
|
+ if (team != null) {
|
|
|
+ NIMClient.getService(MsgService.class).clearChattingHistory(team.getId(), SessionTypeEnum.Team);
|
|
|
+ //通知消息更新
|
|
|
+ MessageListPanelHelper.getInstance().notifyClearMessages(team.getId());
|
|
|
+
|
|
|
+ showToast("清除消息成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return super.onOptionsItemSelected(item);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 请求群基本信息
|
|
|
+ */
|
|
|
+ protected void requestTeamInfo() {
|
|
|
+ // 请求群基本信息
|
|
|
+ Team t = NIMClient.getService(TeamService.class).queryTeamBlock(sessionId);
|
|
|
+ if (t != null) {
|
|
|
+ TeamDataCache.getInstance().addOrUpdateTeam(t);
|
|
|
+ updateTeamInfo(t);
|
|
|
+ } else {
|
|
|
+ TeamDataCache.getInstance().fetchTeamById(sessionId, new SimpleCallback<Team>() {
|
|
|
+ @Override
|
|
|
+ public void onResult(boolean success, Team result) {
|
|
|
+ if (success && result != null) {
|
|
|
+ updateTeamInfo(result);
|
|
|
+ } else {
|
|
|
+ onRequestTeamInfoFailed();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void onRequestTeamInfoFailed() {
|
|
|
+ Toast.makeText(SheishuoTeamMessageActivity.this, "获取聊天室信息失败!", Toast.LENGTH_SHORT).show();
|
|
|
+ finish();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新群信息
|
|
|
+ *
|
|
|
+ * @param d
|
|
|
+ */
|
|
|
+ protected void updateTeamInfo(final Team d) {
|
|
|
+ if (d == null) {
|
|
|
+ Log.e("Team", "is null");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ team = d;
|
|
|
+ fragment.setTeam(team);
|
|
|
+ toolbar.setTitle(team.getName() + "(" + team.getMemberCount() + "人)");
|
|
|
+
|
|
|
+ setTitle(team == null ? sessionId : team.getName() + "(" + team.getMemberCount() + "人)");
|
|
|
+
|
|
|
+ invalidTeamTipText.setText(team.getType() == TeamTypeEnum.Normal ? com.netease.nim.uikit.R.string.normal_team_invalid_tip : com.netease.nim.uikit.R.string.team_invalid_tip);
|
|
|
+ invalidTeamTipView.setVisibility(team.isMyTeam() ? View.GONE : View.VISIBLE);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 注册群信息更新监听
|
|
|
+ *
|
|
|
+ * @param register
|
|
|
+ */
|
|
|
+ protected void registerTeamUpdateObserver(boolean register) {
|
|
|
+ if (register) {
|
|
|
+ TeamDataCache.getInstance().registerTeamDataChangedObserver(teamDataChangedObserver);
|
|
|
+ TeamDataCache.getInstance().registerTeamMemberDataChangedObserver(teamMemberDataChangedObserver);
|
|
|
+ } else {
|
|
|
+ TeamDataCache.getInstance().unregisterTeamDataChangedObserver(teamDataChangedObserver);
|
|
|
+ TeamDataCache.getInstance().unregisterTeamMemberDataChangedObserver(teamMemberDataChangedObserver);
|
|
|
+ }
|
|
|
+ FriendDataCache.getInstance().registerFriendDataChangedObserver(friendDataChangedObserver, register);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 群资料变动通知和移除群的通知(包括自己退群和群被解散)
|
|
|
+ */
|
|
|
+ TeamDataCache.TeamDataChangedObserver teamDataChangedObserver = new TeamDataCache.TeamDataChangedObserver() {
|
|
|
+ @Override
|
|
|
+ public void onUpdateTeams(List<Team> teams) {
|
|
|
+ if (team == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (Team t : teams) {
|
|
|
+ if (t.getId().equals(team.getId())) {
|
|
|
+ updateTeamInfo(t);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onRemoveTeam(Team team) {
|
|
|
+ if (team == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (team.getId().equals(SheishuoTeamMessageActivity.this.team.getId())) {
|
|
|
+ updateTeamInfo(team);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 群成员资料变动通知和移除群成员通知
|
|
|
+ */
|
|
|
+ TeamDataCache.TeamMemberDataChangedObserver teamMemberDataChangedObserver = new TeamDataCache.TeamMemberDataChangedObserver() {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onUpdateTeamMember(List<TeamMember> members) {
|
|
|
+ fragment.refreshMessageList();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onRemoveTeamMember(TeamMember member) {
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ FriendDataCache.FriendDataChangedObserver friendDataChangedObserver = new FriendDataCache.FriendDataChangedObserver() {
|
|
|
+ @Override
|
|
|
+ public void onAddedOrUpdatedFriends(List<String> accounts) {
|
|
|
+ fragment.refreshMessageList();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onDeletedFriends(List<String> accounts) {
|
|
|
+ fragment.refreshMessageList();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onAddUserToBlackList(List<String> account) {
|
|
|
+ fragment.refreshMessageList();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onRemoveUserFromBlackList(List<String> account) {
|
|
|
+ fragment.refreshMessageList();
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected MessageFragment fragment() {
|
|
|
+ // 添加fragment
|
|
|
+ Bundle arguments = getIntent().getExtras();
|
|
|
+ arguments.putSerializable(Extras.EXTRA_TYPE, SessionTypeEnum.Team);
|
|
|
+ fragment = new SheishuoTeamMessageFragment();
|
|
|
+ fragment.setArguments(arguments);
|
|
|
+ fragment.setContainerId(R.id.message_fragment_container);
|
|
|
+ return fragment;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected int getContentViewId() {
|
|
|
+ return R.layout.nim_team_message_activity;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onBackPressed() {
|
|
|
+ super.onBackPressed();
|
|
|
+ if (backToClass != null) {
|
|
|
+ Intent intent = new Intent();
|
|
|
+ intent.setClass(this, backToClass);
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
|
|
+ startActivity(intent);
|
|
|
+ finish();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void showToast(final String str) {
|
|
|
+ getHandler().post(new Runnable() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ if (toast == null) {
|
|
|
+ toast = Toast.makeText(context, str, Toast.LENGTH_SHORT);
|
|
|
+ } else {
|
|
|
+ toast.setText(str);
|
|
|
+ }
|
|
|
+
|
|
|
+ toast.show();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|