Commit 9e6408474a2695c4b900e4e970221780e979ed3d

Authored by 张建亮
1 parent e9fd4c63

张建亮gradle添加databinding,修改登录界面为databinding

app/build.gradle
... ... @@ -9,7 +9,6 @@ buildscript {
9 9 }
10 10  
11 11 apply plugin: 'com.android.application'
12   -apply plugin: 'android-apt'
13 12 apply plugin: 'io.fabric'
14 13  
15 14 android {
... ... @@ -83,6 +82,9 @@ android {
83 82 lintOptions {
84 83 checkReleaseBuilds false
85 84 }
  85 + dataBinding {
  86 + enabled = true
  87 + }
86 88 }
87 89  
88 90 repositories {
... ... @@ -94,19 +96,25 @@ dependencies {
94 96 compile fileTree(include: ['*.jar'], dir: 'libs')
95 97 compile project(':PushSDK')
96 98 compile files('libs/libcnliveuser.jar')
97   - compile "com.android.support:appcompat-v7:23.4.0"
98   - compile "com.android.support:recyclerview-v7:23.4.0"
99   - compile "com.android.support:design:23.4.0"
100   - compile "com.android.support:support-v4:23.4.0"
101   - compile "com.android.support:gridlayout-v7:23.4.0"
102 99  
103 100 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
104 101 exclude group: 'com.android.support', module: 'support-annotations'
105 102 })
  103 +
  104 + compile(name: 'turquoise-release', ext: 'aar')
106 105 testCompile 'org.testng:testng:6.9.6'
  106 + provided files('runtime/MiguSDK2.0_203.jar')
  107 +
  108 + compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') {
  109 + transitive = true;
  110 + }
107 111  
  112 + compile 'com.android.support:appcompat-v7:23.4.0'
  113 + compile 'com.android.support:recyclerview-v7:23.4.0'
  114 + compile 'com.android.support:design:23.4.0'
  115 + compile 'com.android.support:support-v4:23.4.0'
  116 + compile 'com.android.support:gridlayout-v7:23.4.0'
108 117 compile 'com.jakewharton:butterknife:8.2.1'
109   - apt 'com.jakewharton:butterknife-compiler:8.2.1'
110 118 compile 'com.squareup.okhttp:okhttp:2.0.0'
111 119 compile 'com.facebook.fresco:imagepipeline-okhttp:0.9.0'
112 120 compile 'com.squareup.retrofit:retrofit:1.9.0'
... ... @@ -122,16 +130,11 @@ dependencies {
122 130 compile 'org.igniterealtime.smack:smack-tcp:4.1.5'
123 131 compile 'com.timehop.stickyheadersrecyclerview:library:[0.4.3]@aar'
124 132 compile 'com.github.iwgang:countdownview:2.1.3'
125   - compile(name: 'turquoise-release', ext: 'aar')
126   - testCompile 'org.testng:testng:6.9.6'
127   - testCompile 'junit:junit:4.12'
128   - provided files('runtime/MiguSDK2.0_203.jar')
129 133 compile 'com.android.support:multidex:1.0.0'
130 134 compile 'com.github.ctiao:dfm:0.4.1'
131 135 compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
132   -
133   - compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') {
134   - transitive = true;
135   - }
136   -
  136 + compile 'com.android.support.constraint:constraint-layout:1.0.2'
  137 + testCompile 'org.testng:testng:6.9.6'
  138 + testCompile 'junit:junit:4.12'
  139 + annotationProcessor 'com.jakewharton:butterknife-compiler:8.2.1'
137 140 }
... ...
app/src/main/java/com/cnlive/goldenline/ui/activity/RegisterActivity.java
... ... @@ -3,49 +3,17 @@ package com.cnlive.goldenline.ui.activity;
3 3 import android.app.ProgressDialog;
4 4 import android.content.Context;
5 5 import android.content.Intent;
  6 +import android.databinding.DataBindingUtil;
6 7 import android.os.Bundle;
7 8 import android.os.CountDownTimer;
8 9 import android.support.annotation.NonNull;
9   -import android.text.Editable;
10   -import android.text.TextUtils;
11   -import android.text.TextWatcher;
12   -import android.view.View;
13   -import android.widget.Button;
14   -import android.widget.EditText;
15   -import android.widget.ImageButton;
16 10  
17 11 import com.cnlive.goldenline.R;
18   -import com.cnlive.goldenline.api.UserAPI;
19   -import com.cnlive.goldenline.application.GoldenLineApplication;
20   -import com.cnlive.goldenline.model.User;
21   -import com.cnlive.goldenline.model.mine.SyncUserRequestBean;
  12 +import com.cnlive.goldenline.databinding.ActivityRegisterBinding;
22 13 import com.cnlive.goldenline.ui.base.BaseActivity;
23   -import com.cnlive.goldenline.ui.base.GoldenlineCall;
24   -import com.cnlive.goldenline.util.ChannelUtil;
25   -import com.cnlive.goldenline.util.RestAdapterUtils;
26   -import com.cnlive.goldenline.util.SPUtils;
27   -import com.cnlive.goldenline.util.ShareSdkUtil;
28   -import com.cnlive.goldenline.util.StringUtils;
29   -import com.cnlive.goldenline.util.SystemTools;
30   -import com.cnlive.goldenline.util.ToastUtil;
31 14 import com.cnlive.goldenline.util.UserService;
32   -import com.cnlive.libs.user.IUserService;
33   -import com.cnlive.libs.user.UserUtil;
  15 +import com.cnlive.goldenline.viewmodel.LoginViewModel;
