Browse Source

no message

Fenix Wang 8 years ago
parent
commit
56434b3133
52 changed files with 1259 additions and 179 deletions
  1. 6 2
      app/AndroidManifest.xml
  2. 16 8
      app/app.iml
  3. 7 4
      app/build.gradle
  4. 18 0
      app/res/layout/activity_circle_message.xml
  5. 1 0
      app/res/layout/circle_details.xml
  6. 1 0
      app/res/layout/circle_item.xml
  7. 37 0
      app/res/layout/circle_of_friends_fragment.xml
  8. 11 0
      app/res/layout/content_circle_message.xml
  9. 88 0
      app/res/layout/item_circle_message_layout.xml
  10. 6 6
      app/res/layout/item_phone_contact_layout.xml
  11. 3 1
      app/res/layout/trade_list_search.xml
  12. 0 0
      app/res/values/strings.xml
  13. 2 0
      app/src/com/sheishuo/app/SheishuoApplication.java
  14. 7 0
      app/src/com/sheishuo/app/cache/AccountCache.java
  15. 9 0
      app/src/com/sheishuo/app/common/beans/CircleBean.java
  16. 14 0
      app/src/com/sheishuo/app/common/beans/CircleUnreadBean.java
  17. 18 0
      app/src/com/sheishuo/app/common/beans/SocialInfoBean.java
  18. 6 1
      app/src/com/sheishuo/app/common/util/net/INet.java
  19. 105 2
      app/src/com/sheishuo/app/common/util/net/NetImpl.java
  20. 6 0
      app/src/com/sheishuo/app/common/util/net/NetInfo.java
  21. 81 26
      app/src/com/sheishuo/app/core_module/circle/activity/CircleDetailsActivity.java
  22. 5 1
      app/src/com/sheishuo/app/core_module/circle/activity/CirclePersonActivity.java
  23. 13 0
      app/src/com/sheishuo/app/core_module/circle/activity/NewCommentActivity.java
  24. 2 3
      app/src/com/sheishuo/app/core_module/friends/adapter/PhoneContactItemAdapter.java
  25. 2 0
      app/src/com/sheishuo/app/core_module/mine/view/ui/activity/AboutActivity.java
  26. 21 2
      app/src/com/sheishuo/app/core_module/mine/view/ui/activity/PersonalSettingsActivity.java
  27. 22 1
      app/src/com/sheishuo/app/core_module/sheishuo/view/ui/MoreGroupsInTheAreaActivity.java
  28. 20 1
      app/src/com/sheishuo/app/core_module/sheishuo/view/ui/NearbyGroupActivity.java
  29. 12 12
      app/src/com/sheishuo/app/core_module/sheishuo/view/ui/TeamSettingsActivity.java
  30. 14 1
      app/src/com/sheishuo/app/core_module/trade/view/ui/activity/TradeSearchActivity.java
  31. 1 6
      app/src/com/sheishuo/app/impl/SheishuoTeamMessageActivity.java
  32. 98 0
      app/src/com/sheishuo/app/main/activity/CircleMessageActivity.java
  33. 13 0
      app/src/com/sheishuo/app/main/activity/MainActivity.java
  34. 5 0
      app/src/com/sheishuo/app/main/activity/RequestActivity.java
  35. 16 15
      app/src/com/sheishuo/app/main/adapter/AreaGroupsAdapter.java
  36. 32 22
      app/src/com/sheishuo/app/main/adapter/CircleListAdapter.java
  37. 119 0
      app/src/com/sheishuo/app/main/adapter/CircleMessageAdapter.java
  38. 20 1
      app/src/com/sheishuo/app/main/fragment/AreaGroupsFragment.java
  39. 155 2
      app/src/com/sheishuo/app/main/fragment/CircleOfFriendsFragment.java
  40. 54 3
      app/src/com/sheishuo/app/main/fragment/HomeFragment.java
  41. 5 8
      app/src/com/sheishuo/app/main/fragment/MineFragment.java
  42. 100 6
      app/src/com/sheishuo/app/main/fragment/TradeListFragment.java
  43. 6 2
      app/src/com/sheishuo/app/main/model/CircleModel.java
  44. 2 2
      app/src/com/sheishuo/app/main/presenter/CirclePresenter.java
  45. 6 1
      uikit/src/com/netease/nim/uikit/NimUIKit.java
  46. 18 15
      uikit/src/com/netease/nim/uikit/contact/core/viewholder/ContactHolder.java
  47. 19 12
      uikit/src/com/netease/nim/uikit/recent/holder/RecentViewHolder.java
  48. 2 0
      uikit/src/com/netease/nim/uikit/session/activity/IWatchPictureData.java
  49. 10 0
      uikit/src/com/netease/nim/uikit/session/activity/WatchPictureActivity.java
  50. 11 2
      uikit/src/com/netease/nim/uikit/session/activity/WatchPictureData.java
  51. 6 4
      uikit/src/com/netease/nim/uikit/session/helper/TeamNotificationHelper.java
  52. 8 7
      uikit/uikit.iml

+ 6 - 2
app/AndroidManifest.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.sheishuo.app">
+    package="com.shuishuo.app">
 
     <!-- 加入应用需要的权限 -->
     <!-- 网络相关 -->
@@ -68,7 +68,7 @@
         <!-- 7b8c319e77664d91d28520b83840b221 -->
         <meta-data
             android:name="com.netease.nim.appKey"
-            android:value="7b8c319e77664d91d28520b83840b221" />
+            android:value="1bee11fdc6befd6fd447d30cdff96c4a" />
 
         <uses-library
             android:name="com.google.android.maps"
@@ -621,6 +621,10 @@
         <activity
             android:name=".main.activity.RequestActivity"
             android:label="@string/title_activity_request"
+            android:theme="@style/AppTheme.NoActionBar" />
+        <activity
+            android:name=".main.activity.CircleMessageActivity"
+            android:label="@string/title_activity_circle_message"
             android:theme="@style/AppTheme.NoActionBar"></activity>
     </application>
 

+ 16 - 8
app/app.iml

@@ -59,13 +59,6 @@
       <sourceFolder url="file://$MODULE_DIR$/assets" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
@@ -73,6 +66,13 @@
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
@@ -87,6 +87,7 @@
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/multi-dex" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard-rules" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />
@@ -106,13 +107,13 @@
     <orderEntry type="library" exported="" name="constraint-layout-1.0.2" level="project" />
     <orderEntry type="library" exported="" name="transition-25.3.1" level="project" />
     <orderEntry type="library" exported="" name="video_effect" level="project" />
-    <orderEntry type="library" exported="" name="crashreport-2.6.5" level="project" />
     <orderEntry type="library" exported="" name="design-25.3.1" level="project" />
     <orderEntry type="library" exported="" name="support-core-ui-25.3.1" level="project" />
     <orderEntry type="library" exported="" scope="TEST" name="runtime-no-op-0.8.7" level="project" />
     <orderEntry type="library" exported="" name="cardview-v7-25.1.1" level="project" />
     <orderEntry type="library" exported="" name="rxandroid-2.0.1" level="project" />
     <orderEntry type="library" exported="" name="HMS-SDK-2.4.0.300-" level="project" />
+    <orderEntry type="library" exported="" name="crashreport-2.6.6.1" level="project" />
     <orderEntry type="library" exported="" name="jsbridge-1.3.1" level="project" />
     <orderEntry type="library" exported="" name="Android_Location_V1.3.1" level="project" />
     <orderEntry type="library" exported="" name="support-core-utils-25.3.1" level="project" />
@@ -146,5 +147,12 @@
     <orderEntry type="library" exported="" name="support-compat-25.3.1" level="project" />
     <orderEntry type="library" exported="" name="animated-vector-drawable-25.3.1" level="project" />
     <orderEntry type="module" module-name="uikit" exported="" />
+    <orderEntry type="library" exported="" name="java-json" level="project" />
+    <orderEntry type="library" exported="" name="renderscript-v8" level="project" />
+    <orderEntry type="library" exported="" name="glide-3.7.0" level="project" />
+    <orderEntry type="library" exported="" name="nim-avchat-4.0.0" level="project" />
+    <orderEntry type="library" exported="" name="nim-basesdk-4.0.0" level="project" />
+    <orderEntry type="library" exported="" name="fastjson-1.1.34.android" level="project" />
+    <orderEntry type="library" exported="" name="nim-lucene-4.0.0" level="project" />
   </component>
 </module>

+ 7 - 4
app/build.gradle

