package io.evercam.androidapp.tasks; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.util.Log; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import io.evercam.androidapp.utils.EvercamFile; public class SaveImageRunnable implements Runnable { private static final String TAG = "SaveImageRunnable"; private Context context; private String thumbnailUrl = ""; private String cameraId; private Bitmap bitmap; public SaveImageRunnable(Context context, String thumbnailUrl, String cameraId) { this.context = context; this.thumbnailUrl = thumbnailUrl; this.cameraId = cameraId; } public SaveImageRunnable(Context context, Bitmap bitmap, String cameraId) { this.context = context; this.bitmap = bitmap; this.cameraId = cameraId; } @Override public void run() { saveImage(); } public void saveImage() { if(bitmap == null && !thumbnailUrl.isEmpty()) { bitmap = requestForBitmapByUrl(); } try { File externalFile = EvercamFile.getExternalFile(context, cameraId); createFile(externalFile, bitmap); // Check the file is saved or not checkFile(externalFile); } catch(IOException e) { Log.e(TAG, "Error saving external file: " + Log.getStackTraceString(e)); } try { File cacheFile = EvercamFile.getCacheFileRelative(context, cameraId); createFile(cacheFile, bitmap); checkFile(cacheFile); } catch(IOException e) { Log.e(TAG, "Error saving cache file: " + Log.getStackTraceString(e)); } } private Bitmap requestForBitmapByUrl() { try { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url(thumbnailUrl).build(); Response response = client.newCall(request).execute(); return BitmapFactory.decodeStream(response.body().byteStream()); } catch(IOException e) { Log.e(TAG, e.getMessage()); return null; } } private static void createFile(File file, Bitmap bitmap) throws IOException { if(bitmap != null) { if(file.exists()) { file.delete(); } file.createNewFile(); FileOutputStream fos = new FileOutputStream(file); bitmap.compress(CompressFormat.PNG, 0, fos); fos.close(); } } private void checkFile(File file) { if(file.exists()) { if(file.length() > 0) { // Valid file exists, do nothing for now. //Log.d(TAG, "Cache file saved: " + cameraId); } else { file.delete(); Log.e(TAG, cameraId + " File Deleted. File was empty."); } } else { Log.e(TAG, "Unable to save image: " + cameraId); } } }