package hillfly.wifichat.activity;
import hillfly.wifichat.R;
import hillfly.wifichat.adapter.SimpleListDialogAdapter;
import hillfly.wifichat.common.BaseActivity;
import hillfly.wifichat.common.dialog.SimpleListDialog;
import hillfly.wifichat.common.dialog.SimpleListDialog.onSimpleListItemClickListener;
import hillfly.wifichat.model.Users;
import hillfly.wifichat.util.DateUtils;
import hillfly.wifichat.util.ImageUtils;
import hillfly.wifichat.util.SessionUtils;
import hillfly.wifichat.util.SharePreferenceUtils;
import hillfly.wifichat.util.TextUtils;
import java.util.Calendar;
import java.util.Date;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
/**
* @fileName LoginActivity.java
* @description 用户登陆类
*/
public class LoginActivity extends BaseActivity implements OnClickListener,
onSimpleListItemClickListener, OnDateChangedListener {
// 登陆年龄限制
private static final int MAX_AGE = 80;
private static final int MIN_AGE = 12;
private static final String DEFAULT_DATA = "19920101";
private LinearLayout mLlayoutMain; // 首次登陆主界面
private TextView mHtvSelectOnlineState;
private EditText mEtNickname;
private TextView mHtvConstellation;
private TextView mHtvAge;
private DatePicker mDpBirthday;
private Calendar mCalendar;
private Date mMinDate;
private Date mMaxDate;
private Date mSelectDate;
private LinearLayout mLlayoutExMain; // 二次登陆页面
private ImageView mImgExAvatar;
private TextView mTvExNickmame;
private LinearLayout mLayoutExGender; // 性别根布局
private ImageView mIvExGender;
private TextView mHtvExAge;
private TextView mTvExConstellation;// 星座
private TextView mTvExLogintime; // 上次登录时间
private Button mBtnBack;
private Button mBtnNext;
private Button mBtnChangeUser;
private RadioGroup mRgGender;
private TelephonyManager mTelephonyManager;
private SimpleListDialog mSimpleListDialog;
private int mAge;
private int mAvatar;
private String mBirthday;
private String mGender;
private String mIMEI;
private String mConstellation; // 星座
private String mLastLogintime; // 上次登录时间
private String mNickname = "";
private String mOnlineStateStr = "在线"; // 默认登录状态
private int mOnlineStateInt = 0; // 默认登录状态编号
private String[] mOnlineStateType;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mTelephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
initViews();
initData();
initEvents();
}
@Override
protected void initViews() {
mEtNickname = (EditText) findViewById(R.id.login_et_nickname);
mHtvSelectOnlineState = (TextView) findViewById(R.id.login_htv_onlinestate);
mRgGender = (RadioGroup) findViewById(R.id.login_baseinfo_rg_gender);
mHtvConstellation = (TextView) findViewById(R.id.login_birthday_htv_constellation);
mHtvAge = (TextView) findViewById(R.id.login_birthday_htv_age);
mDpBirthday = (DatePicker) findViewById(R.id.login_birthday_dp_birthday);
mBtnBack = (Button) findViewById(R.id.login_btn_back);
mBtnNext = (Button) findViewById(R.id.login_btn_next);
mBtnChangeUser = (Button) findViewById(R.id.login_btn_changeUser);
SharePreferenceUtils sp = new SharePreferenceUtils();
mNickname = sp.getNickname();
// 若mNickname有内容,则读取本地存储的用户信息
if (mNickname.length() != 0) {
mTvExNickmame = (TextView) findViewById(R.id.login_tv_existName);
mImgExAvatar = (ImageView) findViewById(R.id.login_img_existImg);
mLayoutExGender = (LinearLayout) findViewById(R.id.login_layout_gender);
mIvExGender = (ImageView) findViewById(R.id.login_iv_gender);
mHtvExAge = (TextView) findViewById(R.id.login_htv_age);
mTvExConstellation = (TextView) findViewById(R.id.login_tv_constellation);
mTvExLogintime = (TextView) findViewById(R.id.login_tv_lastlogintime);
mLlayoutExMain = (LinearLayout) findViewById(R.id.login_linearlayout_existmain);
mLlayoutMain = (LinearLayout) findViewById(R.id.login_linearlayout_main);
mLlayoutMain.setVisibility(View.GONE);
mLlayoutExMain.setVisibility(View.VISIBLE);
mAvatar = sp.getAvatarId();
mBirthday = sp.getBirthday();
mOnlineStateInt = sp.getOnlineStateId();
mGender = sp.getGender();
mAge = sp.getAge();
mConstellation = sp.getConstellation();
mLastLogintime = sp.getLogintime();
Picasso.with(mContext).load(ImageUtils.getImageID(Users.AVATAR + mAvatar))
.into(mImgExAvatar);
mTvExNickmame.setText(mNickname);
mTvExConstellation.setText(mConstellation);
mHtvExAge.setText(mAge + "");
mTvExLogintime.setText(DateUtils.getBetweentime(mLastLogintime));
if ("女".equals(mGender)) {
mIvExGender.setBackgroundResource(R.drawable.ic_user_famale);
mLayoutExGender.setBackgroundResource(R.drawable.bg_gender_famal);
}
else {
mIvExGender.setBackgroundResource(R.drawable.ic_user_male);
mLayoutExGender.setBackgroundResource(R.drawable.bg_gender_male);
}
}
}
@Override
protected void initEvents() {
mHtvSelectOnlineState.setOnClickListener(this);
mBtnBack.setOnClickListener(this);
mBtnNext.setOnClickListener(this);
mBtnChangeUser.setOnClickListener(this);
}
private void initData() {
if (android.text.TextUtils.isEmpty(mBirthday)) {
mSelectDate = DateUtils.getDate(DEFAULT_DATA);
mBirthday = DEFAULT_DATA;
}
else {
mSelectDate = DateUtils.getDate(mBirthday);
}
Calendar mMinCalendar = Calendar.getInstance();
Calendar mMaxCalendar = Calendar.getInstance();
mMinCalendar.set(Calendar.YEAR, mMinCalendar.get(Calendar.YEAR) - MIN_AGE);
mMinDate = mMinCalendar.getTime();
mMaxCalendar.set(Calendar.YEAR, mMaxCalendar.get(Calendar.YEAR) - MAX_AGE);
mMaxDate = mMaxCalendar.getTime();
mCalendar = Calendar.getInstance();
mCalendar.setTime(mSelectDate);
flushBirthday(mCalendar);
mDpBirthday.init(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH),
mCalendar.get(Calendar.DAY_OF_MONTH), this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.login_htv_onlinestate:
mOnlineStateType = getResources().getStringArray(R.array.onlinestate_type);
mSimpleListDialog = new SimpleListDialog(LoginActivity.this);
mSimpleListDialog.setTitle("选择在线状态");
mSimpleListDialog.setTitleLineVisibility(View.GONE);
mSimpleListDialog.setAdapter(new SimpleListDialogAdapter(LoginActivity.this,
mOnlineStateType));
mSimpleListDialog.setOnSimpleListItemClickListener(LoginActivity.this);
mSimpleListDialog.show();
break;
// 更换用户,清空数据
case R.id.login_btn_changeUser:
mNickname = "";
mAge = -1;
mGender = null;
mIMEI = null;
mOnlineStateStr = "在线"; // 默认登录状态
mAvatar = 0;
mConstellation = null;
mOnlineStateInt = 0; // 默认登录状态编号
SessionUtils.clearSession(); // 清空Session数据
mLlayoutMain.setVisibility(View.VISIBLE);
mLlayoutExMain.setVisibility(View.GONE);
break;
case R.id.login_btn_back:
finish();
break;
case R.id.login_btn_next:
doLoginNext();
break;
}
}
@Override
public void onItemClick(int position) {
mOnlineStateStr = mOnlineStateType[position];
mOnlineStateInt = position; // 获取在线状态编号
mHtvSelectOnlineState.requestFocus();
mHtvSelectOnlineState.setText(mOnlineStateStr);
}
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mBirthday = String.valueOf(year) + String.format("%02d", monthOfYear+1)
+ String.format("%02d", dayOfMonth);
mCalendar = Calendar.getInstance();
mCalendar.set(year, monthOfYear, dayOfMonth);
if (mCalendar.getTime().after(mMinDate) || mCalendar.getTime().before(mMaxDate)) {
mCalendar.setTime(mSelectDate);
mDpBirthday.init(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH),
mCalendar.get(Calendar.DAY_OF_MONTH), this);
}
else {
flushBirthday(mCalendar);
}
}
private void flushBirthday(Calendar calendar) {
String constellation = TextUtils.getConstellation(calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH));
mSelectDate = calendar.getTime();
mHtvConstellation.setText(constellation);
int age = TextUtils.getAge(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH));
mHtvAge.setText(age + "");
}
/**
* 登录资料完整性验证,不完整则无法登陆,完整则记录输入的信息。
*
* @return boolean 返回是否为完整, 完整(true),不完整(false)
*/
private boolean isValidated() {
mNickname = "";
mGender = null;
if (TextUtils.isNull(mEtNickname)) {
showShortToast(R.string.login_toast_nickname);
mEtNickname.requestFocus();
return false;
}
switch (mRgGender.getCheckedRadioButtonId()) {
case R.id.login_baseinfo_rb_female:
mGender = "女";
break;
case R.id.login_baseinfo_rb_male:
mGender = "男";
break;
default:
showShortToast(R.string.login_toast_sex);
return false;
}
mNickname = mEtNickname.getText().toString().trim(); // 获取昵称
mAvatar = (int) (Math.random() * 12 + 1); // 获取头像编号
mConstellation = mHtvConstellation.getText().toString().trim(); // 获取星座
mAge = Integer.parseInt(mHtvAge.getText().toString().trim()); // 获取年龄
return true;
}
/**
* 执行下一步跳转
* <p>
* 同时获取客户端的IMIE信息
*/
private void doLoginNext() {
if (mNickname.length() == 0) {
if ((!isValidated())) {
return;
}
}
putAsyncTask(new AsyncTask<Void, Void, Boolean>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
showLoadingDialog(getString(R.string.login_dialog_saveInfo));
}
@Override
protected Boolean doInBackground(Void... params) {
try {
mIMEI = mTelephonyManager.getDeviceId(); // 获取IMEI
// 设置用户Session信息
SessionUtils.setIMEI(mIMEI);
SessionUtils.setNickname(mNickname);
SessionUtils.setAge(mAge);
SessionUtils.setBirthday(mBirthday);
SessionUtils.setGender(mGender);
SessionUtils.setAvatar(mAvatar);
SessionUtils.setOnlineStateInt(mOnlineStateInt);
SessionUtils.setConstellation(mConstellation);
return true;
}
catch (Exception e) {
e.printStackTrace();
}
return false;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
dismissLoadingDialog();
if (result) {
startActivity(WifiapActivity.class);
finish();
}
else {
showShortToast(R.string.login_toast_loginfailue);
}
}
});
}
}