diff --git a/Src/Android/com/coherentlabs/ui/CoherentAndroidViewBridge.java b/Src/Android/com/coherentlabs/ui/CoherentAndroidViewBridge.java index 8734f8b..5695774 100644 --- a/Src/Android/com/coherentlabs/ui/CoherentAndroidViewBridge.java +++ b/Src/Android/com/coherentlabs/ui/CoherentAndroidViewBridge.java @@ -30,6 +30,8 @@ public class CoherentAndroidViewBridge { private Activity mActivity; private WebView mWebView; + private CoherentWebViewClient mClient; + private CoherentAndroidViewBridge mBridge; private boolean mIsTransparent; public CoherentAndroidViewBridge(Activity activity) { @@ -37,6 +39,7 @@ public CoherentAndroidViewBridge(Activity activity) { Log.wtf(LOG_TAG, "Trying to create Coherent UI View with null activity!"); } + mBridge = this; mActivity = activity; } @@ -165,10 +168,11 @@ public void run() { } // WebViewClient must be set BEFORE calling loadUrl! - mWebView.setWebViewClient(new CoherentWebViewClient(mActivity, usesDefaultFileHandler)); + mClient = new CoherentWebViewClient(mActivity, usesDefaultFileHandler); + mWebView.setWebViewClient(mClient); mWebView.setWebChromeClient(new CoherentWebChromeClient()); - mWebView.addJavascriptInterface(new CoherentJavaScriptInterface(mWebView), CoherentJavaScriptInterface.INTERFACE_NAME); + mWebView.addJavascriptInterface(new CoherentJavaScriptInterface(mWebView, mBridge), CoherentJavaScriptInterface.INTERFACE_NAME); if (width != 0 && height != 0) { mActivity.addContentView(mWebView, @@ -367,6 +371,10 @@ public void run() { } }); } + + public CoherentWebViewClient getWebViewClient(){ + return mClient; + } private native void notifySoftKeyboardVisible(boolean visible); private native void notifyOnBitmapReady(int viewId, ByteBuffer buffer, diff --git a/Src/Android/com/coherentlabs/ui/CoherentJavaScriptInterface.java b/Src/Android/com/coherentlabs/ui/CoherentJavaScriptInterface.java index 8fb3295..3db59bf 100644 --- a/Src/Android/com/coherentlabs/ui/CoherentJavaScriptInterface.java +++ b/Src/Android/com/coherentlabs/ui/CoherentJavaScriptInterface.java @@ -7,10 +7,12 @@ public class CoherentJavaScriptInterface { public static final String INTERFACE_NAME = "__couiAndroid"; private WebView mWebView; + private CoherentAndroidViewBridge mBridge; private float mDPtoPXCoef; - public CoherentJavaScriptInterface(WebView webView) { + public CoherentJavaScriptInterface(WebView webView, CoherentAndroidViewBridge bridge) { mWebView = webView; + mBridge = bridge; DisplayMetrics displayMetrics = webView.getContext().getResources().getDisplayMetrics(); mDPtoPXCoef = displayMetrics.densityDpi / 160.0f; @@ -27,4 +29,9 @@ public void addTouchEvent(int fingerId, int phase, int x, int y) { } public native void addCoherentTouchEvent(int id, int fingerId, int phase, int x, int y); + + @JavascriptInterface + public void triggerNativeCode(String event) { + this.mBridge.getWebViewClient().triggerNativeCode(mWebView.getId(), event); + } } diff --git a/Src/Android/com/coherentlabs/ui/CoherentWebViewClient.java b/Src/Android/com/coherentlabs/ui/CoherentWebViewClient.java index 7d5721f..4db8643 100644 --- a/Src/Android/com/coherentlabs/ui/CoherentWebViewClient.java +++ b/Src/Android/com/coherentlabs/ui/CoherentWebViewClient.java @@ -29,7 +29,7 @@ public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url != null && !shouldStartLoad(view.getId(), url)) { Log.v(LOG_TAG, "Overriding URL loading of \"" + url + "\" for view " + view.getId()); return true; - } else { + } else { return false; } } diff --git a/UnityIntegration/Assets/WebPlayerTemplates/uiresources/MobileInput/javascript/coherent.js b/UnityIntegration/Assets/WebPlayerTemplates/uiresources/MobileInput/javascript/coherent.js index 0f6115c..191b501 100644 --- a/UnityIntegration/Assets/WebPlayerTemplates/uiresources/MobileInput/javascript/coherent.js +++ b/UnityIntegration/Assets/WebPlayerTemplates/uiresources/MobileInput/javascript/coherent.js @@ -238,19 +238,31 @@ return promise; }; + + var simpleEvent; - var simpleEvent = function (type) { - return function () { - var prefix = ['coherent-js', type], - frame = document.createElement('iframe'); - prefix.push.apply(prefix, arguments); - frame.src = prefix.join(':'); - frame.width = '1px'; - frame.height = '1px'; - document.documentElement.appendChild(frame); - frame.parentNode.removeChild(frame); + if (window.__couiAndroid == undefined) { + simpleEvent = function (type) { + return function () { + var prefix = ['coherent-js', type], + frame = document.createElement('iframe'); + prefix.push.apply(prefix, arguments); + frame.src = prefix.join(':'); + frame.width = '1px'; + frame.height = '1px'; + document.documentElement.appendChild(frame); + frame.parentNode.removeChild(frame); + }; }; - }; + } else { + simpleEvent = function (type) { + return function () { + var prefix = ['coherent-js', type]; + prefix.push.apply(prefix, arguments); + __couiAndroid.triggerNativeCode(prefix.join(':')); + }; + }; + } if (engine === undefined) { @@ -376,30 +388,53 @@ }; } - var frame = document.createElement('iframe'); + var createSendMessage; + var createTriggerEvent; + + if (window.__couiAndroid == undefined) { + + var frame = document.createElement('iframe'); + + createSendMessage = function () { + var prefix = 'coherent-js:c:'; + return function () { + var json = JSON.stringify(toArray.call(arguments, 2)); + frame.src = prefix + arguments[0] + ':' + arguments[1] + ':' + encodeURIComponent(json); + frame.width = '1px'; + frame.height = '1px'; + document.documentElement.appendChild(frame); + frame.parentNode.removeChild(frame); + }; + }; + createTriggerEvent = function () { + var prefix = 'coherent-js:e:'; + return function () { + var json = JSON.stringify(toArray.call(arguments, 1)); + frame.src = prefix + arguments[0] + ':' + encodeURIComponent(json); + frame.width = '1px'; + frame.height = '1px'; + document.documentElement.appendChild(frame); + frame.parentNode.removeChild(frame); + }; + }; - var createSendMessage = function () { - var prefix = 'coherent-js:c:'; - return function () { - var json = JSON.stringify(toArray.call(arguments, 2)); - frame.src = prefix + arguments[0] + ':' + arguments[1] + ':' + encodeURIComponent(json); - frame.width = '1px'; - frame.height = '1px'; - document.documentElement.appendChild(frame); - frame.parentNode.removeChild(frame); + } else { + createSendMessage = function () { + var prefix = 'coherent-js:c:'; + return function () { + var json = JSON.stringify(toArray.call(arguments, 2)); + __couiAndroid.triggerNativeCode(prefix + arguments[0] + ':' + arguments[1] + ':' + encodeURIComponent(json)); + }; }; - }; - var createTriggerEvent = function () { - var prefix = 'coherent-js:e:'; - return function () { - var json = JSON.stringify(toArray.call(arguments, 1)); - frame.src = prefix + arguments[0] + ':' + encodeURIComponent(json); - frame.width = '1px'; - frame.height = '1px'; - document.documentElement.appendChild(frame); - frame.parentNode.removeChild(frame); + + createTriggerEvent = function () { + var prefix = 'coherent-js:e:'; + return function () { + var json = JSON.stringify(toArray.call(arguments, 1)); + __couiAndroid.triggerNativeCode(prefix + arguments[0] + ':' + encodeURIComponent(json)); + }; }; - }; + } engine.SendMessage = createSendMessage(); engine.TriggerEvent = createTriggerEvent();