2 Commits eaeeeb3e21 ... 32a9b5ad63

Author SHA1 Message Date
  Junqin Wang 32a9b5ad63 添加群消息搜索和清理聊天记录 8 years ago
  Junqin Wang 598937f9e8 Fix:加载地区更多群item闪动的问题 8 years ago
30 changed files with 533 additions and 85 deletions
  1. 2 0
      app/AndroidManifest.xml
  2. 49 0
      app/res/layout/nim_team_message_activity.xml
  3. 10 0
      app/res/menu/team_chat_menu.xml
  4. 1 1
      app/src/com/sheishuo/app/core_module/circle/activity/NewTweetingActivity.java
  5. 1 2
      app/src/com/sheishuo/app/core_module/friends/activity/AddNewFriend.java
  6. 1 2
      app/src/com/sheishuo/app/core_module/friends/activity/ContactsListActivity.java
  7. 1 1
      app/src/com/sheishuo/app/core_module/friends/activity/PhoneContactsActivity.java
  8. 1 3
      app/src/com/sheishuo/app/core_module/location/LocationSelectActivity.java
  9. 3 9
      app/src/com/sheishuo/app/core_module/sheishuo/view/ui/CreateNewGroupActivity.java
  10. 1 2
      app/src/com/sheishuo/app/core_module/sheishuo/view/ui/MoreGroupsInTheAreaActivity.java
  11. 1 1
      app/src/com/sheishuo/app/core_module/social_info/view/ui/activity/PersonalSettingsActivity.java
  12. 1 1
      app/src/com/sheishuo/app/core_module/trade/view/ui/activity/TradeChangePriorityActivity.java
  13. 1 3
      app/src/com/sheishuo/app/core_module/trade/view/ui/activity/TradeDetailActivity.java
  14. 327 0
      app/src/com/sheishuo/app/impl/SheishuoTeamMessageActivity.java
  15. 15 1
      app/src/com/sheishuo/app/impl/SheishuoTeamMessageFragment.java
  16. 1 1
      app/src/com/sheishuo/app/impl/SheishuoToolbarOptions.java
  17. 1 1
      app/src/com/sheishuo/app/impl/SheishuoUI.java
  18. 62 0
      app/src/com/sheishuo/app/impl/SheishuoUIKit.java
  19. 2 3
      app/src/com/sheishuo/app/login/LoginActivity.java
  20. 1 2
      app/src/com/sheishuo/app/login/LoginAndRegActivity.java
  21. 1 1
      app/src/com/sheishuo/app/login/RegisterActivity.java
  22. 1 8
      app/src/com/sheishuo/app/main/activity/MainActivity.java
  23. 2 1
      app/src/com/sheishuo/app/main/activity/TeamListActivity.java
  24. 2 1
      app/src/com/sheishuo/app/main/adapter/AreaGroupsAdapter.java
  25. 3 5
      app/src/com/sheishuo/app/main/fragment/AreaGroupsFragment.java
  26. 7 2
      app/src/com/sheishuo/app/main/fragment/SessionListFragment.java
  27. 20 20
      uikit/src/com/netease/nim/uikit/NimUIKit.java
  28. 2 2
      uikit/src/com/netease/nim/uikit/common/fragment/TFragment.java
  29. 10 11
      uikit/src/com/netease/nim/uikit/session/activity/TeamMessageActivity.java
  30. 3 1
      uikit/src/com/netease/nim/uikit/session/fragment/MessageFragment.java

+ 2 - 0
app/AndroidManifest.xml

@@ -119,6 +119,8 @@
             android:theme="@style/AppTheme.NoActionBar"/>
         <activity android:name=".core_module.sheishuo.view.ui.CreateNewGroupActivity"
             android:theme="@style/AppTheme.NoActionBar"/>
+        <activity android:name=".impl.SheishuoTeamMessageActivity"
+            android:theme="@style/AppTheme.NoActionBar"/>
 
         <!--朋友圈相关-->
         <activity android:name=".core_module.circle.activity.NewTweetingActivity"

+ 49 - 0
app/res/layout/nim_team_message_activity.xml

