/* Ċ Ġ* ĠCopyright Ġ( c ) ĠMicrosoft ĠCorporation . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠLicensed Ġunder Ġthe ĠMIT ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . microsoft . fluent ui . persona Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . support . annotation . Attr Res Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġcom . microsoft . fluent ui . R Ċ import Ġcom . microsoft . fluent ui . util . Theme Util Ċ import Ġcom . microsoft . fluent ui . util . isVisible Ċ import Ġcom . microsoft . fluent ui . view . Template View Ċ import Ġkotlinx . android . synt hetic . main . view _ persona _ chip . view .* Ċ Ċ class ĠPerson a Chip View Ġ: ĠTemplate View Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDISABLE D _ BACKGROUND _ OP ACITY Ġ= Ġ. 6 f ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠENABLE D _ BACKGROUND _ OP ACITY Ġ= Ġ 1 . 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġname : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Views () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġemail : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Views () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġavatar Image Bitmap : ĠBitmap ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Views () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġavatar Image Drawable : ĠDrawable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Views () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġavatar Image ResourceId : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Views () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġavatar Image Uri : ĠUri ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Views () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFlag Ġfor Ġsetting Ġthe Ġchip 's Ġerror Ġstate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar ĠhasError : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Views () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġwhether Ġthe Ġ[ close Icon ] Ġis Ġshown Ġin Ġplace Ġof Ġthe Ġ[ avatar View ] ĊĠĠĠĠ Ġ* Ġwhen Ġthe Ġ[ Person a Chip View ] Ġis Ġselected . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġshow Close Icon When Selected : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhen Ġa Ġchip Ġis Ġselected , Ġthe Ġnext Ġtouch Ġwill Ġfire Ġthe Ġ[ listener ]' s Ġ[ on Clicked ] Ġmethod . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġlistener : ĠListener ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( attrs Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġstyled Attrs Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Person a Chip View ) ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġstyled Attrs . getString ( R . style able . Person a Chip View _ name ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġemail Ġ= Ġstyled Attrs . getString ( R . style able . Person a Chip View _ email ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġshow Close Icon When Selected Ġ= Ġstyled Attrs . getBoolean ( R . style able . Person a Chip View _ show Close Icon When Selected , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġavatar Image ResourceId Ġ= Ġstyled Attrs . getResource Id ( R . style able . Person a Chip View _ avatar Image Drawable , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( avatar Image ResourceId Ġ> Ġ 0 Ġ&& Ġresources . getResource TypeName ( avatar Image ResourceId ) Ġ== Ġ" drawable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavatar Image Drawable Ġ= Ġstyled Attrs . get Drawable ( R . style able . Person a Chip View _ avatar Image Drawable ) ĊĊĠĠĠĠĠĠĠ Ġstyled Attrs . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTemplate ĊĊĠĠĠ Ġoverride Ġval Ġtemplate Id : ĠInt Ġ= ĠR . layout . view _ persona _ chip ĊĠĠĠ Ġprivate Ġvar Ġavatar View : ĠAvatar View ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠtextView : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġclose Icon : ĠImageView ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġon Template Loaded () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Template Loaded () ĊĠĠĠĠĠĠĠ ĠtextView Ġ= Ġperson a _ chip _ text ĊĠĠĠĠĠĠĠ Ġavatar View Ġ= Ġperson a _ chip _ avatar ĊĠĠĠĠĠĠĠ Ġclose Icon Ġ= Ġperson a _ chip _ close ĊĠĠĠĠĠĠĠ Ġupdate State () ĊĠĠĠĠĠĠĠ Ġupdate Views () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Enabled ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setEnabled ( enabled ) ĊĠĠĠĠĠĠĠ Ġupdate State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetSelected ( selected : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setSelected ( selected ) ĊĠĠĠĠĠĠĠ Ġupdate State () ĊĠĠĠĠĠĠĠ Ġlistener ?. on Selected ( selected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isEnabled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ?. action Mask ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Click () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Selected Ġ= Ġ! isSelected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ CANCEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Pressed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġperform Click (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . perform Click () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( isSelected ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Clicked () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate State () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Activated Ġ= Ġis Selected ĊĠĠĠĠĠĠĠ ĠtextView ?. isEnabled Ġ= Ġis Enabled ĊĠĠĠĠĠĠĠ Ġavatar View ?. alpha Ġ= Ġif Ġ( isEnabled ) ĠENABLE D _ BACKGROUND _ OP ACITY Ġelse ĠDISABLE D _ BACKGROUND _ OP ACITY ĊĊĠĠĠĠĠĠĠ Ġval Ġshow Close Icon Ġ= Ġshow Close Icon When Selected Ġ&& Ġis Selected ĊĠĠĠĠĠĠĠ Ġclose Icon ?. isVisible Ġ= Ġshow Close Icon ĊĠĠĠĠĠĠĠ Ġavatar View ?. isVisible Ġ= Ġ! show Close Icon ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Views () Ġ{ ĊĠĠĠĠĠĠĠ ĠtextView ?. text Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . isNotEmpty () Ġ-> Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail . isNotEmpty () Ġ-> Ġemail ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcontext . getString ( R . string . persona _ title _ placeholder ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġavatar View ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġthis @ Person a Chip View . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġthis @ Person a Chip View . email ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavatar Image Drawable Ġ= Ġthis @ Person a Chip View . avatar Image Drawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavatar Image Bitmap Ġ= Ġthis @ Person a Chip View . avatar Image Bitmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavatar Image Uri Ġ= Ġthis @ Person a Chip View . avatar Image Uri ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( has Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Styles ( R . drawable . persona _ chip _ background _ error , ĠR . attr . fluent ui Person a Chip Text Error Color ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Styles ( R . drawable . persona _ chip _ background _ normal , ĠR . attr . fluent ui Person a Chip Text Normal Color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Styles ( background Drawable Id : ĠInt , Ġ@ Attr Res Ġdefault TextColor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbackground Ġ= ĠContext Compat . get Drawable ( context , Ġbackground Drawable Id ) ĊĠĠĠĠĠĠĠ ĠtextView ?. setTextColor ( create Color State List ( default TextColor )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCreate Ġthis Ġin Ġcode Ġinstead Ġof Ġxml Ġto Ġsupport ĠL ol lip op , Ġwhich Ġdoes Ġnot Ġallow Ġattributes Ġin Ġxml Ġselectors . ĊĠĠĠ Ġprivate Ġfun Ġcreate Color State List (@ Attr Res Ġdefault TextColor : ĠInt ): ĠColor State List Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠColor State List ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf (- android . R . attr . state _ enabled ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( android . R . attr . state _ activated ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTheme Util . get Theme Attr Color ( context , ĠR . attr . fluent ui Person a Chip Text Disabled Color ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTheme Util . get Theme Attr Color ( context , ĠR . attr . fluent ui Person a Chip Foreground Active Color ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTheme Util . get Theme Attr Color ( context , Ġdefault TextColor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonClick ed () ĊĠĠĠĠĠĠĠ Ġfun Ġon Selected ( selected : ĠBoolean ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠPerson a Chip View . set Person a ( persona : ĠIP erson a ) Ġ{ ĊĠĠĠ Ġname Ġ= Ġperson a . name ĊĠĠĠ Ġemail Ġ= Ġperson a . email ĊĠĠĠ Ġavatar Image Bitmap Ġ= Ġperson a . avatar Image Bitmap ĊĠĠĠ Ġavatar Image Drawable Ġ= Ġperson a . avatar Image Drawable ĊĠĠĠ Ġavatar Image ResourceId Ġ= Ġperson a . avatar Image ResourceId ĊĠĠĠ Ġavatar Image Uri Ġ= Ġperson a . avatar Image Uri Ċ }