Jelajahi Sumber

添加集成web组件

Arison 6 tahun lalu
induk
melakukan
0a7cca07e9
32 mengubah file dengan 886 tambahan dan 36 penghapusan
  1. 1 0
      lib_common/build.gradle
  2. 10 0
      lib_common/src/main/java/com/uas/module/common/utils/Constants.java
  3. 1 0
      module_app/build.gradle
  4. 2 3
      module_girls/src/main/java/com/uas/module/girls/MyDelegate.java
  5. 1 0
      module_home/build.gradle
  6. 8 5
      module_home/src/main/AndroidManifest.xml
  7. 1 1
      module_home/src/main/java/com/uas/module/home/main/TestMainActivity.java
  8. 39 0
      module_home/src/main/java/com/uas/module/home/model/GroupMessageBean.java
  9. 84 0
      module_home/src/main/java/com/uas/module/home/model/MessageConfigBean.java
  10. 30 0
      module_home/src/main/java/com/uas/module/home/model/UnreadMessageBean.java
  11. 17 0
      module_home/src/main/java/com/uas/module/home/ui/HomeActivity.java
  12. 125 15
      module_home/src/main/java/com/uas/module/home/ui/LoginActivity.java
  13. 196 1
      module_home/src/main/java/com/uas/module/home/ui/RegisterActivity.java
  14. 9 0
      module_home/src/main/res/layout/activity_home.xml
  15. 125 4
      module_main/src/main/java/com/uas/module/main/BottomNavigationActivity.java
  16. 2 0
      module_main/src/main/java/com/uas/module/main/MainActivity.java
  17. 4 3
      module_main/src/main/res/values/strings.xml
  18. 1 0
      module_mine/.gitignore
  19. 52 0
      module_mine/build.gradle
  20. 25 0
      module_mine/proguard-rules.pro
  21. 26 0
      module_mine/src/androidTest/java/com/uas/module/mine/ExampleInstrumentedTest.java
  22. 2 0
      module_mine/src/main/AndroidManifest.xml
  23. 31 0
      module_mine/src/main/java/com/uas/module/mine/MineFragment.java
  24. 33 0
      module_mine/src/main/java/com/uas/module/mine/MyDelegate.java
  25. 23 0
      module_mine/src/main/java/com/uas/module/mine/MyViewDelegate.java
  26. 12 0
      module_mine/src/main/res/layout/fragment_mine.xml
  27. 3 0
      module_mine/src/main/res/values/strings.xml
  28. 17 0
      module_mine/src/test/java/com/uas/module/mine/ExampleUnitTest.java
  29. 1 2
      module_news/src/main/java/com/uas/module/news/MyDelegate.java
  30. 1 1
      module_news/src/main/java/com/uas/module/news/NewsFragment.java
  31. 1 1
      settings.gradle
  32. 3 0
      versions.gradle

+ 1 - 0
lib_common/build.gradle

@@ -74,6 +74,7 @@ dependencies {
     api deps.agentweb
     api deps.circleimageview
     api deps.MNProgressHUD
+    api deps.badgeview
 
     //router
     api deps.arouter_api

+ 10 - 0
lib_common/src/main/java/com/uas/module/common/utils/Constants.java

@@ -0,0 +1,10 @@
+package com.uas.module.common.utils;
+
+/**
+ * Created by Arison on 2019/5/9.
+ */
+
+public class Constants {
+    
+    public final static String spName="uu_sp";
+}

+ 1 - 0
module_app/build.gradle

@@ -94,5 +94,6 @@ dependencies {
         implementation project(':module_girls')
         implementation project(':module_news')
         implementation project(':module_home')
+        implementation project(':module_mine')
     }
 }

+ 2 - 3
module_girls/src/main/java/com/uas/module/girls/MyDelegate.java

@@ -3,7 +3,6 @@ package com.uas.module.girls;
 import android.support.annotation.Keep;
 
 import com.uas.module.common.base.IApplicationDelegate;
-import com.uas.module.common.base.ViewManager;
 
 
 @Keep