34 16 import com.cnlive.libs.user.model.DataEntity;
35   -import com.cnlive.libs.user.model.UserData;
36   -
37   -import java.util.HashMap;
38   -import java.util.Locale;
39   -
40   -import butterknife.BindView;
41   -import cn.sharesdk.framework.Platform;
42   -import cn.sharesdk.framework.PlatformActionListener;
43   -import cn.sharesdk.sina.weibo.SinaWeibo;
44   -import cn.sharesdk.tencent.qq.QQ;
45   -import cn.sharesdk.wechat.friends.Wechat;
46   -import retrofit.Callback;
47   -import retrofit.RetrofitError;
48   -import retrofit.client.Response;
49 17  
50 18 /**
51 19 * Description: 登录页面
... ... @@ -55,27 +23,13 @@ import retrofit.client.Response;
55 23 public class RegisterActivity extends BaseActivity {
56 24  
57 25  
  26 + private LoginViewModel loginViewModel;
  27 +
58 28 public static void start(@NonNull Context context) {
59 29 Intent starter = new Intent(context, RegisterActivity.class);
60 30 context.startActivity(starter);
61 31 }
62 32  
63   - @BindView(R.id.imabutton_colse)
64   - protected ImageButton imabutton_colse;
65   - @BindView(R.id.imabutton_wx)
66   - protected ImageButton imabutton_wx;
67   - @BindView(R.id.imabutton_wb)
68   - protected ImageButton imabutton_wb;
69   - @BindView(R.id.imabutton_qq)
70   - protected ImageButton imabutton_qq;
71   - @BindView(R.id.button_sendcode)
72   - protected Button button_sendcode;
73   - @BindView(R.id.button_login)
74   - protected Button button_login;
75   - @BindView(R.id.et_phone)
76   - protected EditText et_phone;
77   - @BindView(R.id.et_code)
78   - protected EditText et_code;
79 33 /**
80 34 * 当前时间
81 35 */
... ... @@ -97,335 +51,31 @@ public class RegisterActivity extends BaseActivity {
97 51 @Override
98 52 protected void onCreate(Bundle savedInstanceState) {
99 53 super.onCreate(savedInstanceState);
100   - setContentView(R.layout.activity_register);
101   - mUserService = new UserService(this);
102   - initData();
  54 + ActivityRegisterBinding activityRegisterBinding= DataBindingUtil.setContentView(this,R.layout.activity_register);
  55 + loginViewModel=new LoginViewModel(activityRegisterBinding,RegisterActivity.this);
  56 + activityRegisterBinding.setLoginViewModel(loginViewModel);
  57 +// setContentView(R.layout.activity_register);
  58 +// mUserService = new UserService(this);
  59 +
  60 +// initData();
103 61 }
104 62  
105 63 @Override
106 64 public void onResume() {
107 65 super.onResume();
108   - et_phone.addTextChangedListener(new TextWatcher() {
109   - @Override
110   - public void beforeTextChanged(CharSequence s, int start, int count, int after) {
111   -
112   - }
113   -
114   - @Override
115   - public void onTextChanged(CharSequence s, int start, int before, int count) {
116   -
117   - }
118   -
119   - @Override
120   - public void afterTextChanged(Editable s) {
121   - formatPhone(s);
122   - }
123   - });
124   - et_code.addTextChangedListener(new TextWatcher() {
125   - @Override
126   - public void beforeTextChanged(CharSequence s, int start, int count, int after) {
127   -
128   - }
129   -
130   - @Override
131   - public void onTextChanged(CharSequence s, int start, int before, int count) {
132   -
133   - }
134   -
135   - @Override
136   - public void afterTextChanged(Editable s) {
137   - formatCode(s);
138   - }
139   - });
140   - }
141   -
142   - /**
143   - * 处理验证码
144   - *
145   - * @param code
146   - */
147   - private void formatCode(Editable code) {
148   - if (phone.length() == 11 && StringUtils.checkPhoneNumber(phone.toString()) && code.length() == 6) {
149   - button_login.setBackgroundResource(R.drawable.login_canuse);
150   - button_login.setEnabled(true);
151   - } else {
152   - button_login.setBackgroundResource(R.drawable.login_nouse);
153   - button_login.setEnabled(false);
154   - }
155 66 }
156 67  
157   - /**
158   - * 处理手机号
159   - */
160   - private void formatPhone(Editable phone) {
161   - this.phone = phone.toString();
162   - if (phone.length() == 11 && StringUtils.checkPhoneNumber(phone.toString())) {
163   - button_sendcode.setBackgroundResource(R.mipmap.verificationcode_canuse);
164   - button_sendcode.setTextColor(getResources().getColor(R.color.color_ff6633));
165   - button_sendcode.setEnabled(true);
166   - } else {
167   - button_sendcode.setBackgroundResource(R.mipmap.verificationcode_nouse);
168   - button_sendcode.setTextColor(getResources().getColor(R.color.color_959595));
169   - button_sendcode.setEnabled(false);
170   - }
171   - }
172 68  
173   - /**
174   - * 初始化数据
175   - */
176   - private void initData() {
177   - imabutton_colse.setOnClickListener(this);
178   - imabutton_wx.setOnClickListener(this);
179   - imabutton_wb.setOnClickListener(this);
180   - imabutton_qq.setOnClickListener(this);
181   - button_sendcode.setOnClickListener(this);
182   - button_login.setOnClickListener(this);
183   - }
184 69  
185   - @Override
186   - public void onClick(View v) {
187   - super.onClick(v);
188   - switch (v.getId()) {
189   - case R.id.imabutton_colse://关闭
190   - this.finish();
191   - break;
192   - case R.id.imabutton_wx://微信登录
193   - getOtherInfo("1", Wechat.NAME);
194   - showLogin();
195   - break;
196   - case R.id.imabutton_wb://微博登录
197   - getOtherInfo("2", SinaWeibo.NAME);
198   - showLogin();
199   - break;
200   - case R.id.imabutton_qq://qq登录
201   - getOtherInfo("3", QQ.NAME);
202   - showLogin();
203   - break;
204   - case R.id.button_sendcode://发送验证码
205   - UserUtil.sendMessage(IUserService.QUICK_LOGIN, et_phone.getText().toString(), new MobileCall());
206   - break;
207   - case R.id.button_login://登录
208   - showLogin();
209   - UserUtil.quickLogin(String.valueOf(et_phone.getText()), String.valueOf(et_code.getText()), ChannelUtil.getChannelFromApk(this), userDataCall);
210   - break;
211 70  
212   - default:
213   - break;
214   - }
215   - }
216   -
217   - /**
218   - * 显示等待框
219   - */
220   - private void showLogin() {
221   - progressDialog = ProgressDialog.show(this, "登录中...", "请稍候...", true, false);
222   - progressDialog.setCancelable(true);// 设置是否可以通过点击Back键取消
223   - progressDialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条
224   - }
225   -
226   - /**
227   - * 发送验证码sdk
228   - */
229   - class MobileCall extends GoldenlineCall {
230   - @Override
231   - protected void dowork(int what, String extra, Object obj) {
232   - switch (what) {
233   - case IUserService.SUCCESS:
234   - ToastUtil.showToast("验证码已发送");
235   - startTimer();
236   - break;
237   - default:
238   - ToastUtil.showToast("验证码发送失败");
239   - updateSendButtonText(true);
240   - break;
241   - }
242   -
243   - }
244   -
245   - /**
246   - * 开始计数器
247   - */
248   - private void startTimer() {
249   - countDownTimer = new CountDownTimer(COUNTDOWN_TIME * 1000, 990) {
250   - @Override
251   - public void onTick(long leftTimeInMilliseconds) {
252   - long seconds = leftTimeInMilliseconds / 1000;
253   - count = (int) (seconds % 60);
254   - updateSendButtonText(false);
255   - }
256   -
257   - @Override
258   - public void onFinish() {
259   - updateSendButtonText(true);
260   - }
261   -
262   - };
263   - countDownTimer.start();
264   - }
265   -
266   - /**
267   - * 更新按钮的状态
268   - *
269   - * @param showNormal
270   - */
271   - private void updateSendButtonText(boolean showNormal) {
272   - if (showNormal) {
273   - button_sendcode.setText(getResources().getString(R.string.logoin_getcode));
274   - button_sendcode.setBackgroundResource(R.mipmap.verificationcode_canuse);
275   - button_sendcode.setTextColor(getResources().getColor(R.color.color_ff6633));
276   - button_sendcode.setEnabled(true);
277   - } else {
278   - String s = String.format(Locale.CHINESE, getString(R.string.format_verify_countdown), count);
279   - button_sendcode.setText(s);
280   - button_sendcode.setBackgroundResource(R.mipmap.verificationcode_nouse);
281   - button_sendcode.setTextColor(getResources().getColor(R.color.color_959595));
282   - button_sendcode.setEnabled(false);
283   - }
284   - }
285   - }
286   -
287   - /**
288   - * 登陆完成后调用此方法同步用户其他信息
289   - */
290   - public void doNetWork(final DataEntity data) {
291   - final UserAPI userApi = RestAdapterUtils.getRestAPI(UserAPI.class);
292   - SyncUserRequestBean request = new SyncUserRequestBean(this);
293   - request.setEmail(data.getEmail());
294   - request.setExtInfo(data.getExtInfo());
295   - request.setFaceUrl(data.getFaceUrl());
296   - request.setGender(data.getGender().equals("m") ? 0 : (data.getGender().equals("f") ? 1 : 2));
297   - request.sethUid(data.gethUid());
298   - request.setLocation(data.getLocation());
299   - request.setMobile(data.getMobile());
300   - request.setNickName(data.getNickName());
301   - request.setUid(data.getUid());
302   - userApi.syncUserById(request, new Callback<User>() {
303   - @Override
304   - public void success(User user, Response response) {
305   - progressDialog.dismiss();
306   - if (null != user && user.getErrorCode().equals("0")) {
307   - mUserService.setUserInfo(user, "");
308   - SPUtils.put(RegisterActivity.this, "isSubscribeSuccess", true);
309   - //登录成功关闭页面
310   - finish();
311   - }else{
312   - ToastUtil.showToast(getString(R.string.login_error));
313   - }
314   - }
315   -
316   - @Override
317   - public void failure(RetrofitError error) {
318   - ToastUtil.showToast(getString(R.string.login_error));
319   - progressDialog.dismiss();
320   - }
321   - });
322   - }
323   -
324   - public void getOtherInfo(final String tag, String s) {
325   - ShareSdkUtil.loginThirdPlatform(RegisterActivity.this, s, new PlatformActionListener() {
326   - @Override
327   - public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {//授权成功
328   -
329   - progressDialog.dismiss();
330   -
331   - if (null != hashMap && hashMap.size() > 0) {
332   - if ("1" == tag) {
333   - //微信登录
334   - String uid = (String) hashMap.get("unionid");
335   - String nick = platform.getDb().getUserName();
336   - String location = (String) hashMap.get("city");
337   - String avatar = (String) hashMap.get("headimgurl");
338   - //为了红包提现,把uid传为openid
339   - String openid = (String) hashMap.get("openid");
340   - String userSex = "n";
341   - int sex = (int) hashMap.get("sex");
342   - if (sex == 1) {
343   - userSex = "m";
344   - } else if (sex == 2) {
345   - userSex = "f";
346   - }
347   - UserUtil.thirdPartyLogin(3, uid, nick, userSex, location, avatar,
348   - ChannelUtil.getChannelFromApk(RegisterActivity.this), userDataCall);
349   - }else if ("2" == tag) {
350   - //微博登录
351   - String uid = platform.getDb().getUserId();
352   - String nick = (String) hashMap.get("name");
353   - String location = (String) hashMap.get("location");
354   - String userSex = (String) hashMap.get("gender");
355   - String avatar = (String) hashMap.get("profile_image_url");
356   - UserUtil.thirdPartyLogin(1, uid, nick, userSex, location, avatar,
357   - ChannelUtil.getChannelFromApk(RegisterActivity.this), userDataCall);
358   - } else if("3" == tag){
359   - //QQ登录
360   - String uid = platform.getDb().getUserId();
361   - String nick = (String) hashMap.get("nickname");
362   - String location = (String) hashMap.get("city");
363   - String avatar = hashMap.get("figureurl_qq_2").toString();
364   - String userSex = "n";
365   - String sex = (String) hashMap.get("gender");
366   - if (sex.equals("男")) {
367   - userSex = "m";
368   - } else if (sex.equals("女")) {
369   - userSex = "f";
370   - }
371   - UserUtil.thirdPartyLogin(2, uid, nick, userSex, location, avatar,
372   - ChannelUtil.getChannelFromApk(RegisterActivity.this), userDataCall);
373   - }
374   - }
375   - }
376   -
377   - @Override
378   - public void onError(Platform platform, int i, Throwable throwable) {//授权失败
379   - progressDialog.dismiss();
380   - }
381   -
382   - @Override
383   - public void onCancel(Platform platform, int i) {//取消
384   - SystemTools.show_msg(getBaseContext(), "已取消");
385   - progressDialog.dismiss();
386   - }
387   - });
388   - }
389   -
390   - private GoldenlineCall userDataCall = new GoldenlineCall() {
391   - @Override
392   - protected void dowork(int what, String extra, Object obj) {
393   - UserData userData = (UserData) obj;
394   - DataEntity data = userData.getData();
395   - GoldenLineApplication.mEdit.clear();
396   - GoldenLineApplication.mEdit.putBoolean("isQuckLogin", true);
397   - GoldenLineApplication.mEdit.putString("uid", data.getUid());
398   - GoldenLineApplication.mEdit.putString("hUid", data.gethUid());
399   - GoldenLineApplication.mEdit.apply();
400   - if (null != data) {
401   - //手机号为空必须要进行绑定,这是正在上演的逻辑
402   - if(TextUtils.isEmpty(data.getMobile())){
403   - Intent starter = new Intent(RegisterActivity.this, UpdatePhoneActivity.class);
404   - starter.putExtra("title","绑定手机号");
405   - starter.putExtra("uid",data.getUid());
406   - starter.putExtra("data",data);
407   - startActivityForResult(starter,101);
408   - }else{
409   - doNetWork(data);
410   - }
411   - }
412   - }
413   -
414   - @Override
415   - public void onState(int what, String extra, Object obj) {
416   - super.onState(what, extra, obj);
417   - if (what != IUserService.SUCCESS) {
418   - progressDialog.dismiss();
419   - }
420   - }
421   - };
422 71  
423 72 @Override
424 73 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
425 74 super.onActivityResult(requestCode, resultCode, data);
426 75 if(resultCode == RESULT_OK){
427 76 DataEntity dataEntity = (DataEntity) (data.getSerializableExtra("data"));
428   - doNetWork(dataEntity);
  77 +
  78 + loginViewModel. doNetWork(dataEntity);
429 79 }
430 80 }
431 81 }
... ...
app/src/main/java/com/cnlive/goldenline/viewmodel/LoginViewModel.java 0 → 100644
  1 +package com.cnlive.goldenline.viewmodel;
  2 +
  3 +import android.app.Activity;
  4 +import android.app.ProgressDialog;
  5 +import android.content.Context;
  6 +import android.content.Intent;
  7 +import android.databinding.BaseObservable;
  8 +import android.os.CountDownTimer;
  9 +import android.text.Editable;
  10 +import android.text.TextUtils;
  11 +import android.util.Log;
  12 +import android.view.View;
  13 +
  14 +import com.cnlive.goldenline.R;
  15 +import com.cnlive.goldenline.api.UserAPI;
  16 +import com.cnlive.goldenline.application.GoldenLineApplication;
  17 +import com.cnlive.goldenline.databinding.ActivityRegisterBinding;
  18 +import com.cnlive.goldenline.model.User;
  19 +import com.cnlive.goldenline.model.mine.SyncUserRequestBean;
  20 +import com.cnlive.goldenline.ui.activity.UpdatePhoneActivity;
  21 +import com.cnlive.goldenline.ui.base.GoldenlineCall;
  22 +import com.cnlive.goldenline.util.ChannelUtil;
  23 +import com.cnlive.goldenline.util.RestAdapterUtils;
  24 +import com.cnlive.goldenline.util.SPUtils;
  25 +import com.cnlive.goldenline.util.ShareSdkUtil;
  26 +import com.cnlive.goldenline.util.StringUtils;
  27 +import com.cnlive.goldenline.util.SystemTools;
  28 +import com.cnlive.goldenline.util.ToastUtil;
  29 +import com.cnlive.goldenline.util.UserService;
  30 +import com.cnlive.libs.user.IUserService;
  31 +import com.cnlive.libs.user.UserUtil;
  32 +import com.cnlive.libs.user.model.DataEntity;
  33 +import com.cnlive.libs.user.model.UserData;
  34 +
  35 +import java.util.HashMap;
  36 +import java.util.Locale;
  37 +
  38 +import cn.sharesdk.framework.Platform;
  39 +import cn.sharesdk.framework.PlatformActionListener;
  40 +import cn.sharesdk.sina.weibo.SinaWeibo;
  41 +import cn.sharesdk.tencent.qq.QQ;
  42 +import cn.sharesdk.wechat.friends.Wechat;
  43 +import retrofit.Callback;
  44 +import retrofit.RetrofitError;
  45 +import retrofit.client.Response;
  46 +
  47 +/**
  48 + * Created by ZJL on 2017/5/10.
  49 + */
  50 +
  51 +public class LoginViewModel extends BaseObservable{
  52 + /**
  53 + * 当前时间
  54 + */
  55 + private int count = COUNTDOWN_TIME;
  56 + /**
  57 + * 验证码计算时间
  58 + */
  59 + private final static int COUNTDOWN_TIME = 60;
  60 +
  61 + /**
  62 + * 倒数计数器
  63 + */
  64 + private CountDownTimer countDownTimer;
  65 +
  66 + private String mPhone;
  67 + private ActivityRegisterBinding activityRegisterBinding;
  68 +
  69 + private String phone = "";
  70 + private ProgressDialog progressDialog;
  71 + private UserService mUserService;
  72 + private Context context;
  73 +
  74 + public LoginViewModel(ActivityRegisterBinding activityRegisterBinding, Context context){
  75 + this.activityRegisterBinding=activityRegisterBinding;
  76 + this.context=context;
  77 + mUserService = new UserService(context);
  78 + }
  79 + public String getMPhone() {
  80 + return mPhone;
  81 + }
  82 +
  83 + public void setMPhone(String mPhone) {
  84 + this.mPhone = mPhone;
  85 + }
  86 +
  87 + /**
  88 + * 处理验证码
  89 + *
  90 + * @param code
  91 + */
  92 + public void formatCode(Editable code) {
  93 + if (phone.length() == 11 && StringUtils.checkPhoneNumber(phone.toString()) && code.length() == 6) {
  94 + activityRegisterBinding.buttonLogin.setBackgroundResource(R.drawable.login_canuse);
  95 + activityRegisterBinding.buttonLogin.setEnabled(true);
  96 + } else {
  97 + activityRegisterBinding.buttonLogin.setBackgroundResource(R.drawable.login_nouse);
  98 + activityRegisterBinding.buttonLogin.setEnabled(false);
  99 + }
  100 + }
  101 + public void phoneChanged(Editable phone) {
  102 + Log.i("name","titleChanged");
  103 + this.phone = phone.toString();
  104 + if (phone.length() == 11 && StringUtils.checkPhoneNumber(phone.toString())) {
  105 + activityRegisterBinding.buttonSendcode.setBackgroundResource(R.mipmap.verificationcode_canuse);
  106 + activityRegisterBinding.buttonSendcode.setTextColor(GoldenLineApplication.getInstance().getResources().getColor(R.color.color_ff6633));
  107 + activityRegisterBinding.buttonSendcode.setEnabled(true);
  108 + } else {
  109 + activityRegisterBinding.buttonSendcode.setBackgroundResource(R.mipmap.verificationcode_nouse);
  110 + activityRegisterBinding.buttonSendcode.setTextColor(GoldenLineApplication.getInstance().getResources().getColor(R.color.color_959595));
  111 + activityRegisterBinding.buttonSendcode.setEnabled(false);
  112 + }
  113 + }
  114 + public void sendSMS(View view){
  115 + UserUtil.sendMessage(IUserService.QUICK_LOGIN, activityRegisterBinding.etPhone.getText().toString(), new MobileCall());
  116 +
  117 + }
  118 + public void toLogin(View view){
  119 + showLogin();
  120 + UserUtil.quickLogin(String.valueOf(activityRegisterBinding.etPhone.getText()), String.valueOf(activityRegisterBinding.etCode.getText()), ChannelUtil.getChannelFromApk(context), userDataCall);
  121 + }
  122 + public void weixinLogin(View view){
  123 + getOtherInfo("1", Wechat.NAME);
  124 + showLogin();
  125 + }
  126 + public void weiboLogin(View view){
  127 + getOtherInfo("2", SinaWeibo.NAME);
  128 + showLogin();
  129 + }
  130 + public void qqLogin(View view){
  131 + getOtherInfo("3", QQ.NAME);
  132 + showLogin();
  133 + }
  134 + public void closeAct(View view){
  135 + ( (Activity)context).finish();
  136 + }
  137 + /**
  138 + * 发送验证码sdk
  139 + */
  140 + class MobileCall extends GoldenlineCall {
  141 + @Override
  142 + protected void dowork(int what, String extra, Object obj) {
  143 + switch (what) {
  144 + case IUserService.SUCCESS:
  145 + ToastUtil.showToast("验证码已发送");
  146 + startTimer();
  147 + break;
  148 + default:
  149 + ToastUtil.showToast("验证码发送失败");
  150 + updateSendButtonText(true);
  151 + break;
  152 + }
  153 +
  154 + }
  155 +
  156 + /**
  157 + * 开始计数器
  158 + */
  159 + private void startTimer() {
  160 + countDownTimer = new CountDownTimer(COUNTDOWN_TIME * 1000, 990) {
  161 + @Override
  162 + public void onTick(long leftTimeInMilliseconds) {
  163 + long seconds = leftTimeInMilliseconds / 1000;
  164 + count = (int) (seconds % 60);
  165 + updateSendButtonText(false);
  166 + }
  167 +
  168 + @Override
  169 + public void onFinish() {
  170 + updateSendButtonText(true);
  171 + }
  172 +
  173 + };
  174 + countDownTimer.start();
  175 + }
  176 +
  177 + /**
  178 + * 更新按钮的状态
  179 + *
  180 + * @param showNormal
  181 + */
  182 + private void updateSendButtonText(boolean showNormal) {
  183 + if (showNormal) {
  184 + activityRegisterBinding.buttonSendcode.setText(GoldenLineApplication.getInstance().getResources().getString(R.string.logoin_getcode));
  185 + activityRegisterBinding.buttonSendcode.setBackgroundResource(R.mipmap.verificationcode_canuse);
  186 + activityRegisterBinding.buttonSendcode.setTextColor(GoldenLineApplication.getInstance().getResources().getColor(R.color.color_ff6633));
  187 + activityRegisterBinding.buttonSendcode.setEnabled(true);
  188 + } else {
  189 + String s = String.format(Locale.CHINESE, GoldenLineApplication.getInstance().getString(R.string.format_verify_countdown), count);
  190 + activityRegisterBinding.buttonSendcode.setText(s);
  191 + activityRegisterBinding.buttonSendcode.setBackgroundResource(R.mipmap.verificationcode_nouse);
  192 + activityRegisterBinding.buttonSendcode.setTextColor(GoldenLineApplication.getInstance().getResources().getColor(R.color.color_959595));
  193 + activityRegisterBinding.buttonSendcode.setEnabled(false);
  194 + }
  195 + }
  196 + }
  197 + /**
  198 + * 显示等待框
  199 + */
  200 + private void showLogin() {
  201 + progressDialog = ProgressDialog.show(context, "登录中...", "请稍候...", true, false);
  202 + progressDialog.setCancelable(true);// 设置是否可以通过点击Back键取消
  203 + progressDialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条
  204 + }
  205 + private GoldenlineCall userDataCall = new GoldenlineCall() {
  206 + @Override
  207 + protected void dowork(int what, String extra, Object obj) {
  208 + UserData userData = (UserData) obj;
  209 + DataEntity data = userData.getData();
  210 + GoldenLineApplication.mEdit.clear();
  211 + GoldenLineApplication.mEdit.putBoolean("isQuckLogin", true);
  212 + GoldenLineApplication.mEdit.putString("uid", data.getUid());
  213 + GoldenLineApplication.mEdit.putString("hUid", data.gethUid());
  214 + GoldenLineApplication.mEdit.apply();
  215 + if (null != data) {
  216 + //手机号为空必须要进行绑定,这是正在上演的逻辑
  217 + if(TextUtils.isEmpty(data.getMobile())){
  218 + Intent starter = new Intent(context, UpdatePhoneActivity.class);
  219 + starter.putExtra("title","绑定手机号");
  220 + starter.putExtra("uid",data.getUid());
  221 + starter.putExtra("data",data);
  222 + ( (Activity)context).startActivityForResult(starter,101);
  223 + }else{
  224 + doNetWork(data);
  225 + }
  226 + }
  227 + }
  228 +
  229 + @Override
  230 + public void onState(int what, String extra, Object obj) {
  231 + super.onState(what, extra, obj);
  232 + if (what != IUserService.SUCCESS) {
  233 + progressDialog.dismiss();
  234 + }
  235 + }
  236 + };
  237 + /**
  238 + * 登陆完成后调用此方法同步用户其他信息
  239 + */
  240 + public void doNetWork(final DataEntity data) {
  241 + final UserAPI userApi = RestAdapterUtils.getRestAPI(UserAPI.class);
  242 + SyncUserRequestBean request = new SyncUserRequestBean(context);
  243 + request.setEmail(data.getEmail());
  244 + request.setExtInfo(data.getExtInfo());
  245 + request.setFaceUrl(data.getFaceUrl());
  246 + request.setGender(data.getGender().equals("m") ? 0 : (data.getGender().equals("f") ? 1 : 2));
  247 + request.sethUid(data.gethUid());
  248 + request.setLocation(data.getLocation());
  249 + request.setMobile(data.getMobile());
  250 + request.setNickName(data.getNickName());
  251 + request.setUid(data.getUid());
  252 + userApi.syncUserById(request, new Callback<User>() {
  253 + @Override
  254 + public void success(User user, Response response) {
  255 + progressDialog.dismiss();
  256 + if (null != user && user.getErrorCode().equals("0")) {
  257 + mUserService.setUserInfo(user, "");
  258 + SPUtils.put(context, "isSubscribeSuccess", true);
  259 + //登录成功关闭页面
  260 + ( (Activity)context).finish();
  261 + }else{
  262 + ToastUtil.showToast(GoldenLineApplication.getInstance().getString(R.string.login_error));
  263 + }
  264 + }
  265 +
  266 + @Override
  267 + public void failure(RetrofitError error) {
  268 + ToastUtil.showToast(GoldenLineApplication.getInstance().getString(R.string.login_error));
  269 + progressDialog.dismiss();
  270 + }
  271 + });
  272 + }
  273 + public void getOtherInfo(final String tag, String s) {
  274 + ShareSdkUtil.loginThirdPlatform(context, s, new PlatformActionListener() {
  275 + @Override
  276 + public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {//授权成功
  277 +
  278 + progressDialog.dismiss();
  279 +
  280 + if (null != hashMap && hashMap.size() > 0) {
  281 + if ("1" == tag) {
  282 + //微信登录
  283 + String uid = (String) hashMap.get("unionid");
  284 + String nick = platform.getDb().getUserName();
  285 + String location = (String) hashMap.get("city");
  286 + String avatar = (String) hashMap.get("headimgurl");
  287 + //为了红包提现,把uid传为openid
  288 + String openid = (String) hashMap.get("openid");
  289 + String userSex = "n";
  290 + int sex = (int) hashMap.get("sex");
  291 + if (sex == 1) {
  292 + userSex = "m";
  293 + } else if (sex == 2) {
  294 + userSex = "f";
  295 + }
  296 + UserUtil.thirdPartyLogin(3, uid, nick, userSex, location, avatar,
  297 + ChannelUtil.getChannelFromApk(context), userDataCall);
  298 + }else if ("2" == tag) {
  299 + //微博登录
  300 + String uid = platform.getDb().getUserId();
  301 + String nick = (String) hashMap.get("name");
  302 + String location = (String) hashMap.get("location");
  303 + String userSex = (String) hashMap.get("gender");
  304 + String avatar = (String) hashMap.get("profile_image_url");
  305 + UserUtil.thirdPartyLogin(1, uid, nick, userSex, location, avatar,
  306 + ChannelUtil.getChannelFromApk(context), userDataCall);
  307 + } else if("3" == tag){
  308 + //QQ登录
  309 + String uid = platform.getDb().getUserId();
  310 + String nick = (String) hashMap.get("nickname");
  311 + String location = (String) hashMap.get("city");
  312 + String avatar = hashMap.get("figureurl_qq_2").toString();
  313 + String userSex = "n";
  314 + String sex = (String) hashMap.get("gender");
  315 + if (sex.equals("男")) {
  316 + userSex = "m";
  317 + } else if (sex.equals("女")) {
  318 + userSex = "f";
  319 + }
  320 + UserUtil.thirdPartyLogin(2, uid, nick, userSex, location, avatar,
  321 + ChannelUtil.getChannelFromApk(context), userDataCall);
  322 + }
  323 + }
  324 + }
  325 +
  326 + @Override
  327 + public void onError(Platform platform, int i, Throwable throwable) {//授权失败
  328 + progressDialog.dismiss();
  329 + }
  330 +
  331 + @Override
  332 + public void onCancel(Platform platform, int i) {//取消
  333 + SystemTools.show_msg(GoldenLineApplication.getInstance().getBaseContext(), "已取消");
  334 + progressDialog.dismiss();
  335 + }
  336 + });
  337 + }
  338 +}
