package org.ecomap.android.app.tasks;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.Toast;
import org.ecomap.android.app.R;
import org.ecomap.android.app.User;
import org.ecomap.android.app.activities.MainActivity;
import org.ecomap.android.app.fragments.RegistrationFragment;
import org.ecomap.android.app.sync.EcoMapAPIContract;
import org.ecomap.android.app.utils.SharedPreferencesHelper;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Set;
public class RegisterTask extends AsyncTask<String, Void, Void> {
private final RegistrationFragment registrationFragment;
private final Context mContext;
private String resMessage;
private ProgressDialog progressBar;
public RegisterTask(RegistrationFragment registrationFragment, Context context) {
this.registrationFragment = registrationFragment;
this.mContext = context;
resMessage = null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progressBar = new ProgressDialog(mContext);
progressBar.setMessage(registrationFragment.getString(R.string.connecting_server));
progressBar.setIndeterminate(true);
progressBar.setCancelable(true);
progressBar.show();
}
@Override
protected Void doInBackground(String[] params) {
URL url;
HttpURLConnection connection = null;
try {
url = new URL(EcoMapAPIContract.ECOMAP_API_URL + "/register");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
connection.setDoOutput(true);
connection.connect();
//validation step
if (!params[0].isEmpty() && !params[1].isEmpty()
&& !params[3].isEmpty() &&
params[3].equals(params[4])
&& MainActivity.isEmailValid(params[2])) {
JSONObject request = new JSONObject();
request.put("first_name", params[0]);
request.put("last_name", params[1]);
request.put("email", params[2]);
request.put("password", params[3]);
//sending request to server
connection.getOutputStream().write(request.toString().getBytes("UTF-8"));
//handling response
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
StringBuilder responseBody = new StringBuilder();
BufferedReader reader = new BufferedReader
(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
responseBody.append(line).append("\n");
}
reader.close();
JSONObject data = new JSONObject(responseBody.toString());
Set<String> set = User.getSetFromJSONArray(data.getJSONArray("user_perms"));
SharedPreferencesHelper.onLogInSavePref(mContext, data.get("first_name").toString(),
data.get("last_name").toString(),
params[2], params[3], data.get("user_roles").toString(), data.get("user_id").toString(),
set);
MainActivity.setUserId(MainActivity.cookieManager.getCookieStore().getCookies().toString());
String fileNamePref = registrationFragment.getResources().getString(R.string.fileNamePreferences);
User.getInstance(data.get("first_name").toString(), data.get("last_name").toString(),
params[2], params[3], data.get("user_roles").toString(), data.get("user_id").toString(),
set);
resMessage = "Hello " + SharedPreferencesHelper.getStringPref(mContext, fileNamePref, MainActivity.FIRST_NAME_KEY, "")
+ " " + SharedPreferencesHelper.getStringPref(mContext, fileNamePref, MainActivity.LAST_NAME_KEY, "") + "!";
} else {
StringBuilder responseBody = new StringBuilder();
BufferedReader reader
= new BufferedReader(new InputStreamReader(connection.getErrorStream()));
String line;
while ((line = reader.readLine()) != null) {
responseBody.append(line).append("\n");
}
reader.close();
JSONObject data = new JSONObject(responseBody.toString());
resMessage = data.get("message").toString();
}
}
if(!params[3].equals(params[4])){
resMessage=mContext.getApplicationContext().getResources().getString(R.string.password_doesnt_match);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}
return null;
}
@Override
protected void onPostExecute(Void v) {
super.onPostExecute(v);
progressBar.dismiss();
Toast.makeText(mContext, resMessage, Toast.LENGTH_SHORT).show();
if (MainActivity.isUserIsAuthorized()) {
registrationFragment.dismiss();
}
}
}