package Ġcom . bc . g ord ians ign er . service Ċ Ċ import Ġcom . bc . g ord ians ign er . helper . ext . fromJson Ċ import Ġcom . bc . g ord ians ign er . helper . ext . new Gson Instance Ċ import Ġcom . bc . g ord ians ign er . model . Key Info Ċ import Ġcom . bc . g ord ians ign er . service . storage . file . File Storage Api Ċ import Ġcom . bc . g ord ians ign er . service . storage . file . rx Comp letable Ċ import Ġcom . bc . g ord ians ign er . service . storage . file . rx Single Ċ import Ġcom . bc . g ord ians ign er . service . storage . shared pref . Shared Pref Api Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Single Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠContact Service Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġshared Pref Api : ĠShared Pref Api , ĊĠĠĠ Ġfile Storage Api : ĠFile Storage Api Ċ ) Ġ: ĠBase Service ( shared Pref Api , Ġfile Storage Api ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCONT ACT _ KEY _ INFO _ FILE Ġ= Ġ" contact _ key info . secret " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Contact Keys Info () Ġ= Ġfile Storage Api . SECURE . rx Single Ġ{ Ġgateway Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġgateway . read On Files Dir ( CONTACT _ KEY _ INFO _ FILE ) ĊĠĠĠĠĠĠĠ Ġif Ġ( json . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Gson Instance (). fromJson < List < Key Info >>( String ( json )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Contact Key Info ( fingerprint Hex : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġget Contact Keys Info (). flatMap Comp letable Ġ{ Ġkeys Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( keys Info . any Ġ{ Ġit . fingerprint Ġ== Ġfingerprint Hex Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Keys Ġ= Ġkeys Info . filter Not Ġ{ Ġit . fingerprint Ġ== Ġfingerprint Hex Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Contact Keys Info ( new Keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComp letable . complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Contact Key Info ( key Info : ĠKey Info ) Ġ= Ġget Contact Keys Info (). flatMap Ġ{ Ġkeys Info Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġkey Info Set Ġ= Ġkeys Info . to Mutable Set () ĊĠĠĠĠĠĠĠ Ġvar Ġis Creating Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġkey Info Set . first OrNull Ġ{ Ġit Ġ== Ġkey Info Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . alias Ġ= Ġkey Info . alias ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Saved Ġ= Ġkey Info . is Saved ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Creating Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġlet Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Info Set . add ( key Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsave Contact Keys Info ( key Info Set ). and Then ( Single . just ( Pair ( key Info , Ġis Creating ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġappend Contact Keys Info ( keys Info : ĠSet < Key Info >) Ġ= ĊĠĠĠĠĠĠĠ Ġget Contact Keys Info (). flatMap Comp letable Ġ{ Ġexisting Keys Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting Key Info Set Ġ= Ġexisting Keys Info . to Mutable Set () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexisting Key Info Set . addAll ( keys Info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Contact Keys Info ( existing Key Info Set ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Contact Keys Info ( keys Info : ĠSet < Key Info >) Ġ= ĊĠĠĠĠĠĠĠ Ġfile Storage Api . SECURE . rx Comp letable Ġ{ Ġgateway Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgateway . write On Files Dir ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCONT ACT _ KEY _ INFO _ FILE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Gson Instance (). toJson ( keys Info ). toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ċ }