/** Ċ Ġ* ĠBack pack Ġfor ĠAndroid Ġ- ĠSky scanner 's ĠDesign ĠSystem Ċ Ġ* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 - 2 0 2 1 ĠSky scanner ĠLtd Ċ Ġ* Ċ Ġ* Ġ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 Ġnet . sky scanner . back pack . text Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Int Def Ċ import Ġandroidx . annotation . Style Res Ċ import Ġandroidx . appcompat . widget . AppCompat TextView Ċ import Ġnet . sky scanner . back pack . R Ċ import Ġnet . sky scanner . back pack . text . internal . Font Family Resolver Ċ import Ġnet . sky scanner . back pack . util . B pk Theme Ċ import Ġnet . sky scanner . back pack . util . Resources Util Ċ import Ġnet . sky scanner . back pack . util . use Ċ Ċ private Ġval Ġstyle Mapping Ġ= Ġmap Of ( ĊĠ ĠB pk Text . XS Ġto ĠarrayOf ( R . attr . b pk Text Xs Appearance , ĠR . attr . b pk Text Xs Emp has ized Appearance , Ġnull ), ĊĠ ĠB pk Text . SM Ġto ĠarrayOf ( R . attr . b pk Text Sm Appearance , ĠR . attr . b pk Text Sm Emp has ized Appearance , Ġnull ), ĊĠ ĠB pk Text . CAPS Ġto ĠarrayOf ( R . attr . b pk Text Caps Appearance , ĠR . attr . b pk Text Caps Emp has ized Appearance , Ġnull ), ĊĠ ĠB pk Text . BASE Ġto ĠarrayOf ( R . attr . b pk Text Base Appearance , ĠR . attr . b pk Text Base Emp has ized Appearance , Ġnull ), ĊĠ ĠB pk Text . LG Ġto ĠarrayOf ( R . attr . b pk Text Lg Appearance , ĠR . attr . b pk Text Lg Emp has ized Appearance , Ġnull ), ĊĠ ĠB pk Text . XL Ġto ĠarrayOf ( R . attr . b pk Text Xl Appearance , ĠR . attr . b pk Text Xl Emp has ized Appearance , ĠR . attr . b pk Text Xl He avy Appearance ), ĊĠ ĠB pk Text . XX L Ġto ĠarrayOf ( ĊĠĠĠ ĠR . attr . b pk Text X xl Appearance , ĊĠĠĠ ĠR . attr . b pk Text X xl Emp has ized Appearance , ĊĠĠĠ ĠR . attr . b pk Text X xl He avy Appearance ĊĠ Ġ), ĊĠ ĠB pk Text . XXX L Ġto ĠarrayOf ( ĊĠĠĠ ĠR . attr . b pk Text X xx l Appearance , ĊĠĠĠ ĠR . attr . b pk Text X xx l Emp has ized Appearance , ĊĠĠĠ ĠR . attr . b pk Text X xx l He avy Appearance ĊĠ Ġ) Ċ ) Ċ Ċ open Ġclass ĠB pk Text Ġ@ Jvm Over loads Ġconstructor ( ĊĠ Ġcontext : ĠContext , ĊĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠAppCompat TextView ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠ Ġenum Ġclass ĠWeight Ġ{ ĊĠĠĠ ĠNORMAL , ĊĠĠĠ ĠEMP HAS IZED , ĊĠĠĠ ĠHE AV Y ĊĠ Ġ} ĊĊĠ Ġ@ Int Def ( XS , ĠSM , ĠBASE , ĠLG , ĠX L , ĠX XL , ĠXXX L , ĠCAP S ) ĊĠ Ġannotation Ġclass ĠStyles ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġconst Ġval ĠX S Ġ= Ġ 0 ĊĠĠĠ Ġconst Ġval ĠSM Ġ= Ġ 1 ĊĠĠĠ Ġconst Ġval ĠBASE Ġ= Ġ 2 ĊĠĠĠ Ġconst Ġval ĠLG Ġ= Ġ 3 ĊĠĠĠ Ġconst Ġval ĠX L Ġ= Ġ 4 ĊĠĠĠ Ġconst Ġval ĠX XL Ġ= Ġ 5 ĊĠĠĠ Ġconst Ġval ĠXXX L Ġ= Ġ 6 ĊĠĠĠ Ġconst Ġval ĠCAP S Ġ= Ġ 7 ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Font ( ĊĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠ Ġtext Style : ĠInt Ġ= ĠB pk Text . BASE , ĊĠĠĠĠĠ Ġweight : ĠB pk Text . Weight Ġ= ĠB pk Text . Weight . NORMAL ĊĠĠĠ Ġ) Ġ= ĊĠĠĠĠĠ Ġinternal Get Font ( context , Ġtext Style , Ġweight ) ĊĠ Ġ} ĊĊĠ Ġ@ Styles ĊĠ Ġprivate Ġvar Ġ_ text Style : ĠInt Ġ= ĠBASE ĊĠ Ġvar Ġtext Style ĊĠĠĠ Ġget () Ġ= Ġ_ text Style ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġ_ text Style Ġ= Ġvalue ĊĠĠĠĠĠ Ġthis . setup () ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġ_ weight : ĠWeight Ġ= ĠWeight . NORMAL ĊĠ Ġvar Ġweight ĊĠĠĠ Ġget () Ġ= Ġ_ weight ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġ_ weight Ġ= Ġvalue ĊĠĠĠĠĠ Ġsetup () ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġ_ text Colour : ĠColor State List ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġ_ textColor Link : ĠColor State List ? Ġ= Ġnull ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġinitialize ( attrs , Ġdef Style Attr ) ĊĠĠĠ Ġsetup () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġinitialize ( attrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ{ ĊĊĠĠĠ Ġcontext . theme . obtain Styled Attributes ( ĊĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠ ĠR . style able . B pk Text , ĊĠĠĠĠĠ Ġdef Style Attr , Ġ 0 ĊĠĠĠ Ġ). use Ġ{ ĊĠĠĠĠĠ Ġ_ text Style Ġ= Ġit . getInt ( R . style able . B pk Text _ text Style , ĠBASE ) ĊĠĠĠĠĠ Ġval Ġweight Arg Ġ= Ġit . getInt ( R . style able . B pk Text _ weight , Ġ- 1 ) ĊĠĠĠĠĠ Ġif Ġ( weight Arg Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ weight Ġ= ĠWeight . values ()[ weight Arg ] ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ( it . hasValue ( R . style able . B pk Text _ android _ textColor )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ text Colour Ġ= Ġit . getColor State List ( R . style able . B pk Text _ android _ textColor ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ_ textColor Link Ġ= ĠColor State List . valueOf ( B pk Theme . get Primary Color ( context )) ĊĊĠĠĠĠĠ Ġ// ĠAdding Ġt int Ġand Ġcompound Draw ables Ġdoes Ġnot Ġwork . ĠCon verting Ġcompound Draw ables Ġto Ġcompound Draw ables Relative ĊĠĠĠĠĠ Ġvar Ġstart Ġ= Ġcompound Draw ables Relative [ 0 ] Ġ?: Ġcompound Draw ables [ 0 ] ĊĠĠĠĠĠ Ġval Ġtop Ġ= Ġcompound Draw ables Relative [ 1 ] Ġ?: Ġcompound Draw ables [ 1 ] ĊĠĠĠĠĠ Ġvar Ġend Ġ= Ġcompound Draw ables Relative [ 2 ] Ġ?: Ġcompound Draw ables [ 2 ] ĊĠĠĠĠĠ Ġval Ġbottom Ġ= Ġcompound Draw ables Relative [ 3 ] Ġ?: Ġcompound Draw ables [ 3 ] ĊĊĠĠĠĠĠ Ġ// ĠSw apping Ġdraw ables Ġin Ġcase Ġof ĠRTL . ĊĠĠĠĠĠ Ġ// Ġcompound Draw ables Relative Ġorder Ġis Ġ` start `,` top `,` end `,` bottom ` ĊĠĠĠĠĠ Ġ// Ġcompound Draw ables Ġorder Ġis Ġ Ġ` left `,` top `,` right `,` bottom ` ĊĊĠĠĠĠĠ Ġif Ġ( this . layout Direction Ġ== ĠView . LAYOUT _ DIRECTION _ RTL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Ġ= Ġcompound Draw ables [ 2 ] ĊĠĠĠĠĠĠĠ Ġend Ġ= Ġcompound Draw ables [ 0 ] ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġset Compound Draw ables Relative ( start , Ġtop , Ġend , Ġbottom ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġset Drawable Tint ( color : ĠInt ) Ġ{ ĊĠĠĠ Ġcompound Drawable Tint List Ġ= ĠColor State List . valueOf ( color ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsetup () Ġ{ ĊĠĠĠ Ġval Ġtext Appearance Ġ= Ġget Style Id ( context , Ġtext Style , Ġweight ) ĊĠĠĠ Ġif Ġ( text Style Ġ== ĠCAP S ) Ġ{ ĊĠĠĠĠĠ Ġis All Caps Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġset TextAppearance ( text Appearance ) ĊĠĠĠ Ġ_ text Colour ?. let (:: setTextColor ) ĊĠĠĠ Ġset Link TextColor (_ textColor Link ) ĊĠ Ġ} ĊĊĠ Ġdata Ġclass ĠFont Definition ( ĊĠĠĠ Ġval Ġtype face : ĠType face , ĊĠĠĠ Ġval ĠfontSize : ĠInt , ĊĠĠĠ Ġval Ġletter Spacing : ĠFloat ? ĊĠ Ġ) Ġ{ ĊĊĠĠĠ Ġfun Ġapply To ( text : ĠTextView ) Ġ{ ĊĠĠĠĠĠ Ġtext . type face Ġ= Ġtype face ĊĠĠĠĠĠ Ġtext . setText Size ( Typed Value . COMPLEX _ UNIT _ PX , ĠfontSize . toFloat ()) ĊĠĠĠĠĠ Ġletter Spacing ?. let Ġ{ Ġtext . letter Spacing Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply To ( paint : ĠPaint ) Ġ{ ĊĠĠĠĠĠ Ġpaint . type face Ġ= Ġtype face ĊĠĠĠĠĠ Ġpaint . text Size Ġ= ĠfontSize . toFloat () ĊĠĠĠĠĠ Ġletter Spacing ?. let Ġ{ Ġpaint . letter Spacing Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġinternal Get Font ( ĊĠ Ġcontext : ĠContext , ĊĠ Ġtext Style : ĠInt Ġ= ĠB pk Text . BASE , ĊĠ Ġweight : ĠB pk Text . Weight Ġ= ĠB pk Text . Weight . NORMAL Ċ ): ĠB pk Text . Font Definition Ġ{ ĊĠ Ġval Ġstyle Res Ġ= Ġget Style Id ( context , Ġtext Style , Ġweight ) ĊĊĠ Ġval Ġtext Style Attributes Ġ= Ġcontext . obtain Styled Attributes ( style Res , ĠR . style able . B pk TextStyle ) ĊĠ Ġval ĠfontSize Ġ= Ġtext Style Attributes . get Dimension Pixel Size ( ĊĠĠĠ ĠR . style able . B pk TextStyle _ android _ text Size , ĊĠĠĠ ĠResources Util . dp To Px ( 1 6 , Ġcontext ) ĊĠ Ġ) ĊĠ Ġval Ġletter Spacing Ġ= Ġtext Style Attributes . get Float ( R . style able . B pk TextStyle _ android _ letter Spacing , Ġ- 1 f ) ĊĠĠĠ Ġ. let Ġ{ Ġif Ġ( it Ġ== Ġ- 1 f ) Ġnull Ġelse Ġit Ġ} ĊĊĠ Ġtext Style Attributes . recycle () ĊĊĠ Ġreturn ĠFont Family Resolver ( context , Ġweight )?. let Ġ{ ĊĠĠĠ ĠB pk Text . Font Definition ( it , ĠfontSize , Ġletter Spacing ) ĊĠ Ġ} Ġ?: Ġthrow ĠIllegalStateException (" B pk Ġfont Ġnot Ġconfigured Ġcorrectly ") Ċ } Ċ Ċ @ Style Res Ċ private Ġfun Ġget Style Id ( context : ĠContext , Ġtext Style : ĠInt , Ġweight : ĠB pk Text . Weight ): ĠInt Ġ{ ĊĠ Ġval Ġstyle Props Ġ= Ġstyle Mapping [ text Style ] ĊĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Invalid Ġtext Style ") ĊĊĠ Ġval Ġtext Appearance Attr Ġ= Ġstyle Props [ weight . ordinal ] ĊĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Weight Ġ$ weight Ġis Ġnot Ġsupported Ġfor Ġthe Ġcurrent Ġsize ") ĊĊĠ Ġval Ġout Value Ġ= ĠTyped Value () ĊĠ Ġif Ġ( context . theme . resolve Attribute ( text Appearance Attr , Ġout Value , Ġtrue )) Ġ{ ĊĠĠĠ Ġreturn Ġout Value . resourceId ĊĠ Ġ} ĊĊĠ Ġreturn Ġ 0 Ċ } Ċ