From 6f498308f0f4d53696b30a481868ec262c45dd40 Mon Sep 17 00:00:00 2001 From: Michael Basil Date: Wed, 30 Nov 2016 20:28:35 +0000 Subject: [PATCH] Restore files deleted in commit 83a0987 --- .../java/com/studioidan/httpagent/HTTP.java | 11 + .../com/studioidan/httpagent/HttpAgent.java | 210 ++++++++++++++++++ .../httpagent/HttpAgentResults.java | 26 +++ .../httpagent/JsonArrayCallback.java | 28 +++ .../studioidan/httpagent/JsonCallback.java | 29 +++ .../studioidan/httpagent/StringCallback.java | 15 ++ .../studioidan/httpagent/SuccessCallback.java | 13 ++ .../main/java/com/studioidan/httpagent/U.java | 85 +++++++ 8 files changed, 417 insertions(+) create mode 100644 httpagent/src/main/java/com/studioidan/httpagent/HTTP.java create mode 100644 httpagent/src/main/java/com/studioidan/httpagent/HttpAgent.java create mode 100644 httpagent/src/main/java/com/studioidan/httpagent/HttpAgentResults.java create mode 100644 httpagent/src/main/java/com/studioidan/httpagent/JsonArrayCallback.java create mode 100644 httpagent/src/main/java/com/studioidan/httpagent/JsonCallback.java create mode 100644 httpagent/src/main/java/com/studioidan/httpagent/StringCallback.java create mode 100644 httpagent/src/main/java/com/studioidan/httpagent/SuccessCallback.java create mode 100644 httpagent/src/main/java/com/studioidan/httpagent/U.java diff --git a/httpagent/src/main/java/com/studioidan/httpagent/HTTP.java b/httpagent/src/main/java/com/studioidan/httpagent/HTTP.java new file mode 100644 index 0000000..c28443c --- /dev/null +++ b/httpagent/src/main/java/com/studioidan/httpagent/HTTP.java @@ -0,0 +1,11 @@ +package com.studioidan.httpagent; + +/** + * Created by PopApp_laptop on 29/05/16. + */ +public class HTTP { + public static String GET = "GET"; + public static String POST = "POST"; + public static String PUT = "PUT"; + public static String DELETE = "DELETE"; +} diff --git a/httpagent/src/main/java/com/studioidan/httpagent/HttpAgent.java b/httpagent/src/main/java/com/studioidan/httpagent/HttpAgent.java new file mode 100644 index 0000000..d5e544f --- /dev/null +++ b/httpagent/src/main/java/com/studioidan/httpagent/HttpAgent.java @@ -0,0 +1,210 @@ +package com.studioidan.httpagent; + +import android.net.Uri; +import android.os.AsyncTask; +import android.util.Log; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileNotFoundException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by PopApp_laptop on 29/05/16. + */ +public class HttpAgent extends AsyncTask { + public static final int DEFAULT_TIMEOUT = 1000 * 10; + public static final String CONTENT_TYPE_APPLICATION_JSON = "application/json"; + public static final String CONTENT_TYPE_URL_ENCODED = "application/x-www-form-urlencoded"; + + public final String TAG = getClass().getName(); + + private String mUrl; + private HttpURLConnection mConnection; + private String mVerb = HTTP.GET; + private Map mQueryParams = new HashMap<>(); + private int mTimeOut = DEFAULT_TIMEOUT; + private String mBody; + private boolean mHasBody = false; + private String mContentType = CONTENT_TYPE_APPLICATION_JSON; + private HttpAgentResults mCallback; + private String mErrorMessage = ""; + private int mResponseCode; + + private HttpAgent(String url, String httpVerb) { + this.mUrl = url; + this.mVerb = httpVerb; + } + + public static HttpAgent get(String url) { + HttpAgent instance = new HttpAgent(url, HTTP.GET); + return instance; + } + + public static HttpAgent post(String url) { + HttpAgent instance = new HttpAgent(url, HTTP.POST); + return instance; + } + + public static HttpAgent put(String url) { + HttpAgent instance = new HttpAgent(url, HTTP.PUT); + return instance; + } + + public static HttpAgent delete(String url) { + HttpAgent instance = new HttpAgent(url, HTTP.DELETE); + return instance; + } + + public HttpAgent queryParams(String... queryParams) { + if (queryParams.length % 2 != 0) { + Log.e(TAG, "query params must be even number"); + return this; + } + for (int i = 0; i < queryParams.length; i += 2) { + mQueryParams.put(queryParams[i], queryParams[i + 1]); + } + return this; + } + + private void setTimeOut(int timeOutInMillis) { + this.mTimeOut = timeOutInMillis; + } + + public HttpAgent contentType(String contentType) { + this.mContentType = contentType; + return this; + } + + public HttpAgent withBody(String body) { + this.mBody = body; + this.mHasBody = !U.isEmpty(mBody); + return this; + } + + public void go(SuccessCallback callback) { + this.mCallback = callback; + this.execute(); + } + + public void goJson(JsonCallback callback) { + this.mCallback = callback; + this.execute(); + } + + public void goJsonArray(JsonArrayCallback callback) { + this.mCallback = callback; + this.execute(); + } + + public void goString(StringCallback callback) { + this.mCallback = callback; + this.execute(); + } + + @Override + protected void onPreExecute() { + + } + + @Override + protected String doInBackground(Void... params) { + try { + String queryParams = createQueryStringForParameters(mQueryParams); + String urlWithParams = mUrl + queryParams; + + mConnection = (HttpURLConnection) (new URL(urlWithParams)).openConnection(); + mConnection.setRequestMethod(mVerb); + mConnection.setReadTimeout(mTimeOut); + mConnection.setDoInput(true); + mConnection.setDoOutput(mHasBody); + mConnection.setRequestProperty("Content-Type", mContentType); + + mConnection.connect(); + Log.d(TAG, "sending request to:\n" + urlWithParams + (mHasBody ? ("\nwith body:\n" + mBody) : "")); + + // write body + if (mHasBody) { + Writer writer = new BufferedWriter(new OutputStreamWriter(mConnection.getOutputStream(), "UTF-8")); + writer.write(mBody); + writer.close(); + } + + //get response code + mResponseCode = mConnection.getResponseCode(); + + // get the results + BufferedReader reader = new BufferedReader(new InputStreamReader(mResponseCode >= 400 ? mConnection.getErrorStream() : mConnection.getInputStream())); + StringBuilder stringBuilder = new StringBuilder(); + String line; + while ((line = reader.readLine()) != null) { + stringBuilder.append(line + "\n"); + } + //check if the server response is an error response + if (mResponseCode >= 400) { + mErrorMessage = stringBuilder.toString(); + return null; + } + + String result = stringBuilder.toString(); + return result; + + } catch (FileNotFoundException e) { + mErrorMessage = e.getMessage(); + + } catch (Exception e) { + if (e.getMessage() != null) { + mErrorMessage = e.getMessage(); + } + + } finally { + if (mConnection != null) + mConnection.disconnect(); + } + return null; + } + + @Override + protected void onPostExecute(String result) { + if (!U.isEmpty(mErrorMessage)) { + if (mCallback != null) { + mCallback.errorMessage = mErrorMessage; + mCallback.notify(null); + } + return; + } + //there is no error message + if (!U.isEmpty(result)) { + Log.d(TAG, "Server Response: " + result); + if (mCallback != null) { + //sets string results + mCallback.stringResults = result; + mCallback.notify(result.trim()); + } + } + } + + public static String createQueryStringForParameters(Map parameters) { + if (parameters == null) { + return ""; + } + + Uri.Builder builder = new Uri.Builder(); + for (String key : parameters.keySet()) { + builder.appendQueryParameter(key, parameters.get(key)); + } + + String query = builder.build().getEncodedQuery(); + if (query == null) query = ""; + //add question mark ata the beginning + if (query.trim().length() > 0) + query = "?" + query; + return query; + } +} diff --git a/httpagent/src/main/java/com/studioidan/httpagent/HttpAgentResults.java b/httpagent/src/main/java/com/studioidan/httpagent/HttpAgentResults.java new file mode 100644 index 0000000..f69ec29 --- /dev/null +++ b/httpagent/src/main/java/com/studioidan/httpagent/HttpAgentResults.java @@ -0,0 +1,26 @@ +package com.studioidan.httpagent; + +public abstract class HttpAgentResults { + /*response code*/ + protected int responseCode; + protected String errorMessage = ""; + protected String stringResults; + + protected String getErrorMessage() { + return errorMessage; + } + + protected boolean hasError() { + return !U.isEmpty(getErrorMessage()); + } + + protected String getStringResults() { + return stringResults; + } + + protected int getResponseCode() { + return responseCode; + } + + protected abstract void notify(String results); +} diff --git a/httpagent/src/main/java/com/studioidan/httpagent/JsonArrayCallback.java b/httpagent/src/main/java/com/studioidan/httpagent/JsonArrayCallback.java new file mode 100644 index 0000000..886f8ae --- /dev/null +++ b/httpagent/src/main/java/com/studioidan/httpagent/JsonArrayCallback.java @@ -0,0 +1,28 @@ +package com.studioidan.httpagent; + +import org.json.JSONArray; + +public abstract class JsonArrayCallback extends HttpAgentResults { + + protected abstract void onDone(boolean success, JSONArray jsonResults); + + @Override + protected void notify(String results) { + if (hasError()) { + onDone(false, null); + return; + } + //there was no error -> lets parse the json array + try { + JSONArray jsonArray = new JSONArray(results); + onDone(!hasError(), jsonArray); + } catch (Exception ex) { + //update the error message (probably parse error...) + errorMessage = ex.getMessage(); + onDone(false, null); + return; + } + + } +} + diff --git a/httpagent/src/main/java/com/studioidan/httpagent/JsonCallback.java b/httpagent/src/main/java/com/studioidan/httpagent/JsonCallback.java new file mode 100644 index 0000000..9c4db33 --- /dev/null +++ b/httpagent/src/main/java/com/studioidan/httpagent/JsonCallback.java @@ -0,0 +1,29 @@ +package com.studioidan.httpagent; + +import org.json.JSONObject; + +/** + * Created by PopApp_laptop on 30/05/16. + */ +public abstract class JsonCallback extends HttpAgentResults { + protected abstract void onDone(boolean success, JSONObject jsonResults); + + @Override + protected void notify(String results) { + if (hasError()) { + onDone(false, null); + return; + } + + //there was no error -> lets parse the json object + try { + JSONObject jsonObject = new JSONObject(results); + onDone(!hasError(), jsonObject); + } catch (Exception ex) { + //update the error message (probably parse error...) + errorMessage = ex.getMessage(); + onDone(false, null); + return; + } + } +} diff --git a/httpagent/src/main/java/com/studioidan/httpagent/StringCallback.java b/httpagent/src/main/java/com/studioidan/httpagent/StringCallback.java new file mode 100644 index 0000000..e21bc26 --- /dev/null +++ b/httpagent/src/main/java/com/studioidan/httpagent/StringCallback.java @@ -0,0 +1,15 @@ +package com.studioidan.httpagent; + +public abstract class StringCallback extends HttpAgentResults { + protected abstract void onDone(boolean success, String stringResults); + + @Override + protected void notify(String results) { + if (hasError()) { + onDone(false, null); + return; + } + //there was no error + onDone(!hasError(), results); + } +} diff --git a/httpagent/src/main/java/com/studioidan/httpagent/SuccessCallback.java b/httpagent/src/main/java/com/studioidan/httpagent/SuccessCallback.java new file mode 100644 index 0000000..56a57ee --- /dev/null +++ b/httpagent/src/main/java/com/studioidan/httpagent/SuccessCallback.java @@ -0,0 +1,13 @@ +package com.studioidan.httpagent; + +/** + * Created by PopApp_laptop on 30/05/16. + */ +public abstract class SuccessCallback extends HttpAgentResults { + protected abstract void onDone(boolean success); + + @Override + protected void notify(String results) { + onDone(!hasError()); + } +} diff --git a/httpagent/src/main/java/com/studioidan/httpagent/U.java b/httpagent/src/main/java/com/studioidan/httpagent/U.java new file mode 100644 index 0000000..5f1887d --- /dev/null +++ b/httpagent/src/main/java/com/studioidan/httpagent/U.java @@ -0,0 +1,85 @@ +package com.studioidan.httpagent; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Point; +import android.view.Display; +import android.widget.EditText; + +import java.util.ArrayList; + +/** + * Created by PopApp_laptop on 02/12/2015. + */ +public class U { + + public static int getScreenHeight(Activity activity) { + Display display = activity.getWindowManager().getDefaultDisplay(); + Point size = new Point(); + display.getSize(size); + //int width = size.x; + int height = size.y; + return height; + } + + public static int getScreenWidth(Activity activity) { + Display display = activity.getWindowManager().getDefaultDisplay(); + Point size = new Point(); + display.getSize(size); + int width = size.x; + //int height = size.y; + return width; + } + + public static boolean isEmpty(String str) { + return str == null || str.trim().length() == 0; + } + + public static boolean isEmpty(EditText editText) { + return editText == null || isEmpty(editText.getText().toString()); + } + + public static boolean isEmpty(EditText... editTexts) { + for (EditText et : editTexts) { + if (isEmpty(et)) + return false; + } + return true; + } + + public static boolean isEmpty(Object[] array) { + return array == null || array.length == 0; + } + + public static boolean isEmpty(ArrayList arrayList) { + return arrayList == null || arrayList.size() == 0; + } + + public static boolean isEmailValid(CharSequence email) { + return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches(); + } + + public static String value(EditText editText) { + return isEmpty(editText) ? "" : editText.getText().toString(); + } + + public static void okDialog(Context context, String title, String message) { + new AlertDialog.Builder(context) + .setTitle(title) + .setMessage(message) + .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + + } + }) + /*.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + // do nothing + } + })*/ + //.setIcon(android.R.drawable.ic_dialog_alert) + .show(); + } +}