[codenameone-discussions] Re: IOS builds failing 1/3/2018

2018-01-04 Thread Shai Almog
OK, but again you should reign this in... This barely leaves time for the 
actual build and when you do a release build for two platforms you will 
just run out of time.

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/39d738bc-d101-466f-8cec-1db84cdc154e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [codenameone-discussions] Error registering javascript callbacks on IOS (Android works fine)

2018-01-04 Thread Steve Hannah
On Thu, Jan 4, 2018 at 1:03 PM,  wrote:

> Thanks Steve.
>
> is possible to make a synchronous call from javascript to java ?
>

No.  Javascript is single-threaded and it runs on its own thread.  There is
no way to do a synchronous call out of Javascript without locking it up.

Best regards

Steve

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/CAGOYrKVdhgcza6XAVmUrjxV6iXUPbq07ZV%3DUZXEhPJahHpMT6Q%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.


Re: [codenameone-discussions] Error registering javascript callbacks on IOS (Android works fine)

2018-01-04 Thread kandy
Thanks Steve.

is possible to make a synchronous call from javascript to java ?

Best Regards Kandy



El jueves, 4 de enero de 2018, 21:04:09 (UTC+1), Steve Hannah escribió:
>
> Calls from javascript to java must be asynchronous.   The way to do this 
> is to:
>
> // You want javascript to be able to call into java AND receive a result.
> // From the Java side, you would add a callback
> bc.addJSCallback("window.myfunc=function(arg){callback.onSuccess(arg)}", 
> res->{
>  String[] parts = Util.split(res.toString(), " ");
>  String arg = parts[0];
>  String callbackFunc = parts[1];
>  String result = doSomethingWithArg(arg);
>  bc.execute(callbackFunc+"("+result+")");
> });
>
> // On the javascript side you could then do something like this
>
> window.myCallback = function(arg) {
>// Do something with the argument
> }
> myfunc("myarg window.myCallback");
>
> This is a simplistic example that passes a a message from javascript to 
> java by placing the "contents" of the message at the beginning, and then a 
> callback to call in javascript after the space.  If you need to send 
> arbitrary strings, then this scheme will fail - but you could just as 
> easily send a JSON message from javascript that includes some content and 
> information about where to send it (the callback information), which would 
> be more resilient to argument formatting.
>
> Steve
>
> On Thu, Jan 4, 2018 at 11:24 AM,  wrote:
>
>> Thanks Steve
>>
>> on the point 1 I need to call from Javascript to Java, and return from 
>> Java to Javascript a response.
>>
>> My doubt is how do I have to do it in Java and in Javascritp, I searched 
>> examples in code of GoolgeMaps Implementation but I didn't find any help.
>>
>> Best Regards Kandy
>>
>> On Thursday, January 4, 2018 at 3:53:19 PM UTC+1, Steve Hannah wrote:
>>
>>> The best examples right now are in the GoogleMaps cn1lib
>>>
>>> https://github.com/codenameone/codenameone-google-maps/blob/master/GoogleMaps/src/com/codename1/googlemaps/MapContainer.java
>>>
>>> There are also samples in the unit tests:
>>>
>>> https://github.com/codenameone/CodenameOne/blob/master/tests/core/test/com/codename1/ui/JavascriptTests.java
>>>
>>> The unit tests all use the executeAndWait() wrappers for convenience, 
>>> but these carry the baggage of invokeAndBlock - to make it synchronous.  
>>> Best for performance to try to use async versions whenever possible.
>>>
>>> 1) call from Javascritp to java and receive a response from java
>>>
>>>
>>> First add your callback:
>>> bc.addJSCallback("window.app.mycb=function(arg){callback.onSuccess(arg)}", 
>>> arg->{
>>>  // Log.p("The result was "+arg.getInt());
>>> }); 
>>>
>>> Then on the javascript side, you can call "window.app.mycb(1+2)", and 
>>> your java callback will be called.
>>>
>>> 2) call from java to javascript and receive a response from javascript
>>>
>>>
>>> Async style:
>>>
>>> bc.execute("callback.onSuccess(1+2)", res->{
>>>  Log.p("The result was "+res.getInt());
>>> }); 
>>>
>>> Sync Style:
>>>
>>> int result = bc.executeAndWait("callback.onSuccess(1+2)").getInt();
>>>
>>>
>>> If you need to pass parameters to your javascript code, there are 
>>> variants that do that and handle escaping strings properly.
>>>
>>> e.g.
>>>
>>> bc.execute("callback.onSuccess(${0}+${1})", new Object[]{1, 2}, res->{
>>> Log.p("The result was "+res.getInt());  // Should be 3
>>> });
>>>
>>> If you need to call methods on a Javascript object, you can also create 
>>> a java "Proxy" object to make this a bit easier.  E.g.
>>>
>>> JSProxy window = bc.createJSProxy("window");
>>> int height = window.getAndWait("innerHeight").getInt();
>>>
>>>
>>> Steve
>>>
>>> On Thu, Jan 4, 2018 at 6:12 AM,  wrote:
>>>
 Hi Steve

 where can I found documentation or examples to addJSCallback?

 I can be able to:

 call from javascritp to java

 browserComponent.addJSCallback(
 "window.app = {isActive: function() {callback.onSuccess()}}", 
 value -> {
 call from java to javacript and send parameters

 browserComponent.execute("controlPopUp ('"+ relojReservaValueString 
 +"', "+ reservationState +","+ vehicleLockState +")");


 Now I need,

 1) call from Javascritp to java and receive a response from java

 2) call from java to javascript and receive a response from javascritp


 Can you help me ?

 Best Regards Kandy

 On Wednesday, January 3, 2018 at 8:05:56 PM UTC+1, ka...@bitxenio.com 
 wrote:
