diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1ccf3ea..e2fd024 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -10,6 +10,7 @@ + diff --git a/app/src/main/java/com/dinhcv/lifelogpedometer/activity/PedometerActivity.java b/app/src/main/java/com/dinhcv/lifelogpedometer/activity/PedometerActivity.java index c5265d4..536ad17 100644 --- a/app/src/main/java/com/dinhcv/lifelogpedometer/activity/PedometerActivity.java +++ b/app/src/main/java/com/dinhcv/lifelogpedometer/activity/PedometerActivity.java @@ -27,6 +27,7 @@ import android.widget.Toast; import com.dinhcv.lifelogpedometer.R; import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting; +import com.dinhcv.lifelogpedometer.portal.APIResponse; import com.dinhcv.lifelogpedometer.utils.Debug; import com.dinhcv.lifelogpedometer.utils.Utils; @@ -397,6 +398,7 @@ public class PedometerActivity extends ActivityBase { private void logout(){ // clear data Setting.clearUserIdSharepre(PedometerActivity.this); + APIResponse.getInstance().setToken(null); // go to login Intent intent = new Intent(PedometerActivity.this, LoginActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); diff --git a/app/src/main/java/com/dinhcv/lifelogpedometer/activity/RegisterActivity.java b/app/src/main/java/com/dinhcv/lifelogpedometer/activity/RegisterActivity.java index 295857b..9c1f216 100644 --- a/app/src/main/java/com/dinhcv/lifelogpedometer/activity/RegisterActivity.java +++ b/app/src/main/java/com/dinhcv/lifelogpedometer/activity/RegisterActivity.java @@ -323,11 +323,12 @@ public class RegisterActivity extends ActivityBase { } @Override - public void onSuccess(String json) { - if (json != null) { + public void onSuccess(String urlImage) { + if (urlImage != null) { + progressDialog.dismiss(); Debug.warn(" Upload data success success"); - Debug.warn("DATA JSON result: " + json.toString()); - uploadImageDone(json); + Debug.warn("DATA JSON result: " + urlImage); + uploadImageDone(urlImage); } else { progressDialog.dismiss(); Debug.warn(" Upload data fail: response null"); diff --git a/app/src/main/java/com/dinhcv/lifelogpedometer/activity/WelcomeActivity.java b/app/src/main/java/com/dinhcv/lifelogpedometer/activity/WelcomeActivity.java index 3f07a7a..f041a7f 100644 --- a/app/src/main/java/com/dinhcv/lifelogpedometer/activity/WelcomeActivity.java +++ b/app/src/main/java/com/dinhcv/lifelogpedometer/activity/WelcomeActivity.java @@ -116,6 +116,7 @@ public class WelcomeActivity extends ActivityBase implements Runnable { if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if ((ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) && (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) + == PackageManager.PERMISSION_GRANTED)&& (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)) { checkRefreshToken(); @@ -124,16 +125,17 @@ public class WelcomeActivity extends ActivityBase implements Runnable { if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission .ACCESS_COARSE_LOCATION) && ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest + .permission.ACCESS_FINE_LOCATION) && ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest .permission.ACCESS_FINE_LOCATION)) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, - Manifest.permission.ACCESS_FINE_LOCATION}, + Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST); } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, - Manifest.permission.ACCESS_FINE_LOCATION}, + Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSIONS_REQUEST); } } diff --git a/app/src/main/java/com/dinhcv/lifelogpedometer/portal/LLAPIManager.java b/app/src/main/java/com/dinhcv/lifelogpedometer/portal/LLAPIManager.java index e68914d..5be1237 100644 --- a/app/src/main/java/com/dinhcv/lifelogpedometer/portal/LLAPIManager.java +++ b/app/src/main/java/com/dinhcv/lifelogpedometer/portal/LLAPIManager.java @@ -5,9 +5,9 @@ import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; -import android.provider.Settings; -import android.support.annotation.NonNull; +import android.os.Environment; import android.util.Base64; +import android.util.Log; import com.dinhcv.lifelogpedometer.interfaces.LLAPIManagerListener; import com.dinhcv.lifelogpedometer.model.Shareprefer.Setting; @@ -21,9 +21,16 @@ import org.json.JSONException; import org.json.JSONObject; import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.Date; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.TimeUnit; import okhttp3.HttpUrl; @@ -182,55 +189,37 @@ public class LLAPIManager { @Override protected String doInBackground(Void... voids) { - HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_UPLOAD_IMAGE_INFO); - JSONObject jsonObject = new JSONObject(); - byte[] bitmapByte = convertBitmapToByteArray(bitmap); + String baseUrl = URL_ROOT + URL_UPLOAD_IMAGE_INFO; + + Bitmap b = Bitmap.createScaledBitmap(bitmap, 120, 120, false); + byte[] bitmapByte = convertBitmapToByteArray(b); String imageBase64 = Base64.encodeToString(bitmapByte, Base64.DEFAULT); - String imageStr = imageBase64.replace("\n",""); String token = APIResponse.getInstance().getToken(); - try { - if (token != null && !token.isEmpty()) { - Debug.normal("Token is not null"); - jsonObject.put("token", token); - } - jsonObject.put("img", imageStr); - - Debug.warn("Json data: " + jsonObject.toString()); - } catch (JSONException e) { - Debug.normal("Error ", e.getMessage()); + //generate hashMap to store encodedImage and the name + HashMap detail = new HashMap<>(); + detail.put("img", imageBase64); + if (token != null && !token.isEmpty()) { + Debug.normal("Token is not null"); + detail.put("token", token); } - MediaType JSON - = MediaType.parse("application/json; charset=utf-8"); - RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString()); - - final Request.Builder request = new Request.Builder() - .url(baseUrl) - .header("User-Agent", Utils.getCustomUA()) - .header("Content-Type", "application/json") - .post(requestBody); - - OkHttpClient httpClient = new OkHttpClient.Builder() - .readTimeout(30, TimeUnit.SECONDS) - .writeTimeout(30, TimeUnit.SECONDS) - .connectTimeout(30, TimeUnit.SECONDS) - .build(); - String jsonString = null; try { - Response response = httpClient.newCall(request.build()).execute(); + String dataToSend = hashMapToUrl(detail); + + String response = RequestPostImage.post(baseUrl,dataToSend); if (response == null) { action.onError(null); Debug.error("Response is null"); return null; } - jsonString = getResponseData(response.body()); + Debug.normal("Response: "+response); + return response; } catch (IOException e) { Debug.normal("Error %s", e.getMessage()); + return null; } - - return jsonString; } @Override @@ -250,9 +239,9 @@ public class LLAPIManager { try { JSONObject jsonObject = new JSONObject(jsonString); - int status = jsonObject.optInt("status"); - if (status == 1){ - action.onSuccess(new JSONObject()); + int status = jsonObject.optInt("httpCode"); + if (status != 0){ + action.onSuccess(jsonObject.optString("message")); }else { action.onError(new Error(jsonObject.optString("message"))); } @@ -262,6 +251,104 @@ public class LLAPIManager { } } + public static class UploadImage1 extends AsyncTask{ + private Bitmap bitmap; + private LLAPIManagerListener action; + + public UploadImage1(Bitmap bitmap, LLAPIManagerListener action) { + this.bitmap = bitmap; + this.action = action; + } + + @Override + protected void onPreExecute() { + super.onPreExecute(); + } + + @Override + protected String doInBackground(Void... voids) { + HttpUrl baseUrl = HttpUrl.parse(URL_ROOT + URL_UPLOAD_IMAGE_INFO); + JSONObject jsonObject = new JSONObject(); + Bitmap b = Bitmap.createScaledBitmap(bitmap, 120, 120, false); + byte[] bitmapByte = convertBitmapToByteArray(b); + String imageBase64 = Base64.encodeToString(bitmapByte, Base64.DEFAULT); + //String imageStr = imageBase64.replace("\n",""); + //writeToFile(imageBase64); + + String token = APIResponse.getInstance().getToken(); + try { + if (token != null && !token.isEmpty()) { + Debug.normal("Token is not null"); + jsonObject.put("token", token); + } + jsonObject.put("img", imageBase64); + + //Debug.warn("Json data: " + jsonObject.toString()); + } catch (JSONException e) { + Debug.normal("Error ", e.getMessage()); + } + + MediaType JSON + = MediaType.parse("application/json; charset=utf-8"); + RequestBody requestBody = RequestBody.create(JSON, jsonObject.toString()); + + final Request.Builder request = new Request.Builder() + .url(baseUrl) + .header("Content-Type", "application/json") + .post(requestBody); + + OkHttpClient httpClient = new OkHttpClient.Builder() + .readTimeout(30, TimeUnit.SECONDS) + .writeTimeout(30, TimeUnit.SECONDS) + .connectTimeout(30, TimeUnit.SECONDS) + .build(); + String jsonString = null; + try { + Response response = httpClient.newCall(request.build()).execute(); + if (response == null) { + action.onError(null); + Debug.error("Response is null"); + return null; + } + jsonString = getResponseData(response.body()); + + } catch (IOException e) { + Debug.normal("Error %s", e.getMessage()); + } + + return jsonString; + } + + @Override + protected void onCancelled() { + super.onCancelled(); + action.onError(null); + } + + @Override + protected void onPostExecute(String jsonString) { + super.onPostExecute(jsonString); + if ((jsonString == null) || (jsonString.isEmpty())) { + action.onError(null); + return; + } + Debug.normal("String body: "+jsonString); + + try { + JSONObject jsonObject = new JSONObject(jsonString); + int status = jsonObject.optInt("status"); + if (status == 1){ + action.onSuccess(new JSONObject()); + }else { + action.onError(new Error(jsonObject.optString("message"))); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + } + + public static class Register extends AsyncTask{ private RegisterInfo registerInfo; private LLAPIManagerListener action; @@ -285,23 +372,24 @@ public class LLAPIManager { try { jsonObject.put("username", registerInfo.getUsername()); jsonObject.put("password", registerInfo.getPassword()); + jsonObject.put("password_confirmation", registerInfo.getPassword()); jsonObject.put("full_name", registerInfo.getFullName()); - jsonObject.put("nickname", registerInfo.getNickname()); + //jsonObject.put("nickname", registerInfo.getNickname()); jsonObject.put("birthday", Utils.dateToStringFormatDayMonthYear(registerInfo.getBirthday())); jsonObject.put("height", ""+registerInfo.getHeight()); jsonObject.put("weight", ""+registerInfo.getWeight()); jsonObject.put("fat_rate", ""+registerInfo.getFatRate()); jsonObject.put("gender", ""+registerInfo.getGender()); - jsonObject.put("address", registerInfo.getAddress()); - jsonObject.put("desciption", ""); + //jsonObject.put("address", registerInfo.getAddress()); + //jsonObject.put("desciption", ""); jsonObject.put("receive_notification", "0"); //jsonObject.put("phone", "+84986940999"); jsonObject.put("share_data", "1"); jsonObject.put("profile_image", ""+registerInfo.getProfileImage()); - jsonObject.put("delete_flag", "0"); + //jsonObject.put("delete_flag", "0"); jsonObject.put("email", registerInfo.getEmail()); jsonObject.put("physical_activity", "0"); - jsonObject.put("remember_me", "1"); + //jsonObject.put("remember", "1"); Debug.warn("Json data: " + jsonObject.toString()); } catch (JSONException e) { @@ -1190,4 +1278,51 @@ public class LLAPIManager { return unzipString; } + + public static void writeToFile(String data) + { + String path = + Environment.getExternalStorageDirectory() + File.separator + "yourFolder"; + // Create the folder. + File folder = new File(path); + folder.mkdirs(); + + // Create the file. + File file = new File(folder, "config.txt"); + // Save your stream, don't forget to flush() it before closing it. + + try + { + file.createNewFile(); + FileOutputStream fOut = new FileOutputStream(file); + OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut); + myOutWriter.append(data); + + myOutWriter.close(); + + fOut.flush(); + fOut.close(); + } + catch (IOException e) + { + Log.e("Exception", "File write failed: " + e.toString()); + } + } + + private static String hashMapToUrl(HashMap params) throws UnsupportedEncodingException { + StringBuilder result = new StringBuilder(); + boolean first = true; + for(Map.Entry entry : params.entrySet()){ + if (first) + first = false; + else + result.append("&"); + + result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); + result.append("="); + result.append(URLEncoder.encode(entry.getValue(), "UTF-8")); + } + + return result.toString(); + } } diff --git a/app/src/main/java/com/dinhcv/lifelogpedometer/portal/RequestPostImage.java b/app/src/main/java/com/dinhcv/lifelogpedometer/portal/RequestPostImage.java new file mode 100644 index 0000000..9c98a17 --- /dev/null +++ b/app/src/main/java/com/dinhcv/lifelogpedometer/portal/RequestPostImage.java @@ -0,0 +1,73 @@ +package com.dinhcv.lifelogpedometer.portal; + +/** + * Created by Administrator on 25/12/2017. + */ +import android.util.Log; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.net.HttpURLConnection; +import java.net.URL; + +/** + * class to make Http RequestPostImage to the web + */ +public class RequestPostImage { + + private static final String TAG = RequestPostImage.class.getSimpleName(); + + public static String post(String serverUrl,String dataToSend){ + try { + URL url = new URL(serverUrl); + HttpURLConnection con = (HttpURLConnection) url.openConnection(); + //set timeout of 30 seconds + con.setConnectTimeout(1000 * 30); + con.setReadTimeout(1000 * 30); + //method + con.setRequestMethod("POST"); + con.setDoOutput(true); + + OutputStream os = con.getOutputStream(); + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os,"UTF-8")); + + //make request + writer.write(dataToSend); + writer.flush(); + writer.close(); + os.close(); + + //get the response + int responseCode = con.getResponseCode(); + + if(responseCode == HttpURLConnection.HTTP_OK){ + //read the response + StringBuilder sb = new StringBuilder(); + + BufferedReader reader = new BufferedReader( + new InputStreamReader(con.getInputStream())); + String line; + + //loop through the response from the server + while ((line = reader.readLine()) != null){ + sb.append(line).append("\n"); + } + + //return the response + return sb.toString(); + }else{ + Log.e(TAG,"ERROR - Invalid response code from server "+ responseCode); + return null; + } + + } catch (IOException e) { + e.printStackTrace(); + Log.e(TAG,"ERROR "+e); + return null; + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/add_ic.PNG b/app/src/main/res/drawable/add_ic.PNG index a98f62c3e20cdaf896e65c636df20fd428befb3b..79790b343f2abb194160896d8eefd306a4164708 100644 GIT binary patch literal 838 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 LNkvXXu0mjf>%?b* diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml index c10fc54..c29b44c 100644 --- a/app/src/main/res/layout/activity_register.xml +++ b/app/src/main/res/layout/activity_register.xml @@ -4,6 +4,7 @@ android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical" + android:background="@drawable/bg" tools:context="com.dinhcv.lifelogpedometer.activity.LoginActivity"> @@ -19,7 +20,6 @@ android:id="@+id/email_login_form" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@color/background_main" android:orientation="vertical" android:paddingTop="30dp"> @@ -36,7 +36,7 @@ android:layout_height="@dimen/add_img_height" android:src="@drawable/add_ic" app:civ_border_width="2dp" - app:civ_border_color="#FF000000"/> + app:civ_border_color="#FFFFFF"/>