... ...
app/src/main/res/layout/activity_register.xml
1 1 <?xml version="1.0" encoding="utf-8"?>
2   -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3   - android:layout_width="match_parent"
4   - android:layout_height="match_parent"
5   - android:background="@color/white"
6   - android:orientation="vertical">
7   -
8   - <RelativeLayout
9   - android:layout_width="match_parent"
10   - android:layout_height="45dp"
11   - android:background="@null">
12   -
13   - <ImageButton
14   - android:id="@+id/imabutton_colse"
15   - android:layout_width="wrap_content"
16   - android:layout_height="wrap_content"
17   - android:layout_alignParentRight="true"
18   - android:layout_centerVertical="true"
19   - android:layout_marginRight="22dp"
20   - android:background="@mipmap/register_close" />
21   - </RelativeLayout>
22   -
  2 +<layout xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <data>
  4 + <variable
  5 + name="loginViewModel"
  6 + type="com.cnlive.goldenline.viewmodel.LoginViewModel"/>
  7 + </data>
23 8 <LinearLayout
24 9 android:layout_width="match_parent"
25   - android:layout_height="wrap_content"
26   - android:layout_marginLeft="38dp"
27   - android:layout_marginRight="38dp"
  10 + android:layout_height="match_parent"
  11 + android:background="@color/white"
