package Ġcn . li y uy u . datastore ext . core Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . datastore . preferences . core . edit Ċ import Ġandroidx . datastore . preferences . core . preferences Key Ċ import Ġandroidx . datastore . preferences . create DataStore Ċ import Ġkotlinx . coroutines . flow .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġli yu Ġon Ġ 2 0 2 1 / 0 1 / 1 0 Ġ 1 9 : 3 4 . Ċ Ġ*/ Ċ object ĠD s Preferences Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġname : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠContext ĊĠĠĠ Ġvar Ġconverter : ĠConverter ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġdata Store Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . create DataStore ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit ( context : ĠContext , Ġname : ĠString Ġ= Ġ" Ds Preferences ", Ġconverter : ĠConverter ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . context Ġ= Ġcontext . application Context ĊĠĠĠĠĠĠĠ Ġthis . name Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġthis . converter Ġ= Ġconverter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġflow ( key : ĠString , ĠdefaultValue : ĠT ? Ġ= Ġnull ) Ġ= Ġdata Store . data . map Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( T :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt :: class , ĠString :: class , ĠBoolean :: class , ĠFloat :: class , ĠLong :: class , ĠDouble :: class Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ preferences Key < T >( key )] Ġ?: ĠdefaultValue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconverter ?. deserialize ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ preferences Key ( key )] Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġget ( key : ĠString , ĠdefaultValue : ĠT ? Ġ= Ġnull ) Ġ= ĊĠĠĠĠĠĠĠ Ġflow ( key , ĠdefaultValue ). first () ĊĊĠĠĠ Ġsuspend Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġset ( key : ĠString , Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( T :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt :: class , ĠString :: class , ĠBoolean :: class , ĠFloat :: class , ĠLong :: class , ĠDouble :: class Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ preferences Key < T >( key )] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ preferences Key < String >( key )] Ġ= Ġthis . converter ?. serialize ( value ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }