diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogSelectAccount.java b/app/src/main/java/eu/faircode/email/FragmentDialogSelectAccount.java index 7fd872743d..7b00f57d0b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogSelectAccount.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogSelectAccount.java @@ -24,8 +24,16 @@ import static android.app.Activity.RESULT_OK; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.text.SpannableStringBuilder; +import android.text.style.ImageSpan; +import android.view.View; +import android.view.ViewGroup; import android.widget.ArrayAdapter; +import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -37,7 +45,38 @@ public class FragmentDialogSelectAccount extends FragmentDialogBase { @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - final ArrayAdapter adapter = new ArrayAdapter<>(getContext(), R.layout.spinner_item1, android.R.id.text1); + final Context context = getContext(); + + final int dp6 = Helper.dp2pixels(context, 6); + final int iconSize = context.getResources().getDimensionPixelSize(R.dimen.menu_item_icon_size); + + final ArrayAdapter adapter = new ArrayAdapter(context, R.layout.spinner_item1, android.R.id.text1) { + + @NonNull + @Override + public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { + View view = super.getView(position, convertView, parent); + + if (getCount() > 10) + view.setPadding(dp6, dp6, dp6, dp6); + + TextView tv = view.findViewById(android.R.id.text1); + + EntityAccount account = (EntityAccount) getItem(position); + SpannableStringBuilder ssb = new SpannableStringBuilderEx(account.name); + + Drawable d = new ColorDrawable(account.color == null ? Color.TRANSPARENT : account.color); + d.setBounds(0, 0, iconSize / 4, iconSize); + + ImageSpan imageSpan = new CenteredImageSpan(d); + ssb.insert(0, "\uFFFC\u2002"); // object replacement character, en space + ssb.setSpan(imageSpan, 0, 1, 0); + + tv.setText(ssb); + + return view; + } + }; // TODO: spinner new SimpleTask>() { @@ -62,7 +101,7 @@ public class FragmentDialogSelectAccount extends FragmentDialogBase { } }.execute(this, getArguments(), "messages:accounts"); - return new AlertDialog.Builder(getContext()) + return new AlertDialog.Builder(context) .setIcon(R.drawable.twotone_account_circle_24) .setTitle(R.string.title_list_accounts) .setAdapter(adapter, new DialogInterface.OnClickListener() {