|
|
@ -65,49 +65,48 @@ public class FairEmailBackupAgent extends BackupAgent {
|
|
|
|
|
|
|
|
|
|
|
|
EntityLog.log(this, "Backup start enabled=" + enabled);
|
|
|
|
EntityLog.log(this, "Backup start enabled=" + enabled);
|
|
|
|
|
|
|
|
|
|
|
|
if (!enabled)
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
JSONObject jroot = new JSONObject();
|
|
|
|
JSONObject jroot = new JSONObject();
|
|
|
|
jroot.put("version", 1);
|
|
|
|
jroot.put("version", 1);
|
|
|
|
|
|
|
|
|
|
|
|
JSONObject jsettings = new JSONObject();
|
|
|
|
if (enabled) {
|
|
|
|
jsettings.put("enabled", prefs.getBoolean("enabled", true));
|
|
|
|
JSONObject jsettings = new JSONObject();
|
|
|
|
jsettings.put("poll_interval", prefs.getInt("poll_interval", 0));
|
|
|
|
jsettings.put("enabled", prefs.getBoolean("enabled", true));
|
|
|
|
jsettings.put("startup", prefs.getString("startup", "unified"));
|
|
|
|
jsettings.put("poll_interval", prefs.getInt("poll_interval", 0));
|
|
|
|
String theme = prefs.getString("theme", null);
|
|
|
|
jsettings.put("startup", prefs.getString("startup", "unified"));
|
|
|
|
if (!TextUtils.isEmpty(theme))
|
|
|
|
String theme = prefs.getString("theme", null);
|
|
|
|
jsettings.put("theme", theme);
|
|
|
|
if (!TextUtils.isEmpty(theme))
|
|
|
|
jsettings.put("beige", prefs.getBoolean("beige", true));
|
|
|
|
jsettings.put("theme", theme);
|
|
|
|
jsettings.put("cards", prefs.getBoolean("cards", true));
|
|
|
|
jsettings.put("beige", prefs.getBoolean("beige", true));
|
|
|
|
jsettings.put("threading", prefs.getBoolean("threading", true));
|
|
|
|
jsettings.put("cards", prefs.getBoolean("cards", true));
|
|
|
|
jroot.put("settings", jsettings);
|
|
|
|
jsettings.put("threading", prefs.getBoolean("threading", true));
|
|
|
|
|
|
|
|
jroot.put("settings", jsettings);
|
|
|
|
JSONArray jaccounts = new JSONArray();
|
|
|
|
|
|
|
|
List<EntityAccount> accounts = db.account().getAccounts();
|
|
|
|
JSONArray jaccounts = new JSONArray();
|
|
|
|
EntityLog.log(this, "Backup accounts=" + accounts.size());
|
|
|
|
List<EntityAccount> accounts = db.account().getAccounts();
|
|
|
|
for (EntityAccount account : accounts)
|
|
|
|
EntityLog.log(this, "Backup accounts=" + accounts.size());
|
|
|
|
try {
|
|
|
|
for (EntityAccount account : accounts)
|
|
|
|
JSONObject jaccount = account.toJSON();
|
|
|
|
try {
|
|
|
|
|
|
|
|
JSONObject jaccount = account.toJSON();
|
|
|
|
JSONArray jfolders = new JSONArray();
|
|
|
|
|
|
|
|
List<EntityFolder> folders = db.folder().getFolders(account.id, false, true);
|
|
|
|
JSONArray jfolders = new JSONArray();
|
|
|
|
for (EntityFolder folder : folders)
|
|
|
|
List<EntityFolder> folders = db.folder().getFolders(account.id, false, true);
|
|
|
|
if (!EntityFolder.USER.equals(folder.type))
|
|
|
|
for (EntityFolder folder : folders)
|
|
|
|
jfolders.put(folder.toJSON());
|
|
|
|
if (!EntityFolder.USER.equals(folder.type))
|
|
|
|
jaccount.put("folders", jfolders);
|
|
|
|
jfolders.put(folder.toJSON());
|
|
|
|
|
|
|
|
jaccount.put("folders", jfolders);
|
|
|
|
JSONArray jidentities = new JSONArray();
|
|
|
|
|
|
|
|
List<EntityIdentity> identities = db.identity().getIdentities(account.id);
|
|
|
|
JSONArray jidentities = new JSONArray();
|
|
|
|
for (EntityIdentity identity : identities)
|
|
|
|
List<EntityIdentity> identities = db.identity().getIdentities(account.id);
|
|
|
|
jidentities.put(identity.toJSON());
|
|
|
|
for (EntityIdentity identity : identities)
|
|
|
|
jaccount.put("identities", jidentities);
|
|
|
|
jidentities.put(identity.toJSON());
|
|
|
|
|
|
|
|
jaccount.put("identities", jidentities);
|
|
|
|
jaccounts.put(jaccount);
|
|
|
|
|
|
|
|
} catch (JSONException ex) {
|
|
|
|
jaccounts.put(jaccount);
|
|
|
|
Log.e(ex);
|
|
|
|
} catch (JSONException ex) {
|
|
|
|
}
|
|
|
|
Log.e(ex);
|
|
|
|
jroot.put("accounts", jaccounts);
|
|
|
|
}
|
|
|
|
|
|
|
|
jroot.put("accounts", jaccounts);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
byte[] dataBuf = jroot.toString().getBytes(StandardCharsets.UTF_8);
|
|
|
|
byte[] dataBuf = jroot.toString().getBytes(StandardCharsets.UTF_8);
|
|
|
|
String dataHash = Helper.sha256(dataBuf);
|
|
|
|
String dataHash = Helper.sha256(dataBuf);
|
|
|
@ -153,14 +152,11 @@ public class FairEmailBackupAgent extends BackupAgent {
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) {
|
|
|
|
public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
|
|
|
|
EntityLog.log(this, "Restore start version=" + appVersionCode);
|
|
|
|
|
|
|
|
|
|
|
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
|
|
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
|
|
|
boolean enabled = prefs.getBoolean("google_backup", BuildConfig.PLAY_STORE_RELEASE);
|
|
|
|
boolean enabled = prefs.getBoolean("google_backup", BuildConfig.PLAY_STORE_RELEASE);
|
|
|
|
|
|
|
|
|
|
|
|
EntityLog.log(this, "Restore start enabled=" + enabled + " version=" + appVersionCode);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!enabled)
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while (data.readNextHeader()) {
|
|
|
|
while (data.readNextHeader()) {
|
|
|
|
String dataKey = data.getKey();
|
|
|
|
String dataKey = data.getKey();
|
|
|
|
int dataSize = data.getDataSize();
|
|
|
|
int dataSize = data.getDataSize();
|
|
|
@ -181,6 +177,11 @@ public class FairEmailBackupAgent extends BackupAgent {
|
|
|
|
JSONObject jroot = new JSONObject(new String(dataBuf, StandardCharsets.UTF_8));
|
|
|
|
JSONObject jroot = new JSONObject(new String(dataBuf, StandardCharsets.UTF_8));
|
|
|
|
EntityLog.log(this, "Restore version=" + jroot.optInt("version", 0));
|
|
|
|
EntityLog.log(this, "Restore version=" + jroot.optInt("version", 0));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!enabled || !jroot.has("accounts")) {
|
|
|
|
|
|
|
|
EntityLog.log(this, "Restore empty or disabled");
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SharedPreferences.Editor editor = prefs.edit();
|
|
|
|
SharedPreferences.Editor editor = prefs.edit();
|
|
|
|
JSONObject jsettings = jroot.getJSONObject("settings");
|
|
|
|
JSONObject jsettings = jroot.getJSONObject("settings");
|
|
|
|
editor.putBoolean("enabled", jsettings.optBoolean("enabled"));
|
|
|
|
editor.putBoolean("enabled", jsettings.optBoolean("enabled"));
|
|
|
|