>
> Hi Steve:
>
>Indeed, upon further inspection you're so right! We've just 
> detected a problem with our SVN workflow in which we keep updating the 
> "libVersion" property on codenameone.properties between dev machines 
> WITHOUT updating the libs at the same time, so we were keeping old libs 
> and 
> preventing the proper update procedure.
>
>

Re: [codenameone-discussions] Error registering javascript callbacks on IOS (Android works fine)

2018-01-04 Thread Steve Hannah
Calls from javascript to java must be asynchronous.   The way to do this is
to:

// You want javascript to be able to call into java AND receive a result.
// From the Java side, you would add a callback
bc.addJSCallback("window.myfunc=function(arg){callback.onSuccess(arg)}",
res->{
 String[] parts = Util.split(res.toString(), " ");
 String arg = parts[0];
 String callbackFunc = parts[1];
 String result = doSomethingWithArg(arg);
 bc.execute(callbackFunc+"("+result+")");
});

// On the javascript side you could then do something like this

window.myCallback = function(arg) {
   // Do something with the argument
}
myfunc("myarg window.myCallback");

This is a simplistic example that passes a a message from javascript to
java by placing the "contents" of the message at the beginning, and then a
callback to call in javascript after the space.  If you need to send
arbitrary strings, then this scheme will fail - but you could just as
easily send a JSON message from javascript that includes some content and
information about where to send it (the callback information), which would
be more resilient to argument formatting.

Steve

On Thu, Jan 4, 2018 at 11:24 AM,  wrote:

> Thanks Steve
>
> on the point 1 I need to call from Javascript to Java, and return from
> Java to Javascript a response.
>
> My doubt is how do I have to do it in Java and in Javascritp, I searched
> examples in code of GoolgeMaps Implementation but I didn't find any help.
>
> Best Regards Kandy
>
> On Thursday, January 4, 2018 at 3:53:19 PM UTC+1, Steve Hannah wrote:
>
>> The best examples right now are in the GoogleMaps cn1lib
>> https://github.com/codenameone/codenameone-google-maps/blob/
>> master/GoogleMaps/src/com/codename1/googlemaps/MapContainer.java
>>
>> There are also samples in the unit tests:
>> https://github.com/codenameone/CodenameOne/blob/master/
>> tests/core/test/com/codename1/ui/JavascriptTests.java
>>
>> The unit tests all use the executeAndWait() wrappers for convenience, but
>> these carry the baggage of invokeAndBlock - to make it synchronous.  Best
>> for performance to try to use async versions whenever possible.
>>
>> 1) call from Javascritp to java and receive a response from java
>>
>>
>> First add your callback:
>> bc.addJSCallback("window.app.mycb=function(arg){callback.onSuccess(arg)}",
>> arg->{
>>  // Log.p("The result was "+arg.getInt());
>> });
>>
>> Then on the javascript side, you can call "window.app.mycb(1+2)", and
>> your java callback will be called.
>>
>> 2) call from java to javascript and receive a response from javascript
>>
>>
>> Async style:
>>
>> bc.execute("callback.onSuccess(1+2)", res->{
>>  Log.p("The result was "+res.getInt());
>> });
>>
>> Sync Style:
>>
>> int result = bc.executeAndWait("callback.onSuccess(1+2)").getInt();
>>
>>
>> If you need to pass parameters to your javascript code, there are
>> variants that do that and handle escaping strings properly.
>>
>> e.g.
>>
>> bc.execute("callback.onSuccess(${0}+${1})", new Object[]{1, 2}, res->{
>> Log.p("The result was "+res.getInt());  // Should be 3
>> });
>>
>> If you need to call methods on a Javascript object, you can also create a
>> java "Proxy" object to make this a bit easier.  E.g.
>>
>> JSProxy window = bc.createJSProxy("window");
>> int height = window.getAndWait("innerHeight").getInt();
>>
>>
>> Steve
>>
>> On Thu, Jan 4, 2018 at 6:12 AM,  wrote:
>>
>>> Hi Steve
>>>
>>> where can I found documentation or examples to addJSCallback?
>>>
>>> I can be able to:
>>>
>>> call from javascritp to java
>>>
>>> browserComponent.addJSCallback(
>>> "window.app = {isActive: function() {callback.onSuccess()}}",
>>> value -> {
>>> call from java to javacript and send parameters
>>>
>>> browserComponent.execute("controlPopUp ('"+ relojReservaValueString
>>> +"', "+ reservationState +","+ vehicleLockState +")");
>>>
>>>
>>> Now I need,
>>>
>>> 1) call from Javascritp to java and receive a response from java
>>>
>>> 2) call from java to javascript and receive a response from javascritp
>>>
>>>
>>> Can you help me ?
>>>
>>> Best Regards Kandy
>>>
>>> On Wednesday, January 3, 2018 at 8:05:56 PM UTC+1, ka...@bitxenio.com
>>> wrote:

 Hi Steve:

Indeed, upon further inspection you're so right! We've just detected
 a problem with our SVN workflow in which we keep updating the "libVersion"
 property on codenameone.properties between dev machines WITHOUT updating
 the libs at the same time, so we were keeping old libs and preventing the
 proper update procedure.

We now see the deprecated warnings and the new code in
 BrowserComponent. Will work from here.

 Kind regards,
 Miguelanxo.

 On Wednesday, January 3, 2018 at 7:09:50 PM UTC+1, Steve Hannah wrote:
>
> I just confirmed with a fresh project.  The changes are there.  I'm
> not sure why you're not picking them up.  Is your project using 

Re: [codenameone-discussions] Error registering javascript callbacks on IOS (Android works fine)

2018-01-04 Thread kandy
Thanks Steve

on the point 1 I need to call from Javascript to Java, and return from Java 
to Javascript a response.

My doubt is how do I have to do it in Java and in Javascritp, I searched 
examples in code of GoolgeMaps Implementation but I didn't find any help.

Best Regards Kandy

