diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 6b6531e926..b38910648f 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -117,6 +117,7 @@ public class FragmentMessages extends FragmentBase { private TextView tvNoEmail; private FixedRecyclerView rvMessage; private SeekBar seekBar; + private ImageButton ibUp; private BottomNavigationView bottom_navigation; private ContentLoadingProgressBar pbWait; private Group grpSupport; @@ -272,6 +273,7 @@ public class FragmentMessages extends FragmentBase { tvNoEmail = view.findViewById(R.id.tvNoEmail); rvMessage = view.findViewById(R.id.rvMessage); seekBar = view.findViewById(R.id.seekBar); + ibUp = view.findViewById(R.id.ibUp); bottom_navigation = view.findViewById(R.id.bottom_navigation); pbWait = view.findViewById(R.id.pbWait); grpSupport = view.findViewById(R.id.grpSupport); @@ -333,7 +335,7 @@ public class FragmentMessages extends FragmentBase { rvMessage.setHasFixedSize(false); //rvMessage.setItemViewCacheSize(10); //rvMessage.getRecycledViewPool().setMaxRecycledViews(0, 10); - LinearLayoutManager llm = new LinearLayoutManager(getContext()); + final LinearLayoutManager llm = new LinearLayoutManager(getContext()); rvMessage.setLayoutManager(llm); DividerItemDecoration itemDecorator = new DividerItemDecoration(getContext(), llm.getOrientation()) { @@ -461,6 +463,22 @@ public class FragmentMessages extends FragmentBase { } }); + ibUp.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int pos = llm.findLastVisibleItemPosition(); + if (pos != RecyclerView.NO_POSITION) + do { + Long key = adapter.getKeyAtPosition(pos); + if (key != null && isExpanded(key)) { + rvMessage.scrollToPosition(pos); + break; + } + pos--; + } while (pos >= 0); + } + }); + bottom_navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { @@ -558,6 +576,7 @@ public class FragmentMessages extends FragmentBase { swipeRefresh.setEnabled(pull); tvNoEmail.setVisibility(View.GONE); seekBar.setVisibility(View.GONE); + ibUp.setVisibility(viewType == AdapterMessage.ViewType.THREAD ? View.VISIBLE : View.GONE); bottom_navigation.getMenu().findItem(R.id.action_prev).setEnabled(false); bottom_navigation.getMenu().findItem(R.id.action_next).setEnabled(false); bottom_navigation.setVisibility(View.GONE); @@ -1054,7 +1073,7 @@ public class FragmentMessages extends FragmentBase { if (message == null || message.uid == null) return null; - if (values.containsKey("expanded") && values.get("expanded").contains(message.id)) + if (isExpanded(message.id)) return null; if (EntityFolder.OUTBOX.equals(message.folderType)) @@ -1064,6 +1083,10 @@ public class FragmentMessages extends FragmentBase { } }; + private boolean isExpanded(long id) { + return (values.containsKey("expanded") && values.get("expanded").contains(id)); + } + private void onActionMove(String folderType) { Bundle args = new Bundle(); args.putLong("account", account); diff --git a/app/src/main/res/drawable/baseline_home_24.xml b/app/src/main/res/drawable/baseline_home_24.xml new file mode 100644 index 0000000000..8a0e3d978f --- /dev/null +++ b/app/src/main/res/drawable/baseline_home_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/fragment_messages.xml b/app/src/main/res/layout/fragment_messages.xml index aae51fec68..1fc5afa8eb 100644 --- a/app/src/main/res/layout/fragment_messages.xml +++ b/app/src/main/res/layout/fragment_messages.xml @@ -182,6 +182,15 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> + +