Browse Source

no message

Junqin Wang 8 years ago
parent
commit
e1495bfdd6

+ 11 - 0
SDK Docs.md

@@ -0,0 +1,11 @@
+# NIM Android SDK API
+
+http://dev.netease.im/docs/interface/%E5%8D%B3%E6%97%B6%E9%80%9A%E8%AE%AFAndroid%E7%AB%AF/IM_Android/index.html
+
+
+
+
+
+# NIM SDK基础用法
+
+https://github.com/netease-im/NIM_Android_SDK

+ 0 - 8
app/app.iml

@@ -138,13 +138,5 @@
     <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="nim-avchat-4.0.0" level="project" />
-    <orderEntry type="library" exported="" name="constraint-layout-solver-1.0.2" level="project" />
-    <orderEntry type="library" exported="" name="java-json" level="project" />
-    <orderEntry type="library" exported="" name="nim-basesdk-4.0.0" level="project" />
-    <orderEntry type="library" exported="" name="renderscript-v8" level="project" />
-    <orderEntry type="library" exported="" name="fastjson-1.1.34.android" level="project" />
-    <orderEntry type="library" exported="" name="glide-3.7.0" level="project" />
-    <orderEntry type="library" exported="" name="nim-lucene-4.0.0" level="project" />
   </component>
 </module>

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

@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/main_content"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:fitsSystemWindows="true">
+
+    <android.support.design.widget.AppBarLayout
+        android:id="@+id/appbar"
+        android:layout_width="match_parent"
+        android:layout_height="256dp"
+        android:fitsSystemWindows="true">
+
+        <android.support.design.widget.CollapsingToolbarLayout
+            android:id="@+id/collapsing_toolbar"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            app:layout_scrollFlags="scroll|exitUntilCollapsed"
+            android:fitsSystemWindows="true"
+            app:contentScrim="?attr/colorPrimary"
+            app:expandedTitleMarginStart="48dp"
+            app:expandedTitleMarginEnd="64dp">
+
+
+
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:orientation="vertical"
+                app:layout_collapseMode="parallax"
+                android:fitsSystemWindows="true"   >
+                <ImageView
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:scaleType="centerCrop"/>
+
+                <LinearLayout
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:orientation="horizontal"
+                    android:layout_alignParentBottom="true"
+                    android:layout_marginStart="40dp"
+                    android:layout_marginLeft="40dp"
+                    android:layout_marginBottom="40dp">
+                    <ImageView
+                        android:id="@+id/activity_main_avatar"
+                        android:layout_width="48dp"
+                        android:layout_height="48dp"
+                        android:textStyle="bold"
+                        android:textSize="30sp" />
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:text="冯超"
+                        android:textSize="33sp"
+                        android:gravity="center"
+                        android:textColor="@android:color/white"
+                        />
+                </LinearLayout>
+
+            </RelativeLayout>
+
+            <android.support.v7.widget.Toolbar
+                android:id="@+id/toolbar_details"
+                android:layout_width="match_parent"
+                android:layout_height="?attr/actionBarSize"
+                app:layout_collapseMode="pin" />
+        </android.support.design.widget.CollapsingToolbarLayout>
+
+    </android.support.design.widget.AppBarLayout>
+
+
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical"
+        app:layout_behavior="@string/appbar_scrolling_view_behavior">
+
+
+        <android.support.v7.widget.RecyclerView
+            android:id="@+id/activity_recyclerview"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"/>
+    </LinearLayout>
+
+    <android.support.design.widget.FloatingActionButton
+        android:id="@+id/activity_details_fab"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        app:layout_anchor="@id/appbar"
+        app:layout_anchorGravity="bottom|right|end"
+        android:src="@drawable/ic_add_friends"
+        android:layout_margin="24dp"
+        android:clickable="true"/>
+
+</android.support.design.widget.CoordinatorLayout>

+ 1 - 1
app/res/menu/main_botton_navi_menu.xml

@@ -10,7 +10,7 @@
         android:title="交易帖"
         android:icon="@drawable/_03_unchecked"/>
     <item android:id="@+id/main_navi_circle_of_friends"
-        android:title="朋友"
+        android:title="朋友"
         android:icon="@drawable/_04_unchecked"/>
     <item android:id="@+id/main_navi_me"
         android:title="我的"

+ 1 - 0
app/res/values/strings.xml

@@ -4,6 +4,7 @@
     <string name="title_activity_main">MainActivity</string>
     <string name="hello_world">Hello world!</string>
     <string name="empty"></string>
+    <string name="main_tab_circleoffriends">朋友圈</string>
     <string name="main_tab_session">会话</string>
     <string name="main_tab_contact">通讯录</string>
     <string name="user_profile">个人名片</string>

+ 22 - 0
app/src/com/sheishuo/app/AccountCache.java

@@ -0,0 +1,22 @@
+package com.sheishuo.app;
+
+import com.sheishuo.app.login.beans.LoginBean;
+
+import java.util.List;
+
+/**
+ * Created by KN on 2017/7/17.
+ */
+
+public class AccountCache{
+    private static LoginBean.DBean account;
+
+    public static void setCache(LoginBean.DBean account){
+        AccountCache.account =account;
+    }
+
+    public static LoginBean.DBean getAccount(){
+        return account;
+    }
+
+}

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

