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.LoginFragment;
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 LoginTask extends AsyncTask<String, Void, Void> {
private final LoginFragment loginFragment;
private String resMessage;
private final Context mContext;
private ProgressDialog progressBar;
public LoginTask(LoginFragment loginFragment, Context context) {
this.loginFragment = loginFragment;
this.mContext = context;
resMessage = null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progressBar = new ProgressDialog(mContext);
progressBar.setMessage(loginFragment.getString(R.string.connecting_server));
progressBar.setIndeterminate(true);
progressBar.setCancelable(true);
progressBar.show();
}
@Override
protected Void doInBackground(String[] params) {
URL url;
HttpURLConnection connection;
try {
url = new URL(EcoMapAPIContract.ECOMAP_API_URL + "/login");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
connection.setDoOutput(true);
connection.connect();
//validation
if (MainActivity.isEmailValid(params[0]) && (!params[1].isEmpty())) {
//creating JSONObject for request
JSONObject request = new JSONObject();
request.put("email", params[0]);
request.put("password", params[1]);
//sending request
connection.getOutputStream().write(request.toString().getBytes("UTF-8"));
//handling result from server
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[0], params[1], data.get("user_roles").toString(),
data.get("user_id").toString(), set);
MainActivity.setUserId(MainActivity.cookieManager.getCookieStore().getCookies().toString());
String fileNamePref = loginFragment.getResources().getString(R.string.fileNamePreferences);
User.getInstance(data.get("first_name").toString(), data.get("last_name").toString(),
params[0], params[1], 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();
}
}
connection.disconnect();
return null;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void v) {
super.onPostExecute(v);
MainActivity.changeAuthorizationState();
progressBar.dismiss();
loginFragment.dismiss();
Toast.makeText(mContext, resMessage, Toast.LENGTH_LONG).show();
((MainActivity) mContext).invalidateOptionsMenu();
}
}