/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 . Ġ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 . android . apps . s ant at rack er . common Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . os . Build Ċ import Ġandroid . text . Layout Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . method . Transformation Method Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . widget . AppCompat TextView Ċ import Ġandroidx . core . os . Locale List Compat Ċ Ċ /** Ċ Ġ* ĠA Ġspecial Ġversion Ġof Ġ[ AppCompat TextView ] Ġthat Ġreplaces Ġspaces Ġwith Ġline Ġbreaks Ġin Ġorder Ġto Ċ Ġ* Ġexplicitly Ġadjust Ġthe Ġposition Ġof Ġline Ġbreaks . ĠCurrently , Ġthis Ġbehavior Ġis Ġonly Ġfor ĠJapanese Ġand Ċ Ġ* ĠK orean . ĠIn Ġother Ġlocales , Ġthis Ġview Ġonly Ġsets Ġ[ Layout . BREAK _ STR ATE GY _ HIGH _ QUAL ITY ]. Ċ Ġ*/ Ċ class ĠTitle TextView Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĊĠĠĠĠĠĠĠ ĠAppCompat TextView ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak Strategy Ġ= ĠLayout . BREAK _ STR ATE GY _ HIGH _ QUAL ITY ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( w : ĠInt , Ġh : ĠInt , Ġold w : ĠInt , Ġold h : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtags Ġ= ĠLocale List Compat . get Adjust ed Default (). to Language Tags () ĊĠĠĠĠĠĠĠ Ġif Ġ( tags . startsWith (" ja ") Ġ|| Ġtags . startsWith (" ko ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransformation Method Ġ= ĠTitle Transformation Method ( w ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠTitle Transformation Method Ġinternal Ġconstructor ( private Ġval Ġm Width : ĠInt ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransformation Method Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Transformation ( source : ĠCharSequence , Ġview : ĠView ): ĠCharSequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( source Ġis ĠSp ann able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsource ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= Ġview Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠtextView . paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhead Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtail Ġ= Ġ 0 Ġ// ĠThe Ġposition Ġof Ġthe Ġlast Ġpossible Ġline Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġsource . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġsource [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Line Break ( c )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Width Ġ< ĠLayout . get Desired Width ( source , Ġhead , Ġi , Ġpaint )) Ġ{ Ġ// ĠDon 't Ġfit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( head Ġ== Ġtail ) Ġ{ Ġ// ĠThis Ġchunk Ġof Ġtext Ġis Ġtoo Ġlong Ġto Ġfit Ġin Ġone Ġline ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJust Ġgive Ġup Ġand Ġlet Ġthe Ġsystem Ġhandle Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsource ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( source , Ġhead , Ġtail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtail Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhead Ġ= Ġtail ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtail Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Width Ġ< ĠLayout . get Desired Width ( source , Ġhead , Ġlength , Ġpaint ) Ġ&& Ġhead Ġ< Ġtail ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( source , Ġhead , Ġtail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhead Ġ= Ġtail Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( source , Ġhead , Ġlength ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuilder ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġis Line Break ( c : ĠChar ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġc Ġ== Ġ' Ġ' ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Focus Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Text : ĠCharSequence , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfocused : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirection : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreviously Focused Rect : ĠRect ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