summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas <tschneider.ac@gmail.com>2023-08-25 14:14:53 +0200
committerThomas <tschneider.ac@gmail.com>2023-08-25 14:14:53 +0200
commit14515e6ba6d35f1e6e68f36c2e78db956f798209 (patch)
tree0ad00b08fb3784ef9a0014126a8fb7b4ec954ef9
parentd017952ffea178c9745f09cef8b09ec5e5fa845e (diff)
keep position with remote conversations
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/activities/ContextActivity.java8
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java1
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonContext.java21
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