/* * Copyright (c) 2014. The Trustees of Indiana University. * * This version of the code is licensed under the MPL 2.0 Open Source license with additional * healthcare disclaimer. If the user is an entity intending to commercialize any application * that uses this code in a for-profit venture, please contact the copyright holder. */ package com.muzima.view.forms; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Environment; import android.webkit.JavascriptInterface; import com.muzima.utils.EnDeCrypt; import com.muzima.utils.StringUtils; import com.muzima.utils.imaging.ImageResult; import com.muzima.utils.imaging.ImagingIntent; import java.io.File; import static com.muzima.utils.imaging.ImagingIntent.KEY_IMAGE_CAPTION; import static com.muzima.utils.imaging.ImagingIntent.KEY_IMAGE_PATH; import static com.muzima.utils.imaging.ImagingIntent.KEY_SECTION_NAME; public class ImagingComponent { private final static String TAG = "ImagingComponent"; public static final int REQUEST_CODE = 0x0000c0de; public static final String FORM_UUID = "formUuid"; private final Activity activity; private String imagePathField; private String imageCaptionField; public ImagingComponent(Activity activity) { this.activity = activity; } @JavascriptInterface public void startImageIntent(String sectionName, String imagePathField, String imagePath, String imageCaptionField, String imageCaption, String formUuid) { this.imagePathField = imagePathField; this.imageCaptionField = imageCaptionField; Intent imagingIntent = new Intent(activity.getApplication(), ImagingIntent.class); imagingIntent.putExtra(FORM_UUID, formUuid); imagingIntent.putExtra(KEY_IMAGE_PATH, imagePath); imagingIntent.putExtra(KEY_IMAGE_CAPTION, imageCaption); imagingIntent.putExtra(KEY_SECTION_NAME, sectionName); // at this point the image is encrypted so we decrypt it if (!StringUtils.isEmpty(imagePath)) EnDeCrypt.decrypt(new File(imagePath), "this-is-supposed-to-be-a-secure-key"); activity.startActivityForResult(imagingIntent, REQUEST_CODE); } @JavascriptInterface public void openImage(String imageUri){ if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { Intent startImage = new Intent(Intent.ACTION_VIEW); Uri uri = Uri.parse("file://" + Environment.getExternalStorageDirectory().getPath() + imageUri); startImage.setDataAndType(uri, "image/*"); activity.startActivity(startImage); } } public String getImagePathField() { return imagePathField; } public String getImageCaptionField() { return imageCaptionField; } public static ImageResult parseActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == REQUEST_CODE) { if (resultCode == Activity.RESULT_OK) { String sectionName = intent.getStringExtra(KEY_SECTION_NAME); String imageUri = intent.getStringExtra(KEY_IMAGE_PATH); String imageCaption = intent.getStringExtra(KEY_IMAGE_CAPTION); // now that we have an image we encrypt it and keep the path if (!StringUtils.isEmpty(imageUri)) EnDeCrypt.encrypt(new File(imageUri), "this-is-supposed-to-be-a-secure-key"); return new ImageResult(sectionName, imageUri, imageCaption); } } return null; } }