Skip to content

Commit

Permalink
Merge pull request #36 from gzeinnumer/open-pull
Browse files Browse the repository at this point in the history
Open pull
  • Loading branch information
gzeinnumer authored Jan 1, 2021
2 parents 53e28ff + 2708f9d commit 240f114
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 39 deletions.
17 changes: 10 additions & 7 deletions README_6.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ This library need Permission you can use this step [**MultiPermission**](https:/
| Name | Return | Parameter | Description |
|:----------------------------|:----------|:--------------------------------------------------------------------------------------|:---------------------------------------|
| `initFileImageFromInternet` | `boolean` | `Deprecated` `String imgUrl, String saveTo, String filename, ImageView sendImageTo, boolean isNew` | To download image and save to external |
| `initFileImageFromInternet` | `boolean` | `String imgUrl, String saveTo, String filename, boolean isNew, CallBack callBack` | To download image and save to external |
| `initFileImageFromInternet` | `boolean` | `Context context, String imgUrl, String saveTo, String filename, ImageView sendImageTo, boolean isNew` | To download image and save to external |
| `initFileImageFromInternet` | `boolean` | `Context context, String imgUrl, String saveTo, String filename, boolean isNew, CallBack callBack` | To download image and save to external |

---
### Step 1. Enable Fitur.
Expand Down Expand Up @@ -126,22 +126,25 @@ public class MainActivity extends AppCompatActivity {
// imgUrl = "https://helpx.adobe.com/content/dam/help/en/stock/how-to/visual-reverse-image-search/jcr_content/main-pars/image/visual-reverse-image-search-v2_intro.jpg";
// String fileName = imgUrl.substring(url.lastIndexOf('/') + 1, url.length());


boolean overwriteExistingFiles = true;

//pilih 1 atau 2
//1. jika isNew true maka file lama akan dihapus dan diganti dengan yang baru.
FGFile.initFileImageFromInternet(imgUrl, saveTo, fileName, overwriteExistingFiles, new FGFile.ImageLoadCallBack() {
FGFile.initFileImageFromInternet(getApplicationContext(), imgUrl, saveTo, fileName, overwriteExistingFiles, new FGFile.ImageLoadCallBack() {
@Override
public void onBitmapReturn(Bitmap bitmap) {
public void onBitmapReturn(Bitmap bitmap, String path, String msg) {
imageView.setImageBitmap(bitmap);
Log.d(TAG, "onBitmapReturn: "+path);
Log.d(TAG, "onBitmapReturn: "+msg);
}
});
//2. jika isNew false maka akan otomatis load file dan disimpan, tapi jika file belum ada, maka akan tetap didownload.
FGFile.initFileImageFromInternet(imgUrl, saveTo, fileName, overwriteExistingFiles, new FGFile.ImageLoadCallBack() {
FGFile.initFileImageFromInternet(getApplicationContext(), imgUrl, saveTo, fileName, overwriteExistingFiles, new FGFile.ImageLoadCallBack() {
@Override
public void onBitmapReturn(Bitmap bitmap) {
public void onBitmapReturn(Bitmap bitmap, String path, String msg) {
imageView.setImageBitmap(bitmap);
Log.d(TAG, "onBitmapReturn: "+path);
Log.d(TAG, "onBitmapReturn: "+msg);
}
});
}
Expand Down
70 changes: 47 additions & 23 deletions lib/src/main/java/com/gzeinnumer/gzndirectory/helper/FGFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,18 @@
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.widget.ImageView;

import androidx.core.content.ContextCompat;

import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;

import java.io.File;
import java.io.FileNotFoundException;
Expand All @@ -23,15 +28,6 @@
import java.util.List;
import java.util.Scanner;

import com.squareup.picasso.Target;

import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;

import static com.gzeinnumer.gzndirectory.helper.FGDir.logSystemFunctionGlobal;

public class FGFile {
Expand Down Expand Up @@ -63,7 +59,7 @@ public static boolean initFile(String fileName, String saveTo, String... text) {
return false;
}
}
if (!saveTo.substring(0, 1).equals("/")) {
if (!saveTo.startsWith("/")) {
saveTo = "/" + saveTo;
}
if (!FGDir.isFileExists(saveTo)) {
Expand All @@ -80,7 +76,7 @@ public static boolean initFile(String fileName, String saveTo, String... text) {
String[] subFolder = saveTo.substring(1).split("/");
String currentPath = "";
for (String d : subFolder) {
if (!d.substring(0, 1).equals("/")) {
if (!d.startsWith("/")) {
d = "/" + d;
}
currentPath = currentPath + d;
Expand All @@ -104,7 +100,7 @@ public static boolean initFile(String fileName, String saveTo, String... text) {
logSystemFunctionGlobal("initFile", "FileName tidak boleh kosong");
return false;
}
if (!fileName.substring(0, 1).equals("/")) {
if (!fileName.startsWith("/")) {
fileName = "/" + fileName;
}
File file = new File(FGDir.getStorageCard + FGDir.appFolder + saveTo + fileName);
Expand Down Expand Up @@ -148,7 +144,7 @@ public static List<String> readFile(String path) {
logSystemFunctionGlobal("readFile", "Path tidak boleh kosong");
return list;
}
if (!path.substring(0, 1).equals("/")) {
if (!path.startsWith("/")) {
path = "/" + path;
}
if (!FGDir.isFileExists(path)) {
Expand Down Expand Up @@ -199,7 +195,7 @@ public static boolean appentText(String path, String... msg) {
logSystemFunctionGlobal("appentText", "Path tidak boleh kosong");
return false;
}
if (!path.substring(0, 1).equals("/")) {
if (!path.startsWith("/")) {
path = "/" + path;
}
if (!FGDir.isFileExists(path)) {
Expand Down Expand Up @@ -310,7 +306,7 @@ public void onPrepareLoad(Drawable placeHolderDrawable) {
}
}

public static void initFileImageFromInternet(final String imgUrl, final String saveTo, final String filename, final boolean isNew, final ImageLoadCallBack imageLoadCallBack) {
public static void initFileImageFromInternet(final Context context, final String imgUrl, final String saveTo, final String filename, final boolean isNew, final ImageLoadCallBack imageLoadCallBack) {
if (imgUrl == null) {
logSystemFunctionGlobal("initFileImageFromInternet", "ImgUrl tidak boleh null");
return;
Expand Down Expand Up @@ -344,8 +340,7 @@ public static void initFileImageFromInternet(final String imgUrl, final String s
}
if (filename.length() > 0) {
myDir = new File(myDir, filename);
}
else {
} else {
myDir = new File(myDir, new Date().toString() + ".jpg");
}
if (!myDir.exists() || isNew) { // file tidak ada or isNew : True
Expand All @@ -357,23 +352,28 @@ public static void initFileImageFromInternet(final String imgUrl, final String s
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
try {
String msg;
if (!finalMyDir.exists() || isNew) {
//jika isNew true maka foto lama akan dihapus dan diganti dengan yang baru
//jika file tidak ditemukan maka file akan dibuat
logSystemFunctionGlobal("initFileImageFromInternet", "Foto baru disimpan ke penyimpanan");
FileOutputStream out = new FileOutputStream(finalMyDir);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);

msg = "Save New Foto";

out.flush();
out.close();

} else {
//jika isNew false maka akan load file lama di penyimpanan
logSystemFunctionGlobal("initFileImageFromInternet", "Foto lama di load dari penyimpanan");
bitmap = BitmapFactory.decodeFile(finalMyDir.getAbsolutePath());

msg = "Load Old Foto";
}

imageLoadCallBack.onBitmapReturn(bitmap);
imageLoadCallBack.onBitmapReturn(bitmap, finalMyDir.toString(), msg);
} catch (Exception e) {
logSystemFunctionGlobal("initFileImageFromInternet", e.getMessage());
}
Expand All @@ -382,25 +382,49 @@ public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
@Override
public void onBitmapFailed(Exception e, Drawable errorDrawable) {
logSystemFunctionGlobal("initFileImageFromInternet", e.getMessage());

imageLoadCallBack.onBitmapReturn(drawableToBitmap(ContextCompat.getDrawable(context, com.gzeinnumer.gzndirectory.R.drawable.ic_baseline_broken_image_24)), finalMyDir.toString(), e.getMessage());
}

@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
imageLoadCallBack.onBitmapReturn(drawableToBitmap(ContextCompat.getDrawable(context, com.gzeinnumer.gzndirectory.R.drawable.ic_baseline_sync_24)), finalMyDir.toString(), "onPrepareLoad");
}
}
);
}
else {
} else {
logSystemFunctionGlobal("initFileImageFromInternet", "Foto lama di load dari penyimpanan");
Bitmap bitmap = BitmapFactory.decodeFile(myDir.getAbsolutePath());
imageLoadCallBack.onBitmapReturn(bitmap);
imageLoadCallBack.onBitmapReturn(bitmap, myDir.toString(), "Load Old Foto");
}
}

public static Bitmap drawableToBitmap(Drawable drawable) {
Bitmap bitmap = null;

if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
if (bitmapDrawable.getBitmap() != null) {
return bitmapDrawable.getBitmap();
}
}

if (drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel
} else {
bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
}

Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}

//simpan data di dalam root folder sebagai temporary
public static File createImageFile(Context context, String fileName) throws IOException {
File storageDir = context.getExternalFilesDir(Environment.DIRECTORY_DCIM);
return File.createTempFile(fileName+"_", ".jpg", storageDir);
return File.createTempFile(fileName + "_", ".jpg", storageDir);
}

public static String getRealPathFromUri(Context context, Uri contentUri) {
Expand Down Expand Up @@ -464,7 +488,7 @@ public static boolean isFileExists(String path) {
ImageLoadCallBack imageLoadCallBack;

public interface ImageLoadCallBack {
void onBitmapReturn(Bitmap bitmap);
void onBitmapReturn(Bitmap bitmap, String path, String msg);
}

}
12 changes: 6 additions & 6 deletions lib/src/main/res/drawable/ic_baseline_broken_image_24.xml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:width="500dp"
android:height="500dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="@android:color/darker_gray">
<path
android:fillColor="@android:color/darker_gray"
android:pathData="M21,5v6.59l-3,-3.01 -4,4.01 -4,-4 -4,4 -3,-3.01L3,5c0,-1.1 0.9,-2 2,-2h14c1.1,0 2,0.9 2,2zM18,11.42l3,3.01L21,19c0,1.1 -0.9,2 -2,2L5,21c-1.1,0 -2,-0.9 -2,-2v-6.58l3,2.99 4,-4 4,4 4,-3.99z" />
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/darker_gray"
android:pathData="M21,5v6.59l-3,-3.01 -4,4.01 -4,-4 -4,4 -3,-3.01L3,5c0,-1.1 0.9,-2 2,-2h14c1.1,0 2,0.9 2,2zM18,11.42l3,3.01L21,19c0,1.1 -0.9,2 -2,2L5,21c-1.1,0 -2,-0.9 -2,-2v-6.58l3,2.99 4,-4 4,4 4,-3.99z" />
</vector>
6 changes: 3 additions & 3 deletions lib/src/main/res/drawable/ic_baseline_sync_24.xml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:width="500dp"
android:height="500dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="@android:color/darker_gray">
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/darker_gray"
android:pathData="M12,4L12,1L8,5l4,4L12,6c3.31,0 6,2.69 6,6 0,1.01 -0.25,1.97 -0.7,2.8l1.46,1.46C19.54,15.03 20,13.57 20,12c0,-4.42 -3.58,-8 -8,-8zM12,18c-3.31,0 -6,-2.69 -6,-6 0,-1.01 0.25,-1.97 0.7,-2.8L5.24,7.74C4.46,8.97 4,10.43 4,12c0,4.42 3.58,8 8,8v3l4,-4 -4,-4v3z" />
Expand Down

0 comments on commit 240f114

Please sign in to comment.