package com.kaorisan.manager; import java.io.File; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.os.AsyncTask; import android.util.Log; import com.kaorisan.beans.Attachment; import com.kaorisan.beans.AttachmentTmp; import com.kaorisan.beans.Audio; import com.kaorisan.beans.Picture; import com.kaorisan.beans.RecommendTask; import com.kaorisan.beans.Reply; import com.kaorisan.beans.Task; import com.kaorisan.common.DebugLog; import com.kaorisan.common.Utils; import com.kaorisan.dataLayer.CacheData; import com.kaorisan.service.NetworkService; public class TaskManager { public int numberOfUploadSucess = 0; public int numberOfUploadFail = 0; public int totalNumber = 0; public interface OnPostPushToken { void onPostPushTokenMethod(boolean isSuccess, String message); } OnPostPushToken callbackOnPostPushToken = null; public interface OnGetTaskRecommend { void onGetTaskRecommend(boolean isSuccess, ArrayList<RecommendTask> listRecommendTask, String message); } OnGetTaskRecommend callbackOnGetTaskRecommend = null; public interface OnGetListTaskResult { void onGetListTaskResultMethod(boolean isSuccess, List<Task> listTask, String message); } OnGetListTaskResult callbackOnGetTaskResult = null; public interface OnUploadPhotoToTaskResult { void onUploadPhotoToTaskMethod(boolean isSuccess, String message); } OnUploadPhotoToTaskResult callbackOnUploadPhotoToTaskResult = null; public interface OnGetRequestResult { void onGetRequestResultMethod(boolean isSuccess, Task task, String message); } OnGetRequestResult callbackOnGetRequestResult = null; public interface OnGetRateTaskResult { void onGetRateTaskMethod(boolean isSuccess, String message); } OnGetRateTaskResult callbackOnGetRateTaskResult = null; public interface OnCreateNewTaskResult { void onCreateNewTaskMethod(boolean isSuccess, Task task, String message); } OnCreateNewTaskResult callbackOnCreateNewTaskResult = null; public interface OnCreateNewRepLyResult { void onCreateNewRepLyMethod(boolean isSuccess, String message); } public void getTaskRecommend(final String token, final String count, OnGetTaskRecommend onGetTaskRecommend) { callbackOnGetTaskRecommend = onGetTaskRecommend; final NetworkService service = new NetworkService(); new AsyncTask<String, Integer, ArrayList<RecommendTask>>() { @Override protected ArrayList<RecommendTask> doInBackground(String... params) { RecommendTask recommendTask = null; ArrayList<RecommendTask> listRecommendTask = new ArrayList<RecommendTask>(); try { JSONArray jsonResult = service.getRecommendTasks(token, count); JSONObject tmpObject = null; for (int i = 0; i < jsonResult.length(); i++) { recommendTask = new RecommendTask(); tmpObject = jsonResult.getJSONObject(i); if (tmpObject.has("title")) { recommendTask.setTitle(tmpObject.getString("title")); } if (tmpObject.has("request")) { recommendTask.setRequestContent(tmpObject.getString("request")); } listRecommendTask.add(recommendTask); } return listRecommendTask; } catch (Exception exception) { DebugLog.loge("Get recommend task exeption: " + exception.getMessage()); } return null; } @Override protected void onPostExecute( ArrayList<RecommendTask> listRecommendTask) { super.onPostExecute(listRecommendTask); try { if (listRecommendTask != null) { callbackOnGetTaskRecommend.onGetTaskRecommend(true, listRecommendTask, null); } else { callbackOnGetTaskRecommend.onGetTaskRecommend(false, new ArrayList<RecommendTask>(), "Network is unreachable"); } } catch (Exception exception) { DebugLog.loge("Get recommend task exception: " + exception.getMessage()); } }; }.execute(token, count); } public void postPushToken(String token, String platform, String pushToken, OnPostPushToken onPostPushToken) { callbackOnPostPushToken = onPostPushToken; final NetworkService service = new NetworkService(); new AsyncTask<String, String, JSONObject>() { @Override protected JSONObject doInBackground(String... params) { DebugLog.logd(params[0] + " " + params[1] + " " + params[2]); return service.pushToken(params[0], params[1], params[2]); } @Override protected void onPostExecute(JSONObject result) { super.onPostExecute(result); if (result != null) { if (!result.has("message")) { try { DebugLog.logd("Status: " + result.getString("status")); callbackOnPostPushToken.onPostPushTokenMethod(true, null); } catch (JSONException e) { DebugLog.loge("Post pushToken error: " + e.getMessage()); } } else { callbackOnPostPushToken.onPostPushTokenMethod(false, null); } } else { DebugLog.logd("result is null"); callbackOnPostPushToken.onPostPushTokenMethod(false, null); } } }.execute(token, platform, pushToken); } OnCreateNewRepLyResult callbackOnCreateNewRepLyResult = null; public void getListTask(String token, String page, String count, final OnGetListTaskResult onGetListTaskResult) { callbackOnGetTaskResult = onGetListTaskResult; final NetworkService service = new NetworkService(); new AsyncTask<String, String, ArrayList<Task>>() { @Override protected ArrayList<Task> doInBackground(String... params) { JSONArray jsonResult = service.getListTask(params[0], params[1], params[2]); JSONObject tmpObject; Task task = null; ArrayList<Task> listTask = new ArrayList<Task>(); try { for (int i = 0; i < jsonResult.length(); i++) { task = new Task(); tmpObject = jsonResult.getJSONObject(i); Log.i("ID", "" + tmpObject.getInt("id")); if (tmpObject.has("id")) { task.setId(tmpObject.getInt("id")); } if (tmpObject.has("title")) { task.setTitle(tmpObject.getString("title")); } if (tmpObject.has("workflow_state")) { task.setWorkflowState(tmpObject.getString("workflow_state")); } if (tmpObject.has("replies_count")) { task.setRepliesCount(tmpObject.getInt("replies_count")); } if (tmpObject.has("created_at")) { task.setCreatedAt(tmpObject.getString("created_at")); } if (tmpObject.has("updated_at")) { task.setUpdateAt(tmpObject.getString("updated_at")); } if (tmpObject.has("completed_at")) { task.setCompletedAt(tmpObject.getString("completed_at")); } listTask.add(task); } return listTask; } catch (Exception e) { DebugLog.logd(e.getMessage()); } return null; } protected void onPostExecute(ArrayList<Task> listTask) { if (listTask != null) { callbackOnGetTaskResult.onGetListTaskResultMethod(true, listTask, null); } else { callbackOnGetTaskResult.onGetListTaskResultMethod(false, new ArrayList<Task>(), "Network is unreachable"); } } }.execute(token, page, count); } public void uploadPhotoToTask(String token, String imagePath, String id, final AttachmentTmp attachmentTmp, OnUploadPhotoToTaskResult onUploadPhotoToTaskResult) { final NetworkService service = new NetworkService(); callbackOnUploadPhotoToTaskResult = onUploadPhotoToTaskResult; new AsyncTask<String, String, JSONObject>() { @Override protected JSONObject doInBackground(String... params) { return service.uploadPhotoToTask(params[0], new File(params[1]), params[2]); } protected void onPostExecute(JSONObject result) { // if(result != null){ // DebugLog.logd("Result upload " + result.toString()); // callbackOnUploadPhotoToTaskResult.onUploadPhotoToTaskMethod(true); // } // callbackOnUploadPhotoToTaskResult.onUploadPhotoToTaskMethod(false); if (result == null) { DebugLog.logd("Result return null"); if (CacheData.getInstant().getCurrentProgressDialog() != null) { CacheData.getInstant().getCurrentProgressDialog().dismiss(); CacheData.getInstant().setCurrentProgressDialog(null); } numberOfUploadFail++; callbackOnUploadPhotoToTaskResult.onUploadPhotoToTaskMethod(false, "Upload failed!"); } else { if (result.has("status")) { DebugLog.logd("Result upload " + result.toString()); numberOfUploadFail++; callbackOnUploadPhotoToTaskResult.onUploadPhotoToTaskMethod(false, null); } else { numberOfUploadSucess++; // Picture picture = new Picture(); // picture.setFileName(attachment.getFileName()); // picture.setFilePath(attachment.getFilePath()); // CacheData.getInstant().getCurrentTask().getLiPictures() // .add(picture); for (int i = CacheData.getInstant().getListAttachment().size() - 1; i >= 0; i--) { if (CacheData.getInstant().getListAttachment().get(i).getFilePath().equals(attachmentTmp.getFilePath())) { CacheData.getInstant().getListAttachment().get(i).setIsLocal(2); break; } } if(attachmentTmp.isCamera() == false && attachmentTmp.getIsLocal() == 1 && attachmentTmp.isResize() == true){ Utils.deleteFile(attachmentTmp.getFilePath()); } CacheData.getInstant().getListAttachmentTmps().remove(attachmentTmp); callbackOnUploadPhotoToTaskResult.onUploadPhotoToTaskMethod(true, null); DebugLog.logd("Result upload " + result.toString()); } } } }.execute(token, imagePath, id); } public void uploadAudioToTask(String token, String audioPath, String id, final Attachment attachment, OnUploadPhotoToTaskResult onUploadPhotoToTaskResult) { final NetworkService service = new NetworkService(); callbackOnUploadPhotoToTaskResult = onUploadPhotoToTaskResult; new AsyncTask<String, String, JSONObject>() { @Override protected JSONObject doInBackground(String... params) { return service.uploadAudioToTask(params[0], params[1], new File(params[2])); } protected void onPostExecute(JSONObject result) { if (result != null) { if (result.has("status")) { callbackOnUploadPhotoToTaskResult.onUploadPhotoToTaskMethod(false, null); } else { callbackOnUploadPhotoToTaskResult.onUploadPhotoToTaskMethod(true, null); DebugLog.logd("Result upload " + result.toString()); } } } }.execute(token, id, audioPath); } public void getTaskDetail(String id, String token, OnGetRequestResult onGetRequestResult) { callbackOnGetRequestResult = onGetRequestResult; final NetworkService service = new NetworkService(); new AsyncTask<String, String, Task>() { @Override protected Task doInBackground(String... params) { JSONObject jsonResult = service.getTaskDetail(params[0], params[1]); JSONObject tmpObject; Task task; ArrayList<Reply> listReply = new ArrayList<Reply>(); ArrayList<Picture> listPictures = new ArrayList<Picture>(); ArrayList<Audio> listAudios = new ArrayList<Audio>(); ArrayList<Attachment> listAttachment = new ArrayList<Attachment>(); Attachment attachment; Reply reply; Picture picture; Audio audio; try { if (jsonResult != null) { if (!jsonResult.has("status")) { task = new Task(); if (jsonResult.has("id")) { task.setId(jsonResult.getInt("id")); } if (jsonResult.has("title")) { task.setTitle(jsonResult.getString("title")); } if (jsonResult.has("request")) { task.setRequest(jsonResult.getString("request")); } if (jsonResult.has("replies_count")) { task.setRepliesCount(jsonResult.getInt("replies_count")); } if (jsonResult.has("workflow_state")) { task.setWorkflowState(jsonResult.getString("workflow_state")); } if (jsonResult.has("created_at")) { task.setCreatedAt(jsonResult.getString("created_at")); } if (jsonResult.has("completed_at")) { task.setCompletedAt(jsonResult.getString("completed_at")); } if (jsonResult.has("rateable")) { task.setRated(jsonResult.getBoolean("rateable")); } JSONArray jsonListReplies = jsonResult.getJSONArray("replies"); for (int i = 0; i < jsonListReplies.length(); i++) { reply = new Reply(); tmpObject = jsonListReplies.getJSONObject(i); if (tmpObject.has("id")) { reply.setId(tmpObject.getInt("id")); } if (tmpObject.has("body")) { reply.setBody(tmpObject.getString("body")); // ArrayList<String> listString = new // ArrayList<String>(); // listString.add(tmpObject.getString("body")); // reply.setArrayChildren(listString); } if (tmpObject.has("created_at")) { reply.setCreatedAt(tmpObject.getString("created_at")); } if (tmpObject.has("is_assistant")) { reply.setAssistant(tmpObject.getBoolean("is_assistant")); } listReply.add(reply); } task.setListReply(listReply); task.setLiPictures(listPictures); JSONArray jsonListAudios = jsonResult.getJSONArray("audios"); for (int i = 0; i < jsonListAudios.length(); i++) { audio = new Audio(); attachment = new Attachment(); attachment.setTmp(0); attachment.setType("audio"); attachment.setCamera(false); attachment.setResize(false); tmpObject = jsonListAudios.getJSONObject(i); if (tmpObject.has("id")) { audio.setId(tmpObject.getInt("id")); attachment.setId(tmpObject.getInt("id")); } if (tmpObject.has("url")) { audio.setFilePath(tmpObject.getString("url")); audio.setFileName(tmpObject.getString("url").substring(tmpObject.getString("url").lastIndexOf('/') + 1, tmpObject.getString("url").length())); attachment.setFilePath(tmpObject.getString("url")); attachment.setFileName(tmpObject.getString("url").substring(tmpObject.getString("url").lastIndexOf('/') + 1, tmpObject.getString("url").length())); } if (tmpObject.has("created_at")) { audio.setCreateAt(tmpObject.getString("created_at")); attachment.setCreateAt(tmpObject.getString("created_at")); } listAudios.add(audio); listAttachment.add(attachment); } task.setListAudios(listAudios); JSONArray jsonListPictures = jsonResult.getJSONArray("pictures"); for (int i = 0; i < jsonListPictures.length(); i++) { picture = new Picture(); attachment = new Attachment(); attachment.setType("image"); attachment.setCamera(false); attachment.setResize(false); tmpObject = jsonListPictures.getJSONObject(i); if (tmpObject.has("id")) { picture.setId(tmpObject.getInt("id")); attachment.setId(tmpObject.getInt("id")); } if (tmpObject.has("url")) { picture.setFilePath(tmpObject.getString("url")); picture.setFileName(tmpObject.getString("url").substring(tmpObject.getString("url").lastIndexOf('/') + 1, tmpObject.getString("url").length())); attachment.setFilePath(tmpObject.getString("url")); attachment.setFileName(tmpObject.getString("url").substring(tmpObject.getString("url") .lastIndexOf('/') + 1, tmpObject.getString("url").length())); } if (tmpObject.has("created_at")) { picture.setCreateAt(tmpObject.getString("created_at")); attachment.setCreateAt(tmpObject.getString("created_at")); } listPictures.add(picture); listAttachment.add(attachment); } CacheData.getInstant().setListAttachment(listAttachment); // task.setListAttachments(listAttachment); return task; } else { return null; } } return null; } catch (JSONException e) { DebugLog.logd(e.getMessage()); } return null; } protected void onPostExecute(Task task) { if (task != null) { callbackOnGetRequestResult.onGetRequestResultMethod(true, task, null); } else { callbackOnGetRequestResult.onGetRequestResultMethod(false, new Task(), "Server crashed"); } } }.execute(id, token); } public void rateTask(String token, String id, String rate, OnGetRateTaskResult onGetRateTaskResult) { callbackOnGetRateTaskResult = onGetRateTaskResult; final NetworkService service = new NetworkService(); new AsyncTask<String, String, JSONObject>() { @Override protected JSONObject doInBackground(String... params) { return service.rateTask(params[0], params[1], params[2]); } protected void onPostExecute(JSONObject result) { try { if (result == null) { callbackOnGetRateTaskResult.onGetRateTaskMethod(false, "Network is unreachable"); } else { if (!result.has("message")) { callbackOnGetRateTaskResult.onGetRateTaskMethod(true, null); } else { String message = result.getString("message"); callbackOnGetRateTaskResult.onGetRateTaskMethod(false, message); } } } catch (JSONException e) { DebugLog.logd(e.getMessage()); } } }.execute(token, id, rate); } public void createNewTask(String token, String title, String request,String isVip,OnCreateNewTaskResult onCreateNewTaskResult) { callbackOnCreateNewTaskResult = onCreateNewTaskResult; final NetworkService service = new NetworkService(); new AsyncTask<String, String, Task>() { @Override protected Task doInBackground(String... params) { JSONObject jsonResult = service.createTask(params[0], params[1], params[2],params[3]); Task task; try { if (jsonResult != null) { if (!jsonResult.has("status")) { task = new Task(); if (jsonResult.has("id")) { task.setId(jsonResult.getInt("id")); } if (jsonResult.has("title")) { task.setTitle(jsonResult.getString("title")); } if (jsonResult.has("request")) { task.setRequest(jsonResult.getString("request")); } if (jsonResult.has("replies_count")) { task.setRepliesCount(jsonResult.getInt("replies_count")); } if (jsonResult.has("workflow_state")) { task.setWorkflowState(jsonResult.getString("workflow_state")); } if (jsonResult.has("created_at")) { task.setCreatedAt(jsonResult.getString("created_at")); } return task; } else { return null; } } else { return null; } } catch (JSONException e) { DebugLog.logd(e.getMessage()); } return null; } protected void onPostExecute(Task task) { if (task != null) { callbackOnCreateNewTaskResult.onCreateNewTaskMethod(true, task, null); } else { callbackOnCreateNewTaskResult.onCreateNewTaskMethod(false, null, null); } } }.execute(token, title, request,isVip); } public void creatNewRepLy(String token, String body, String id, OnCreateNewRepLyResult onCreateNewRepLyResult) { callbackOnCreateNewRepLyResult = onCreateNewRepLyResult; final NetworkService service = new NetworkService(); new AsyncTask<String, String, JSONObject>() { @Override protected JSONObject doInBackground(String... params) { return service.createNewRepLy(params[0], params[1], params[2]); } protected void onPostExecute(JSONObject result) { try { if (result != null) { if (result.has("status")) { callbackOnCreateNewRepLyResult.onCreateNewRepLyMethod(false, result.getString("message")); } else { callbackOnCreateNewRepLyResult.onCreateNewRepLyMethod(true, null); } } else { callbackOnCreateNewRepLyResult.onCreateNewRepLyMethod(false, "Network is unreachable"); } } catch (JSONException e) { DebugLog.logd(e.getMessage()); } } }.execute(token, body, id); } }