Commit beafeb7e49dd7c7613635167f2598996dfdfa650
1 parent
32846fe9
Exists in
yxb_dev
and in
2 other branches
no message
Showing
7 changed files
with
209 additions
and
28 deletions
Show diff stats
app/src/main/java/com/shunzhi/parent/AppContext.java
1 | 1 | package com.shunzhi.parent; |
2 | 2 | |
3 | +import android.content.Context; | |
3 | 4 | import android.content.Intent; |
5 | +import android.content.SharedPreferences; | |
4 | 6 | import android.util.Log; |
5 | 7 | |
6 | 8 | import com.amap.api.location.AMapLocation; |
7 | 9 | import com.amap.api.location.AMapLocationClient; |
8 | 10 | import com.amap.api.location.AMapLocationClientOption; |
9 | 11 | import com.amap.api.location.AMapLocationListener; |
12 | +import com.netease.nimlib.sdk.NIMClient; | |
13 | +import com.netease.nimlib.sdk.SDKOptions; | |
14 | +import com.netease.nimlib.sdk.StatusBarNotificationConfig; | |
15 | +import com.netease.nimlib.sdk.auth.LoginInfo; | |
10 | 16 | import com.share.mvpsdk.global.GlobalApplication; |
11 | 17 | import com.amap.api.location.AMapLocationClientOption.AMapLocationMode; |
12 | 18 | |
... | ... | @@ -17,9 +23,9 @@ import com.amap.api.location.AMapLocationClientOption.AMapLocationMode; |
17 | 23 | public class AppContext extends GlobalApplication { |
18 | 24 | private static AppContext appContext; |
19 | 25 | |
20 | - public final static int LOCATION_CITYNAME=0x00; | |
26 | + public final static int LOCATION_CITYNAME = 0x00; | |
21 | 27 | |
22 | - public String cityName="",district=""; | |
28 | + public String cityName = "", district = ""; | |
23 | 29 | |
24 | 30 | public static AppContext getInstance() { |
25 | 31 | return appContext; |
... | ... | @@ -29,14 +35,39 @@ public class AppContext extends GlobalApplication { |
29 | 35 | public AMapLocationClient mLocationClient = null; |
30 | 36 | |
31 | 37 | //声明AMapLocationClientOption对象 |
32 | - public AMapLocationClientOption mLocationOption=null; | |
38 | + public AMapLocationClientOption mLocationOption = null; | |
33 | 39 | |
34 | 40 | @Override |
35 | 41 | public void onCreate() { |
36 | - appContext=this; | |
42 | + appContext = this; | |
37 | 43 | super.onCreate(); |
38 | 44 | //开启地图地位 |
39 | 45 | initMapLocal(); |
46 | + NIMClient.init(this, loginInfo(), options()); | |
47 | + } | |
48 | + | |
49 | + private SDKOptions options() { | |
50 | + SDKOptions options = new SDKOptions(); | |
51 | + | |
52 | + // 如果将新消息通知提醒托管给 SDK 完成,需要添加以下配置。否则无需设置。 | |
53 | + StatusBarNotificationConfig config = new StatusBarNotificationConfig(); | |
54 | + //config.notificationEntrance = MainActivity.class; // 点击通知栏跳转到该Activity | |
55 | + config.notificationSmallIconId = R.mipmap.ic_launcher; | |
56 | + options.sdkStorageRootPath = getExternalFilesDir(null).getPath() + "/nim"; | |
57 | + options.statusBarNotificationConfig = config; | |
58 | + //options.preloadAttach=false; | |
59 | + return options; | |
60 | + } | |
61 | + | |
62 | + | |
63 | + private LoginInfo loginInfo() { | |
64 | + SharedPreferences sp = getSharedPreferences("info", Context.MODE_PRIVATE); | |
65 | + String account = sp.getString("account", ""); | |
66 | + String token = sp.getString("token", ""); | |
67 | + if (account.length() > 0 && token.length() > 0) { | |
68 | + return new LoginInfo(account, token); | |
69 | + } | |
70 | + return null; | |
40 | 71 | } |
41 | 72 | |
42 | 73 | private void initMapLocal() { |
... | ... | @@ -66,47 +97,47 @@ public class AppContext extends GlobalApplication { |
66 | 97 | mLocationOption.setHttpTimeOut(20000); |
67 | 98 | //关闭缓存机制 |
68 | 99 | mLocationOption.setLocationCacheEnable(false); |
69 | - if (null!=mLocationClient) | |
100 | + if (null != mLocationClient) | |
70 | 101 | mLocationClient.setLocationOption(mLocationOption); |
71 | 102 | //启动定位 |
72 | 103 | startLocation(); |
73 | 104 | |
74 | 105 | } |
75 | 106 | |
76 | - public void startLocation(){ | |
107 | + public void startLocation() { | |
77 | 108 | //启动定位 |
78 | - if (null!=mLocationClient){ | |
109 | + if (null != mLocationClient) { | |
79 | 110 | // mLocationClient.setLocationOption(mLocationOption); |
80 | 111 | //设置场景模式后最好调用一次stop,再调用start以保证场景模式生效 |
81 | 112 | stopLocation(); |
82 | 113 | mLocationClient.startLocation(); |
83 | - }else initMapLocal(); | |
114 | + } else initMapLocal(); | |
84 | 115 | } |
85 | 116 | |
86 | - public void stopLocation(){ | |
87 | - if (null!=mLocationClient)mLocationClient.stopLocation(); | |
117 | + public void stopLocation() { | |
118 | + if (null != mLocationClient) mLocationClient.stopLocation(); | |
88 | 119 | } |
89 | 120 | |
90 | - public void destoryLocation(){ | |
91 | - if (null!=mLocationClient)mLocationClient.onDestroy(); | |
121 | + public void destoryLocation() { | |
122 | + if (null != mLocationClient) mLocationClient.onDestroy(); | |
92 | 123 | } |
93 | 124 | |
94 | 125 | //声明定位回调监听器 |
95 | 126 | public AMapLocationListener mLocationListener = new AMapLocationListener() { |
96 | 127 | @Override |
97 | 128 | public void onLocationChanged(AMapLocation aMapLocation) { |
98 | - if(null!=aMapLocation){ | |
129 | + if (null != aMapLocation) { | |
99 | 130 | |
100 | - if (aMapLocation.getErrorCode()==0){ | |
101 | - cityName=aMapLocation.getCity(); | |
102 | - district=aMapLocation.getDistrict(); | |
131 | + if (aMapLocation.getErrorCode() == 0) { | |
132 | + cityName = aMapLocation.getCity(); | |
133 | + district = aMapLocation.getDistrict(); | |
103 | 134 | aMapLocation.getCityCode(); |
104 | - Intent intent=new Intent(); | |
105 | - intent.setAction(LOCATION_CITYNAME+""); | |
135 | + Intent intent = new Intent(); | |
136 | + intent.setAction(LOCATION_CITYNAME + ""); | |
106 | 137 | sendBroadcast(intent); |
107 | 138 | stopLocation(); |
108 | - }else { | |
109 | - cityName="定位失败"; | |
139 | + } else { | |
140 | + cityName = "定位失败"; | |
110 | 141 | // Log.d("mlocation:","errorCode="+aMapLocation.getErrorCode()+"errorInfo="+aMapLocation.getErrorInfo()); |
111 | 142 | } |
112 | 143 | ... | ... |
app/src/main/java/com/shunzhi/parent/bean/NIMLoginResultBean.java
0 → 100644
... | ... | @@ -0,0 +1,44 @@ |
1 | +package com.shunzhi.parent.bean; | |
2 | + | |
3 | +/** | |
4 | + * Created by 10501 on 2018/3/19. | |
5 | + */ | |
6 | + | |
7 | +public class NIMLoginResultBean { | |
8 | + public NIMLoginResultBean() { | |
9 | + } | |
10 | + | |
11 | + public NIMLoginResultBean(boolean isSuccess, int resultCode, Throwable throwable) { | |
12 | + this.isSuccess = isSuccess; | |
13 | + this.resultCode = resultCode; | |
14 | + this.throwable = throwable; | |
15 | + } | |
16 | + | |
17 | + private boolean isSuccess; | |
18 | + private int resultCode; | |
19 | + private Throwable throwable; | |
20 | + | |
21 | + public boolean isSuccess() { | |
22 | + return isSuccess; | |
23 | + } | |
24 | + | |
25 | + public void setSuccess(boolean success) { | |
26 | + isSuccess = success; | |
27 | + } | |
28 | + | |
29 | + public int getResultCode() { | |
30 | + return resultCode; | |
31 | + } | |
32 | + | |
33 | + public void setResultCode(int resultCode) { | |
34 | + this.resultCode = resultCode; | |
35 | + } | |
36 | + | |
37 | + public Throwable getThrowable() { | |
38 | + return throwable; | |
39 | + } | |
40 | + | |
41 | + public void setThrowable(Throwable throwable) { | |
42 | + this.throwable = throwable; | |
43 | + } | |
44 | +} | ... | ... |
app/src/main/java/com/shunzhi/parent/contract/loginandregister/LoginAndRegisterContract.java
... | ... | @@ -4,6 +4,7 @@ import com.google.gson.JsonObject; |
4 | 4 | import com.share.mvpsdk.base.BasePresenter; |
5 | 5 | import com.share.mvpsdk.base.IBaseFragment; |
6 | 6 | import com.share.mvpsdk.base.IBaseModel; |
7 | +import com.shunzhi.parent.bean.NIMLoginResultBean; | |
7 | 8 | import com.shunzhi.parent.bean.UserInfo; |
8 | 9 | |
9 | 10 | import io.reactivex.Observable; |
... | ... | @@ -22,6 +23,8 @@ public interface LoginAndRegisterContract { |
22 | 23 | public abstract void idCodeResult(String phoneNumber); |
23 | 24 | |
24 | 25 | public abstract void getUserInfo(String mobile,int school_id,String captcha); |
26 | + | |
27 | + public abstract void nimLogin(String account,String password); | |
25 | 28 | } |
26 | 29 | |
27 | 30 | interface ILoginModel extends IBaseModel{ |
... | ... | @@ -33,6 +36,8 @@ public interface LoginAndRegisterContract { |
33 | 36 | |
34 | 37 | //获取登录用户信息 |
35 | 38 | Observable<UserInfo> getUserInfo(String mobile, int school_id, String captcha); |
39 | + | |
40 | + Observable<NIMLoginResultBean> nimLoginResult(String account, String token); | |
36 | 41 | } |
37 | 42 | interface ILoginView extends IBaseFragment { |
38 | 43 | ... | ... |
app/src/main/java/com/shunzhi/parent/manager/MessageManager.java
1 | 1 | package com.shunzhi.parent.manager; |
2 | 2 | |
3 | +import android.content.Context; | |
4 | +import android.content.SharedPreferences; | |
5 | +import android.support.annotation.NonNull; | |
6 | + | |
3 | 7 | import com.netease.nimlib.sdk.NIMClient; |
4 | 8 | import com.netease.nimlib.sdk.Observer; |
9 | +import com.netease.nimlib.sdk.RequestCallback; | |
5 | 10 | import com.netease.nimlib.sdk.auth.AuthService; |
6 | 11 | import com.netease.nimlib.sdk.auth.LoginInfo; |
7 | 12 | import com.netease.nimlib.sdk.msg.MsgServiceObserve; |
8 | 13 | import com.netease.nimlib.sdk.msg.model.CustomNotification; |
9 | 14 | import com.netease.nimlib.sdk.msg.model.IMMessage; |
15 | +import com.share.mvpsdk.utils.ToastUtils; | |
16 | +import com.shunzhi.parent.AppContext; | |
17 | +import com.shunzhi.parent.bean.NIMLoginResultBean; | |
10 | 18 | |
11 | 19 | import java.util.List; |
12 | 20 | |
21 | +import io.reactivex.Observable; | |
22 | +import io.reactivex.subjects.PublishSubject; | |
23 | +import timber.log.Timber; | |
24 | + | |
13 | 25 | /** |
14 | 26 | * Created by 10501 on 2018/3/17. |
15 | 27 | */ |
... | ... | @@ -20,7 +32,7 @@ public class MessageManager { |
20 | 32 | static final MessageManager instance = new MessageManager(); |
21 | 33 | } |
22 | 34 | |
23 | - public MessageManager getInstance() { | |
35 | + public static MessageManager getInstance() { | |
24 | 36 | return InstanceHolder.instance; |
25 | 37 | } |
26 | 38 | |
... | ... | @@ -52,8 +64,36 @@ public class MessageManager { |
52 | 64 | |
53 | 65 | } |
54 | 66 | |
55 | - public void login(String account, String password) { | |
56 | - NIMClient.getService(AuthService.class).login(new LoginInfo(account, password)); | |
67 | + public Observable<NIMLoginResultBean> login(String account, String password) { | |
68 | + final PublishSubject<NIMLoginResultBean> subject = PublishSubject.create(); | |
69 | + SharedPreferences sp = AppContext.getInstance().getApplicationContext().getSharedPreferences("info", Context.MODE_PRIVATE); | |
70 | + sp.edit().putString("account", account).apply(); | |
71 | + sp.edit().putString("token", password).apply(); | |
72 | + NIMClient.getService(AuthService.class) | |
73 | + .login(new LoginInfo(account, password)) | |
74 | + .setCallback(new RequestCallback() { | |
75 | + @Override | |
76 | + public void onSuccess(Object o) { | |
77 | + NIMLoginResultBean bean = new NIMLoginResultBean(true, 200, null); | |
78 | + subject.onNext(bean); | |
79 | + } | |
80 | + | |
81 | + @Override | |
82 | + public void onFailed(int i) { | |
83 | + Timber.i("------nim login failed : %s", i); | |
84 | + ToastUtils.showToast("云信服务器登录失败:" + i); | |
85 | + NIMLoginResultBean bean = new NIMLoginResultBean(false, i, null); | |
86 | + subject.onNext(bean); | |
87 | + } | |
88 | + | |
89 | + @Override | |
90 | + public void onException(Throwable throwable) { | |
91 | + if (throwable != null) throwable.printStackTrace(); | |
92 | + NIMLoginResultBean bean = new NIMLoginResultBean(false, 0, throwable); | |
93 | + subject.onNext(bean); | |
94 | + } | |
95 | + }); | |
96 | + return subject; | |
57 | 97 | } |
58 | 98 | |
59 | 99 | |
... | ... | @@ -62,4 +102,8 @@ public class MessageManager { |
62 | 102 | NIMClient.getService(MsgServiceObserve.class).observeCustomNotification(customNotificationObserver, false); |
63 | 103 | NIMClient.getService(AuthService.class).logout(); |
64 | 104 | } |
105 | + | |
106 | + public interface NIMLoginCallback { | |
107 | + void onResult(boolean isSuccess, int resultCode, Throwable throwable); | |
108 | + } | |
65 | 109 | } | ... | ... |
app/src/main/java/com/shunzhi/parent/model/loginandregister/LoginAndRegisterModel.java
... | ... | @@ -5,8 +5,10 @@ import com.share.mvpsdk.base.BaseModel; |
5 | 5 | import com.share.mvpsdk.helper.RetrofitCreateHelper; |
6 | 6 | import com.share.mvpsdk.helper.RxHelper; |
7 | 7 | import com.shunzhi.parent.api.LoginRegisterApi; |
8 | +import com.shunzhi.parent.bean.NIMLoginResultBean; | |
8 | 9 | import com.shunzhi.parent.bean.UserInfo; |
9 | 10 | import com.shunzhi.parent.contract.loginandregister.LoginAndRegisterContract; |
11 | +import com.shunzhi.parent.manager.MessageManager; | |
10 | 12 | |
11 | 13 | import io.reactivex.Observable; |
12 | 14 | |
... | ... | @@ -47,4 +49,9 @@ public class LoginAndRegisterModel extends BaseModel implements LoginAndRegiste |
47 | 49 | .compose(RxHelper.<UserInfo>rxSchedulerHelper()); |
48 | 50 | } |
49 | 51 | |
52 | + @Override | |
53 | + public Observable<NIMLoginResultBean> nimLoginResult(String account, String token) { | |
54 | + return MessageManager.getInstance().login(account, token); | |
55 | + } | |
56 | + | |
50 | 57 | } | ... | ... |
app/src/main/java/com/shunzhi/parent/presenter/loginandregister/LoginAndRegisterPresenter.java
... | ... | @@ -10,10 +10,13 @@ import com.share.mvpsdk.utils.ToastUtils; |
10 | 10 | import com.shunzhi.parent.AppConfig; |
11 | 11 | import com.shunzhi.parent.AppContext; |
12 | 12 | import com.shunzhi.parent.bean.CurrentBean; |
13 | +import com.shunzhi.parent.bean.NIMLoginResultBean; | |
13 | 14 | import com.shunzhi.parent.bean.UserInfo; |
14 | 15 | import com.shunzhi.parent.contract.loginandregister.LoginAndRegisterContract; |
16 | +import com.shunzhi.parent.manager.MessageManager; | |
15 | 17 | import com.shunzhi.parent.model.loginandregister.LoginAndRegisterModel; |
16 | 18 | import com.shunzhi.parent.ui.fragment.loginandregistfragment.LoginAndRegistFragment; |
19 | +import com.shunzhi.parent.util.Utils; | |
17 | 20 | |
18 | 21 | import java.util.regex.Matcher; |
19 | 22 | import java.util.regex.Pattern; |
... | ... | @@ -125,12 +128,11 @@ public class LoginAndRegisterPresenter extends LoginAndRegisterContract.LoginPre |
125 | 128 | } |
126 | 129 | |
127 | 130 | @Override |
128 | - | |
129 | 131 | public void getUserInfo(final String mobile, int school_id, String captcha) { |
130 | 132 | mRxManager.register(mIModel.getUserInfo(mobile, school_id, captcha).subscribe(new Consumer<UserInfo>() { |
131 | 133 | @Override |
132 | 134 | public void accept(UserInfo userInfo) throws Exception { |
133 | - Log.d("6666","userInfo="+userInfo.toString()); | |
135 | + Log.d("6666", "userInfo=" + userInfo.toString()); | |
134 | 136 | if (userInfo != null) { |
135 | 137 | CurrentBean currentBean = userInfo.getData(); |
136 | 138 | AppConfig.getAppConfig(AppContext.getInstance()).set(AppConfig.LOGIN_NAME, currentBean.getMobile()); |
... | ... | @@ -138,9 +140,10 @@ public class LoginAndRegisterPresenter extends LoginAndRegisterContract.LoginPre |
138 | 140 | AppConfig.getAppConfig(AppContext.getInstance()).set(AppConfig.USER_IMAGE, currentBean.getImage()); |
139 | 141 | AppConfig.getAppConfig(AppContext.getInstance()).set(AppConfig.USER_SEX, String.valueOf(currentBean.getSex())); |
140 | 142 | AppConfig.getAppConfig(AppContext.getInstance()).set(AppConfig.PARENT_ID, String.valueOf(currentBean.getParentId())); |
141 | - AppConfig.getAppConfig(AppContext.getContext()).set(AppConfig.USER_ID,currentBean.getUserid()); | |
142 | - mIView.getUserInfo(0); | |
143 | - | |
143 | + AppConfig.getAppConfig(AppContext.getContext()).set(AppConfig.USER_ID, currentBean.getUserid()); | |
144 | + String account = currentBean.getUserid(); | |
145 | + String token = Utils.MD5(account); | |
146 | + nimLogin(account, token); | |
144 | 147 | } else { |
145 | 148 | LoginAndRegistFragment.progressDialog.dismiss(); |
146 | 149 | ToastUtils.showToast("错误"); |
... | ... | @@ -155,6 +158,17 @@ public class LoginAndRegisterPresenter extends LoginAndRegisterContract.LoginPre |
155 | 158 | })); |
156 | 159 | } |
157 | 160 | |
161 | + @Override | |
162 | + public void nimLogin(String account, String password) { | |
163 | + mRxManager.register(mIModel.nimLoginResult(account, password).subscribe(new Consumer<NIMLoginResultBean>() { | |
164 | + @Override | |
165 | + public void accept(NIMLoginResultBean bean) throws Exception { | |
166 | + if (bean.isSuccess()) | |
167 | + mIView.getUserInfo(0); | |
168 | + } | |
169 | + })); | |
170 | + } | |
171 | + | |
158 | 172 | |
159 | 173 | @Override |
160 | 174 | public LoginAndRegisterContract.ILoginModel getModel() { | ... | ... |
... | ... | @@ -0,0 +1,36 @@ |
1 | +package com.shunzhi.parent.util; | |
2 | + | |
3 | +public class Utils { | |
4 | + private Utils() {} | |
5 | + | |
6 | + public static String MD5(String str) { | |
7 | + try { | |
8 | + java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); | |
9 | + byte[] array = md.digest(str.getBytes("utf-8")); | |
10 | + StringBuilder sb = new StringBuilder(); | |
11 | + for (int i = 0; i < array.length; ++i) { | |
12 | + sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3)); | |
13 | + } | |
14 | + return sb.toString().toUpperCase(); | |
15 | + } catch (Exception e) { | |
16 | + e.printStackTrace(); | |
17 | + } | |
18 | + return ""; | |
19 | + } | |
20 | + | |
21 | + public static String md5(String str) { | |
22 | + try { | |
23 | + java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); | |
24 | + byte[] array = md.digest(str.getBytes("utf-8")); | |
25 | + StringBuilder sb = new StringBuilder(); | |
26 | + for (int i = 0; i < array.length; ++i) { | |
27 | + sb.append(Integer.toHexString((array[i] & 0xff) | 0x100).substring(1, 3)); | |
28 | + } | |
29 | + return sb.toString().toUpperCase(); | |
30 | + } catch (Exception e) { | |
31 | + e.printStackTrace(); | |
32 | + } | |
33 | + return ""; | |
34 | + } | |
35 | + | |
36 | +} | ... | ... |