package org.adaptlab.chpir.android.survey.Models; import java.io.ByteArrayOutputStream; import java.io.Serializable; import java.util.List; import org.adaptlab.chpir.android.activerecordcloudsync.SendModel; import org.adaptlab.chpir.android.survey.AppUtil; import org.json.JSONException; import org.json.JSONObject; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.Base64; import android.util.Log; import com.activeandroid.annotation.Column; import com.activeandroid.annotation.Table; import com.activeandroid.query.Select; @Table(name = "ResponsePhotos") public class ResponsePhoto extends SendModel implements Serializable { private static final long serialVersionUID = 1L; private static final String TAG = "ResponsePhoto"; @Column(name = "SentToRemote") private boolean mSent; @Column(name = "Response", onDelete = Column.ForeignKeyAction.SET_NULL) private Response mResponse; @Column(name = "PicturePath") private String mPicturePath; @Column(name = "CameraOrientation") private Integer mCameraOrientation; @Column(name = "Camera") private Integer mCamera; public ResponsePhoto() { super(); mSent = false; } @Override public JSONObject toJSON() { JSONObject json = new JSONObject(); try { JSONObject jsonObject = new JSONObject(); jsonObject.put("response_uuid", getResponse().getUUID()); jsonObject.put("picture_data", getEncodedImage()); json.put("response_image", jsonObject); } catch (JSONException je) { Log.e(TAG, "JSON exception", je); } return json; } public String getEncodedImage() { String encodedImage = ""; if (getPicturePath() != null && getPicturePath() != "") { String filepath = AppUtil.getContext().getFileStreamPath(getPicturePath()).getAbsolutePath(); Bitmap bitmap = BitmapFactory.decodeFile(filepath); encodedImage = encodeImage(bitmap); } else { encodedImage = null; } return encodedImage; } private String encodeImage(Bitmap bitmap) { String encodedImage; ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); byte[] pictureBytes = outputStream.toByteArray(); encodedImage = Base64.encodeToString(pictureBytes, Base64.DEFAULT); return encodedImage; } @Override public boolean isSent() { return mSent; } @Override public boolean readyToSend() { if (getResponse() == null) { if (getEncodedImage() == null) { return false; } else { return true; } } else { return getResponse().getSurvey().readyToSend(); } } @Override public boolean isPersistent() { return true; } public void setResponse(Response response) { mResponse = response; } public Response getResponse() { return mResponse; } public void setPicturePath(String path) { mPicturePath = path; } public String getPicturePath() { return mPicturePath; } @Override public void setAsSent(Context context) { mSent = true; this.delete(); if (AppUtil.DEBUG) Log.d(TAG, getAll().size() + " response photos left on device"); } public static List<ResponsePhoto> getAll() { return new Select().from(ResponsePhoto.class).orderBy("Id ASC").execute(); } public void setCameraOrientation(int orientation) { mCameraOrientation = orientation; } public int getCameraOrientation() { return mCameraOrientation; } public void setCamera(int camera) { mCamera = camera; } public int getCamera() { return mCamera; } }