package Ġorg . edx . mobile . util Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . text . Sp ann able String Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . text . style . Underline Span Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . widget . TextView Compat Ċ import Ġandroidx . databinding . Binding Adapter Ċ import Ġcom . jo anz ap ata . icon ify . Icon Drawable Ċ import Ġcom . jo anz ap ata . icon ify . fonts . FontAwesome Icons Ċ import Ġkotlinx . android . synt hetic . main . sub _ item _ course _ date _ block . view .* Ċ import Ġorg . edx . mobile . R Ċ import Ġorg . edx . mobile . interfaces . On Date Block Listener Ċ import Ġorg . edx . mobile . model . course . Course Date Block Ċ Ċ /** Ċ Ġ* ĠData Binding Helper Utils Ġallows Ġyou Ġto Ġspecify Ġthe Ġmethod Ġcalled Ġto Ġset Ġa Ġvalue , Ċ Ġ* Ġprovide Ġyour Ġown Ġbinding Ġlogic , Ġand Ġspecify Ġthe Ġtype Ġof Ġthe Ġreturned Ġobject Ġby Ġusing Ġadapters . Ċ Ġ* ĠRef : Ġhttps :// developer . android . com / topic / libraries / data - binding / binding - adapters Ċ Ġ*/ Ċ class ĠData Binding Helper Utils Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Binding Adapter (" binding : is User Has Access ") ĊĠĠĠĠĠĠĠ Ġfun Ġis View Accessible ( view : ĠView , Ġtype : ĠCourse Date Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Date Type . VER IFI ED _ ONLY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Date Type . NOT _ Y ET _ RELEASE D Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Binding Adapter (" binding : setText ") ĊĠĠĠĠĠĠĠ Ġfun Ġset Text ( textView : ĠTextView , Ġtext : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text . isNull Or Blank (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Binding Adapter (" binding : isVisible ") ĊĠĠĠĠĠĠĠ Ġfun Ġis View Visible ( view : ĠView , Ġis Visible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . visibility Ġ= Ġif Ġ( isVisible ) ĠView . VISIBLE Ġelse ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Binding Adapter (" binding : addView ", Ġ" binding : click Listener ", Ġrequire All Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġfun Ġadd View ( linear Layout : ĠLinearLayout , Ġlist : ĠArrayList < Course Date Block >, Ġclick Listener : ĠOn Date Block Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinflater : ĠLayoutInflater Ġ= Ġlinear Layout . context . getSystem Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( linear Layout . child Count Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild View Ġ= Ġinflater . inflate ( R . layout . sub _ item _ course _ date _ block , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlabel Type Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= ĠSp ann able String ( item . title ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . assignment Type . isNull Or Blank (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Type Ġ= Ġ"${ item . assignment Type }: Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . show Link ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle . set Span ( Underline Span (), Ġ 0 , Ġtitle . length , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis View Visible ( child View . title , Ġitem . title . isNull Or Blank (). not ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild View . title . text Ġ= ĠText Utils . concat ( label Type , Ġtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis View Accessible ( child View . title , Ġitem . date Block Badge ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( child View . description , Ġitem . description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis View Accessible ( child View . description , Ġitem . date Block Badge ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . show Link ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Listener . onClick ( item . link ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlinear Layout . addView ( child View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Binding Adapter (" binding : bullet Background ", Ġ" binding : is Date Past ", Ġrequire All Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġfun Ġset Bullet Background ( bullet View : ĠView , Ġtype : ĠCourse Date Type , Ġis Date Past : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbullet View . br ing To Front () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Date Type . P AST _ D UE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbullet View . background Ġ= ĠContext Compat . get Drawable ( bullet View . context , ĠR . drawable . black _ border _ gray _ circle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Date Type . BLANK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Date Type . COMPLETED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Date Type . D UE _ NEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Date Type . NOT _ Y ET _ RELEASE D , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Date Type . VER IFI ED _ ONLY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Date Past Ġ&& Ġ( type Ġ== ĠCourse Date Type . VER IFI ED _ ONLY ). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbullet View . background Ġ= ĠContext Compat . get Drawable ( bullet View . context , ĠR . drawable . black _ border _ white _ circle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbullet View . background Ġ= ĠContext Compat . get Drawable ( bullet View . context , ĠR . drawable . black _ circle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Binding Adapter (" binding : badge Background ", Ġ" binding : is Today ", Ġrequire All Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġfun Ġset Badge Background ( textView : ĠTextView , Ġtype : ĠCourse Date Type , Ġis Today : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Today Ġ|| Ġtype Ġ== ĠCourse Date Type . TO DAY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= ĠCourse Date Type . TO DAY . getTitle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Context Compat . getColor ( textView . context , ĠR . color . course _ date _ badge _ black )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . background Ġ= ĠContext Compat . get Drawable ( textView . context , ĠR . drawable . yellow _ rounded bg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( textView , Ġtype . getTitle ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Date Type . VER IFI ED _ ONLY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Context Compat . getColor ( textView . context , ĠR . color . course _ date _ badge _ white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . background Ġ= ĠContext Compat . get Drawable ( textView . context , ĠR . drawable . black _ rounded bg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTextView Compat . set Compound Draw ables Relative With Intr insic Bounds ( textView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Drawable ( textView . context , ĠFont Awesome Icons . fa _ lock ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size Res ( textView . context , ĠR . dim en . small _ icon _ size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color Res ( textView . context , ĠR . color . white ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġnull , Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Date Type . COMPLETED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Context Compat . getColor ( textView . context , ĠR . color . course _ date _ badge _ gray )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . background Ġ= ĠContext Compat . get Drawable ( textView . context , ĠR . drawable . light _ silver _ rounded bg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Date Type . P AST _ D UE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Context Compat . getColor ( textView . context , ĠR . color . course _ date _ badge _ gray )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . background Ġ= ĠContext Compat . get Drawable ( textView . context , ĠR . drawable . light _ gray _ rounded bg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Date Type . D UE _ NEXT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Context Compat . getColor ( textView . context , ĠR . color . course _ date _ badge _ white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . background Ġ= ĠContext Compat . get Drawable ( textView . context , ĠR . drawable . dark _ gray _ rounded bg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCourse Date Type . NOT _ Y ET _ RELEASE D Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Context Compat . getColor ( textView . context , ĠR . color . course _ date _ badge _ silver )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . background Ġ= ĠContext Compat . get Drawable ( textView . context , ĠR . drawable . silver _ border _ transparent _ rounded bg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