From 8a1e6240b7a82a4255b69683a3baa36b0e69a68e Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 22 May 2022 17:54:12 +0200 Subject: [PATCH] Fix issue #79 - Delete & redraft for replies lose reference to initial message --- .../android/activities/ComposeActivity.java | 43 ++++++++++++++----- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java b/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java index 44b18b3b8..b2318a022 100644 --- a/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/ComposeActivity.java @@ -174,16 +174,13 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana statusDraftList.add(status); if (statusReplyId != null && statusDraft != null) {//Delete and redraft - ArrayList statusDraftListDR = new ArrayList<>(); - statusDraftListDR.add(statusDraft.statusDraftList.get(0)); - statusList.addAll(statusDraftListDR); - composeAdapter = new ComposeAdapter(statusList, 0, account, accountMention, visibility); - composeAdapter.manageDrafts = this; - LinearLayoutManager mLayoutManager = new LinearLayoutManager(ComposeActivity.this); - binding.recyclerView.setLayoutManager(mLayoutManager); - binding.recyclerView.setAdapter(composeAdapter); - statusesVM.getContext(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusReplyId) - .observe(ComposeActivity.this, this::initializeContextView); + statusesVM.getStatus(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusReplyId) + .observe(ComposeActivity.this, status1 -> { + statusesVM.getContext(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusReplyId) + .observe(ComposeActivity.this, statusContext -> { + initializeContextRedraftView(statusContext, status1); + }); + }); } else if (statusDraft != null) {//Restore a draft with all messages new Thread(() -> { if (statusDraft.statusReplyList != null) { @@ -321,6 +318,32 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana } + /** + * Intialize the common view for the context + * + * @param context {@link Context} + */ + private void initializeContextRedraftView(final Context context, Status initialStatus) { + + if (context == null) { + return; + } + + //Build the array of statuses + statusList.addAll(0, context.ancestors); + statusList.add(initialStatus); + statusList.add(statusDraft.statusDraftList.get(0)); + composeAdapter = new ComposeAdapter(statusList, context.ancestors.size(), account, accountMention, visibility); + composeAdapter.manageDrafts = this; + LinearLayoutManager mLayoutManager = new LinearLayoutManager(ComposeActivity.this); + binding.recyclerView.setLayoutManager(mLayoutManager); + binding.recyclerView.setAdapter(composeAdapter); + composeAdapter.setStatusCount(context.ancestors.size() + 1); + binding.recyclerView.addItemDecoration(new DividerDecorationSimple(ComposeActivity.this, statusList)); + binding.recyclerView.scrollToPosition(composeAdapter.getItemCount() - 1); + } + + @Override public boolean onCreateOptionsMenu(@NonNull Menu menu) { // Inflate the menu; this adds items to the action bar if it is present.