package Ġcom . fe v zi om ur te kin . dee zer . core . binding Ċ Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Image Button Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . core . view . is G one Ċ import Ġandroidx . databinding . Binding Adapter Ċ import Ġandroidx . databinding . Observable Boolean Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġco il . load Ċ import Ġco il . size . Scale Ċ import Ġco il . transform . Blur Transformation Ċ import Ġcom . fe v zi om ur te kin . dee zer . R Ċ import Ġcom . fe v zi om ur te kin . dee zer . core . data . Api Result Ċ import Ġcom . fe v zi om ur te kin . dee zer . core . extensions . isNotNull Ċ import Ġcom . fe v zi om ur te kin . dee zer . core . extensions . is Success And NotNull Ċ import Ġcom . fe v zi om ur te kin . dee zer . data . Artist Detail Response Ċ import Ġcom . fe v zi om ur te kin . dee zer . data . MediaPlayer State Ċ import Ġcom . fe v zi om ur te kin . dee zer . entities . Album Entity Ċ import Ġcom . google . gson . Gson Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* ĠHelp Ġin Ġthe Ġdevelopment Ġof Ġthis Ġclass , Ġthe Ġapplication Ġnamed Ġ' Po ke dex ' Ġ@ Sky do ves Ġuser Ġhas Ġhelped . Ċ Ġ* Ġhttps :// github . com / sky do ves / Po ke dex / blob / master / app / src / main / java / com / sky do ves / poke dex / binding / View Binding . kt Ċ Ġ* Ġ*/ Ċ Ċ private Ġconst Ġval ĠDEFAULT _ RADIUS _ VALUE Ġ= Ġ 6 F Ċ private Ġconst Ġval ĠDEFAULT _ SAMP LING _ VALUE Ġ= Ġ 0 . 3 F Ċ private Ġconst Ġval ĠDEFAULT _ AR TI ST _ RADIUS _ VALUE Ġ= Ġ 1 F Ċ private Ġconst Ġval ĠDEFAULT _ AR TI ST _ SAMP LING _ VALUE Ġ= Ġ 0 . 9 F Ċ Ċ /* ĠLoad Ġto ĠImage Ġwith Ġurl Ġinside Ġto Ġlayout Ġfiles Ċ * ĠRe cycler view Ġitem . ĠBl uring Ġimage view . Ċ * Ġ*/ Ċ @ Binding Adapter (" bind ImageUrl ") Ċ fun Ġbind Load ImageUrl ( view : ĠImageView , Ġurl : ĠString ?) Ġ{ ĊĠĠĠ Ġurl ?. let Ġ{ Ġsafe Url Ġ-> ĊĠĠĠĠĠĠĠ Ġview . load ( safe Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcross fade ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale ( Scale . FIT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplaceholder ( R . color . color Primary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransformations ( Blur Transformation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ RADIUS _ VALUE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ SAMP LING _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter (" bind Image Artist ") Ċ fun Ġbind Load Image Artist Details ( view : ĠImageView , Ġresults : LiveData < Api Result < Artist Detail Response >>) Ġ{ ĊĠĠĠ Ġwhen Ġ( results . value ) Ġ{ ĊĠĠĠĠĠĠĠ ĠApi Result . Loading , Ġis ĠApi Result . Error -> Ġ{/* ĠNothing Ġ*/ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠApi Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimg Url Ġ= Ġ(( results . value Ġas ĠApi Result . Success < Artist Detail Response >). data . picture Big ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Binding Ġurl Ġ: Ġ$ img Url Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . load ( img Url ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcross fade ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplaceholder ( R . color . color Primary ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransformations ( Blur Transformation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ AR TI ST _ RADIUS _ VALUE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ AR TI ST _ SAMP LING _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter (" is G one ") Ċ fun Ġbind G one ( view : View , Ġis G one : Boolean ){ ĊĠĠĠ Ġview . is G one Ġ= Ġis G one Ċ } Ċ Ċ /* Ġsearch Ġlayout Ġ*/ Ċ @ Binding Adapter (" is G one Layout ") Ċ fun < T > Ġbinding Is G one Layout ( view : ĠView , results : LiveData < Api Result < T >> ){ ĊĠĠĠ ĠTim ber . d (" binding Is G one Layout Ġ${ view . id Ġ== ĠR . id . recycler _ genre } ĠĠ Ġresult Ġ: Ġ${ Gson (). toJson ( results . value )} ") ĊĠĠĠ Ġif ( results . value . isNotNull ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( results . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Result . Loading , Ġis ĠApi Result . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( view . id ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . shim mer Layout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . lv _ search _ album -> view . is G one Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse -> Ġview . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠApi Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( view . id ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . shim mer Layout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . lv _ recent _ search -> Ġview . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse -> Ġview . is G one Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" binding Is G one Layout Ġfalse Ġ") ĊĠĠĠĠĠĠĠ Ġview . is G one Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter (" is G one Favorite Layout ") Ċ fun Ġbinding Is G one Favorite Layout ( view : ĠView , results : LiveData < Api Result < List < Album Entity >>> ){ ĊĠĠĠ ĠTim ber . d (" binding Is G one Favorite Layout Ġ: Ġ${ results . value } Ġis G one Ġ: Ġ${ results . value . is Success And NotNull () }") ĊĠĠĠ Ġwhen ( view . id ){ ĊĠĠĠĠĠĠĠ ĠR . id . recycler _ genre ->{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . is G one Ġ= Ġ! results . value . is Success And NotNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse ->{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . is G one Ġ= Ġresults . value . is Success And NotNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter (" is G one MediaPlayer ") Ċ fun Ġbinding Is G one MediaPlayer ( view : ĠView , observer Is G one : Observable Boolean ){ ĊĠĠĠ ĠTim ber . d (" is G one MediaPlayer Ġ: Ġ${ observer Is G one . get () }") ĊĠĠĠ Ġview . is G one Ġ= Ġwhen ( view . id ){ ĊĠĠĠĠĠĠĠ ĠR . id . cl _ media _ player -> Ġ! observer Is G one . get () ĊĠĠĠĠĠĠĠ Ġelse -> Ġobserver Is G one . get () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter (" icon Play Pause ") Ċ fun Ġicon Play Pause ( view : ĠImage Button , Ġstate : Mutable LiveData < MediaPlayer State > ){ ĊĠĠĠ Ġview . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġset Image Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( state . value ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Player State . PLAY ING -> R . drawable . ic _ pause ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse -> R . drawable . ic _ play ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġadjust View Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġrefresh Drawable State () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter (" is G one Volume Controller ") Ċ fun Ġbinding Is G one Volume Controller ( view : ĠView , observer Is G one : Observable Boolean ){ ĊĠĠĠ ĠTim ber . d (" is G one MediaPlayer Ġ: Ġ${ observer Is G one . get () }") ĊĠĠĠ Ġview . is G one Ġ= Ġ! observer Is G one . get () Ċ } Ċ Ċ @ Binding Adapter (" is Network Error ") Ċ fun Ġbinding Is Network Error ( view : ĠView , Ġobserver Is Network : Observable Boolean ){ ĊĠĠĠ ĠTim ber . d (" is Network Error Ġ: Ġ${ observer Is Network . get () }") ĊĠĠĠ Ġview . is G one Ġ= Ġobserver Is Network . get () Ċ } Ċ