diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java
index d9d0312d3e..a3c9066de8 100644
--- a/app/src/main/java/eu/faircode/email/ActivitySetup.java
+++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java
@@ -43,6 +43,7 @@ import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.CheckBox;
+import android.widget.CompoundButton;
import android.widget.Toast;
import androidx.annotation.NonNull;
@@ -115,6 +116,8 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
private boolean hasAccount;
private String password;
private boolean import_accounts;
+ private boolean import_rules;
+ private boolean import_contacts;
private boolean import_answers;
private boolean import_settings;
@@ -313,6 +316,8 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
drawerToggle.setDrawerIndicatorEnabled(savedInstanceState.getBoolean("fair:toggle"));
password = savedInstanceState.getString("fair:password");
import_accounts = savedInstanceState.getBoolean("fair:import_accounts");
+ import_rules = savedInstanceState.getBoolean("fair:import_rules");
+ import_contacts = savedInstanceState.getBoolean("fair:import_contacts");
import_answers = savedInstanceState.getBoolean("fair:import_answers");
import_settings = savedInstanceState.getBoolean("fair:import_settings");
}
@@ -332,6 +337,8 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
outState.putBoolean("fair:toggle", drawerToggle.isDrawerIndicatorEnabled());
outState.putString("fair:password", password);
outState.putBoolean("fair:import_accounts", import_accounts);
+ outState.putBoolean("fair:import_rules", import_rules);
+ outState.putBoolean("fair:import_contacts", import_contacts);
outState.putBoolean("fair:import_answers", import_answers);
outState.putBoolean("fair:import_settings", import_settings);
super.onSaveInstanceState(outState);
@@ -744,6 +751,8 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
args.putParcelable("uri", data.getData());
args.putString("password", this.password);
args.putBoolean("import_accounts", this.import_accounts);
+ args.putBoolean("import_rules", this.import_rules);
+ args.putBoolean("import_contacts", this.import_contacts);
args.putBoolean("import_answers", this.import_answers);
args.putBoolean("import_settings", this.import_settings);
@@ -758,6 +767,8 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
Uri uri = args.getParcelable("uri");
String password = args.getString("password");
boolean import_accounts = args.getBoolean("import_accounts");
+ boolean import_rules = args.getBoolean("import_rules");
+ boolean import_contacts = args.getBoolean("import_contacts");
boolean import_answers = args.getBoolean("import_answers");
boolean import_settings = args.getBoolean("import_settings");
@@ -947,52 +958,55 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
Log.i("Imported folder=" + folder.name + " id=" + folder.id + " (" + id + ")");
}
- // Contacts
- if (jaccount.has("contacts")) {
- JSONArray jcontacts = jaccount.getJSONArray("contacts");
- for (int c = 0; c < jcontacts.length(); c++) {
- JSONObject jcontact = (JSONObject) jcontacts.get(c);
- EntityContact contact = EntityContact.fromJSON(jcontact);
- contact.account = account.id;
- if (db.contact().getContact(contact.account, contact.type, contact.email) == null)
- contact.id = db.contact().insertContact(contact);
+ if (import_contacts) {
+ // Contacts
+ if (jaccount.has("contacts")) {
+ JSONArray jcontacts = jaccount.getJSONArray("contacts");
+ for (int c = 0; c < jcontacts.length(); c++) {
+ JSONObject jcontact = (JSONObject) jcontacts.get(c);
+ EntityContact contact = EntityContact.fromJSON(jcontact);
+ contact.account = account.id;
+ if (db.contact().getContact(contact.account, contact.type, contact.email) == null)
+ contact.id = db.contact().insertContact(contact);
+ }
+ Log.i("Imported contacts=" + jcontacts.length());
}
- Log.i("Imported contacts=" + jcontacts.length());
}
// Update swipe left/right
db.account().updateAccount(account);
}
- for (EntityRule rule : rules) {
- try {
- JSONObject jaction = new JSONObject(rule.action);
+ if (import_rules)
+ for (EntityRule rule : rules) {
+ try {
+ JSONObject jaction = new JSONObject(rule.action);
- int type = jaction.getInt("type");
- switch (type) {
- case EntityRule.TYPE_MOVE:
- case EntityRule.TYPE_COPY:
- long target = jaction.getLong("target");
- Log.i("XLAT target " + target + " > " + xFolder.get(target));
- jaction.put("target", xFolder.get(target));
- break;
- case EntityRule.TYPE_ANSWER:
- long identity = jaction.getLong("identity");
- long answer = jaction.getLong("answer");
- Log.i("XLAT identity " + identity + " > " + xIdentity.get(identity));
- Log.i("XLAT answer " + answer + " > " + xAnswer.get(answer));
- jaction.put("identity", xIdentity.get(identity));
- jaction.put("answer", xAnswer.get(answer));
- break;
+ int type = jaction.getInt("type");
+ switch (type) {
+ case EntityRule.TYPE_MOVE:
+ case EntityRule.TYPE_COPY:
+ long target = jaction.getLong("target");
+ Log.i("XLAT target " + target + " > " + xFolder.get(target));
+ jaction.put("target", xFolder.get(target));
+ break;
+ case EntityRule.TYPE_ANSWER:
+ long identity = jaction.getLong("identity");
+ long answer = jaction.getLong("answer");
+ Log.i("XLAT identity " + identity + " > " + xIdentity.get(identity));
+ Log.i("XLAT answer " + answer + " > " + xAnswer.get(answer));
+ jaction.put("identity", xIdentity.get(identity));
+ jaction.put("answer", xAnswer.get(answer));
+ break;
+ }
+
+ rule.action = jaction.toString();
+ } catch (JSONException ex) {
+ Log.e(ex);
}
- rule.action = jaction.toString();
- } catch (JSONException ex) {
- Log.e(ex);
+ db.rule().insertRule(rule);
}
-
- db.rule().insertRule(rule);
- }
}
if (import_settings) {
@@ -1405,9 +1419,19 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
View dview = LayoutInflater.from(context).inflate(R.layout.dialog_import, null);
etPassword1 = dview.findViewById(R.id.tilPassword1);
CheckBox cbAccounts = dview.findViewById(R.id.cbAccounts);
+ CheckBox cbRules = dview.findViewById(R.id.cbRules);
+ CheckBox cbContacts = dview.findViewById(R.id.cbContacts);
CheckBox cbAnswers = dview.findViewById(R.id.cbAnswers);
CheckBox cbSettings = dview.findViewById(R.id.cbSettings);
+ cbAccounts.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+ cbRules.setEnabled(checked);
+ cbContacts.setEnabled(checked);
+ }
+ });
+
if (savedInstanceState != null)
etPassword1.getEditText().setText(savedInstanceState.getString("fair:password1"));
@@ -1424,6 +1448,8 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
ActivitySetup activity = (ActivitySetup) getActivity();
activity.password = password1;
activity.import_accounts = cbAccounts.isChecked();
+ activity.import_rules = cbRules.isChecked();
+ activity.import_contacts = cbContacts.isChecked();
activity.import_answers = cbAnswers.isChecked();
activity.import_settings = cbSettings.isChecked();
getActivity().startActivityForResult(
diff --git a/app/src/main/res/layout/dialog_import.xml b/app/src/main/res/layout/dialog_import.xml
index 38f5afb0c8..8ceccbc8ab 100644
--- a/app/src/main/res/layout/dialog_import.xml
+++ b/app/src/main/res/layout/dialog_import.xml
@@ -87,6 +87,28 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvImportHint" />
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@id/cbContacts" />
Password missing
Passwords don\'t match
Password invalid
- Import accounts
+ Import accounts and identities
+ Import filter rules
+ Import local contacts
Import reply templates
- Import settings
+ Import options
Settings exported
Settings imported
Invalid settings file