@@ -58,6 +58,8 @@ import java.util.Map;
 public class SheishuoApplication extends Application {
 
     private static final String TAG = "SheishuoApplication";
+    private static Context context;
+
 
     protected void attachBaseContext(Context newBase) {
         super.attachBaseContext(newBase);
@@ -66,7 +68,6 @@ public class SheishuoApplication extends Application {
 
     public void onCreate() {
         super.onCreate();
-
         SheishuoCache.setContext(this);
         // 注册小米推送appID 、appKey 以及在云信管理后台添加的小米推送证书名称,该逻辑放在 NIMClient init 之前
         NIMPushClient.registerMiPush(this, "DEMO_MI_PUSH", "2882303761517502883", "5671750254883");

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

@@ -10,6 +10,8 @@ import android.widget.Button;
 import android.widget.EditText;
 import android.widget.Toast;
 
+import com.netease.nimlib.sdk.NIMClient;
+import com.sheishuo.app.AccountCache;
 import com.sheishuo.app.R;
 import com.sheishuo.app.common.util.net.INet;
 import com.sheishuo.app.common.util.net.NetImpl;
@@ -42,6 +44,7 @@ public class LoginActivity extends SheishuoUI implements View.OnClickListener{
 
 
 
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -90,10 +93,14 @@ public class LoginActivity extends SheishuoUI implements View.OnClickListener{
         net.loginQuery(tel, pwd, new ResponseCallback() {
             @Override
             public void onSuccess(Object object) {
-                System.out.println(((LoginBean)object).getC());
                 LoginBean bean = (LoginBean)object;
-                LoginHelper helper = new LoginHelper(context,bean);
-                helper.loginToNIM();
+
+                //将用户信息放入缓存
+                AccountCache.setCache(bean.getD());
+
+                //登录NIM服务
+                new LoginHelper(context,bean).loginToNIM();
+
             }
 
             @Override

+ 0 - 544
app/src/com/sheishuo/app/login/LoginActivityBak.java

@@ -1,544 +0,0 @@
-package com.sheishuo.app.login;
-
-import android.Manifest;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
-import android.text.Editable;
-import android.text.InputFilter;
-import android.text.TextWatcher;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnKeyListener;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.sheishuo.app.SheishuoCache;
-import com.sheishuo.app.config.preference.UserPreferences;
-import com.sheishuo.app.R;
-import com.sheishuo.app.config.preference.Preferences;
-import com.sheishuo.app.contact.ContactHttpClient;
-import com.sheishuo.app.main.activity.MainActivity;
-import com.netease.nim.uikit.NimUIKit;
-import com.netease.nim.uikit.cache.DataCacheManager;
-import com.netease.nim.uikit.common.activity.UI;
-import com.netease.nim.uikit.common.ui.dialog.DialogMaker;
-import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper;
-import com.netease.nim.uikit.common.ui.widget.ClearableEditTextWithIcon;
-import com.netease.nim.uikit.common.util.log.LogUtil;
-import com.netease.nim.uikit.common.util.string.MD5;
-import com.netease.nim.uikit.common.util.sys.NetworkUtil;
-import com.netease.nim.uikit.common.util.sys.ScreenUtil;
-import com.netease.nim.uikit.model.ToolBarOptions;
-import com.netease.nim.uikit.permission.MPermission;
-import com.netease.nim.uikit.permission.annotation.OnMPermissionDenied;
-import com.netease.nim.uikit.permission.annotation.OnMPermissionGranted;
-import com.netease.nim.uikit.permission.annotation.OnMPermissionNeverAskAgain;
-import com.netease.nimlib.sdk.AbortableFuture;
-import com.netease.nimlib.sdk.NIMClient;
-import com.netease.nimlib.sdk.RequestCallback;
-import com.netease.nimlib.sdk.RequestCallbackWrapper;
-import com.netease.nimlib.sdk.ResponseCode;
-import com.netease.nimlib.sdk.StatusBarNotificationConfig;
-import com.netease.nimlib.sdk.auth.AuthService;
-import com.netease.nimlib.sdk.auth.ClientType;
-import com.netease.nimlib.sdk.auth.LoginInfo;
-
-/**
- * 登录/注册界面
- * <p/>
- * Created by huangjun on 2015/2/1.
- */
-public class LoginActivityBak extends UI implements OnKeyListener {
-
-    private static final String TAG = LoginActivityBak.class.getSimpleName();
-    private static final String KICK_OUT = "KICK_OUT";
-    private final int BASIC_PERMISSION_REQUEST_CODE = 110;
-
-    private TextView rightTopBtn;  // ActionBar完成按钮
-    private TextView switchModeBtn;  // 注册/登录切换按钮
-
-    private ClearableEditTextWithIcon loginAccountEdit;
-    private ClearableEditTextWithIcon loginPasswordEdit;
-
-    private ClearableEditTextWithIcon registerAccountEdit;
-    private ClearableEditTextWithIcon registerNickNameEdit;
-    private ClearableEditTextWithIcon registerPasswordEdit;
-
-    private View loginLayout;
-    private View registerLayout;
-
-    private AbortableFuture<LoginInfo> loginRequest;
-    private boolean registerMode = false; // 注册模式
-    private boolean registerPanelInited = false; // 注册面板是否初始化
-
-    public static void start(Context context) {
-        start(context, false);
-    }
-
-    public static void start(Context context, boolean kickOut) {
-        Intent intent = new Intent(context, LoginActivityBak.class);
-        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
-        intent.putExtra(KICK_OUT, kickOut);
-        context.startActivity(intent);
-    }
-
-    @Override
-    protected boolean displayHomeAsUpEnabled() {
-        return false;
-    }
-
-    @Override
-    public boolean onKey(View v, int keyCode, KeyEvent event) {
-        return false;
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.login_activity);
-
-        ToolBarOptions options = new ToolBarOptions();
-        options.isNeedNavigate = false;
-        options.logoId = R.drawable.actionbar_white_logo_space;
-        setToolBar(R.id.toolbar, options);
-
-        requestBasicPermission();
-
-        onParseIntent();
-        initRightTopBtn();
-        setupLoginPanel();
-        setupRegisterPanel();
-    }
-
-    /**
-     * 基本权限管理
-     */
-
-    private final String[] BASIC_PERMISSIONS = new String[]{
-            Manifest.permission.WRITE_EXTERNAL_STORAGE,
-            Manifest.permission.READ_EXTERNAL_STORAGE
-    };
-
-    private void requestBasicPermission() {
-        MPermission.with(LoginActivityBak.this)
-                .setRequestCode(BASIC_PERMISSION_REQUEST_CODE)
-                .permissions(BASIC_PERMISSIONS)
-                .request();
-    }
-
-    @Override
-    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
-        MPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
-    }
-
-    @OnMPermissionGranted(BASIC_PERMISSION_REQUEST_CODE)
-    public void onBasicPermissionSuccess() {
-        Toast.makeText(this, "授权成功", Toast.LENGTH_SHORT).show();
-    }
-
-    @OnMPermissionDenied(BASIC_PERMISSION_REQUEST_CODE)
-    @OnMPermissionNeverAskAgain(BASIC_PERMISSION_REQUEST_CODE)
-    public void onBasicPermissionFailed() {
-        Toast.makeText(this, "授权失败", Toast.LENGTH_SHORT).show();
-    }
-
-    private void onParseIntent() {
-        if (getIntent().getBooleanExtra(KICK_OUT, false)) {
-            int type = NIMClient.getService(AuthService.class).getKickedClientType();
-            String client;
-            switch (type) {
-                case ClientType.Web:
-                    client = "网页端";
-                    break;
-                case ClientType.Windows:
-                    client = "电脑端";
-                    break;
-                case ClientType.REST:
-                    client = "服务端";
-                    break;
-                default:
-                    client = "移动端";
-                    break;
-            }
-            EasyAlertDialogHelper.showOneButtonDiolag(LoginActivityBak.this, getString(R.string.kickout_notify),
-                    String.format(getString(R.string.kickout_content), client), getString(R.string.ok), true, null);
-        }
-    }
-
-    /**
-     * ActionBar 右上角按钮
-     */
-    private void initRightTopBtn() {
-        rightTopBtn = addRegisterRightTopBtn(this, R.string.login);
-        rightTopBtn.setOnClickListener(new OnClickListener() {
-
-            @Override
-            public void onClick(View v) {
-                if (registerMode) {
-                    register();
-                } else {
-                    //fakeLoginTest(); // 假登录代码示例
-                    login();
-                }
-            }
-        });
-    }
-
-    /**
-     * 登录面板
-     */
-    private void setupLoginPanel() {
-        loginAccountEdit = findView(R.id.edit_login_account);
-        loginPasswordEdit = findView(R.id.edit_login_password);
-
-        loginAccountEdit.setIconResource(R.drawable.user_account_icon);
-        loginPasswordEdit.setIconResource(R.drawable.user_pwd_lock_icon);
-
-        loginAccountEdit.setFilters(new InputFilter[]{new InputFilter.LengthFilter(32)});
-        loginPasswordEdit.setFilters(new InputFilter[]{new InputFilter.LengthFilter(32)});
-        loginAccountEdit.addTextChangedListener(textWatcher);
-        loginPasswordEdit.addTextChangedListener(textWatcher);
-        loginPasswordEdit.setOnKeyListener(this);
-
-        String account = Preferences.getUserAccount();
-        loginAccountEdit.setText(account);
-    }
-
-    /**
-     * 注册面板
-     */
-    private void setupRegisterPanel() {
-        loginLayout = findView(R.id.login_layout);
-        registerLayout = findView(R.id.register_layout);
-        switchModeBtn = findView(R.id.register_login_tip);
-
-        switchModeBtn.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                switchMode();
-            }
-        });
-    }
-
-    private TextWatcher textWatcher = new TextWatcher() {
-
-        @Override
-        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-
-        }
-
-        @Override
-        public void onTextChanged(CharSequence s, int start, int before, int count) {
-
-        }
-
-        @Override
-        public void afterTextChanged(Editable s) {
-            // 更新右上角按钮状态
-            if (!registerMode) {
-                // 登录模式
-                boolean isEnable = loginAccountEdit.getText().length() > 0
-                        && loginPasswordEdit.getText().length() > 0;
-                updateRightTopBtn(LoginActivityBak.this, rightTopBtn, isEnable);
-            }
-        }
-    };
-
-    private void updateRightTopBtn(Context context, TextView rightTopBtn, boolean isEnable) {
-        rightTopBtn.setText(R.string.done);
-        rightTopBtn.setBackgroundResource(R.drawable.g_white_btn_selector);
-        rightTopBtn.setEnabled(isEnable);
-        rightTopBtn.setTextColor(context.getResources().getColor(R.color.color_blue_0888ff));
-        rightTopBtn.setPadding(ScreenUtil.dip2px(10), 0, ScreenUtil.dip2px(10), 0);
-    }
-
-    /**
-     * ***************************************** 登录 **************************************
-     */
-
-    private void login() {
-        DialogMaker.showProgressDialog(this, null, getString(R.string.logining), true, new DialogInterface.OnCancelListener() {
-            @Override
-            public void onCancel(DialogInterface dialog) {
-                if (loginRequest != null) {
-                    loginRequest.abort();
-                    onLoginDone();
-                }
-            }
-        }).setCanceledOnTouchOutside(false);
-
-        // 云信只提供消息通道,并不包含用户资料逻辑。开发者需要在管理后台或通过服务器接口将用户帐号和token同步到云信服务器。
-        // 在这里直接使用同步到云信服务器的帐号和token登录。
-        // 这里为了简便起见,demo就直接使用了密码的md5作为token。
-        // 如果开发者直接使用这个demo,只更改appkey,然后就登入自己的账户体系的话,需要传入同步到云信服务器的token,而不是用户密码。
-        final String account = loginAccountEdit.getEditableText().toString().toLowerCase();
-        final String token = tokenFromPassword(loginPasswordEdit.getEditableText().toString());
-        // 登录
-        loginRequest = NimUIKit.doLogin(new LoginInfo(account, token), new RequestCallback<LoginInfo>() {
-            @Override
-            public void onSuccess(LoginInfo param) {
-                LogUtil.i(TAG, "login success");
-
-                onLoginDone();
-
-                SheishuoCache.setAccount(account);
-                saveLoginInfo(account, token);
-
-                // 初始化消息提醒配置
-                initNotificationConfig();
-
-                // 进入主界面
-                MainActivity.start(LoginActivityBak.this, null);
-                finish();
-            }
-
-            @Override
-            public void onFailed(int code) {
-                onLoginDone();
-                if (code == 302 || code == 404) {
-                    Toast.makeText(LoginActivityBak.this, R.string.login_failed, Toast.LENGTH_SHORT).show();
-                } else {
-                    Toast.makeText(LoginActivityBak.this, "登录失败: " + code, Toast.LENGTH_SHORT).show();
-                }
-            }
-
-            @Override
-            public void onException(Throwable exception) {
-                Toast.makeText(LoginActivityBak.this, R.string.login_exception, Toast.LENGTH_LONG).show();
-                onLoginDone();
-            }
-        });
-    }
-
-    private void initNotificationConfig() {
-        // 初始化消息提醒
-        NIMClient.toggleNotification(UserPreferences.getNotificationToggle());
-
-        // 加载状态栏配置
-        StatusBarNotificationConfig statusBarNotificationConfig = UserPreferences.getStatusConfig();
-        if (statusBarNotificationConfig == null) {
-            statusBarNotificationConfig = SheishuoCache.getNotificationConfig();
-            UserPreferences.setStatusConfig(statusBarNotificationConfig);
-        }
-        // 更新配置
-        NIMClient.updateStatusBarNotificationConfig(statusBarNotificationConfig);
-    }
-
-    private void onLoginDone() {
-        loginRequest = null;
-        DialogMaker.dismissProgressDialog();
-    }
-
-    private void saveLoginInfo(final String account, final String token) {
-        Preferences.saveUserAccount(account);
-        Preferences.saveUserToken(token);
-    }
-
-    //DEMO中使用 username 作为 NIM 的account ,md5(password) 作为 token
-    //开发者需要根据自己的实际情况配置自身用户系统和 NIM 用户系统的关系
-    private String tokenFromPassword(String password) {
-        String appKey = readAppKey(this);
-        boolean isDemo = "45c6af3c98409b18a84451215d0bdd6e".equals(appKey)
-                || "fe416640c8e8a72734219e1847ad2547".equals(appKey);
-
-        return isDemo ? MD5.getStringMD5(password) : password;
-    }
-
-    private static String readAppKey(Context context) {
-        try {
-            ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
-            if (appInfo != null) {
-                return appInfo.metaData.getString("com.netease.nim.appKey");
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-
-    /**
-     * ***************************************** 注册 **************************************
-     */
-
-    private void register() {
-        if (!registerMode || !registerPanelInited) {
-            return;
-        }
-
-        if (!checkRegisterContentValid()) {
-            return;
-        }
-
-        if (!NetworkUtil.isNetAvailable(LoginActivityBak.this)) {
-            Toast.makeText(LoginActivityBak.this, R.string.network_is_not_available, Toast.LENGTH_SHORT).show();
-            return;
-        }
-
-        DialogMaker.showProgressDialog(this, getString(R.string.registering), false);
-
-        // 注册流程
-        final String account = registerAccountEdit.getText().toString();
-        final String nickName = registerNickNameEdit.getText().toString();
-        final String password = registerPasswordEdit.getText().toString();
-
-        ContactHttpClient.getInstance().register(account, nickName, password, new ContactHttpClient.ContactHttpCallback<Void>() {
-            @Override
-            public void onSuccess(Void aVoid) {
-                Toast.makeText(LoginActivityBak.this, R.string.register_success, Toast.LENGTH_SHORT).show();
-                switchMode();  // 切换回登录
-                loginAccountEdit.setText(account);
-                loginPasswordEdit.setText(password);
-
-                registerAccountEdit.setText("");
-                registerNickNameEdit.setText("");
-                registerPasswordEdit.setText("");
-
-                DialogMaker.dismissProgressDialog();
-            }
-
-            @Override
-            public void onFailed(int code, String errorMsg) {
-                Toast.makeText(LoginActivityBak.this, getString(R.string.register_failed, String.valueOf(code), errorMsg), Toast.LENGTH_SHORT)
-                        .show();
-
-                DialogMaker.dismissProgressDialog();
-            }
-        });
-    }
-
-    private boolean checkRegisterContentValid() {
-        if (!registerMode || !registerPanelInited) {
-            return false;
-        }
-
-        // 帐号检查
-        String account = registerAccountEdit.getText().toString().trim();
-        if (account.length() <= 0 || account.length() > 20) {
-            Toast.makeText(this, R.string.register_account_tip, Toast.LENGTH_SHORT).show();
-
-            return false;
-        }
-
-        // 昵称检查
-        String nick = registerNickNameEdit.getText().toString().trim();
-        if (nick.length() <= 0 || nick.length() > 10) {
-            Toast.makeText(this, R.string.register_nick_name_tip, Toast.LENGTH_SHORT).show();
-
-            return false;
-        }
-
-        // 密码检查
-        String password = registerPasswordEdit.getText().toString().trim();
-        if (password.length() < 6 || password.length() > 20) {
-            Toast.makeText(this, R.string.register_password_tip, Toast.LENGTH_SHORT).show();
-
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * ***************************************** 注册/登录切换 **************************************
-     */
-    private void switchMode() {
-        registerMode = !registerMode;
-
-        if (registerMode && !registerPanelInited) {
-            registerAccountEdit = findView(R.id.edit_register_account);
-            registerNickNameEdit = findView(R.id.edit_register_nickname);
-            registerPasswordEdit = findView(R.id.edit_register_password);
-
-            registerAccountEdit.setIconResource(R.drawable.user_account_icon);
-            registerNickNameEdit.setIconResource(R.drawable.nick_name_icon);
-            registerPasswordEdit.setIconResource(R.drawable.user_pwd_lock_icon);
-
-            registerAccountEdit.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)});
-            registerNickNameEdit.setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)});
-            registerPasswordEdit.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)});
-
-            registerAccountEdit.addTextChangedListener(textWatcher);
-            registerNickNameEdit.addTextChangedListener(textWatcher);
-            registerPasswordEdit.addTextChangedListener(textWatcher);
-
-            registerPanelInited = true;
-        }
-
-        setTitle(registerMode ? R.string.register : R.string.login);
-        loginLayout.setVisibility(registerMode ? View.GONE : View.VISIBLE);
-        registerLayout.setVisibility(registerMode ? View.VISIBLE : View.GONE);
-        switchModeBtn.setText(registerMode ? R.string.login_has_account : R.string.register);
-        if (registerMode) {
-            rightTopBtn.setEnabled(true);
-        } else {
-            boolean isEnable = loginAccountEdit.getText().length() > 0
-                    && loginPasswordEdit.getText().length() > 0;
-            rightTopBtn.setEnabled(isEnable);
-        }
-    }
-
-    public TextView addRegisterRightTopBtn(UI activity, int strResId) {
-        String text = activity.getResources().getString(strResId);
-        TextView textView = findView(R.id.action_bar_right_clickable_textview);
-        textView.setText(text);
-        if (textView != null) {
-            textView.setBackgroundResource(R.drawable.register_right_top_btn_selector);
-            textView.setPadding(ScreenUtil.dip2px(10), 0, ScreenUtil.dip2px(10), 0);
-        }
-        return textView;
-    }
-
-    /**
-     * *********** 假登录示例:假登录后,可以查看该用户数据,但向云信发送数据会失败;随后手动登录后可以发数据 **************
-     */
-    private void fakeLoginTest() {
-        // 获取账号、密码;账号用于假登录,密码在手动登录时需要
-        final String account = loginAccountEdit.getEditableText().toString().toLowerCase();
-        final String token = tokenFromPassword(loginPasswordEdit.getEditableText().toString());
-
-        // 执行假登录
-        boolean res = NIMClient.getService(AuthService.class).openLocalCache(account); // SDK会将DB打开,支持查询。
-        Log.i("test", "fake login " + (res ? "success" : "failed"));
-
-        if (!res) {
-            return;
-        }
-
-        // Demo缓存当前假登录的账号
-        SheishuoCache.setAccount(account);
-
-        // 初始化消息提醒配置
-        initNotificationConfig();
-
-        // 构建缓存
-        DataCacheManager.buildDataCacheAsync();
-        NimUIKit.getImageLoaderKit().buildImageCache();
-
-        // 进入主界面,此时可以查询数据(最近联系人列表、本地消息历史、群资料等都可以查询,但当云信服务器发起请求会返回408超时)
-        MainActivity.start(LoginActivityBak.this, null);
-
-        // 演示15s后手动登录,登录成功后,可以正常收发数据
-        getHandler().postDelayed(new Runnable() {
-            @Override
-            public void run() {
-                loginRequest = NIMClient.getService(AuthService.class).login(new LoginInfo(account, token));
-                loginRequest.setCallback(new RequestCallbackWrapper() {
-                    @Override
-                    public void onResult(int code, Object result, Throwable exception) {
-                        Log.i("test", "real login, code=" + code);
-                        if (code == ResponseCode.RES_SUCCESS) {
-                            saveLoginInfo(account, token);
-                            finish();
-                        }
-                    }
-                });
-            }
-        }, 15 * 1000);
-    }
-}

