diff --git a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/MainActivity.java b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/MainActivity.java index 3a4e3d81..85211bda 100644 --- a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/MainActivity.java +++ b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/MainActivity.java @@ -32,6 +32,7 @@ protected void onCreate(Bundle savedInstanceState) { modules.add(new SyrText()); modules.add(new SyrButton()); modules.add(new SyrImage()); + modules.add(new SyrTouchableOpacity()); // get the javascript bundle SyrBundle bundle = new SyrBundleManager().setBundleAssetName("").build(); @@ -45,10 +46,12 @@ protected void onCreate(Bundle savedInstanceState) { // create a new Rootview SyrRootView rootview = new SyrRootView(this); - // start the Syr Application - rootview.startSyrApplication(instance, bundle); // set the content of the to the Rootview setContentView(rootview); + + // start the Syr Application + rootview.startSyrApplication(instance, bundle); + } } \ No newline at end of file diff --git a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrBridge.java b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrBridge.java index 0d1464b8..10ed2a8b 100644 --- a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrBridge.java +++ b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrBridge.java @@ -25,6 +25,7 @@ public class SyrBridge { private Context mContext; private SyrRaster mRaster; private WebView mBridgedBrowser; + public HashMap bootParams = new HashMap(); /** Instantiate the interface and set the context */ SyrBridge(Context c) { @@ -70,7 +71,9 @@ public boolean shouldOverrideUrlLoading(WebView view, String url) { WebSettings webSettings = mBridgedBrowser.getSettings(); webSettings.setJavaScriptEnabled(true); - mBridgedBrowser.loadUrl("http://10.0.2.2:8080"); + String loadURL = String.format("http://10.0.2.2:8080?window_height=%s&window_width=%s", bootParams.get("height"), bootParams.get("width")); + + mBridgedBrowser.loadUrl(loadURL); } public void sendEvent(HashMap event) { diff --git a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrButton.java b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrButton.java index 294f8f7e..93e37c38 100644 --- a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrButton.java +++ b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrButton.java @@ -3,12 +3,15 @@ import android.content.Context; import android.graphics.Color; import android.graphics.PorterDuff; +import android.util.Log; import android.view.View; import android.widget.Button; import org.json.JSONException; import org.json.JSONObject; +import java.util.HashMap; + /** * Created by dereanderson on 1/9/18. */ @@ -22,16 +25,24 @@ public View render(JSONObject component, Context context) { try { JSONObject instance = component.getJSONObject("instance"); + final String guid = component.getString("guid"); if(component.has("attributes") && component.getJSONObject("attributes").has("style")){ style = component.getJSONObject("attributes").getJSONObject("style"); - button.setLayoutParams(SyrStyler.styleLayout(style)); SyrStyler.styleView(button, style); } button.setText(instance.getString("value")); + button.setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + HashMap eventMap = new HashMap(); + eventMap.put("type", "onPress"); + eventMap.put("guid", guid); + SyrEventHandler.getInstance().sendEvent(eventMap); + } + }); } catch (JSONException e) { e.printStackTrace(); } diff --git a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrEventHandler.java b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrEventHandler.java index f1e0f3e8..58827ddc 100644 --- a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrEventHandler.java +++ b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrEventHandler.java @@ -1,9 +1,28 @@ package com.example.dereanderson.syrnativeandroid; +import java.util.HashMap; + /** * Syr Project * https://syr.js.org * Created by Derek Anderson on 1/8/18. */ public class SyrEventHandler { -} + + public SyrBridge mBridge; + + private static SyrEventHandler sSyrEventHandler; + + private SyrEventHandler(){} //private constructor. + + public static SyrEventHandler getInstance(){ + if (sSyrEventHandler == null){ //if there is no instance available... create new one + sSyrEventHandler = new SyrEventHandler(); + } + return sSyrEventHandler; + } + + public void sendEvent(HashMap event) { + mBridge.sendEvent(event); + } +} \ No newline at end of file diff --git a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrInstance.java b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrInstance.java index 3e37348c..e609fe5e 100644 --- a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrInstance.java +++ b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrInstance.java @@ -18,6 +18,8 @@ public SyrInstance(SyrInstanceManager manager) { } public SyrInstance setBridge(SyrBridge bridge) { + // set the bridge for the event handler + SyrEventHandler.getInstance().mBridge = bridge; mBridge = bridge; return this; } diff --git a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrRootView.java b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrRootView.java index f3c29a5b..eb3656da 100644 --- a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrRootView.java +++ b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrRootView.java @@ -14,6 +14,10 @@ public class SyrRootView extends FrameLayout { private Context mContext; private SyrBridge mBridge; private SyrRaster mRaster; + private SyrInstance mInstance; + private Boolean mLoaded = false; + private int mHeight; + private int mWidth; public SyrRootView(Context context) { super(context); @@ -27,7 +31,7 @@ public SyrRootView startSyrApplication(SyrInstance instance, SyrBundle bundle) { mBridge = new SyrBridge(mContext); mRaster = new SyrRaster(mContext); mRaster.setRootview(this); - instance.setBridge(mBridge).setRaster(mRaster).loadBundle(); + mInstance = instance; return this; } @@ -37,4 +41,17 @@ public void destroy() { mRaster = null; } + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + mHeight = this.getWidth(); + mWidth = this.getHeight(); + + if(mHeight > 0 && mWidth > 0 && !mLoaded) { + mLoaded = true; + mBridge.bootParams.put("height", Integer.toString(mHeight)); + mBridge.bootParams.put("width", Integer.toString(mWidth)); + mInstance.setBridge(mBridge).setRaster(mRaster).loadBundle(); + } + } } diff --git a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrTouchableOpacity.java b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrTouchableOpacity.java index 5f8355d5..4ffbe899 100644 --- a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrTouchableOpacity.java +++ b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrTouchableOpacity.java @@ -1,8 +1,49 @@ package com.example.dereanderson.syrnativeandroid; +import android.content.Context; +import android.view.View; +import android.widget.RelativeLayout; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; + /** * Created by dereanderson on 1/10/18. */ -public class SyrTouchableOpacity { +public class SyrTouchableOpacity implements SyrBaseModule { + + @Override + public View render(JSONObject component, Context context) { + RelativeLayout layout = new RelativeLayout(context); + JSONObject style = null; + + try { + final String guid = component.getString("guid"); + style = component.getJSONObject("attributes").getJSONObject("style"); + + layout.setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + HashMap eventMap = new HashMap(); + eventMap.put("type", "onPress"); + eventMap.put("guid", guid); + SyrEventHandler.getInstance().sendEvent(eventMap); + } + }); + } catch (JSONException e) { + e.printStackTrace(); + } + + layout.setLayoutParams(SyrStyler.styleLayout(style)); + SyrStyler.styleView(layout, style); + + return layout; + } + + @Override + public String getName() { + return "TouchableOpacity"; + } } diff --git a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrView.java b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrView.java index b8a9dd7f..29287e37 100644 --- a/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrView.java +++ b/android/app/src/main/java/com/example/dereanderson/syrnativeandroid/SyrView.java @@ -10,6 +10,8 @@ import org.json.JSONException; import org.json.JSONObject; +import java.util.HashMap; + /** * Syr Project * https://syr.js.org @@ -24,6 +26,7 @@ public View render(JSONObject component, Context context) { try { style = component.getJSONObject("attributes").getJSONObject("style"); + } catch (JSONException e) { e.printStackTrace(); } @@ -31,6 +34,8 @@ public View render(JSONObject component, Context context) { layout.setLayoutParams(SyrStyler.styleLayout(style)); SyrStyler.styleView(layout, style); + + return layout; } diff --git a/samples/example.js b/samples/example.js index ed0b2b0f..d3d91676 100644 --- a/samples/example.js +++ b/samples/example.js @@ -1,12 +1,13 @@ -import { Component, Render, View, Dimensions, Animated, Text, Button, Image } from '../index'; +import { Component, Render, View, Dimensions, Animated, Text, Button, Image, TouchableOpacity } from '../index'; +console.log(Dimensions.get('window')); const styles = { square: { - width: 300, + width: Dimensions.get('window').width, height: 300, backgroundColor: '#f000f0', top: 200, - left: 300, + left: 0, borderRadius: 30, }, }; @@ -17,12 +18,16 @@ class MyComponent extends Component { render() { return Two of These! - - + + this.onPress()} style={{top:150,left:(300/2)-(75/2), height:75, width:75}}> ; } + onPress() { + console.log('I was pressed!'); + } componentDidMount() { - console.log('Yup I Did'); + + console.log('Yup I Did 2'); } }