package Ġnet . stud ym ong ol ian . font metrics Ċ Ċ import Ġandroid . graphics . fonts . System Fonts Ċ import Ġandroid . os . Build Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . databinding . Observable Field Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġjava . io . File ĊĊ Ċ class ĠMain ViewModel Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġval Ġtext Ġ= ĠObservable Field (" My Ġtext Ġline ") ĊĠĠĠ Ġval Ġtext Size Ġ= ĠObservable Field < String >(" 5 0 ") ĊĊĠĠĠ Ġprivate Ġval Ġsystem Font Paths Ġby Ġlazy Ġ{ Ġsequence Of ( File ("/ system / fonts "), ĠFile ("/ product / fonts ")). filter Ġ{ Ġit . exists () Ġ&& Ġit . can Read () Ġ}. toList () Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġsystem Font Files List : ĠList < File >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval ĠFILE _ NAME _ FILTER S Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ Ġ" bold ", ĊĠĠĠĠĠĠĠ Ġ" clock ", ĊĠĠĠĠĠĠĠ Ġ" emoji ", ĊĠĠĠĠĠĠĠ Ġ" extra ", ĊĠĠĠĠĠĠĠ Ġ" mono ", ĊĠĠĠĠĠĠĠ Ġ" script ", ĊĠĠĠĠĠĠĠ Ġ" symbol ", ĊĠĠĠĠĠĠĠ Ġ" json ", Ġ// Ġthere Ġmay Ġbe Ġa Ġconfig . json Ġin Ġ/ product / fonts ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval ĠTR UST ED _ FONT Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ Ġ" Com ing So on . ttf " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// Ġsome Ġman ufact urers Ġlike ĠX iao Mi , Ġthey Ġdidn 't Ġadd Ġlocale Ġinfo Ġin Ġtheir Ġown Ġfont . ĠIgnore Ġfiles ' Ġsize Ġunder Ġ 5 0 Ġkb ĊĠĠĠ Ġprivate Ġval ĠFILTER _ FILE _ SIZE Ġ= Ġ 5 0 Ġ* Ġ 1 0 2 4 ĊĊĠĠĠ Ġfun Ġget System Font Files (): ĠList < File > Ġ= Ġsystem Font Files List Ġ?: Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsystem Font Paths . map Ġ{ Ġfolder Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfolder . walk () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. max Depth ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFILE _ NAME _ FILTER S . none Ġ{ Ġfile . name . contains ( it , Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . length () Ġ> ĠFILTER _ FILE _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠ Ġ}. flatten () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġget System Fonts () ĊĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠ Ġsystem Font Files List Ġ= Ġit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . Q ) ĊĠĠĠ Ġprivate Ġfun Ġget System Fonts () Ġ= ĠSystem Fonts . get Available Fonts () ĊĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġfont Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġto Ġitalic Ġif Ġfile Ġor Ġname Ġis Ġnull , Ġit Ġwill Ġbe Ġfil ted Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFILE _ NAME _ FILTER S . none Ġ{ Ġfilter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( font . file ?. name Ġ?: Ġ" italic "). contains ( filter , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . file ?. length () Ġ?: Ġ 0 Ġ> ĠFILTER _ FILE _ SIZE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . locale List . to Language Tags (). contains (" und - ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġfile Ġwon 't Ġbe Ġnull Ġhere ĊĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . file !!. path Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . first (). file !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ Ġ. toList () Ċ } Ċ