Re: [codenameone-discussions] Re: BrowserComponent.execute() that works into the simulator but fails on a real android device

2018-04-10 Thread Thomas
Changing const socket to window.socket solved the issue. Thanks a lot!
Regarding the javascript logging, it is partially working on the device now 
(so part of the problem seems to have been linked to the const socket 
instead of window.socket because changing that changed the javascript 
logging from zero to some). However, it seems that if the frequency of 
logging events is too high, only the last logging event is passed to the 
CN1 logger.  For example, in my onload browsercomponent event, I have two 
javascript log calls: internalBrowser.execute("logger.log(\"SocketIO bridge 
init\")"); and internalBrowser.execute("logger.log(\"SocketIO bridge 
started\")"); . But only the latest is thrown by CN1 in my adb logcat. 
Now, if I add the new js command: logger.log(\"emit "+eventName+"\"); 
before my js socket.emit() function , this is this emit hello log only that 
is thrown by CN1 in the adb logcat (because in my MyApplication class I 
have a socket.emit("hello"...) call that comes just after the socket 
initialisation (that will call the browsercomponent onload event)), the 
"SocketIO 
bridge started" log is not shown anymore. If I click on my emit event 
button, the "emit click" log is displayed though, meaning that the js 
logger is still functionnal (it is only if the frequency of log events is 
too high that there is an issue with only the latest log event beeing kept)


On Monday, April 9, 2018 at 1:31:15 PM UTC+2, Steve Hannah wrote:
>
> Just looking at your code.  Not sure why logging isn't working for you, 
> but this code which instantiates your socket, may be problematic:
>
> internalBrowser.execute("const socket = io('"+server_url+"')");
>
> There is no guarantee that the Javascript expression executed in 
> BrowserComponent.execute() is run in the global context.  It may be run 
> inside the context of an anonymous function, so your "socket" variable 
> won't be accessible from anywhere else. 
>
> I would change it to
>
> internalBrowser.execute("window.socket = io('"+server_url+"')");
>
> Steve
>
>
> On Fri, Apr 6, 2018 at 9:29 PM, Shai Almog  > wrote:
>
>> Steve is better at these things so I'll leave it to him. I do agree that 
>> debugging JS <-> Java is a pain in the neck. We made several attempts at 
>> simplifying it but mostly focusing around debugging on the simulator.
>>
>> Is it possible that this is failing due to same origin? 
>> I doubt that's the case if you opened the connection already but maybe 
>> injected code impacts this?
>>
>> -- 
>> 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/b06c16a5-342f-4ee8-8751-1a97a66c56ff%40googlegroups.com
>>  
>> 
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> Steve Hannah
> Software Developer
> Codename One
> http://www.codenameone.com
>

-- 
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/6398df82-1bd8-4d1d-aedf-ea3f76642202%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [codenameone-discussions] Re: BrowserComponent.execute() that works into the simulator but fails on a real android device

2018-04-09 Thread Steve Hannah
Just looking at your code.  Not sure why logging isn't working for you, but
this code which instantiates your socket, may be problematic:

internalBrowser.execute("const socket = io('"+server_url+"')");

There is no guarantee that the Javascript expression executed in
BrowserComponent.execute() is run in the global context.  It may be run
inside the context of an anonymous function, so your "socket" variable
won't be accessible from anywhere else.

I would change it to

internalBrowser.execute("window.socket = io('"+server_url+"')");

Steve


On Fri, Apr 6, 2018 at 9:29 PM, Shai Almog  wrote:

> Steve is better at these things so I'll leave it to him. I do agree that
> debugging JS <-> Java is a pain in the neck. We made several attempts at
> simplifying it but mostly focusing around debugging on the simulator.
>
> Is it possible that this is failing due to same origin?
> I doubt that's the case if you opened the connection already but maybe
> injected code impacts this?
>
> --
> 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/b06c16a5-342f-4ee8-8751-
> 1a97a66c56ff%40googlegroups.com
> 
> .
>
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Steve Hannah
Software Developer
Codename One
http://www.codenameone.com

-- 
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/CAGOYrKUeMRTpZYNyAic4crTTc%2BB1hpTMWweSPADTZMWqSRP1BA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.


Re: [codenameone-discussions] Re: BrowserComponent.execute() that works into the simulator but fails on a real android device

2018-04-06 Thread Shai Almog
Steve is better at these things so I'll leave it to him. I do agree that 
debugging JS <-> Java is a pain in the neck. We made several attempts at 
simplifying it but mostly focusing around debugging on the simulator.

Is it possible that this is failing due to same origin? 
I doubt that's the case if you opened the connection already but maybe 
injected code impacts this?

-- 
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/b06c16a5-342f-4ee8-8751-1a97a66c56ff%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [codenameone-discussions] Re: BrowserComponent.execute() that works into the simulator but fails on a real android device

2018-04-06 Thread Thomas
Thanks. I tested and the issue I had with the null origin is now gone. 
Meaning that internalBrowser.setProperty("AllowUniversalAccessFromFileURLs",
 Boolean.TRUE); is now probably correctly taken into account. 
However, I still can't make socket.io to work when using it on a real 
device.
First issue I have is that anything I log in my javascript logger (created 
as a JSobject using JavascriptContext, see my code on github if necessary) 
is not output in the device log (whereas it works fine in the simulator). 
Usual CN1 logs (from Log.p() calls from within the java code) are though. 
So this is kind of anoying to debug properly (as I can't correctly track 
what is happening in the javascript part).
The second issue is that any message I try to send from my CN1 app to my 
server never reach it. On my server log, I can see that the CN1 app now 
correctly create the handshake with the server and seems to correctly 
update the communication from XHR long polling transport to websockets. 
However, any new message that I try to send from the CN1 app to the server 
using this socket just never reach the server (but the connection seems to 
be correctly maintained open as, if I kill the CN1 app, I can see a 
deconnection event to be logged on my server). Actually messages I send 
with socket.io.emit are probably never send (but without a javascript 
logger difficult/impossible to track it down...)

I checked my device adb logcat and here is what I have:

D/CN1SocketIOTest(16239): [EDT] 0:0:0,0 - Codename One revisions: 
d4219a1b829854d15136d1fa3166990e01f1b197
I/ActivityManager( 2315): Displayed 
com.tbdlab.cn1socketiotest/.MyApplicationStub: +400ms
I/Timeline( 2315): Timeline: Activity_windows_visible id: 
ActivityRecord{1f2916fc u0 com.tbdlab.cn1socketiotest/.MyApplicationStub 
t1811} time:686055479
D/CN1SocketIOTest(16239): [EDT] 0:0:0,2 - WARNING: Theme sets the 
commandBehavior constant which is deprecated.  Please update the theme to 
NOT include this theme constant.  Using commandBehavior may cause your app 
to perform in unexpected ways.  In particular, using SIDE command behavior 
in conjunction with Toolbar.setOnTopSideMenu(true) may result in runtime 
exceptions.
D/CN1SocketIOTest(16239): [EDT] 0:0:0,3 - WARNING: 
Display.setCommandBehavior() is deprecated, Using it may result in 
unexpected behaviour. In particular, using COMMAND_BEHAVIOR_SIDE_NAVIGATION 
in conjunction with Toolbar.setOnTopSideMenu(true) may result in runtime 
errors.
D/CN1SocketIOTest(16239): [EDT] 0:0:0,8 - CN1 App started
I/GoogleInputMethod(28089): onFinishInput() : Dummy InputConnection bound
I/GoogleInputMethod(28089): onStartInput() : Dummy InputConnection bound
I/Timeline(16239): Timeline: Activity_idle id: 
android.os.BinderProxy@3b0a177b time:686055495
W/linker  (16239): 
/data/app/com.google.android.webview-1/lib/arm64/libwebviewchromium.so: 
unused DT entry: type 0x6ffe arg 0x16450
W/linker  (16239): 
/data/app/com.google.android.webview-1/lib/arm64/libwebviewchromium.so: 
unused DT entry: type 0x6fff arg 0x3
D/Codename One(16239): sizechanged: 720 1230 
com.codename1.impl.android.i@2fd05d47
I/WebViewFactory(16239): Loading com.google.android.webview version 
65.0.3325.109 (code 332510950)
I/art (16239): Rejecting re-init on previously-failed class 
java.lang.Class
I/art (16239): Rejecting re-init on previously-failed class 
java.lang.Class
I/art (16239): Rejecting re-init on previously-failed class 
java.lang.Class
I/art (16239): Rejecting re-init on previously-failed class 
java.lang.Class
I/cr_LibraryLoader(16239): Time to load native libraries: 0 ms (timestamps 
5565-5565)
I/chromium(16239): [INFO:library_loader_hooks.cc(36)] Chromium logging 
enabled: level = 0, default verbosity = 0
I/cr_LibraryLoader(16239): Expected native library version number 
"65.0.3325.109", actual native library version number "65.0.3325.109"
I/cr_BrowserStartup(16239): Initializing chromium process, 
singleProcess=true
I/cr_base (16239): Android Locale: en_US requires .pak files: []
I/art (16239): Rejecting re-init on previously-failed class 
java.lang.Class
I/art (16239): Rejecting re-init on previously-failed class 
java.lang.Class
I/art (16239): Rejecting re-init on previously-failed class 
java.lang.Class
I/art (16239): Rejecting re-init on previously-failed class 
java.lang.Class
I/art (16239): Rejecting re-init on previously-failed class 
java.lang.Class
I/art (16239): Rejecting re-init on previously-failed class 
java.lang.Class
D/ConnectivityService( 2315): listenForNetwork for NetworkRequest [ 
id=3794, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED] ]
D/ConnectivityService( 2315): handleRegisterNetworkRequest checking 
NetworkAgentInfo [WIFI () - 175]
D/ConnectivityManager.CallbackHandler(16239): CM callback handler got msg 
524290
D/ConnectivityService( 2315): apparently satisfied.  currentScore=100
I/art (16239): Rejecting re-init on previously-failed class 
ja

