package com.aiyou.bbs;
import com.aiyou.AiYouApplication;
import com.aiyou.BaseActivity;
import com.aiyou.R;
import com.aiyou.bbs.bean.Favorite;
import com.aiyou.bbs.bean.User;
import com.aiyou.bbs.bean.Refer.ReferType;
import com.aiyou.bbs.utils.BBSManager;
import com.aiyou.utils.ActivityFunc;
import com.aiyou.utils.AiYouManager;
import com.aiyou.utils.JsonHelper;
import com.aiyou.utils.NetWorkManager;
import com.aiyou.utils.SwitchManager;
import com.aiyou.utils.thread.ThreadUtils;
import external.otherview.CircleImageView;
import external.otherview.FloatLabeledEditText;
import external.otherview.Win8ProgressBar;
import external.shimmer.Shimmer;
import external.shimmer.ShimmerTextView;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;
/**
* 用户登录页面
*
* @author sollian
*/
public class BBSLoginActivity extends BaseActivity implements OnClickListener {
public static final String KEY_USER = "user";
private static final int MSG_USER_QUERY = 1;
private static final int MSG_ERROR = -1;
private static final String KEY_ERROR = "errorMsg";
private static String LOGIN;
private static String LOGOUT;
private BBSManager mBBSMgr;
/**
* 控件
*/
private FloatLabeledEditText mIdEditText, mPasswordEditText;
private Button mLoginBtn;
private Win8ProgressBar mProgressBar;
// 显示用户信息
private CircleImageView mFaceImageView;
private ShimmerTextView mIdTextView;
private TextView mNameTextView;
/**
* 用户id扫光特效
*/
private Shimmer mShimmer;
/**
* 用户
*/
private User mUser;
private Handler mHandler = new Handler(new Handler.Callback() {
public boolean handleMessage(Message msg) {
if (MSG_USER_QUERY == msg.what) {
// 登录|注销成功
/**
* 设置返回数据
*/
// 使用Intent返回数据
Intent intent = new Intent();
// 把返回数据存入Intent
if (null != mUser) {
intent.putExtra(KEY_USER, mUser);
}
// 设置返回数据
setResult(RESULT_OK, intent);
// 更新用户信息
updateUserWindow(mUser);
} else if (MSG_ERROR == msg.what) {
// 出错
Bundle data = msg.getData();
String error = data.getString(KEY_ERROR);
msg.recycle();
if (error == null) {
error = NetWorkManager.MSG_NONET;
}
Toast.makeText(getBaseContext(), error, Toast.LENGTH_SHORT)
.show();
}
showProgressBar(false);
return true;
}
});
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bbs_login);
LOGIN = getString(R.string.login);
LOGOUT = getString(R.string.logout);
init();
verifyUserInfo();
}
@Override
public void onClick(View view) {
int nId = view.getId();
if (R.id.login_btn == nId) {
String text = mLoginBtn.getText().toString();
if (text.equals(LOGIN)) {
login();
} else {
logout();
}
} else if (R.id.activity_bbslogin_civ_face == nId) {
// 显示用户详细信息
if (null != mUser) {
ActivityFunc.startActivity(this, BBSUserInfoActivity.class, mUser,
false);
}
}
}
private void login() {
// 验证用户名、密码
String mId = mIdEditText.getTextString().trim();
String mPassword = mPasswordEditText.getTextString().trim();
if ("".equals(mId) || "".equals(mPassword)) {
Toast.makeText(getBaseContext(), "用户名或密码不能为空", Toast.LENGTH_SHORT)
.show();
} else {
mBBSMgr.setUserInfo(mId, mPassword);
AiYouManager.viewInputMethod(BBSLoginActivity.this, false, mPasswordEditText);
verifyUserInfo();
}
}
private void logout() {
mBBSMgr.clearUserInfo();
verifyUserInfo();
}
/**
* 验证用户ID和密码
*
*/
private void verifyUserInfo() {
threadUserVerify();
}
/**
* 更新用户信息
*
* @param user
*/
private void updateUserWindow(User user) {
if (null != user.face_url) {
mFaceImageView.setImageURL(user.face_url);
}
if (null != user.id) {
if (user.id.equals(BBSManager.GUEST)) {
mLoginBtn.setText(LOGIN);
} else {
mLoginBtn.setText(LOGOUT);
}
mIdTextView.setText(user.id);
if (Build.VERSION.SDK_INT >= 11) {
if (null != mShimmer && mShimmer.isAnimating()) {
mShimmer.cancel();
}
mShimmer = new Shimmer();
mShimmer.setRepeatCount(2);
mShimmer.setDuration(800);
mShimmer.start(mIdTextView);
}
}
if (null != user.user_name) {
mNameTextView.setText(user.user_name);
}
}
/**
* 验证用户信息的线程
*
*/
private void threadUserVerify() {
if (!NetWorkManager.getInstance(getBaseContext()).isNetAvailable()) {
if (null != mHandler) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
showProgressBar(true);
ThreadUtils.execute(new Runnable() {
@Override
public void run() {
String strJson = User.login(getBaseContext());
if (TextUtils.isEmpty(strJson)) {
if (mHandler != null) {
mHandler.sendEmptyMessage(MSG_ERROR);
}
return;
}
String strError = JsonHelper.checkError(strJson);
if (null != strError) {
// 是 错误信息
if (null != mHandler) {
Message msg = mHandler.obtainMessage(MSG_ERROR);
Bundle data = msg.getData();
data.putString(KEY_ERROR, strError);
msg.setData(data);
mHandler.sendMessage(msg);
}
return;
}
initFavorite();
// 不是 错误信息
mBBSMgr.setBBSNotificationMail(false);
mBBSMgr.setBBSNotificationRefer(ReferType.REPLY, 0);
mBBSMgr.setBBSNotificationRefer(ReferType.AT, 0);
// 将json数据解析为User元数据
mUser = new User(strJson);
/**
* 重置分区列表
*/
BBSManager.initTreeViewData(getBaseContext(),
BBSSectionActivity.mTreeListElements);
if (null != mHandler) {
mHandler.sendEmptyMessage(MSG_USER_QUERY);
}
}
});
}
private void initFavorite() {
if (!NetWorkManager.getInstance(getBaseContext()).isNetAvailable()) {
return;
}
ThreadUtils.execute(new Runnable() {
@Override
public void run() {
String strJson = Favorite.getFavorite(AiYouApplication.getInstance(), 0);
if (!TextUtils.isEmpty(strJson) && JsonHelper.checkError(strJson) == null) {
Favorite.mFavorite = new Favorite(strJson);
}
}
});
}
private void showProgressBar(boolean flag) {
if (flag) {
mLoginBtn.setVisibility(View.GONE);
mProgressBar.setVisibility(View.VISIBLE);
} else {
mLoginBtn.setVisibility(View.VISIBLE);
mProgressBar.setVisibility(View.GONE);
}
}
/**
* 初始化
*/
@SuppressWarnings("deprecation")
private void init() {
mBBSMgr = BBSManager.getInstance(getBaseContext());
LinearLayout ll_user_info = (LinearLayout) findViewById(R.id.activity_bbslogin_ll_user_info);
// 设置背景
Bitmap bmp = getIntent().getParcelableExtra(ActivityFunc.KEY_BACKGROUND);
if (null != bmp) {
Drawable drawable = new BitmapDrawable(bmp);
ll_user_info.setBackgroundDrawable(drawable);
} else {
if (SwitchManager.getInstance(getBaseContext()).isNightModeEnabled()) {
ll_user_info.setBackgroundColor(getResources().getColor(
R.color.bbs_background_night));
} else {
ll_user_info.setBackgroundColor(getResources().getColor(
R.color.bbs_background_day));
}
}
mIdEditText = (FloatLabeledEditText) findViewById(R.id.activity_bbslogin_flet_user_id);
mPasswordEditText = (FloatLabeledEditText) findViewById(R.id.activity_bbslogin_flet_user_password);
mPasswordEditText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
switch (actionId) {
case EditorInfo.IME_ACTION_DONE:
login();
break;
}
return true;
}
});
mLoginBtn = (Button) findViewById(R.id.login_btn);
mLoginBtn.setText(LOGIN);
mProgressBar = (Win8ProgressBar) findViewById(R.id.progress_bar);
mFaceImageView = (CircleImageView) findViewById(R.id.activity_bbslogin_civ_face);
mIdTextView = (ShimmerTextView) findViewById(R.id.activity_bbslogin_shtv_id);
mNameTextView = (TextView) findViewById(R.id.activity_bbslogin_tv_name);
}
/**
* 注册新账号
*
* @param view
*/
public void onRegister(View view) {
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse(BBSManager.BBS_URL));
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, 0);
}
public void selfFinish(View view) {
scrollToFinishActivity();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 按下键盘上返回按钮
if (keyCode == KeyEvent.KEYCODE_BACK) {
selfFinish(null);
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onDestroy() {
super.onDestroy();
mUser = null;
mHandler.removeCallbacksAndMessages(null);
mHandler = null;
if (Build.VERSION.SDK_INT >= 11) {
if (null != mShimmer && mShimmer.isAnimating()) {
mShimmer.cancel();
}
mShimmer = null;
}
System.gc();
}
}