@ file : Opt In ( Experimental Text Api :: class ) Ċ Ċ package Ġorg . ire ader . core _ ui . theme . prefs Ċ Ċ import Ġandroidx . compose . ui . text . Experimental Text Api Ċ import Ġandroidx . compose . ui . text . google fonts . Font Ċ import Ġandroidx . compose . ui . text . google fonts . Google Font Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Sharing Started Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . flow . state In Ċ import Ġorg . ire ader . core _ api . prefs . Preference Ċ import Ġorg . ire ader . core _ ui . theme . Font Type Ċ import Ġorg . ire ader . core _ ui . theme . Roboto Ċ import Ġorg . ire ader . core _ ui . theme . fonts Ċ Ċ class ĠFont Preferences Ġ@ Opt In ( Experimental Text Api :: class ) Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġpreference : ĠPreference < String >, ĊĠĠĠ Ġprivate Ġval Ġprovider : ĠGoogle Font . Provider Ċ ) Ġ: ĠPreference < Font Type > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġkey (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpreference . key () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Opt In ( Experimental Text Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġget (): ĠFont Type Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( isSet ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Font () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRob oto ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Opt In ( Experimental Text Api :: class ) ĊĠĠĠ Ġfun Ġget Font (): ĠFont Type Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfont Name Ġ= Ġpreference . get () ĊĠĠĠĠĠĠĠ Ġval Ġlocal Font Ġ= Ġfonts . first OrNull Ġ{ Ġit . font Name Ġ== Ġfont Name Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( local Font Ġ!= Ġnull ) Ġreturn Ġlocal Font ĊĊĠĠĠĠĠĠĠ Ġreturn Ġkotlin . run Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfontFamily Ġ= Ġandroidx . compose . ui . text . font . Font Family ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFont ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Font Ġ= ĠGoogle Font ( font Name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFont Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfont Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfontFamily ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. getOrElse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRob oto ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġread (): ĠFont Type Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( isSet ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Font () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRob oto ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset ( value : ĠFont Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= ĠRob oto ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference . set ( value . font Name ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference . delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisSet (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpreference . isSet () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete () Ġ{ ĊĠĠĠĠĠĠĠ Ġpreference . delete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠdefaultValue (): ĠFont Type Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRob oto ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchanges (): ĠFlow < Font Type > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpreference . changes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġget () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstate In ( scope : ĠCor outine Scope ): ĠState Flow < Font Type > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpreference . changes (). map Ġ{ Ġget () Ġ}. state In ( scope , ĠSh aring Started . E ager ly , Ġget ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠPreference < String >. as Font ( provider : ĠGoogle Font . Provider ): ĠFont Preferences Ġ{ ĊĠĠĠ Ġreturn ĠFont Preferences ( this , provider ) Ċ }