28 12 android:orientation="vertical">
29 13  
30 14 <RelativeLayout
31 15 android:layout_width="match_parent"
32   - android:layout_height="wrap_content"
33   - android:layout_gravity="center_horizontal"
34   - android:layout_marginTop="80dp"
35   - android:gravity="center">
36   -
  16 + android:layout_height="45dp"
  17 + android:background="@null">
37 18  
38   -
39   - <EditText
40   - android:id="@+id/et_phone"
41   - android:layout_width="match_parent"
42   - android:layout_height="35dp"
43   - android:layout_alignParentStart="true"
44   - android:layout_alignParentTop="true"
45   - android:layout_toLeftOf="@+id/button_sendcode"
46   - android:digits="0123456789"
47   - android:hint="@string/logoin_phone"
48   - android:inputType="phone"
49   - android:maxLength="11"
50   - android:background="@color/white"
51   - android:singleLine="true"
52   - android:textColor="@color/color_333"
53   - android:textColorHint="@color/color_c7c7cd"
54   - android:textSize="14sp" />
55   -
56   - <Button
57   - android:id="@+id/button_sendcode"
  19 + <ImageButton
  20 + android:onClick="@{loginViewModel::closeAct}"
  21 + android:id="@+id/imabutton_colse"
58 22 android:layout_width="wrap_content"
59 23 android:layout_height="wrap_content"
60   - android:layout_above="@+id/view"
61   - android:layout_marginRight="8dp"
62   - android:textSize="11sp"
63   - android:text="获取验证码"
64   - android:gravity="center"
65   - android:enabled="false"
66   - android:textColor="@color/color_959595"
67   - android:layout_alignParentEnd="true"
68   - android:background="@mipmap/verificationcode_nouse" />
69   -
70   - <View
71   - android:id="@+id/view"
72   - android:layout_width="match_parent"
73   - android:layout_height="1dp"
74   - android:layout_below="@id/et_phone"
75   - android:layout_marginTop="15dp"
76   - android:background="@color/color_ededed" />
  24 + android:layout_alignParentRight="true"
  25 + android:layout_centerVertical="true"
  26 + android:layout_marginRight="22dp"
  27 + android:background="@mipmap/register_close" />