+ 0 - 8
app/src/com/sheishuo/app/login/beans/LoginBean.java

@@ -15,7 +15,6 @@ public class LoginBean {
      */
 
     private int c;
-    private String d1;
     private DBean d;
 
     public int getC() {
@@ -34,13 +33,6 @@ public class LoginBean {
         this.d = d;
     }
 
-    public String getD1() {
-        return d1;
-    }
-
-    public void setD1(String d1) {
-        this.d1 = d1;
-    }
 
     public static class DBean {
         /**

+ 14 - 16
app/src/com/sheishuo/app/main/activity/MainActivity.java

@@ -12,22 +12,8 @@ import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.widget.Toast;
 
-import com.sheishuo.app.avchat.AVChatProfile;
-import com.sheishuo.app.avchat.activity.AVChatActivity;
-import com.sheishuo.app.chatroom.helper.ChatRoomHelper;
-import com.sheishuo.app.config.preference.UserPreferences;
-import com.sheishuo.app.contact.activity.AddFriendActivity;
-import com.sheishuo.app.login.LoginActivityBak;
-import com.sheishuo.app.login.LogoutHelperBak;
-import com.sheishuo.app.main.fragment.HomeFragment;
-import com.sheishuo.app.main.model.Extras;
-import com.sheishuo.app.session.SessionHelper;
-import com.sheishuo.app.team.TeamCreateHelper;
-import com.sheishuo.app.team.activity.AdvancedTeamSearchActivity;
-import com.sheishuo.app.R;
 import com.netease.nim.uikit.LoginSyncDataStatusObserver;
 import com.netease.nim.uikit.NimUIKit;
-import com.netease.nim.uikit.common.activity.UI;
 import com.netease.nim.uikit.common.ui.dialog.DialogMaker;
 import com.netease.nim.uikit.common.util.log.LogUtil;
 import com.netease.nim.uikit.contact_selector.activity.ContactSelectActivity;
@@ -42,7 +28,19 @@ import com.netease.nimlib.sdk.Observer;
 import com.netease.nimlib.sdk.StatusBarNotificationConfig;
 import com.netease.nimlib.sdk.mixpush.MixPushService;
 import com.netease.nimlib.sdk.msg.model.IMMessage;
-import com.sheishuo.app.uikit_implements.SheishuoToolbarOptions;
+import com.sheishuo.app.R;
+import com.sheishuo.app.avchat.AVChatProfile;
+import com.sheishuo.app.avchat.activity.AVChatActivity;
+import com.sheishuo.app.chatroom.helper.ChatRoomHelper;
+import com.sheishuo.app.config.preference.UserPreferences;
+import com.sheishuo.app.contact.activity.AddFriendActivity;
+import com.sheishuo.app.login.LoginActivity;
+import com.sheishuo.app.login.LogoutHelperBak;
+import com.sheishuo.app.main.fragment.HomeFragment;
+import com.sheishuo.app.main.model.Extras;
+import com.sheishuo.app.session.SessionHelper;
+import com.sheishuo.app.team.TeamCreateHelper;
+import com.sheishuo.app.team.activity.AdvancedTeamSearchActivity;
 import com.sheishuo.app.uikit_implements.SheishuoUI;
 
 import java.util.ArrayList;
@@ -311,7 +309,7 @@ public class MainActivity extends SheishuoUI {
         LogoutHelperBak.logout();
 
         // 启动登录
-        LoginActivityBak.start(this);
+        LoginActivity.start(this);
         finish();
     }
 }

+ 36 - 0
app/src/com/sheishuo/app/main/fragment/CircleOfFriendsFragment.java

@@ -0,0 +1,36 @@
+package com.sheishuo.app.main.fragment;
+
+import android.os.Bundle;
+import android.support.design.widget.FloatingActionButton;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.sheishuo.app.R;
+import com.sheishuo.app.main.model.MainTab;
+
+
+/**
+ * Created by KN on 2017/7/17.
+ */
+
+public class CircleOfFriendsFragment extends MainTabFragment {
+
+    private FloatingActionButton fab;
+
+    public CircleOfFriendsFragment(){
+        setContainerId(MainTab.CIRCLE_OF_FRIENDS.fragmentId);
+    }
+    @Override
+    protected void onInit() {
+        fab = (FloatingActionButton) getView().findViewById(R.id.activity_details_fab);
+        fab.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                System.out.println("FAB click");
+            }
+        });
+    }
+
+
+}

