Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android 3.x ONLY WebView Text Selection + JavaScript

Problem domain: Android WebView based ePub format reader --

We need text highlights which are accessible via JavaScript methods (ie turn em on, turn em off, save them email them, etc)

Anyone in the know, please correct me if I'm wrong: During text selection on a WebView --

Basically we are handed a TextView overlay (WebTextView) which is IN NO WAY attached to the underlying html other than visually (nice job on lining it all up and making it seamless, btw), on which we perform the TextSelectionActionMode and the ClipboardManager is supplied with the results... to make that clear, the actual HTML with the WebView IS NOT actually selected at any time during this stock process, which is why the JavaScript cannot access the results of the action.

So in order to make this behavior work in 3.1+, I have a few possible plans going forward to implement my own selection on a WebView -- this is the part where I'm wondering if I cannot see out of my corner :) --

1) capture MOTION_DOWN of the long click which initiates selection mode, override the built in TextSelection ActionMode( to provde the clients branding -- the way I found to do so is so hackish it hurts) watch the drag, capture MOTION_UP position, map these coords onto the WebView, and make my selection based on the coords (while comparing the text to that captured by the ClipboardManager)

2) create my own "WebTextView" (whole lotta work lol) and not-so- hackishly create my own ActionMode and do all of the above.

3) use the MotionEvents generated by the stock selection process and somehow override the stock TextSelection ActionMode triggered by this.

These are the options I see, hopefully my proximity and frustration with this have blinded me to a simpler (read that as built-in) solution or two.

Thanks again for your time.

like image 666
Dan Avatar asked Aug 04 '11 21:08

Dan


1 Answers

I got this working in 2.2 - 4.0.3. I used a javascript interface and passed all touches to it. The solution seems to work pretty well and I've put an example project on github. The github project includes the necessary js in the assets folder as well as a test page and web view that loads the test page and implements all necessary methods to handle the selection. The link to the github project is https://github.com/btate/BTAndroidWebViewSelection. Have at it.

like image 72
codeetcetera Avatar answered Nov 07 '22 05:11

codeetcetera