diff --git a/app/src/main/java/com/example/hochi/nextcompanion/AsyncTaskCallbacks.java b/app/src/main/java/com/example/hochi/nextcompanion/AsyncTaskCallbacks.java new file mode 100644 index 0000000..91565da --- /dev/null +++ b/app/src/main/java/com/example/hochi/nextcompanion/AsyncTaskCallbacks.java @@ -0,0 +1,5 @@ +package com.example.hochi.nextcompanion; + +interface AsyncTaskCallbacks { + void onTaskComplete(T result); +} diff --git a/app/src/main/java/com/example/hochi/nextcompanion/LoginActivity.java b/app/src/main/java/com/example/hochi/nextcompanion/LoginActivity.java index 215b72a..d9f95da 100644 --- a/app/src/main/java/com/example/hochi/nextcompanion/LoginActivity.java +++ b/app/src/main/java/com/example/hochi/nextcompanion/LoginActivity.java @@ -3,58 +3,34 @@ package com.example.hochi.nextcompanion; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.annotation.TargetApi; -import android.content.SharedPreferences; -import android.content.pm.PackageManager; -import android.support.annotation.NonNull; -import android.support.design.widget.Snackbar; -import android.support.v7.app.AppCompatActivity; -import android.app.LoaderManager.LoaderCallbacks; -import android.content.CursorLoader; -import android.content.Loader; -import android.database.Cursor; -import android.net.Uri; -import android.os.AsyncTask; +import android.content.SharedPreferences; +import android.support.v7.app.AppCompatActivity; import android.os.Build; import android.os.Bundle; -import android.provider.ContactsContract; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.EditorInfo; -import android.widget.ArrayAdapter; -import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import org.json.JSONObject; -import java.io.BufferedReader; -import java.io.DataOutputStream; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; -import java.net.URL; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.List; - -import static android.Manifest.permission.READ_CONTACTS; /** * A login screen that offers login via email/password. */ -public class LoginActivity extends AppCompatActivity { +public class LoginActivity extends AppCompatActivity implements AsyncTaskCallbacks { /** * Keep track of the login task to ensure we can cancel it if requested. */ - private UserLoginTask mAuthTask = null; + private RequestHandler mAuthTask = null; // UI references. private TextView mPhoneView; @@ -136,7 +112,7 @@ public class LoginActivity extends AppCompatActivity { // Show a progress spinner, and kick off a background task to // perform the user login attempt. showProgress(true); - mAuthTask = new UserLoginTask(email, password); + mAuthTask = new RequestHandler(email, password, this); mAuthTask.execute((Void) null); } } @@ -182,105 +158,26 @@ public class LoginActivity extends AppCompatActivity { } } - /** - * Represents an asynchronous login/registration task used to authenticate - * the user. - */ - public class UserLoginTask extends AsyncTask { - - private final String mPhone; - private final String mPin; - - UserLoginTask(String phone, String pin) { - mPhone = URLEncoder.encode(phone); - mPin = pin; - } - - @Override - protected Boolean doInBackground(Void... params) { - Boolean success = false; - String urlParameters = "apikey=rXXqTgQZUPZ89lzB&mobile=" + mPhone + "&pin=" + mPin; - - HttpURLConnection connection = null; + @Override + public void onTaskComplete(String response) { + if (!response.isEmpty()) { try { - //Create connection - URL url = new URL("https://api.nextbike.net/api/login.json"); - connection = (HttpURLConnection) url.openConnection(); - connection.setRequestMethod("POST"); - connection.setRequestProperty("Content-Type", - "application/x-www-form-urlencoded"); - - connection.setRequestProperty("Content-Length", "" + - Integer.toString(urlParameters.getBytes().length)); - connection.setRequestProperty("Content-Language", "en-US"); - - connection.setUseCaches (false); - connection.setDoInput(true); - connection.setDoOutput(true); - - //Send request - DataOutputStream wr = new DataOutputStream ( - connection.getOutputStream ()); - wr.writeBytes (urlParameters); - wr.flush (); - wr.close (); - - //Get Response - InputStream is = connection.getInputStream(); - BufferedReader rd = new BufferedReader(new InputStreamReader(is)); - String line; - StringBuilder response = new StringBuilder(); - while((line = rd.readLine()) != null) { - response.append(line); - response.append('\r'); - } - rd.close(); - try { - JSONObject jObject = new JSONObject(response.toString()); - JSONObject userObject = jObject.getJSONObject("user"); - String loginkey = userObject.getString("loginkey"); - Log.d("DEBUG", loginkey); - success=true; - SharedPreferences sharedPref = getSharedPreferences("persistence", MODE_PRIVATE); - SharedPreferences.Editor editor = sharedPref.edit(); - editor.putString("loginKey", loginkey); - editor.apply(); - } - catch (Exception e) { - e.printStackTrace(); - success=false; - } - - } catch (Exception e) { - + JSONObject jObject = new JSONObject(response); + JSONObject userObject = jObject.getJSONObject("user"); + String loginkey = userObject.getString("loginkey"); + Log.d("DEBUG", loginkey); + SharedPreferences sharedPref = getSharedPreferences("persistence", MODE_PRIVATE); + SharedPreferences.Editor editor = sharedPref.edit(); + editor.putString("loginKey", loginkey); + editor.apply(); + } + catch (Exception e) { e.printStackTrace(); - - } finally { - - if(connection != null) { - connection.disconnect(); - } } - return success; - } - - @Override - protected void onPostExecute(final Boolean success) { - mAuthTask = null; - showProgress(false); - - if (success) { - finish(); - } else { - mPinView.setError(getString(R.string.error_incorrect_pin)); - mPinView.requestFocus(); - } - } - - @Override - protected void onCancelled() { - mAuthTask = null; - showProgress(false); + finish(); + } else { + mPinView.setError(getString(R.string.error_incorrect_pin)); + mPinView.requestFocus(); } } } diff --git a/app/src/main/java/com/example/hochi/nextcompanion/RequestHandler.java b/app/src/main/java/com/example/hochi/nextcompanion/RequestHandler.java new file mode 100644 index 0000000..8a6583a --- /dev/null +++ b/app/src/main/java/com/example/hochi/nextcompanion/RequestHandler.java @@ -0,0 +1,95 @@ +package com.example.hochi.nextcompanion; + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.AsyncTask; +import android.util.Log; + +import org.json.JSONObject; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; + +public class RequestHandler extends AsyncTask { + + private final String mPhone; + private final String mPin; + private AsyncTaskCallbacks callback; + + RequestHandler(String phone, String pin, AsyncTaskCallbacks act) { + mPhone = URLEncoder.encode(phone); + mPin = pin; + callback = act; + } + + @Override + protected String doInBackground(Void... params) { + StringBuilder response = new StringBuilder(); + String urlParameters = "apikey=rXXqTgQZUPZ89lzB&mobile=" + mPhone + "&pin=" + mPin; + + HttpURLConnection connection = null; + try { + //Create connection + URL url = new URL("https://api.nextbike.net/api/login.json"); + connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", + "application/x-www-form-urlencoded"); + + connection.setRequestProperty("Content-Length", "" + + Integer.toString(urlParameters.getBytes().length)); + connection.setRequestProperty("Content-Language", "en-US"); + + connection.setUseCaches (false); + connection.setDoInput(true); + connection.setDoOutput(true); + + //Send request + DataOutputStream wr = new DataOutputStream ( + connection.getOutputStream ()); + wr.writeBytes (urlParameters); + wr.flush (); + wr.close (); + + //Get Response + InputStream is = connection.getInputStream(); + BufferedReader rd = new BufferedReader(new InputStreamReader(is)); + String line; + while((line = rd.readLine()) != null) { + response.append(line); + response.append('\r'); + } + rd.close(); + + } catch (Exception e) { + + e.printStackTrace(); + + } finally { + + if(connection != null) { + connection.disconnect(); + } + } + return response.toString(); + } + + @Override + protected void onPostExecute(final String response) { + //mAuthTask = null; + //showProgress(false); + callback.onTaskComplete(response); + } + + @Override + protected void onCancelled() { + //mAuthTask = null; + //showProgress(false); + } +} \ No newline at end of file