package Ġio . one _ team . on ete am _ rte _ kt . core Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Handler Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . view . input method . Input Connection Ċ import Ġandroid . view . input method . Input Connection Wrapper Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . webkit .* Ċ import Ġandroid . widget . LinearLayout Ċ import Ġkotlinx . android . synt hetic . main . rich _ text _ editor _ view . view .* Ċ import Ġjava . net . URL Ċ Ċ /** Ċ Ġ* ĠA ĠView Ġwrapping Ġon ete am - rte Ġjavascript Ġlibrary . Ċ Ġ* Ġ@ see Ġhttps :// github . com / on ete am - dev / on ete am - rte Ċ Ġ*/ Ċ class ĠRich Text Editor View ( context : ĠContext , Ġattr : ĠAttributeSet ?) Ġ: ĠLinearLayout ( context , Ġattr ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHtml Ġcontent Ġin Ġa Ġeditor ĊĠĠĠĠ Ġ* ĠThis Ġis Ġtwo - way Ġbound Ġvalue Ġso Ġthat Ġmake Ġexactly Ġsame Ġas Ġa Ġvalue Ġin Ġthe Ġeditor . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġcontent : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ content ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ content Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . set HTML ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ content Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Content Changed ?. invoke ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġbody Placeholder : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ body Placeholder ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ body Placeholder Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . set Body Placeholder ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ body Placeholder Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġraw Ment ions : ĠList < Mention able > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ raw Ment ions ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ raw Ment ions Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . set Ment ions ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ raw Ment ions Ġ= Ġempty List < Mention able >() ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġhas ht ag List : ĠList < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ hasht ag List ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ hasht ag List Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . set Hash Tag List ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġ_ hasht ag List Ġ= Ġempty List < String >() ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInline Ġstyles Ġapplied Ġto Ġselected Ġline ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ Inline Style ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġinline Styles : ĠList < Inline Style > Ġ= ĠlistOf () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Inline Styles Changed ?. invoke ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBlock Ġstyle Ġapplied Ġto Ġselected Ġline ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ Block Style ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġblock Style : ĠBlock Style Ġ= ĠBlock Style . Un styled ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Block Style Changed ?. invoke ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġon Content Changed : Ġ(( String ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Inline Styles Changed : Ġ(( List < Inline Style >) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Block Style Changed : Ġ(( Block Style ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠLayoutInflater . from ( context ). inflate ( R . layout . rich _ text _ editor _ view , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To Window () ĊĠĠĠĠĠĠĠ Ġsetup WebView () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠToggle Ġline Ġstyle Ġwith Ġ[ Block Style ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstyle Ġa Ġblock Ġstyle Ġyou Ġwant Ġto Ġapply Ġor Ġun apply ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ Block Style ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtoggle Block Style ( style : ĠBlock Style ) Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . toggle BlockType ( style . stringValue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠToggle Ġselected Ġtext Ġwith Ġ[ Inline Style ] ĊĠĠĠĠ Ġ* Ġ@ param Ġstyle Ġa Ġinline Ġstyle Ġyou Ġwant Ġto Ġapply Ġor Ġun apply ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ Inline Style ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtoggle Inline Style ( style : ĠInline Style ) Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . toggle Inline Style ( style . stringValue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġlink Ġhref Ġto Ġselected Ġtext ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġurl Ġurl Ġlink Ġyou Ġwant Ġto Ġattach Ġselected Ġtext ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinsert Link ( url : ĠURL ) Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . insert Link ( url . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġlink Ġhref Ġfrom Ġselected Ġtext ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Link () Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . remove Link () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInsert Ġiframe Ġcode ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsrc Ġiframe Ġcode Ġyou Ġwant Ġto Ġinsert Ġinto Ġcontent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinsert I Frame ( src : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . insert I Frame ( src . replace (" \"", Ġ"\\ \"" )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInsert Ġa Ġfile ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname Ġfile Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġurl Ġfile Ġurl ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinsert File ( name : ĠString , Ġurl : ĠURL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" {" name ": Ġ"$ name ", Ġ" url ": Ġ"$ url "} """ ĊĠĠĠĠĠĠĠ ĠwebView . insert File Download ( json ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInsert Ġa Ġimage ĊĠĠĠĠ Ġ* Ġ@ param Ġname Ġimage Ġname Ġthat Ġwill Ġbe Ġused Ġby Ġalt Ġattribute Ġetc ... ĊĠĠĠĠ Ġ* Ġ@ param Ġoriginal Url Ġimage Ġurl Ġthat Ġwill Ġbe Ġshown Ġby Ġclicking Ġimage ĊĠĠĠĠ Ġ* Ġ@ param Ġpreview Url Ġimage Ġsrc Ġurl Ġthat Ġdisplaying Ġas Ġpreview ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinsert Image ( name : ĠString , Ġoriginal Url : ĠURL , Ġpreview Url : ĠURL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" {" alt ": Ġ"$ name ", Ġ" title ": Ġ"$ name ", Ġ" src ": Ġ"$ preview Url ", Ġ" data - original - url ": Ġ"$ original Url "} """ ĊĠĠĠĠĠĠĠ ĠwebView . insert Image ( json ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġcookie Ġvalue Ġto ĠwebView ĊĠĠĠĠ Ġ* Ġ@ param Ġhost Ġhost Ġto Ġset Ġcookie ĊĠĠĠĠ Ġ* Ġ@ param Ġcookie Ġkey = value Ġstring ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Cookie ( host : ĠString , Ġcookie : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcookie Manager Ġ= ĠCookie Manager . getInstance () ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcookie Manager . set Accept Third Party Cookies ( web View , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcookie Manager . set Accept Cookie ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcookie Manager . set Cookie ( host , Ġcookie ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . request Focus ( View . FOCUS _ DOWN ) ĊĠĠĠĠĠĠĠ ĠwebView . focus () ĊĠĠĠĠĠĠĠ Ġ( context . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show Soft Input ( web View , ĠInput Method Manager . SHOW _ IMP LICIT ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Touch Event ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup WebView () Ġ{ ĊĠĠĠĠĠĠĠ ĠwebView . load Url (" file :/// android _ asset / index . html ") ĊĠĠĠĠĠĠĠ ĠwebView . settings . java Script Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠwebView . settings . cache Mode Ġ= ĠWeb Settings . LOAD _ NO _ CACHE ĊĠĠĠĠĠĠĠ ĠwebView . add Javascript Interface ( JS Interface (), Ġ" Android Interface ") ĊĠĠĠĠĠĠĠ ĠwebView . set WebView Client ( WebView Client ()) ĊĠĠĠĠĠĠĠ ĠwebView . set Web Chrome Client ( Web Chrome Client ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . set Layer Type ( View . LAYER _ TYPE _ HARD WARE , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . set Layer Type ( View . LAYER _ TYPE _ SOFTWARE , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠJS Interface Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Javascript Interface ĊĠĠĠĠĠĠĠ Ġfun Ġdid Mount Component (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( context . main Looper ). post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . set HTML (_ content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . set Ment ions (_ raw Ment ions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . set Hash Tag List (_ hasht ag List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . set Body Placeholder (_ body Placeholder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Javascript Interface ĊĠĠĠĠĠĠĠ Ġfun Ġdid Change Inline Styles ( styles : ĠString ?): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( context . main Looper ). post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Styles Ġ= Ġstyles ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . split (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ ĠInline Style . from ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Javascript Interface ĊĠĠĠĠĠĠĠ Ġfun Ġdid Change BlockType ( type : ĠString ?): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( context . main Looper ). post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Style Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĠBlock Style . from ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠBlock Style . Un styled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Javascript Interface ĊĠĠĠĠĠĠĠ Ġfun Ġdid Change Content ( content : ĠString ?): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( context . main Looper ). post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ content Ġ= Ġcontent Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠInput WebView ( context : ĠContext , Ġattr : ĠAttributeSet ?) Ġ: ĠWebView ( context , Ġattr ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate Input Connection ( out Attrs : ĠEditor Info ): ĠInput Connection ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġsuper . onCreate Input Connection ( out Attrs ) ĊĠĠĠĠĠĠĠ Ġreturn Ġconnection ?. let Ġ{ ĠEdit TextInput Connection ( it , Ġtrue ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠEdit TextInput Connection ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠInput Connection ?, Ġmutable : ĠBoolean ĊĠĠĠ Ġ) Ġ: ĠInput Connection Wrapper ( target , Ġmutable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose Connection () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġcontext . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimm . show Soft Input ( this @ Input WebView , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . close Connection () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