/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠNew ĠVector ĠLtd Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġim . vector . app . core . platform Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . core . view . isVisible Ċ import Ġim . vector . app . R Ċ import Ġim . vector . app . core . extensions . update Constraint Set Ċ import Ġim . vector . app . databinding . ViewState Binding Ċ Ċ class ĠState View Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style : ĠInt Ġ= Ġ 0 ) Ġ: ĊĠĠĠĠĠĠĠ ĠFrame Layout ( context , Ġattrs , Ġdef Style ) Ġ{ ĊĊĠĠĠ Ġsealed Ġclass ĠState Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠContent Ġ: ĠState () ĊĠĠĠĠĠĠĠ Ġobject ĠLoading Ġ: ĠState () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠEmpty ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle : ĠCharSequence ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage : ĠDrawable ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Big Image : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage : ĠCharSequence ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠState () ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠError ( val Ġmessage : ĠCharSequence ? Ġ= Ġnull ) Ġ: ĠState () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġviews : ĠView State Binding ĊĊĠĠĠ Ġvar Ġevent Callback : ĠEvent Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġcontent View : ĠView ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġstate : ĠState Ġ= ĠState . Empty () ĊĠĠĠĠĠĠĠ Ġset ( newState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState Ġ!= Ġstate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( newState ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠEvent Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Retry Clicked () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinf late ( context , ĠR . layout . view _ state , Ġthis ) ĊĠĠĠĠĠĠĠ Ġviews Ġ= ĠView State Binding . bind ( this ) ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠLayout Params ( LayoutParams . MATCH _ PARENT , ĠLayout Params . MATCH _ PARENT ) ĊĠĠĠĠĠĠĠ Ġviews . error Retry View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Callback ?. on Retry Clicked () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstate Ġ= ĠState . Content ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate ( newState : ĠState ) Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . progress Bar . isVisible Ġ= ĠnewState Ġis ĠState . Loading ĊĠĠĠĠĠĠĠ Ġviews . error View . isVisible Ġ= ĠnewState Ġis ĠState . Error ĊĠĠĠĠĠĠĠ Ġviews . empty View . isVisible Ġ= ĠnewState Ġis ĠState . Empty ĊĠĠĠĠĠĠĠ Ġcontent View ?. isVisible Ġ= ĠnewState Ġis ĠState . Content ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( newState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState . Content Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState . Loading Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState . Empty Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . empty ImageView . setImage Drawable ( newState . image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . empty View . update Constraint Set Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . constr ain Percent Height ( R . id . empty ImageView , Ġif Ġ( newState . is Big Image ) Ġ 0 . 5 f Ġelse Ġ 0 . 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . empty Message View . text Ġ= ĠnewState . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . empty Title View . text Ġ= ĠnewState . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . errorMessage View . text Ġ= ĠnewState . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