77 28 </RelativeLayout>
78 29  
79   - <RelativeLayout
  30 + <LinearLayout
80 31 android:layout_width="match_parent"
81 32 android:layout_height="wrap_content"
82   - android:layout_gravity="center_horizontal"
83   - android:layout_marginTop="20dp"
84   - android:gravity="center">
85   -
  33 + android:layout_marginLeft="38dp"
  34 + android:layout_marginRight="38dp"
  35 + android:orientation="vertical">
86 36  
87   - <View
  37 + <RelativeLayout
88 38 android:layout_width="match_parent"
89   - android:layout_height="1dp"
90   - android:layout_below="@+id/et_code"
91   - android:layout_marginTop="15dp"
92   - android:background="@color/color_ededed" />
93   -
94   - <EditText
95   - android:id="@+id/et_code"
  39 + android:layout_height="wrap_content"
  40 + android:layout_gravity="center_horizontal"
  41 + android:layout_marginTop="80dp"
  42 + android:gravity="center">
  43 +
  44 +
  45 +
  46 + <EditText
  47 + android:afterTextChanged="@{loginViewModel::phoneChanged}"
  48 + android:id="@+id/et_phone"
  49 + android:layout_width="match_parent"
  50 + android:layout_height="35dp"
  51 + android:layout_alignParentStart="true"
  52 + android:layout_alignParentTop="true"
  53 + android:layout_toLeftOf="@+id/button_sendcode"
  54 + android:digits="0123456789"
  55 + android:hint="@string/logoin_phone"
  56 + android:inputType="phone"
  57 + android:maxLength="11"
  58 + android:background="@color/white"
  59 + android:singleLine="true"
  60 + android:textColor="@color/color_333"
  61 + android:textColorHint="@color/color_c7c7cd"
  62 + android:textSize="14sp" />
  63 +
  64 + <Button
  65 + android:onClick="@{loginViewModel::sendSMS}"
  66 + android:id="@+id/button_sendcode"
  67 + android:layout_width="wrap_content"
  68 + android:layout_height="wrap_content"
  69 + android:layout_above="@+id/view"
  70 + android:layout_marginRight="8dp"
  71 + android:textSize="11sp"
  72 + android:text="获取验证码"
  73 + android:gravity="center"
  74 + android:enabled="false"
  75 + android:textColor="@color/color_959595"
  76 + android:layout_alignParentEnd="true"
  77 + android:background="@mipmap/verificationcode_nouse" />
  78 +
  79 + <View
  80 + android:id="@+id/view"
  81 + android:layout_width="match_parent"
  82 + android:layout_height="1dp"
  83 + android:layout_below="@id/et_phone"
  84 + android:layout_marginTop="15dp"
  85 + android:background="@color/color_ededed" />
  86 + </RelativeLayout>
  87 +
  88 + <RelativeLayout