@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <android.support.design.widget.AppBarLayout
+        android:id="@+id/app_bar_layout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:theme="@style/AppTheme.AppBarOverlay"
+        app:elevation="0dp">
+
+        <com.sheishuo.app.common.views.BaseToolbar
+            android:id="@+id/toolbar"
+            android:layout_width="match_parent"
+            android:layout_height="?attr/actionBarSize"
+            android:background="?attr/colorPrimary"
+            app:titleTextAppearance="@style/Toolbar.TitleText" />
+    </android.support.design.widget.AppBarLayout>
+
+    <RelativeLayout
+        android:id="@+id/invalid_team_tip"
+        android:layout_width="match_parent"
+        android:layout_height="40dip"
+        android:background="@drawable/nim_message_activity_top_tip"
+        android:visibility="gone">
+
+        <TextView
+            android:id="@+id/invalid_team_text"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerHorizontal="true"
+            android:layout_centerVertical="true"
+            android:text="@string/team_invalid_tip"
+            android:textColor="@color/color_yellow_796413"
+            android:textSize="14sp" />
+
+    </RelativeLayout>
+
+    <LinearLayout
+        android:id="@+id/message_fragment_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical" />
+
+
+</LinearLayout>

+ 10 - 0
app/res/menu/team_chat_menu.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item android:id="@+id/team_chat_menu_search"
+        android:title="搜索"
+        app:showAsAction="ifRoom"/>
+    <item android:id="@+id/team_chat_menu_clear_chat_history"
+        android:title="清空聊天记录"
+        app:showAsAction="ifRoom"/>
+</menu>

+ 1 - 1
app/src/com/sheishuo/app/core_module/circle/activity/NewTweetingActivity.java

@@ -24,7 +24,7 @@ import com.sheishuo.app.common.util.net.NetStatus;
 import com.sheishuo.app.common.views.BaseToolbar;
 import com.sheishuo.app.main.activity.MainActivity;
 import com.sheishuo.app.main.fragment.CircleOfFriendsFragment;
-import com.sheishuo.app.uikit_implements.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoUI;
 
 import java.util.ArrayList;
 import java.util.Collections;

+ 1 - 2
app/src/com/sheishuo/app/core_module/friends/activity/AddNewFriend.java

@@ -5,12 +5,11 @@ import android.os.Bundle;
 import android.view.View;
 import android.widget.Button;
 import android.widget.EditText;
-import android.widget.TextView;
 import android.widget.Toast;
 
 import com.sheishuo.app.R;
 import com.sheishuo.app.common.views.BaseToolbar;
