package Ġcom . sensor berg . file preferences Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Build Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . io . File Ċ Ċ internal Ġobject ĠPreferences Migration Ġ{ ĊĊ ĉ fun Ġmigrate ( context : ĠContext , Ġname : ĠString , Ġdestination : ĠSharedPreferences ): ĠBoolean Ġ{ ĊĊĉ ĉ val Ġprefs File Ġ= Ġfind Preferences File ( context , Ġname ) Ċĉ ĉ if Ġ( prefs File ?. exists () Ġ!= Ġtrue ) Ġ{ Ċĉĉ ĉ return Ġfalse Ċĉ ĉ } ĊĊĉ ĉ var Ġany Value Migr ated Ġ= Ġfalse Ċĉ ĉ val Ġold Prefs Ġ= Ġcontext . get SharedPreferences ( name , ĠContext . MODE _ PRIVATE ) Ċĉ ĉ with ( destination . edit ()){ Ċĉĉ ĉ for Ġ( entry Ġin Ġold Prefs . all . entries ) Ġ{ Ċĉĉĉ ĉ any Value Migr ated Ġ= Ġtrue Ċĉĉĉ ĉ val Ġkey Ġ= Ġentry . key Ċĉĉĉ ĉ val Ġvalue Ġ= Ġentry . value Ċĉĉĉ ĉ Tim ber . d (" Migr ating Ġ$ key Ġfrom Ġ$ name Ġpreferences ") Ċĉĉĉ ĉ when Ġ( value ) Ġ{ Ċĉĉĉĉ ĉ is ĠString Ġ-> Ġput String ( key , Ġvalue ) Ċĉĉĉĉ ĉ is ĠBoolean Ġ-> Ġput Boolean ( key , Ġvalue ) Ċĉĉĉĉ ĉ is ĠLong Ġ-> Ġput Long ( key , Ġvalue ) Ċĉĉĉĉ ĉ is ĠFloat Ġ-> Ġput Float ( key , Ġvalue ) Ċĉĉĉĉ ĉ is ĠInt Ġ-> Ġput Int ( key , Ġvalue ) Ċĉĉĉĉ ĉ is ĠMutable Set < *> Ġ-> Ġput String Set ( key , Ġvalue Ġas ĠMutable Set < String >) Ċĉĉĉĉ ĉ null Ġ-> Ġthrow ĠIllegalArgumentException (" Value Ġshould Ġnever Ġbe Ġnull ") Ċĉĉĉĉ ĉ else Ġ-> Ġthrow ĠIllegalArgumentException (" Unexpected Ġtype Ġ${ value :: class . java . simple Name }") Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉĉ ĉ commit () Ċĉ ĉ } Ċĉ ĉ old Prefs . edit (). clear (). commit () Ċĉ ĉ if Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ Ċĉĉ ĉ delete Preferences File API 2 4 ( context , Ġname ) Ċĉ ĉ } Ċĉ ĉ prefs File . delete () Ċĉ ĉ return Ġany Value Migr ated Ċ ĉ } ĊĊ ĉ @ Target Api ( Build . VERSION _ CODES . N ) Ċ ĉ private Ġfun Ġdelete Preferences File API 2 4 ( context : ĠContext , Ġname : ĠString ) Ġ{ Ċĉ ĉ context . delete SharedPreferences ( name ) Ċ ĉ } ĊĊ ĉ internal Ġfun Ġfind Preferences File ( context : ĠContext , Ġname : ĠString ): ĠFile ? Ġ{ Ċĉ ĉ return Ġfind Preferences File Direct ly ( context , Ġname ) Ġ?: Ġfind Preferences File Re cursively ( context , Ġname ) Ċ ĉ } ĊĊ ĉ internal Ġfun Ġfind Preferences File Direct ly ( context : ĠContext , Ġname : ĠString ): ĠFile ? Ġ{ Ċĉ ĉ val Ġroot Dir Ġ= ĠContext Compat . getData Dir ( context ) Ċĉ ĉ val Ġfolder Ġ= ĠFile ( rootDir , Ġ" shared _ prefs /") Ċĉ ĉ val Ġfile Ġ= ĠFile ( folder , Ġ"$ name . xml ") Ċĉ ĉ return Ġif Ġ( file . exists ()) Ġfile Ġelse Ġnull Ċ ĉ } ĊĊ ĉ internal Ġfun Ġfind Preferences File Re cursively ( context : ĠContext , Ġname : ĠString ): ĠFile ? Ġ{ Ċĉ ĉ val Ġroot Dir Ġ= ĠContext Compat . getData Dir ( context ) Ċĉ ĉ rootDir ?. walk ( File Walk Direction . TOP _ DOWN )?. forEach Ġ{ Ċĉĉĉ ĉ if Ġ( it . name Ġ== Ġ"$ name . xml ") Ġ{ Ċĉĉĉĉ ĉ return Ġit Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ċĉ ĉ return Ġnull Ċ ĉ } Ċ }