@@ -12,8 +11,8 @@ public class MyDelegate implements IApplicationDelegate {
     @Override
     public void onCreate() {
         //主动添加
-        ViewManager.getInstance().addFragment(0, GirlsFragment.newInstance());
-        ViewManager.getInstance().addFragment(1, GirlsFragment.newInstance());
+       // ViewManager.getInstance().addFragment(0, GirlsFragment.newInstance());
+        //ViewManager.getInstance().addFragment(1, GirlsFragment.newInstance());
     }
 
     @Override

+ 1 - 0
module_home/build.gradle

@@ -50,4 +50,5 @@ dependencies {
     annotationProcessor deps.arouter_compiler
     implementation project(':lib_common')
     implementation  project(path: ':lib_widget')
+compile 'com.android.support.constraint:constraint-layout:1.0.2'
 }

+ 8 - 5
module_home/src/main/AndroidManifest.xml

@@ -7,12 +7,15 @@
             android:name=".main.TestMainActivity"
             android:label="@string/title_activity_test_main"
             android:theme="@style/AppTheme" />
-        <activity android:name=".ui.LoginActivity" 
-            android:theme="@style/AppTheme.NoActionBar"/>
+        <activity
+            android:name=".ui.LoginActivity"
+            android:theme="@style/AppTheme.NoActionBar" />
         <activity android:name=".ui.RegisterActivity" />
-        <activity android:name=".ui.SettingActivity"
-            android:theme="@style/TransparentStatusBarTheme"/>
-        <activity android:name=".main.IndexActivity"></activity>
+        <activity
+            android:name=".ui.SettingActivity"
+            android:theme="@style/TransparentStatusBarTheme" />
+        <activity android:name=".main.IndexActivity" />
+        <activity android:name=".ui.HomeActivity"></activity>
     </application>
 
 </manifest>

+ 1 - 1
module_home/src/main/java/com/uas/module/home/main/TestMainActivity.java

@@ -40,7 +40,7 @@ import io.grpc.ManagedChannelBuilder;
 import io.grpc.StatusRuntimeException;
 
 
-@Route(path = "/home/index")
+@Route(path = "/home/test")
 public class TestMainActivity extends AppCompatActivity {
     
     //10.1.81.83

+ 39 - 0
module_home/src/main/java/com/uas/module/home/model/GroupMessageBean.java

@@ -0,0 +1,39 @@
+package com.uas.module.home.model;
+
+import java.util.List;
+
+/**
+ * 工作台配置Model
+ * Created by Arison on 2019/5/9.
+ */
+
+public class GroupMessageBean {
+    
+    private int appConfigCount;
+    private List<MessageConfigBean> appConfigList;
+    private String name;
+
+    public int getAppConfigCount() {
+        return appConfigCount;
+    }
+
+    public void setAppConfigCount(int appConfigCount) {
+        this.appConfigCount = appConfigCount;
+    }
+
+    public List<MessageConfigBean> getAppConfigList() {
+        return appConfigList;
+    }
+
+    public void setAppConfigList(List<MessageConfigBean> appConfigList) {
+        this.appConfigList = appConfigList;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 84 - 0
module_home/src/main/java/com/uas/module/home/model/MessageConfigBean.java

@@ -0,0 +1,84 @@
+package com.uas.module.home.model;
+
+
+/**
+ * Auto-generated: 2019-05-09 15:58:29
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+public class MessageConfigBean  {
+
+    private int id;
+    private String androidWidget;
+    private String code;
+    private String icon;
+    private String iosWidget;
+    private String name;
+    private String viewType;
+    private int viewTypeValue;
+    private String webUrl;
+    public void setAndroidWidget(String androidWidget) {
+        this.androidWidget = androidWidget;
+    }
+    public String getAndroidWidget() {
+        return androidWidget;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+    public String getCode() {
+        return code;
+    }
+
+    public void setIcon(String icon) {
+        this.icon = icon;
+    }
+    public String getIcon() {
+        return icon;
+    }
+
+    public void setIosWidget(String iosWidget) {
+        this.iosWidget = iosWidget;
+    }
+    public String getIosWidget() {
+        return iosWidget;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+    public String getName() {
+        return name;
+    }
+
+    public void setViewType(String viewType) {
+        this.viewType = viewType;
+    }
+    public String getViewType() {
+        return viewType;
+    }
+
+    public void setViewTypeValue(int viewTypeValue) {
+        this.viewTypeValue = viewTypeValue;
+    }
+    public int getViewTypeValue() {
+        return viewTypeValue;
+    }
+
+    public void setWebUrl(String webUrl) {
+        this.webUrl = webUrl;
+    }
+    public String getWebUrl() {
+        return webUrl;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+}

+ 30 - 0
module_home/src/main/java/com/uas/module/home/model/UnreadMessageBean.java

@@ -0,0 +1,30 @@
+/**
+ * Copyright 2019 bejson.com 
+ */
+package com.uas.module.home.model;
+
+/**
+ * Auto-generated: 2019-05-09 16:36:22
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+public class UnreadMessageBean {
+
+    private String code;
+    private int count;
+    public void setCode(String code) {
+        this.code = code;
+    }
+    public String getCode() {
+        return code;
+    }
+
+    public void setCount(int count) {
+        this.count = count;
+    }
+    public int getCount() {
+        return count;
+    }
+
+}

+ 17 - 0
module_home/src/main/java/com/uas/module/home/ui/HomeActivity.java

@@ -0,0 +1,17 @@
+package com.uas.module.home.ui;
+
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.uas.module.home.R;
+
+@Route(path="/home/index")
+public class HomeActivity extends AppCompatActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_home);
+    }
+}

+ 125 - 15
module_home/src/main/java/com/uas/module/home/ui/LoginActivity.java

@@ -22,15 +22,23 @@ import android.widget.ListView;
 import android.widget.PopupWindow;
 import android.widget.TextView;
 
+import com.alibaba.android.arouter.facade.annotation.Autowired;
 import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
 import com.alibaba.fastjson.JSON;
 import com.blankj.utilcode.util.LogUtils;
+import com.blankj.utilcode.util.SPUtils;
 import com.blankj.utilcode.util.ToastUtils;
 import com.maning.mndialoglibrary.MProgressDialog;
+import com.maning.mndialoglibrary.MToast;
 import com.uas.module.common.base.BaseActivity;
+import com.uas.module.common.utils.Constants;
 import com.uas.module.common.utils.DisplayUtil;
 import com.uas.module.common.utils.StatusBarUtil;
+import com.uas.module.common.utils.StringUtils;
 import com.uas.module.home.R;
+import com.uas.module.home.model.GroupMessageBean;
+import com.uas.module.home.model.MessageConfigBean;
 import com.uas.module.home.network.grpc.Authentication;
 import com.uas.module.home.network.grpc.MobileClientAuthenticationInterceptor;
 import com.uas.module.widget.adapter.ItemPopListAdapter;
@@ -41,6 +49,8 @@ import com.usoftchina.uu.mobile.grpc.api.AccountSigninResponse;
 import com.usoftchina.uu.mobile.grpc.api.AuthedToken;
 import com.usoftchina.uu.mobile.grpc.api.DeviceInfo;
 import com.usoftchina.uu.mobile.grpc.api.ResponseHeader;
+import com.usoftchina.uu.mobile.grpc.api.SwitchCompanyRequest;
+import com.usoftchina.uu.mobile.grpc.api.SwitchCompanyResponse;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -62,6 +72,11 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
     private View mToastHead;
     private FrameLayout mToastLayout;
 
+   @Autowired(name = "phone")
+    String mPhone;
+   @Autowired(name = "password")
+    String mPassword;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -86,6 +101,18 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
         tv_register.setOnClickListener(this);
         mPhoneNumberEdit.addTextChangedListener(new MyTextWatcher());
         mPasswordEdit.addTextChangedListener(new MyTextWatcher());
+
+       String phone= SPUtils.getInstance(Constants.spName).getString("phone");
+       String password= SPUtils.getInstance(Constants.spName).getString("password");
+       if(!StringUtils.isEmpty(phone)&&!StringUtils.isEmpty(password)){
+           mPhoneNumberEdit.setText(phone);
+           mPasswordEdit.setText(password);
+       }
+       
+       if (!StringUtils.isEmpty(mPhone)&&!StringUtils.isEmpty(mPassword)){
+           mPhoneNumberEdit.setText(mPhone);
+           mPasswordEdit.setText(mPassword);
+       }
     }
     
 
@@ -158,10 +185,10 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
                     if (header.getSuccess()) {
                         MProgressDialog.dismissProgress();
                         System.out.println(response.getAccount());
-
-
                         AuthedToken token = response.getAuthedToken();
-
+                        SPUtils.getInstance(Constants.spName).put("phone",phoneNumber);
+                        SPUtils.getInstance(Constants.spName).put("password",password);
+                        SPUtils.getInstance(Constants.spName).put("token",JSON.toJSONString(token));
                         LogUtils.d("login token:"+token.getToken());
                         LogUtils.d("account:"+JSON.toJSONString(response.getAccount()));
                         // 登录成功后记录auth信息
@@ -175,15 +202,10 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
                             for (int i=0;i<response.getCompanyList().size();i++){
                                 ItemsSelectType1 model=new ItemsSelectType1();
                                 model.setName(response.getCompanyList().get(i).getName());
-                                model.setEn_name(response.getCompanyList().get(i).getName());
+                                model.setEn_name(String.valueOf(response.getCompanyList().get(i).getId()));
                                 datas.add(model);
                             }
-                            runOnUiThread(new Runnable() {
-                                @Override
-                                public void run() {
-                                    showPopDialog(LoginActivity.this,datas);
-                                }
-                            });
+                            runOnUiThread(() -> showPopDialog(LoginActivity.this,datas));
                            
                         }
                         if (response.getMessageConfigCount() > 0) {
@@ -200,14 +222,12 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
                         }
                     } else {
                         MProgressDialog.dismissProgress();
-                        // error return by ResponseHeader
-                        System.err.println(header.getCode() + "," + header.getMessage());
+                      
+                        runOnUiThread(()->MToast.makeTextLong(getApplicationContext(),header.getMessage()));
                     }
                 } catch (StatusRuntimeException e) {
-                    // error return by Exception
-                    ToastUtils.showLong("接口异常"+ e.getStatus().getDescription());
+                    runOnUiThread(()-> MToast.makeTextLong(getApplicationContext(),e.getStatus().getDescription()));
                     MProgressDialog.dismissProgress();
-                    System.err.println(e.getStatus().getCode() + "," + e.getStatus().getDescription());
                 }
             }
         }).start();
@@ -247,6 +267,9 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
                     adapter.notifyDataSetChanged();
                     ItemPopListAdapter.ViewHolder viewHolder = (ItemPopListAdapter.ViewHolder) view.getTag();
                     ItemsSelectType1 model = viewHolder.model;
+                    
+                    String companyId= model.getEn_name();
+                    switchCompany(companyId);
                    
                 }
             });
@@ -263,6 +286,93 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
         popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
         popupWindow.showAtLocation(ct.getWindow().getDecorView(), Gravity.CENTER, 0, 0);
     }
+
+
+
+
+
+    /*切换公司-会产生新的Token*/
+    public void switchCompany(String companyID) {
+        runOnUiThread(()->MProgressDialog.showProgress(this,""));
+        new Thread(() -> {
+            ManagedChannel channel = ManagedChannelBuilder.forAddress("uu-api-test.usoftchina.com", 9620)
+                    .intercept(new MobileClientAuthenticationInterceptor())
+                    .usePlaintext(true)
+                    .build();
+            SwitchCompanyRequest request = SwitchCompanyRequest.newBuilder()
+                    .setCompanyId(Integer.valueOf(companyID)).build();
+            try {
+                SwitchCompanyResponse response = AccountServiceGrpc.newBlockingStub(channel).switchCompany(request);
+                ResponseHeader header = response.getResponseHeader();
+                if (header.getSuccess()) {
+                    runOnUiThread(()->MProgressDialog.dismissProgress());
+                    // new authentication
+                    AuthedToken token = response.getAuthedToken();
+                    LogUtils.d("login token:"+token.getToken());
+                    // 登录成功后记录auth信息
+                    Authentication.set(token.getToken());
+                    LogUtils.d(""+response.getAuthedToken());
+                    
+                    SPUtils.getInstance(Constants.spName).put("token",JSON.toJSONString(token));
+//                    // 新的消息中心配置
+//                    repeated MessageConfig messageConfig = 3;
+//                    // 新的未读消息统计
+//                    repeated UnreadMessageCount unreadMessageCount = 4;
+//                    // 新的应用中心配置
+//                    repeated AppGroupConfig appGroupConfig = 5;
+//                    // 新的我的主页配置
+//                    repeated HomeConfig homeConfig = 6;
+                    if (response.getMessageConfigCount()>0){
+                      String messageList=  JSON.toJSONString(response.getMessageConfigList());
+                      SPUtils.getInstance(Constants.spName).put("messageList",messageList);
+                      //LogUtils.d("messageList:"+messageList);
+                      
+                      List<MessageConfigBean> messageConfigs=
+                              //JSON.parseObject(messageList,new TypeReference<List<MessageConfigBean>>(){}); // Json 转List
+                              JSON.parseArray(messageList,MessageConfigBean.class);
+                      //LogUtils.d("messageConfigs:"+JSON.toJSONString(messageConfigs));
+                      
+                    }
+                    
+                    if (response.getAppGroupConfigCount()>0){
+                        String appGroupList=JSON.toJSONString(response.getAppGroupConfigList());
+                        SPUtils.getInstance(Constants.spName).put("appGroupList",appGroupList);
+                        LogUtils.d("appGroupList:"+appGroupList);
+                        
+                        List<GroupMessageBean> messageBeans=JSON.parseArray(appGroupList,GroupMessageBean.class);
+                        LogUtils.d("appGroupList:"+JSON.toJSONString(messageBeans));
+                        
+                    }
+                    
+                    if (response.getHomeConfigCount()>0){
+                        String homeList=JSON.toJSONString(response.getHomeConfigList());
+                        SPUtils.getInstance(Constants.spName).put("homeList:",homeList);
+                        //LogUtils.d("homeList:"+homeList);
+                    }
+                    
+                    if (response.getUnreadMessageCountCount()>0){
+                        String unreadMessageList=JSON.toJSONString(response.getUnreadMessageCountList());
+                        SPUtils.getInstance(Constants.spName).put("unreadMessageList:",unreadMessageList);
+
+                        //LogUtils.d("unreadMessageList:"+unreadMessageList);
+                    }
+                    
+                    
+                    //登录成功
+                    ARouter.getInstance().build("/app/main").navigation();
+                } else {
+                    runOnUiThread(()->{
+                        MProgressDialog.dismissProgress();
+                        MToast.makeTextLong(getApplicationContext(),header.getMessage());
+                    });
+                }
+            } catch (StatusRuntimeException e) {
+                runOnUiThread(()->{MProgressDialog.dismissProgress();
+                    MToast.makeTextLong(getApplicationContext(),e.getStatus().getDescription());
+                });
+            }
+        }).start();
+    }
     
     
 }

+ 196 - 1
module_home/src/main/java/com/uas/module/home/ui/RegisterActivity.java

@@ -1,15 +1,50 @@
 package com.uas.module.home.ui;
 
+import android.content.Intent;
 import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.TextView;
 
 import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.blankj.utilcode.util.LogUtils;
+import com.blankj.utilcode.util.StringUtils;
+import com.blankj.utilcode.util.ToastUtils;
+import com.maning.mndialoglibrary.MProgressDialog;
+import com.maning.mndialoglibrary.MToast;
 import com.uas.module.common.base.BaseActionBarActivity;
 import com.uas.module.home.R;
+import com.uas.module.home.network.grpc.MobileClientAuthenticationInterceptor;
+import com.uas.module.widget.core.ClearEditText;
+import com.usoftchina.uu.mobile.grpc.api.AccountInfo;
+import com.usoftchina.uu.mobile.grpc.api.AccountServiceGrpc;
+import com.usoftchina.uu.mobile.grpc.api.AccountSignupRequest;
+import com.usoftchina.uu.mobile.grpc.api.AccountSignupResponse;
+import com.usoftchina.uu.mobile.grpc.api.ResponseHeader;
+
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
+import io.grpc.StatusRuntimeException;
 
 
 @Route(path = "/home/register")
 public class RegisterActivity extends BaseActionBarActivity {
 
+    public static final String REGEXP_MOBILE_CONTINENT = "1[0-9]{10}";
+
+    private ClearEditText mUsernameEditText, mPhoneEditText, mPasswordEditText, mPasswordConfirmEditText;
+    private TextView mConfirmButton, mSuccessButton;
+    private LinearLayout mPasswordLinearLayout, mPasswordConfirmLinearLayout, mSuccessLinearLayout;
+//    private StrengthView mStrengthView;
+
+    private int male_log = 1;
+    private long bir_Timestamp = 1489141231;
+    private String md5_password;
+    
     @Override
     protected int setTitleId() {
         return R.string.person_register;
@@ -19,6 +54,166 @@ public class RegisterActivity extends BaseActionBarActivity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_user_register);
-       
+        initView();
+    }
+
+
+    private void initView() {
+        mUsernameEditText = findViewById(R.id.personal_reg_username_et);
+        mPhoneEditText = findViewById(R.id.personal_reg_phone_et);
+        mPasswordEditText = findViewById(R.id.personal_reg_password_et);
+        mPasswordConfirmEditText = findViewById(R.id.personal_reg_password_confirm_et);
+        mConfirmButton = findViewById(R.id.personal_reg_confirm_tv);
+        mPasswordLinearLayout = findViewById(R.id.personal_reg_password_ll);
+        mPasswordLinearLayout.setEnabled(false);
+        mPasswordConfirmLinearLayout = findViewById(R.id.personal_reg_password_confirm_ll);
+        mPasswordConfirmLinearLayout.setEnabled(false);
+//        mStrengthView = findViewById(R.id.personal_reg_strength_sv);
+        mSuccessLinearLayout = findViewById(R.id.personal_reg_success_ll);
+        mSuccessButton = findViewById(R.id.personal_reg_success_btn);
+
+        mPhoneEditText.addTextChangedListener(new EnableTextWatcher());
+        mUsernameEditText.addTextChangedListener(new EnableTextWatcher());
+        mPasswordConfirmEditText.addTextChangedListener(new EnableTextWatcher());
+        mPasswordEditText.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+            }
+
+            @Override
+            public void afterTextChanged(Editable editable) {
+               if (!StringUtils.isEmpty(editable.toString())){
+                   isConfirmEnable();
+               }
+            }
+        });
+
+        mConfirmButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                String phone = mPhoneEditText.getText().toString().trim();
+                if (!TextUtils.isEmpty(phone) && phone.matches(REGEXP_MOBILE_CONTINENT)) {
+                    String password1 = mPasswordEditText.getText().toString();
+                    String password2 = mPasswordConfirmEditText.getText().toString();
+                    if (password1 != null && password1.equals(password2)) {
+                        doRegiter();
+                    } else {
+                        ToastUtils.showLong("两次输入的密码不一致");
+                    }
+                } else {
+                    if (TextUtils.isEmpty(phone)) {
+                        ToastUtils.showLong("手机号为空");
+                    } else {
+                        ToastUtils.showLong("请填写正确的手机号");
+                    }
+                }
+            }
+        });
+
+        mSuccessButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                Intent intent = new Intent();
+                intent.setClass(RegisterActivity.this, LoginActivity.class);
+                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                startActivity(intent);
+                finish();
+            }
+        });
+    }
+
+
+    class EnableTextWatcher implements TextWatcher {
+
+        @Override
+        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+        }
+
+        @Override
+        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+        }
+
+        @Override
+        public void afterTextChanged(Editable editable) {
+            isConfirmEnable();
+        }
+    }
+
+
+    private void isConfirmEnable() {
+        String phone = mPhoneEditText.getText().toString().trim();
+        String username = mUsernameEditText.getText().toString().trim();
+        String password1 = mPasswordEditText.getText().toString();
+        String password2 = mPasswordConfirmEditText.getText().toString();
+
+        if (TextUtils.isEmpty(phone) || TextUtils.isEmpty(username)) {
+            mPasswordLinearLayout.setEnabled(false);
+            mPasswordEditText.setEnabled(false);
+            mPasswordConfirmLinearLayout.setEnabled(false);
+            mPasswordConfirmEditText.setEnabled(false);
+        } else {
+            mPasswordLinearLayout.setEnabled(true);
+            mPasswordEditText.setEnabled(true);
+            mPasswordConfirmLinearLayout.setEnabled(true);
+            mPasswordConfirmEditText.setEnabled(true);
+        }
+
+        if (TextUtils.isEmpty(phone) || TextUtils.isEmpty(username) 
+                || TextUtils.isEmpty(password1) || TextUtils.isEmpty(password2)) {
+            mConfirmButton.setEnabled(false);
+        } else {
+            mConfirmButton.setEnabled(true);
+        }
+    }
+
+
+    private void doRegiter() {
+        MProgressDialog.showProgress(this,"");
+      new Thread(()->{
+          ManagedChannel channel = ManagedChannelBuilder.forAddress("uu-api-test.usoftchina.com", 9620)
+                  .intercept(new MobileClientAuthenticationInterceptor())
+                  .usePlaintext(true)
+                  .build();
+          AccountSignupRequest request = AccountSignupRequest.newBuilder()
+                  .setMobile(mPhoneEditText.getText().toString())
+                  .setEmail("784602819@qq.com")
+                  .setRealname(mUsernameEditText.getText().toString())
+                  .setSex(AccountInfo.Sex.MALE)
+                  .setPassword(mPasswordEditText.getText().toString())
+                  .build();
+          try {
+
+              AccountSignupResponse response = AccountServiceGrpc.newBlockingStub(channel).signup(request);
+              ResponseHeader header = response.getResponseHeader();
+
+              if (header.getSuccess()) {
+                  MProgressDialog.dismissProgress();
+
+                  ARouter.getInstance().build("/home/login")
+                          .withString("phone",mPhoneEditText.getText().toString())
+                          .withString("password",mPasswordEditText.getText().toString())
+                          .navigation();
+                  LogUtils.d("header:"+header.getMessage());
+              } else {
+                  MProgressDialog.dismissProgress();
+                  runOnUiThread(()-> MToast.makeTextLong(RegisterActivity.this, header.getMessage()));
+                  //LogUtils.d("header:"+header.getCode() + "," + header.getMessage());
+
+              }
+          } catch (StatusRuntimeException e) {
+              MProgressDialog.dismissProgress();
+              runOnUiThread(()-> MToast.makeTextLong(RegisterActivity.this, e.getStatus().getDescription()));
+             // LogUtils.d("header Exception:"+e.getStatus().getCode() + "," + e.getStatus().getDescription());
+
+          }
+      }).start();
     }
 }

