/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 Ġgrad y Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" unused ") Ċ Ċ package Ġcom . ra ine y . ev app . common . delegate Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . content . SharedPreferences . Editor Ċ import Ġandroid . util . Base 6 4 Ċ import Ġjavax . crypto . Cipher Ċ import Ġjavax . crypto . spec . SecretKey Spec Ċ import Ġkotlin . properties . ReadWrite Property Ċ import Ġkotlin . reflect . K Property Ċ Ċ private Ġinline Ġfun Ġ< T > ĠSharedPreferences . delegate ( ĊĠĠĠĠĠĠĠ Ġkey : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdef Value : ĠT , ĊĠĠĠĠĠĠĠ Ġcross inline Ġgetter : ĠSharedPreferences .( String , ĠT ) Ġ-> ĠT , ĊĠĠĠĠĠĠĠ Ġcross inline Ġsetter : ĠEditor .( String , ĠT ) Ġ-> ĠEditor Ċ ): ĠRead Write Property < Any , ĠT > Ġ= Ġobject Ġ: ĠRead Write Property < Any , ĠT > Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠAny , Ġproperty : ĠK Property < *> ): ĠT Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgetter ( key Ġ?: Ġproperty . name , Ġdef Value ) ĊĊĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠAny , Ġproperty : ĠK Property <* >, Ġvalue : ĠT ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit (). setter ( key Ġ?: Ġproperty . name , Ġvalue ). apply () Ċ } Ċ Ċ fun ĠSharedPreferences . int ( key : ĠString ? Ġ= Ġnull , Ġdef Value : ĠInt Ġ= Ġ 0 , Ġis Encrypt : ĠBoolean Ġ= Ġfalse ): ĠRead Write Property < Any , ĠInt > Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( is Encrypt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ( key , Ġdef Value , ĠSharedPreferences :: get Encrypt Int , ĠEditor :: put Encrypt Int ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ( key , Ġdef Value , ĠSharedPreferences :: getInt , ĠEditor :: put Int ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠSharedPreferences . long ( key : ĠString ? Ġ= Ġnull , Ġdef Value : ĠLong Ġ= Ġ 0 , Ġis Encrypt : ĠBoolean Ġ= Ġfalse ): ĠRead Write Property < Any , ĠLong > Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( is Encrypt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ( key , Ġdef Value , ĠSharedPreferences :: get Encrypt Long , ĠEditor :: put Encrypt Long ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ( key , Ġdef Value , ĠSharedPreferences :: getLong , ĠEditor :: put Long ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠSharedPreferences . float ( key : ĠString ? Ġ= Ġnull , Ġdef Value : ĠFloat Ġ= Ġ 0 f , Ġis Encrypt : ĠBoolean Ġ= Ġfalse ): ĠRead Write Property < Any , ĠFloat > Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( is Encrypt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ( key , Ġdef Value , ĠSharedPreferences :: get Encrypt Float , ĠEditor :: put Encrypt Float ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ( key , Ġdef Value , ĠSharedPreferences :: get Float , ĠEditor :: put Float ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠSharedPreferences . boolean ( key : ĠString ? Ġ= Ġnull , Ġdef Value : ĠBoolean Ġ= Ġfalse , Ġis Encrypt : ĠBoolean Ġ= Ġfalse ): ĠRead Write Property < Any , ĠBoolean > Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( is Encrypt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ( key , Ġdef Value , ĠSharedPreferences :: get Encrypt Boolean , ĠEditor :: put Encrypt Boolean ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ( key , Ġdef Value , ĠSharedPreferences :: getBoolean , ĠEditor :: put Boolean ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠSharedPreferences . string ( key : ĠString ? Ġ= Ġnull , Ġdef Value : ĠString Ġ= Ġ"", Ġis Encrypt : ĠBoolean Ġ= Ġfalse ): ĠRead Write Property < Any , ĠString > Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( is Encrypt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ( key , Ġdef Value , ĠSharedPreferences :: get Encrypt String , ĠEditor :: put Encrypt String ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ( key , Ġdef Value , ĠSharedPreferences :: getString , ĠEditor :: putString ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠSharedPreferences . string Set ( key : ĠString ? Ġ= Ġnull , Ġdef Value : ĠSet < String > Ġ= Ġempty Set (), Ġis Encrypt : ĠBoolean Ġ= Ġfalse ): ĠRead Write Property < Any , ĠSet < String >> Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( is Encrypt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ( key , Ġdef Value , ĠSharedPreferences :: get Encrypt String Set , ĠEditor :: put Encrypt String Set ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate ( key , Ġdef Value , ĠSharedPreferences :: getString Set , ĠEditor :: putString Set ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠSharedPreferences . init Key ( key : ĠString ) Ġ= ĠEncrypt . key ( key ) Ċ Ċ fun ĠSharedPreferences . get Encrypt Int ( key : ĠString , Ġdef Value : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġvalue Ġ= ĠgetString ( encrypt ( key ), Ġnull ) Ġ?: Ġreturn Ġdef Value ĊĠĠĠ Ġreturn Ġdecrypt ( value ). toInt () Ċ } Ċ Ċ fun ĠEditor . put Encrypt Int ( key : ĠString , Ġvalue : ĠInt ): ĠEditor Ġ= ĊĠĠĠĠĠĠĠ Ġput String ( encrypt ( key ), Ġencrypt ( value . toString ())) Ċ Ċ fun ĠSharedPreferences . get Encrypt Long ( key : ĠString , Ġdef Value : ĠLong ): ĠLong Ġ{ ĊĠĠĠ Ġval Ġvalue Ġ= ĠgetString ( encrypt ( key ), Ġnull ) Ġ?: Ġreturn Ġdef Value ĊĠĠĠ Ġreturn Ġdecrypt ( value ). to Long () Ċ } Ċ Ċ fun ĠEditor . put Encrypt Long ( key : ĠString , Ġvalue : ĠLong ): ĠEditor Ġ= ĊĠĠĠĠĠĠĠ Ġput String ( encrypt ( key ), Ġencrypt ( value . toString ())) Ċ Ċ fun ĠSharedPreferences . get Encrypt Float ( key : ĠString , Ġdef Value : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠ Ġval Ġvalue Ġ= ĠgetString ( encrypt ( key ), Ġnull ) Ġ?: Ġreturn Ġdef Value ĊĠĠĠ Ġreturn Ġdecrypt ( value ). toFloat () Ċ } Ċ Ċ fun ĠEditor . put Encrypt Float ( key : ĠString , Ġvalue : ĠFloat ): ĠEditor Ġ= ĊĠĠĠĠĠĠĠ Ġput String ( encrypt ( key ), Ġencrypt ( value . toString ())) Ċ Ċ fun ĠSharedPreferences . get Encrypt Boolean ( key : ĠString , Ġdef Value : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġvalue Ġ= ĠgetString ( encrypt ( key ), Ġnull ) Ġ?: Ġreturn Ġdef Value ĊĠĠĠ Ġreturn Ġdecrypt ( value ). to Boolean () Ċ } Ċ Ċ fun ĠEditor . put Encrypt Boolean ( key : ĠString , Ġvalue : ĠBoolean ): ĠEditor Ġ= ĊĠĠĠĠĠĠĠ Ġput String ( encrypt ( key ), Ġencrypt ( value . toString ())) Ċ Ċ fun ĠSharedPreferences . get Encrypt String ( key : ĠString , Ġdef Value : ĠString ?): ĠString Ġ{ ĊĠĠĠ Ġval Ġvalue Ġ= ĠgetString ( encrypt ( key ), Ġnull ) ĊĠĠĠ Ġreturn Ġif Ġ( value Ġ== Ġnull ) Ġdef Value Ġ?: Ġ"" Ġelse Ġdecrypt ( value ) Ċ } Ċ Ċ fun ĠEditor . put Encrypt String ( key : ĠString , Ġvalue : ĠString ): ĠEditor Ġ= ĊĠĠĠĠĠĠĠ Ġput String ( encrypt ( key ), Ġencrypt ( value )) Ċ Ċ fun ĠSharedPreferences . get Encrypt String Set ( key : ĠString , Ġdef Value : ĠSet < String >): ĠSet < String > Ġ{ ĊĠĠĠ Ġval Ġvalues Ġ= ĠgetString Set ( encrypt ( key ), Ġnull ) Ġ?: Ġreturn Ġdef Value ĊĠĠĠ Ġval Ġrst Set Ġ= ĠHashSet < String >() ĊĠĠĠ Ġfor Ġ( value Ġin Ġvalues ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrst Set . add ( decrypt ( value )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġrst Set Ċ } Ċ Ċ fun ĠEditor . put Encrypt String Set ( key : ĠString , Ġvalues : ĠSet < String >): ĠEditor Ġ{ ĊĠĠĠ Ġval Ġrst Set Ġ= ĠHashSet < String >() ĊĠĠĠ Ġfor Ġ( value Ġin Ġvalues ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrst Set . add ( encrypt ( value )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġput String Set ( encrypt ( key ), Ġrst Set ) Ċ } Ċ Ċ private Ġfun Ġencrypt ( pl ains : ĠString ): ĠString Ġ= ĠEncrypt . encrypt ( pl ains ) Ċ Ċ private Ġfun Ġdecrypt ( ciph ers : ĠString ): ĠString Ġ= ĠEncrypt . decrypt ( ciph ers ) Ċ Ċ private Ġobject ĠEncrypt Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġkey : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġset Ġencrypt Ġkey ĊĠĠĠĠ Ġ* Ġ@ param Ġkey : Ġencrypt Ġkey Ġ( length : Ġ 1 6 ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġkey ( key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . key Ġ= Ġkey ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAES Ġ 1 2 8 Ġencrypt ĊĠĠĠĠ Ġ* Ġ@ param Ġpl ains : Ġplain Ġtext ĊĠĠĠĠ Ġ* Ġ@ return Ġencrypted Ġstring Ġby ĠBase 6 4 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" GetInstance ") ĊĠĠĠ Ġfun Ġencrypt ( pl ains : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcipher Ġ= ĠCipher . getInstance (" AES / E CB / PKCS 5 Padding ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Spec Ġ= ĠSecret KeySpec ( key . toByteArray (), Ġ" AES ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcipher . init ( Cipher . ENCRYPT _ MODE , Ġkey Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencode Ġ= Ġcipher . do Final ( pl ains . toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBase 6 4 . encode ToString ( encode , ĠBase 6 4 . NO _ WRAP ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAES Ġ 1 2 8 Ġdecrypt ĊĠĠĠĠ Ġ* Ġ@ param Ġciph ers : Ġencrypted Ġtext ĊĠĠĠĠ Ġ* Ġ@ return Ġdecrypted Ġstring ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" GetInstance ") ĊĠĠĠ Ġfun Ġdecrypt ( ciph ers : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġencode Ġ= ĠBase 6 4 . decode ( ciph ers , ĠBase 6 4 . NO _ WRAP ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcipher Ġ= ĠCipher . getInstance (" AES / E CB / PKCS 5 Padding ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Spec Ġ= ĠSecret KeySpec ( key . toByteArray (), Ġ" AES ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcipher . init ( Cipher . DE CRYPT _ MODE , Ġkey Spec ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecode Ġ= Ġcipher . do Final ( encode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString ( decode ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} Ċ }