+ 29 - 2
app/src/com/sheishuo/app/main/fragment/HomeFragment.java

@@ -1,5 +1,6 @@
 package com.sheishuo.app.main.fragment;
 
+import android.content.Context;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.design.widget.BottomNavigationView;
@@ -12,6 +13,14 @@ import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 
+import com.netease.nim.uikit.NimUIKit;
+import com.netease.nim.uikit.session.SessionCustomization;
+import com.netease.nim.uikit.session.activity.TeamMessageActivity;
+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.AccountCache;
+import com.sheishuo.app.SheishuoCache;
 import com.sheishuo.app.main.reminder.ReminderManager;
 import com.sheishuo.app.R;
 import com.sheishuo.app.common.ui.viewpager.FadeInOutPageTransformer;
@@ -38,9 +47,10 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * 云信主界面(导航页)
+ * Created by KN on 2017/7/17.
  */
 public class HomeFragment extends TFragment implements OnPageChangeListener, ReminderManager.UnreadNumChangedCallback {
+    private Context context = getContext();
 
     private String TAG = this.getClass().getSimpleName();
 
@@ -84,9 +94,26 @@ public class HomeFragment extends TFragment implements OnPageChangeListener, Rem
         registerSystemMessageObservers(true);
         requestSystemMessageUnreadCount();
         initUnreadCover();
+        autoJoinAreaChat();
+
+    }
+
+
+    //自动加入地区群聊
+    public void autoJoinAreaChat(){
+        List<String> autoJoinList = new ArrayList<>();
+        autoJoinList.add(AccountCache.getAccount().getCountry_room_id());
+        autoJoinList.add(AccountCache.getAccount().getProvince_room_id());
+        autoJoinList.add(AccountCache.getAccount().getCity_room_id());
+        autoJoinList.add(AccountCache.getAccount().getDistrict_room_id());
+
+        for(String roomId : autoJoinList){
+            if (roomId != null)NIMClient.getService(TeamService.class).applyJoinTeam(roomId, null);
+        }
+
     }
 
