/* Ċ Ġ* ĠCopyright Ġ( c ) ĠMicrosoft ĠCorporation . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠLicensed Ġunder Ġthe ĠMIT ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . microsoft . fluent ui . persona Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . support . annotation . Color Int Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 7 . widget . AppCompat ImageView Ċ import Ġandroid . util . Attribute Set Ċ import Ġcom . microsoft . fluent ui . R Ċ Ċ enum Ġclass ĠAvatar Style Ġ{ ĊĠĠĠ ĠC IR CLE , ĠS QUARE Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ Avatar View ] Ġis Ġa Ġcustom ĠImageView Ġthat Ġdisplays Ġthe Ġinitial s Ġof Ġa Ġperson Ġon Ġtop Ġof Ġa Ġcolored Ġcircular Ċ Ġ* Ġbackground . ĠThe Ġinitial s Ġare Ġextracted Ġfrom Ġtheir Ġname Ġor Ġemail . ĠThe Ġcolor Ġof Ġthe Ġcircular Ċ Ġ* Ġbackground Ġis Ġcomputed Ġfrom Ġthe Ġname Ġand Ġis Ġbased Ġon Ġan Ġarray Ġof Ġcolors . Ċ Ġ*/ Ċ open Ġclass ĠAvatar View Ġ: ĠAppCompat ImageView Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠDEFAULT _ AV AT AR _ SIZE Ġ= ĠAvatar Size . LARGE ĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠDEFAULT _ AV AT AR _ STYLE Ġ= ĠAvatar Style . CIR CLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstyled Attrs Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Avatar View ) ĊĠĠĠĠĠĠĠ Ġval Ġavatar Size Ordinal Ġ= Ġstyled Attrs . getInt ( R . style able . Avatar View _ avatar Size , ĠDEFAULT _ AV AT AR _ SIZE . ordinal ) ĊĠĠĠĠĠĠĠ Ġval Ġavatar Style Ordinal Ġ= Ġstyled Attrs . getInt ( R . style able . Avatar View _ avatar Style , ĠDEFAULT _ AV AT AR _ STYLE . ordinal ) ĊĊĠĠĠĠĠĠĠ Ġname Ġ= Ġstyled Attrs . getString ( R . style able . Avatar View _ name ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġemail Ġ= Ġstyled Attrs . getString ( R . style able . Avatar View _ email ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġavatar Size Ġ= ĠAvatar Size . values ()[ avatar Size Ordinal ] ĊĠĠĠĠĠĠĠ Ġavatar Style Ġ= ĠAvatar Style . values ()[ avatar Style Ordinal ] ĊĊĠĠĠĠĠĠĠ Ġval Ġavatar Image ResourceId Ġ= Ġstyled Attrs . getResource Id ( R . style able . Avatar 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 . Avatar View _ avatar Image Drawable ) ĊĊĠĠĠĠĠĠĠ Ġval Ġavatar BackgroundColor ResourceId Ġ= Ġstyled Attrs . getResource Id ( R . style able . Avatar View _ avatar BackgroundColor , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( avatar BackgroundColor ResourceId Ġ> Ġ 0 Ġ&& Ġresources . getResource TypeName ( avatar BackgroundColor ResourceId ) Ġ== Ġ" color ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavatar BackgroundColor Ġ= ĠContext Compat . getColor ( context , Ġavatar BackgroundColor ResourceId ) ĊĊĠĠĠĠĠĠĠ Ġstyled Attrs . recycle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġname : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial s . set Info ( name , Ġemail , Ġavatar BackgroundColor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġemail : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial s . set Info ( name , Ġemail , Ġavatar BackgroundColor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġavatar Image Bitmap : ĠBitmap ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Bitmap ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġavatar Image Drawable : ĠDrawable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Drawable ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġavatar Image ResourceId : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Ġit Ġ!= Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Resource ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġavatar Image Uri : ĠUri ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Image URI ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ@ Color Int ĊĠĠĠ Ġvar Ġavatar BackgroundColor : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial s . set Info ( name , Ġemail , Ġavatar BackgroundColor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefines Ġthe Ġ[ Avatar Size ] Ġapplied Ġto Ġthe Ġavatar 's Ġheight Ġand Ġwidth . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġavatar Size : ĠAvatar Size Ġ= ĠDEFAULT _ AV AT AR _ SIZE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefines Ġthe Ġ[ Avatar Style ] Ġapplied Ġto Ġthe Ġavatar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġavatar Style : ĠAvatar Style Ġ= ĠDEFAULT _ AV AT AR _ STYLE ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ== Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġinitial s Ġ= ĠInitial s Drawable ( context ) ĊĠĠĠ Ġprivate Ġval Ġavatar Display Size : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġavatar Size . getDisplay Value ( context ) ĊĠĠĠ Ġprivate Ġval Ġpath : ĠPath Ġ= ĠPath () ĊĊĠĠĠ Ġoverride Ġfun Ġdraw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġavatar Bounds Rect Ġ= ĠRect ( 0 , Ġ 0 , Ġavatar Display Size , Ġavatar Display Size ) ĊĊĠĠĠĠĠĠĠ Ġinitial s . avatar Style Ġ= Ġavatar Style ĊĠĠĠĠĠĠĠ Ġinitial s . bounds Ġ= Ġavatar Bounds Rect ĊĠĠĠĠĠĠĠ Ġinitial s . draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġpath . reset () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( avatar Style ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAvatar Style . CIR CLE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . add Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavatar Bounds Rect . width () Ġ/ Ġ 2 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavatar Bounds Rect . height () Ġ/ Ġ 2 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavatar Bounds Rect . width () Ġ/ Ġ 2 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . Direction . CW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAvatar Style . S QUARE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcorner Radius Ġ= Ġresources . get Dimension ( R . dim en . fluent ui _ avatar _ square _ corner _ radius ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . add Round Rect ( Rect F ( avatar Bounds Rect ), Ġcorner Radius , Ġcorner Radius , ĠPath . Direction . CW ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcanvas . clip Path ( path ) ĊĊĠĠĠĠĠĠĠ Ġsuper . draw ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Image Drawable ( drawable : ĠDrawable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġis ĠBitmap Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Bitmap ( drawable . bitmap ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . setImage Drawable ( drawable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Image Bitmap ( bitmap : ĠBitmap ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġsuper . setImage Drawable ( Bitmap Drawable ( resources , Ġbitmap )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Image URI ( uri : ĠUri ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( uri Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠMedia Store . Images . Media . get Bitmap ( context . content Resolver , Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Bitmap ( bitmap ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Size And State ( avatar Display Size , Ġwidth Measure Spec , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Size And State ( avatar Display Size , Ġheight Measure Spec , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( w : ĠInt , Ġh : ĠInt , Ġold w : ĠInt , Ġold h : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlayout Params . width Ġ= Ġavatar Display Size ĊĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= Ġavatar Display Size ĊĊĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( w , Ġh , Ġold w , Ġold h ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠAvatar View . set Avatar ( avatar : ĠI Avatar ) Ġ{ ĊĠĠĠ Ġname Ġ= Ġavatar . name ĊĠĠĠ Ġemail Ġ= Ġavatar . email ĊĠĠĠ Ġavatar Image Bitmap Ġ= Ġavatar . avatar Image Bitmap ĊĠĠĠ Ġavatar Image Drawable Ġ= Ġavatar . avatar Image Drawable ĊĠĠĠ Ġavatar Image ResourceId Ġ= Ġavatar . avatar Image ResourceId ĊĠĠĠ Ġavatar Image Uri Ġ= Ġavatar . avatar Image Uri ĊĠĠĠ Ġavatar BackgroundColor Ġ= Ġavatar . avatar BackgroundColor Ċ }