diff --git a/app/src/main/java/eu/faircode/email/ActivityAMP.java b/app/src/main/java/eu/faircode/email/ActivityAMP.java index 79a4540374..0fcdc2473d 100644 --- a/app/src/main/java/eu/faircode/email/ActivityAMP.java +++ b/app/src/main/java/eu/faircode/email/ActivityAMP.java @@ -69,11 +69,11 @@ public class ActivityAMP extends ActivityBase { if (savedInstanceState != null) force_light = savedInstanceState.getBoolean("fair:force_light"); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - View view = LayoutInflater.from(this).inflate(R.layout.activity_amp, null); setContentView(view); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + wvAmp = findViewById(R.id.wvAmp); pbWait = findViewById(R.id.pbWait); grpReady = findViewById(R.id.grpReady); diff --git a/app/src/main/java/eu/faircode/email/ActivityAnswer.java b/app/src/main/java/eu/faircode/email/ActivityAnswer.java index 9ae0df73dd..3ed1e59332 100644 --- a/app/src/main/java/eu/faircode/email/ActivityAnswer.java +++ b/app/src/main/java/eu/faircode/email/ActivityAnswer.java @@ -54,11 +54,11 @@ public class ActivityAnswer extends ActivityBase { final CharSequence query = intent.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT); final boolean readonly = intent.getBooleanExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, false); - getSupportActionBar().setSubtitle(query == null ? null : query.toString()); - View view = LayoutInflater.from(this).inflate(R.layout.activity_answer, null); setContentView(view); + getSupportActionBar().setSubtitle(query == null ? null : query.toString()); + ListView lvAnswer = view.findViewById(R.id.lvAnswer); Group grpReady = view.findViewById(R.id.grpReady); ContentLoadingProgressBar pbWait = view.findViewById(R.id.pbWait); diff --git a/app/src/main/java/eu/faircode/email/ActivityBase.java b/app/src/main/java/eu/faircode/email/ActivityBase.java index 2c17bf7109..fed6f8afa9 100644 --- a/app/src/main/java/eu/faircode/email/ActivityBase.java +++ b/app/src/main/java/eu/faircode/email/ActivityBase.java @@ -40,6 +40,7 @@ import android.os.PowerManager; import android.os.SystemClock; import android.text.TextUtils; import android.view.KeyEvent; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MotionEvent; import android.view.View; @@ -52,6 +53,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.graphics.ColorUtils; import androidx.documentfile.provider.DocumentFile; import androidx.fragment.app.Fragment; @@ -92,6 +95,29 @@ abstract class ActivityBase extends AppCompatActivity implements SharedPreferenc return originalContext; } + @Override + public void setContentView(View view) { + LayoutInflater inflater = LayoutInflater.from(this); + + ConstraintLayout container = (ConstraintLayout) inflater.inflate(R.layout.toolbar_holder, null); + View placeholder = container.findViewById(R.id.placeholder); + container.removeView(placeholder); + container.addView(view, placeholder.getLayoutParams()); + + Toolbar toolbar = container.findViewById(R.id.toolbar); + toolbar.setPopupTheme(getThemeId()); + + setSupportActionBar(toolbar); + + super.setContentView(container); + } + + @Override + public void setContentView(int layoutResID) { + View view = LayoutInflater.from(this).inflate(layoutResID, null); + setContentView(view); + } + @Override protected void onCreate(Bundle savedInstanceState) { EntityLog.log(this, "Activity create " + this.getClass().getName() + diff --git a/app/src/main/java/eu/faircode/email/ActivityClear.java b/app/src/main/java/eu/faircode/email/ActivityClear.java index 3f44d9ac5f..35899100d7 100644 --- a/app/src/main/java/eu/faircode/email/ActivityClear.java +++ b/app/src/main/java/eu/faircode/email/ActivityClear.java @@ -35,9 +35,10 @@ public class ActivityClear extends ActivityBase { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setContentView(R.layout.activity_clear); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setSubtitle(getString(R.string.title_advanced_clear_all)); - setContentView(R.layout.activity_clear); btnClearAll = findViewById(R.id.btnClearAll); btnCancel = findViewById(R.id.btnCancel); diff --git a/app/src/main/java/eu/faircode/email/ActivityCode.java b/app/src/main/java/eu/faircode/email/ActivityCode.java index cfc8984323..1f0e304be4 100644 --- a/app/src/main/java/eu/faircode/email/ActivityCode.java +++ b/app/src/main/java/eu/faircode/email/ActivityCode.java @@ -90,8 +90,6 @@ public class ActivityCode extends ActivityBase { searching = savedInstanceState.getString("fair:searching"); } - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) { @Override public void handleOnBackPressed() { @@ -102,6 +100,8 @@ public class ActivityCode extends ActivityBase { View view = LayoutInflater.from(this).inflate(R.layout.activity_code, null); setContentView(view); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + wvCode = findViewById(R.id.wvCode); pbWait = findViewById(R.id.pbWait); grpReady = findViewById(R.id.grpReady); diff --git a/app/src/main/java/eu/faircode/email/ActivityCompose.java b/app/src/main/java/eu/faircode/email/ActivityCompose.java index ede3be9b1f..16858dd53c 100644 --- a/app/src/main/java/eu/faircode/email/ActivityCompose.java +++ b/app/src/main/java/eu/faircode/email/ActivityCompose.java @@ -56,8 +56,6 @@ public class ActivityCompose extends ActivityBase implements FragmentManager.OnB setContentView(R.layout.activity_compose); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setCustomView(R.layout.action_bar); - getSupportActionBar().setDisplayShowCustomEnabled(true); getSupportFragmentManager().addOnBackStackChangedListener(this); diff --git a/app/src/main/java/eu/faircode/email/ActivityDMARC.java b/app/src/main/java/eu/faircode/email/ActivityDMARC.java index 9364854144..709dabf1cf 100644 --- a/app/src/main/java/eu/faircode/email/ActivityDMARC.java +++ b/app/src/main/java/eu/faircode/email/ActivityDMARC.java @@ -64,12 +64,12 @@ public class ActivityDMARC extends ActivityBase { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setSubtitle(R.string.title_advanced_dmarc_viewer); - View view = LayoutInflater.from(this).inflate(R.layout.activity_dmarc, null); setContentView(view); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setSubtitle(R.string.title_advanced_dmarc_viewer); + tvDmarc = findViewById(R.id.tvDmarc); pbWait = findViewById(R.id.pbWait); grpReady = findViewById(R.id.grpReady); diff --git a/app/src/main/java/eu/faircode/email/ActivityDSN.java b/app/src/main/java/eu/faircode/email/ActivityDSN.java index 1100d2531a..b5d4568fa5 100644 --- a/app/src/main/java/eu/faircode/email/ActivityDSN.java +++ b/app/src/main/java/eu/faircode/email/ActivityDSN.java @@ -46,12 +46,12 @@ public class ActivityDSN extends ActivityBase { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setSubtitle("DSN"); - View view = LayoutInflater.from(this).inflate(R.layout.activity_dsn, null); setContentView(view); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setSubtitle("DSN"); + tvHeaders = findViewById(R.id.tvHeaders); pbWait = findViewById(R.id.pbWait); grpReady = findViewById(R.id.grpReady); diff --git a/app/src/main/java/eu/faircode/email/ActivityEML.java b/app/src/main/java/eu/faircode/email/ActivityEML.java index ba862ae26e..1e52fa15cd 100644 --- a/app/src/main/java/eu/faircode/email/ActivityEML.java +++ b/app/src/main/java/eu/faircode/email/ActivityEML.java @@ -109,12 +109,12 @@ public class ActivityEML extends ActivityBase { junk = savedInstanceState.getBoolean("fair:junk"); } - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setSubtitle("EML"); - View view = LayoutInflater.from(this).inflate(R.layout.activity_eml, null); setContentView(view); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setSubtitle("EML"); + tvFrom = findViewById(R.id.tvFrom); tvTo = findViewById(R.id.tvTo); tvReplyTo = findViewById(R.id.tvReplyTo); diff --git a/app/src/main/java/eu/faircode/email/ActivityError.java b/app/src/main/java/eu/faircode/email/ActivityError.java index 474df0fbc9..5662865be7 100644 --- a/app/src/main/java/eu/faircode/email/ActivityError.java +++ b/app/src/main/java/eu/faircode/email/ActivityError.java @@ -51,9 +51,10 @@ public class ActivityError extends ActivityBase { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setContentView(R.layout.activity_error); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setSubtitle(getString(R.string.title_setup_error)); - setContentView(R.layout.activity_error); tvTitle = findViewById(R.id.tvTitle); tvMessage = findViewById(R.id.tvMessage); diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java index 65b418cd85..41ce42019e 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySetup.java +++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java @@ -120,10 +120,7 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac view = LayoutInflater.from(this).inflate(R.layout.activity_setup, null); setContentView(view); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setCustomView(R.layout.action_bar); - getSupportActionBar().setDisplayShowCustomEnabled(true); drawerLayout = findViewById(R.id.drawer_layout); drawerLayout.setScrimColor(Helper.resolveColor(this, R.attr.colorDrawerScrim)); diff --git a/app/src/main/java/eu/faircode/email/ActivitySignature.java b/app/src/main/java/eu/faircode/email/ActivitySignature.java index 0feadbd6d3..4978359f82 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySignature.java +++ b/app/src/main/java/eu/faircode/email/ActivitySignature.java @@ -88,13 +88,13 @@ public class ActivitySignature extends ActivityBase { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); boolean monospaced = prefs.getBoolean("monospaced", false); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setSubtitle(getString(R.string.title_edit_signature)); - LayoutInflater inflater = LayoutInflater.from(this); view = (ViewGroup) inflater.inflate(R.layout.activity_signature, null, false); setContentView(view); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setSubtitle(getString(R.string.title_edit_signature)); + tvHtmlRemark = findViewById(R.id.tvHtmlRemark); etText = findViewById(R.id.etText); ibFull = findViewById(R.id.ibFull); diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 61f565f602..798f30a122 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -269,8 +269,6 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB setContentView(view); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setCustomView(R.layout.action_bar); - getSupportActionBar().setDisplayShowCustomEnabled(true); content_separator = findViewById(R.id.content_separator); content_pane = findViewById(R.id.content_pane); diff --git a/app/src/main/java/eu/faircode/email/ActivityWidget.java b/app/src/main/java/eu/faircode/email/ActivityWidget.java index 311cd397c2..0632847b0c 100644 --- a/app/src/main/java/eu/faircode/email/ActivityWidget.java +++ b/app/src/main/java/eu/faircode/email/ActivityWidget.java @@ -109,9 +109,10 @@ public class ActivityWidget extends ActivityBase { daynight = daynight && (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S); + setContentView(R.layout.activity_widget); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setSubtitle(R.string.title_widget_title_count); - setContentView(R.layout.activity_widget); spAccount = findViewById(R.id.spAccount); spFolder = findViewById(R.id.spFolder); diff --git a/app/src/main/java/eu/faircode/email/ActivityWidgetSync.java b/app/src/main/java/eu/faircode/email/ActivityWidgetSync.java index 503131863b..921b03617e 100644 --- a/app/src/main/java/eu/faircode/email/ActivityWidgetSync.java +++ b/app/src/main/java/eu/faircode/email/ActivityWidgetSync.java @@ -66,9 +66,10 @@ public class ActivityWidgetSync extends ActivityBase { daynight = daynight && (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S); + setContentView(R.layout.activity_widget_sync); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setSubtitle(R.string.title_widget_title_sync); - setContentView(R.layout.activity_widget_sync); cbDayNight = findViewById(R.id.cbDayNight); cbSemiTransparent = findViewById(R.id.cbSemiTransparent); diff --git a/app/src/main/java/eu/faircode/email/ActivityWidgetUnified.java b/app/src/main/java/eu/faircode/email/ActivityWidgetUnified.java index 0a05a83928..cc557180f2 100644 --- a/app/src/main/java/eu/faircode/email/ActivityWidgetUnified.java +++ b/app/src/main/java/eu/faircode/email/ActivityWidgetUnified.java @@ -127,9 +127,10 @@ public class ActivityWidgetUnified extends ActivityBase { daynight = daynight && (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S); + setContentView(R.layout.activity_widget_unified); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setSubtitle(R.string.title_widget_title_list); - setContentView(R.layout.activity_widget_unified); spAccount = findViewById(R.id.spAccount); spFolder = findViewById(R.id.spFolder); diff --git a/app/src/main/java/eu/faircode/email/FragmentBase.java b/app/src/main/java/eu/faircode/email/FragmentBase.java index 7ddcd76904..6be34719b5 100644 --- a/app/src/main/java/eu/faircode/email/FragmentBase.java +++ b/app/src/main/java/eu/faircode/email/FragmentBase.java @@ -56,6 +56,7 @@ import androidx.annotation.RequiresApi; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import androidx.documentfile.provider.DocumentFile; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; @@ -465,15 +466,16 @@ public class FragmentBase extends Fragment { AppCompatActivity activity = (AppCompatActivity) getActivity(); if (activity != null && !isPane()) { ActionBar actionbar = activity.getSupportActionBar(); - if (actionbar != null) - if ((actionbar.getDisplayOptions() & DISPLAY_SHOW_CUSTOM) == 0) { + if (actionbar != null) { + Toolbar toolbar = activity.findViewById(R.id.toolbar); + if ((actionbar.getDisplayOptions() & DISPLAY_SHOW_CUSTOM) == 0 && toolbar == null) { actionbar.setTitle(title == null ? getString(R.string.app_name) : title); actionbar.setSubtitle(subtitle); } else { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity); boolean list_count = prefs.getBoolean("list_count", false); - View custom = actionbar.getCustomView(); + View custom = (toolbar == null ? actionbar.getCustomView() : toolbar); TextView tvCount = custom.findViewById(R.id.count); TextView tvTitle = custom.findViewById(R.id.title); TextView tvSubtitle = custom.findViewById(R.id.subtitle); @@ -487,6 +489,7 @@ public class FragmentBase extends Fragment { if (tvSubtitle != null) tvSubtitle.setText(subtitle); } + } } } diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index f7aec43749..fe0030629d 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -1873,7 +1873,9 @@ public class FragmentCompose extends FragmentBase { final Context context = getContext(); PopupMenuLifecycle.insertIcons(context, menu, false); - LayoutInflater infl = LayoutInflater.from(context); + ActionBar actionBar = getSupportActionBar(); + Context actionBarContext = (actionBar == null ? context : actionBar.getThemedContext()); + LayoutInflater infl = LayoutInflater.from(actionBarContext); ImageButton ibOpenAi = (ImageButton) infl.inflate(R.layout.action_button, null); ibOpenAi.setId(View.generateViewId()); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptions.java b/app/src/main/java/eu/faircode/email/FragmentOptions.java index 580314fed1..cc1d7791fd 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptions.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptions.java @@ -424,7 +424,7 @@ public class FragmentOptions extends FragmentBase { } searchView.setSuggestionsAdapter(new SimpleCursorAdapter( - searchView.getContext(), + pager.getContext(), R.layout.spinner_item1_dropdown, cursor, new String[]{"title"}, diff --git a/app/src/main/java/eu/faircode/email/ToolbarEx.java b/app/src/main/java/eu/faircode/email/ToolbarEx.java new file mode 100644 index 0000000000..70d6c3ee82 --- /dev/null +++ b/app/src/main/java/eu/faircode/email/ToolbarEx.java @@ -0,0 +1,60 @@ +package eu.faircode.email; + +/* + This file is part of FairEmail. + + FairEmail is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + FairEmail is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with FairEmail. If not, see . + + Copyright 2018-2024 by Marcel Bokhorst (M66B) +*/ + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.Toolbar; + +public class ToolbarEx extends Toolbar { + public ToolbarEx(@NonNull Context context) { + super(context); + } + + public ToolbarEx(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public ToolbarEx(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + public void setTitle(CharSequence title) { + super.setTitle(null); + TextView tv = findViewById(R.id.title); + tv.setText(title); + tv.setVisibility(title == null ? GONE : VISIBLE); + findViewById(R.id.count).setVisibility(GONE); + } + + @Override + public void setSubtitle(CharSequence subtitle) { + super.setSubtitle(null); + TextView tv = findViewById(R.id.subtitle); + tv.setText(subtitle); + tv.setVisibility(subtitle == null ? GONE : VISIBLE); + findViewById(R.id.count).setVisibility(GONE); + } +} diff --git a/app/src/main/res/layout/spinner_item1_dropdown.xml b/app/src/main/res/layout/spinner_item1_dropdown.xml index 8ddd8ebb65..4d560ea9dd 100644 --- a/app/src/main/res/layout/spinner_item1_dropdown.xml +++ b/app/src/main/res/layout/spinner_item1_dropdown.xml @@ -3,6 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" + android:background="?android:colorBackground" android:padding="12dp"> + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 84459fafe6..520d88f752 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -26,7 +26,7 @@ - - + +