diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index c0bcf5a5e6..fc19cc73f0 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -119,6 +119,7 @@ public class FragmentCompose extends FragmentEx { private EditText etSubject; private RecyclerView rvAttachment; private EditText etBody; + private BottomNavigationView edit_bar; private BottomNavigationView bottom_navigation; private ProgressBar pbWait; private Group grpHeader; @@ -149,6 +150,7 @@ public class FragmentCompose extends FragmentEx { etSubject = view.findViewById(R.id.etSubject); rvAttachment = view.findViewById(R.id.rvAttachment); etBody = view.findViewById(R.id.etBody); + edit_bar = view.findViewById(R.id.edit_bar); bottom_navigation = view.findViewById(R.id.bottom_navigation); pbWait = view.findViewById(R.id.pbWait); grpHeader = view.findViewById(R.id.grpHeader); @@ -196,6 +198,29 @@ public class FragmentCompose extends FragmentEx { } }); + edit_bar.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + int action = item.getItemId(); + switch (action) { + case R.id.menu_bold: + case R.id.menu_italic: + case R.id.menu_clear: + case R.id.menu_link: + onMenuStyle(item.getItemId()); + return true; + case R.id.menu_image: + onMenuImage(); + return true; + case R.id.menu_attachment: + onMenuAttachment(); + return true; + default: + return false; + } + } + }); + bottom_navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { @@ -204,7 +229,6 @@ public class FragmentCompose extends FragmentEx { case R.id.action_delete: onDelete(); break; - default: onAction(action); } @@ -227,6 +251,7 @@ public class FragmentCompose extends FragmentEx { grpAddresses.setVisibility(View.GONE); grpAttachments.setVisibility(View.GONE); etBody.setVisibility(View.GONE); + edit_bar.setVisibility(View.GONE); bottom_navigation.setVisibility(View.GONE); pbWait.setVisibility(View.VISIBLE); @@ -389,18 +414,9 @@ public class FragmentCompose extends FragmentEx { @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - menu.findItem(R.id.menu_bold).setVisible(working >= 0); - menu.findItem(R.id.menu_italic).setVisible(working >= 0); - menu.findItem(R.id.menu_clear).setVisible(working >= 0); - menu.findItem(R.id.menu_link).setVisible(working >= 0); - menu.findItem(R.id.menu_image).setVisible(working >= 0); - menu.findItem(R.id.menu_attachment).setVisible(working >= 0); - menu.findItem(R.id.menu_attachment).setEnabled(etBody.isEnabled()); menu.findItem(R.id.menu_addresses).setVisible(working >= 0); - - PackageManager pm = getContext().getPackageManager(); - menu.findItem(R.id.menu_image).setEnabled(getImageIntent().resolveActivity(pm) != null); - menu.findItem(R.id.menu_attachment).setEnabled(getAttachmentIntent().resolveActivity(pm) != null); + menu.findItem(R.id.menu_clear).setVisible(working >= 0); + menu.findItem(R.id.menu_encrypt).setVisible(working >= 0); } @Override @@ -410,21 +426,12 @@ public class FragmentCompose extends FragmentEx { if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) handleExit(); return true; - case R.id.menu_bold: - case R.id.menu_italic: - case R.id.menu_clear: - case R.id.menu_link: - onMenuStyle(item.getItemId()); - return true; - case R.id.menu_image: - onMenuImage(); - return true; - case R.id.menu_attachment: - onMenuAttachment(); - return true; case R.id.menu_addresses: onMenuAddresses(); return true; + case R.id.menu_clear: + onMenuStyle(item.getItemId()); + return true; case R.id.menu_encrypt: onAction(R.id.menu_encrypt); return true; @@ -441,7 +448,9 @@ public class FragmentCompose extends FragmentEx { start = end; end = tmp; } - if (start != end) { + if (start == end) + Snackbar.make(view, R.string.title_no_selection, Snackbar.LENGTH_LONG).show(); + else { SpannableString s = new SpannableString(etBody.getText()); switch (id) { case R.id.menu_bold: @@ -452,7 +461,8 @@ public class FragmentCompose extends FragmentEx { break; case R.id.menu_clear: for (Object span : s.getSpans(start, end, Object.class)) - s.removeSpan(span); + if (!(span instanceof ImageSpan)) + s.removeSpan(span); break; case R.id.menu_link: Uri uri = null; @@ -475,11 +485,25 @@ public class FragmentCompose extends FragmentEx { } private void onMenuImage() { - startActivityForResult(getImageIntent(), ActivityCompose.REQUEST_IMAGE); + Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); + intent.addCategory(Intent.CATEGORY_OPENABLE); + intent.setType("image/*"); + PackageManager pm = getContext().getPackageManager(); + if (intent.resolveActivity(pm) == null) + Snackbar.make(view, R.string.title_no_saf, Snackbar.LENGTH_LONG).show(); + else + startActivityForResult(intent, ActivityCompose.REQUEST_IMAGE); } private void onMenuAttachment() { - startActivityForResult(getAttachmentIntent(), ActivityCompose.REQUEST_ATTACHMENT); + Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); + intent.addCategory(Intent.CATEGORY_OPENABLE); + intent.setType("*/*"); + PackageManager pm = getContext().getPackageManager(); + if (intent.resolveActivity(pm) == null) + Snackbar.make(view, R.string.title_no_saf, Snackbar.LENGTH_LONG).show(); + else + startActivityForResult(intent, ActivityCompose.REQUEST_ATTACHMENT); } private void onMenuAddresses() { @@ -713,20 +737,6 @@ public class FragmentCompose extends FragmentEx { } } - private Intent getImageIntent() { - Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); - intent.addCategory(Intent.CATEGORY_OPENABLE); - intent.setType("image/*"); - return intent; - } - - private Intent getAttachmentIntent() { - Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); - intent.addCategory(Intent.CATEGORY_OPENABLE); - intent.setType("*/*"); - return intent; - } - private void handlePickContact(int requestCode, Intent data) { Cursor cursor = null; try { @@ -1250,6 +1260,7 @@ public class FragmentCompose extends FragmentEx { grpHeader.setVisibility(View.VISIBLE); grpAddresses.setVisibility("reply_all".equals(action) ? View.VISIBLE : View.GONE); etBody.setVisibility(View.VISIBLE); + edit_bar.setVisibility(View.VISIBLE); bottom_navigation.setVisibility(View.VISIBLE); DB db = DB.getInstance(getContext()); diff --git a/app/src/main/res/layout/fragment_compose.xml b/app/src/main/res/layout/fragment_compose.xml index 507cdea3cb..15f9c18d84 100644 --- a/app/src/main/res/layout/fragment_compose.xml +++ b/app/src/main/res/layout/fragment_compose.xml @@ -7,7 +7,7 @@ @@ -189,6 +189,19 @@ + + - - - - - - - - - - - Save Send + Nothing selected Clipboard empty Bold Italic