package Ġcom . cr az yle g end . gson Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . Gson Builder Ċ import Ġcom . google . gson . Json Parser Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . File Ċ import Ġjava . nio . charset . Charset Ċ import Ġkotlin . properties . ReadWrite Property Ċ import Ġkotlin . reflect . K Property ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġh rist ij an Ġon Ġ 2 / 2 2 / 1 9 Ġto Ġlong Ġlive Ġand Ġpro sper Ġ! Ċ Ġ*/ Ċ val Ġgson : ĠGson Ġby Ġlazy Ġ{ ĊĠĠĠ ĠGson () Ċ } Ċ val Ġiso 8 6 0 1 Format Ġ= Ġ" yyyy - MM - dd ' T ' HH : mm : ss ZZ ZZ Z " Ġ// Ġworks Ġon Ġall Ġandroid Ġversions Ġbut Ġnot Ġin Ġunit Ġtests Ċ Ċ val Ġgson With Date Ġby Ġlazy Ġ{ ĊĠĠĠ ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. disable Html Esc aping () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set DateFormat ( iso 8 6 0 1 Format ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () Ċ } ĊĊ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠGson . fromJson ( json : ĠString ): ĠT Ġ= Ġthis . fromJson ( json , ĠT :: class . java ) Ċ Ċ val Ġpretty Json String : Ġ( String ) Ġ-> ĠString Ġ= Ġ{ Ġjson Str Ġ-> ĊĠĠĠ Ġval Ġjson Element Ġ= ĠJson Parser . parse String ( json Str ) ĊĠĠĠ ĠGson Builder (). set Pretty Print ing (). create (). toJson ( json Element ) Ċ } Ċ Ċ val Ġpretty JsonObject : Ġ( JSONObject ) Ġ-> ĠString Ġ= Ġ{ Ġjson Ġ-> ĊĠĠĠ Ġval Ġj so Ġ= ĠJson Parser . parse String ( json . toString ()). as JsonObject ĊĠĠĠ ĠGson Builder (). set Pretty Print ing (). create (). toJson ( js o ) Ċ } Ċ Ċ val Ġgson Without HT MLE sc aping : ĠGson Ġby Ġlazy Ġ{ ĊĠĠĠ ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. disable Html Esc aping () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () Ċ } Ċ Ċ val Ġgson Pretty Print ing : ĠGson Ġby Ġlazy Ġ{ ĊĠĠĠ ĠGson Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. disable Html Esc aping () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Pretty Print ing () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () Ċ } Ċ Ċ fun ĠAny . toJson (): ĠString Ġ= Ġgson . toJson ( this ) Ċ Ċ fun ĠAny . toJson Pretty Print ing (): ĠString Ġ= Ġgson Pretty Print ing . toJson ( this ) Ċ Ċ inline Ġfun Ġ< re ified ĠT > ĠGson . fromJson Type Token ( json : ĠString ): ĠT Ġ= Ġthis . fromJson ( json , Ġobject Ġ: ĠType Token < T >() Ġ{} . type ) Ċ Ċ inline Ġfun Ġ< re ified ĠT > ĠFile . as Json FromText ( charset : ĠCharset Ġ= ĠChar sets . UTF _ 8 ) Ġ{ ĊĠĠĠ ĠGson (). fromJson Type Token < T >( read Text ( charset )) Ċ } Ċ Ċ fun ĠSharedPreferences . put Object ( key : ĠString , Ġobj : ĠAny ?) Ġ{ ĊĠĠĠ Ġput String ( key , Ġobj ?. toJson () Ġ?: Ġ"") Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT > ĠSharedPreferences . getObject ( key : ĠString ): ĠT ? Ġ{ ĊĠĠĠ Ġval Ġstring Ġ= ĠgetString ( key , Ġnull ) ĊĠĠĠ Ġif Ġ( string Ġ== Ġnull Ġ|| Ġstring . isEmpty ()) Ġreturn Ġnull ĊĠĠĠ Ġreturn Ġgson . fromJson ( getString ( key , Ġnull ), ĠT :: class . java ) Ċ } Ċ Ċ fun ĠSharedPreferences . putString ( key : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠ Ġedit Ġ{ Ġput String ( key , Ġvalue ) Ġ} Ċ } Ċ Ċ private Ġinline Ġfun ĠSharedPreferences . edit ( ĊĠĠĠĠĠĠĠ Ġcommit : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġaction : ĠSharedPreferences . Editor . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġeditor Ġ= Ġedit () ĊĠĠĠ Ġaction ( editor ) ĊĠĠĠ Ġif Ġ( commit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġeditor . commit () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ /** Ċ Ġ* ĠUse Ġshared Preferences . obj ( Ġkey Ġ= Ġ{ Ġ" MY _ KEY " Ġ} Ġ) Ċ Ġ* Ġ@ receiver ĠSharedPreferences Ċ Ġ* Ġ@ param Ġkey ĠFunction 1 < K Property <* >, ĠString > Ċ Ġ* Ġ@ return ĠRead Write Property < Any , ĠT ?> Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT > ĠSharedPreferences . obj ( ĊĠĠĠĠĠĠĠ Ġcross inline Ġkey : Ġ( K Property <* >) Ġ-> ĠString Ġ= ĠK Property <* >:: name Ċ ): ĠRead Write Property < Any , ĠT ?> Ġ= Ġobject Ġ: ĠRead Write Property < Any , ĠT ?> Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠAny , Ġproperty : ĠK Property < *> ): ĠT ? Ġ= ĠgetObject ( key ( property )) ĊĊĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠAny , Ġproperty : ĠK Property <* >, Ġvalue : ĠT ?) Ġ= Ġput Object ( key ( property ), Ġvalue ) Ċ }