/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 0 ĠWire Guard ĠLLC . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ*/ Ċ Ċ package Ġcom . wire guard . android . preference Ċ Ċ import Ġandroidx . datastore . core . DataStore Ċ import Ġandroidx . datastore . preferences . core . Preferences Ċ import Ġandroidx . datastore . preferences . core . boolean Preferences Key Ċ import Ġandroidx . datastore . preferences . core . edit Ċ import Ġandroidx . datastore . preferences . core . float Preferences Key Ċ import Ġandroidx . datastore . preferences . core . int Preferences Key Ċ import Ġandroidx . datastore . preferences . core . long Preferences Key Ċ import Ġandroidx . datastore . preferences . core . string Preferences Key Ċ import Ġandroidx . datastore . preferences . core . string Set Preferences Key Ċ import Ġandroidx . preference . Preference DataStore Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . run Blocking Ċ Ċ class ĠPreferences Preference DataStore ( private Ġval Ġcoroutine Scope : ĠCor outine Scope , Ġprivate Ġval Ġdata Store : ĠData Store < Preferences >) Ġ: ĠPreference DataStore () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġput String ( key : ĠString ?, Ġvalue : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġstring Preferences Key ( key ) ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġit . remove ( pk ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġit [ pk ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput String Set ( key : ĠString ?, Ġvalues : ĠSet < String ?> ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġstring Set Preferences Key ( key ) ĊĠĠĠĠĠĠĠ Ġval Ġfiltered Values Ġ= Ġvalues ?. filter NotNull ()?. toSet () ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filtered Values Ġ== Ġnull Ġ|| Ġfiltered Values . isEmpty ()) Ġit . remove ( pk ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġit [ pk ] Ġ= Ġfiltered Values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Int ( key : ĠString ?, Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġint Preferences Key ( key ) ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ pk ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Long ( key : ĠString ?, Ġvalue : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġlong Preferences Key ( key ) ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ pk ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Float ( key : ĠString ?, Ġvalue : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġfloat Preferences Key ( key ) ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ pk ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġput Boolean ( key : ĠString ?, Ġvalue : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġboolean Preferences Key ( key ) ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ pk ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetString ( key : ĠString ?, Ġdef Value : ĠString ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġreturn Ġdef Value ĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġstring Preferences Key ( key ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . data . map Ġ{ Ġit [ pk ] Ġ?: Ġdef Value Ġ}. first () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetString Set ( key : ĠString ?, Ġdef Values : ĠSet < String ?> ?): ĠSet < String ?> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġreturn Ġdef Values ĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġstring Set Preferences Key ( key ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . data . map Ġ{ Ġit [ pk ] Ġ?: Ġdef Values Ġ}. first () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Int ( key : ĠString ?, Ġdef Value : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġreturn Ġdef Value ĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġint Preferences Key ( key ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . data . map Ġ{ Ġit [ pk ] Ġ?: Ġdef Value Ġ}. first () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Long ( key : ĠString ?, Ġdef Value : ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġreturn Ġdef Value ĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġlong Preferences Key ( key ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . data . map Ġ{ Ġit [ pk ] Ġ?: Ġdef Value Ġ}. first () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Float ( key : ĠString ?, Ġdef Value : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġreturn Ġdef Value ĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġfloat Preferences Key ( key ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . data . map Ġ{ Ġit [ pk ] Ġ?: Ġdef Value Ġ}. first () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Boolean ( key : ĠString ?, Ġdef Value : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġreturn Ġdef Value ĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġboolean Preferences Key ( key ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Store . data . map Ġ{ Ġit [ pk ] Ġ?: Ġdef Value Ġ}. first () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