package Ġdev . hot wire . tur bo . views Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . webkit . WebView Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . core . view . contains Ċ import Ġandroidx . core . view . draw To Bitmap Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġdev . hot wire . tur bo . R Ċ Ċ /** Ċ Ġ* ĠTur bo Ġview Ġthat Ġhosts Ġthe Ġshared ĠWebView , Ġa Ġprogress Ġview , Ġan Ġerror Ġview , Ġand Ġallows Ċ Ġ* Ġpull - to - refresh Ġbehavior . Ċ Ġ*/ Ċ class ĠTur bo View Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 ) Ġ: ĊĠĠĠ ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠwebView Container : ĠViewGroup Ġget () Ġ= ĠfindViewById ( R . id . tur bo _ web View _ container ) ĊĠĠĠ Ġprivate Ġval Ġprogress Container : ĠViewGroup Ġget () Ġ= ĠfindViewById ( R . id . tur bo _ progress _ container ) ĊĠĠĠ Ġprivate Ġval Ġerror Container : ĠViewGroup Ġget () Ġ= ĠfindViewById ( R . id . tur bo _ error _ container ) ĊĠĠĠ Ġprivate Ġval Ġscreenshot View : ĠImageView Ġget () Ġ= ĠfindViewById ( R . id . tur bo _ screenshot ) ĊĊĠĠĠ Ġinternal Ġval ĠwebView Refresh : ĠSw ipe Refresh Layout ? Ġget () Ġ= ĠwebView Container Ġas ? ĠSw ipe Refresh Layout ĊĠĠĠ Ġinternal Ġval Ġerror Refresh : ĠSw ipe Refresh Layout ? Ġget () Ġ= ĠfindViewById ( R . id . tur bo _ error _ refresh ) ĊĊĠĠĠ Ġinternal Ġfun Ġattach WebView ( web View : ĠWebView , Ġon Attached To New Destination : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( web View . parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Attached To New Destination ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠMatch Ġthe ĠWebView Ġbackground Ġwith Ġits Ġnew Ġparent ĊĠĠĠĠĠĠĠ Ġif Ġ( background Ġis ĠColor Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView . set BackgroundColor (( background Ġas ĠColor Drawable ). color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠwebView Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView Container . addView ( web View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Attached To New Destination ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġdetach WebView ( web View : ĠWebView , Ġon Detached : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġview Ġis Ġalready Ġdet ached Ġfrom Ġthe Ġwindow Ġ( like ĊĠĠĠĠĠĠĠ Ġ// Ġwhen Ġdis missing Ġa Ġbottom Ġsheet ), Ġdetach Ġimmediately , ĊĠĠĠĠĠĠĠ Ġ// Ġsince Ġposting Ġto Ġthe Ġmessage Ġqueue Ġwill Ġbe Ġignored . ĊĠĠĠĠĠĠĠ Ġif Ġ( web View Container . window Token Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView Container . remove View ( web View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Detached () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠwebView Container . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠwebView Container . remove View ( web View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Detached () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun ĠwebView Is Attached ( web View : ĠWebView ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠwebView Container . contains ( web View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġadd Progress View ( progress View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDon 't Ġshow Ġthe Ġprogress Ġview Ġif Ġa Ġscreenshot Ġis Ġavailable ĊĠĠĠĠĠĠĠ Ġif Ġ( screenshot View . isVisible ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġcheck ( progress View . parent Ġ== Ġnull ) Ġ{ Ġ" Progress Ġview Ġcannot Ġbe Ġattached Ġto Ġanother Ġparent " Ġ} ĊĊĠĠĠĠĠĠĠ Ġremove Progress View () ĊĠĠĠĠĠĠĠ Ġprogress Container . addView ( progress View ) ĊĠĠĠĠĠĠĠ Ġprogress Container . isVisible Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġremove Progress View () Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Container . removeAll Views () ĊĠĠĠĠĠĠĠ Ġprogress Container . isVisible Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġadd Screenshot ( screenshot : ĠBitmap ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( screenshot Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġscreenshot View . setImage Bitmap ( screenshot ) ĊĠĠĠĠĠĠĠ Ġscreenshot View . isVisible Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġremove Screenshot () Ġ{ ĊĠĠĠĠĠĠĠ Ġscreenshot View . setImage Bitmap ( null ) ĊĠĠĠĠĠĠĠ Ġscreenshot View . isVisible Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġadd Error View ( error View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( error View . parent Ġ== Ġnull ) Ġ{ Ġ" Error Ġview Ġcannot Ġbe Ġattached Ġto Ġanother Ġparent " Ġ} ĊĊĠĠĠĠĠĠĠ Ġremove Error View () ĊĠĠĠĠĠĠĠ Ġerror Container . addView ( error View ) ĊĠĠĠĠĠĠĠ Ġerror Container . isVisible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġerror Refresh ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġremove Error View () Ġ{ ĊĠĠĠĠĠĠĠ Ġerror Container . removeAll Views () ĊĠĠĠĠĠĠĠ Ġerror Container . isVisible Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġerror Refresh ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġcreate Screenshot (): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is La id Out ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ(! has En ough Memory For Screenshot ()) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( width Ġ<= Ġ 0 Ġ|| Ġheight Ġ<= Ġ 0 ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw To Bitmap () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDon 't Ġever Ġcrash Ġwhen Ġtrying Ġto Ġmake Ġa Ġscreenshot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġscreenshot Orientation (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . resources . configuration . orientation ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas En ough Memory For Screenshot (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġruntime Ġ= ĠRuntime . get Runtime () ĊĠĠĠĠĠĠĠ Ġval Ġused Ġ= Ġruntime . total Memory (). toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġruntime . max Memory (). toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġremaining Ġ= Ġ 1 f Ġ- Ġ( used Ġ/ Ġmax ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġremaining Ġ> Ġ. 2 0 ĊĠĠĠ Ġ} Ċ } Ċ