-import com.sheishuo.app.uikit_implements.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoUI;
 
 /**
  * Created by KN on 2017/8/16.

+ 1 - 2
app/src/com/sheishuo/app/core_module/friends/activity/ContactsListActivity.java

@@ -11,7 +11,6 @@ import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import com.netease.nim.uikit.common.activity.UI;
-import com.netease.nim.uikit.common.ui.imageview.HeadImageView;
 import com.netease.nim.uikit.contact.ContactsCustomization;
 import com.netease.nim.uikit.contact.ContactsFragment;
 import com.netease.nim.uikit.contact.core.item.AbsContactItem;
@@ -26,7 +25,7 @@ import com.sheishuo.app.main.activity.RobotListActivity;
 import com.sheishuo.app.main.activity.SystemMessageActivity;
 import com.sheishuo.app.main.activity.TeamListActivity;
 import com.sheishuo.app.session.SessionHelper;
-import com.sheishuo.app.uikit_implements.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoUI;
 
 import java.util.ArrayList;
 import java.util.List;

+ 1 - 1
app/src/com/sheishuo/app/core_module/friends/activity/PhoneContactsActivity.java

@@ -2,7 +2,7 @@ package com.sheishuo.app.core_module.friends.activity;
 
 import android.os.Bundle;
 
-import com.sheishuo.app.uikit_implements.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoUI;
 
 /**
  * Created by KN on 2017/8/18.

+ 1 - 3
app/src/com/sheishuo/app/core_module/location/LocationSelectActivity.java

@@ -1,17 +1,15 @@
 package com.sheishuo.app.core_module.location;
 
-import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
-import android.widget.Spinner;
 
 import com.sheishuo.app.R;
 import com.sheishuo.app.common.util.location.CityDataHelper;
 import com.sheishuo.app.common.views.BaseToolbar;
 import com.sheishuo.app.common.views.WheelView;
-import com.sheishuo.app.uikit_implements.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoUI;
 
 /**
  * Created by KN on 2017/8/14.

+ 3 - 9
app/src/com/sheishuo/app/core_module/sheishuo/view/ui/CreateNewGroupActivity.java

@@ -7,7 +7,6 @@ import android.os.Bundle;
 import android.view.View;
 import android.widget.Button;
 import android.widget.EditText;
-import android.widget.HorizontalScrollView;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 
@@ -17,25 +16,20 @@ import com.netease.nim.uikit.common.media.picker.PickImageHelper;
 import com.netease.nim.uikit.common.media.picker.activity.PickImageActivity;
 import com.netease.nim.uikit.common.media.picker.model.PhotoInfo;
 import com.netease.nim.uikit.common.ui.imageview.HeadImageView;
-import com.netease.nim.uikit.common.util.media.ImageUtil;
 import com.netease.nim.uikit.contact_selector.activity.ContactSelectActivity;
-import com.netease.nim.uikit.session.helper.MessageHelper;
 import com.netease.nimlib.sdk.NIMClient;
 import com.netease.nimlib.sdk.RequestCallback;
-import com.netease.nimlib.sdk.msg.MessageBuilder;
-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.TeamFieldEnum;
 import com.netease.nimlib.sdk.team.constant.TeamTypeEnum;
 import com.netease.nimlib.sdk.team.model.Team;
-import com.netease.nimlib.sdk.uinfo.UserInfoProvider;
 import com.netease.nimlib.sdk.uinfo.UserService;
 import com.netease.nimlib.sdk.uinfo.model.NimUserInfo;
 import com.sheishuo.app.R;
 import com.sheishuo.app.common.util.img.ImgUtil;
 import com.sheishuo.app.common.views.BaseToolbar;
-import com.sheishuo.app.uikit_implements.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoUIKit;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -116,7 +110,7 @@ public class CreateNewGroupActivity extends SheishuoUI {
                     @Override
                     public void onSuccess(Team team) {
                         showToast(context, "创建群组成功");
-                        NimUIKit.startTeamSession(context, team.getId());
+                        SheishuoUIKit.startTeamSession(context, team.getId());
                         finish();
                     }
 

+ 1 - 2
app/src/com/sheishuo/app/core_module/sheishuo/view/ui/MoreGroupsInTheAreaActivity.java

@@ -5,7 +5,6 @@ import android.content.Intent;
 import android.os.Bundle;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
-import android.util.Log;
 import android.view.View;
 
 import com.netease.nim.uikit.NimUIKit;
@@ -19,7 +18,7 @@ import com.sheishuo.app.common.util.net.ResponseCallback;
 import com.sheishuo.app.common.views.BaseToolbar;
 import com.sheishuo.app.main.adapter.AreaGroupsAdapter;
 import com.sheishuo.app.main.adapter.OnItemClickListener;
-import com.sheishuo.app.uikit_implements.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoUI;
 
 import org.json.JSONException;
 import org.json.JSONObject;

+ 1 - 1
app/src/com/sheishuo/app/core_module/social_info/view/ui/activity/PersonalSettingsActivity.java

@@ -5,7 +5,7 @@ import android.content.Intent;
 import android.os.Bundle;
 
 import com.sheishuo.app.R;
-import com.sheishuo.app.uikit_implements.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoUI;
 
 /**
  * Created by KN on 2017/8/10.

+ 1 - 1
app/src/com/sheishuo/app/core_module/trade/view/ui/activity/TradeChangePriorityActivity.java

@@ -9,7 +9,7 @@ import android.widget.TextView;
 import com.sheishuo.app.R;
 import com.sheishuo.app.common.views.BaseToolbar;
 import com.sheishuo.app.core_module.trade.view.adapter.TradeItemAdapter;
-import com.sheishuo.app.uikit_implements.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoUI;
 
 /**
  * Created by KN on 2017/8/16.

+ 1 - 3
app/src/com/sheishuo/app/core_module/trade/view/ui/activity/TradeDetailActivity.java

@@ -3,13 +3,11 @@ package com.sheishuo.app.core_module.trade.view.ui.activity;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.Toolbar;
 import android.util.Log;
 import android.view.Menu;
 import com.sheishuo.app.R;
 import com.sheishuo.app.common.views.BaseToolbar;
-import com.sheishuo.app.uikit_implements.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoUI;
 
 /**
  * Created by KN on 2017/8/4.

+ 327 - 0
app/src/com/sheishuo/app/impl/SheishuoTeamMessageActivity.java

@@ -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();
+            }
+        });
+    }
+}

+ 15 - 1
uikit/src/com/netease/nim/uikit/session/fragment/SheishuoTeamMessageFragment.java → app/src/com/sheishuo/app/impl/SheishuoTeamMessageFragment.java

@@ -1,8 +1,11 @@
-package com.netease.nim.uikit.session.fragment;
+package com.sheishuo.app.impl;
 
 import android.os.Bundle;
 import android.util.Log;
 
+import com.netease.nim.uikit.session.fragment.TeamMessageFragment;
+import com.netease.nim.uikit.session.module.Container;
+
 /**
  * Created by KN on 2017/8/18.
  */
