package com.quickblox.q_municate.utils;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
import com.quickblox.q_municate_core.utils.ConstsCore;
import com.quickblox.q_municate_db.utils.ErrorUtils;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileUtils {
private static final String TAG = FileUtils.class.getSimpleName();
private static final String folderName = "/Q-municate";
private static final String fileType = ".jpg";
private File filesFolder;
public FileUtils() {
initFilesFolder();
}
private void initFilesFolder() {
filesFolder = new File(Environment.getExternalStorageDirectory() + folderName);
if (!filesFolder.exists()) {
filesFolder.mkdirs();
}
}
public void checkExistsFile(String fileUrlString, Bitmap bitmap) {
Log.d(TAG, "+++ fileUrlString = " + fileUrlString);
if (!TextUtils.isEmpty(fileUrlString)) {
File file = createFileIfNotExist(fileUrlString);
if (!file.exists()) {
saveFile(file, bitmap);
}
}
}
public File createFileIfNotExist(String fileUrlString) {
Uri fileUri = Uri.parse(fileUrlString);
String fileName = fileUri.getLastPathSegment() + fileType;
return new File(filesFolder, fileName);
}
private void saveFile(File file, Bitmap bitmap) {
// starting new Async Task
new SavingFileTask().execute(file, bitmap);
}
private class SavingFileTask extends AsyncTask<Object, String, Object> {
@Override
protected Object doInBackground(Object... objects) {
File file = (File) objects[0];
Bitmap bitmap = (Bitmap) objects[1];
FileOutputStream fileOutputStream;
try {
fileOutputStream = new FileOutputStream(file);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, ConstsCore.ZERO_INT_VALUE, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream.toByteArray();
fileOutputStream.write(byteArray);
fileOutputStream.flush();
fileOutputStream.close();
byteArrayOutputStream.flush();
byteArrayOutputStream.close();
} catch (FileNotFoundException e) {
ErrorUtils.logError(e);
} catch (IOException e) {
ErrorUtils.logError(e);
}
return null;
}
}
}