package Ġorg . step ic . d roid . ui . util Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . View Tree Observer Ċ import Ġandroid . view . animation . Animation Ċ import Ġandroid . view . animation . Transformation Ċ import Ġandroid . webkit . WebView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . appcompat . content . res . AppCompat Resources Ċ import Ġandroidx . core . view . children Ċ import Ġandroidx . core . view . isVisible Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ Ċ fun ĠView . set Height ( height : ĠInt ) Ġ{ ĊĠĠĠ Ġlayout Params . height Ġ= Ġheight ĊĠĠĠ Ġlayout Params Ġ= Ġlayout Params Ċ } Ċ Ċ fun ĠViewGroup . hide All Children () Ġ{ ĊĠĠĠ Ġchildren . forEach Ġ{ Ġit . isVisible Ġ= Ġfalse Ġ} Ċ } Ċ Ċ fun ĠTextView . set Compound Draw ables ( ĊĠĠĠ Ġ@ Drawable Res Ġstart : ĠInt Ġ= Ġ- 1 , ĊĠĠĠ Ġ@ Drawable Res Ġtop : ĠInt Ġ= Ġ- 1 , ĊĠĠĠ Ġ@ Drawable Res Ġend : ĠInt Ġ= Ġ- 1 , ĊĠĠĠ Ġ@ Drawable Res Ġbottom : ĠInt Ġ= Ġ- 1 Ċ ) Ġ{ ĊĠĠĠ Ġfun ĠTextView . get Drawable OrNull (@ Drawable Res Ġres : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( res Ġ!= Ġ- 1 ) ĠAppCompat Resources . get Drawable ( context , Ġres ) Ġelse Ġnull ĊĊĠĠĠ Ġval Ġstart Drawable Ġ= Ġget Drawable OrNull ( start ) ĊĠĠĠ Ġval Ġtop Drawable Ġ= Ġget Drawable OrNull ( top ) ĊĠĠĠ Ġval Ġend Drawable Ġ= Ġget Drawable OrNull ( end ) ĊĠĠĠ Ġval Ġbottom Drawable Ġ= Ġget Drawable OrNull ( bottom ) ĊĠĠĠ Ġset Compound Draw ables With Intr insic Bounds ( start Drawable , Ġtop Drawable , Ġend Drawable , Ġbottom Drawable ) Ċ } Ċ Ċ fun ĠTextView . setText View Background Without Reset ting Padding (@ Drawable Res Ġbackground Res : ĠInt ) Ġ{ ĊĠĠĠ Ġset Background Resource ( background Res ) Ċ } Ċ Ċ inline Ġfun Ġ< T Ġ: ĠView > ĠT . do On Global Layout ( cross inline Ġaction : Ġ( view : ĠT ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġview Tree Observer . add On Global Layout Listener ( object Ġ: ĠView Tree Observer . On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Global Layout () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( this @ do On Global Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Tree Observer . remove On Global Layout Listener ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) Ċ } Ċ Ċ fun ĠView . sn ackbar (@ String Res Ġmessage Res : ĠInt , Ġlength : ĠInt Ġ= ĠSn ackbar . LENGTH _ SHORT ) Ġ{ ĊĠĠĠ Ġsn ackbar ( context . getString ( message Res ), Ġlength ) Ċ } Ċ Ċ fun ĠView . sn ackbar ( message : ĠString , Ġlength : ĠInt Ġ= ĠSn ackbar . LENGTH _ SHORT ) Ġ{ ĊĠĠĠ ĠSn ackbar ĊĠĠĠĠĠĠĠ Ġ. make ( this , Ġmessage , Ġlength ) ĊĠĠĠĠĠĠĠ Ġ. show () Ċ } ĊĊ Ċ private Ġconst Ġval Ġduration Millis Ġ= Ġ 3 0 0 Ċ Ċ fun ĠView . expand ( animation Listener : ĠAnimation . Animation Listener ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġmeasure ( ViewGroup . LayoutParams . MATCH _ PARENT , ĠViewGroup . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠ Ġval Ġtarget Height Ġ= Ġmeasured Height ĊĊĠĠĠ Ġ// ĠOl der Ġversions Ġof Ġandroid Ġ( pre ĠAPI Ġ 2 1 ) Ġcancel Ġanimations Ġfor Ġviews Ġwith Ġa Ġheight Ġof Ġ 0 . ĊĠĠĠ Ġlayout Params . height Ġ= Ġ 1 ĊĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġval Ġa Ġ= Ġobject Ġ: ĠAnimation () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply Transformation ( interpol ated Time : ĠFloat , Ġt : ĠTransformation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= Ġif Ġ( interpol ated Time Ġ== Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( target Height Ġ* Ġinterpolated Time ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwill Change Bounds (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġa . duration Ġ= Ġduration Millis . to Long () ĊĠĠĠ Ġanimation Listener ?. let Ġ{ Ġa . set Animation Listener ( it ) Ġ} ĊĠĠĠ Ġstart Animation ( a ) Ċ } Ċ Ċ fun ĠView . collapse ( animation Listener : ĠAnimation . Animation Listener ? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġval Ġinitial Height Ġ= Ġmeasured Height ĊĊĠĠĠ Ġval Ġa Ġ= Ġobject Ġ: ĠAnimation () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply Transformation ( interpol ated Time : ĠFloat , Ġt : ĠTransformation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( interpol ated Time Ġ== Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= Ġinitial Height Ġ- Ġ( initial Height Ġ* Ġinterpolated Time ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwill Change Bounds (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġa . duration Ġ= Ġduration Millis . to Long () ĊĠĠĠ Ġanimation Listener ?. let Ġ{ Ġa . set Animation Listener ( it ) Ġ} ĊĠĠĠ Ġstart Animation ( a ) Ċ } Ċ Ċ fun ĠWebView . evaluate Javascript Compat ( code : ĠString ) Ġ{ ĊĠĠĠ Ġevaluate Javascript ( code , Ġnull ) Ċ }