package com.example.mysql_tester;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.json.JSONObject;
import com.actionbarsherlock.app.ActionBar;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.TextView.OnEditorActionListener;
import com.actionbarsherlock.app.SherlockActivity;
import com.example.mysql_tester.library.*;
public class LoginActivity extends SherlockActivity {
ActionBar actionBar;
EditText edt_account,edt_password;
Button btnToRegister;
TextView txt_error;
private ProgressDialog pDialog;
//JSON Node �W��
private static String KEY_SUCCESS = "success";
private static String KEY_NICKNAME = "nick_name";
private static String KEY_EMAIL = "email";
private static String KEY_UID = "uID";
int userHasLogined = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login); //�NLayout �]�w��Login����
//ActionBar
actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
//�Ѥ������o����
edt_account = (EditText)findViewById(R.id.login_account);
edt_password = (EditText)findViewById(R.id.login_password);
btnToRegister = (Button)findViewById(R.id.btn_toRegister);
txt_error = (TextView)findViewById(R.id.login_error);
//�]�w��ť
btnToRegister.setOnClickListener(listener);
edt_password.setOnEditorActionListener(done_listener);
}
private OnEditorActionListener done_listener = new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
String email = edt_account.getText().toString();
Boolean emailBoolean = isEmailValid(email);
if(edt_account.getText().toString().equals("") ||
edt_password.getText().toString().equals("") ||
emailBoolean == false) {
Toast.makeText(getApplicationContext(), getResources().getString(R.string.login_plzCheckEmailFormat), Toast.LENGTH_SHORT).show();
}
else {
new doTheLoginWork().execute();
}
}
return false;
}
};
private Button.OnClickListener listener = new Button.OnClickListener(){
@Override
public void onClick(View v) {
Intent go_register = new Intent(LoginActivity.this,RegisterActivity.class);
startActivity(go_register);
}
};
class doTheLoginWork extends AsyncTask<String, String, String> {
//�b�I���}�lŪ�����e�A���Progress Dialog(��ܤ��)
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(LoginActivity.this);
pDialog.setMessage(getResources().getString(R.string.login_nowLogining));
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected String doInBackground(String... params) {
String email = edt_account.getText().toString();
String password = edt_password.getText().toString();
UserFunctions userFunctions = new UserFunctions();
JSONObject json = userFunctions.loginUser(email, password);
//Log.e("json user detail = ", json.toString()); //Log uses
//�ˬd�n�J��Response
try {
String success = json.getString(KEY_SUCCESS);
userHasLogined = Integer.parseInt(success);
Log.e("success = ", success);
if (Integer.parseInt(success) == 1) {
//�ϥΪ̦��\�n�J�F
//SQLite �x�s�ϥΪ̪��ԲӸ��
DatabaseHandler db = new DatabaseHandler(getApplicationContext());
JSONObject json_user = json.getJSONObject("user");
//Log.e("json user data = ", json_user.toString());
//�M����Ʈw���e���Ҧ����
userFunctions.logoutUser(getApplicationContext());
db.addUser(json_user.getString(KEY_NICKNAME), json_user.getString(KEY_EMAIL), json_user.getString(KEY_UID));
//�}�ҵn�J�����
Intent go_item_list = new Intent(LoginActivity.this,ItemList.class);
//�b�}�ҵn�J�������e���M������L��View
go_item_list.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(go_item_list);
finish();
}
else {
//Error in Login
}
}
catch(Exception e) {
e.printStackTrace();
}
return null;
}
//�����I���@�~��A�N��ܮ�����
protected void onPostExecute(String file_url) {
//��������ܮ�
pDialog.dismiss();
runOnUiThread(new Runnable() {
@Override
public void run() {
if (userHasLogined == 1) {
txt_error.setText("");
UserFunctions userFunctions = new UserFunctions();
String nick_name = userFunctions.getUserName(getApplicationContext());
Toast.makeText(getApplicationContext(), getResources().getString(R.string.login_welcomeMessage1) +nick_name +getResources().getString(R.string.login_welcomeMessage2),Toast.LENGTH_SHORT).show();
//int uid = userFunctions.getUserUid(getApplicationContext());
//String useremail = userFunctions.getUserEmail(getApplicationContext());
//Toast.makeText(getApplicationContext(), "�A�n" +nick_name +"�A�w��n�J�I " +"\n uid: " +uid +"\n email:" +useremail, Toast.LENGTH_SHORT).show();
}
else {
txt_error.setText(getResources().getString(R.string.login_errorMessage));
}
}
});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getSupportMenuInflater().inflate(R.menu.login, menu);
return true;
}
/*ActionBar*/
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent go_back = new Intent(LoginActivity.this,ItemList.class);
go_back.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(go_back);
finish();
break;
case R.id.login_menuButton:
String email = edt_account.getText().toString();
Boolean emailBoolean = isEmailValid(email);
if(edt_account.getText().toString().equals("") ||
edt_password.getText().toString().equals("") ||
emailBoolean == false) {
Toast.makeText(getApplicationContext(), getResources().getString(R.string.login_plzCheckEmailFormat), Toast.LENGTH_SHORT).show();
}
else {
new doTheLoginWork().execute();
}
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}
//�ˬdE-mail�榡�O�_���T(From Stack Overflow / By.Andy)
public static boolean isEmailValid(String email) {
boolean isValid = false;
String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
CharSequence inputStr = email;
Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(inputStr);
if (matcher.matches()) {
isValid = true;
}
return isValid;
}
/*To fix the IllegalArgumentException*/
@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
try{
pDialog.dismiss();
}
catch(Exception e){
e.printStackTrace();
}
}
}