package uk.co.traintrackapp.traintrack.fragment;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import org.json.JSONException;
import org.json.JSONObject;
import uk.co.traintrackapp.traintrack.R;
import uk.co.traintrackapp.traintrack.TrainTrack;
import uk.co.traintrackapp.traintrack.model.User;
import uk.co.traintrackapp.traintrack.utils.Utils;
public class AccountManagerFragment extends Fragment {
private ProgressBar progress;
private Button update;
private Button logout;
private Button login;
private Button signUp;
public static AccountManagerFragment newInstance() {
return new AccountManagerFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.fragment_account_manager, container, false);
final TrainTrack app = (TrainTrack) getActivity().getApplication();
final User user = app.getUser();
final EditText username = (EditText) v.findViewById(R.id.username);
final EditText email = (EditText) v.findViewById(R.id.email);
final EditText password = (EditText) v.findViewById(R.id.password);
progress = (ProgressBar) v.findViewById(R.id.progress);
signUp = (Button) v.findViewById(R.id.sign_up);
login = (Button) v.findViewById(R.id.login);
update = (Button) v.findViewById(R.id.update);
logout = (Button) v.findViewById(R.id.logout);
updateButtonVisibility(user.isLoggedIn());
username.setText(user.getUsername());
email.setText(user.getEmail());
signUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progress.setVisibility(View.VISIBLE);
new SignUpRequest().execute(username.getText().toString(),
email.getText().toString(),
password.getText().toString());
}
});
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progress.setVisibility(View.VISIBLE);
new LoginRequest().execute(email.getText().toString(),
password.getText().toString());
}
});
logout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
user.logout(getActivity());
app.setUser(user);
Toast.makeText(getActivity(), "Goodbye " + user.getUsername(), Toast.LENGTH_LONG).show();
getActivity().recreate();
}
});
return v;
}
class LoginRequest extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
JSONObject postData = new JSONObject();
JSONObject user = new JSONObject();
try {
user.put("email", params[0]);
user.put("password", params[1]);
postData.put("user", user);
} catch (JSONException e) {
Utils.log(e.getMessage());
}
return Utils.httpPost(Utils.API_BASE_URL + "/login", postData.toString());
}
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
progress.setVisibility(View.GONE);
JSONObject userJson = new JSONObject();
try {
userJson = new JSONObject(response);
} catch (JSONException e) {
Utils.log(e.getMessage());
}
User user = new User(userJson);
if (user.isLoggedIn()) {
user.save(getActivity());
TrainTrack app = (TrainTrack) getActivity().getApplication();
app.setUser(user);
updateButtonVisibility(true);
Toast.makeText(getActivity(), "Hello " + user.getUsername(), Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity(), "Could not login sorry!", Toast.LENGTH_LONG).show();
Utils.log(userJson.toString());
}
}
}
class SignUpRequest extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
JSONObject postData = new JSONObject();
JSONObject user = new JSONObject();
try {
user.put("username", params[0]);
user.put("email", params[1]);
user.put("password", params[2]);
user.put("password_confirmation", params[2]);
postData.put("user", user);
} catch (JSONException e) {
Utils.log(e.getMessage());
}
return Utils.httpPost(Utils.API_BASE_URL + "/users", postData.toString());
}
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
progress.setVisibility(View.GONE);
JSONObject userJson = new JSONObject();
try {
userJson = new JSONObject(response);
} catch (JSONException e) {
Utils.log(e.getMessage());
}
User user = new User(userJson);
if (user.isLoggedIn()) {
user.save(getActivity());
TrainTrack app = (TrainTrack) getActivity().getApplication();
app.setUser(user);
updateButtonVisibility(true);
Toast.makeText(getActivity(), "Hello " + user.getUsername(), Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity(), "Could not sign up sorry!", Toast.LENGTH_LONG).show();
Utils.log(userJson.toString());
}
}
}
private void updateButtonVisibility(boolean loggedIn) {
if (loggedIn) {
signUp.setVisibility(View.GONE);
login.setVisibility(View.GONE);
update.setVisibility(View.VISIBLE);
logout.setVisibility(View.VISIBLE);
} else {
signUp.setVisibility(View.VISIBLE);
login.setVisibility(View.VISIBLE);
update.setVisibility(View.GONE);
logout.setVisibility(View.GONE);
}
}
}