package Ġcom . fol i ore ader . util Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Environment Ċ import Ġandroid . util . Log Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ Ċ /** Ċ Ġ* Ġ@ author ĠTy ler ĠSed lar Ċ Ġ*/ Ċ object ĠFont Finder Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġsys Fonts : ĠMap < String , ĠFile >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠLOG _ TAG : ĠString ? Ġ= Ġ" Font Adapter " ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget System Fonts (): ĠMap < String , ĠFile > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sys Fonts Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsys Fonts !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfonts Ġ= ĠHashMap < String , ĠFile >() ĊĊĠĠĠĠĠĠĠ Ġval Ġsys Font Dir Ġ= ĠFile ("/ system / fonts /") ĊĠĠĠĠĠĠĠ Ġval Ġfont Suffix Ġ= Ġ". ttf " ĊĊĠĠĠĠĠĠĠ Ġ// ĠCollect Ġsystem Ġfonts ĊĠĠĠĠĠĠĠ Ġfor Ġ( font File Ġin Ġsys Font Dir . list Files ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfont Name : ĠString Ġ= Ġfont File . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( font Name . endsWith ( font Suffix )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġfont Name . sub Sequence ( 0 , Ġfont Name . lastIndexOf ( font Suffix )). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfonts [ key ] Ġ= Ġfont File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsys Fonts Ġ= Ġfonts ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfonts ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun ĠgetUser Fonts (): ĠMap < String , ĠFile > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfonts Ġ= ĠHashMap < String , ĠFile >() ĊĊĠĠĠĠĠĠĠ Ġval Ġfont Dirs Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( Environment . get External Storage Directory (), Ġ" Fonts /") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġfont Suffix Ġ= Ġ". ttf " ĊĊĠĠĠĠĠĠĠ Ġfont Dirs . forEach Ġ{ Ġfont Dir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCollect Ġuser Ġfonts ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( font Dir . exists () Ġ&& Ġfont Dir . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfont Dir . walk Top Down () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġf Ġ-> Ġf . name . endsWith ( font Suffix ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġfont File Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfont Name Ġ= Ġfont File . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfont Name . sub Sequence ( 0 , Ġfont Name . lastIndexOf ( font Suffix )). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfonts [ key ] Ġ= Ġfont File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfonts ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Asset Fonts ( context : ĠContext ): ĠMap < String , ĠFile > Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" GET A AS SETS ") ĊĠĠĠĠĠĠĠ Ġval Ġfonts Ġ= ĠHashMap < String , ĠFile >() ĊĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" Specify ĠPath ") ĊĠĠĠĠĠĠĠ Ġval Ġfont Dir Ġ= Ġcontext . assets . list (" fonts ") ĊĠĠĠĠĠĠĠ Ġval Ġfont Suffix Ġ= Ġ". ttf " ĊĊĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" Font List Ġ-> Ġ${ font Dir !!. last () }") ĊĠĠĠĠĠĠĠ Ġfor Ġ( font Name Ġin Ġfont Dir !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfont File Ġ= ĠFile ( context . cacheDir , Ġfont Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Bytes ToFile ( context . assets . open (" fonts /$ font Name "), Ġfont File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( font Name . endsWith ( font Suffix )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġfont Name . sub Sequence ( 0 , Ġfont Name . lastIndexOf ( font Suffix )). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfonts [ key ] Ġ= Ġfont File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfonts ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġwrite Bytes ToFile (` is `: ĠInputStream , Ġfile : ĠFile ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġf os : ĠFileOutputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠByteArray ( 2 0 4 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnb read Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf os Ġ= ĠFileOutputStream ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(` is `. read ( data ). also ({ Ġnb read Ġ= Ġit Ġ}) Ġ> Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf os . write ( data , Ġ 0 , Ġnb read ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Exception ", Ġex ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fos Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf os . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Font File ( key : ĠString , Ġcontext : ĠContext ): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= Ġget System Fonts () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠgetUser Fonts () ĊĠĠĠĠĠĠĠ Ġval Ġasset Ġ= Ġget Asset Fonts ( context ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem . containsKey ( key ) Ġ-> Ġsystem [ key ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . containsKey ( key ) Ġ-> Ġuser [ key ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasset . containsKey ( key ) Ġ-> Ġasset [ key ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġis System Font ( key : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget System Fonts (). containsKey ( key ) ĊĠĠĠ Ġ} Ċ }