package com.linju.android_property.activity;
import roboguice.inject.InjectView;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.PasswordTransformationMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.linju.android_property2.R;
import com.linju.android_property.application.AppApplication;
import com.linju.android_property.base.BaseActivity;
import com.linju.android_property.database.BaseAppDbHelper;
import com.linju.android_property.entity.Login_Bean;
import com.linju.android_property.utils.BasicMember;
import com.linju.android_property.utils.ParseJson;
import com.linju.android_property.utils.PreferencesUtils;
import com.linju.android_property.utils.RequestURL;
import com.linju.android_property.viewutils.OpenSansEditText;
import com.linju.android_property.viewutils.Toaster;
import com.linju.android_property.viewutils.WPAutoCompleteTextView;
import com.linju.android_property.viewutils.WPTextView;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
public class LoginActivity extends BaseActivity implements OnClickListener{
@InjectView(R.id.sign_in_button)
WPTextView sigin; //登陆按钮
@InjectView(R.id.sign_in_progress_bar)
RelativeLayout progresslayout; //进度组件
@InjectView(R.id.username)
WPAutoCompleteTextView username; //用户名
@InjectView(R.id.password)
OpenSansEditText password; //密码
@InjectView(R.id.password_visibility)
ImageView passwordvisibility;
@InjectView(R.id.hints)
WPTextView hint; //提示文本
protected boolean mPasswordVisible;
private BasicMember basicMember;
private static final String[] cities=new String[]
{"661669@163.com"};
private BaseAppDbHelper<Login_Bean> dbHelper = new BaseAppDbHelper<Login_Bean>();
public static BaseAppDbHelper<Login_Bean> staticHelper = new BaseAppDbHelper<Login_Bean>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_login);
basicMember = new BasicMember();
initPasswordVisibilityButton();
sigin.setOnClickListener(this);
username.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
//s是输入框正在输的字符串,随着不断的输入,s的值也会不停地改变
String str = s.toString();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(LoginActivity.this, android.R.layout.simple_dropdown_item_1line,cities);
username.setAdapter(adapter);
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what == 1){
//请求登陆失败
hint.setText(R.string.login_error_hint);
username.setEnabled(true);
password.setEnabled(true);
progresslayout.setVisibility(View.GONE);
}else if(msg.what == 2){
//准备请求登陆
username.setEnabled(false);
password.setEnabled(false);
hint.setText(R.string.default_login_hint);
}else if(msg.what == 3){
startActivity(new Intent(LoginActivity.this,MainTabActivity.class));
progresslayout.setVisibility(View.GONE);
LoginActivity.this.finish();
}
}
};
@Override
public void onBackPressed() {
super.onBackPressed();
System.exit(0);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.sign_in_button:
if(isvalid()){
if(progresslayout.getVisibility() == View.GONE){ //处理用户登陆的业务逻辑 用户登陆完成 隐藏不确定进度条
progresslayout.setVisibility(View.VISIBLE);
}else{
progresslayout.setVisibility(View.GONE);
}
handler.sendEmptyMessage(2);
//开始HTTP请求
httpLogin(v);
}
break;
}
}
private void httpLogin(final View v){
RequestParams params = new RequestParams();
params.put(BasicMember.LOING_NAME, basicMember.getLoginname());
params.put(BasicMember.LOING_PASSWORD, basicMember.getLoginpassword());
//不确定的dialog
AppApplication.getHttpClient().post(RequestURL.LOGIN_USER,params ,new AsyncHttpResponseHandler(){
private boolean isSuc = false;
@Override
public void onStart() {
//网络请求开始
hint.setVisibility(View.VISIBLE);
v.setEnabled(false);
}
@Override
@Deprecated
public void onSuccess(String content) {
// hint.setText(content);
parseUserJson(content);
isSuc = true;
}
@Override
@Deprecated
public void onFailure(Throwable error) {
v.setEnabled(true);
isSuc = false;
handler.sendEmptyMessage(1);
}
@Override
public void onFinish() {
if(!isSuc){
// Toaster.showOneToast(R.string.login_error_hint);
handler.sendEmptyMessage(1);
}
v.setEnabled(true);
}
});
}
//验证表单
private boolean isvalid(){
String account = username.getText().toString().trim();
String pass = password.getText().toString().trim();
if(TextUtils.isEmpty(account)){
Toaster.showOneToast(R.string.sign_account_hint);
username.requestFocus();
return false;
}else{
basicMember.setLoginname(account.trim());
}
basicMember.setLoginpassword(pass);
if(TextUtils.isEmpty(pass)){
Toaster.showOneToast(R.string.login_password_hint);
password.requestFocus();
return false;
}
return true;
}
//点击显示密码的图片
protected void initPasswordVisibilityButton() {
if (passwordvisibility == null) {
return;
}
passwordvisibility.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
changePassword();
}
});
}
//改变密码图片点击 明文或者密文
private void changePassword(){
mPasswordVisible = !mPasswordVisible;
if (mPasswordVisible) {
passwordvisibility.setImageResource(R.drawable.dashicon_eye_open);
passwordvisibility.setColorFilter(getResources().getColor(R.color.nux_eye_icon_color_open));
password.setTransformationMethod(null);
} else {
passwordvisibility.setImageResource(R.drawable.dashicon_eye_closed);
passwordvisibility.setColorFilter(getResources().getColor(R.color.nux_eye_icon_color_closed));
password.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
password.setSelection(password.length());
}
//解析用户信息
private void parseUserJson(String json){
Login_Bean bean = ParseJson.get_loginJSON(json);
if(bean != null && bean.getUser_id() != null){
//保存或者更新用户信息到数据库
setLoginKey(bean.getUser_id());
//查询数据库中是否有跟ID想等的数据
Login_Bean dblogin = new Login_Bean();
dblogin = dbHelper.queryObjForEq(Login_Bean.class, Login_Bean.USER_ID, bean.getUser_id());
if(dblogin == null){
//没有的话就创建对象 插入一条数据
int i = dbHelper.create(bean);
}else{
//如果有的话 吧数据库中的ID引用到请求后解析完成后的对象
bean.setId(dblogin.getId());
//如果有localID就跟新数据库 否则插入数据库
dbHelper.createOrUpdate(bean);
}
handler.sendEmptyMessage(3);
}else{
handler.sendEmptyMessage(1);
}
}
//设置用户的key就是服务器上的ID 用sharedprefrence保存用户的ID
public static void setLoginKey(String user_id){
PreferencesUtils.setStringPreferences(AppApplication.getContext(), AppApplication.PREFERENCE_NAME, Login_Bean.USER_ID, user_id);
}
//获取用户的key
public static String getLoginKey(){
return PreferencesUtils.getStringPreference(AppApplication.getContext(), AppApplication.PREFERENCE_NAME, Login_Bean.USER_ID, "");
}
public static Login_Bean getUser(){
Login_Bean dblogin = new Login_Bean();
dblogin = staticHelper.queryObjForEq(Login_Bean.class, Login_Bean.USER_ID, getLoginKey());
return dblogin;
}
}