> Furthermore there is no such complex case as you seem to be thinking. The issue is very simple: > text is selectable where it should not be (pointerEvents='none' on iFrame), and this leads to mouse events being captured by the system and not the BC or the CN layer, or viceversa, I do not know.
That is not a simple case. You're mixing event models between web and CN1. It's incredibly complex. I recommend you isolate your Javascript web portion so that you can test it on each platform you target without CN1. On Tue, Mar 9, 2021 at 6:34 AM 'P5music' via CodenameOne Discussions < [email protected]> wrote: > Hi Steve, > thanks for chiming in, > as you can read in the github issue I filed, the correct behaviour is > already found on the simulator. > No need to further debug, because debug has been already done on Android > device too. > The issue is on Android and probably on iOS. I do not mind doing a test on > iOS device myself but it cannot be done today because I must create > certificates yet. > Furthermore there is no such complex case as you seem to be thinking. The > issue is very simple: > text is selectable where it should not be (pointerEvents='none' on > iFrame), and this leads to mouse events being captured by the system and > not the BC or the CN layer, or viceversa, I do not know. > Regards > > Il giorno martedì 9 marzo 2021 alle 14:44:23 UTC+1 shannah ha scritto: > >> A couple of comments: >> >> 1. BrowserComponent is a heavyweight/native component and its >> implementation will be different on different platforms. >> 2. Debugging hybrid apps (that use both Javascript/HTML and CN1 UI) is >> necessarily more complex than debugging an app where all the UI is in >> Codename One. You should use Safari's debugging tools to debug the webview >> on device. You should use the Chrome debugging tools to debug the webview >> in the simulator and on Android device. >> 3. Most important: When developing complex JS your life will be easier >> if you can structure it so that you can test it independently from the >> Codename One app. Create your HTML and javascript, host it on a server >> (even localhost - but not file:///), and test it in the web browsers of the >> platforms you want to support. In your case you're looking for specific >> behaviour related to events (whether text should be selected in response to >> a mouse event, etc..), so it may take a little tweaking to get it perfect >> in an HTML only sandbox. Once you have it working, then you can plug in >> the CodenameOne piece. >> An intermediate step before fully integrating your JS with your Codename >> One app, is to *just* load the HTML page in a Browser component without any >> communication between Java and Javascript. See if any functionality that >> works in the platform browser app breaks when run inside a BrowserComponent. >> After that is working perfectly, you're ready to add the java <-> >> javascript communication piece. >> >> Steve >> >> >> >> On Thursday, February 25, 2021 at 2:50:14 AM UTC-8 P5music wrote: >> >>> I created a test case but before filing an issue I have to point out >>> what follows. (You find the relevant code below) >>> The test app features a CEF BrowserComponent with some text inside. >>> Text lines are not so long horizontally to fill the view, so the right >>> part is empty. >>> Also the bottom part is empty because only a few text lines are in the >>> HTML. >>> >>> On the Android device: >>> I can click on text and I have the mousedown/mouseup sequence (events >>> are fired and callbacks are issued). >>> I can click on the empty part on the right and I have the >>> mousedown/mouseup sequence (events are fired and callbacks are issued). >>> >>> If I click on the empty part on the bottom I have no callbacks. >>> >>> If I long-press on the text the Android text-selection interface appears. >>> If I long-press on the empty part on the right no callbacks are issued >>> (this is the issue this thread is about but it is entwined with something >>> else, read on). >>> >>> I remind that the empty part on the right is a DIV with the callbacks on >>> it. >>> And the bottom part is really empty. >>> >>> Sofor my app to work >>> -the text should not be selectable in the BrowserComponent because in my >>> app the long-press on any iFrame in the list is just for launching the >>> pop-up menu. >>> -the long-press events should be issued also on the text, if present in >>> the iFrames. >>> >>> How to have those two specs satisfied? >>> It seems that there are two questions, one is maybe the simplest to >>> solve, the other is maybe a bug to file an issue about. >>> And the two are together, it seems. >>> (They are not seen in the simulator) >>> >>> Regards >>> >>> public void start() { >>> if(current != null){ >>> current.show(); >>> return; >>> } >>> Form hi = new Form("Hi World"); >>> hi.setLayout(new BorderLayout()); >>> hi.add(BorderLayout.NORTH,new Label("Hi World")); >>> BrowserComponent bc=new BrowserComponent(); >>> >>> bc.addWebEventListener("onLoad", new ActionListener() { >>> @Override >>> public void actionPerformed(ActionEvent evt) { >>> System.out.println("onload"); >>> bc.addJSCallback("var div=document.getElementById('divId');" + >>> "callMouseDown =function(){callback.onSuccess('mousedown');};callMouseUp >>> =function(){callback.onSuccess('mouseup');};"+ >>> "div.addEventListener('mousedown', function () {"+ >>> "callMouseDown();"+ >>> "});"+ >>> "div.addEventListener('mouseup', function () {"+ >>> "callMouseUp();"+ >>> "});" >>> , new SuccessCallback<BrowserComponent.JSRef>() { >>> @Override >>> public void onSucess(BrowserComponent.JSRef value) { >>> System.out.println("webview callback value="+value.getValue()); >>> }}); >>> } >>> }); >>> >>> bc.setPage("<HTML><BODY><DIV id='divId' >>> ><DIV>TEST</BR>TEST</BR>TEST</BR>TEST</BR>TEST</BR>TEST</BR>TEST</BR></DIV></DIV></BODY></HTML>",""); >>> >>> hi.add(BorderLayout.CENTER,bc); >>> hi.show(); >>> } >>> Il giorno mercoledì 24 febbraio 2021 alle 03:16:36 UTC+1 Shai Almog ha >>> scritto: >>> >>>> If it's in JavaScript then it sounds like a bug. Can you extract a test >>>> case and file an issue? >>>> >>>> On Tuesday, February 23, 2021 at 11:27:59 AM UTC+2 P5music wrote: >>>> >>>>> I am talking about are handled in javascript >>>>> indeed I explicitly wrote about callbacks. >>>>> (the longpress listener also is not called, it is in Java just for >>>>> testing purposes as a fallback but it is not useful because it is not >>>>> called either) >>>>> >>>>> This is the problem: >>>>> The first event should be "mousedown" >>>>> and it is in the simulator, whatever kind of click type the user does, >>>>> i.e. click or longpress. >>>>> The second event should be "mouseup" >>>>> and it is in the simuator, whatever kind of click type the user does, >>>>> i.e. click or longpress, just the difference is timing. >>>>> The Javascript callbacks work and a suitable part of the code is >>>>> called for each of the above mentioned events. >>>>> (It is not a simulator bug, it works as it should) >>>>> So In case of click those events are fired correctly both in simulator >>>>> and also in the Android device. >>>>> >>>>> Instead >>>>> in case of long press on the real Android device only click is handled >>>>> correctly and I see the correct sequence of mouse events, >>>>> but with long press those events are not fired, like they are gobbled >>>>> down. >>>>> So both the down event and the up event are not handled, they do not >>>>> trigger the callbacks, they are not fired ore they are gobbled. >>>>> >>>>> It seems that the WebView has a timer itself and decides whether to >>>>> fire the first event according to the timing of the second. >>>>> >>>>> Regards >>>>> >>>>> Il giorno martedì 23 febbraio 2021 alle 04:04:20 UTC+1 Shai Almog ha >>>>> scritto: >>>>> >>>>>> That sounds like a bug in the simulator not on the device. If you >>>>>> click in the browser component the event should be delivered there. Not >>>>>> to >>>>>> Codename One. You need to intercept it in JavaScript. >>>>>> >>>>>> On Monday, February 22, 2021 at 10:22:12 AM UTC+2 P5music wrote: >>>>>> >>>>>>> The click is on the iFrames inside the HTML, so it is on the BC. >>>>>>> It works on the simulator: >>>>>>> click and long-press gestures are handled with a timer and comparing >>>>>>> the timestamps. >>>>>>> The issue is that >>>>>>> when I long-press on the BC when the app runs on the real Android >>>>>>> device, >>>>>>> even the first mouse event (mousedown) is not fired, >>>>>>> it is like the BC has a timer itself and does not fire the mousedown >>>>>>> event if the mouseup event is too far in time, >>>>>>> while in the simulator the mousedown event is issued every time, >>>>>>> regardless of the timing of the subsequent mouseup event. >>>>>>> >>>>>>> Regards >>>>>>> >>>>>>> Il giorno lunedì 22 febbraio 2021 alle 03:29:37 UTC+1 Shai Almog ha >>>>>>> scritto: >>>>>>> >>>>>>>> Are you long clicking on the browser component or somewhere else? >>>>>>>> It's unclear from the question. Do you have a screenshot of the place >>>>>>>> you're clicking on? >>>>>>>> >>>>>>>> On Sunday, February 21, 2021 at 1:17:56 PM UTC+2 P5music wrote: >>>>>>>> >>>>>>>>> P5music >>>>>>>>> 12:16 (ora) >>>>>>>>> a CodenameOne Discussions >>>>>>>>> I am testing my CodenameApp on a real Android device. >>>>>>>>> The main screen has a table layout with a container on the left. >>>>>>>>> The container has a container inside, that has a BrowserComponent >>>>>>>>> inside in BorderLayout.CENTER. >>>>>>>>> The issue is not about layout. >>>>>>>>> >>>>>>>>> I have some callbacks for the BC that on the simulator handle >>>>>>>>> mouseup/down on the iFrames in the HTML. >>>>>>>>> That callback work also for handing long-press on the same HTML >>>>>>>>> elements. >>>>>>>>> Everything is fine. If I add a LongPressListener it gets not >>>>>>>>> called but it is not needed at all. >>>>>>>>> >>>>>>>>> When using the app on the real Android device the clicks are >>>>>>>>> handled as in the simulator >>>>>>>>> while >>>>>>>>> the long press is not. >>>>>>>>> I debugged and it seems that the events are not fired at all. >>>>>>>>> I mean, >>>>>>>>> a click is mousedown and mouseup within a short time range. >>>>>>>>> a longpress is the same where the mouseup event is after 500ms. >>>>>>>>> The app uses a timer. >>>>>>>>> >>>>>>>>> But the initial mousedown event itself is not called, and also the >>>>>>>>> LongPressListener is not called. >>>>>>>>> >>>>>>>>> So what is happening? This is very important because the >>>>>>>>> long-press is for displaying a pop-up menu. But only clicks work. >>>>>>>>> Thanks in advance >>>>>>>>> >>>>>>>> -- > 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 [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/codenameone-discussions/bc6eb9a2-32d0-4285-93e3-f9b6bea8060an%40googlegroups.com > <https://groups.google.com/d/msgid/codenameone-discussions/bc6eb9a2-32d0-4285-93e3-f9b6bea8060an%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- Steve Hannah Web Lite Solutions Corp. -- 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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/codenameone-discussions/CABiRg%2BTp4C2qUwpgMVn1DpRcLfOjfBqd_yoz1XvxGgUGC5LFDQ%40mail.gmail.com.
