package com.yyquan.jzh.fragment.regster;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import com.yyquan.jzh.R;
import com.yyquan.jzh.activity.PhoneRegsterActivity;
import com.yyquan.jzh.entity.Ip;
import com.yyquan.jzh.view.DialogView;
import org.json.JSONException;
import org.json.JSONObject;
import cn.pedant.SweetAlert.SweetAlertDialog;
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
import cz.msebera.android.httpclient.Header;
/**
* Created by jzh on 2015/9/29.
*/
public class PhoneRegsterFragment extends Fragment implements View.OnClickListener {
View view;
TextView tv_getcode;
TextView tv_enter;
TextView tv_title;
EditText et_phone;
EditText et_code;
boolean bool_phone = false;
boolean bool_code = false;
String phone;//手机号码
int i = 60;//发送短信倒计时
String url = Ip.ip + "/YfriendService/DoGetUser";
LinearLayout ll_back;
String type;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (view == null) {
Intent intent=getActivity().getIntent();
type=intent.getStringExtra("type");
view = inflater.inflate(R.layout.fragment_phone_regster, container, false);
initialView();
}
return view;
}
/**
* 初始化数据
*/
private void initialView() {
iniSMSSDK();
tv_title = (TextView) view.findViewById(R.id.phone_regster_textview_title);
if(type.equals("regster")){
tv_title.setText("注 册");
}else if(type.equals("password")){
tv_title.setText("找回密码");
}
DialogView.Initial(getActivity(),"正在验证");
tv_getcode = (TextView) view.findViewById(R.id.phone_regster_textview_getcode);
tv_enter = (TextView) view.findViewById(R.id.phone_regster_textview_enter);
tv_enter.setEnabled(false);
et_phone = (EditText) view.findViewById(R.id.phone_regster_editText_phone);
et_code = (EditText) view.findViewById(R.id.phone_regster_editText_code);
ll_back = (LinearLayout) view.findViewById(R.id.phone_regster_layout_back);
ll_back.setOnClickListener(this);
tv_getcode.setOnClickListener(this);
tv_enter.setOnClickListener(this);
/**
* 判断手机号码是否够11位
*/
et_phone.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.toString().length() == 11) {
bool_phone = true;
} else {
bool_phone = false;
}
if (bool_code && bool_phone) {
tv_enter.setEnabled(true);
tv_enter.setBackgroundResource(R.drawable.shape_login_textview_focused);
} else {
tv_enter.setEnabled(false);
tv_enter.setBackgroundResource(R.drawable.shape_login_textview_nomal);
}
}
});
/**
* 判断验证码是否够4位
*/
et_code.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.toString().length() == 4) {
bool_code = true;
} else {
bool_code = false;
}
if (bool_code && bool_phone) {
tv_enter.setEnabled(true);
tv_enter.setBackgroundResource(R.drawable.shape_login_textview_focused);
} else {
tv_enter.setEnabled(false);
tv_enter.setBackgroundResource(R.drawable.shape_login_textview_nomal);
}
}
});
}
/**
* 初始化短信sdk
*/
private void iniSMSSDK() {
SMSSDK.initSDK(getActivity(), "add91b1ca379", "9c4250259e8bdabb1e52bf867ab17781", true);
EventHandler eh = new EventHandler() {
@Override
public void afterEvent(int event, int result, Object data) {
Message m = new Message();
m.what = 2;
m.arg1 = event;
m.arg2 = result;
m.obj = data;
h.sendMessage(m);
}
};
SMSSDK.registerEventHandler(eh); //注册短信回调
SMSSDK.getSupportedCountries();
}
Handler h = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
tv_getcode.setText("重新发送(" + i + ")");
if (i == 0) {
i = 60;
tv_getcode.setText("获取验证码");
tv_getcode.setEnabled(true);
}
} else if (msg.what == 2) {
int event = msg.arg1;
int result = msg.arg2;
Object data = msg.obj;
if (result == SMSSDK.RESULT_COMPLETE) {
if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
Toast.makeText(getActivity(), "验证码已经发送", Toast.LENGTH_SHORT).show();
} else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
DialogView.dismiss();
if(type.equals("regster")){
((PhoneRegsterActivity) getActivity()).gotoPhoneRegsterToMessgae();
}else if(type.equals("password")){
((PhoneRegsterActivity) getActivity()).gotoGetPassword();
}
// Toast.makeText(getActivity(), "验证成功", Toast.LENGTH_SHORT).show();
}
} else if (result == SMSSDK.RESULT_ERROR) {
DialogView.dismiss();
Toast.makeText(getActivity(), "验证失败,请重试", Toast.LENGTH_SHORT).show();
}
}
}
};
@Override
public void onDestroyView() {
super.onDestroyView();
if (view != null) {
ViewGroup vg = (ViewGroup) view.getParent();
vg.removeView(view);
SMSSDK.unregisterAllEventHandler();
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.phone_regster_textview_getcode:
tv_getcode.setEnabled(false);
phone = et_phone.getText().toString().trim();
if(type.equals("regster")){
isRegster();
}else if(type.equals("password")){
getCode();
}
break;
case R.id.phone_regster_textview_enter:
enterCode();
break;
case R.id.phone_regster_layout_back:
getActivity().finish();
break;
}
}
/**
* 判断该账号是否已注册
*/
private void isRegster() {
RequestParams params = new RequestParams();
params.put("user", phone);
params.put("action", "search");
AsyncHttpClient client = new AsyncHttpClient();
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
String str = new String(responseBody);
if (str != null) {
try {
JSONObject object = new JSONObject(str);
if (object.getString("code").equals("success")) {
getCode();
} else if (object.getString("code").equals("failure")) {
Toast.makeText(getActivity(), "该账号已注册", Toast.LENGTH_SHORT).show();
tv_getcode.setEnabled(true);
}
} catch (JSONException e) {
e.printStackTrace();
tv_getcode.setEnabled(true);
}
} else {
tv_getcode.setEnabled(true);
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Toast.makeText(getActivity(), "网络连接失败,请查看网络设置", Toast.LENGTH_SHORT).show();
tv_getcode.setEnabled(true);
}
});
}
/**
* 获取短信验证码
*/
private void getCode() {
// 通过规则判断手机号
if (!judgePhoneNums(phone)) {
return;
}
SMSSDK.getVerificationCode("86", phone);
tv_getcode.setText("重新发送(" + i + ")");
new Thread(new Runnable() {
@Override
public void run() {
for (; i >= 0; i--) {
h.sendEmptyMessage(1);
if (i == 0) {
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
/**
* 验证短信验证码
*/
private void enterCode() {
DialogView.show();
String code = et_code.getText().toString().trim();
String phone = et_phone.getText().toString().trim();
SMSSDK.submitVerificationCode("86", phone, code);
((PhoneRegsterActivity) getActivity()).phone = phone;
}
/**
* 判断手机号码是否合理
*
* @param phoneNums
*/
private boolean judgePhoneNums(String phoneNums) {
if (isMatchLength(phoneNums, 11)
&& isMobileNO(phoneNums)) {
return true;
}
tv_getcode.setEnabled(true);
Toast.makeText(getActivity(), "手机号码输入有误!", Toast.LENGTH_SHORT).show();
return false;
}
/**
* 判断一个字符串的位数
*
* @param str
* @param length
* @return
*/
public static boolean isMatchLength(String str, int length) {
if (str.isEmpty()) {
return false;
} else {
return str.length() == length ? true : false;
}
}
/**
* 验证手机格式
*/
public static boolean isMobileNO(String mobileNums) {
/*
* 移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
* 联通:130、131、132、152、155、156、185、186 电信:133、153、180、189、(1349卫通)
* 总结起来就是第一位必定为1,第二位必定为3或5或8,其他位置的可以为0-9
*/
String telRegex = "[1][358]\\d{9}";// "[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。
if (TextUtils.isEmpty(mobileNums))
return false;
else
return mobileNums.matches(telRegex);
}
}