@@ -21,6 +24,11 @@ public class SheishuoTeamMessageFragment extends TeamMessageFragment {
             Log.e(TAG,"Team is null");
             return;
         }
+
+
+
+
+        Log.e("fragment",team.getName());
         if (team.getName().contains("国家")
                 ||team.getName().contains("省")
                 ||team.getName().contains("市")
@@ -31,4 +39,10 @@ public class SheishuoTeamMessageFragment extends TeamMessageFragment {
             inputPanel.setSendGiftEnable(true);
         }
     }
+
+
+
+    public Container getContainer(){
+        return container;
+    }
 }

+ 1 - 1
app/src/com/sheishuo/app/uikit_implements/SheishuoToolbarOptions.java → app/src/com/sheishuo/app/impl/SheishuoToolbarOptions.java

@@ -1,4 +1,4 @@
-package com.sheishuo.app.uikit_implements;
+package com.sheishuo.app.impl;
 
 import com.netease.nim.uikit.model.ToolBarOptions;
 import com.sheishuo.app.R;

+ 1 - 1
app/src/com/sheishuo/app/uikit_implements/SheishuoUI.java → app/src/com/sheishuo/app/impl/SheishuoUI.java

@@ -1,4 +1,4 @@
-package com.sheishuo.app.uikit_implements;
+package com.sheishuo.app.impl;
 
 import android.content.Context;
 import android.os.Build;

+ 62 - 0
app/src/com/sheishuo/app/impl/SheishuoUIKit.java

@@ -0,0 +1,62 @@
+package com.sheishuo.app.impl;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.netease.nim.uikit.NimUIKit;
+import com.netease.nim.uikit.custom.DefalutTeamSessionCustomization;
+import com.netease.nim.uikit.session.SessionCustomization;
+import com.netease.nim.uikit.session.activity.P2PMessageActivity;
+import com.netease.nim.uikit.session.activity.TeamMessageActivity;
+import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
+import com.netease.nimlib.sdk.msg.model.IMMessage;
+
+/**
+ * Created by KN on 2017/8/18.
+ */
+
+public class SheishuoUIKit extends NimUIKit {
+
+    /**
+     * 打开群聊界面,若开发者未设置 {@link NimUIKit#setCommonTeamSessionCustomization(SessionCustomization)},
+     * 则定制化信息 SessionCustomization 为{@link DefalutTeamSessionCustomization}
+     * <p>
+     * 若需要为目标会话提供单独定义的SessionCustomization,请使用{@link NimUIKit#startChatting(Context, String, SessionTypeEnum, SessionCustomization, IMMessage)}
+     *
+     * @param context 上下文
+     * @param tid     群id
+     */
+    public static void startTeamSession(Context context, String tid) {
+        startTeamSession(context, tid, null);
+    }
+
+    /**
+     * 同 {@link SheishuoUIKit#startTeamSession(Context, String)},同时聊天界面打开后,列表跳转至anchor位置
+     *
+     * @param context 上下文
+     * @param tid     群id
+     * @param anchor  跳转到指定消息的位置,不需要跳转填null
+     */
+    public static void startTeamSession(Context context, String tid, IMMessage anchor) {
+        SheishuoUIKit.startChatting(context, tid, SessionTypeEnum.Team, commonTeamSessionCustomization, anchor);
+    }
+
+    /**
+     * 打开一个聊天窗口,开始聊天
+     *
+     * @param context       上下文
+     * @param id            聊天对象ID(用户帐号account或者聊天室ID)
+     * @param sessionType   会话类型
+     * @param customization 定制化信息。针对不同的聊天对象,可提供不同的定制化。
+     * @param anchor        跳转到指定消息的位置,不需要跳转填null
+     */
+    public static void startChatting(Context context, String id, SessionTypeEnum sessionType, SessionCustomization
+            customization, IMMessage anchor) {
+        if (sessionType == SessionTypeEnum.P2P) {
+            P2PMessageActivity.start(context, id, customization, anchor);
+        } else if (sessionType == SessionTypeEnum.Team) {
+            Log.e("TeamId",id);
+            SheishuoTeamMessageActivity.start(context, id, customization, null, anchor);
+        }
+    }
+}

+ 2 - 3
app/src/com/sheishuo/app/login/LoginActivity.java

@@ -1,6 +1,5 @@
 package com.sheishuo.app.login;
 
