| 
				
			 | 
			
			
				@@ -6,9 +6,16 @@ import android.app.Activity; 
			 | 
		
	
		
			
			| 
				6
			 | 
			
				6
			 | 
			
			
				 import android.content.Intent; 
			 | 
		
	
		
			
			| 
				7
			 | 
			
				7
			 | 
			
			
				 import android.graphics.Bitmap; 
			 | 
		
	
		
			
			| 
				8
			 | 
			
				8
			 | 
			
			
				 import android.graphics.Canvas; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				9
			 | 
			
			
				+import android.graphics.Color; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				10
			 | 
			
			
				+import android.graphics.Matrix; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				11
			 | 
			
			
				+import android.graphics.Rect; 
			 | 
		
	
		
			
			| 
				9
			 | 
			
				12
			 | 
			
			
				 import android.net.Uri; 
			 | 
		
	
		
			
			| 
				10
			 | 
			
				13
			 | 
			
			
				 import android.util.Base64; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				14
			 | 
			
			
				+import android.util.Log; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				15
			 | 
			
			
				+import android.view.TextureView; 
			 | 
		
	
		
			
			| 
				11
			 | 
			
				16
			 | 
			
			
				 import android.view.View; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				17
			 | 
			
			
				+import android.view.ViewGroup; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				18
			 | 
			
			
				+import android.widget.LinearLayout; 
			 | 
		
	
		
			
			| 
				12
			 | 
			
				19
			 | 
			
			
				 import android.widget.ScrollView; 
			 | 
		
	
		
			
			| 
				13
			 | 
			
				20
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				14
			 | 
			
				21
			 | 
			
			
				 import com.facebook.react.bridge.Promise; 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -21,6 +28,8 @@ import java.io.File; 
			 | 
		
	
		
			
			| 
				21
			 | 
			
				28
			 | 
			
			
				 import java.io.FileOutputStream; 
			 | 
		
	
		
			
			| 
				22
			 | 
			
				29
			 | 
			
			
				 import java.io.IOException; 
			 | 
		
	
		
			
			| 
				23
			 | 
			
				30
			 | 
			
			
				 import java.io.OutputStream; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				31
			 | 
			
			
				+import java.util.ArrayList; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				32
			 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
			| 
				24
			 | 
			
				33
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				25
			 | 
			
				34
			 | 
			
			
				 /** 
			 | 
		
	
		
			
			| 
				26
			 | 
			
				35
			 | 
			
			
				  * Snapshot utility class allow to screenshot a view. 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -116,6 +125,27 @@ public class ViewShot implements UIBlock { 
			 | 
		
	
		
			
			| 
				116
			 | 
			
				125
			 | 
			
			
				         } 
			 | 
		
	
		
			
			| 
				117
			 | 
			
				126
			 | 
			
			
				     } 
			 | 
		
	
		
			
			| 
				118
			 | 
			
				127
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				128
			 | 
			
			
				+    private List<View> getAllChildren(View v) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				129
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				130
			 | 
			
			
				+        if (!(v instanceof ViewGroup)) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				131
			 | 
			
			
				+            ArrayList<View> viewArrayList = new ArrayList<View>(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				132
			 | 
			
			
				+            viewArrayList.add(v); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				133
			 | 
			
			
				+            return viewArrayList; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				134
			 | 
			
			
				+        } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				135
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				136
			 | 
			
			
				+        ArrayList<View> result = new ArrayList<View>(); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				137
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				138
			 | 
			
			
				+        ViewGroup viewGroup = (ViewGroup) v; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				139
			 | 
			
			
				+        for (int i = 0; i < viewGroup.getChildCount(); i++) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				140
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				141
			 | 
			
			
				+            View child = viewGroup.getChildAt(i); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				142
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				143
			 | 
			
			
				+            //Do not add any parents, just add child elements 
			 | 
		
	
		
			
			| 
				
			 | 
			
				144
			 | 
			
			
				+            result.addAll(getAllChildren(child)); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				145
			 | 
			
			
				+        } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				146
			 | 
			
			
				+        return result; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				147
			 | 
			
			
				+    } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				148
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				119
			 | 
			
				149
			 | 
			
			
				     /** 
			 | 
		
	
		
			
			| 
				120
			 | 
			
				150
			 | 
			
			
				      * Screenshot a view and return the captured bitmap. 
			 | 
		
	
		
			
			| 
				121
			 | 
			
				151
			 | 
			
			
				      * @param view the view to capture 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -138,9 +168,21 @@ public class ViewShot implements UIBlock { 
			 | 
		
	
		
			
			| 
				138
			 | 
			
				168
			 | 
			
			
				             } 
			 | 
		
	
		
			
			| 
				139
			 | 
			
				169
			 | 
			
			
				         } 
			 | 
		
	
		
			
			| 
				140
			 | 
			
				170
			 | 
			
			
				         Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				171
			 | 
			
			
				+        Bitmap childBitmapBuffer; 
			 | 
		
	
		
			
			| 
				141
			 | 
			
				172
			 | 
			
			
				         Canvas c = new Canvas(bitmap); 
			 | 
		
	
		
			
			| 
				142
			 | 
			
				173
			 | 
			
			
				         view.draw(c); 
			 | 
		
	
		
			
			| 
				143
			 | 
			
				174
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				175
			 | 
			
			
				+        //after view is drawn, go through children 
			 | 
		
	
		
			
			| 
				
			 | 
			
				176
			 | 
			
			
				+        List<View> childrenList = getAllChildren(view); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				177
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				178
			 | 
			
			
				+        for (View child : childrenList) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				179
			 | 
			
			
				+            if(child instanceof TextureView) { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				180
			 | 
			
			
				+                ((TextureView) child).setOpaque(false); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				181
			 | 
			
			
				+                childBitmapBuffer = ((TextureView) child).getBitmap(child.getWidth(), child.getHeight()); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				182
			 | 
			
			
				+                c.drawBitmap(childBitmapBuffer, child.getLeft() + ((ViewGroup)child.getParent()).getLeft() +  child.getPaddingLeft(), child.getTop() + ((ViewGroup)child.getParent()).getTop() + child.getPaddingTop(), null); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				183
			 | 
			
			
				+            } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				184
			 | 
			
			
				+        } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				185
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				144
			 | 
			
				186
			 | 
			
			
				         if (width != null && height != null && (width != w || height != h)) { 
			 | 
		
	
		
			
			| 
				145
			 | 
			
				187
			 | 
			
			
				             bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true); 
			 | 
		
	
		
			
			| 
				146
			 | 
			
				188
			 | 
			
			
				         } 
			 |