Skip to content

Commit 41c357d

Browse files
committed
Revert "Convert image to data in a separate thread"
This reverts commit 45061cc.
1 parent 8867f6c commit 41c357d

File tree

1 file changed

+40
-60
lines changed

1 file changed

+40
-60
lines changed
Lines changed: 40 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package fr.greweb.reactnativeviewshot;
22

33
import javax.annotation.Nullable;
4-
54
import android.graphics.Bitmap;
65
import android.graphics.Canvas;
76
import android.net.Uri;
@@ -17,8 +16,6 @@
1716
import java.io.FileOutputStream;
1817
import java.io.IOException;
1918
import java.io.OutputStream;
20-
import java.util.concurrent.ExecutorService;
21-
import java.util.concurrent.Executors;
2219

2320
/**
2421
* Snapshot utility class allow to screenshot a view.
@@ -27,8 +24,6 @@ public class ViewShot implements UIBlock {
2724

2825
static final String ERROR_UNABLE_TO_SNAPSHOT = "E_UNABLE_TO_SNAPSHOT";
2926

30-
private final static ExecutorService sExecutor = Executors.newFixedThreadPool(5);
31-
3227
private int tag;
3328
private String extension;
3429
private Bitmap.CompressFormat format;
@@ -62,63 +57,59 @@ public ViewShot(
6257

6358
@Override
6459
public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) {
60+
OutputStream os = null;
6561
View view = nativeViewHierarchyManager.resolveView(tag);
6662
if (view == null) {
67-
promise.reject(ERROR_UNABLE_TO_SNAPSHOT, "No view found with reactTag: " + tag);
63+
promise.reject(ERROR_UNABLE_TO_SNAPSHOT, "No view found with reactTag: "+tag);
6864
return;
6965
}
70-
final Bitmap bitmap = captureView(view);
71-
sExecutor.execute(new Runnable() {
72-
@Override
73-
public void run() {
74-
OutputStream os = null;
66+
try {
67+
if ("file".equals(result)) {
68+
os = new FileOutputStream(output);
69+
captureView(view, os);
70+
String uri = Uri.fromFile(output).toString();
71+
promise.resolve(uri);
72+
}
73+
else if ("base64".equals(result)) {
74+
os = new ByteArrayOutputStream();
75+
captureView(view, os);
76+
byte[] bytes = ((ByteArrayOutputStream) os).toByteArray();
77+
String data = Base64.encodeToString(bytes, Base64.NO_WRAP);
78+
promise.resolve(data);
79+
}
80+
else if ("data-uri".equals(result)) {
81+
os = new ByteArrayOutputStream();
82+
captureView(view, os);
83+
byte[] bytes = ((ByteArrayOutputStream) os).toByteArray();
84+
String data = Base64.encodeToString(bytes, Base64.NO_WRAP);
85+
data = "data:image/"+extension+";base64," + data;
86+
promise.resolve(data);
87+
}
88+
else {
89+
promise.reject(ERROR_UNABLE_TO_SNAPSHOT, "Unsupported result: "+result+". Try one of: file | base64 | data-uri");
90+
}
91+
}
92+
catch (Exception e) {
93+
e.printStackTrace();
94+
promise.reject(ERROR_UNABLE_TO_SNAPSHOT, "Failed to capture view snapshot");
95+
}
96+
finally {
97+
if (os != null) {
7598
try {
76-
if ("file".equals(result)) {
77-
os = new FileOutputStream(output);
78-
String uri = Uri.fromFile(output).toString();
79-
promise.resolve(uri);
80-
} else if ("base64".equals(result)) {
81-
os = new ByteArrayOutputStream();
82-
convertImageToData(bitmap, os);
83-
byte[] bytes = ((ByteArrayOutputStream) os).toByteArray();
84-
String data = Base64.encodeToString(bytes, Base64.NO_WRAP);
85-
promise.resolve(data);
86-
} else if ("data-uri".equals(result)) {
87-
os = new ByteArrayOutputStream();
88-
convertImageToData(bitmap, os);
89-
byte[] bytes = ((ByteArrayOutputStream) os).toByteArray();
90-
String data = Base64.encodeToString(bytes, Base64.NO_WRAP);
91-
data = "data:image/" + extension + ";base64," + data;
92-
promise.resolve(data);
93-
} else {
94-
promise.reject(ERROR_UNABLE_TO_SNAPSHOT, "Unsupported result: " + result +
95-
". Try one of: file | base64 | data-uri");
96-
}
97-
} catch (Exception e) {
99+
os.close();
100+
} catch (IOException e) {
98101
e.printStackTrace();
99-
promise.reject(ERROR_UNABLE_TO_SNAPSHOT, "Failed to capture view snapshot");
100-
} finally {
101-
if (os != null) {
102-
try {
103-
os.close();
104-
} catch (IOException e) {
105-
e.printStackTrace();
106-
}
107-
}
108102
}
109103
}
110-
});
111-
112-
104+
}
113105
}
114106

115107
/**
116108
* Screenshot a view and return the captured bitmap.
117-
*
118109
* @param view the view to capture
119-
* @return bitmap drawn by view
110+
* @return the screenshot or null if it failed.
120111
*/
121-
private Bitmap captureView(View view) {
112+
private void captureView (View view, OutputStream os) {
122113
int w = view.getWidth();
123114
int h = view.getHeight();
124115
if (w <= 0 || h <= 0) {
@@ -134,17 +125,6 @@ private Bitmap captureView(View view) {
134125
if (bitmap == null) {
135126
throw new RuntimeException("Impossible to snapshot the view");
136127
}
137-
return bitmap;
138-
}
139-
140-
/**
141-
* As Bitmap.compress() may take a long time, it's better to
142-
* call it in a separate thread
143-
*
144-
* @param bitmap image to convert
145-
* @param os output stream
146-
*/
147-
private void convertImageToData(Bitmap bitmap, OutputStream os) {
148-
bitmap.compress(format, (int) (100.0 * quality), os);
128+
bitmap.compress(format, (int)(100.0 * quality), os);
149129
}
150130
}

0 commit comments

Comments
 (0)