diff --git a/src/keepass2android-app/settings/SSIDManagerActivity.cs b/src/keepass2android-app/settings/SSIDManagerActivity.cs index 4b46a435e..a70309b0c 100644 --- a/src/keepass2android-app/settings/SSIDManagerActivity.cs +++ b/src/keepass2android-app/settings/SSIDManagerActivity.cs @@ -43,7 +43,8 @@ public class SSIDManagerActivity : AppCompatActivity SSIDAdapter adapter; const string PrefsName = "SSIDPrefs"; - const string KeySSIDs = "SSIDs"; + const string KeySSIDs = "SSIDs"; // legacy: '|'-separated + const string KeySSIDsJson = "SSIDsJson"; protected override void OnCreate(Bundle savedInstanceState) { @@ -96,6 +97,21 @@ void LoadSSIDs() public static List LoadSSIDS(Context context) { var prefs = context.GetSharedPreferences(PrefsName, FileCreationMode.Private); + var json = prefs.GetString(KeySSIDsJson, null); + if (json != null) + { + try + { + return System.Text.Json.JsonSerializer.Deserialize>(json) ?? new List(); + } + catch (System.Text.Json.JsonException) + { + return new List(); + } + } + + // legacy format (before SSIDs containing '|' were supported): '|'-separated list. + // Didn't work with SSIDs containing '|' var ssids = prefs.GetString(KeySSIDs, ""); if (!string.IsNullOrEmpty(ssids)) return ssids.Split('|').ToList(); @@ -112,7 +128,8 @@ public static void SaveSSIDs(List ssidList, Context context) { var prefs = context.GetSharedPreferences(PrefsName, FileCreationMode.Private); var prefsEditor = prefs.Edit(); - prefsEditor.PutString(KeySSIDs, string.Join("|", ssidList)); + prefsEditor.PutString(KeySSIDsJson, System.Text.Json.JsonSerializer.Serialize(ssidList)); + prefsEditor.Remove(KeySSIDs); // legacy key, superseded by KeySSIDsJson prefsEditor.Commit(); }