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" />
+
+