On Thursday, January 4, 2018 at 3:53:19 PM UTC+1, Steve Hannah wrote:
>
> The best examples right now are in the GoogleMaps cn1lib
>
> https://github.com/codenameone/codenameone-google-maps/blob/master/GoogleMaps/src/com/codename1/googlemaps/MapContainer.java
>
> There are also samples in the unit tests:
>
> https://github.com/codenameone/CodenameOne/blob/master/tests/core/test/com/codename1/ui/JavascriptTests.java
>
> The unit tests all use the executeAndWait() wrappers for convenience, but 
> these carry the baggage of invokeAndBlock - to make it synchronous.  Best 
> for performance to try to use async versions whenever possible.
>
> 1) call from Javascritp to java and receive a response from java
>
>
> First add your callback:
> bc.addJSCallback("window.app.mycb=function(arg){callback.onSuccess(arg)}", 
> arg->{
>  // Log.p("The result was "+arg.getInt());
> }); 
>
> Then on the javascript side, you can call "window.app.mycb(1+2)", and your 
> java callback will be called.
>
> 2) call from java to javascript and receive a response from javascript
>
>
> Async style:
>
> bc.execute("callback.onSuccess(1+2)", res->{
>  Log.p("The result was "+res.getInt());
> }); 
>
> Sync Style:
>
> int result = bc.executeAndWait("callback.onSuccess(1+2)").getInt();
>
>
> If you need to pass parameters to your javascript code, there are variants 
> that do that and handle escaping strings properly.
>
> e.g.
>
> bc.execute("callback.onSuccess(${0}+${1})", new Object[]{1, 2}, res->{
> Log.p("The result was "+res.getInt());  // Should be 3
> });
>
> If you need to call methods on a Javascript object, you can also create a 
> java "Proxy" object to make this a bit easier.  E.g.
>
> JSProxy window = bc.createJSProxy("window");
> int height = window.getAndWait("innerHeight").getInt();
>
>
> Steve
>
> On Thu, Jan 4, 2018 at 6:12 AM,  wrote:
>
>> Hi Steve
>>
>> where can I found documentation or examples to addJSCallback?
>>
>> I can be able to:
>>
>> call from javascritp to java
>>
>> browserComponent.addJSCallback(
>> "window.app = {isActive: function() {callback.onSuccess()}}", 
>> value -> {
>> call from java to javacript and send parameters
>>
>> browserComponent.execute("controlPopUp ('"+ relojReservaValueString +"', 
>> "+ reservationState +","+ vehicleLockState +")");
>>
>>
>> Now I need,
>>
>> 1) call from Javascritp to java and receive a response from java
>>
>> 2) call from java to javascript and receive a response from javascritp
>>
>>
>> Can you help me ?
>>
>> Best Regards Kandy
>>
>> On Wednesday, January 3, 2018 at 8:05:56 PM UTC+1, ka...@bitxenio.com 
>> wrote:
>>>
>>> Hi Steve:
>>>
>>>Indeed, upon further inspection you're so right! We've just detected 
>>> a problem with our SVN workflow in which we keep updating the "libVersion" 
>>> property on codenameone.properties between dev machines WITHOUT updating 
>>> the libs at the same time, so we were keeping old libs and preventing the 
>>> proper update procedure.
>>>
>>>We now see the deprecated warnings and the new code in 
>>> BrowserComponent. Will work from here.
>>>
>>> Kind regards,
>>> Miguelanxo. 
>>>
>>> On Wednesday, January 3, 2018 at 7:09:50 PM UTC+1, Steve Hannah wrote:

 I just confirmed with a fresh project.  The changes are there.  I'm not 
 sure why you're not picking them up.  Is your project using the libs at 
 the 
 default location (lib/CodenameOne.jar and JavaSE.jar) or have you adjusted 
 the classpath for the project.

 Steve

 On Wed, Jan 3, 2018 at 10:02 AM,  wrote:

> Hi Steve
>
> I already did the project libs update, but didn't help. My library 
> date is 30/12/2017, when I do the update it says "Your proyect Libs are 
> up 
> to date", we are blocked on the development of our App to IOS.
>
> Please help us.
>
> Best Regards
> Kandy
>
> On Wednesday, January 3, 2018 at 5:44:23 PM UTC+1, Steve Hannah wrote:
>
>>
>> On Wed, Jan 3, 2018 at 8:35 AM,  wrote:
>>
>>> Hello:
>>>
>>> How can we use that new interface? There's no documentation and 
>>> our current lib doesn't expose said addJSCallback() yet (and updating 
>>> c1 
>>> libs didn't help).
>>>
>> You need to update your project libs.  It should be there (just 
>> tested on a project here).  (I.e. Project Properties > Update Project 
>> Libs 
>> .. not "update cn1libs")
>>  
>>
>>> Also, is the fix already available in the build servers? 
>>>
>> No.  It will be up in the next build server update on Friday.
>>
>> Steve
>>  

Re: [codenameone-discussions] Error registering javascript callbacks on IOS (Android works fine)

2018-01-04 Thread kandy
Hi Steve

where can I found documentation or examples to addJSCallback?

I can be able to:

call from javascritp to java

browserComponent.addJSCallback(
"window.app = {isActive: function() {callback.onSuccess()}}", 
value -> {
call from java to javacript and send parameters

browserComponent.execute("controlPopUp ('"+ relojReservaValueString +"', "+ 
reservationState +","+ vehicleLockState +")");


Now I need,

1) call from Javascritp to java and receive a response from java

2) call from java to javascript and receive a response from javascritp


Can you help me ?

Best Regards Kandy

