From b173082b5b398b5326586c816a05b5e1713e64bf Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 26 Oct 2024 17:29:23 +0200 Subject: [PATCH] Allow clearing Google backup --- .../faircode/email/FairEmailBackupAgent.java | 91 ++++++++++--------- 1 file changed, 46 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FairEmailBackupAgent.java b/app/src/main/java/eu/faircode/email/FairEmailBackupAgent.java index 1cb91b414f..e0c76738a3 100644 --- a/app/src/main/java/eu/faircode/email/FairEmailBackupAgent.java +++ b/app/src/main/java/eu/faircode/email/FairEmailBackupAgent.java @@ -65,49 +65,48 @@ public class FairEmailBackupAgent extends BackupAgent { EntityLog.log(this, "Backup start enabled=" + enabled); - if (!enabled) - return; - JSONObject jroot = new JSONObject(); jroot.put("version", 1); - JSONObject jsettings = new JSONObject(); - jsettings.put("enabled", prefs.getBoolean("enabled", true)); - jsettings.put("poll_interval", prefs.getInt("poll_interval", 0)); - jsettings.put("startup", prefs.getString("startup", "unified")); - String theme = prefs.getString("theme", null); - if (!TextUtils.isEmpty(theme)) - jsettings.put("theme", theme); - jsettings.put("beige", prefs.getBoolean("beige", true)); - jsettings.put("cards", prefs.getBoolean("cards", true)); - jsettings.put("threading", prefs.getBoolean("threading", true)); - jroot.put("settings", jsettings); - - JSONArray jaccounts = new JSONArray(); - List accounts = db.account().getAccounts(); - EntityLog.log(this, "Backup accounts=" + accounts.size()); - for (EntityAccount account : accounts) - try { - JSONObject jaccount = account.toJSON(); - - JSONArray jfolders = new JSONArray(); - List folders = db.folder().getFolders(account.id, false, true); - for (EntityFolder folder : folders) - if (!EntityFolder.USER.equals(folder.type)) - jfolders.put(folder.toJSON()); - jaccount.put("folders", jfolders); - - JSONArray jidentities = new JSONArray(); - List identities = db.identity().getIdentities(account.id); - for (EntityIdentity identity : identities) - jidentities.put(identity.toJSON()); - jaccount.put("identities", jidentities); - - jaccounts.put(jaccount); - } catch (JSONException ex) { - Log.e(ex); - } - jroot.put("accounts", jaccounts); + if (enabled) { + JSONObject jsettings = new JSONObject(); + jsettings.put("enabled", prefs.getBoolean("enabled", true)); + jsettings.put("poll_interval", prefs.getInt("poll_interval", 0)); + jsettings.put("startup", prefs.getString("startup", "unified")); + String theme = prefs.getString("theme", null); + if (!TextUtils.isEmpty(theme)) + jsettings.put("theme", theme); + jsettings.put("beige", prefs.getBoolean("beige", true)); + jsettings.put("cards", prefs.getBoolean("cards", true)); + jsettings.put("threading", prefs.getBoolean("threading", true)); + jroot.put("settings", jsettings); + + JSONArray jaccounts = new JSONArray(); + List accounts = db.account().getAccounts(); + EntityLog.log(this, "Backup accounts=" + accounts.size()); + for (EntityAccount account : accounts) + try { + JSONObject jaccount = account.toJSON(); + + JSONArray jfolders = new JSONArray(); + List folders = db.folder().getFolders(account.id, false, true); + for (EntityFolder folder : folders) + if (!EntityFolder.USER.equals(folder.type)) + jfolders.put(folder.toJSON()); + jaccount.put("folders", jfolders); + + JSONArray jidentities = new JSONArray(); + List identities = db.identity().getIdentities(account.id); + for (EntityIdentity identity : identities) + jidentities.put(identity.toJSON()); + jaccount.put("identities", jidentities); + + jaccounts.put(jaccount); + } catch (JSONException ex) { + Log.e(ex); + } + jroot.put("accounts", jaccounts); + } byte[] dataBuf = jroot.toString().getBytes(StandardCharsets.UTF_8); String dataHash = Helper.sha256(dataBuf); @@ -153,14 +152,11 @@ public class FairEmailBackupAgent extends BackupAgent { @Override public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) { try { + EntityLog.log(this, "Restore start version=" + appVersionCode); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 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()) { String dataKey = data.getKey(); int dataSize = data.getDataSize(); @@ -181,6 +177,11 @@ public class FairEmailBackupAgent extends BackupAgent { JSONObject jroot = new JSONObject(new String(dataBuf, StandardCharsets.UTF_8)); 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(); JSONObject jsettings = jroot.getJSONObject("settings"); editor.putBoolean("enabled", jsettings.optBoolean("enabled"));