diff --git a/app/src/main/java/eu/faircode/email/PopupMenuLifecycle.java b/app/src/main/java/eu/faircode/email/PopupMenuLifecycle.java
index 76164ffe56..cc6b7b6968 100644
--- a/app/src/main/java/eu/faircode/email/PopupMenuLifecycle.java
+++ b/app/src/main/java/eu/faircode/email/PopupMenuLifecycle.java
@@ -20,7 +20,14 @@ package eu.faircode.email;
*/
import android.content.Context;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.text.SpannableStringBuilder;
+import android.text.style.ImageSpan;
+import android.view.Menu;
import android.view.MenuItem;
+import android.view.SubMenu;
import android.view.View;
import androidx.annotation.NonNull;
@@ -41,6 +48,10 @@ public class PopupMenuLifecycle extends PopupMenu implements LifecycleObserver {
owner.getLifecycle().addObserver(this);
}
+ public void insertIcons(Context context) {
+ insertIcons(new ContextThemeWrapper(context, R.style.popupMenuStyle), getMenu());
+ }
+
@Override
public void show() {
Log.i("Show " + this);
@@ -72,4 +83,40 @@ public class PopupMenuLifecycle extends PopupMenu implements LifecycleObserver {
Log.i("Destroy " + this);
this.dismiss();
}
+
+ private static void insertIcons(Context context, Menu menu) {
+ for (int i = 0; i < menu.size(); i++) {
+ MenuItem item = menu.getItem(i);
+ CharSequence title = item.getTitle();
+ insertIcon(context, item);
+ if (item.hasSubMenu()) {
+ SubMenu sub = item.getSubMenu();
+ sub.setHeaderTitle(title);
+ for (int j = 0; j < sub.size(); j++)
+ if (sub.getItem(j).getIcon() != null) {
+ insertIcons(context, sub);
+ break;
+ }
+ }
+ }
+ }
+
+ private static void insertIcon(Context context, MenuItem menuItem) {
+ Drawable icon = menuItem.getIcon();
+
+ if (icon == null)
+ icon = new ColorDrawable(Color.TRANSPARENT);
+ else
+ icon.setTint(Helper.resolveColor(context, R.attr.colorAccent));
+
+ int iconSize = context.getResources().getDimensionPixelSize(R.dimen.menu_item_icon_size);
+ icon.setBounds(0, 0, iconSize, iconSize);
+ ImageSpan imageSpan = new ImageSpan(icon);
+
+ SpannableStringBuilder ssb = new SpannableStringBuilder(menuItem.getTitle());
+ ssb.insert(0, "\uFFFC\u2003");
+ ssb.setSpan(imageSpan, 0, 1, 0);
+ menuItem.setTitle(ssb);
+ menuItem.setIcon(null);
+ }
}
diff --git a/app/src/main/java/eu/faircode/email/StyleHelper.java b/app/src/main/java/eu/faircode/email/StyleHelper.java
index b6e5878fcd..5ca8ece9be 100644
--- a/app/src/main/java/eu/faircode/email/StyleHelper.java
+++ b/app/src/main/java/eu/faircode/email/StyleHelper.java
@@ -115,6 +115,7 @@ public class StyleHelper {
} else if (action == R.id.menu_style) {
PopupMenuLifecycle popupMenu = new PopupMenuLifecycle(anchor.getContext(), owner, anchor);
popupMenu.inflate(R.menu.popup_style);
+ popupMenu.insertIcons(anchor.getContext());
String[] fontNames = anchor.getResources().getStringArray(R.array.fontNameNames);
SubMenu smenu = popupMenu.getMenu().findItem(R.id.menu_style_font).getSubMenu();
diff --git a/app/src/main/res/drawable/twotone_format_align_center_24.xml b/app/src/main/res/drawable/twotone_format_align_center_24.xml
new file mode 100644
index 0000000000..e13710f5b2
--- /dev/null
+++ b/app/src/main/res/drawable/twotone_format_align_center_24.xml
@@ -0,0 +1,10 @@
+