package com.vinsol.expensetracker.sync;
import java.io.IOException;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.google.gson.Gson;
import com.vinsol.confconnect.gson.MyGson;
import com.vinsol.confconnect.http.HTTP;
import com.vinsol.expensetracker.BaseActivity;
import com.vinsol.expensetracker.Constants;
import com.vinsol.expensetracker.ExpenseTrackerApplication;
import com.vinsol.expensetracker.R;
import com.vinsol.expensetracker.Preferences;
import com.vinsol.expensetracker.helpers.SharedPreferencesHelper;
import com.vinsol.expensetracker.models.User;
import com.vinsol.expensetracker.utils.Log;
import com.vinsol.expensetracker.utils.Strings;
public class UserAuthentication extends BaseActivity implements OnClickListener {
private boolean isSignUp;
private EditText name;
private EditText password;
private EditText email;
private Button button;
private ProgressDialog progressDialog;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sync_setup_user_account);
isSignUp = getIntent().getBooleanExtra(Constants.KEY_IS_SIGNUP, false);
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Wait...");
progressDialog.setCancelable(false);
name = (EditText) findViewById(R.id.sync_name);
email = (EditText) findViewById(R.id.sync_email);
password = (EditText) findViewById(R.id.sync_password);
button = (Button) findViewById(R.id.startAuthenticate);
handler = new Handler();
if(!isSignUp) {
((TextView) findViewById(R.id.headerText)).setText(getString(R.string.signin));
name.setVisibility(View.GONE);
button.setText(getString(R.string.signin));
}
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.startAuthenticate:
progressDialog.show();
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
if(isSignUp){
signup();
} else {
signin();
}
}
}).start();
break;
default:
break;
}
}
private void signin() {
User user = setUserData();
try {
if(user != null) {
Gson gson = new MyGson().get();
String postData = gson.toJson(user);
Log.d("********************* Post Data "+postData);
HTTP http = new HTTP(UserAuthentication.this);
String fetchedData = http.signin(postData);
Log.d("************** "+fetchedData);
if(fetchedData != null) {
if(http.getResponseCode() == 200) {
User savedUser = gson.fromJson(fetchedData, User.class);
if(Strings.notEmpty(savedUser.token)) {
SharedPreferencesHelper.setUserDetails(savedUser);
handler.post(new Runnable() {
@Override
public void run() {
startPrefActivity();
}
});
return;
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
showError();
}
});
}
private void signup() {
User user = setUserData();
try {
if(user != null) {
Gson gson = new MyGson().get();
String postData = gson.toJson(user);
Log.d("********************* Post Data "+postData);
HTTP http = new HTTP(UserAuthentication.this);
String fetchedData = http.signup(postData);
Log.d("************** "+fetchedData);
if(fetchedData != null) {
if(http.getResponseCode() == 200) {
User savedUser = gson.fromJson(fetchedData, User.class);
if(Strings.notEmpty(savedUser.token)) {
SharedPreferencesHelper.setUserDetails(savedUser);
handler.post(new Runnable() {
@Override
public void run() {
startPrefActivity();
}
});
return;
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
showError();
}
});
}
private void showError() {
progressDialog.dismiss();
new AlertDialog.Builder(this)
.setMessage("There is some problem with the Signup/Signin.....Try Again!!!!!")
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Error")
.setPositiveButton(getString(R.string.ok), (android.content.DialogInterface.OnClickListener)null)
.show();
}
private void startPrefActivity() {
ExpenseTrackerApplication.setSyncPrefs();
if(ExpenseTrackerApplication.toSync) {
SyncHelper.syncHelper = new SyncHelper(this);
SyncHelper.syncHelper.execute();
}
progressDialog.dismiss();
Intent intent = new Intent(this, Preferences.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
private User setUserData() {
User user = null;
if(isEnteredInfoCorrect()) {
return null;
} else {
user = new User(name.getText().toString(), email.getText().toString(), password.getText().toString());
user.deviceId = ""+Build.BOARD.length()%10+ Build.BRAND.length()%10 +
Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 +
Build.DISPLAY.length()%10 + Build.HOST.length()%10 +
Build.ID.length()%10 + Build.MANUFACTURER.length()%10 +
Build.MODEL.length()%10 + Build.PRODUCT.length()%10 +
Build.TAGS.length()%10 + Build.TYPE.length()%10 +
Build.USER.length()%10;
}
return user;
}
private boolean isEnteredInfoCorrect() {
if(isSignUp) {
return Strings.isEmpty(name.getText().toString()) || Strings.isEmpty(email.getText().toString()) || Strings.isEmpty(password.getText().toString()) || password.length() < 5 || !isEmailFormatCorrect(email.getText().toString());
}
return Strings.isEmpty(email.getText().toString()) || Strings.isEmpty(password.getText().toString()) || password.length() < 5 || !isEmailFormatCorrect(email.getText().toString());
}
private boolean isEmailFormatCorrect(String email) {
return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
}
}