On Wednesday, January 3, 2018 at 8:05:56 PM UTC+1, ka...@bitxenio.com wrote:
>
> Hi Steve:
>
>Indeed, upon further inspection you're so right! We've just detected a 
> problem with our SVN workflow in which we keep updating the "libVersion" 
> property on codenameone.properties between dev machines WITHOUT updating 
> the libs at the same time, so we were keeping old libs and preventing the 
> proper update procedure.
>
>We now see the deprecated warnings and the new code in 
> BrowserComponent. Will work from here.
>
> Kind regards,
> Miguelanxo. 
>
> On Wednesday, January 3, 2018 at 7:09:50 PM UTC+1, Steve Hannah wrote:
>>
>> I just confirmed with a fresh project.  The changes are there.  I'm not 
>> sure why you're not picking them up.  Is your project using the libs at the 
>> default location (lib/CodenameOne.jar and JavaSE.jar) or have you adjusted 
>> the classpath for the project.
>>
>> Steve
>>
>> On Wed, Jan 3, 2018 at 10:02 AM,  wrote:
>>
>>> Hi Steve
>>>
>>> I already did the project libs update, but didn't help. My library date 
>>> is 30/12/2017, when I do the update it says "Your proyect Libs are up to 
>>> date", we are blocked on the development of our App to IOS.
>>>
>>> Please help us.
>>>
>>> Best Regards
>>> Kandy
>>>
>>> On Wednesday, January 3, 2018 at 5:44:23 PM UTC+1, Steve Hannah wrote:
>>>

 On Wed, Jan 3, 2018 at 8:35 AM,  wrote:

> Hello:
>
> How can we use that new interface? There's no documentation and 
> our current lib doesn't expose said addJSCallback() yet (and updating c1 
> libs didn't help).
>
 You need to update your project libs.  It should be there (just tested 
 on a project here).  (I.e. Project Properties > Update Project Libs .. not 
 "update cn1libs")
  

> Also, is the fix already available in the build servers? 
>
 No.  It will be up in the next build server update on Friday.

 Steve
  

>
> Kind regards,
> Kandy.
>
>
> On Wednesday, January 3, 2018 at 2:47:04 PM UTC+1, Steve Hannah wrote:
>>
>> This looks like a race condition that has been there for a while.  I 
>> have just committed a fix for it here
>>
>> https://github.com/codenameone/CodenameOne/commit/783ac2828409aa747103a35001b4886e24944484
>>
>> With the last update, however, the com.codename1.javascript package 
>> is now deprecated in favour of a new async API that is incorporated 
>> directly into the BrowserComponent class.  I recommend migrating over to 
>> this new API for new code, as it will produce much better performance 
>> (no 
>> hidden invokeAndBlock under the hood - except in xxxAndWait() methods).
>>
>> Using the new API, your code would become:
>>
>> bc.addJSCallback("window.checkfoxClickedCallback ={setChecked: 
>> function(){ callback.onSuccess(null)}}", r->{
>> Log.p("->checkboxClickedCallback.setChecked()");
>> contexto.mostrarMensaje("checkboxClickedCallback.setChecked()");
>> });
>> bc.addJSCallback("window.okButtonClickedCallback = {showMap: 
>> function() { callback.onSuccess(null)}}", r->{
>>  Log.p("->okButtonClickedCallback.showMap()");
>>  contexto.mostrarMensaje("okButtonClickedCallback.showMap()");
>> });
>>
>> Notice, with this new syntax, you reference the java callback 
>> explicitly in the javascript code via the "callback" variable, which, in 
>> Javascript, contains 2 methods: onSuccess(arg), and onError(message, 
>> code).
>>
>> Steve
>>
>>
>>
>>
>> On Wed, Jan 3, 2018 at 5:09 AM,  wrote:
>>
>>> Hello:
>>>
>>> Since the last codename1 libary update we've been having 
>>> problems with the BrowserComponent on iOS. We've narrowed down the 
>>> problem 
>>> to the callback registration process (which gets executed on the 
>>> BrowserComponent onLoad callback). We register two functions, but only 
>>> the 
>>> second one can be invoked from javascript. The first one gets 
>>> registered ok 
>>> (we can see its code from the javascript side) but fails to execute on 
>>> iOS 
>>> (in Android and the simulator works fine). We tried a lot of 
>>> permutations, 
>>> and