We can't fix different behaviors of Androids webkit browser, if a specific div from the webkit implementation on Android doesn't send an event (or does) for us the webkit is a black box.We can only fix bugs in the interconnect.
On Tuesday, March 9, 2021 at 6:19:43 PM UTC+2 P5music wrote: > There is not any difficult case, because on the simulator it works very > well as expected. > > I am not mixing anything, please read this issue to be fixed: > https://github.com/codenameone/CodenameOne/issues/3378 > > I just put a callback for mousedown and mouseup, and it gets called on a > DIV, with a iFrame inside. > The iFrame does not respond to mouse events, the DIV does. > Simple click works and the two events are fired and the callbacks get > called. > Long press also works on the simulator, I just handle the different timing. > > But on Android it happens as I described, not working: I can select text > on the iFrame but its style settings should not allow > (pointerEvents='none') so it's not OK. > It causes or is related to the DIV not respoding to long press, while it > still responds to simple click. > > I do not mind whether I have to handle it with JS or with the > longPressListener, it is enough that it works, just tell me what is the > right way. > I was said that JS is the right way. Ok, my source code is handling that > way, it is ready, no modification is needed. > > Please ask for other details if necessary. > > Il giorno martedì 9 marzo 2021 alle 15:50:31 UTC+1 shannah ha scritto: > >> > 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/87f01507-53c9-4779-b646-eed75dba46e9n%40googlegroups.com.