+ 9 - 0
module_home/src/main/res/layout/activity_home.xml

@@ -0,0 +1,9 @@
+<?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"
+    tools:context="com.uas.module.home.ui.HomeActivity">
+
+</android.support.constraint.ConstraintLayout>

+ 125 - 4
module_main/src/main/java/com/uas/module/main/BottomNavigationActivity.java

@@ -3,24 +3,44 @@ package com.uas.module.main;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.design.internal.BottomNavigationItemView;
 import android.support.design.widget.BottomNavigationView;
+import android.view.Gravity;
+import android.view.KeyEvent;
 import android.view.MenuItem;
+import android.view.View;
 
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.blankj.utilcode.util.LogUtils;
 import com.uas.module.common.base.BaseActivity;
 import com.uas.module.common.base.BaseFragment;
 import com.uas.module.common.base.ClassUtils;
 import com.uas.module.common.base.IViewDelegate;
 import com.uas.module.common.base.ViewManager;
+import com.uas.module.common.utils.ToastUtils;
 import com.uas.module.common.widget.NoScrollViewPager;
 
 import java.util.List;
 
+import q.rorbin.badgeview.Badge;
+import q.rorbin.badgeview.QBadgeView;
 
+
+@Route(path = "/app/main")
 public class BottomNavigationActivity extends BaseActivity {
 
     private NoScrollViewPager mPager;
     private List<BaseFragment> mFragments;
     private FragmentAdapter mAdapter;
+    private long mExitTime = 0;
+    BottomNavigationItemView messageTab;
+    BottomNavigationItemView workTab;
+    BottomNavigationItemView mineTab;
+
+    Badge badge1;
+    Badge badge2;
+    Badge badge3;
+  
 
     private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
             = new BottomNavigationView.OnNavigationItemSelectedListener() {
@@ -30,12 +50,15 @@ public class BottomNavigationActivity extends BaseActivity {
             int i = item.getItemId();
             if (i == R.id.navigation_home) {
                 mPager.setCurrentItem(0);
+                getSupportActionBar().setTitle("消息");
                 return true;
             } else if (i == R.id.navigation_dashboard) {
                 mPager.setCurrentItem(1);
+                getSupportActionBar().setTitle("工作");
                 return true;
             } else if (i == R.id.navigation_notifications) {
                 mPager.setCurrentItem(2);
+                getSupportActionBar().setTitle("我的");
                 return true;
             }
             return false;
@@ -47,16 +70,64 @@ public class BottomNavigationActivity extends BaseActivity {
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_bottom_navigation);
-        BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
+        getSupportActionBar().setTitle("消息");
+        BottomNavigationView navigation =  findViewById(R.id.navigation);
         navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
+
+        messageTab= navigation.findViewById(R.id.navigation_home);
+        workTab=navigation.findViewById(R.id.navigation_dashboard);     
+        mineTab=navigation.findViewById(R.id.navigation_notifications);
+
+       badge1=new QBadgeView(this).bindTarget(messageTab)
+                .setShowShadow(true)
+                .setBadgeGravity(Gravity.END|Gravity.TOP)
+                .setOnDragStateChangedListener(new Badge.OnDragStateChangedListener() {
+
+                    @Override
+                    public void onDragStateChanged(int dragState, Badge badge, View targetView) {
+                        
+                    }
+                })
+         .setBadgeNumber(99);
+
+        badge2=new QBadgeView(this).bindTarget(workTab)
+                .setShowShadow(true)
+                .setBadgeGravity(Gravity.END|Gravity.TOP)
+                .setOnDragStateChangedListener(new Badge.OnDragStateChangedListener() {
+
+                    @Override
+                    public void onDragStateChanged(int dragState, Badge badge, View targetView) {
+
+                    }
+                })
+                .setBadgeNumber(1);
+
+        badge3=new QBadgeView(this).bindTarget(mineTab)
+                .setShowShadow(true)
+                .setBadgeGravity(Gravity.END|Gravity.TOP)
+                .setOnDragStateChangedListener(new Badge.OnDragStateChangedListener() {
+
+                    @Override
+                    public void onDragStateChanged(int dragState, Badge badge, View targetView) {
+
+                    }
+                })
+                .setBadgeText("");
+        
+        
+        
         initViewPager();
     }
 
     private void initViewPager() {
-        mFragments = ViewManager.getInstance().getAllFragment();//这几个Fragment是主动添加到ViewManager中的
+       // mFragments = ViewManager.getInstance().getAllFragment();//这几个Fragment是主动添加到ViewManager中的
         BaseFragment newsFragment = getNewsFragment();//主动寻找
-//        mFragments.add(newsFragment);
-        mPager = (NoScrollViewPager) findViewById(R.id.container_pager);
+        LogUtils.d("newsFragment:"+newsFragment);
+        mFragments.add(newsFragment);
+/*        mFragments.add(getGirlsFragment());
+        mFragments.add(getNewsFragment());
+        mFragments.add(getMineFragment());*/
+        mPager = findViewById(R.id.container_pager);
         mAdapter = new FragmentAdapter(getSupportFragmentManager(), mFragments);
         mPager.setPagerEnabled(false);
         mPager.setAdapter(mAdapter);
@@ -77,4 +148,54 @@ public class BottomNavigationActivity extends BaseActivity {
         return newsFragment;
     }
 
+
+    private BaseFragment getMineFragment() {
+        BaseFragment newsFragment = null;
+        List<IViewDelegate> viewDelegates = ClassUtils.getObjectsWithInterface(this, IViewDelegate.class, "com.uas.module.mine");
+        if (viewDelegates != null && !viewDelegates.isEmpty()) {
+            newsFragment = viewDelegates.get(0).getFragment("");
+        }
+        return newsFragment;
+    }
+
+
+    private BaseFragment getGirlsFragment() {
+        BaseFragment newsFragment = null;
+        List<IViewDelegate> viewDelegates = ClassUtils.getObjectsWithInterface(this, IViewDelegate.class, "com.uas.module.girls");
+        if (viewDelegates != null && !viewDelegates.isEmpty()) {
+            newsFragment = viewDelegates.get(0).getFragment("");
+        }
+        return newsFragment;
+    }
+
+
+
+
+
+    @Override
+    public void onWindowFocusChanged(boolean hasFocus) {
+        super.onWindowFocusChanged(hasFocus);
+        int w =messageTab.getMeasuredWidth();
+        badge1.setGravityOffset((int)(w*0.3),0,false);
+        badge2.setGravityOffset((int)(w*0.3),0,false);
+        badge3.setGravityOffset((int)(w*0.3),0,false);
+    }
+
+
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
+            //两秒之内按返回键就会退出
+            if ((System.currentTimeMillis() - mExitTime) > 2000) {
+                ToastUtils.showShortToast(getString(R.string.app_exit_hint));
+                mExitTime = System.currentTimeMillis();
+            } else {
+                ViewManager.getInstance().exitApp(this);
+            }
+            return true;
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+    
+
 }

+ 2 - 0
module_main/src/main/java/com/uas/module/main/MainActivity.java

@@ -42,6 +42,8 @@ public class MainActivity extends BaseActivity implements View.OnClickListener {
         }  else if(view.getId()==R.id.test_button){
             
             ARouter.getInstance().build("/home/login")
+//                    .withString("phone","")
+//                    .withString("password","")
                     .navigation();
     
 //            ARouter.getInstance().build("/app/uas_web")

+ 4 - 3
module_main/src/main/res/values/strings.xml

@@ -3,8 +3,9 @@
 
     <string name="app_exit_hint">再按一次退出程序</string>
     <string name="title_activity_fragment_module">Fragment组件化</string>
-    <string name="title_home">news</string>
-    <string name="title_dashboard">girls</string>
-    <string name="title_notifications">预留</string>
+    
+    <string name="title_home">消息</string>
+    <string name="title_dashboard">工作</string>
+    <string name="title_notifications">我的</string>
 
 </resources>

+ 1 - 0
module_mine/.gitignore

@@ -0,0 +1 @@
+/build

+ 52 - 0
module_mine/build.gradle

@@ -0,0 +1,52 @@
+if (isModule.toBoolean()) {
+    apply plugin: 'com.android.application'
+} else {
+    apply plugin: 'com.android.library'
+}
+
+android {
+    compileSdkVersion build_versions.target_sdk
+    defaultConfig {
+        minSdkVersion build_versions.min_sdk
+        targetSdkVersion build_versions.target_sdk
+        versionCode 1
+        versionName "1.0"
+        javaCompileOptions {
+            annotationProcessorOptions {
+                arguments = [ moduleName : project.getName() ]
+            }
+        }
+    }
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+
+    sourceSets {
+        main {
+            if (isModule.toBoolean()) {
+                manifest.srcFile 'src/main/module/AndroidManifest.xml'
+            } else {
+                manifest.srcFile 'src/main/AndroidManifest.xml'
+                //集成开发模式下排除debug文件夹中的所有Java文件
+                java {
+                    exclude 'debug/**'
+                }
+            }
+        }
+    }
+
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+}
+
+dependencies {
+    implementation fileTree(dir: 'libs', include: ['*.jar'])
+    annotationProcessor deps.arouter_compiler
+    implementation project(':lib_common')
+}

+ 25 - 0
module_mine/proguard-rules.pro

@@ -0,0 +1,25 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in C:\Android\sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile

+ 26 - 0
module_mine/src/androidTest/java/com/uas/module/mine/ExampleInstrumentedTest.java

@@ -0,0 +1,26 @@
+package com.uas.module.mine;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumentation test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+    @Test
+    public void useAppContext() throws Exception {
+        // Context of the app under test.
+        Context appContext = InstrumentationRegistry.getTargetContext();
+
+        assertEquals("com.uas.module.mine.test", appContext.getPackageName());
+    }
+}

+ 2 - 0
module_mine/src/main/AndroidManifest.xml

@@ -0,0 +1,2 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.uas.module.mine" />

+ 31 - 0
module_mine/src/main/java/com/uas/module/mine/MineFragment.java

@@ -0,0 +1,31 @@
+package com.uas.module.mine;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.uas.module.common.base.BaseFragment;
+
+
+public class MineFragment extends BaseFragment {
+
+    
+    public static MineFragment newInstance() {
+        return new MineFragment();
+    }
+
+
+
+    public MineFragment() {
+       
+    }
+
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+    
+        return inflater.inflate(R.layout.fragment_mine, container, false);
+    }
+}

+ 33 - 0
module_mine/src/main/java/com/uas/module/mine/MyDelegate.java

@@ -0,0 +1,33 @@
+package com.uas.module.mine;
+
+import android.support.annotation.Keep;
+
+import com.orhanobut.logger.Logger;
+import com.uas.module.common.base.IApplicationDelegate;
+
+
+@Keep
+public class MyDelegate implements IApplicationDelegate {
+
+    @Override
+    public void onCreate() {
+        Logger.init("pattern");
+        //主动添加
+       // ViewManager.getInstance().addFragment(0, MineFragment.newInstance());
+    }
+
+    @Override
+    public void onTerminate() {
+
+    }
+
+    @Override
+    public void onLowMemory() {
+
+    }
+
+    @Override
+    public void onTrimMemory(int level) {
+
+    }
+}

+ 23 - 0
module_mine/src/main/java/com/uas/module/mine/MyViewDelegate.java

@@ -0,0 +1,23 @@
+package com.uas.module.mine;
+
+import android.support.annotation.Keep;
+import android.view.View;
+
+import com.uas.module.common.base.BaseFragment;
+import com.uas.module.common.base.IViewDelegate;
+
+
+@Keep
+public class MyViewDelegate implements IViewDelegate {
+
+    @Override
+    public BaseFragment getFragment(String name) {
+        
+        return MineFragment.newInstance();
+    }
+
+    @Override
+    public View getView(String name) {
+        return null;
+    }
+}

+ 12 - 0
module_mine/src/main/res/layout/fragment_mine.xml

@@ -0,0 +1,12 @@
+<?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">
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="center"
+        android:text="我是来自mine组件的mineFragment " />
+
+</LinearLayout>

+ 3 - 0
module_mine/src/main/res/values/strings.xml

@@ -0,0 +1,3 @@
+<resources>
+    <string name="app_name">module_mine</string>
+</resources>

+ 17 - 0
module_mine/src/test/java/com/uas/module/mine/ExampleUnitTest.java

@@ -0,0 +1,17 @@
+package com.uas.module.mine;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+public class ExampleUnitTest {
+    @Test
+    public void addition_isCorrect() throws Exception {
+        assertEquals(4, 2 + 2);
+    }
+}

+ 1 - 2
module_news/src/main/java/com/uas/module/news/MyDelegate.java

@@ -4,7 +4,6 @@ import android.support.annotation.Keep;
 
 import com.orhanobut.logger.Logger;
 import com.uas.module.common.base.IApplicationDelegate;
-import com.uas.module.common.base.ViewManager;
 
 
 @Keep
@@ -14,7 +13,7 @@ public class MyDelegate implements IApplicationDelegate {
     public void onCreate() {
         Logger.init("pattern");
         //主动添加
-        ViewManager.getInstance().addFragment(0, NewsFragment.newInstance());
+       // ViewManager.getInstance().addFragment(0, NewsFragment.newInstance());
     }
 
     @Override

+ 1 - 1
module_news/src/main/java/com/uas/module/news/NewsFragment.java

@@ -39,5 +39,5 @@ public class NewsFragment extends BaseFragment {
         return inflater.inflate(R.layout.fragment_news, container, false);
     }
 
-
+  
 }

+ 1 - 1
settings.gradle

@@ -1,4 +1,4 @@
-include ':lib_common', ':module_home', ':lib_widget',
+include ':lib_common', ':module_home', ':lib_widget', ':module_mine',
         ':module_app',
         ':module_main',
         ':module_girls',

+ 3 - 0
versions.gradle

@@ -32,6 +32,7 @@ versions.logger = "1.15"
 versions.material_dialog = "0.9.6.0"
 versions.circleimageview="3.0.0"
 versions.MNProgressHUD="V1.1.7"
+versions.badgeview="1.1.3"
 versions.arouter_compiler = "1.1.4"
 versions.arouter_api = "1.3.1"
 
@@ -93,6 +94,8 @@ deps.agentweb="com.just.agentweb:agentweb:$versions.agentweb"
 deps.circleimageview="de.hdodenhof:circleimageview:$versions.circleimageview"
 deps.MNProgressHUD="com.github.maning0303:MNProgressHUD:$versions.MNProgressHUD"
 
+deps.badgeview="q.rorbin:badgeview:$versions.badgeview"
+