/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 Ġcom . google . samples . apps . ios ched . util Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . GONE Ċ import Ġandroid . view . View . VISIBLE Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . browser . custom tabs . Custom Tabs Intent Ċ import Ġandroidx . browser . custom tabs . Custom Tabs Service Ċ import Ġandroidx . core . net . to Uri Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . databinding . Binding Adapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . view pager 2 . widget . Margin Page Transformer Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . google . android . material . color . Material Colors Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton Ċ import Ġcom . google . samples . apps . ios ched . R Ċ import Ġcom . google . samples . apps . ios ched . model . Theme Ċ import Ġcom . google . samples . apps . ios ched . model . Theme . DARK Ċ import Ġcom . google . samples . apps . ios ched . widget . Custom Swipe Refresh Layout Ċ import Ġcom . google . samples . apps . ios ched . widget . Space Decoration Ċ import Ġtim ber . log . Tim ber Ċ Ċ @ Binding Adapter (" g one Unless ") Ċ fun Ġgone Unless ( view : ĠView , Ġvisible : ĠBoolean ) Ġ{ ĊĠĠĠ Ġview . visibility Ġ= Ġif Ġ( visible ) ĠVIS IBLE Ġelse ĠG ONE Ċ } Ċ Ċ @ Binding Adapter (" fab Visibility ") Ċ fun Ġfab Visibility ( fab : ĠFloating ActionButton , Ġvisible : ĠBoolean ) Ġ{ ĊĠĠĠ Ġif Ġ( visible ) Ġfab . show () Ġelse Ġfab . hide () Ċ } Ċ Ċ @ Binding Adapter (" page Margin ") Ċ fun Ġpage Margin ( view Pager : ĠView Pager 2 , Ġpage Margin : ĠFloat ) Ġ{ ĊĠĠĠ Ġview Pager . set Page Transformer ( Margin Page Transformer ( page Margin . toInt ())) Ċ } Ċ Ċ @ Binding Adapter (" clip To Circle ") Ċ fun Ġclip To Circle ( view : ĠView , Ġclip : ĠBoolean ) Ġ{ ĊĠĠĠ Ġview . clip To Outline Ġ= Ġclip ĊĠĠĠ Ġview . outline Provider Ġ= Ġif Ġ( clip ) ĠCircular Outline Provider Ġelse Ġnull Ċ } Ċ Ċ @ Binding Adapter ( ĊĠĠĠ Ġvalue Ġ= Ġ[ ĊĠĠĠĠĠĠĠ Ġ" moment ImageUrl ", ĊĠĠĠĠĠĠĠ Ġ" moment ImageUrl Dark Theme ", ĊĠĠĠĠĠĠĠ Ġ" moment Theme " ĊĠĠĠ Ġ], ĊĠĠĠ Ġrequire All Ġ= Ġfalse Ċ ) Ċ fun Ġmoment ImageUrl ( ĊĠĠĠ ĠimageView : ĠImageView , ĊĠĠĠ Ġmoment ImageUrl : ĠString ?, ĊĠĠĠ Ġmoment ImageUrl Dark Theme : ĠString ?, ĊĠĠĠ Ġmoment Theme : ĠTheme ? Ċ ) Ġ{ ĊĠĠĠ Ġwhen Ġ( moment Theme ) Ġ{ ĊĠĠĠĠĠĠĠ ĠD ARK Ġ-> Ġimage Uri ( imageView , Ġmoment ImageUrl Dark Theme ?. to Uri (), Ġnull ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġimage Uri ( imageView , Ġmoment ImageUrl ?. to Uri (), Ġnull ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter ( value Ġ= Ġ[" image Uri ", Ġ" placeholder "], Ġrequire All Ġ= Ġfalse ) Ċ fun Ġimage Uri ( imageView : ĠImageView , Ġimage Uri : ĠUri ?, Ġplaceholder : ĠDrawable ?) Ġ{ ĊĠĠĠ Ġwhen Ġ( image Uri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Un setting Ġimage Ġurl ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( imageView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( placeholder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( imageView ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( imageView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( image Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions (). placeholder ( placeholder )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( imageView ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter ( value Ġ= Ġ[" imageUrl ", Ġ" placeholder "], Ġrequire All Ġ= Ġfalse ) Ċ fun ĠimageUrl ( imageView : ĠImageView , ĠimageUrl : ĠString ?, Ġplaceholder : ĠDrawable ?) Ġ{ ĊĠĠĠ Ġimage Uri ( imageView , ĠimageUrl ?. to Uri (), Ġplaceholder ) Ċ } Ċ Ċ /** Ċ Ġ* ĠSets Ġthe Ġcolors Ġof Ġthe Ġ[ Custom Swipe Refresh Layout ] Ġloading Ġindicator . Ċ Ġ*/ Ċ @ Binding Adapter (" swipe Refresh Colors ") Ċ fun Ġset Swipe Refresh Colors ( swipe Refresh Layout : ĠCustom Swipe Refresh Layout , Ġcolor Res Ids : ĠInt Array ) Ġ{ ĊĠĠĠ Ġswipe Refresh Layout . setColor Scheme Colors (* color Res Ids ) Ċ } Ċ Ċ /** ĠSet Ġtext Ġon Ġa Ġ[ TextView ] Ġfrom Ġa Ġstring Ġresource . Ġ*/ Ċ @ Binding Adapter (" android : text ") Ċ fun Ġset Text ( view : ĠTextView , Ġ@ String Res Ġres Id : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( res Id Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . text Ġ= Ġnull ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġview . setText ( res Id ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Binding Adapter (" item Spacing ") Ċ fun Ġitem Spacing ( view : ĠRecyclerView , Ġdim en : ĠFloat ) Ġ{ ĊĠĠĠ Ġval Ġspace Ġ= Ġdim en . toInt () ĊĠĠĠ Ġif Ġ( space Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . addItem Decoration ( Space Decoration ( space , Ġspace , Ġspace , Ġspace )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġconst Ġval ĠCH ROME _ PACKAGE Ġ= Ġ" com . android . chrome " Ċ Ċ @ Binding Adapter (" website Link ", Ġ" hide When Empty ", Ġrequire All Ġ= Ġfalse ) Ċ fun Ġwebsite Link ( ĊĠĠĠ Ġbutton : ĠView , ĊĠĠĠ Ġurl : ĠString ?, ĊĠĠĠ Ġhide When Empty : ĠBoolean Ġ= Ġfalse Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( url . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( hide When Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . is Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġbutton . isVisible Ġ= Ġtrue ĊĠĠĠ Ġbutton . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġopen Website Url ( it . context , Ġurl ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġopen Website Url ( context : ĠContext , Ġurl : ĠString ) Ġ{ ĊĠĠĠ Ġif Ġ( url . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġopen Website Uri ( context , ĠUri . parse ( url )) Ċ } Ċ Ċ fun Ġopen Website Uri ( context : ĠContext , Ġuri : ĠUri ) Ġ{ ĊĠĠĠ Ġif Ġ( context . is Chrome Custom Tabs Supported ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠCustom Tabs Intent . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Toolbar Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Colors . getColor ( context , ĠR . attr . color Primary , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Secondary Toolbar Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Colors . getColor ( context , ĠR . attr . color Primary Variant , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch Url ( context , Ġuri ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . startActivity ( Intent ( Intent . ACTION _ VIEW , Ġuri )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠContext . is Chrome Custom Tabs Supported (): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġservice Intent Ġ= ĠIntent ( Custom Tabs Service . ACTION _ CUSTOM _ TAB S _ CONNECTION ) ĊĠĠĠ Ġservice Intent . set Package ( CH ROME _ PACKAGE ) ĊĠĠĠ Ġval Ġresolve Infos Ġ= Ġpackage Manager . query Intent Services ( service Intent , Ġ 0 ) ĊĠĠĠ Ġreturn Ġ! resolve Infos . isNull OrEmpty () Ċ } Ċ