96 89 android:layout_width="match_parent"
97 90 android:layout_height="wrap_content"
98   - android:layout_alignParentStart="true"
99   - android:layout_alignParentTop="true"
100   - android:digits="0123456789"
101   - android:hint="@string/logoin_code"
102   - android:inputType="number"
103   - android:maxLength="6"
104   - android:background="@color/white"
105   - android:singleLine="true"
106   - android:textColor="@color/color_333"
107   - android:textColorHint="@color/color_c7c7cd"
108   - android:textSize="14sp" />
  91 + android:layout_gravity="center_horizontal"
  92 + android:layout_marginTop="20dp"
  93 + android:gravity="center">
109 94  
110   - </RelativeLayout>
111 95  
112   - <Button
113   - android:id="@+id/button_login"
114   - android:layout_width="wrap_content"
115   - android:layout_height="wrap_content"
116   - android:layout_gravity="center_horizontal"
117   - android:enabled="false"
118   - android:layout_marginTop="40dp"
119   - android:background="@drawable/login_nouse" />
120   - </LinearLayout>
  96 + <View
  97 + android:layout_width="match_parent"
  98 + android:layout_height="1dp"
  99 + android:layout_below="@+id/et_code"
  100 + android:layout_marginTop="15dp"
  101 + android:background="@color/color_ededed" />