-import android.app.backup.SharedPreferencesBackupHelper;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
@@ -19,8 +18,8 @@ import com.sheishuo.app.common.util.net.NetImpl;
 import com.sheishuo.app.common.util.net.ResponseCallback;
 import com.sheishuo.app.login.beans.LoginBean;
 import com.sheishuo.app.login.helper.LoginHelper;
-import com.sheishuo.app.uikit_implements.SheishuoToolbarOptions;
-import com.sheishuo.app.uikit_implements.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoToolbarOptions;
+import com.sheishuo.app.impl.SheishuoUI;
 
 /**
  * Created by KN on 2017/7/11.

+ 1 - 2
app/src/com/sheishuo/app/login/LoginAndRegActivity.java

@@ -21,8 +21,7 @@ import com.sheishuo.app.common.util.net.NetImpl;
 import com.sheishuo.app.common.util.net.ResponseCallback;
 import com.sheishuo.app.login.beans.LoginBean;
 import com.sheishuo.app.login.helper.LoginHelper;
-import com.sheishuo.app.main.activity.MainActivity;
-import com.sheishuo.app.uikit_implements.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoUI;
 
 public class LoginAndRegActivity extends SheishuoUI implements View.OnClickListener{
 

+ 1 - 1
app/src/com/sheishuo/app/login/RegisterActivity.java

@@ -18,7 +18,7 @@ import com.sheishuo.app.common.util.net.NetImpl;
 import com.sheishuo.app.common.util.net.NetInfo;
 import com.sheishuo.app.common.util.net.ResponseCallback;
 import com.sheishuo.app.common.views.BaseToolbar;
-import com.sheishuo.app.uikit_implements.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoUI;
 
 import org.json.JSONObject;
 

+ 1 - 8
app/src/com/sheishuo/app/main/activity/MainActivity.java

@@ -8,13 +8,9 @@ import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.text.TextUtils;
 import android.util.Log;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
 import android.widget.Toast;
 
 import com.netease.nim.uikit.LoginSyncDataStatusObserver;
-import com.netease.nim.uikit.NimUIKit;
 import com.netease.nim.uikit.common.ui.dialog.DialogMaker;
 import com.netease.nim.uikit.common.util.log.LogUtil;
 import com.netease.nim.uikit.contact_selector.activity.ContactSelectActivity;
@@ -22,7 +18,6 @@ import com.netease.nim.uikit.permission.MPermission;
 import com.netease.nim.uikit.permission.annotation.OnMPermissionDenied;
 import com.netease.nim.uikit.permission.annotation.OnMPermissionGranted;
 import com.netease.nim.uikit.permission.annotation.OnMPermissionNeverAskAgain;
-import com.netease.nim.uikit.team.helper.TeamHelper;
 import com.netease.nimlib.sdk.NIMClient;
 import com.netease.nimlib.sdk.NimIntent;
 import com.netease.nimlib.sdk.Observer;
@@ -34,7 +29,6 @@ import com.sheishuo.app.avchat.AVChatProfile;
 import com.sheishuo.app.avchat.activity.AVChatActivity;
 import com.sheishuo.app.chatroom.helper.ChatRoomHelper;
 import com.sheishuo.app.config.preference.UserPreferences;
-import com.sheishuo.app.contact.activity.AddFriendActivity;
 import com.sheishuo.app.core_module.location.LocationSelectActivity;
 import com.sheishuo.app.core_module.trade.view.ui.activity.TradeChangePriorityActivity;
 import com.sheishuo.app.login.LoginActivity;
@@ -44,8 +38,7 @@ import com.sheishuo.app.main.fragment.MineFragment;
 import com.sheishuo.app.main.model.Extras;
 import com.sheishuo.app.session.SessionHelper;
 import com.sheishuo.app.team.TeamCreateHelper;
-import com.sheishuo.app.team.activity.AdvancedTeamSearchActivity;
-import com.sheishuo.app.uikit_implements.SheishuoUI;
+import com.sheishuo.app.impl.SheishuoUI;
 
 import java.util.ArrayList;
 

+ 2 - 1
app/src/com/sheishuo/app/main/activity/TeamListActivity.java

@@ -9,6 +9,7 @@ import android.widget.AdapterView;
 import android.widget.ListView;
 import android.widget.Toast;
 
+import com.sheishuo.app.impl.SheishuoUIKit;
 import com.sheishuo.app.session.SessionHelper;
 import com.sheishuo.app.R;
 import com.netease.nim.uikit.cache.TeamDataCache;
@@ -129,7 +130,7 @@ public class TeamListActivity extends UI implements AdapterView.OnItemClickListe
         AbsContactItem item = (AbsContactItem) adapter.getItem(position);
         switch (item.getItemType()) {
             case ItemTypes.TEAM:
-                SessionHelper.startTeamSession(this, ((ContactItem) item).getContact().getContactId());
+                SheishuoUIKit.startTeamSession(this, ((ContactItem) item).getContact().getContactId());
                 break;
         }
     }

+ 2 - 1
app/src/com/sheishuo/app/main/adapter/AreaGroupsAdapter.java

@@ -89,7 +89,8 @@ public class AreaGroupsAdapter extends RecyclerView.Adapter<AreaGroupsAdapter.Ar
 
     public void addGroup(String groupId){
         groupIds.add(groupId);
-        notifyDataSetChanged();
+        //保证数据直接插在所有数据下面
+        notifyItemChanged(groupIds.size());
     }
 
     @Override

+ 3 - 5
app/src/com/sheishuo/app/main/fragment/AreaGroupsFragment.java

@@ -10,9 +10,6 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import com.google.gson.Gson;
-import com.netease.nim.uikit.NimUIKit;
-import com.netease.nim.uikit.contact_selector.activity.ContactSelectActivity;
-import com.netease.nim.uikit.team.helper.TeamHelper;
 import com.netease.nimlib.sdk.NIMClient;
 import com.netease.nimlib.sdk.team.TeamService;
 import com.sheishuo.app.R;
@@ -29,6 +26,7 @@ import com.sheishuo.app.common.views.CustomScrollLinearLayoutManager;
 import com.sheishuo.app.core_module.location.LocationSelectActivity;
 import com.sheishuo.app.core_module.sheishuo.view.ui.CreateNewGroupActivity;
 import com.sheishuo.app.core_module.sheishuo.view.ui.MoreGroupsInTheAreaActivity;
+import com.sheishuo.app.impl.SheishuoUIKit;
 import com.sheishuo.app.login.beans.LoginBean;
 import com.sheishuo.app.main.activity.MainActivity;
 import com.sheishuo.app.main.adapter.AreaGroupsAdapter;
@@ -182,7 +180,7 @@ public class AreaGroupsFragment extends MainTabFragment {
                 if (!NIMClient.getService(TeamService.class).queryTeamBlock(groupId).isMyTeam()) {
                     NIMClient.getService(TeamService.class).applyJoinTeam(groupId, "申请入群");
                 }
-                NimUIKit.startTeamSession(getActivity(), (String) view.getTag());
+                SheishuoUIKit.startTeamSession(getActivity(), (String) view.getTag());
 
             }
         });
@@ -222,7 +220,7 @@ public class AreaGroupsFragment extends MainTabFragment {
                                             if (!NIMClient.getService(TeamService.class).queryTeamBlock(groupId).isMyTeam()) {
                                                 NIMClient.getService(TeamService.class).applyJoinTeam(groupId, "申请入群");
                                             }
-                                            NimUIKit.startTeamSession(getActivity(), (String) view.getTag());
+                                            SheishuoUIKit.startTeamSession(getActivity(), (String) view.getTag());
                                         }
                                     });
                                 }

+ 7 - 2
app/src/com/sheishuo/app/main/fragment/SessionListFragment.java

@@ -25,6 +25,7 @@ import com.sheishuo.app.common.views.BaseToolbar;
 import com.sheishuo.app.config.preference.Preferences;
 import com.sheishuo.app.core_module.friends.activity.AddNewFriend;
 import com.sheishuo.app.core_module.friends.activity.ContactsListActivity;
+import com.sheishuo.app.impl.SheishuoUIKit;
 import com.sheishuo.app.login.LoginActivity;
 import com.sheishuo.app.login.LogoutHelperBak;
 import com.sheishuo.app.main.activity.GlobalSearchActivity;
@@ -291,10 +292,14 @@ public class SessionListFragment extends MainTabFragment {
                 // 回调函数,以供打开会话窗口时传入定制化参数,或者做其他动作
                 switch (recent.getSessionType()) {
                     case P2P:
-                        SessionHelper.startP2PSession(getActivity(), recent.getContactId());
+                        SheishuoUIKit.startP2PSession(getActivity(),recent.getContactId());
+
+                        //SessionHelper.startP2PSession(getActivity(), recent.getContactId());
+
                         break;
                     case Team:
-                        SessionHelper.startTeamSession(getActivity(), recent.getContactId());
+                        SheishuoUIKit.startTeamSession(getActivity(),recent.getContactId());
+                        //SessionHelper.startTeamSession(getActivity(), recent.getContactId());
                         break;
                     default:
                         break;

+ 20 - 20
uikit/src/com/netease/nim/uikit/NimUIKit.java

@@ -51,52 +51,52 @@ import java.util.Set;
 /**
  * UIKit能力输出类。
  */
