SharedPreferencesMigration

fun <T> SharedPreferencesMigration(    produceSharedPreferences: () -> SharedPreferences,     keysToMigrate: Set<String> = MIGRATE_ALL_KEYS,     shouldRunMigration: suspend (T) -> Boolean = { true },     migrate: suspend (SharedPreferencesView, T) -> T)(source)

DataMigration from SharedPreferences to DataStore.

Note: This migration only supports the basic SharedPreferences types: boolean, float, int, long, string and string set. If the result of getAll contains other types, they will be ignored.

Example usage:

val sharedPrefsMigration = SharedPreferencesMigration(
produceSharedPreferences = { EncryptedSharedPreferences.create(...) }
) { prefs: SharedPreferencesView, myData: MyData ->
myData.toBuilder().setCounter(prefs.getCounter(COUNTER_KEY, default = 0)).build()
}

Parameters

produceSharedPreferences

Should return the instance of SharedPreferences to migrate from.

keysToMigrate

The list of keys to migrate. The keys will be mapped to datastore .Preferences with their same values. If the key is already present in the new Preferences, the key will not be migrated again. If the key is not present in the SharedPreferences it will not be migrated. If keysToMigrate is not set, all keys will be migrated from the existing SharedPreferences.

migrate

maps SharedPreferences into T. Implementations should be idempotent since this may be called multiple times. See DataMigration.migrate for more information. The lambda accepts a SharedPreferencesView which is the view of the SharedPreferences to migrate from (limited to keysToMigrate and a T which represent the current data. The function must return the migrated data. If SharedPreferences is empty or does not contain any keys which you specified, this callback will not run.


fun <T> SharedPreferencesMigration(    context: Context,     sharedPreferencesName: String,     keysToMigrate: Set<String> = MIGRATE_ALL_KEYS,     shouldRunMigration: suspend (T) -> Boolean = { true },     migrate: suspend (SharedPreferencesView, T) -> T)(source)

DataMigration from SharedPreferences to DataStore.

If the SharedPreferences is empty once the migration completes, this migration will attempt to delete it.

Example usage:

val sharedPrefsMigration = SharedPreferencesMigration(
context,
mySharedPreferencesName
) { prefs: SharedPreferencesView, myData: MyData ->
myData.toBuilder().setCounter(prefs.getCounter(COUNTER_KEY, default = 0)).build()
}

Parameters

context

Context used for getting SharedPreferences.

sharedPreferencesName

The name of the SharedPreferences.

keysToMigrate

The list of keys to migrate. The keys will be mapped to datastore .Preferences with their same values. If the key is already present in the new Preferences, the key will not be migrated again. If the key is not present in the SharedPreferences it will not be migrated. If keysToMigrate is not set, all keys will be migrated from the existing SharedPreferences.

migrate

maps SharedPreferences into T. Implementations should be idempotent since this may be called multiple times. See DataMigration.migrate for more information. The lambda accepts a SharedPreferencesView which is the view of the SharedPreferences to migrate from (limited to keysToMigrate and a T which represent the current data. The function must return the migrated data. If SharedPreferences is empty or does not contain any keys which you specified, this callback will not run.