From 14515e6ba6d35f1e6e68f36c2e78db956f798209 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 25 Aug 2023 14:14:53 +0200 Subject: keep position with remote conversations --- .../mastodon/activities/ContextActivity.java | 8 ++++++++ .../app/fedilab/android/mastodon/helper/Helper.java | 1 + .../fragment/timeline/FragmentMastodonContext.java | 21 +++++++++++++++++++-- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/ContextActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/ContextActivity.java index 5c6579aa5..7d9390c7e 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/activities/ContextActivity.java +++ b/app/src/main/java/app/fedilab/android/mastodon/activities/ContextActivity.java @@ -62,6 +62,7 @@ public class ContextActivity extends BaseActivity implements FragmentMastodonCon private Status firstMessage; private String remote_instance; private Status focusedStatus; + private String focusedStatusURI; private boolean checkRemotely; @Override @@ -91,11 +92,16 @@ public class ContextActivity extends BaseActivity implements FragmentMastodonCon if (b != null) { focusedStatus = (Status) b.getSerializable(Helper.ARG_STATUS); remote_instance = b.getString(Helper.ARG_REMOTE_INSTANCE, null); + focusedStatusURI = b.getString(Helper.ARG_FOCUSED_STATUS_URI, null); + } if (focusedStatus == null || currentAccount == null || currentAccount.mastodon_account == null) { finish(); return; } + if (focusedStatusURI == null && remote_instance == null) { + focusedStatusURI = focusedStatus.uri; + } MastodonHelper.loadPPMastodon(binding.profilePicture, currentAccount.mastodon_account); checkRemotely = sharedpreferences.getBoolean(getString(R.string.SET_CONVERSATION_REMOTELY), false); @@ -236,6 +242,7 @@ public class ContextActivity extends BaseActivity implements FragmentMastodonCon Bundle bundle = new Bundle(); bundle.putSerializable(Helper.ARG_STATUS, status); bundle.putString(Helper.ARG_REMOTE_INSTANCE, finalInstance); + bundle.putString(Helper.ARG_FOCUSED_STATUS_URI, focusedStatusURI); FragmentMastodonContext fragmentMastodonContext = new FragmentMastodonContext(); fragmentMastodonContext.firstMessage = ContextActivity.this; currentFragment = Helper.addFragment(getSupportFragmentManager(), R.id.nav_host_fragment_content_main, fragmentMastodonContext, bundle, null, null); @@ -281,6 +288,7 @@ public class ContextActivity extends BaseActivity implements FragmentMastodonCon if (status != null) { Intent intentContext = new Intent(ContextActivity.this, ContextActivity.class); intentContext.putExtra(Helper.ARG_STATUS, status); + intentContext.putExtra(Helper.ARG_FOCUSED_STATUS_URI, focusedStatusURI); intentContext.putExtra(Helper.ARG_REMOTE_INSTANCE, finalInstance); intentContext.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intentContext); diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java b/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java index 864fca184..735bdfe4b 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java @@ -214,6 +214,7 @@ public class Helper { public static final String ARG_NOTIFICATION_TYPE = "ARG_NOTIFICATION_TYPE"; public static final String ARG_EXCLUDED_NOTIFICATION_TYPE = "ARG_EXCLUDED_NOTIFICATION_TYPE"; public static final String ARG_STATUS = "ARG_STATUS"; + public static final String ARG_FOCUSED_STATUS_URI = "ARG_FOCUSED_STATUS_URI"; public static final String ARG_TIMELINE_REFRESH_ALL = "ARG_TIMELINE_REFRESH_ALL"; public static final String ARG_REFRESH_NOTFICATION = "ARG_REFRESH_NOTFICATION"; public static final String ARG_STATUS_DELETED = "ARG_STATUS_DELETED"; diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonContext.java b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonContext.java index e2826ceff..b41cd8136 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonContext.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonContext.java @@ -124,7 +124,7 @@ public class FragmentMastodonContext extends Fragment { } }; private Status focusedStatus; - private String remote_instance; + private String remote_instance, focusedStatusURI; private Status firstStatus; private boolean pullToRefresh; private String user_token, user_instance; @@ -153,9 +153,11 @@ public class FragmentMastodonContext extends Fragment { focusedStatus = null; pullToRefresh = false; + focusedStatusURI = null; if (getArguments() != null) { focusedStatus = (Status) getArguments().getSerializable(Helper.ARG_STATUS); remote_instance = getArguments().getString(Helper.ARG_REMOTE_INSTANCE, null); + focusedStatusURI = getArguments().getString(Helper.ARG_FOCUSED_STATUS_URI, null); } if (remote_instance != null) { user_instance = remote_instance; @@ -264,7 +266,22 @@ public class FragmentMastodonContext extends Fragment { } binding.recyclerView.addItemDecoration(new DividerDecoration(requireActivity(), statuses)); binding.swipeContainer.setRefreshing(false); - binding.recyclerView.scrollToPosition(statusPosition); + if (focusedStatusURI == null) { + binding.recyclerView.scrollToPosition(statusPosition); + } else { + int position = 0; + boolean found = false; + for (Status status : statuses) { + if (status.uri.compareToIgnoreCase(focusedStatusURI) == 0) { + found = true; + break; + } + position++; + } + if (found) { + binding.recyclerView.scrollToPosition(position); + } + } } @Override -- cgit v1.2.3