-    //init NavigationView
+    //初始化BottomNavigationView
     public void initNavigationView(){
         navigationbarItemList.add(R.id.main_navi_sheishuo);
         navigationbarItemList.add(R.id.main_navi_friends);

+ 14 - 13
app/src/com/sheishuo/app/main/fragment/SessionListFragment.java

@@ -5,18 +5,6 @@ import android.view.View;
 import android.widget.TextView;
 import android.widget.Toast;
 
-import com.sheishuo.app.login.LogoutHelperBak;
-import com.sheishuo.app.main.reminder.ReminderManager;
-import com.sheishuo.app.session.extension.GuessAttachment;
-import com.sheishuo.app.session.extension.SnapChatAttachment;
-import com.sheishuo.app.R;
-import com.sheishuo.app.config.preference.Preferences;
-import com.sheishuo.app.login.LoginActivityBak;
-import com.sheishuo.app.main.activity.MultiportActivity;
-import com.sheishuo.app.main.model.MainTab;
-import com.sheishuo.app.session.SessionHelper;
-import com.sheishuo.app.session.extension.RTSAttachment;
-import com.sheishuo.app.session.extension.StickerAttachment;
 import com.netease.nim.uikit.common.activity.UI;
 import com.netease.nim.uikit.common.util.log.LogUtil;
 import com.netease.nim.uikit.recent.RecentContactsCallback;
@@ -31,6 +19,18 @@ import com.netease.nimlib.sdk.msg.MsgService;
 import com.netease.nimlib.sdk.msg.attachment.MsgAttachment;
 import com.netease.nimlib.sdk.msg.model.IMMessage;
 import com.netease.nimlib.sdk.msg.model.RecentContact;
+import com.sheishuo.app.R;
+import com.sheishuo.app.config.preference.Preferences;
+import com.sheishuo.app.login.LoginActivity;
+import com.sheishuo.app.login.LogoutHelperBak;
+import com.sheishuo.app.main.activity.MultiportActivity;
+import com.sheishuo.app.main.model.MainTab;
+import com.sheishuo.app.main.reminder.ReminderManager;
+import com.sheishuo.app.session.SessionHelper;
+import com.sheishuo.app.session.extension.GuessAttachment;
+import com.sheishuo.app.session.extension.RTSAttachment;
+import com.sheishuo.app.session.extension.SnapChatAttachment;
+import com.sheishuo.app.session.extension.StickerAttachment;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -162,6 +162,7 @@ public class SessionListFragment extends MainTabFragment {
             Toast.makeText(getActivity(), R.string.login_failed, Toast.LENGTH_SHORT).show();
         } else {
             LogUtil.i("Auth", "Kicked!");
+            Toast.makeText(getActivity(),"您的账号已在其他设备登录,请重新登录!", Toast.LENGTH_SHORT).show();
         }
         onLogout();
     }
