Skip to content

Commit 4b11ca0

Browse files
authored
feat: support content URI when loading background image (#79)
1 parent 993fee1 commit 4b11ca0

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

android/src/main/java/com/terrylinla/rnsketchcanvas/SketchCanvas.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.terrylinla.rnsketchcanvas;
22

3+
import android.database.Cursor;
34
import android.graphics.Typeface;
45
import android.graphics.Bitmap;
56
import android.graphics.BitmapFactory;
@@ -11,7 +12,9 @@
1112
import android.graphics.Rect;
1213
import android.graphics.Matrix;
1314
import android.media.ExifInterface;
15+
import android.net.Uri;
1416
import android.os.Environment;
17+
import android.provider.MediaStore;
1518
import android.util.Base64;
1619
import android.util.Log;
1720
import android.view.View;
@@ -64,14 +67,41 @@ public SketchCanvas(ThemedReactContext context) {
6467
mContext = context;
6568
}
6669

70+
private Uri getFileUri(String filepath) {
71+
Uri uri = Uri.parse(filepath);
72+
if (uri.getScheme() == null) {
73+
uri = Uri.parse("file://" + filepath);
74+
}
75+
return uri;
76+
}
77+
78+
private String getOriginalFilepath(String filepath) {
79+
Uri uri = getFileUri(filepath);
80+
String originalFilepath = filepath;
81+
if (uri.getScheme().equals("content")) {
82+
try {
83+
Cursor cursor = mContext.getContentResolver().query(uri, null, null, null, null);
84+
if (cursor.moveToFirst()) {
85+
originalFilepath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
86+
}
87+
cursor.close();
88+
} catch (IllegalArgumentException ignored) {
89+
}
90+
}
91+
return originalFilepath;
92+
}
93+
6794
public boolean openImageFile(String filename, String directory, String mode) {
6895
if (filename != null) {
6996
int res = mContext.getResources().getIdentifier(
7097
filename.lastIndexOf('.') == -1 ? filename : filename.substring(0, filename.lastIndexOf('.')),
7198
"drawable",
7299
mContext.getPackageName());
73100
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
74-
File file = new File(filename, directory == null ? "" : directory);
101+
102+
String originalFilepath = getOriginalFilepath(filename);
103+
File file = new File(originalFilepath, directory == null ? "" : directory);
104+
75105
Bitmap bitmap = res == 0 ?
76106
BitmapFactory.decodeFile(file.toString(), bitmapOptions) :
77107
BitmapFactory.decodeResource(mContext.getResources(), res);

0 commit comments

Comments
 (0)