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.

Reply via email to