@@ -171,7 +172,7 @@ public class SessionListFragment extends MainTabFragment {
         // 清理缓存&注销监听&清除状态
         LogoutHelperBak.logout();
 
-        LoginActivityBak.start(getActivity(), true);
+        LoginActivity.start(getActivity());
         getActivity().finish();
     }
 

+ 3 - 2
app/src/com/sheishuo/app/main/model/MainTab.java

@@ -1,5 +1,6 @@
 package com.sheishuo.app.main.model;
 
+import com.sheishuo.app.main.fragment.CircleOfFriendsFragment;
 import com.sheishuo.app.main.fragment.SessionListFragment;
 import com.sheishuo.app.main.reminder.ReminderId;
 import com.sheishuo.app.R;
@@ -10,8 +11,8 @@ import com.sheishuo.app.main.fragment.MainTabFragment;
 public enum MainTab {
     RECENT_CONTACTS(0, ReminderId.SESSION, SessionListFragment.class, R.string.main_tab_session, R.layout.session_list),
     CONTACT(1, ReminderId.CONTACT, ContactListFragment.class, R.string.main_tab_contact, R.layout.contacts_list),
-    CHAT_ROOM(2, ReminderId.INVALID, ChatRoomListFragment.class, R.string.chat_room, R.layout.chat_room_tab);
-
+    CHAT_ROOM(2, ReminderId.INVALID, ChatRoomListFragment.class, R.string.chat_room, R.layout.chat_room_tab),
+    CIRCLE_OF_FRIENDS(3,ReminderId.INVALID, CircleOfFriendsFragment.class,R.string.main_tab_circleoffriends,R.layout.circle_of_friends_fragment);
     public final int tabIndex;
 
     public final int reminderId;

+ 3 - 0
uikit/src/com/netease/nim/uikit/recent/RecentContactsFragment.java

@@ -31,6 +31,8 @@ import com.netease.nimlib.sdk.ResponseCode;
 import com.netease.nimlib.sdk.msg.MsgService;
 import com.netease.nimlib.sdk.msg.MsgServiceObserve;
 import com.netease.nimlib.sdk.msg.attachment.MsgAttachment;
+import com.netease.nimlib.sdk.msg.constant.MsgStatusEnum;
+import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;
 import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
 import com.netease.nimlib.sdk.msg.model.IMMessage;
 import com.netease.nimlib.sdk.msg.model.QueryDirectionEnum;
@@ -514,6 +516,7 @@ public class RecentContactsFragment extends TFragment {
                 items.remove(index);
             }
 
+
             items.add(r);
             if (r.getSessionType() == SessionTypeEnum.Team && cacheMessages.get(r.getContactId()) != null) {
                 TeamMemberAitHelper.setRecentContactAited(r, cacheMessages.get(r.getContactId()));

+ 5 - 7
uikit/src/com/netease/nim/uikit/session/actions/GiftAction.java

@@ -11,19 +11,17 @@ import com.netease.nimlib.sdk.msg.model.IMMessage;
 
 public class GiftAction extends BaseAction {
 
-    /**
-     * 构造函数
-     *
-     * @param iconResId 图标 res id
-     * @param titleId   图标标题的string res id
-     */
+
     public GiftAction() {
         super(R.drawable.nim_actionbar_dark_back_icon, R.string.input_panel_gift);
     }
 
     @Override
     public void onClick() {
-        IMMessage giftMessage = MessageBuilder.createTextMessage(getAccount(), SessionTypeEnum.ChatRoom,"赠送礼物");
+        IMMessage giftMessage = MessageBuilder.createTextMessage(getAccount(), SessionTypeEnum.Team,"赠送礼物");
         sendMessage(giftMessage);
+        IMMessage tipMessage = MessageBuilder.createTipMessage(getAccount(),SessionTypeEnum.Team);
+        tipMessage.setContent("礼物消息");
+        sendMessage(tipMessage);
     }
 }

+ 7 - 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/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" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
-      <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" />
@@ -73,6 +66,13 @@
       <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" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
+      <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" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />