|
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