-public final class NimUIKit {
+public class NimUIKit {
 
     // context
-    private static Context context;
+    protected static Context context;
 
     // 自己的用户帐号
-    private static String account;
+    protected static String account;
 
     // 用户信息提供者
-    private static UserInfoProvider userInfoProvider;
+    protected static UserInfoProvider userInfoProvider;
 
     // 通讯录信息提供者
-    private static ContactProvider contactProvider;
+    protected static ContactProvider contactProvider;
 
     // 地理位置信息提供者
-    private static LocationProvider locationProvider;
+    protected static LocationProvider locationProvider;
 
     // 图片加载、缓存与管理组件
-    private static ImageLoaderKit imageLoaderKit;
+    protected static ImageLoaderKit imageLoaderKit;
 
     // 会话窗口消息列表一些点击事件的响应处理函数
-    private static SessionEventListener sessionListener;
+    protected static SessionEventListener sessionListener;
 
     // 通讯录列表一些点击事件的响应处理函数
-    private static ContactEventListener contactEventListener;
+    protected static ContactEventListener contactEventListener;
 
     // 转发消息过滤器
-    private static MsgForwardFilter msgForwardFilter;
+    protected static MsgForwardFilter msgForwardFilter;
 
     // 撤回消息过滤器
-    private static MsgRevokeFilter msgRevokeFilter;
+    protected static MsgRevokeFilter msgRevokeFilter;
 
     // 自定义推送配置
-    private static CustomPushContentProvider customPushContentProvider;
+    protected static CustomPushContentProvider customPushContentProvider;
 
     // 单聊界面定制
-    private static SessionCustomization commonP2PSessionCustomization;
+    protected static SessionCustomization commonP2PSessionCustomization;
 
     // 群聊界面定制
-    private static SessionCustomization commonTeamSessionCustomization;
+    protected static SessionCustomization commonTeamSessionCustomization;
 
     // 在线状态展示内容
-    private static OnlineStateContentProvider onlineStateContentProvider;
+    protected static OnlineStateContentProvider onlineStateContentProvider;
 
     // 在线状态变化监听
-    private static List<OnlineStateChangeListener> onlineStateChangeListeners;
+    protected static List<OnlineStateChangeListener> onlineStateChangeListeners;
 
     /**
      * 初始化UIKit, 用户信息、联系人信息使用 {@link DefaultUserInfoProvider},{@link DefaultContactProvider}
@@ -144,7 +144,7 @@ public final class NimUIKit {
     }
 
     // 初始化用户信息提供者
-    private static void initUserInfoProvider(UserInfoProvider userInfoProvider) {
+    protected static void initUserInfoProvider(UserInfoProvider userInfoProvider) {
 
         if (userInfoProvider == null) {
             userInfoProvider = new DefaultUserInfoProvider(context);
@@ -154,7 +154,7 @@ public final class NimUIKit {
     }
 
     // 初始化联系人信息提供者
-    private static void initContactProvider(ContactProvider contactProvider) {
+    protected static void initContactProvider(ContactProvider contactProvider) {
 
         if (contactProvider == null) {
             contactProvider = new DefaultContactProvider();
@@ -164,7 +164,7 @@ public final class NimUIKit {
     }
 
     // 初始化会话定制,群、P2P
-    private static void initDefalutSessionCustomization() {
+    protected static void initDefalutSessionCustomization() {
         if (commonP2PSessionCustomization == null) {
             commonP2PSessionCustomization = new DefalutP2PSessionCustomization();
         }
@@ -174,7 +174,7 @@ public final class NimUIKit {
     }
 
     // 初始化联系人点击事件
-    private static void initDefalutContactEventListener() {
+    protected static void initDefalutContactEventListener() {
         if (contactEventListener == null) {
             contactEventListener = new DefalutContactEventListener();
         }

+ 2 - 2
uikit/src/com/netease/nim/uikit/common/fragment/TFragment.java

@@ -15,9 +15,9 @@ import com.netease.nim.uikit.common.util.log.LogUtil;
 public abstract class TFragment extends Fragment {
     private static final Handler handler = new Handler();
 
-    private int containerId;
+    protected int containerId;
 
-    private boolean destroyed;
+    protected boolean destroyed;
 
     protected final boolean isDestroyed() {
         return destroyed;

+ 10 - 11
uikit/src/com/netease/nim/uikit/session/activity/TeamMessageActivity.java

@@ -17,7 +17,6 @@ import com.netease.nim.uikit.model.ToolBarOptions;
 import com.netease.nim.uikit.session.SessionCustomization;
 import com.netease.nim.uikit.session.constant.Extras;
 import com.netease.nim.uikit.session.fragment.MessageFragment;
-import com.netease.nim.uikit.session.fragment.SheishuoTeamMessageFragment;
 import com.netease.nim.uikit.session.fragment.TeamMessageFragment;
 import com.netease.nimlib.sdk.NIMClient;
 import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
@@ -37,15 +36,15 @@ import java.util.List;
 public class TeamMessageActivity extends BaseMessageActivity {
 
     // model
-    private Team team;
+    protected Team team;
 
-    private View invalidTeamTipView;
+    protected View invalidTeamTipView;
 
-    private TextView invalidTeamTipText;
+    protected TextView invalidTeamTipText;
 
-    private SheishuoTeamMessageFragment fragment;
+    protected TeamMessageFragment fragment;
 
-    private Class<? extends Activity> backToClass;
+    protected Class<? extends Activity> backToClass;
 
     public static void start(Context context, String tid, SessionCustomization customization,
                              Class<? extends Activity> backToClass, IMMessage anchor) {
@@ -93,7 +92,7 @@ public class TeamMessageActivity extends BaseMessageActivity {
     /**
      * 请求群基本信息
      */
-    private void requestTeamInfo() {
+    protected void requestTeamInfo() {
         // 请求群基本信息
         Team t = NIMClient.getService(TeamService.class).queryTeamBlock(sessionId);
         if (t != null) {
@@ -113,7 +112,7 @@ public class TeamMessageActivity extends BaseMessageActivity {
         }
     }
 
-    private void onRequestTeamInfoFailed() {
+    protected void onRequestTeamInfoFailed() {
         Toast.makeText(TeamMessageActivity.this, "获取聊天室信息失败!", Toast.LENGTH_SHORT).show();
         finish();
     }
@@ -123,7 +122,7 @@ public class TeamMessageActivity extends BaseMessageActivity {
      *
      * @param d
      */
-    private void updateTeamInfo(final Team d) {
+    protected void updateTeamInfo(final Team d) {
         if (d == null) {
             Log.e("Team","is null");
             return;
@@ -143,7 +142,7 @@ public class TeamMessageActivity extends BaseMessageActivity {
      *
      * @param register
      */
-    private void registerTeamUpdateObserver(boolean register) {
+    protected void registerTeamUpdateObserver(boolean register) {
         if (register) {
             TeamDataCache.getInstance().registerTeamDataChangedObserver(teamDataChangedObserver);
             TeamDataCache.getInstance().registerTeamMemberDataChangedObserver(teamMemberDataChangedObserver);
@@ -224,7 +223,7 @@ public class TeamMessageActivity extends BaseMessageActivity {
         // 添加fragment
         Bundle arguments = getIntent().getExtras();
         arguments.putSerializable(Extras.EXTRA_TYPE, SessionTypeEnum.Team);
-        fragment = new SheishuoTeamMessageFragment();
+        fragment = new TeamMessageFragment();
         fragment.setArguments(arguments);
         fragment.setContainerId(R.id.message_fragment_container);
         return fragment;

+ 3 - 1
uikit/src/com/netease/nim/uikit/session/fragment/MessageFragment.java

@@ -68,6 +68,8 @@ public class MessageFragment extends TFragment implements ModuleProxy {
     protected InputPanel inputPanel;
     protected MessageListPanelEx messageListPanel;
 
+    protected Container container;
+
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
@@ -155,7 +157,7 @@ public class MessageFragment extends TFragment implements ModuleProxy {
         IMMessage anchor = (IMMessage) getArguments().getSerializable(Extras.EXTRA_ANCHOR);
 
         customization = (SessionCustomization) getArguments().getSerializable(Extras.EXTRA_CUSTOMIZATION);
-        Container container = new Container(getActivity(), sessionId, sessionType, this);
+        container = new Container(getActivity(), sessionId, sessionType, this);
 
         if (messageListPanel == null) {
             messageListPanel = new MessageListPanelEx(container, rootView, anchor, false, false);