121 102  
122   - <RelativeLayout
123   - android:layout_width="match_parent"
124   - android:layout_height="wrap_content"
125   - android:layout_gravity="bottom"
126   - android:layout_weight="1">
  103 + <EditText
  104 + android:afterTextChanged="@{loginViewModel::formatCode}"
  105 + android:id="@+id/et_code"
  106 + android:layout_width="match_parent"
  107 + android:layout_height="wrap_content"
  108 + android:layout_alignParentStart="true"
  109 + android:layout_alignParentTop="true"
  110 + android:digits="0123456789"
  111 + android:hint="@string/logoin_code"
  112 + android:inputType="number"
  113 + android:maxLength="6"
  114 + android:background="@color/white"
  115 + android:singleLine="true"
  116 + android:textColor="@color/color_333"
  117 + android:textColorHint="@color/color_c7c7cd"
  118 + android:textSize="14sp" />
  119 +
  120 + </RelativeLayout>
  121 +
  122 + <Button
  123 + android:onClick="@{loginViewModel::toLogin}"
  124 + android:id="@+id/button_login"
  125 + android:layout_width="wrap_content"
  126 + android:layout_height="wrap_content"
  127 + android:layout_gravity="center_horizontal"
  128 + android:enabled="false"
  129 + android:layout_marginTop="40dp"
  130 + android:background="@drawable/login_nouse" />
  131 + </LinearLayout>
