package Ġdev . far ou k . tak ara . data . preferences Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . datastore . preferences . core . edit Ċ import Ġandroidx . datastore . preferences . core . empty Preferences Ċ import Ġandroidx . datastore . preferences . core . preferences Key Ċ import Ġandroidx . datastore . preferences . create DataStore Ċ import Ġdagger . h ilt . android . qual ifiers . ApplicationContext Ċ import Ġkotlinx . coroutines . flow . catch Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġok io . IOException Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠFar ou k Ġon Ġ 2 7 / 1 2 / 2 0 2 0 . Ċ Ġ*/ Ċ class ĠPref Store Impl Ġ@ Inject Ġconstructor (@ ApplicationContext Ġcontext : ĠContext ) Ġ: ĠPref Store Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdata Store Ġ= Ġcontext . create DataStore ( TA K ARA _ STORE _ NAME ) ĊĊĠĠĠ Ġoverride Ġfun Ġis Night Mode () Ġ= Ġdata Store . data . catch Ġ{ Ġexception Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( exception Ġis ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( empty Preferences ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġexception ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. map Ġ{ Ġit [ N IGHT _ MODE _ PRE FS _ KEY ] Ġ?: Ġfalse Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġtoggle Night Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Store . edit Ġ{ Ġprefs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefs [ N IGHT _ MODE _ PRE FS _ KEY ] Ġ= Ġ!( prefs [ N IGHT _ MODE _ PRE FS _ KEY ] Ġ?: Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠT AK ARA _ STORE _ NAME Ġ= Ġ" tak ara _ data _ store " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠN IGHT _ MODE _ PRE FS _ KEY Ġ= Ġpreferences Key < Boolean >(" dark _ theme _ enabled ") ĊĠĠĠ Ġ} Ċ }