Re: [codenameone-discussions] Re: BrowserComponent.execute() that works into the simulator but fails on a real android device

2018-04-05 Thread Shai Almog
FYI this is deployed and should work now.

-- 
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/a07c2223-b7d9-4681-97a7-01365ff01568%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [codenameone-discussions] Re: BrowserComponent.execute() that works into the simulator but fails on a real android device

2018-04-05 Thread Steve Hannah
There was a bug that was causing setProperty() settings to be ignored.  I
have fixed it in Git.
https://github.com/codenameone/CodenameOne/commit/10e981d67ee60c84825c6c8bfd068cba872d7eb6

Should be available in the update tomorrow.

A workaround would be to use a local web server to serve the file and
connect to it using http://localhost/... rather than using the jar://
(file://) protocol as this won't be subject to the same security
constraints.  You can create a local web server using this module:
https://github.com/shannah/CN1Webserver

Steve



On Thu, Apr 5, 2018 at 10:04 AM, Thomas  wrote:

> Unfortunately this isn't working. I still have the same error message.
>
> I put my test code on github so you guys can have look if you want:
> https://github.com/ramsestom/CN1SocketIO_test
>
>
> On Thursday, April 5, 2018 at 1:25:47 PM UTC+2, Steve Hannah wrote:
>>
>> Try calling
>>
>> myBrowserComponent.setProperty("AllowUniversalAccessFromFileURLs",
>> Boolean.TRUE);
>>
>> (on the BrowserComponent)
>>
>> Before loading the page.
>> Ref: https://stackoverflow.com/a/13740831/2935174
>>
>>
>>
>> On Wed, Apr 4, 2018 at 9:36 PM, Thomas  wrote:
>>
>>> I tested my code again today (I was preparing something to post for you
>>> on github) and surprise!: The CN1 app was able to communicate with my
>>> socket.io server and I the javascript logs where correctly output in my
>>> device adb logcat (meaning BrowserComponent.execute() javascript calls
>>> where correctly executed ). I really don't know why it did not work
>>> yesterday and does today as I didn't change anything in my code (either in
>>> the CN1 app or the server). That is a complete mystery.
>>> Anyway, I am now facing another issue.  My CN1 app is now able to send
>>> the socket.io handshake request to my server (that correctly receved
>>> it, as I can see in it's log) but the handshake is unable to succeed due to
>>> a CORS issue (only on the device, still works on the simulator. And I must
>>> say that the simulator and the server are run on 2 different PCs (and have
>>> 2 different IPs) so the situation is strictly the same in what concerns
>>> CORS when run on the simulator or on my real android device).
>>> In the adb logcat, I can see this error message:
>>>  [main] 0:0:2,36 - [ERROR] Failed to load http://192.168.8.100:3030/sock
>>> et.io/?EIO=3&transport=polling&t=MAJ14W8: Response to preflight request
>>> doesn't pass access control check: The 'Access-Control-Allow-Origin' header
>>> has a value 'null' that is not equal to the supplied origin. Origin 'null'
>>> is therefore not allowed access. On line 0 of file:///android_asset/socket_i
>>> o.html
>>> (192.168.8.100:3030 being my server url  and socket_io.html my embeded
>>> CN1 asset that loads the socket.io.js embeded asset script)
>>>
>>> This is kind of strange as if I call http://192.168.8.100:3030
>>> /socket.io/?EIO=3&transport=polling&t=MAJ14W8 inside my chrome
>>> browser,  in the response header I can see Access-Control-Allow-Origin: *
>>> so I don't get it why the BrowserComponent has a 'null' value for it...
>>> Do you already experienced using a javascript lib with CORS permissions
>>> inside the BrowserComponent on android?
>>>
>>> I can post something on github for you to test if you want to (and have
>>> the time to look at it) but as my socket.io server is not public yet,
>>> you would also have to run a small socket.io server (or to find a
>>> public one) to be able to see the issue (I can post the code of a small
>>> soket.io server to use with the test CN1 app but it would requiere you
>>> to install node.js)
>>>
>>> --
>>> 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/grou
>>> p/codenameone-discussions.
>>> To view this discussion on the web visit https://groups.google.com/d/ms
>>> gid/codenameone-discussions/55d571c9-f7b7-41ce-b64f-ec120c0a
>>> ecd9%40googlegroups.com
>>> 
>>> .
>>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>>
>> --
>> Steve Hannah
>> Software Developer
>> Codename One
>> http://www.codenameone.com
>>
> --
> 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/c55da377-d38b-43bf-831b-
> 5dbc455ad4de%40googlegroups.com
> 

Re: [codenameone-discussions] Re: BrowserComponent.execute() that works into the simulator but fails on a real android device

2018-04-05 Thread Thomas
Unfortunately this isn't working. I still have the same error message.

I put my test code on github so you guys can have look if you 
want: https://github.com/ramsestom/CN1SocketIO_test


On Thursday, April 5, 2018 at 1:25:47 PM UTC+2, Steve Hannah wrote:
>
> Try calling
>
> myBrowserComponent.setProperty("AllowUniversalAccessFromFileURLs", 
> Boolean.TRUE);
>
> (on the BrowserComponent)
>
> Before loading the page.
> Ref: https://stackoverflow.com/a/13740831/2935174
>
>
>
> On Wed, Apr 4, 2018 at 9:36 PM, Thomas > 
> wrote:
>
>> I tested my code again today (I was preparing something to post for you 
>> on github) and surprise!: The CN1 app was able to communicate with my 
>> socket.io server and I the javascript logs where correctly output in my 
>> device adb logcat (meaning BrowserComponent.execute() javascript calls 
>> where correctly executed ). I really don't know why it did not work 
>> yesterday and does today as I didn't change anything in my code (either in 
>> the CN1 app or the server). That is a complete mystery.
>> Anyway, I am now facing another issue.  My CN1 app is now able to send 
>> the socket.io handshake request to my server (that correctly receved it, 
>> as I can see in it's log) but the handshake is unable to succeed due to a 
>> CORS issue (only on the device, still works on the simulator. And I must 
>> say that the simulator and the server are run on 2 different PCs (and have 
>> 2 different IPs) so the situation is strictly the same in what concerns 
>> CORS when run on the simulator or on my real android device). 
>> In the adb logcat, I can see this error message:
>>  [main] 0:0:2,36 - [ERROR] Failed to load http://
>> 192.168.8.100:3030/socket.io/?EIO=3&transport=polling&t=MAJ14W8: 
>> Response to preflight request doesn't pass access control check: The 
>> 'Access-Control-Allow-Origin' header has a value 'null' that is not equal 
>> to the supplied origin. Origin 'null' is therefore not allowed access. On 
>> line 0 of file:///android_asset/socket_io.html
>> (192.168.8.100:3030 being my server url  and socket_io.html my embeded 
>> CN1 asset that loads the socket.io.js embeded asset script)  
>>
>> This is kind of strange as if I call http://
>> 192.168.8.100:3030/socket.io/?EIO=3&transport=polling&t=MAJ14W8 inside 
>> my chrome browser,  in the response header I can see Access-Control-Allow
>> -Origin: * so I don't get it why the BrowserComponent has a 'null' value 
>> for it...
>> Do you already experienced using a javascript lib with CORS permissions 
>> inside the BrowserComponent on android? 
>>
>> I can post something on github for you to test if you want to (and have 
>> the time to look at it) but as my socket.io server is not public yet, 
>> you would also have to run a small socket.io server (or to find a public 
>> one) to be able to see the issue (I can post the code of a small soket.io 
>> server to use with the test CN1 app but it would requiere you to install 
>> node.js)
>>
>> -- 
>> 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/55d571c9-f7b7-41ce-b64f-ec120c0aecd9%40googlegroups.com
>>  
>> 
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> Steve Hannah
> Software Developer
> Codename One
> http://www.codenameone.com
>

-- 
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/c55da377-d38b-43bf-831b-5dbc455ad4de%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [codenameone-discussions] Re: BrowserComponent.execute() that works into the simulator but fails on a real android device

2018-04-05 Thread Steve Hannah
Try calling

myBrowserComponent.setProperty("AllowUniversalAccessFromFileURLs",
Boolean.TRUE);

(on the BrowserComponent)

Before loading the page.
Ref: https://stackoverflow.com/a/13740831/2935174



On Wed, Apr 4, 2018 at 9:36 PM, Thomas  wrote:

> I tested my code again today (I was preparing something to post for you on
> github) and surprise!: The CN1 app was able to communicate with my
> socket.io server and I the javascript logs where correctly output in my
> device adb logcat (meaning BrowserComponent.execute() javascript calls
> where correctly executed ). I really don't know why it did not work
> yesterday and does today as I didn't change anything in my code (either in
> the CN1 app or the server). That is a complete mystery.
> Anyway, I am now facing another issue.  My CN1 app is now able to send the
> socket.io handshake request to my server (that correctly receved it, as I
> can see in it's log) but the handshake is unable to succeed due to a CORS
> issue (only on the device, still works on the simulator. And I must say
> that the simulator and the server are run on 2 different PCs (and have 2
> different IPs) so the situation is strictly the same in what concerns CORS
> when run on the simulator or on my real android device).
> In the adb logcat, I can see this error message:
>  [main] 0:0:2,36 - [ERROR] Failed to load http://192.168.8.100:3030/
> socket.io/?EIO=3&transport=polling&t=MAJ14W8: Response to preflight
> request doesn't pass access control check: The
> 'Access-Control-Allow-Origin' header has a value 'null' that is not equal
> to the supplied origin. Origin 'null' is therefore not allowed access. On
> line 0 of file:///android_asset/socket_io.html
> (192.168.8.100:3030 being my server url  and socket_io.html my embeded
> CN1 asset that loads the socket.io.js embeded asset script)
>
> This is kind of strange as if I call http://192.168.8.100:
> 3030/socket.io/?EIO=3&transport=polling&t=MAJ14W8 inside my chrome
> browser,  in the response header I can see Access-Control-Allow-Origin: * so
> I don't get it why the BrowserComponent has a 'null' value for it...
> Do you already experienced using a javascript lib with CORS permissions
> inside the BrowserComponent on android?
>
> I can post something on github for you to test if you want to (and have
> the time to look at it) but as my socket.io server is not public yet, you
> would also have to run a small socket.io server (or to find a public one)
> to be able to see the issue (I can post the code of a small soket.io
> server to use with the test CN1 app but it would requiere you to install
> node.js)
>
> --
> 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/55d571c9-f7b7-41ce-b64f-
> ec120c0aecd9%40googlegroups.com
> 
> .
>
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Steve Hannah
Software Developer
Codename One
http://www.codenameone.com

-- 
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/CAGOYrKVVAjza8MQoTp%3D%2B1dcjHtOp_UDwnaRj12ueTSvGmNV91Q%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.