package com.quickblox.sample.core.utils;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import com.quickblox.sample.core.CoreApp;
import com.quickblox.sample.core.R;
import com.quickblox.sample.core.utils.constant.MimeType;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ImageUtils {
public static final int GALLERY_REQUEST_CODE = 183;
public static final int CAMERA_REQUEST_CODE = 212;
private static final String CAMERA_FILE_NAME_PREFIX = "CAMERA_";
private ImageUtils() {}
public static String saveUriToFile(Uri uri) throws Exception {
ParcelFileDescriptor parcelFileDescriptor = CoreApp.getInstance().getContentResolver().openFileDescriptor(uri, "r");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
InputStream inputStream = new FileInputStream(fileDescriptor);
BufferedInputStream bis = new BufferedInputStream(inputStream);
File parentDir = StorageUtils.getAppExternalDataDirectoryFile();
String fileName = String.valueOf(System.currentTimeMillis()) + ".jpg";
File resultFile = new File(parentDir, fileName);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(resultFile));
byte[] buf = new byte[2048];
int length;
try {
while ((length = bis.read(buf)) > 0) {
bos.write(buf, 0, length);
}
} catch (Exception e) {
throw new IOException("Can\'t save Storage API bitmap to a file!", e);
} finally {
parcelFileDescriptor.close();
bis.close();
bos.close();
}
return resultFile.getAbsolutePath();
}
public static void startImagePicker(Activity activity) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(MimeType.IMAGE_MIME);
activity.startActivityForResult(Intent.createChooser(intent, activity.getString(R.string.dlg_choose_image_from)), GALLERY_REQUEST_CODE);
}
public static void startImagePicker(Fragment fragment) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(MimeType.IMAGE_MIME);
fragment.startActivityForResult(Intent.createChooser(intent, fragment.getString(R.string.dlg_choose_image_from)), GALLERY_REQUEST_CODE);
}
public static void startCameraForResult(Activity activity) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(activity.getPackageManager()) == null) {
return;
}
File photoFile = getTemporaryCameraFile();
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
activity.startActivityForResult(intent, CAMERA_REQUEST_CODE);
}
public static void startCameraForResult(Fragment fragment) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(CoreApp.getInstance().getPackageManager()) == null) {
return;
}
File photoFile = getTemporaryCameraFile();
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
fragment.startActivityForResult(intent, CAMERA_REQUEST_CODE);
}
public static File getTemporaryCameraFile() {
File storageDir = StorageUtils.getAppExternalDataDirectoryFile();
File file = new File(storageDir, getTemporaryCameraFileName());
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
return file;
}
public static File getLastUsedCameraFile() {
File dataDir = StorageUtils.getAppExternalDataDirectoryFile();
File[] files = dataDir.listFiles();
List<File> filteredFiles = new ArrayList<>();
for (File file : files) {
if (file.getName().startsWith(CAMERA_FILE_NAME_PREFIX)) {
filteredFiles.add(file);
}
}
Collections.sort(filteredFiles);
if (!filteredFiles.isEmpty()) {
return filteredFiles.get(filteredFiles.size() - 1);
} else {
return null;
}
}
private static String getTemporaryCameraFileName() {
return CAMERA_FILE_NAME_PREFIX + System.currentTimeMillis() + ".jpg";
}
}