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<>(); + 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); - 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)) + 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); + } - prefList.add(BackupProtos.SharedPreference.newBuilder() - .setFile(prefsFileName) - .setKey(PROFILE_NAME_PREF) - .setValue(preferences.getString(PROFILE_NAME_PREF, null)) + 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); + } - return prefList; + 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 }