@@ -14,7 +14,7 @@ android {
     buildToolsVersion '25.0.3'
 
     defaultConfig {
-        applicationId "com.sheishuo.app"
+        applicationId "com.shuishuo.app"
         minSdkVersion rootProject.ext.minSdkVersion
         targetSdkVersion rootProject.ext.targetSdkVersion
         buildConfigField "String", "GIT_REVISION", "\"${getGitVersion()}\""
@@ -27,6 +27,8 @@ android {
         ndk {
             abiFilters "arm64-v8a", "armeabi-v7a", "x86", "x86_64"
         }
+
+
     }
 
     signingConfigs {
@@ -35,6 +37,10 @@ android {
             storePassword 'android'
             keyAlias 'androiddebugkey'
             keyPassword 'android'
+//            storeFile file('sheishuo.keystore')
+//            storePassword 'SheiShuo2017'
+//            keyAlias 'sheishuo'
+//            keyPassword 'SheiShuo2017'
         }
 
         release {
@@ -50,7 +56,6 @@ android {
             signingConfig signingConfigs.debug
             manifestPlaceholders = [AMAP_KEY: "318efe70b54fb682a980706e8680382f"]
         }
-
         release {
             shrinkResources true
             minifyEnabled true
@@ -116,8 +121,6 @@ dependencies {
     //debugCompile project(':plugins:sf')
     //CardView
     compile files('libs/alipaySdk-20170710.jar')
-
-
     compile 'com.netease.nimlib:jsbridge:1.3.1'
     compile 'com.android.support:multidex:1.0.1'
     compile 'com.android.support:support-annotations:25.3.1'

+ 18 - 0
app/res/layout/activity_circle_message.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <com.sheishuo.app.common.views.BaseToolbar
+        android:id="@+id/toolbar"
+        style="@style/fullToolbarStyle"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content" />
+
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/circle_message_list_layout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+</LinearLayout>

+ 1 - 0
app/res/layout/circle_details.xml

@@ -165,6 +165,7 @@
                         android:paddingTop="8dp">
 
                         <LinearLayout
+                            android:id="@+id/circle_details_local_layout"
                             android:layout_width="wrap_content"
                             android:layout_height="wrap_content"
                             android:background="@drawable/location_btn_bg"

+ 1 - 0
app/res/layout/circle_item.xml

@@ -78,6 +78,7 @@
                     android:paddingTop="5dp">
 
                     <LinearLayout
+                        android:id="@+id/circle_local_layout"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:background="@drawable/location_btn_bg"

+ 37 - 0
app/res/layout/circle_of_friends_fragment.xml

@@ -110,6 +110,43 @@
         app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
 
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:orientation="vertical">
+
+            <LinearLayout
+                android:id="@+id/circle_unread_layout"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="20dp"
+                android:background="@color/cardview_dark_background"
+                android:gravity="center"
+                android:orientation="horizontal"
+                android:paddingBottom="5dp"
+                android:paddingLeft="10dp"
+                android:paddingRight="10dp"
+                android:paddingTop="5dp">
+
+                <com.netease.nim.uikit.common.ui.imageview.HeadImageView
+                    android:id="@+id/circle_unread_head"
+                    android:layout_width="24dp"
+                    android:layout_height="24dp"
+                    android:src="@drawable/nim_avatar_default" />
+
+                <TextView
+                    android:id="@+id/circle_unread_txt"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:padding="5dp"
+                    android:text="1条新消息"
+                    android:textColor="@color/white"
+                    android:textSize="14sp" />
+
+            </LinearLayout>
+        </LinearLayout>
+
         <android.support.v7.widget.RecyclerView
             android:id="@+id/circle_recyclerview"
             android:layout_width="match_parent"

+ 11 - 0
app/res/layout/content_circle_message.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    app:layout_behavior="@string/appbar_scrolling_view_behavior"
+    tools:context="com.sheishuo.app.main.activity.CircleMessageActivity"
+    tools:showIn="@layout/activity_circle_message">
+
+</android.support.constraint.ConstraintLayout>

+ 88 - 0
app/res/layout/item_circle_message_layout.xml

@@ -0,0 +1,88 @@
+<?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"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+
+    <RelativeLayout
+        android:id="@+id/item_circle_msg_layout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:padding="8dp">
+
+        <com.netease.nim.uikit.common.ui.imageview.HeadImageView
+            android:id="@+id/item_circle_msg_avatar"
+            android:layout_width="48dp"
+            android:layout_height="48dp"
+            android:src="@drawable/nim_avatar_default"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+
+        <TextView
+            android:id="@+id/item_circle_msg_nickname"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="10dp"
+            android:layout_toRightOf="@+id/item_circle_msg_avatar"
+            android:text="用户昵称"
+            android:textColor="@color/blue"
+            app:layout_constraintLeft_toRightOf="@+id/item_circle_msg_avatar"
+            app:layout_constraintTop_toTopOf="@+id/item_circle_msg_avatar" />
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="10dp"
+            android:layout_marginTop="18dp"
+            android:layout_toRightOf="@+id/item_circle_msg_avatar"
+            android:gravity="center_vertical"
+            android:orientation="horizontal">
+
+            <ImageView
+                android:id="@+id/item_circle_msg_like"
+                android:layout_width="14dp"
+                android:layout_height="14dp"
+                android:layout_weight="1"
+                app:srcCompat="@drawable/circe_likes_user" />
+
+            <TextView
+                android:id="@+id/item_circle_msg_comm"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="TextView"
+                android:textColor="@color/black" />
+        </LinearLayout>
+
+        <TextView
+            android:id="@+id/item_circle_msg_time"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="10dp"
+            android:layout_marginTop="36dp"
+            android:layout_toRightOf="@+id/item_circle_msg_avatar"
+            android:text="手机通讯录XXX"
+            android:textSize="12sp"
+            app:layout_constraintLeft_toLeftOf="@+id/item_circle_msg_nickname"
+            app:layout_constraintTop_toBottomOf="@+id/item_circle_msg_nickname" />
+
+        <ImageView
+            android:id="@+id/item_circle_msg_thumb"
+            android:layout_width="48dp"
+            android:layout_height="48dp"
+            android:layout_alignParentRight="true"
+            app:srcCompat="@drawable/chat_01_unpressed" />
+
+    </RelativeLayout>
+
+    <View android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="@color/grey_light_light"/>
+
+
+</LinearLayout>

+ 6 - 6
app/res/layout/item_phone_contact_layout.xml

@@ -13,7 +13,7 @@
         android:padding="8dp">
 
     <com.netease.nim.uikit.common.ui.imageview.HeadImageView
-        android:id="@+id/item_phone_contact_avtar"
+        android:id="@+id/item_circle_msg_avatar"
         android:layout_width="48dp"
         android:layout_height="48dp"
         android:src="@drawable/nim_avatar_default"
@@ -22,13 +22,13 @@
 
 
     <TextView
-        android:id="@+id/item_phone_contact_nickname_TV"
+        android:id="@+id/item_circle_msg_nickname"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="用户昵称"
-        app:layout_constraintLeft_toRightOf="@+id/item_phone_contact_avtar"
+        app:layout_constraintLeft_toRightOf="@+id/item_circle_msg_avatar"
         android:layout_marginLeft="9dp"
-        app:layout_constraintTop_toTopOf="@+id/item_phone_contact_avtar"
+        app:layout_constraintTop_toTopOf="@+id/item_circle_msg_avatar"
         android:layout_marginTop="-8dp" />
 
     <TextView
@@ -37,9 +37,9 @@
         android:layout_height="wrap_content"
         android:text="手机通讯录XXX"
         android:layout_marginLeft="0dp"
-        app:layout_constraintLeft_toLeftOf="@+id/item_phone_contact_nickname_TV"
+        app:layout_constraintLeft_toLeftOf="@+id/item_circle_msg_nickname"
         android:layout_marginTop="14dp"
-        app:layout_constraintTop_toBottomOf="@+id/item_phone_contact_nickname_TV" />
+        app:layout_constraintTop_toBottomOf="@+id/item_circle_msg_nickname" />
 
     <Button
         android:id="@+id/item_phone_contact_add_friends_btn"

+ 3 - 1
app/res/layout/trade_list_search.xml

@@ -29,10 +29,12 @@
             android:textColorHint="@color/white"
             android:textColor="@color/white">
         </EditText>
+
         <ImageView
+            android:id="@+id/trade_list_search_icon"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:src="@drawable/ic_action_search"/>
+            android:src="@drawable/ic_action_search" />
 
         <TextView
             android:id="@+id/trade_list_search"

File diff suppressed because it is too large
+ 0 - 0
app/res/values/strings.xml


+ 2 - 0
app/src/com/sheishuo/app/SheishuoApplication.java

@@ -17,6 +17,7 @@ import android.view.View;
 import com.netease.nim.uikit.ContextCache;
 import com.netease.nim.uikit.common.ui.dialog.DialogMaker;
 import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper;
+import com.netease.nim.uikit.common.util.storage.StorageUtil;
 import com.sheishuo.app.avchat.AVChatProfile;
 import com.sheishuo.app.common.util.location.CityDataHelper;
 import com.sheishuo.app.config.preference.UserPreferences;
@@ -339,6 +340,7 @@ public class SheishuoApplication extends Application {
     }
 
     private void initUIKit() {
+
         // 初始化,使用 uikit 默认的用户信息提供者
         NimUIKit.init(this);
 

+ 7 - 0
app/src/com/sheishuo/app/cache/AccountCache.java

@@ -20,6 +20,13 @@ public class AccountCache{
         AccountCache.account =account;
     }
 
+    public static String getId()
+    {
+        if(account != null)
+            return account.getId();
+        return "0";
+    }
+
     public static LoginBean.DBean getAccount(){
         return account;
     }

+ 9 - 0
app/src/com/sheishuo/app/common/beans/CircleBean.java

@@ -67,6 +67,7 @@ public class CircleBean implements Serializable{
             private String id;
             private String user_id;
             private String local;
+            private String show_local;
             private String msg;
             private String pic;
             private int views;
@@ -105,6 +106,14 @@ public class CircleBean implements Serializable{
                 this.local = local;
             }
 
+            public String getShow_local() {
+                return show_local;
+            }
+
+            public void setShow_local(String show_local) {
+                this.show_local = show_local;
+            }
+
             public String getMsg() {
                 return msg;
             }

File diff suppressed because it is too large
+ 14 - 0
app/src/com/sheishuo/app/common/beans/CircleUnreadBean.java


+ 18 - 0
app/src/com/sheishuo/app/common/beans/SocialInfoBean.java

@@ -61,6 +61,8 @@ public class SocialInfoBean {
     private String real_name;
     private String id_number;
     private String social_banner;
+    private String social_last_like;
+    private String social_last_comment;
     private String add_verify;
     private String find_mobile;
     private String find_id;
@@ -236,6 +238,22 @@ public class SocialInfoBean {
         this.social_banner = social_banner;
     }
 
+    public String getSocial_last_like() {
+        return social_last_like;
+    }
+
+    public void setSocial_last_like(String social_last_like) {
+        this.social_last_like = social_last_like;
+    }
+
+    public String getSocial_last_comment() {
+        return social_last_comment;
+    }
+
+    public void setSocial_last_comment(String social_last_comment) {
+        this.social_last_comment = social_last_comment;
+    }
+
     public String getAdd_verify() {
         return add_verify;
     }

+ 6 - 1
app/src/com/sheishuo/app/common/util/net/INet.java

@@ -33,7 +33,7 @@ public interface INet {
     void getSocialInfo(String targetID, ResponseCallback callback);
     void searchInfo(String targetId, ResponseCallback callback);
     void getSocialComment(String id, int page, ResponseCallback callback);
-    void socialLike(String id, ResponseCallback callback);
+    void socialLike(String id, boolean like, ResponseCallback callback);
     void deleteSocial(String id, ResponseCallback callback);
     void getCityDataList(ResponseCallback callback);
     void getNearbyPeople(String userId,String page,ResponseCallback callback);
@@ -69,6 +69,11 @@ public interface INet {
     void followList(ResponseCallback callback);
     void befollowedList(ResponseCallback callback);
 
+    //social
+    void socialUnreadList(String lastLikeId, String lastCommId, ResponseCallback callback);
+    void socialUnreadUpdate(String lastLikeId, String lastCommId);
+    void circleInfo(String id, ResponseCallback callback);
+
     //friend request
     void teamInvite(String teamId, List<String> userIds, String msg, ResponseCallback callback);
     void requestList(ResponseCallback callback);

+ 105 - 2
app/src/com/sheishuo/app/common/util/net/NetImpl.java

@@ -20,6 +20,7 @@ import com.sheishuo.app.cache.HobbyCache;
 import com.sheishuo.app.cache.SocialInfoCache;
 import com.sheishuo.app.common.beans.BeFollowedBean;
 import com.sheishuo.app.common.beans.CircleBean;
+import com.sheishuo.app.common.beans.CircleUnreadBean;
 import com.sheishuo.app.common.beans.CircleUserLikedBean;
 import com.sheishuo.app.common.beans.ContactRelationshipBean;
 import com.sheishuo.app.common.beans.GiftBean;
@@ -771,13 +772,14 @@ public class NetImpl implements INet {
 
 
     @Override
-    public void socialLike(final String id, final ResponseCallback callback) {
+    public void socialLike(final String id, final boolean like, final ResponseCallback callback) {
         new Thread(new Runnable() {
             @Override
             public void run() {
                 FormBody body = new FormBody.Builder()
                         .add("user_id", AccountCache.getAccount().getId())
                         .add("social_id", id)
+                        .add("like", like ? "1" : "0")
                         .build();
 
                 Request request = new Request.Builder()
@@ -788,6 +790,7 @@ public class NetImpl implements INet {
                 try{
                     Response response = client.newCall(request).execute();
                     String resultStr = response.body().string();
+                    Log.e("SocialLike", resultStr);
                     CircleUserLikedBean likedBean = new Gson().fromJson(resultStr, CircleUserLikedBean.class);
                     callback.onSuccess(likedBean);
                 }catch (Exception e){
@@ -1676,7 +1679,7 @@ public class NetImpl implements INet {
 
                     Request request = new Request.Builder()
                             .post(body)
-                            .url(TEAM_INVITE)
+                            .url(TEAM_SYNC)
                             .build();
 
                     Response response = client.newCall(request).execute();
@@ -1934,4 +1937,104 @@ public class NetImpl implements INet {
             }
         }).start();
     }
+
+    @Override
+    public void socialUnreadList(final String lastLikeId, final String lastCommId, final ResponseCallback callback) {
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                try{
+                    FormBody body = new FormBody.Builder()
+                            .add("user_id", AccountCache.getAccount().getId())
+                            .add("last_like", lastLikeId)
+                            .add("last_comm", lastCommId)
+                            .build();
+
+                    Request request = new Request.Builder()
+                            .post(body)
+                            .url(CIRCLE_UNREAD)
+                            .build();
+
+                    Response response = client.newCall(request).execute();
+                    if (200 == response.code()){
+                        String result = response.body().string();
+//                        Log.e("UnreadList", result);
+                        CircleUnreadBean bean = gson.fromJson(result, CircleUnreadBean.class);
+                        callback.onSuccess(bean);
+                    }else {
+                        callback.onFailed(null);
+                    }
+
+                }catch (Exception e){
+                    e.printStackTrace();
+                    callback.onFailed(null);
+                }
+            }
+        }).start();
+    }
+
+    @Override
+    public void socialUnreadUpdate(final String lastLikeId, final String lastCommId) {
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                try{
+                    FormBody body = new FormBody.Builder()
+                            .add("user_id", AccountCache.getAccount().getId())
+                            .add("social_last_like", lastLikeId)
+                            .add("social_last_comment", lastCommId)
+                            .build();
+
+                    Request request = new Request.Builder()
+                            .post(body)
+                            .url(UPDATE_SOCIAL_INFO)
+                            .build();
+
+                    Response response = client.newCall(request).execute();
+                    if (200 == response.code()){
+                        Log.e("socialUnreadUpdate", response.body().string());
+                    }
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }
+        }).start();
+    }
+
+    @Override
+    public void circleInfo(final String id, final ResponseCallback callback) {
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                try{
+                    FormBody body = new FormBody.Builder()
+                            .add("user_id", AccountCache.getAccount().getId())
+                            .add("social_id", id)
+                            .build();
+
+                    Request request = new Request.Builder()
+                            .post(body)
+                            .url(CIRCLE_INFO)
+                            .build();
+
+                    Response response = client.newCall(request).execute();
+                    if (200 == response.code()){
+                        String result = response.body().string();
+//                        Log.e("CircleInfoResult", result);
+                        JSONObject jsonObject = new JSONObject(result);
+                        String beanStr = jsonObject.getJSONObject("d").getJSONObject("social").toString();
+//                        Log.e("CircleInfo", beanStr);
+                        CircleBean.DBean.ListBean bean = gson.fromJson(beanStr, CircleBean.DBean.ListBean.class);
+                        callback.onSuccess(bean);
+                    }else {
+                        callback.onFailed(null);
+                    }
+
+                }catch (Exception e){
+                    e.printStackTrace();
+                    callback.onFailed(null);
+                }
+            }
+        }).start();
+    }
 }

+ 6 - 0
app/src/com/sheishuo/app/common/util/net/NetInfo.java

@@ -10,11 +10,13 @@ public class NetInfo {
     public final static String CHANGE_PWD = INDEX + "?m=who&c=index&a=pwd_update";
     public final static String GET_NEARBY_GROUP = INDEX + "?m=who&c=index&a=near_room";
     public final static String REMOVE_GROUP = INDEX + "?m=who&c=index&a=remove_room";
+
     public final static String CIRCLE_LIST = INDEX + "?m=who&c=social&a=lists";
     public final static String CIRCLE_USER_LIKED = INDEX + "?m=who&c=social&a=like";
     public final static String CIRCLE_COMMENT_LIST = INDEX + "?m=who&c=social&a=comment_list";
     public final static String CIRCLE_DELETE = INDEX + "?m=who&c=social&a=delete";
     public final static String NEW_TWEETING = INDEX + "?m=who&c=social&a=publish";
+
     public final static String GIFT_LIST = INDEX + "?m=who&c=index&a=gift_list";
     public final static String GET_CODE = INDEX + "?m=who&c=index&a=send_code";
     public final static String UPLOAD_IMG = INDEX + "?m=who&c=social&a=upload";
@@ -63,6 +65,10 @@ public class NetInfo {
     public final static String FETCH_ALIAS_URL = INDEX + "?m=who&c=social&a=fetch_alias";
     public final static String NICK_URL = INDEX + "?m=who&c=social&a=update_nick";
 
+    //social
+    public final static String CIRCLE_UNREAD = INDEX + "?m=who&c=social&a=unread_list";
+    public final static String CIRCLE_INFO = INDEX + "?m=who&c=social&a=info";
+
     //follow
     public final static String FOLLOW_OR_UNFOLLOW_USER = INDEX + "?m=who&c=social&a=follow";
     public final static String FOLLOW_LIST = INDEX + "?m=who&c=social&a=follows";

+ 81 - 26
app/src/com/sheishuo/app/core_module/circle/activity/CircleDetailsActivity.java

@@ -5,6 +5,7 @@ import android.content.DialogInterface;
 import android.content.Intent;
 import android.os.Bundle;
 import android.support.v7.app.AlertDialog;
+import android.text.Html;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.GridLayout;
@@ -17,6 +18,7 @@ import com.google.gson.Gson;
 import com.netease.nim.uikit.common.ui.imageview.HeadImageView;
 import com.netease.nim.uikit.session.activity.WatchPictureActivity;
 import com.sheishuo.app.R;
+import com.sheishuo.app.SheishuoApplication;
 import com.sheishuo.app.cache.AccountCache;
 import com.sheishuo.app.common.beans.CircleBean;
 import com.sheishuo.app.common.beans.CircleUserLikedBean;
@@ -46,6 +48,7 @@ import okhttp3.FormBody;
 public class CircleDetailsActivity extends SheishuoUI {
 
     public static final String DATA = "data";
+    public static final String ID = "id";
 
     private String TAG = this.getClass().getSimpleName();
     private Context context = this;
@@ -64,7 +67,7 @@ public class CircleDetailsActivity extends SheishuoUI {
 
     private PartlyHighLightTextView contentTV;
 
-    private LinearLayout likedUserAvatarLayout;
+    private LinearLayout likedUserAvatarLayout, localContainer;
 
     private INet net = new NetImpl();
     private int lastId = 0;
@@ -79,9 +82,42 @@ public class CircleDetailsActivity extends SheishuoUI {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.circle_details);
-        bean = (CircleBean.DBean.ListBean) getIntent().getSerializableExtra(DATA);
+
         findViews();
-        init();
+        toolbar.setTitle("详情");
+        toolbar.setBackOnClickListener(new View.OnClickListener(){
+            @Override
+            public void onClick(View v) {
+                finish();
+            }
+        });
+
+
+        if(getIntent().hasExtra(DATA)) {
+            bean = (CircleBean.DBean.ListBean) getIntent().getSerializableExtra(DATA);
+            init();
+        }
+        else
+        {
+            String socialId = getIntent().getStringExtra(ID);
+            net.circleInfo(socialId, new ResponseCallback() {
+                @Override
+                public void onSuccess(Object object) {
+                    bean = (CircleBean.DBean.ListBean) object;
+                    getHandler().post(new Runnable() {
+                        @Override
+                        public void run() {
+                            init();
+                        }
+                    });
+                }
+
+                @Override
+                public void onFailed(String error) {
+
+                }
+            });
+        }
     }
 
     void findViews(){
@@ -98,6 +134,7 @@ public class CircleDetailsActivity extends SheishuoUI {
         commentTV = findView(R.id.circle_details_comment_num);
         commentIcon = findView(R.id.circle_details_comment_icon);
         contentTV = findView(R.id.circle_details_content);
+        localContainer = findView(R.id.circle_details_local_layout);
         locationTV = findView(R.id.circle_details_local);
 
         imgGridView = findView(R.id.circle_details_imgs_grid);
@@ -110,13 +147,7 @@ public class CircleDetailsActivity extends SheishuoUI {
 
     void init(){
 
-        toolbar.setTitle("详情");
-        toolbar.setBackOnClickListener(new View.OnClickListener(){
-            @Override
-            public void onClick(View v) {
-                finish();
-            }
-        });
+
 
         //加载头像
         if (getUserInfo(bean.getUser_id()).getAvatar() != null){
@@ -167,7 +198,7 @@ public class CircleDetailsActivity extends SheishuoUI {
         commentTV.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                Intent intent = new Intent(context,NewCommentActivity.class);
+                Intent intent = new Intent(context, NewCommentActivity.class);
                 intent.putExtra(NewCommentActivity.SOCIAL_ID, bean);
                 startActivityForResult(intent, 0);
             }
@@ -176,7 +207,7 @@ public class CircleDetailsActivity extends SheishuoUI {
         commentIcon.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                Intent intent = new Intent(context,NewCommentActivity.class);
+                Intent intent = new Intent(context, NewCommentActivity.class);
                 intent.putExtra(NewCommentActivity.SOCIAL_ID, bean);
                 startActivityForResult(intent, 0);
             }
@@ -231,6 +262,7 @@ public class CircleDetailsActivity extends SheishuoUI {
         }
 
         locationTV.setText(bean.getLocal());
+        localContainer.setVisibility(bean.getShow_local().equals("1") ? View.VISIBLE : View.GONE);
 
         likedNumTV.setOnClickListener(new View.OnClickListener() {
             @Override
@@ -257,7 +289,6 @@ public class CircleDetailsActivity extends SheishuoUI {
     private void showLikedUsers()
     {
         likedUserAvatarLayout.removeAllViewsInLayout();
-        liked = false;
 
         //显示点赞用户头像
         for (String userId : bean.getLike_users()){
@@ -279,10 +310,14 @@ public class CircleDetailsActivity extends SheishuoUI {
             }
 
             likedUserAvatarLayout.addView(avatarView);
+        }
 
-            if(userId.equals(AccountCache.getAccount().getId())) {
-                liked = true;
-            }
+        if (bean.getLiked().equals("1")){
+            liked = true;
+            likedIcon.setImageResource(R.drawable.circle_liked);
+        }else {
+            liked = false;
+            likedIcon.setImageResource(R.drawable.circle_likes);
         }
 
         //显示点赞数
@@ -330,7 +365,7 @@ public class CircleDetailsActivity extends SheishuoUI {
 
 
     //动态添加Comment
-    private View createComment(CircleBean.DBean.ListBean.Comment comment){
+    private View createComment(final CircleBean.DBean.ListBean.Comment comment){
         LinearLayout commentView = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.circle_details_comment_layout,null);
         HeadImageView commentAvatar = (HeadImageView) commentView.findViewById(R.id.circle_details_comment_layout_avatar);
         TextView commentName = (TextView) commentView.findViewById(R.id.circle_details_comment_layout_name);
@@ -343,13 +378,32 @@ public class CircleDetailsActivity extends SheishuoUI {
                     .into(commentAvatar);
         }
 
-        commentName.setText(getName(comment.getUser_id()));
-
+        if(comment.getReply_id().equals("0")) {
+            commentName.setText(getName(comment.getUser_id()));
+        }
+        else
+        {
+            commentName.setText(Html.fromHtml("<font color=\"#337a9b\">"
+                    + getName(comment.getUser_id())
+                    + "</font> 回复 "
+                    + "<font color=\"#337a9b\">"
+                    + getName(comment.getReply_id())
+                    + "</font> "));
+        }
         commentDate.setText(comment.getInputtime());
-
         commentContent.setText(comment.getComment());
 
 
+        commentView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                Intent intent = new Intent(context, NewCommentActivity.class);
+                intent.putExtra(NewCommentActivity.SOCIAL_ID, bean);
+                intent.putExtra(NewCommentActivity.REPLY_ID, comment.getUser_id());
+                CircleDetailsActivity.this.startActivityForResult(intent, 0);
+            }
+        });
+
         return commentView;
 
     }
@@ -405,20 +459,21 @@ public class CircleDetailsActivity extends SheishuoUI {
 
     public void like(){
 
-        if(liked)
-        {
-            showToast(context, "已赞过了");
-            return;
-        }
+//        if(liked)
+//        {
+//            showToast(context, "已赞过了");
+//            return;
+//        }
 
         final String social_id = bean.getId();
 
-        net.socialLike(social_id, new ResponseCallback() {
+        net.socialLike(social_id, !liked, new ResponseCallback() {
             @Override
             public void onSuccess(Object object) {
                 CircleUserLikedBean likedBean = (CircleUserLikedBean) object;
                 bean.setLike_users(likedBean.getD().getLike_users());
                 bean.setLikes(likedBean.getD().getLikes());
+                bean.setLiked(liked ? "0" : "1");
                 getHandler().post(new Runnable() {
                     @Override
                     public void run() {

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

@@ -198,8 +198,12 @@ public class CirclePersonActivity extends SheishuoUI {
                         @Override
                         public void onLikedClick(View view) {
                             CircleBean.DBean.ListBean bean = (CircleBean.DBean.ListBean) view.getTag();
+                            if(bean.getLiked().equals("1"))
+                                bean.getLike_users().add(AccountCache.getAccount().getId());
+                            else
+                                bean.getLike_users().remove(AccountCache.getAccount().getId());
                             Log.e(TAG,"点赞的朋友圈ID === " + bean.getId());
-                            presenter.onUserLiked(bean.getId());
+                            presenter.onUserLiked(bean.getId(), bean.getLiked().equals("1"));
                         }
 
                         @Override

+ 13 - 0
app/src/com/sheishuo/app/core_module/circle/activity/NewCommentActivity.java

@@ -11,6 +11,7 @@ import android.widget.ImageView;
 import android.widget.LinearLayout;
 
 import com.sheishuo.app.R;
+import com.sheishuo.app.cache.SocialInfoCache;
 import com.sheishuo.app.common.beans.CircleBean;
 import com.sheishuo.app.common.util.net.INet;
 import com.sheishuo.app.common.util.net.NetImpl;
@@ -54,6 +55,8 @@ public class NewCommentActivity extends SheishuoUI{
         String replyIdStr = getIntent().getStringExtra(REPLY_ID);
         if (replyIdStr != null)
             replyId = Integer.parseInt(replyIdStr);
+        else
+            replyId = 0;
 
         findViews();
         init();
@@ -75,6 +78,16 @@ public class NewCommentActivity extends SheishuoUI{
             }
         });
 
+        if(replyId > 0)
+        {
+            String nick = SocialInfoCache.getNick(""+replyId);
+            replyET.setHint("回复"+nick);
+        }
+        else
+        {
+            replyET.setHint("我要评论");
+        }
+
         Log.e(TAG,SOCIAL_ID + ":" + socialId);
         replyBtn.setOnClickListener(new View.OnClickListener() {
             @Override

+ 2 - 3
app/src/com/sheishuo/app/core_module/friends/adapter/PhoneContactItemAdapter.java

@@ -14,7 +14,6 @@ import android.widget.TextView;
 
 import com.bumptech.glide.Glide;
 import com.netease.nim.uikit.common.ui.imageview.HeadImageView;
-import com.netease.nim.uikit.session.module.Container;
 import com.netease.nimlib.sdk.NIMClient;
 import com.netease.nimlib.sdk.RequestCallback;
 import com.netease.nimlib.sdk.uinfo.UserService;
@@ -176,8 +175,8 @@ public class PhoneContactItemAdapter extends RecyclerView.Adapter<PhoneContactIt
         Button addFriendBtn;
         public PhoneContactItemViewHolder(View view) {
             super(view);
-            avatar = (HeadImageView) view.findViewById(R.id.item_phone_contact_avtar);
-            nickname = (TextView) view.findViewById(R.id.item_phone_contact_nickname_TV);
+            avatar = (HeadImageView) view.findViewById(R.id.item_circle_msg_avatar);
+            nickname = (TextView) view.findViewById(R.id.item_circle_msg_nickname);
             name = (TextView) view.findViewById(R.id.item_phone_contact_name_TV);
             addFriendBtn = (Button) view.findViewById(R.id.item_phone_contact_add_friends_btn);
         }

+ 2 - 0
app/src/com/sheishuo/app/core_module/mine/view/ui/activity/AboutActivity.java

@@ -5,6 +5,7 @@ import android.content.Intent;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.View;
 import android.webkit.WebView;
 import android.widget.TextView;
@@ -56,6 +57,7 @@ public class AboutActivity extends SheishuoUI {
         PackageManager pm = context.getPackageManager();
         PackageInfo pi = null; //pm.getPackageInfo(context.getPackageName(), 0);
         try {
+            Log.e("PackageName", context.getPackageName());
             pi = pm.getPackageInfo(context.getPackageName(), 0);
             versionTV.setText(pi.versionName+"   build "+pi.versionCode);
         } catch (PackageManager.NameNotFoundException e) {

+ 21 - 2
app/src/com/sheishuo/app/core_module/mine/view/ui/activity/PersonalSettingsActivity.java

@@ -16,6 +16,7 @@ import android.widget.Switch;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.bigkoo.pickerview.OptionsPickerView;
 import com.bumptech.glide.Glide;
 import com.netease.nim.uikit.ContextCache;
 import com.netease.nim.uikit.common.media.picker.PickImageHelper;
@@ -39,6 +40,7 @@ import com.sheishuo.app.R;
 import com.sheishuo.app.cache.AccountCache;
 import com.sheishuo.app.cache.SocialInfoCache;
 import com.sheishuo.app.common.beans.SocialInfoBean;
+import com.sheishuo.app.common.util.location.CityDataHelper;
 import com.sheishuo.app.common.util.net.INet;
 import com.sheishuo.app.common.util.net.NetImpl;
 import com.sheishuo.app.common.util.net.ResponseCallback;
@@ -166,7 +168,7 @@ public class PersonalSettingsActivity extends SheishuoUI {
                         @Override
                         public void run() {
                             EasyAlertDialogHelper.showOneButtonDiolag(PersonalSettingsActivity.this, "提示",
-                                    error, "确认", false, null);
+                                    "更新成功", "确认", false, null);
                         }
                     });
                 }
@@ -322,7 +324,24 @@ public class PersonalSettingsActivity extends SheishuoUI {
         locationLayout.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                startActivityForResult(new Intent(context, LocationSelectActivity.class), 0);
+                //startActivityForResult(new Intent(context, LocationSelectActivity.class), 0);
+                CityDataHelper.showPickerView(context, new OptionsPickerView.OnOptionsSelectListener() {
+                    @Override
+                    public void onOptionsSelect(int options1, int options2, int options3, View v) {
+                        String province = CityDataHelper.getAllProvince().get(options1);
+                        String city = CityDataHelper.getAllCity().get(options1).get(options2);
+                        String area = CityDataHelper.getAllDistrict().get(options1).get(options2).get(options3);
+
+                        //更新地理位置
+                        bean.setProvince(province);
+                        bean.setCity(city);
+                        bean.setDistrict(area);
+
+                        locationTV.setText(area);
+
+                        net.updateLocation(bean.getProvince(), bean.getCity(), bean.getDistrict(), callback);
+                    }
+                });
             }
         });
 

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

@@ -9,13 +9,16 @@ import android.view.View;
 
 import com.netease.nim.uikit.NimUIKit;
 import com.netease.nimlib.sdk.NIMClient;
+import com.netease.nimlib.sdk.RequestCallback;
 import com.netease.nimlib.sdk.team.TeamService;
+import com.netease.nimlib.sdk.team.model.Team;
 import com.sheishuo.app.R;
 import com.sheishuo.app.common.util.location.CityDataHelper;
 import com.sheishuo.app.common.util.net.INet;
 import com.sheishuo.app.common.util.net.NetImpl;
 import com.sheishuo.app.common.util.net.ResponseCallback;
 import com.sheishuo.app.common.views.BaseToolbar;
+import com.sheishuo.app.impl.SheishuoTeamMessageActivity;
 import com.sheishuo.app.main.adapter.AreaGroupsAdapter;
 import com.sheishuo.app.main.adapter.OnItemClickListener;
 import com.sheishuo.app.impl.SheishuoUI;
@@ -77,7 +80,25 @@ public class MoreGroupsInTheAreaActivity extends SheishuoUI {
             public void onItemClick(View view) {
                 String groupId = (String) view.getTag();
                 if (!NIMClient.getService(TeamService.class).queryTeamBlock(groupId).isMyTeam()) {
-                    NIMClient.getService(TeamService.class).applyJoinTeam(groupId, "申请入群");
+                    NIMClient.getService(TeamService.class).applyJoinTeam(groupId, "申请入群").setCallback(new RequestCallback<Team>() {
+                        @Override
+                        public void onSuccess(Team team) {
+                            if(SheishuoTeamMessageActivity.isSystemTeam(team))
+                            {
+                                NIMClient.getService(TeamService.class).muteTeam(team.getId(), true);
+                            }
+                        }
+
+                        @Override
+                        public void onFailed(int i) {
+
+                        }
+
+                        @Override
+                        public void onException(Throwable throwable) {
+
+                        }
+                    });
                 }
                 NimUIKit.startTeamSession(context, groupId);
 

+ 20 - 1
app/src/com/sheishuo/app/core_module/sheishuo/view/ui/NearbyGroupActivity.java

@@ -21,6 +21,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.impl.SheishuoTeamMessageActivity;
 import com.sheishuo.app.impl.SheishuoUI;
 import com.sheishuo.app.impl.SheishuoUIKit;
 import com.sheishuo.app.main.adapter.AreaGroupsAdapter;
@@ -159,7 +160,25 @@ public class NearbyGroupActivity extends SheishuoUI {
                     public void onItemClick(View view) {
                         String groupId = (String) view.getTag();
                         if (!NIMClient.getService(TeamService.class).queryTeamBlock(groupId).isMyTeam()) {
-                            NIMClient.getService(TeamService.class).applyJoinTeam(groupId, "申请入群");
+                            NIMClient.getService(TeamService.class).applyJoinTeam(groupId, "申请入群").setCallback(new RequestCallback<Team>() {
+                                @Override
+                                public void onSuccess(Team team) {
+                                    if(SheishuoTeamMessageActivity.isSystemTeam(team))
+                                    {
+                                        NIMClient.getService(TeamService.class).muteTeam(team.getId(), true);
+                                    }
+                                }
+
+                                @Override
+                                public void onFailed(int i) {
+
+                                }
+
+                                @Override
+                                public void onException(Throwable throwable) {
+
+                                }
+                            });
                         }
                         SheishuoUIKit.startTeamSession(context, (String) view.getTag());
                     }

+ 12 - 12
app/src/com/sheishuo/app/core_module/sheishuo/view/ui/TeamSettingsActivity.java

@@ -162,20 +162,20 @@ public class TeamSettingsActivity extends SheishuoUI implements View.OnClickList
 
         if(SheishuoTeamMessageActivity.isSystemTeam(team))
         {
-            if (team.getName().contains("国家")) {
-                Glide.with(context).load(R.drawable.group_country).into(teamAvatar);
-            } else if (team.getName().contains("市") || team.getName().contains("省")) {
-                Glide.with(context).load(R.drawable.group_province_city).into(teamAvatar);
-            } else if (team.getName().contains("区") || team.getName().contains("县")) {
-                Glide.with(context).load(R.drawable.group_district).into(teamAvatar);
-            } else {
-                if (team.getIcon().isEmpty()) {
-                    Glide.with(context).load(R.drawable.nim_avatar_group).into(teamAvatar);
+            if (team.getIcon().isEmpty()) {
+                if (team.getName().contains("国家")) {
+                    Glide.with(context).load(R.drawable.group_country).into(teamAvatar);
+                } else if (team.getName().contains("市") || team.getName().contains("省")) {
+                    Glide.with(context).load(R.drawable.group_province_city).into(teamAvatar);
+                } else if (team.getName().contains("区") || team.getName().contains("县")) {
+                    Glide.with(context).load(R.drawable.group_district).into(teamAvatar);
                 } else {
-                    Glide.with(context)
-                            .load(team.getIcon())
-                            .into(teamAvatar);
+                    Glide.with(context).load(R.drawable.nim_avatar_group).into(teamAvatar);
                 }
+            } else {
+                Glide.with(context)
+                        .load(team.getIcon())
+                        .into(teamAvatar);
             }
         }
         else

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

@@ -12,6 +12,7 @@ import android.view.KeyEvent;
 import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.EditText;
+import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
@@ -33,6 +34,7 @@ public class TradeSearchActivity extends SheishuoUI {
     public static final int RESULT_CODE = 3400;
     public static final String RESULT_CONTENT = "result_content";
     public static final String RESULT_KEY = "result_key";
+    public static final String DEFAULT_KEY = "default_key";
 
     private String TAG = this.getClass().getSimpleName();
 
@@ -41,7 +43,7 @@ public class TradeSearchActivity extends SheishuoUI {
     private LinearLayout parentLayout;
 
     private EditText searchET;
-
+    private ImageView searchIcon;
     private TextView searchTV;
 
     private INet net = new NetImpl();
@@ -52,13 +54,17 @@ public class TradeSearchActivity extends SheishuoUI {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.trade_list_search);
+        String defaultKey = getIntent().getStringExtra(DEFAULT_KEY);
         findViews();
         init();
+
+        searchET.setText(defaultKey);
     }
 
 
     void findViews(){
         parentLayout = findView(R.id.trade_list_search_parent_layout);
+        searchIcon = findView(R.id.trade_list_search_icon);
         searchET = findView(R.id.trade_list_search_ET);
         searchTV = findView(R.id.trade_list_search);
     }
@@ -86,6 +92,13 @@ public class TradeSearchActivity extends SheishuoUI {
             }
         }, 100);
 
+        searchIcon.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                searchTrade();
+            }
+        });
+
         searchET.setOnKeyListener(new View.OnKeyListener() {
             @Override
             public boolean onKey(View v, int keyCode, KeyEvent event) {

+ 1 - 6
app/src/com/sheishuo/app/impl/SheishuoTeamMessageActivity.java

@@ -461,12 +461,7 @@ public class SheishuoTeamMessageActivity extends TeamMessageActivity {
         if(team == null)
             return false;
 
-        if (Integer.parseInt(team.getCreator()) < 20000)
-        {
-            return true;
-        }
-
-        return false;
+        return isSystemTeam(team);
     }
 
 

+ 98 - 0
app/src/com/sheishuo/app/main/activity/CircleMessageActivity.java

@@ -0,0 +1,98 @@
+package com.sheishuo.app.main.activity;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.design.widget.FloatingActionButton;
+import android.support.design.widget.Snackbar;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.Toolbar;
+import android.text.Editable;
+import android.text.InputType;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.util.Log;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.Button;
+
+import com.netease.nim.uikit.common.ui.dialog.EasyEditDialog;
+import com.sheishuo.app.R;
+import com.sheishuo.app.common.beans.CircleUnreadBean;
+import com.sheishuo.app.common.beans.ContactRelationshipBean;
+import com.sheishuo.app.common.util.net.ResponseCallback;
+import com.sheishuo.app.common.views.BaseToolbar;
+import com.sheishuo.app.core_module.circle.activity.CircleDetailsActivity;
+import com.sheishuo.app.core_module.friends.activity.PhoneContactsActivity;
+import com.sheishuo.app.core_module.friends.adapter.PhoneContactItemAdapter;
+import com.sheishuo.app.impl.SheishuoUI;
+import com.sheishuo.app.main.adapter.CircleMessageAdapter;
+import com.sheishuo.app.main.adapter.OnItemClickListener;
+
+import java.util.List;
+
+public class CircleMessageActivity extends SheishuoUI {
+
+    public static String DATA = "data";
+
+    private Context context = this;
+
+    private BaseToolbar toolbar;
+    private RecyclerView recyclerView;
+    private CircleMessageAdapter adapter;
+    private List<CircleUnreadBean.DBean.ListBean> beanList;
+
+    private LinearLayoutManager layoutManager = new LinearLayoutManager(context);
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_circle_message);
+        beanList = (List<CircleUnreadBean.DBean.ListBean>) getIntent().getSerializableExtra(DATA);
+        findViews();
+        init();
+    }
+
+    void findViews(){
+        toolbar = findView(R.id.toolbar);
+        recyclerView = findView(R.id.circle_message_list_layout);
+    }
+
+    void init(){
+
+        toolbar.setTitle("新消息");
+        toolbar.setBackOnClickListener(new View.OnClickListener(){
+            @Override
+            public void onClick(View view)
+            {
+                finish();
+            }
+        });
+
+        adapter = new CircleMessageAdapter(context, beanList);
+        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
+        recyclerView.setLayoutManager(layoutManager);
+        recyclerView.setAdapter(adapter);
+        adapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(View view) {
+                CircleUnreadBean.DBean.ListBean listBean = (CircleUnreadBean.DBean.ListBean)view.getTag();
+                beanList.remove(listBean);
+                Log.e("onItemClick", listBean.getSocial_id());
+                Intent intent = new Intent(context, CircleDetailsActivity.class);
+                intent.putExtra(CircleDetailsActivity.ID, listBean.getSocial_id());
+                startActivityForResult(intent, 0);
+                getHandler().post(new Runnable() {
+                    @Override
+                    public void run() {
+                        adapter.notifyDataSetChanged();
+                    }
+                });
+            }
+        });
+    }
+
+}

+ 13 - 0
app/src/com/sheishuo/app/main/activity/MainActivity.java

@@ -8,6 +8,7 @@ import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.text.TextUtils;
 import android.util.Log;
+import android.view.KeyEvent;
 import android.widget.Toast;
 import android.widget.Toolbar;
 
@@ -267,6 +268,18 @@ public class MainActivity extends SheishuoUI {
     }
 
     @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
+            if(mainFragment != null && !mainFragment.onBackKeyDown())
+            {
+                return false;
+            }
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+
+
+    @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         Log.e(TAG,"onActivityResult " + requestCode + "    " + resultCode);
 

+ 5 - 0
app/src/com/sheishuo/app/main/activity/RequestActivity.java

@@ -25,6 +25,7 @@ import com.sheishuo.app.common.util.net.ResponseCallback;
 import com.sheishuo.app.common.views.BaseToolbar;
 import com.sheishuo.app.core_module.friends.activity.ContactsListActivity;
 import com.sheishuo.app.core_module.mine.view.ui.activity.UserInfoDetailActivity;
+import com.sheishuo.app.impl.SheishuoTeamMessageActivity;
 import com.sheishuo.app.impl.SheishuoUI;
 import com.sheishuo.app.impl.SheishuoUIKit;
 import com.sheishuo.app.main.adapter.RequestAdapter;
@@ -177,6 +178,10 @@ public class RequestActivity extends SheishuoUI {
                 @Override
                 public void onSuccess(Team team) {
                     makeToast("已经加入群"+team.getName());
+                    if(SheishuoTeamMessageActivity.isSystemTeam(team))
+                    {
+                        NIMClient.getService(TeamService.class).muteTeam(team.getId(), true);
+                    }
                     DialogMaker.showProgressDialog(context, "", false);
                     net.requestDelete(bean.getId(), new ResponseCallback() {
                         @Override

+ 16 - 15
app/src/com/sheishuo/app/main/adapter/AreaGroupsAdapter.java

@@ -73,25 +73,26 @@ public class AreaGroupsAdapter extends RecyclerView.Adapter<AreaGroupsAdapter.Ar
                 holder.groupName.setText(team.getName());
                 holder.groupMemberNum.setText(team.getMemberCount() + "人热聊中");
 
-                if (team.getName().contains("国")) {
-                    Glide.with(context).load(R.drawable.group_country).into(holder.groupIco);
-                } else if (team.getName().contains("市") || team.getName().contains("省")) {
-                    Glide.with(context).load(R.drawable.group_province_city)
-                            .into(holder.groupIco);
-                } else if (team.getName().contains("区") || team.getName().contains("县")) {
-                    Glide.with(context).load(R.drawable.group_district)
-                            .placeholder(R.drawable.group_district)
-                            .into(holder.groupIco);
-                } else {
-                    if (team.getIcon().isEmpty()) {
-                        Glide.with(context).load(R.drawable.nim_avatar_group).into(holder.groupIco);
-                    } else {
-                        Glide.with(context)
-                                .load(team.getIcon())
+                if (team.getIcon().isEmpty()) {
+                    if (team.getName().contains("国")) {
+                        Glide.with(context).load(R.drawable.group_country).into(holder.groupIco);
+                    } else if (team.getName().contains("市") || team.getName().contains("省")) {
+                        Glide.with(context).load(R.drawable.group_province_city)
+                                .into(holder.groupIco);
+                    } else if (team.getName().contains("区") || team.getName().contains("县")) {
+                        Glide.with(context).load(R.drawable.group_district)
+                                .placeholder(R.drawable.group_district)
                                 .into(holder.groupIco);
+                    }else {
+                        Glide.with(context).load(R.drawable.nim_avatar_group).into(holder.groupIco);
                     }
+                } else {
+                    Glide.with(context)
+                            .load(team.getIcon())
+                            .into(holder.groupIco);
                 }
 
+
             }
 
             @Override

+ 32 - 22
app/src/com/sheishuo/app/main/adapter/CircleListAdapter.java

@@ -105,6 +105,7 @@ public class CircleListAdapter  extends RecyclerView.Adapter<CircleListAdapter.C
         holder.usernameTV.setOnClickListener(this);
         holder.usernameTV.setTag(bean);
         holder.locationTV.setText(bean.getLocal());
+        holder.localContainer.setVisibility(bean.getShow_local().equals("1") ? View.VISIBLE : View.GONE);
 
         holder.deleteTV.setVisibility(bean.getUser_id().equals(AccountCache.getAccount().getId())? View.VISIBLE : View.GONE);
         holder.deleteTV.setOnClickListener(new View.OnClickListener() {
@@ -176,31 +177,32 @@ public class CircleListAdapter  extends RecyclerView.Adapter<CircleListAdapter.C
         //判断此条朋友圈是否已经点赞,并设置监听事件
         if (bean.getLiked().equals("1")){
             Glide.with(SheishuoApplication.getContext()).load(R.drawable.circle_liked).into(holder.likedImg);
-            holder.likedImg.setOnClickListener(null);
         }else {
             Glide.with(SheishuoApplication.getContext()).load(R.drawable.circle_likes).into(holder.likedImg);
+        }
 
-            holder.likedImg.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    Glide.with(SheishuoApplication.getContext()).load(R.drawable.circle_liked).into(holder.likedImg);
-                    int num = Integer.parseInt(holder.likesNumTV.getText().toString());
-
+        holder.likedImg.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
 
-                    //修改本地缓存
-                    num++;
-                    bean.setLikes(num);
+                int num = Integer.parseInt(holder.likesNumTV.getText().toString());
+                if (bean.getLiked().equals("1")){
+                    bean.setLiked("0");
+                    num--;
+                    Glide.with(SheishuoApplication.getContext()).load(R.drawable.circle_likes).into(holder.likedImg);
+                }else {
                     bean.setLiked("1");
-
-
-                    holder.likesNumTV.setText(String.valueOf(num));
-                    holder.likedImg.setOnClickListener(null);
-                    v.setTag(bean);
-                    listener.onLikedClick(v);
+                    num++;
+                    Glide.with(SheishuoApplication.getContext()).load(R.drawable.circle_liked).into(holder.likedImg);
                 }
-            });
 
-        }
+                bean.setLikes(num);
+                holder.likesNumTV.setText(String.valueOf(num));
+
+                v.setTag(bean);
+                listener.onLikedClick(v);
+            }
+        });
 
         //加载评论
         if (bean.getComments_list().size() > 0){
@@ -220,13 +222,20 @@ public class CircleListAdapter  extends RecyclerView.Adapter<CircleListAdapter.C
                     Glide.with(context).load(avatarUrl).into(imageView);
                 }
 
-
                 if (comment.getReply_id().equals("0")){
                     textView.setText(Html.fromHtml("<font color=\"#337a9b\">"
                             + getUserName(comment.getUser_id())
                             + "</font> "
                             + comment.getComment()));
                 }
+                else
+                {
+                    textView.setText(Html.fromHtml(getUserName(comment.getUser_id())
+                            + "<font color=\"#000000\"> 回复 "
+                            + "</font>"
+                            + getUserName(comment.getReply_id())
+                            + comment.getComment()));
+                }
 
                 //直接评论
                 commentView.setOnClickListener(new View.OnClickListener() {
@@ -260,8 +269,8 @@ public class CircleListAdapter  extends RecyclerView.Adapter<CircleListAdapter.C
             if(circleFragment != null) circleFragment.loadCircleListMore(data.get(0).getId());
             if(circleActivity != null) circleActivity.loadCircleListMore(data.get(0).getId());
         }else if (FLAGS_ALL_LOADED){
-            if(circleFragment != null) circleFragment.showToast("已无更多内容");
-            if(circleActivity != null) circleActivity.showToast("已无更多内容");
+            //if(circleFragment != null) circleFragment.showToast("已无更多内容");
+            //if(circleActivity != null) circleActivity.showToast("已无更多内容");
         }
 
 
@@ -470,7 +479,7 @@ public class CircleListAdapter  extends RecyclerView.Adapter<CircleListAdapter.C
     //ViewHolder
     class CircleListViewHolder extends RecyclerView.ViewHolder{
         private LinearLayout layout;
-        private LinearLayout commentsLayout, avatarContainer;
+        private LinearLayout commentsLayout, avatarContainer, localContainer;
         private TextView usernameTV
                 ,contentTV
                 ,dateTV
@@ -514,6 +523,7 @@ public class CircleListAdapter  extends RecyclerView.Adapter<CircleListAdapter.C
             //firstCommentImg = (ImageView) v.findViewById(R.id.circle_comment_first_img);
             //secondCommentImg = (ImageView) v.findViewById(R.id.circle_comment_second_img);
 
+            localContainer = (LinearLayout) v.findViewById(R.id.circle_local_layout);
             locationTV = (TextView) v.findViewById(R.id.circle_local);
         }
     }

+ 119 - 0
app/src/com/sheishuo/app/main/adapter/CircleMessageAdapter.java

@@ -0,0 +1,119 @@
+package com.sheishuo.app.main.adapter;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.bumptech.glide.Glide;
+import com.netease.nim.uikit.NimUIKit;
+import com.netease.nim.uikit.common.ui.imageview.HeadImageView;
+import com.netease.nimlib.sdk.InvocationFuture;
+import com.netease.nimlib.sdk.NIMClient;
+import com.netease.nimlib.sdk.RequestCallback;
+import com.netease.nimlib.sdk.team.TeamService;
+import com.netease.nimlib.sdk.team.model.Team;
+import com.netease.nimlib.sdk.uinfo.UserService;
+import com.netease.nimlib.sdk.uinfo.model.NimUserInfo;
+import com.sheishuo.app.R;
+import com.sheishuo.app.cache.AccountCache;
+import com.sheishuo.app.cache.SocialInfoCache;
+import com.sheishuo.app.common.beans.CircleUnreadBean;
+import com.sheishuo.app.common.beans.NearbyGroupsBean;
+
+import java.text.DecimalFormat;
+import java.util.List;
+
+/**
+ * Created by KN on 2017/7/18.
+ */
+
+public class CircleMessageAdapter extends RecyclerView.Adapter<CircleMessageAdapter.CircleMessageHold> implements View.OnClickListener {
+    private Context context;
+    private List<CircleUnreadBean.DBean.ListBean> beanList;
+    private OnItemClickListener listener;
+
+    public CircleMessageAdapter(Context context, List<CircleUnreadBean.DBean.ListBean> beanList) {
+        this.context = context;
+        this.beanList = beanList;
+    }
+
+    public void setOnItemClickListener(OnItemClickListener listener) {
+        this.listener = listener;
+    }
+
+    @Override
+    public CircleMessageHold onCreateViewHolder(ViewGroup parent, int viewType) {
+        View view = View.inflate(context, R.layout.item_circle_message_layout, null);
+        return new CircleMessageHold(view);
+    }
+
+    @Override
+    public void onBindViewHolder(final CircleMessageHold holder, int position) {
+        holder.layout.setOnClickListener(this);
+        CircleUnreadBean.DBean.ListBean listBean = beanList.get(position);
+        holder.layout.setTag(listBean);
+
+        NimUserInfo nimUserInfo = NIMClient.getService(UserService.class).getUserInfo(listBean.getUser_id());
+        if(nimUserInfo != null)
+        {
+            if (nimUserInfo.getAvatar().isEmpty()) {
+                Glide.with(context).load(R.drawable.nim_avatar_default).into(holder.head);
+            } else {
+                Glide.with(context)
+                        .load(nimUserInfo.getAvatar())
+                        .into(holder.head);
+            }
+        }
+
+        holder.nameTV.setText(SocialInfoCache.getNick(listBean.getUser_id()));
+
+        holder.likeIcon.setVisibility(listBean.getComment().isEmpty()?View.VISIBLE:View.GONE);
+        holder.commentTV.setText(listBean.getComment());
+        holder.timeTV.setText(listBean.getInputtime());
+
+        if(listBean.getThumb().isEmpty())
+        {
+            holder.socialThumb.setVisibility(View.GONE);
+        }
+        else
+        {
+            holder.socialThumb.setVisibility(View.VISIBLE);
+            Glide.with(context)
+                    .load(listBean.getThumb())
+                    .into(holder.socialThumb);
+        }
+    }
+
+    @Override
+    public int getItemCount() {
+        return beanList.size();
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (listener != null) {
+            listener.onItemClick(v);
+        }
+    }
+
+    class CircleMessageHold extends RecyclerView.ViewHolder {
+        View layout;
+        HeadImageView head;
+        ImageView likeIcon, socialThumb;
+        TextView nameTV, commentTV, timeTV;
+
+        public CircleMessageHold(View itemView) {
+            super(itemView);
+            layout = itemView.findViewById(R.id.item_circle_msg_layout);
+            head = (HeadImageView)itemView.findViewById(R.id.item_circle_msg_avatar);
+            likeIcon = (ImageView)itemView.findViewById(R.id.item_circle_msg_like);
+            socialThumb = (ImageView)itemView.findViewById(R.id.item_circle_msg_thumb);
+            nameTV = (TextView)itemView.findViewById(R.id.item_circle_msg_nickname);
+            commentTV = (TextView)itemView.findViewById(R.id.item_circle_msg_comm);
+            timeTV = (TextView)itemView.findViewById(R.id.item_circle_msg_time);
+        }
+    }
+}

+ 20 - 1
app/src/com/sheishuo/app/main/fragment/AreaGroupsFragment.java

@@ -39,6 +39,7 @@ 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.core_module.sheishuo.view.ui.NearbyGroupActivity;
+import com.sheishuo.app.impl.SheishuoTeamMessageActivity;
 import com.sheishuo.app.impl.SheishuoUIKit;
 import com.sheishuo.app.location.helper.NimLocationManager;
 import com.sheishuo.app.location.model.NimLocation;
@@ -278,7 +279,25 @@ public class AreaGroupsFragment extends MainTabFragment implements NimLocationMa
             public void onItemClick(View view) {
                 String groupId = (String) view.getTag();
                 if (!NIMClient.getService(TeamService.class).queryTeamBlock(groupId).isMyTeam()) {
-                    NIMClient.getService(TeamService.class).applyJoinTeam(groupId, "申请入群");
+                    NIMClient.getService(TeamService.class).applyJoinTeam(groupId, "申请入群").setCallback(new RequestCallback<Team>() {
+                        @Override
+                        public void onSuccess(Team team) {
+                            if(SheishuoTeamMessageActivity.isSystemTeam(team))
+                            {
+                                NIMClient.getService(TeamService.class).muteTeam(team.getId(), true);
+                            }
+                        }
+
+                        @Override
+                        public void onFailed(int i) {
+
+                        }
+
+                        @Override
+                        public void onException(Throwable throwable) {
+
+                        }
+                    });
                 }
                 SheishuoUIKit.startTeamSession(getActivity(), (String) view.getTag());
 

+ 155 - 2
app/src/com/sheishuo/app/main/fragment/CircleOfFriendsFragment.java

@@ -9,6 +9,7 @@ import android.os.Bundle;
 import android.os.Handler;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
 import android.view.Window;
@@ -23,6 +24,7 @@ import com.netease.nim.uikit.ContextCache;
 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.nimlib.sdk.NIMClient;
 import com.netease.nimlib.sdk.RequestCallback;
 import com.netease.nimlib.sdk.uinfo.UserService;
@@ -33,6 +35,7 @@ import com.sheishuo.app.cache.AccountCache;
 import com.sheishuo.app.R;
 import com.sheishuo.app.SheishuoApplication;
 import com.sheishuo.app.cache.SocialInfoCache;
+import com.sheishuo.app.common.beans.CircleUnreadBean;
 import com.sheishuo.app.common.beans.SocialInfoBean;
 import com.sheishuo.app.common.util.net.INet;
 import com.sheishuo.app.common.util.net.NetImpl;
@@ -46,12 +49,17 @@ import com.sheishuo.app.core_module.circle.activity.NewTweetingActivity;
 import com.sheishuo.app.common.beans.CircleBean;
 import com.sheishuo.app.common.views.BaseToolbar;
 import com.sheishuo.app.core_module.mine.view.ui.activity.UserInfoDetailActivity;
+import com.sheishuo.app.main.activity.CircleMessageActivity;
 import com.sheishuo.app.main.activity.MainActivity;
 import com.sheishuo.app.main.adapter.CircleListAdapter;
 import com.sheishuo.app.main.adapter.OnCircleItemClickListener;
 import com.sheishuo.app.main.model.MainTab;
 import com.sheishuo.app.main.presenter.CirclePresenter;
 
+import org.w3c.dom.Text;
+
+import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -82,6 +90,10 @@ public class CircleOfFriendsFragment extends MainTabFragment{
     private MainActivity parent;
     private INet net = new NetImpl();
 
+    private LinearLayout unreadLayout;
+    private HeadImageView unreadHead;
+    private TextView unreadTxt;
+
     private CircleListAdapter adapter;
 
     private LinearLayoutManager layoutManager = new LinearLayoutManager(context);
@@ -91,6 +103,9 @@ public class CircleOfFriendsFragment extends MainTabFragment{
     private Toast toast = null;
     private long lastTime = System.currentTimeMillis();
 
+    public static CircleUnreadBean unreadBean;
+    private String newLikeId;
+    private String newCommId;
 
     public CircleOfFriendsFragment(){
         setContainerId(MainTab.CIRCLE_OF_FRIENDS.fragmentId);
@@ -102,6 +117,7 @@ public class CircleOfFriendsFragment extends MainTabFragment{
         findViews();
         initToolbar();
 
+        unreadLayout.setVisibility(View.GONE);
 
         presenter.loadCircleList(AccountCache.getAccount().getId(),"0", null);
 
@@ -125,6 +141,19 @@ public class CircleOfFriendsFragment extends MainTabFragment{
         fillTop();
         isLoaded = true;
 
+        unreadLayout.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                Intent intent = new Intent();
+                intent.setClass(getContext(), CircleMessageActivity.class);
+                intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
+                intent.putExtra(CircleMessageActivity.DATA, (Serializable) unreadBean.getD().getList());
+                getContext().startActivity(intent);
+
+                unreadLayout.setVisibility(View.GONE);
+                syncUnread();
+            }
+        });
     }
 
 
@@ -142,6 +171,12 @@ public class CircleOfFriendsFragment extends MainTabFragment{
     }
 
     @Override
+    public void onCurrent() {
+        super.onCurrent();
+        fetchUnreadList();
+    }
+
+    @Override
     public void onResume() {
         super.onResume();
         fillTop();
@@ -164,6 +199,10 @@ public class CircleOfFriendsFragment extends MainTabFragment{
         avatar = (ImageView) getView().findViewById(R.id.circle_avatar);
         username = (TextView) getView().findViewById(R.id.circle_username);
         backgroundImg = (ImageView) getView().findViewById(R.id.circle_background);
+
+        unreadLayout = findView(R.id.circle_unread_layout);
+        unreadHead = findView(R.id.circle_unread_head);
+        unreadTxt = findView(R.id.circle_unread_txt);
     }
 
     void fillTop(){
@@ -282,9 +321,12 @@ public class CircleOfFriendsFragment extends MainTabFragment{
                         @Override
                         public void onLikedClick(View view) {
                             CircleBean.DBean.ListBean bean = (CircleBean.DBean.ListBean) view.getTag();
-                            bean.getLike_users().add(AccountCache.getAccount().getId());
+                            if(bean.getLiked().equals("1"))
+                                bean.getLike_users().add(AccountCache.getAccount().getId());
+                            else
+                                bean.getLike_users().remove(AccountCache.getAccount().getId());
                             Log.e(TAG,"点赞的朋友圈ID === " + bean.getId());
-                            presenter.onUserLiked(bean.getId());
+                            presenter.onUserLiked(bean.getId(), bean.getLiked().equals("1"));
                             getHandler().post(new Runnable() {
                                 @Override
                                 public void run() {
@@ -340,7 +382,118 @@ public class CircleOfFriendsFragment extends MainTabFragment{
         }
     }
 
+    private void fetchUnreadList()
+    {
+        if(unreadLayout == null)
+            return;
+
+        unreadLayout.setVisibility(View.GONE);
+
+        SocialInfoBean infoBean = SocialInfoCache.get(AccountCache.getAccount().getId());
+        final long lastLikeId = Long.parseLong(infoBean.getSocial_last_like());
+        final int lastCommId = Integer.parseInt(infoBean.getSocial_last_comment());
+        net.socialUnreadList(infoBean.getSocial_last_like(), infoBean.getSocial_last_comment(), new ResponseCallback() {
+            @Override
+            public void onSuccess(Object object) {
+                unreadBean = (CircleUnreadBean)object;
+                boolean firstTime = false;
+                if(lastCommId == 0 && lastLikeId == 0)
+                {
+                    firstTime = true;
+                }
+
+                long newLikeId = lastLikeId;
+                int newCommId = lastCommId;
+                for(CircleUnreadBean.DBean.ListBean listBean : unreadBean.getD().getList())
+                {
+                    if(TextUtils.isEmpty(listBean.getComment())) {
+                        long likeId = Long.parseLong(listBean.getId());
+                        if(likeId > newLikeId)
+                            newLikeId = likeId;
+                    }
+                    else
+                    {
+                        int commId = Integer.parseInt(listBean.getId());
+                        if(commId > newCommId)
+                            newCommId = commId;
+                    }
+                }
+
+                //firstTime = false;
+
+                final int count = unreadBean.getD().getList().size();
+                if(!firstTime && count > 0)
+                {
+                    CircleUnreadBean.DBean.ListBean listBean = unreadBean.getD().getList().get(count-1);
+                    NimUserInfo nimUserInfo = NIMClient.getService(UserService.class).getUserInfo(listBean.getUser_id());
+                    if(nimUserInfo == null)
+                    {
+                        List<String> userList = new ArrayList<String>();
+                        userList.add(listBean.getUser_id());
+                        NIMClient.getService(UserService.class).fetchUserInfo(userList).setCallback(new RequestCallback<List<NimUserInfo>>() {
+                            @Override
+                            public void onSuccess(List<NimUserInfo> nimUserInfos) {
+                                setUnreadInfo(nimUserInfos.get(0), count);
+                            }
+
+                            @Override
+                            public void onFailed(int i) {
+
+                            }
+
+                            @Override
+                            public void onException(Throwable throwable) {
+
+                            }
+                        });
+                    }
+                    else
+                    {
+                        setUnreadInfo(nimUserInfo, count);
+                    }
+                }
+
+                updateUnread(newLikeId, newCommId);
+                if(firstTime)
+                    syncUnread();
+            }
+
+            @Override
+            public void onFailed(String error) {
+
+            }
+        });
+    }
+
+    private void setUnreadInfo(final NimUserInfo nimUserInfo, final int count)
+    {
+        getHandler().post(new Runnable() {
+            @Override
+            public void run() {
+                unreadLayout.setVisibility(View.VISIBLE);
+                String url = nimUserInfo.getAvatar();
+                if(TextUtils.isEmpty(url))
+                    unreadHead.setImageResource(R.drawable.nim_avatar_default);
+                else
+                    Glide.with(unreadHead.getContext()).load(url).into(unreadHead);
+                unreadTxt.setText(count+"条新消息");
+            }
+        });
+    }
+
+    private void updateUnread(long newLikeId, int newCommId)
+    {
+        this.newLikeId = ""+newLikeId;
+        this.newCommId = ""+newCommId;
+    }
 
+    private void syncUnread()
+    {
+        SocialInfoBean infoBean = SocialInfoCache.get(AccountCache.getAccount().getId());
+        infoBean.setSocial_last_like(""+newLikeId);
+        infoBean.setSocial_last_comment(""+newCommId);
+        net.socialUnreadUpdate(""+newLikeId, ""+newCommId);
+    }
 
 
     @Override

+ 54 - 3
app/src/com/sheishuo/app/main/fragment/HomeFragment.java

@@ -38,6 +38,7 @@ import com.netease.nim.uikit.contact_selector.activity.ContactSelectActivity;
 import com.netease.nim.uikit.recent.TeamMemberAitHelper;
 import com.netease.nimlib.sdk.NIMClient;
 import com.netease.nimlib.sdk.Observer;
+import com.netease.nimlib.sdk.RequestCallback;
 import com.netease.nimlib.sdk.msg.MsgService;
 import com.netease.nimlib.sdk.msg.MsgServiceObserve;
 import com.netease.nimlib.sdk.msg.SystemMessageObserver;
@@ -46,6 +47,7 @@ import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
 import com.netease.nimlib.sdk.msg.model.IMMessage;
 import com.netease.nimlib.sdk.msg.model.RecentContact;
 import com.netease.nimlib.sdk.team.TeamService;
+import com.netease.nimlib.sdk.team.model.Team;
 import com.netease.nimlib.sdk.uinfo.UserService;
 import com.netease.nimlib.sdk.uinfo.constant.UserInfoFieldEnum;
 import com.netease.nimlib.sdk.uinfo.model.NimUserInfo;
@@ -65,6 +67,7 @@ import com.sheishuo.app.core_module.mine.view.ui.activity.MineUploadPhotoActivit
 import com.sheishuo.app.core_module.mine.view.ui.activity.UserInfoSettingActivity;
 import com.sheishuo.app.core_module.trade.view.ui.activity.TradeChangePriorityActivity;
 import com.sheishuo.app.core_module.trade.view.ui.activity.TradeSearchActivity;
+import com.sheishuo.app.impl.SheishuoTeamMessageActivity;
 import com.sheishuo.app.login.beans.LoginBean;
 import com.sheishuo.app.main.activity.MainActivity;
 import com.sheishuo.app.main.adapter.MainTabPagerAdapter;
@@ -237,7 +240,25 @@ public class HomeFragment extends TFragment implements OnPageChangeListener, Rem
 
         for (String roomId : autoJoinList) {
             if (roomId != null) {
-                NIMClient.getService(TeamService.class).applyJoinTeam(roomId, null);
+                NIMClient.getService(TeamService.class).applyJoinTeam(roomId, null).setCallback(new RequestCallback<Team>() {
+                    @Override
+                    public void onSuccess(Team team) {
+                        if(SheishuoTeamMessageActivity.isSystemTeam(team))
+                        {
+                            NIMClient.getService(TeamService.class).muteTeam(team.getId(), true);
+                        }
+                    }
+
+                    @Override
+                    public void onFailed(int i) {
+
+                    }
+
+                    @Override
+                    public void onException(Throwable throwable) {
+
+                    }
+                });
                 break;
             }
         }
@@ -451,8 +472,23 @@ public class HomeFragment extends TFragment implements OnPageChangeListener, Rem
 
     private Observer<List<IMMessage>> messageReceiverObserver = new Observer<List<IMMessage>>() {
         @Override
-        public void onEvent(List<IMMessage> imMessages) {
+        public void onEvent(final List<IMMessage> imMessages) {
             if (imMessages != null) {
+                //删除系统房间红点提示
+                getHandler().postDelayed(new Runnable() {
+                    @Override
+                    public void run() {
+                        for(int i=0; i<imMessages.size(); i++)
+                        {
+                            IMMessage msg = imMessages.get(i);
+                            if(msg.getSessionType() == SessionTypeEnum.Team && SheishuoTeamMessageActivity.isSystemTeam(msg.getSessionId()))
+                            {
+                                NIMClient.getService(MsgService.class).clearUnreadCount(msg.getSessionId(), SessionTypeEnum.Team);
+                            }
+                        }
+                    }
+                }, 10);
+
                 //延迟一点时间,未读数量才会更新
                 getHandler().postDelayed(new Runnable() {
                     @Override
@@ -639,8 +675,23 @@ public class HomeFragment extends TFragment implements OnPageChangeListener, Rem
 
                 }
                 break;
-
         }
     }
 
+    public boolean onBackKeyDown()
+    {
+        List<Fragment> list = getFragmentManager().getFragments();
+        for (Fragment fragment : list)
+        {
+            if (fragment instanceof TradeListFragment)
+            {
+                TradeListFragment tradeListFragment = (TradeListFragment)fragment;
+                if(!tradeListFragment.onBackKeyDown())
+                {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
 }

+ 5 - 8
app/src/com/sheishuo/app/main/fragment/MineFragment.java

@@ -84,8 +84,6 @@ public class MineFragment extends MainTabFragment implements View.OnClickListene
     private Toast toast = null;
     private INet net = new NetImpl();
 
-    private String mineId;
-
     AbortableFuture<String> uploadAvatarFuture;
 
     //FLAGS
@@ -146,7 +144,6 @@ public class MineFragment extends MainTabFragment implements View.OnClickListene
         initToolbar();
         fetchSocialInfo();
 
-        mineId = AccountCache.getAccount().getId();
         socialContainer.setOnClickListener(this);
     }
 
@@ -165,8 +162,8 @@ public class MineFragment extends MainTabFragment implements View.OnClickListene
             genderImg.setImageResource(R.drawable.mine_gender_female);
         }
 
-        usernameTV.setText(SocialInfoCache.getNick(mineId));
-        userIdTV.setText("ID:" + SocialInfoCache.getSsid(mineId));
+        usernameTV.setText(SocialInfoCache.getNick(AccountCache.getId()));
+        userIdTV.setText("ID:" + SocialInfoCache.getSsid(AccountCache.getId()));
     }
 
 
@@ -180,7 +177,7 @@ public class MineFragment extends MainTabFragment implements View.OnClickListene
 
         if (isVisibleToUser){
             fetchSocialInfo();
-            initPhotosWall(mineId);
+            initPhotosWall(AccountCache.getId());
         }
 
         if (isVisibleToUser && toolbar != null && parent != null){
@@ -401,9 +398,9 @@ public class MineFragment extends MainTabFragment implements View.OnClickListene
                             .into(bannerImg);
                 }
 
-                String nick = SocialInfoCache.getNick(mineId);
+                String nick = SocialInfoCache.getNick(AccountCache.getId());
                 usernameTV.setText(nick);
-                userIdTV.setText("ID:" + SocialInfoCache.getSsid(mineId));
+                userIdTV.setText("ID:" + SocialInfoCache.getSsid(AccountCache.getId()));
             }
         });
     }

+ 100 - 6
app/src/com/sheishuo/app/main/fragment/TradeListFragment.java

@@ -7,10 +7,13 @@ import android.os.Handler;
 import android.support.annotation.IdRes;
 import android.support.annotation.Nullable;
 import android.support.design.widget.FloatingActionButton;
+import android.support.v4.app.Fragment;
 import android.support.v7.widget.CardView;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
 import android.util.Log;
+import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -23,6 +26,7 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import com.bigkoo.pickerview.OptionsPickerView;
+import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper;
 import com.netease.nim.uikit.common.ui.popupmenu.PopupMenuItem;
 import com.netease.nim.uikit.common.util.sys.ScreenUtil;
 import com.netease.nim.uikit.session.activity.BaseMessageActivity;
@@ -46,6 +50,7 @@ import com.sheishuo.app.core_module.trade.view.ui.activity.TradeChangePriorityAc
 import com.sheishuo.app.core_module.trade.view.ui.activity.TradeDetailsActivity;
 import com.sheishuo.app.core_module.trade.view.ui.activity.TradePublishActivity;
 import com.sheishuo.app.core_module.trade.view.ui.activity.TradeSearchActivity;
+import com.sheishuo.app.login.LoginActivity;
 import com.sheishuo.app.main.activity.MainActivity;
 
 import org.json.JSONException;
@@ -70,8 +75,6 @@ public class TradeListFragment extends MainTabFragment {
     private BaseToolbar toolbar;
     private Toast toast;
 
-
-
     //Views
     private LinearLayout notificationLayout;
     private RecyclerView recyclerview;
@@ -90,7 +93,10 @@ public class TradeListFragment extends MainTabFragment {
     public int PAGE_TO_LOAD = 1;
     public int TYPE_TO_LOAD = TradeModel.TYPE_ALL;
     public int MENU_ITEM_CHECKED = R.id.trade_sort_0;
+
     public String searchKey;
+    private String lastSearchKey;
+
     public TextView priorityTV = null;
     public String priorityBeanId;
 
@@ -162,6 +168,29 @@ public class TradeListFragment extends MainTabFragment {
                 startActivity(new Intent(getActivity(), TradePublishActivity.class));
             }
         });
+
+
+        getView().setOnKeyListener( new View.OnKeyListener()
+        {
+            @Override
+            public boolean onKey( View v, int keyCode, KeyEvent event )
+            {
+                if(keyCode == KeyEvent.KEYCODE_BACK)
+                {
+                    return onBackKey();
+                }
+                return true;
+            }
+        } );
+    }
+
+    private boolean onBackKey()
+    {
+        if(searchKey != null) {
+            cancelSearch();
+            return false;
+        }
+        return true;
     }
 
     private void initToolbar(){
@@ -193,6 +222,57 @@ public class TradeListFragment extends MainTabFragment {
         setLocationTxt(location);
         toolbar.setLeftItems(new View[]{leftIcon, toolbarLeftTxt});
 
+        setRightSearch();
+    }
+
+    private void setRightCancelSearch()
+    {
+//        ImageView searchIcon = new ImageView(getContext());
+//        searchIcon.setBackgroundResource(R.drawable.ic_action_search);
+//        ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ScreenUtil.dip2px(30), ScreenUtil.dip2px(30));
+//        searchIcon.setLayoutParams(lp);
+//        searchIcon.setOnClickListener(new View.OnClickListener() {
+//            @Override
+//            public void onClick(View v) {
+//                searchKey = null;
+//                setRightSearch();
+//                adapter.clearAll();
+//                loadTradeList(0, 1);
+//            }
+//        });
+
+        TextView cancelTxt = new TextView(getContext());
+        cancelTxt.setText("取消");
+        cancelTxt.setOnClickListener(new View.OnClickListener(){
+            @Override
+            public void onClick(View v){
+                cancelSearch();
+            }
+        });
+
+        toolbar.setRightItems(new View[]{cancelTxt});
+    }
+
+    private void cancelSearch()
+    {
+        searchKey = null;
+        setRightSearch();
+        adapter.clearAll();
+        loadTradeList(0, 1);
+    }
+
+    public boolean onBackKeyDown()
+    {
+        if(searchKey != null)
+        {
+            cancelSearch();
+            return false;
+        }
+        return true;
+    }
+
+    private void setRightSearch()
+    {
         ImageView searchIcon = new ImageView(getContext());
         searchIcon.setBackgroundResource(R.drawable.ic_action_search);
         ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ScreenUtil.dip2px(30), ScreenUtil.dip2px(30));
@@ -201,7 +281,8 @@ public class TradeListFragment extends MainTabFragment {
             @Override
             public void onClick(View v) {
                 Intent intent = new Intent(getActivity(), TradeSearchActivity.class);
-                startActivityForResult(intent,0);
+                intent.putExtra(TradeSearchActivity.DEFAULT_KEY, lastSearchKey);
+                startActivityForResult(intent, 0);
             }
         });
 
@@ -269,8 +350,19 @@ public class TradeListFragment extends MainTabFragment {
                 TradeBean bean = (TradeBean) object;
                 if (bean.getD().getList().size() > 0){
                     onPageLoaded(bean);
-                }else {
-                    showToast("搜索结果为空");
+                }else if(PAGE_TO_LOAD == 1){
+                    getHandler().post(new Runnable() {
+                        @Override
+                        public void run() {
+                            EasyAlertDialogHelper.showOneButtonDiolag(getContext(), "提示",
+                                    "没有搜索到相关内容", "确认", false, new View.OnClickListener() {
+                                        @Override
+                                        public void onClick(View v) {
+                                            cancelSearch();
+                                        }
+                                    });
+                        }
+                    });
                 }
             }
 
@@ -376,7 +468,9 @@ public class TradeListFragment extends MainTabFragment {
         }else if (TradeSearchActivity.RESULT_CODE == resultCode){
             if (adapter != null){
                 adapter.clearAll();
-                searchKey = (String) data.getSerializableExtra(TradeSearchActivity.RESULT_KEY);
+                lastSearchKey = searchKey = (String) data.getSerializableExtra(TradeSearchActivity.RESULT_KEY);
+                if(!TextUtils.isEmpty(searchKey))
+                    setRightCancelSearch();
                 loadTradeList(0, 1);
             }
         }

+ 6 - 2
app/src/com/sheishuo/app/main/model/CircleModel.java

@@ -70,20 +70,24 @@ public class CircleModel implements ICircle {
 
 
     //用户点赞
-    public void onUserLiked(final String social_id){
+    public void onUserLiked(final String social_id, final boolean like){
         new Thread(new Runnable() {
             @Override
             public void run() {
                 FormBody body = new FormBody.Builder()
                         .add("user_id", AccountCache.getAccount().getId())
                         .add("social_id",social_id)
+                        .add("like", like ? "1" : "0")
                         .build();
                 net.post(NetInfo.CIRCLE_USER_LIKED, body, new ResponseCallback() {
                     @Override
                     public void onSuccess(Object object) {
                         CircleUserLikedBean bean = new Gson().fromJson((String)object,CircleUserLikedBean.class);
                         if (0 == bean.getC()){
-                            presenter.showToast("点赞成功");
+                            if(like)
+                                presenter.showToast("点赞成功");
+                            else
+                                presenter.showToast("取消点赞");
                         }else {
                             presenter.showToast("点赞失败");
                         }

+ 2 - 2
app/src/com/sheishuo/app/main/presenter/CirclePresenter.java

@@ -58,8 +58,8 @@ public class CirclePresenter {
 
 
     //用户点赞
-    public void onUserLiked(String id){
-        model.onUserLiked(id);
+    public void onUserLiked(String id, boolean like){
+        model.onUserLiked(id, like);
     }
 
 

+ 6 - 1
uikit/src/com/netease/nim/uikit/NimUIKit.java

@@ -134,7 +134,12 @@ public class NimUIKit {
         }
 
         // init tools
-        StorageUtil.init(context, null);
+        String savePath = context.getApplicationContext().getCacheDir().getPath();
+        Log.e("getCacheDir", context.getApplicationContext().getCacheDir().getPath());
+        Log.e("getCacheDirAbsolutePath", context.getApplicationContext().getCacheDir().getAbsolutePath());
+        Log.e("External", context.getApplicationContext().getExternalCacheDir().getPath());
+        Log.e("ExternalA", context.getApplicationContext().getExternalCacheDir().getAbsolutePath());
+        StorageUtil.init(context, savePath);
         ScreenUtil.init(context);
         StickerManager.getInstance().init();
 

+ 18 - 15
uikit/src/com/netease/nim/uikit/contact/core/viewholder/ContactHolder.java

@@ -1,5 +1,6 @@
 package com.netease.nim.uikit.contact.core.viewholder;
 
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.RelativeLayout;
@@ -33,24 +34,26 @@ public class ContactHolder extends AbsContactViewHolder<ContactItem> {
             head.loadBuddyAvatar(contact.getContactId());
         } else {
             Team team = TeamDataCache.getInstance().getTeamById(contact.getContactId());
-            if (team.getName().equals("国家聊天室")) {
-                Glide.with(context).load(R.drawable.group_country).into(head);
-            } else if (team.getName().contains("市") || team.getName().contains("省")) {
-                Glide.with(context).load(R.drawable.group_province_city)
-                        .into(head);
-            } else if (team.getName().contains("区") || team.getName().contains("县")) {
-                Glide.with(context).load(R.drawable.group_district)
-                        .placeholder(R.drawable.group_district)
-                        .into(head);
-            } else {
-                if (team.getIcon() == null || team.getIcon().isEmpty()) {
-                    Glide.with(context).load(R.drawable.nim_avatar_group).into(head);
-                } else {
-                    Glide.with(context)
-                            .load(team.getIcon())
+            if(TextUtils.isEmpty(team.getIcon())) {
+                if (team.getName().equals("国家聊天室")) {
+                    Glide.with(context).load(R.drawable.group_country).into(head);
+                } else if (team.getName().contains("市") || team.getName().contains("省")) {
+                    Glide.with(context).load(R.drawable.group_province_city)
+                            .into(head);
+                } else if (team.getName().contains("区") || team.getName().contains("县")) {
+                    Glide.with(context).load(R.drawable.group_district)
+                            .placeholder(R.drawable.group_district)
                             .into(head);
+                } else {
+                    Glide.with(context).load(R.drawable.nim_avatar_group).into(head);
                 }
             }
+            else
+            {
+                Glide.with(context)
+                        .load(team.getIcon())
+                        .into(head);
+            }
             //head.loadTeamIconByTeam(team);
         }
         name.setText(contact.getDisplayName());

+ 19 - 12
uikit/src/com/netease/nim/uikit/recent/holder/RecentViewHolder.java

@@ -143,11 +143,12 @@ public abstract class RecentViewHolder extends RecyclerViewHolder<BaseQuickAdapt
     private void updateBackground(BaseViewHolder holder, RecentContact recent, int position) {
         topLine.setVisibility(getAdapter().isFirstDataItem(position) ? View.GONE : View.VISIBLE);
         bottomLine.setVisibility(getAdapter().isLastDataItem(position) ? View.VISIBLE : View.GONE);
-        if ((recent.getTag() & RecentContactsFragment.RECENT_TAG_STICKY) == 0) {
-            holder.getConvertView().setBackgroundResource(R.drawable.touch_bg);
-        } else {
-            holder.getConvertView().setBackgroundResource(R.drawable.nim_recent_contact_sticky_selecter);
-        }
+        holder.getConvertView().setBackgroundResource(R.drawable.touch_bg);
+//        if ((recent.getTag() & RecentContactsFragment.RECENT_TAG_STICKY) == 0) {
+//            holder.getConvertView().setBackgroundResource(R.drawable.touch_bg);
+//        } else {
+//            holder.getConvertView().setBackgroundResource(R.drawable.nim_recent_contact_sticky_selecter);
+//        }
     }
 
     protected void loadPortrait(RecentContact recent) {
@@ -156,13 +157,19 @@ public abstract class RecentViewHolder extends RecyclerViewHolder<BaseQuickAdapt
             imgHead.loadBuddyAvatar(recent.getContactId());
         } else if (recent.getSessionType() == SessionTypeEnum.Team && TeamDataCache.getInstance().getTeamById(recent.getContactId()) != null) {
             Team team = TeamDataCache.getInstance().getTeamById(recent.getContactId());
-            if (team.getName().contains("国家")){
-                Glide.with(ContextCache.context).load(R.drawable.group_country).into(imgHead);
-            }else if (team.getName().contains("省") || team.getName().contains("市") || team.getName().contains("特别")||team.getName().contains("自治")){
-                Glide.with(ContextCache.context).load(R.drawable.group_province_city).into(imgHead);
-            }else if (team.getName().contains("区") || team.getName().contains("县")){
-                Glide.with(ContextCache.context).load(R.drawable.group_district).into(imgHead);
-            }else {
+            if(TextUtils.isEmpty(team.getIcon())) {
+                if (team.getName().contains("国家")) {
+                    Glide.with(ContextCache.context).load(R.drawable.group_country).into(imgHead);
+                } else if (team.getName().contains("省") || team.getName().contains("市") || team.getName().contains("特别") || team.getName().contains("自治")) {
+                    Glide.with(ContextCache.context).load(R.drawable.group_province_city).into(imgHead);
+                } else if (team.getName().contains("区") || team.getName().contains("县")) {
+                    Glide.with(ContextCache.context).load(R.drawable.group_district).into(imgHead);
+                } else {
+                    imgHead.loadTeamIconByTeam(team);
+                }
+            }
+            else
+            {
                 imgHead.loadTeamIconByTeam(team);
             }
         }

+ 2 - 0
uikit/src/com/netease/nim/uikit/session/activity/IWatchPictureData.java

@@ -7,4 +7,6 @@ public interface IWatchPictureData extends Serializable
 {
     List<String> getPics();
     List<String> getThumbs();
+    int getFirstIndex();
+    int size();
 }

+ 10 - 0
uikit/src/com/netease/nim/uikit/session/activity/WatchPictureActivity.java

@@ -4,7 +4,9 @@ import android.app.Activity;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
+import android.content.res.Resources;
 import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
 import android.graphics.Color;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
@@ -233,6 +235,14 @@ public class WatchPictureActivity extends UI {
     // 若图片已下载,直接显示图片;若图片未下载,则下载图片
     private void requestOriImage(final String thumb, final String path) {
 
+        if(TextUtils.isEmpty(thumb) && TextUtils.isEmpty(path))
+        {
+            thumbImage.setVisibility(View.GONE);
+            Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.nim_avatar_default);
+            image.setImageBitmap(bmp);
+            return;
+        }
+
         Glide.with(this.getApplicationContext()).load(thumb).into(thumbImage);
 
         Glide.with(this.getApplicationContext()).load(path).asBitmap().diskCacheStrategy(DiskCacheStrategy.ALL).into(new SimpleTarget<Bitmap>() {

+ 11 - 2
uikit/src/com/netease/nim/uikit/session/activity/WatchPictureData.java

@@ -1,6 +1,7 @@
 package com.netease.nim.uikit.session.activity;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
 
 public class WatchPictureData implements IWatchPictureData
@@ -12,8 +13,16 @@ public class WatchPictureData implements IWatchPictureData
     public WatchPictureData(List<String> pics, List<String> thumbs, int firstIndex)
     {
         this.firstIndex = firstIndex;
-        this.pics = pics;
-        this.thumbs = thumbs;
+        this.pics = new ArrayList<String>();
+        for(int i=0; i<pics.size(); i++)
+        {
+            this.pics.add(pics.get(i));
+        }
+        this.thumbs = new ArrayList<String>();
+        for(int i=0; i<thumbs.size(); i++)
+        {
+            this.thumbs.add(thumbs.get(i));
+        }
     }
 
     public int getFirstIndex()

+ 6 - 4
uikit/src/com/netease/nim/uikit/session/helper/TeamNotificationHelper.java

@@ -137,10 +137,12 @@ public class TeamNotificationHelper {
         StringBuilder sb = new StringBuilder();
         sb.append(buildMemberListString(a.getTargets(), null));
         Team team = TeamDataCache.getInstance().getTeamById(teamId.get());
-        if (team.getType() == TeamTypeEnum.Advanced) {
-            sb.append(" 已被移出群");
-        } else {
-            sb.append(" 已被移出讨论组");
+        if(team != null) {
+            if (team.getType() == TeamTypeEnum.Advanced) {
+                sb.append(" 已被移出群");
+            } else {
+                sb.append(" 已被移出讨论组");
+            }
         }
 
 

+ 8 - 7
uikit/uikit.iml

@@ -59,13 +59,6 @@
       <sourceFolder url="file://$MODULE_DIR$/assets" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
@@ -73,6 +66,13 @@
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
@@ -85,6 +85,7 @@
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
       <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
       <excludeFolder url="file://$MODULE_DIR$/build/tmp" />

Some files were not shown because too many files changed in this diff