From 7b46849d0716dee55549da6c5363e324bfee209e Mon Sep 17 00:00:00 2001 From: Anton Chekulaev Date: Thu, 5 Nov 2020 12:52:21 +1100 Subject: [PATCH] Some more preferences included in the backup. --- .../securesms/backup/FullBackupImporter.java | 6 ++ .../securesms/util/TextSecurePreferences.java | 90 +++++++++++++++---- 2 files changed, 79 insertions(+), 17 deletions(-) diff --git a/src/org/thoughtcrime/securesms/backup/FullBackupImporter.java b/src/org/thoughtcrime/securesms/backup/FullBackupImporter.java index 8f3e623c09..a69bc18280 100644 --- a/src/org/thoughtcrime/securesms/backup/FullBackupImporter.java +++ b/src/org/thoughtcrime/securesms/backup/FullBackupImporter.java @@ -65,6 +65,7 @@ public class FullBackupImporter extends FullBackupBase { * we use these 3-char prefixes to explicitly cast the values before inserting to a preference file. */ public static final String PREF_PREFIX_TYPE_INT = "i__"; + public static final String PREF_PREFIX_TYPE_BOOLEAN = "b__"; private static final String TAG = FullBackupImporter.class.getSimpleName(); @@ -197,6 +198,11 @@ public class FullBackupImporter extends FullBackupBase { key.substring(3), Integer.parseInt(value) ).commit(); + } else if (key.startsWith(PREF_PREFIX_TYPE_BOOLEAN)) { + preferences.edit().putBoolean( + key.substring(3), + Boolean.parseBoolean(value) + ).commit(); } else { preferences.edit().putString(key, value).commit(); } diff --git a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java index 675271f2a4..f66b0a4e04 100644 --- a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java +++ b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java @@ -32,6 +32,7 @@ import java.util.Set; import network.loki.messenger.R; +import static org.thoughtcrime.securesms.backup.FullBackupImporter.PREF_PREFIX_TYPE_BOOLEAN; import static org.thoughtcrime.securesms.backup.FullBackupImporter.PREF_PREFIX_TYPE_INT; public class TextSecurePreferences { @@ -1353,25 +1354,80 @@ public class TextSecurePreferences { } final LinkedList prefList = new LinkedList<>(); - - prefList.add(BackupProtos.SharedPreference.newBuilder() - .setFile(prefsFileName) - .setKey(PREF_PREFIX_TYPE_INT + LOCAL_REGISTRATION_ID_PREF) - .setValue(String.valueOf(preferences.getInt(LOCAL_REGISTRATION_ID_PREF, 0))) - .build()); - prefList.add(BackupProtos.SharedPreference.newBuilder() - .setFile(prefsFileName) - .setKey(LOCAL_NUMBER_PREF) - .setValue(preferences.getString(LOCAL_NUMBER_PREF, null)) - .build()); - - prefList.add(BackupProtos.SharedPreference.newBuilder() - .setFile(prefsFileName) - .setKey(PROFILE_NAME_PREF) - .setValue(preferences.getString(PROFILE_NAME_PREF, null)) - .build()); + addBackupEntryInt (prefList, preferences, prefsFileName, LOCAL_REGISTRATION_ID_PREF); + addBackupEntryString(prefList, preferences, prefsFileName, LOCAL_NUMBER_PREF); + addBackupEntryString(prefList, preferences, prefsFileName, PROFILE_NAME_PREF); + addBackupEntryString(prefList, preferences, prefsFileName, ATTACHMENT_ENCRYPTED_SECRET); + addBackupEntryString(prefList, preferences, prefsFileName, ATTACHMENT_UNENCRYPTED_SECRET); + addBackupEntryString(prefList, preferences, prefsFileName, PROFILE_AVATAR_URL_PREF); + addBackupEntryInt (prefList, preferences, prefsFileName, PROFILE_AVATAR_ID_PREF); + addBackupEntryString(prefList, preferences, prefsFileName, PROFILE_KEY_PREF); return prefList; } + + private static void addBackupEntryString( + List outPrefList, + SharedPreferences prefs, + String prefFileName, + String prefKey) { + String value = prefs.getString(prefKey, null); + if (value == null) { + backupEntryLog(prefKey, false); + return; + } + outPrefList.add(BackupProtos.SharedPreference.newBuilder() + .setFile(prefFileName) + .setKey(prefKey) + .setValue(value) + .build()); + backupEntryLog(prefKey, true); + } + + private static void addBackupEntryInt( + List outPrefList, + SharedPreferences prefs, + String prefFileName, + String prefKey) { + int value = prefs.getInt(prefKey, -1); + if (value == -1) { + backupEntryLog(prefKey, false); + return; + } + outPrefList.add(BackupProtos.SharedPreference.newBuilder() + .setFile(prefFileName) + .setKey(PREF_PREFIX_TYPE_INT + prefKey) // The prefix denotes the type of the preference. + .setValue(String.valueOf(value)) + .build()); + backupEntryLog(prefKey, true); + } + + private static void addBackupEntryBoolean( + List outPrefList, + SharedPreferences prefs, + String prefFileName, + String prefKey) { + if (!prefs.contains(prefKey)) { + backupEntryLog(prefKey, false); + return; + } + outPrefList.add(BackupProtos.SharedPreference.newBuilder() + .setFile(prefFileName) + .setKey(PREF_PREFIX_TYPE_BOOLEAN + prefKey) // The prefix denotes the type of the preference. + .setValue(String.valueOf(prefs.getBoolean(prefKey, false))) + .build()); + backupEntryLog(prefKey, true); + } + + private static void backupEntryLog(String prefName, boolean wasIncluded) { + StringBuilder sb = new StringBuilder(); + sb.append("Backup preference "); + sb.append(wasIncluded ? "+ " : "- "); + sb.append('\"').append(prefName).append("\" "); + if (!wasIncluded) { + sb.append("(is empty and not included)"); + } + Log.d(TAG, sb.toString()); + } // endregion }