diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 1b5cebe2d1..33db1f2297 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -191,7 +191,7 @@ public class FragmentCompose extends FragmentEx { grpReady.setVisibility(View.GONE); pbWait.setVisibility(View.VISIBLE); Helper.setViewsEnabled(view, false); - bottom_navigation.getMenu().setGroupEnabled(0, false); + getActivity().invalidateOptionsMenu(); if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) { @@ -295,6 +295,7 @@ public class FragmentCompose extends FragmentEx { public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); 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); } @@ -496,7 +497,7 @@ public class FragmentCompose extends FragmentEx { private void onAction(int action) { Helper.setViewsEnabled(view, false); - bottom_navigation.getMenu().setGroupEnabled(0, false); + getActivity().invalidateOptionsMenu(); EntityIdentity identity = (EntityIdentity) spFrom.getSelectedItem(); @@ -640,7 +641,7 @@ public class FragmentCompose extends FragmentEx { etTo.requestFocus(); Helper.setViewsEnabled(view, true); - bottom_navigation.getMenu().setGroupEnabled(0, true); + getActivity().invalidateOptionsMenu(); DB db = DB.getInstance(getContext()); @@ -845,7 +846,7 @@ public class FragmentCompose extends FragmentEx { Log.i(Helper.TAG, "Loaded action id=" + draft.id + " action=" + action); Helper.setViewsEnabled(view, true); - bottom_navigation.getMenu().setGroupEnabled(0, true); + getActivity().invalidateOptionsMenu(); if (action == R.id.action_trash) { autosave = false; @@ -865,7 +866,7 @@ public class FragmentCompose extends FragmentEx { @Override protected void onException(Bundle args, Throwable ex) { Helper.setViewsEnabled(view, true); - bottom_navigation.getMenu().setGroupEnabled(0, true); + getActivity().invalidateOptionsMenu(); if (ex instanceof IllegalArgumentException) Snackbar.make(view, ex.getMessage(), Snackbar.LENGTH_LONG).show(); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessage.java b/app/src/main/java/eu/faircode/email/FragmentMessage.java index 54253bf58d..1a68d9cd20 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessage.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessage.java @@ -23,7 +23,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Typeface; -import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; @@ -67,6 +66,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; public class FragmentMessage extends FragmentEx { + private ViewGroup view; private TextView tvFrom; private TextView tvTime; private TextView tvSubject; @@ -92,7 +92,7 @@ public class FragmentMessage extends FragmentEx { @Override @Nullable public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_message, container, false); + view = (ViewGroup) inflater.inflate(R.layout.fragment_message, container, false); // Get arguments Bundle args = getArguments(); @@ -390,11 +390,7 @@ public class FragmentMessage extends FragmentEx { } private void onActionSeen(long id) { - final MenuItem item = top_navigation.getMenu().findItem(R.id.action_seen); - item.setEnabled(false); - - final Drawable icon = item.getIcon(); - item.setIcon(Helper.toDimmed(icon)); + Helper.setViewsEnabled(view, false); Bundle args = new Bundle(); args.putLong("id", id); @@ -427,25 +423,19 @@ public class FragmentMessage extends FragmentEx { @Override protected void onLoaded(Bundle args, Void data) { - item.setEnabled(true); - item.setIcon(icon); + Helper.setViewsEnabled(view, true); } @Override public void onException(Bundle args, Throwable ex) { - item.setEnabled(true); - item.setIcon(icon); + Helper.setViewsEnabled(view, true); Toast.makeText(getContext(), ex.toString(), Toast.LENGTH_LONG).show(); } }.load(this, args); } private void onActionEdit(final long id) { - final MenuItem item = top_navigation.getMenu().findItem(R.id.action_edit); - item.setEnabled(false); - - final Drawable icon = item.getIcon(); - item.setIcon(Helper.toDimmed(icon)); + Helper.setViewsEnabled(view, false); Bundle args = new Bundle(); args.putLong("id", id); @@ -480,8 +470,7 @@ public class FragmentMessage extends FragmentEx { @Override protected void onLoaded(Bundle args, Void data) { - item.setEnabled(true); - item.setIcon(icon); + Helper.setViewsEnabled(view, true); getContext().startActivity( new Intent(getContext(), ActivityCompose.class) .putExtra("action", "edit") @@ -490,8 +479,7 @@ public class FragmentMessage extends FragmentEx { @Override public void onException(Bundle args, Throwable ex) { - item.setEnabled(true); - item.setIcon(icon); + Helper.setViewsEnabled(view, true); Toast.makeText(getContext(), ex.toString(), Toast.LENGTH_LONG).show(); } }.load(this, args); @@ -516,11 +504,7 @@ public class FragmentMessage extends FragmentEx { .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - final MenuItem item = bottom_navigation.getMenu().findItem(R.id.action_spam); - item.setEnabled(false); - - final Drawable icon = item.getIcon(); - item.setIcon(Helper.toDimmed(icon)); + Helper.setViewsEnabled(view, false); Bundle args = new Bundle(); args.putLong("id", id); @@ -553,14 +537,12 @@ public class FragmentMessage extends FragmentEx { @Override protected void onLoaded(Bundle args, Void result) { - item.setEnabled(true); - item.setIcon(icon); + Helper.setViewsEnabled(view, true); } @Override protected void onException(Bundle args, Throwable ex) { - item.setEnabled(true); - item.setIcon(icon); + Helper.setViewsEnabled(view, true); Toast.makeText(getContext(), ex.toString(), Toast.LENGTH_LONG).show(); } }.load(FragmentMessage.this, args); @@ -579,11 +561,7 @@ public class FragmentMessage extends FragmentEx { .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - final MenuItem item = bottom_navigation.getMenu().findItem(R.id.action_trash); - item.setEnabled(false); - - final Drawable icon = item.getIcon(); - item.setIcon(Helper.toDimmed(icon)); + Helper.setViewsEnabled(view, false); Bundle args = new Bundle(); args.putLong("id", id); @@ -614,14 +592,12 @@ public class FragmentMessage extends FragmentEx { @Override protected void onLoaded(Bundle args, Void result) { - item.setEnabled(true); - item.setIcon(icon); + Helper.setViewsEnabled(view, true); } @Override protected void onException(Bundle args, Throwable ex) { - item.setEnabled(true); - item.setIcon(icon); + Helper.setViewsEnabled(view, true); Toast.makeText(getContext(), ex.toString(), Toast.LENGTH_LONG).show(); } }.load(FragmentMessage.this, args); @@ -629,11 +605,7 @@ public class FragmentMessage extends FragmentEx { }) .setNegativeButton(android.R.string.cancel, null).show(); } else { - final MenuItem item = bottom_navigation.getMenu().findItem(R.id.action_trash); - item.setEnabled(false); - - final Drawable icon = item.getIcon(); - item.setIcon(Helper.toDimmed(icon)); + Helper.setViewsEnabled(view, false); Bundle args = new Bundle(); args.putLong("id", id); @@ -669,14 +641,12 @@ public class FragmentMessage extends FragmentEx { @Override protected void onLoaded(Bundle args, Void result) { - item.setEnabled(true); - item.setIcon(icon); + Helper.setViewsEnabled(view, true); } @Override protected void onException(Bundle args, Throwable ex) { - item.setEnabled(true); - item.setIcon(icon); + Helper.setViewsEnabled(view, true); Toast.makeText(getContext(), ex.toString(), Toast.LENGTH_LONG).show(); } }.load(FragmentMessage.this, args); @@ -741,11 +711,7 @@ public class FragmentMessage extends FragmentEx { popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(final MenuItem target) { - final MenuItem item = bottom_navigation.getMenu().findItem(R.id.action_move); - item.setEnabled(false); - - final Drawable icon = item.getIcon(); - item.setIcon(Helper.toDimmed(icon)); + Helper.setViewsEnabled(view, false); args.putLong("target", target.getItemId()); @@ -780,14 +746,12 @@ public class FragmentMessage extends FragmentEx { @Override protected void onLoaded(Bundle args, Void result) { - item.setEnabled(true); - item.setIcon(icon); + Helper.setViewsEnabled(view, true); } @Override protected void onException(Bundle args, Throwable ex) { - item.setEnabled(true); - item.setIcon(icon); + Helper.setViewsEnabled(view, true); Toast.makeText(getContext(), ex.toString(), Toast.LENGTH_LONG).show(); } }.load(FragmentMessage.this, args); @@ -802,11 +766,7 @@ public class FragmentMessage extends FragmentEx { } private void onActionArchive(long id) { - final MenuItem item = bottom_navigation.getMenu().findItem(R.id.action_archive); - item.setEnabled(false); - - final Drawable icon = item.getIcon(); - item.setIcon(Helper.toDimmed(icon)); + Helper.setViewsEnabled(view, false); Bundle args = new Bundle(); args.putLong("id", id); @@ -839,14 +799,12 @@ public class FragmentMessage extends FragmentEx { @Override protected void onLoaded(Bundle args, Void result) { - item.setEnabled(true); - item.setIcon(icon); + Helper.setViewsEnabled(view, true); } @Override protected void onException(Bundle args, Throwable ex) { - item.setEnabled(true); - item.setIcon(icon); + Helper.setViewsEnabled(view, true); Toast.makeText(getContext(), ex.toString(), Toast.LENGTH_LONG).show(); } }.load(FragmentMessage.this, args); diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index c06097e3e6..dc6ff5d986 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -21,25 +21,24 @@ package eu.faircode.email; import android.content.Context; import android.content.res.TypedArray; -import android.graphics.ColorMatrix; -import android.graphics.ColorMatrixColorFilter; -import android.graphics.drawable.Drawable; import android.os.Build; import android.text.TextUtils; import android.util.Log; +import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageButton; +import android.widget.ImageView; import android.widget.Spinner; +import com.google.android.material.bottomnavigation.BottomNavigationView; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -import androidx.annotation.NonNull; - public class Helper { static final String TAG = BuildConfig.APPLICATION_ID; @@ -51,25 +50,19 @@ public class Helper { return color; } - static Drawable toDimmed(@NonNull Drawable drawable) { - ColorMatrix matrix = new ColorMatrix(); - matrix.setSaturation(0); - ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); - Drawable mutated = drawable.mutate(); - mutated.setColorFilter(filter); - mutated.setAlpha(128); - return mutated; - } - static void setViewsEnabled(ViewGroup view, boolean enabled) { for (int i = 0; i < view.getChildCount(); i++) { View child = view.getChildAt(i); if (child instanceof Spinner || child instanceof EditText || child instanceof CheckBox || + child instanceof ImageView || child instanceof ImageButton) child.setEnabled(enabled); - else if (child instanceof ViewGroup) + if (child instanceof BottomNavigationView) { + Menu menu = ((BottomNavigationView) child).getMenu(); + menu.setGroupEnabled(0, enabled); + } else if (child instanceof ViewGroup) setViewsEnabled((ViewGroup) child, enabled); } } diff --git a/app/src/main/res/color/bottomnav_background.xml b/app/src/main/res/color/bottomnav_background.xml new file mode 100644 index 0000000000..11190add8f --- /dev/null +++ b/app/src/main/res/color/bottomnav_background.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/fragment_compose.xml b/app/src/main/res/layout/fragment_compose.xml index 539fb0e55d..aa00793b15 100644 --- a/app/src/main/res/layout/fragment_compose.xml +++ b/app/src/main/res/layout/fragment_compose.xml @@ -175,9 +175,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorPrimary" - app:itemIconTint="@color/colorActionForeground" - app:itemTextColor="@color/colorActionForeground" - app:labelVisibilityMode="unlabeled" + app:itemIconTint="@color/bottomnav_background" + app:itemTextColor="@color/bottomnav_background" + app:labelVisibilityMode="labeled" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout/fragment_message.xml b/app/src/main/res/layout/fragment_message.xml index 511056dd19..a854f2c6f0 100644 --- a/app/src/main/res/layout/fragment_message.xml +++ b/app/src/main/res/layout/fragment_message.xml @@ -180,8 +180,8 @@ android:layout_height="30dp" android:layout_marginTop="3dp" android:background="@color/darkColorSeparator" - app:itemIconTint="@color/colorActionForeground" - app:itemTextColor="@color/colorActionForeground" + app:itemIconTint="@color/bottomnav_background" + app:itemTextColor="@color/bottomnav_background" app:labelVisibilityMode="unlabeled" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -216,8 +216,8 @@ android:layout_height="wrap_content" android:layout_marginTop="3dp" android:background="@color/colorPrimary" - app:itemIconTint="@color/colorActionForeground" - app:itemTextColor="@color/colorActionForeground" + app:itemIconTint="@color/bottomnav_background" + app:itemTextColor="@color/bottomnav_background" app:labelVisibilityMode="labeled" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 0b40115071..c4e00b3b76 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,6 +5,7 @@ #ffb300 #fff + #ccc #000 #ffaaaaaa