package Ġcom . sp ende sk . gr apes . extensions Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . graphics . drawable . Gradient Drawable Ċ import Ġandroid . graphics . drawable . R ipple Drawable Ċ import Ġandroid . graphics . drawable . State List Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View Tree Observer Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Color Res Ċ import Ġandroidx . annotation . Dim en Res Ċ import Ġandroidx . core . content . Context Compat Ċ Ċ /** Ċ Ġ* Ġ[ View ] Ġrelated Ġextensions . Ċ Ġ* Ċ Ġ* Ġ@ author Ġd any b ou can ova Ċ Ġ* Ġ@ since Ġ 1 5 / 0 9 / 2 0 2 0 Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠSets Ġa Ġ[ R ipple Drawable ] Ġto Ġthe Ġaccording Ġ[ View ]. Ċ Ġ*/ Ċ fun ĠView . set R ipple Drawable ( ĊĠĠĠ Ġ@ Color Res Ġcolor Id : ĠInt , ĊĠĠĠ Ġ@ Color Res Ġcolor Pressed Id : ĠInt , ĊĠĠĠ Ġ@ Color Res Ġcolor Disable Id : ĠInt , ĊĠĠĠ Ġ@ Dim en Res Ġradius Id : ĠInt , ĊĠĠĠ Ġ@ Dim en Res Ġstroke Id : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġ@ Color Res Ġstroke Color Id : ĠInt Ġ= Ġ 0 Ċ ) Ġ{ ĊĠĠĠ Ġval ĠbackgroundColor Ġ= Ġcontext . color Compat ( color Id ) ĊĠĠĠ Ġval Ġcolor Pressed Ġ= Ġcontext . color Compat ( color Pressed Id ) ĊĠĠĠ Ġval Ġcolor Disable Ġ= Ġcontext . color Compat ( color Disable Id ) ĊĠĠĠ Ġval Ġstroke Dim en Ġ= Ġif Ġ( stroke Id Ġ!= Ġ 0 ) Ġresources . get Dimension Pixel Offset ( stroke Id ) Ġelse Ġ 0 ĊĠĠĠ Ġval Ġstroke Color Ġ= Ġif Ġ( stroke Color Id Ġ!= Ġ 0 ) Ġcontext . color Compat ( stroke Color Id ) Ġelse Ġ 0 ĊĠĠĠ Ġval Ġradius Ġ= Ġresources . get Dimension Pixel Size ( radius Id ). toFloat () ĊĊĠĠĠ Ġbackground Ġ= ĠR ipple Drawable ( ĊĠĠĠĠĠĠĠ ĠColor State List . valueOf ( color Pressed ), ĊĠĠĠĠĠĠĠ ĠState List Drawable (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd State ( int ArrayOf (- android . R . attr . state _ enabled ), ĠGradient Drawable (). create ( color Disable , Ġradius , Ġstroke Dim en , Ġstroke Color )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd State ( int ArrayOf (), ĠGradient Drawable (). create ( backgroundColor , Ġradius , Ġstroke Dim en , Ġstroke Color )) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ ĠGradient Drawable (). create ( color Pressed , Ġradius , Ġstroke Dim en , Ġstroke Color ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠSets Ġa Ġ[ Gradient Drawable ] Ġto Ġthe Ġaccording Ġ[ View ]. Ċ Ġ*/ Ċ fun ĠView . set Drawable ( ĊĠĠĠ Ġ@ Color Res Ġcolor Id : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġ@ Dim en Res Ġradius Id : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġ@ Dim en Res Ġstroke Size Id : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġ@ Color Res Ġstroke Color Id : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġshape : ĠInt Ġ= ĠGradient Drawable . RECT ANGLE Ċ ) Ġ{ ĊĠĠĠ Ġval ĠbackgroundColor Ġ= Ġcontext . color Compat ( color Id ) ĊĠĠĠ Ġval Ġstroke Dim en Ġ= Ġif Ġ( stroke Size Id Ġ!= Ġ 0 ) Ġresources . get Dimension Pixel Offset ( stroke Size Id ) Ġelse Ġ 0 ĊĠĠĠ Ġval Ġstroke Color Ġ= Ġif Ġ( stroke Color Id Ġ!= Ġ 0 ) Ġcontext . color Compat ( stroke Color Id ) Ġelse Ġ 0 ĊĠĠĠ Ġval Ġradius Ġ= Ġif Ġ( radius Id Ġ!= Ġ 0 ) Ġresources . get Dimension Pixel Size ( radius Id ). toFloat () Ġelse Ġ 0 F ĊĊĠĠĠ Ġbackground Ġ= ĠGradient Drawable (). create ( backgroundColor , Ġradius , Ġstroke Dim en , Ġstroke Color , Ġshape ) Ċ } Ċ Ċ /** Ċ Ġ* ĠSets Ġthis Ġview Ġto Ġ[ View . VISIBLE ] Ġstate . Ċ Ġ*/ Ċ fun ĠView . visible () Ġ{ ĊĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE Ċ } Ċ Ċ /** Ċ Ġ* ĠSets Ġthis Ġview Ġto Ġ[ View . IN VISIBLE ] Ġstate . Ċ Ġ*/ Ċ fun ĠView . invisible () Ġ{ ĊĠĠĠ Ġvisibility Ġ= ĠView . IN VISIBLE Ċ } Ċ Ċ /** Ċ Ġ* ĠSets Ġthis Ġview Ġto Ġ[ View . GONE ] Ġstate . Ċ Ġ*/ Ċ fun ĠView . g one () Ġ{ ĊĠĠĠ Ġvisibility Ġ= ĠView . GONE Ċ } Ċ Ċ /** Ċ Ġ* ĠSets Ġthis Ġview Ġto Ġ[ View . VISIBLE ] Ġif Ġthe Ġgiven Ġ[ show ] Ġis Ġtrue . ĠSets Ġthis Ġview Ġto Ġ[ View . GONE ] Ġotherwise . Ċ Ġ*/ Ċ fun ĠView . visible Or G one ( show : ĠBoolean ) Ġ{ ĊĠĠĠ Ġif Ġ( show ) Ġvisible () Ġelse Ġgone () Ċ } Ċ Ċ /** Ċ Ġ* ĠSets Ġthis Ġview Ġto Ġ[ View . VISIBLE ] Ġif Ġthe Ġgiven Ġ[ show ] Ġis Ġtrue . ĠSets Ġthis Ġview Ġto Ġ[ View . IN VISIBLE ] Ġotherwise . Ċ Ġ*/ Ċ fun ĠView . visible Or In visible ( show : ĠBoolean ) Ġ{ ĊĠĠĠ Ġif Ġ( show ) Ġvisible () Ġelse Ġinvisible () Ċ } Ċ Ċ /** Ċ Ġ* ĠWhether Ġor Ġnot Ġthis Ġview Ġis Ġvisible . Ċ Ġ*/ Ċ fun ĠView . isVisible () Ġ= Ġvisibility Ġ== ĠView . VISIBLE Ċ Ċ /** Ċ Ġ* ĠShows Ġthe Ġsoft Ġkeyboard Ġonce Ġthis Ġview Ġg ained Ġfocus . Ċ Ġ*/ Ċ fun ĠView . show Soft Keyboard () Ġ{ ĊĠĠĠ Ġif Ġ( request Focus ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġthis . context . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠ Ġimm . toggle Soft Input ( Input Method Manager . SHOW _ FOR CED , Ġ 0 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠH ides Ġthe Ġsoft Ġkeyboard . Ċ Ġ*/ Ċ fun ĠView . hide Keyboard () Ġ{ ĊĠĠĠ Ġval Ġimm Ġ= Ġthis . context . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠ Ġimm . toggle Soft Input ( Input Method Manager . HIDE _ IMP LICIT _ ONLY , Ġ 0 ) Ċ } Ċ Ċ /** Ċ Ġ* ĠFor ces Ġthe Ġsoft Ġkeyboard Ġto Ġhide . Ċ Ġ*/ Ċ fun ĠView . force Hide Keyboard () Ġ{ ĊĠĠĠ Ġval Ġimm Ġ= Ġthis . context . getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠ Ġimm . hide Soft Input From Window ( window Token , Ġ 0 ) Ċ } Ċ Ċ /** Ċ Ġ* ĠExec utes Ġthe Ġgiven Ġfunction Ġafter Ġthe Ġview Ġhas Ġbeen Ġmeasured . Ċ Ġ*/ Ċ inline Ġfun ĠView . after Measured ( cross inline Ġfunc : ĠView . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġview Tree Observer . add On Global Layout Listener ( object Ġ: ĠView Tree Observer . On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Global Layout () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( meas ured Width Ġ> Ġ 0 Ġ&& Ġmeasured Height Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Tree Observer . remove On Global Layout Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) Ċ } Ċ Ċ fun ĠView . set Padding Top ( padding Top : ĠInt ) Ġ{ ĊĠĠĠ Ġset Padding ( padding Left , Ġpadding Top , Ġpadding Right , Ġpadding Bottom ) Ċ } Ċ Ċ fun ĠView . add R ipple Effect () Ġ{ ĊĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Value Ġ= ĠTyped Value () ĊĠĠĠĠĠĠĠ Ġcontext . theme . resolve Attribute ( android . R . attr . selectable Item Background , Ġout Value , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġforeground Ġ= ĠContext Compat . get Drawable ( context , Ġout Value . resourceId ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġis Clickable Ġ= Ġtrue ĊĠĠĠ Ġis Focus able Ġ= Ġtrue Ċ }