|
1 | 1 | package com.terrylinla.rnsketchcanvas;
|
2 | 2 |
|
| 3 | +import android.database.Cursor; |
3 | 4 | import android.graphics.Typeface;
|
4 | 5 | import android.graphics.Bitmap;
|
5 | 6 | import android.graphics.BitmapFactory;
|
|
11 | 12 | import android.graphics.Rect;
|
12 | 13 | import android.graphics.Matrix;
|
13 | 14 | import android.media.ExifInterface;
|
| 15 | +import android.net.Uri; |
14 | 16 | import android.os.Environment;
|
| 17 | +import android.provider.MediaStore; |
15 | 18 | import android.util.Base64;
|
16 | 19 | import android.util.Log;
|
17 | 20 | import android.view.View;
|
@@ -64,14 +67,41 @@ public SketchCanvas(ThemedReactContext context) {
|
64 | 67 | mContext = context;
|
65 | 68 | }
|
66 | 69 |
|
| 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 | + |
67 | 94 | public boolean openImageFile(String filename, String directory, String mode) {
|
68 | 95 | if (filename != null) {
|
69 | 96 | int res = mContext.getResources().getIdentifier(
|
70 | 97 | filename.lastIndexOf('.') == -1 ? filename : filename.substring(0, filename.lastIndexOf('.')),
|
71 | 98 | "drawable",
|
72 | 99 | mContext.getPackageName());
|
73 | 100 | 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 | + |
75 | 105 | Bitmap bitmap = res == 0 ?
|
76 | 106 | BitmapFactory.decodeFile(file.toString(), bitmapOptions) :
|
77 | 107 | BitmapFactory.decodeResource(mContext.getResources(), res);
|
|
0 commit comments