package Ġcom . f ory ou and me . core . arch . loading Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Animation Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . f ory ou and me . R Ċ import Ġcom . f ory ou and me . core . arch . deps . Image Configuration Ċ import Ġcom . f ory ou and me . core . ext . adjust Alpha Ċ import Ġcom . f ory ou and me . core . ext . catch To Null Suspend Ċ import Ġcom . f ory ou and me . core . ext . dp To Px Ċ import Ġcom . f ory ou and me . core . ext . launch Safe Ċ import Ġcom . f ory ou and me . databinding . Loading Binding Ċ import Ġcom . f ory ou and me . domain . policy . Policy Ċ import Ġcom . f ory ou and me . domain . use case . configuration . Get Configuration UseCase Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . Del icate Cor outines Api Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class ĠLoading View ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: ĠFrame Layout ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġimage Configuration : ĠImage Configuration ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġget Configuration UseCase : ĠGet Configuration UseCase ĊĊĠĠĠ Ġprivate Ġvar Ġrotation : ĠAnimation ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġbinding : ĠLoading Binding Ġ= ĊĠĠĠĠĠĠĠ ĠLoading Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġrotation Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . rotate ) ĊĊĠĠĠĠĠĠĠ Ġapply Theme ( true , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġis Focus able Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġis Clickable Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ 2 0 . dp To Px (). toFloat () ĊĊĠĠĠĠĠĠĠ Ġhide () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow (): ĠUnit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġrotation ?. let Ġ{ Ġbinding . loader . start Animation ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide (): ĠUnit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbinding . loader . clear Animation () ĊĊĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Visibility ( ĊĠĠĠĠĠĠĠ Ġis Visible : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġopaque : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġ@ Drawable Res Ġloader Image : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġapply Theme ( opaque , Ġloader Image ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( isVisible ) Ġshow () Ġelse Ġhide () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Loader (@ Drawable Res Ġimage : ĠInt ): ĠUnit Ġ= Ġbinding . loader . setImage Resource ( image ) ĊĊĠĠĠ Ġ@ Del icate Cor outines Api ĊĠĠĠ Ġprivate Ġfun Ġapply Theme ( opaque : ĠBoolean , Ġ@ Drawable Res Ġloader Image : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Safe Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loader . setImage Resource ( loader Image Ġ?: ĠR . drawable . loading ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch To Null Suspend Ġ{ Ġget Configuration UseCase ( Policy . Local First ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration ?. theme ?. secondary Color ?. color () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠContext Compat . getColor ( context , ĠR . color . loading ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset BackgroundColor ( if Ġ( opaque ) Ġadjust Alpha ( color , Ġ 0 . 5 f ) Ġelse Ġcolor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }