diff --git a/app/src/main/java/eu/faircode/email/EntityAnswer.java b/app/src/main/java/eu/faircode/email/EntityAnswer.java index 2f3a8c3b02..ae16904220 100644 --- a/app/src/main/java/eu/faircode/email/EntityAnswer.java +++ b/app/src/main/java/eu/faircode/email/EntityAnswer.java @@ -99,7 +99,7 @@ public class EntityAnswer implements Serializable { public Integer applied = 0; public Long last_applied; - static final String PREF_PLACEHOLDER = "answer.value."; + private static final String PREF_PLACEHOLDER = "answer.value."; String getHtml(Context context, Address[] address) { return replacePlaceholders(context, text, address); @@ -191,6 +191,39 @@ public class EntityAnswer implements Serializable { return text; } + static void setCustomPlaceholder(Context context, String name, String value) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + if (TextUtils.isEmpty(value)) + prefs.edit().remove(EntityAnswer.PREF_PLACEHOLDER + name).apply(); + else + prefs.edit().putString(EntityAnswer.PREF_PLACEHOLDER + name, value).apply(); + } + + static String getCustomPlaceholder(Context context, String name) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + return prefs.getString(EntityAnswer.PREF_PLACEHOLDER + name, null); + } + + static List getCustomPlaceholders(Context context) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + + List names = new ArrayList<>(); + for (String key : prefs.getAll().keySet()) + if (key.startsWith(EntityAnswer.PREF_PLACEHOLDER)) + names.add(key.substring(EntityAnswer.PREF_PLACEHOLDER.length())); + + final Collator collator = Collator.getInstance(Locale.getDefault()); + collator.setStrength(Collator.SECONDARY); // Case insensitive, process accents etc + Collections.sort(names, new Comparator() { + @Override + public int compare(String n1, String n2) { + return collator.compare(n1, n2); + } + }); + + return names; + } + static void fillMenu(Menu main, boolean compose, List answers, Context context) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean sort_answers = prefs.getBoolean("sort_answers", false); diff --git a/app/src/main/java/eu/faircode/email/FragmentAnswer.java b/app/src/main/java/eu/faircode/email/FragmentAnswer.java index d25a3d8a7b..2670aa8adb 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAnswer.java +++ b/app/src/main/java/eu/faircode/email/FragmentAnswer.java @@ -56,12 +56,7 @@ import com.google.android.material.snackbar.Snackbar; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; -import java.text.Collator; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; import java.util.List; -import java.util.Locale; public class FragmentAnswer extends FragmentBase { private ViewGroup view; @@ -287,22 +282,9 @@ public class FragmentAnswer extends FragmentBase { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_answer, menu); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); - List names = new ArrayList<>(); - for (String key : prefs.getAll().keySet()) - if (key.startsWith(EntityAnswer.PREF_PLACEHOLDER)) - names.add(key.substring(EntityAnswer.PREF_PLACEHOLDER.length())); - - final Collator collator = Collator.getInstance(Locale.getDefault()); - collator.setStrength(Collator.SECONDARY); // Case insensitive, process accents etc - Collections.sort(names, new Comparator() { - @Override - public int compare(String n1, String n2) { - return collator.compare(n1, n2); - } - }); - Menu smenu = menu.findItem(R.id.menu_placeholders).getSubMenu(); + + List names = EntityAnswer.getCustomPlaceholders(getContext()); for (int i = 0; i < names.size(); i++) smenu.add(Menu.FIRST, i + 1, i + 1, names.get(i)); diff --git a/app/src/main/java/eu/faircode/email/FragmentAnswers.java b/app/src/main/java/eu/faircode/email/FragmentAnswers.java index cf2075a590..77b1cbe4e6 100644 --- a/app/src/main/java/eu/faircode/email/FragmentAnswers.java +++ b/app/src/main/java/eu/faircode/email/FragmentAnswers.java @@ -279,27 +279,36 @@ public class FragmentAnswers extends FragmentBase { } }); + Menu smenu = menu.findItem(R.id.menu_placeholders).getSubMenu(); + + List names = EntityAnswer.getCustomPlaceholders(getContext()); + for (int i = 0; i < names.size(); i++) + smenu.add(Menu.FIRST, i + 1, i + 1, names.get(i)); + super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { - int id = item.getItemId(); - if (id == R.id.menu_define) { - onDefine(); + if (item.getGroupId() == Menu.FIRST) { + onDefine(item.getTitle().toString()); return true; - } else - return super.onOptionsItemSelected(item); + } else { + int id = item.getItemId(); + if (id == R.id.menu_define) { + onDefine(null); + return true; + } else + return super.onOptionsItemSelected(item); + } } - private void onDefine() { + private void onDefine(String name) { final Context context = getContext(); View view = LayoutInflater.from(context).inflate(R.layout.dialog_placeholder, null); final EditText etName = view.findViewById(R.id.etName); final EditText etValue = view.findViewById(R.id.etValue); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - etName.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { @@ -313,12 +322,14 @@ public class FragmentAnswers extends FragmentBase { @Override public void afterTextChanged(Editable s) { - String value = prefs.getString(EntityAnswer.PREF_PLACEHOLDER + s.toString().trim(), null); + String value = EntityAnswer.getCustomPlaceholder(context, s.toString().trim()); if (!TextUtils.isEmpty(value)) etValue.setText(value); } }); + etName.setText(name); + new AlertDialog.Builder(context) .setView(view) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @@ -328,10 +339,7 @@ public class FragmentAnswers extends FragmentBase { String value = etValue.getText().toString(); if (TextUtils.isEmpty(name)) return; - if (TextUtils.isEmpty(value)) - prefs.edit().remove(EntityAnswer.PREF_PLACEHOLDER + name).apply(); - else - prefs.edit().putString(EntityAnswer.PREF_PLACEHOLDER + name, value).apply(); + EntityAnswer.setCustomPlaceholder(context, name, value); } }) .setNegativeButton(android.R.string.cancel, null) diff --git a/app/src/main/res/layout/dialog_placeholder.xml b/app/src/main/res/layout/dialog_placeholder.xml index 3ae3f51462..3b78562c2b 100644 --- a/app/src/main/res/layout/dialog_placeholder.xml +++ b/app/src/main/res/layout/dialog_placeholder.xml @@ -10,7 +10,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:labelFor="@+id/etName" - android:text="@string/title_answer_define" + android:text="@string/title_answer_placeholder" android:textAppearance="@style/TextAppearance.AppCompat.Large" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/menu/menu_answers.xml b/app/src/main/res/menu/menu_answers.xml index eebd2e01e0..508ffcec4c 100644 --- a/app/src/main/res/menu/menu_answers.xml +++ b/app/src/main/res/menu/menu_answers.xml @@ -9,7 +9,13 @@ app:showAsAction="collapseActionView|always" /> + android:id="@+id/menu_placeholders" + android:title="@string/title_answer_placeholder"> + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0eef0579f3..8c775222b6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1652,7 +1652,6 @@ So, don\'t delete the image file! - Define placeholder Name Value Edit template