/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . android . example . text . st yling . renderer . spans Ċ Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Path Ċ import Ġandroid . graphics . Path . Direction Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Px Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġandroid . text . Layout Ċ import Ġandroid . text . Sp anned Ċ import Ġandroid . text . style . Leading Margin Span Ċ import Ġandroidx . core . graphics . with Translation Ċ Ċ /** Ċ Ġ* ĠCreating Ġa Ġbullet Ġspan Ġwith Ġbigger Ġbullet s Ġthan Ġ[ android . text . style . Bullet Span ] Ċ Ġ* Ġand Ġwith Ġa Ġleft Ġmargin . Ċ Ġ*/ Ċ class ĠBullet Point Span ( ĊĠĠĠĠĠĠĠ Ġ@ Px Ġprivate Ġval Ġgap Width : ĠInt Ġ= ĠDEFAULT _ GAP _ WIDTH , ĊĠĠĠĠĠĠĠ Ġ@ Color Int Ġprivate Ġval Ġcolor : ĠInt Ġ= ĠColor . BLACK , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġuse Color : ĠBoolean Ġ= Ġcolor Ġ!= ĠColor . BLACK Ċ ) Ġ: ĠLead ing Margin Span Ġ{ ĊĊĠĠĠ Ġ// ĠBy Ġdefault , Ġlazy Ġis Ġthread Ġsafe . ĠThis Ġis Ġgood Ġif Ġthis Ġproperty Ġcan Ġbe Ġaccessed Ġfrom Ġdifferent ĊĠĠĠ Ġ// Ġthreads , Ġbut Ġimpact s Ġperformance Ġotherwise . ĠAs Ġthis Ġproperty Ġis Ġinitialized Ġin Ġa Ġdraw Ġmethod , ĊĠĠĠ Ġ// Ġit 's Ġimportant Ġto Ġbe Ġas Ġfast Ġas Ġpossible . ĊĠĠĠ Ġprivate Ġval Ġbullet Path : ĠPath Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĠPath () Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Leading Margin ( first : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( 2 Ġ* ĠDEFAULT _ B UL LET _ RADIUS Ġ+ Ġ 2 Ġ* Ġgap Width ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUsing Ġa Ġsimilar Ġdrawing Ġmechanism Ġwith Ġ[ android . text . style . Bullet Span ] Ġbut Ġadding ĊĠĠĠĠ Ġ* Ġmargins Ġbefore Ġthe Ġbullet . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdraw Leading Margin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , Ġpaint : ĠPaint , Ġcurrent Margin Location : ĠInt , Ġparagraph Direction : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Top : ĠInt , Ġline Baseline : ĠInt , Ġline Bottom : ĠInt , Ġtext : ĠCharSequence , Ġline Start : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline End : ĠInt , Ġis First Line : ĠBoolean , Ġlayout : ĠLayout ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(( text Ġas ĠSp anned ). get Span Start ( this ) Ġ== Ġline Start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . with Custom Color Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( canvas . is Hardware Accel erated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBullet Ġis Ġslightly Ġbetter Ġto Ġavoid Ġalias ing Ġartifacts Ġon Ġmd pi Ġdevices . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbullet Path . add Circle ( 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 2 f Ġ* ĠDEFAULT _ B UL LET _ RADIUS , ĠDirection . CW ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . with Translation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Circle X Location ( current Margin Location , Ġparagraph Direction ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Circle Y Location ( line Top , Ġline Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Path ( bullet Path , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Circle X Location ( current Margin Location , Ġparagraph Direction ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Circle Y Location ( line Top , Ġline Bottom ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ B UL LET _ RADIUS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Circle Y Location ( line Top : ĠInt , Ġline Bottom : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( line Top Ġ+ Ġline Bottom ) Ġ/ Ġ 2 . 0 f ĊĊĠĠĠ Ġprivate Ġfun Ġget Circle X Location ( current Margin Location : ĠInt , Ġparagraph Direction : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgap Width Ġ+ Ġcurrent Margin Location Ġ+ Ġparagraph Direction Ġ* ĠDEFAULT _ B UL LET _ RADIUS ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ GAP _ WIDTH Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ B UL LET _ RADIUS Ġ= Ġ 1 5 . 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠWhen Ġa Ġcustom Ġcolor Ġis Ġused Ġfor Ġbullet s , Ġthe Ġdefault Ġstyle Ġand Ġcolors Ġneed Ġto Ġbe Ġsaved Ġto ĊĠĠĠ Ġ// Ġthen Ġbe Ġset Ġagain Ġafter Ġthe Ġdraw Ġfinishes . ĠThis Ġextension Ġhide s Ġthe Ġboilerplate . ĊĠĠĠ Ġprivate Ġinline Ġfun ĠPaint . with Custom Color ( block : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġold Style Ġ= Ġstyle ĊĠĠĠĠĠĠĠ Ġval Ġold Color Ġ= Ġif Ġ( use Color ) Ġcolor Ġelse ĠColor . TRANSP ARENT ĊĊĠĠĠĠĠĠĠ Ġif Ġ( use Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġthis @ Bullet Point Span . color ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĊĠĠĠĠĠĠĠ Ġblock () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( use Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġold Color ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstyle Ġ= Ġold Style ĊĠĠĠ Ġ} Ċ } Ċ