127 132  
128 133 <RelativeLayout
129 134 android:layout_width="match_parent"
130   - android:layout_height="95dp"
131   - android:layout_marginBottom="20dp"
132   - android:layout_alignParentBottom="true">
133   -
134   - <TextView
135   - android:id="@+id/text"
136   - android:layout_width="match_parent"
137   - android:layout_height="wrap_content"
138   - android:gravity="center"
139   - android:text="使用其他账号登录"
140   - android:textColor="@color/color_a6a6a6"
141   - android:textSize="13sp" />
  135 + android:layout_height="wrap_content"
  136 + android:layout_gravity="bottom"
  137 + android:layout_weight="1">
142 138  
143   - <LinearLayout
  139 + <RelativeLayout
144 140 android:layout_width="match_parent"
145   - android:layout_height="match_parent"
146   - android:layout_below="@id/text"
147   - android:layout_marginTop="20dp"
148   - android:orientation="horizontal">
  141 + android:layout_height="95dp"
  142 + android:layout_marginBottom="20dp"
  143 + android:layout_alignParentBottom="true">
149 144  
150   - <RelativeLayout
151   - android:layout_width="wrap_content"
  145 + <TextView
  146 + android:id="@+id/text"
  147 + android:layout_width="match_parent"
152 148 android:layout_height="wrap_content"
153   - android:layout_weight="1">
154   -
155   - <ImageButton
156   - android:id="@+id/imabutton_wx"
  149 + android:gravity="center"
  150 + android:text="使用其他账号登录"
  151 + android:textColor="@color/color_a6a6a6"
  152 + android:textSize="13sp" />
  153 +
  154 + <LinearLayout
  155 + android:layout_width="match_parent"
  156 + android:layout_height="match_parent"
  157 + android:layout_below="@id/text"
  158 + android:layout_marginTop="20dp"
  159 + android:orientation="horizontal">
  160 +
  161 + <RelativeLayout
157 162 android:layout_width="wrap_content"
158 163 android:layout_height="wrap_content"
159   - android:layout_centerInParent="true"
160   - android:background="@mipmap/login_wx" />
161   - </RelativeLayout>
162   -
163   - <RelativeLayout
164   - android:layout_width="wrap_content"
165   - android:layout_height="wrap_content"
166   - android:layout_weight="1">
167   -
168   - <ImageButton
169   - android:id="@+id/imabutton_wb"
  164 + android:layout_weight="1">
  165 +
  166 + <ImageButton
  167 + android:onClick="@{loginViewModel::weixinLogin}"
  168 + android:id="@+id/imabutton_wx"
  169 + android:layout_width="wrap_content"
  170 + android:layout_height="wrap_content"
  171 + android:layout_centerInParent="true"
  172 + android:background="@mipmap/login_wx" />
  173 + </RelativeLayout>
  174 +
  175 + <RelativeLayout
170 176 android:layout_width="wrap_content"
171 177 android:layout_height="wrap_content"
172   - android:layout_centerInParent="true"
173   - android:background="@mipmap/login_wb" />
174   - </RelativeLayout>
175   -
176   - <RelativeLayout
177   - android:layout_width="wrap_content"
178   - android:layout_height="wrap_content"
179   - android:layout_weight="1">
180   -
181   - <ImageButton
182   - android:id="@+id/imabutton_qq"
  178 + android:layout_weight="1">
  179 +
  180 + <ImageButton
  181 + android:onClick="@{loginViewModel::weiboLogin}"
  182 + android:id="@+id/imabutton_wb"
  183 + android:layout_width="wrap_content"
  184 + android:layout_height="wrap_content"
  185 + android:layout_centerInParent="true"
  186 + android:background="@mipmap/login_wb" />
  187 + </RelativeLayout>
  188 +
  189 + <RelativeLayout
  190 + android:onClick="@{loginViewModel::qqLogin}"
183 191 android:layout_width="wrap_content"
184 192 android:layout_height="wrap_content"
185   - android:layout_centerInParent="true"
186   - android:background="@mipmap/login_qq" />
187   - </RelativeLayout>
188   - </LinearLayout>
189   - </RelativeLayout>
  193 + android:layout_weight="1">
  194 +
  195 + <ImageButton
  196 + android:id="@+id/imabutton_qq"
  197 + android:layout_width="wrap_content"
  198 + android:layout_height="wrap_content"
  199 + android:layout_centerInParent="true"
  200 + android:background="@mipmap/login_qq" />
  201 + </RelativeLayout>
  202 + </LinearLayout>
  203 + </RelativeLayout>
190 204  
191   - </RelativeLayout>
192   -</LinearLayout>
  205 + </RelativeLayout>
  206 + </LinearLayout>
  207 +</layout>
... ...