|  | @@ -4,9 +4,6 @@ import android.os.Bundle;
 | 
	
		
			
			| 4 | 4 |  import android.view.View;
 | 
	
		
			
			| 5 | 5 |  
 | 
	
		
			
			| 6 | 6 |  import com.facebook.react.ReactRootView;
 | 
	
		
			
			| 7 |  | -import com.facebook.react.bridge.ReadableArray;
 | 
	
		
			
			| 8 |  | -import com.facebook.react.bridge.ReadableMap;
 | 
	
		
			
			| 9 |  | -import com.facebook.react.bridge.ReadableMapKeySetIterator;
 | 
	
		
			
			| 10 | 7 |  import com.reactnativenavigation.NavigationActivity;
 | 
	
		
			
			| 11 | 8 |  import com.reactnativenavigation.NavigationApplication;
 | 
	
		
			
			| 12 | 9 |  import com.reactnativenavigation.layout.LayoutFactory;
 | 
	
	
		
			
			|  | @@ -15,14 +12,11 @@ import com.reactnativenavigation.layout.bottomtabs.BottomTabsCreator;
 | 
	
		
			
			| 15 | 12 |  import com.reactnativenavigation.layout.parse.LayoutNode;
 | 
	
		
			
			| 16 | 13 |  import com.reactnativenavigation.utils.UiThread;
 | 
	
		
			
			| 17 | 14 |  
 | 
	
		
			
			| 18 |  | -import java.util.ArrayList;
 | 
	
		
			
			| 19 |  | -import java.util.HashMap;
 | 
	
		
			
			| 20 |  | -import java.util.List;
 | 
	
		
			
			| 21 | 15 |  import java.util.Map;
 | 
	
		
			
			| 22 | 16 |  
 | 
	
		
			
			| 23 | 17 |  public class CommandsHandler {
 | 
	
		
			
			| 24 | 18 |  
 | 
	
		
			
			| 25 |  | -	public void setRoot(final NavigationActivity activity, final ReadableMap layoutTree) {
 | 
	
		
			
			|  | 19 | +	public void setRoot(final NavigationActivity activity, final Map<String, Object> layoutTree) {
 | 
	
		
			
			| 26 | 20 |  		LayoutFactory factory =
 | 
	
		
			
			| 27 | 21 |  				new LayoutFactory(activity, new LayoutFactory.ReactRootViewCreator() {
 | 
	
		
			
			| 28 | 22 |  					@Override
 | 
	
	
		
			
			|  | @@ -35,12 +29,12 @@ public class CommandsHandler {
 | 
	
		
			
			| 35 | 29 |  					}
 | 
	
		
			
			| 36 | 30 |  				}, new BottomTabsCreator());
 | 
	
		
			
			| 37 | 31 |  
 | 
	
		
			
			| 38 |  | -		final LayoutNode layoutTreeRoot = readableMapToLayoutNode(layoutTree);
 | 
	
		
			
			|  | 32 | +		final LayoutNode layoutTreeRoot = LayoutNode.fromTree(layoutTree);
 | 
	
		
			
			| 39 | 33 |  		final View rootView = factory.create(layoutTreeRoot);
 | 
	
		
			
			| 40 | 34 |  		activity.setContentView(rootView);
 | 
	
		
			
			| 41 | 35 |  	}
 | 
	
		
			
			| 42 | 36 |  
 | 
	
		
			
			| 43 |  | -	public void push(final NavigationActivity activity, String onContainerId, final ReadableMap layout) {
 | 
	
		
			
			|  | 37 | +	public void push(final NavigationActivity activity, String onContainerId, final Map<String, Object> layoutTree) {
 | 
	
		
			
			| 44 | 38 |  		LayoutFactory factory =
 | 
	
		
			
			| 45 | 39 |  				new LayoutFactory(activity, new LayoutFactory.ReactRootViewCreator() {
 | 
	
		
			
			| 46 | 40 |  					@Override
 | 
	
	
		
			
			|  | @@ -52,7 +46,7 @@ public class CommandsHandler {
 | 
	
		
			
			| 52 | 46 |  						return rootView;
 | 
	
		
			
			| 53 | 47 |  					}
 | 
	
		
			
			| 54 | 48 |  				}, new BottomTabsCreator());
 | 
	
		
			
			| 55 |  | -		final LayoutNode layoutNode = readableMapToLayoutNode(layout);
 | 
	
		
			
			|  | 49 | +		final LayoutNode layoutNode = LayoutNode.fromTree(layoutTree);
 | 
	
		
			
			| 56 | 50 |  		final View rootView = factory.create(layoutNode);
 | 
	
		
			
			| 57 | 51 |  		((StackLayout) activity.getContentView()).push(rootView);
 | 
	
		
			
			| 58 | 52 |  	}
 | 
	
	
		
			
			|  | @@ -65,35 +59,4 @@ public class CommandsHandler {
 | 
	
		
			
			| 65 | 59 |  			}
 | 
	
		
			
			| 66 | 60 |  		});
 | 
	
		
			
			| 67 | 61 |  	}
 | 
	
		
			
			| 68 |  | -
 | 
	
		
			
			| 69 |  | -	private LayoutNode readableMapToLayoutNode(ReadableMap readableMap) {
 | 
	
		
			
			| 70 |  | -		String id = readableMap.getString("id");
 | 
	
		
			
			| 71 |  | -		LayoutNode.Type type = LayoutNode.Type.fromString(readableMap.getString("type"));
 | 
	
		
			
			| 72 |  | -		Map<String, Object> data = readableMapToJavaMap(readableMap.getMap("data"));
 | 
	
		
			
			| 73 |  | -
 | 
	
		
			
			| 74 |  | -		ReadableArray childrenNodes = readableMap.getArray("children");
 | 
	
		
			
			| 75 |  | -		List<LayoutNode> children = new ArrayList<>(childrenNodes.size());
 | 
	
		
			
			| 76 |  | -		for (int i = 0; i < childrenNodes.size(); i++) {
 | 
	
		
			
			| 77 |  | -			ReadableMap child = childrenNodes.getMap(i);
 | 
	
		
			
			| 78 |  | -			children.add(readableMapToLayoutNode(child));
 | 
	
		
			
			| 79 |  | -		}
 | 
	
		
			
			| 80 |  | -
 | 
	
		
			
			| 81 |  | -		return new LayoutNode(id, type, data, children);
 | 
	
		
			
			| 82 |  | -	}
 | 
	
		
			
			| 83 |  | -
 | 
	
		
			
			| 84 |  | -	private Map<String, Object> readableMapToJavaMap(ReadableMap readableMap) {
 | 
	
		
			
			| 85 |  | -		final Map<String, Object> map = new HashMap<>();
 | 
	
		
			
			| 86 |  | -		for (ReadableMapKeySetIterator it = readableMap.keySetIterator(); it.hasNextKey(); ) {
 | 
	
		
			
			| 87 |  | -			final String key = it.nextKey();
 | 
	
		
			
			| 88 |  | -			switch (readableMap.getType(key)) {
 | 
	
		
			
			| 89 |  | -				case String:
 | 
	
		
			
			| 90 |  | -					map.put(key, readableMap.getString(key));
 | 
	
		
			
			| 91 |  | -					break;
 | 
	
		
			
			| 92 |  | -				case Map:
 | 
	
		
			
			| 93 |  | -					map.put(key, readableMapToJavaMap(readableMap.getMap(key)));
 | 
	
		
			
			| 94 |  | -					break;
 | 
	
		
			
			| 95 |  | -			}
 | 
	
		
			
			| 96 |  | -		}
 | 
	
		
			
			| 97 |  | -		return map;
 | 
	
		
			
			| 98 |  | -	}
 | 
	
		
			
			| 99 | 62 |  }
 |