From b12a4f8a3a06f45faf97b6bb198dbc204a12aaf4 Mon Sep 17 00:00:00 2001 From: Michael W Date: Sun, 22 Dec 2024 21:16:04 +0100 Subject: [PATCH] Messaging: Fix loader not auto-restarting When suspending and resuming the app, somehow the loader returns immediately after onResume() with onLoadFinished() but somehow has no data left (data.moveToNext() returns false) which makes the conversation close immediately. Restarting the loader has the desired result: We can leave the app temporarily and come back to the same conversation again This also fixes adding a vcard attachment (since that temporarily leaves the app) Change-Id: Id52e55563a11474fa776323477aa900ca4be0bbe --- .../messaging/datamodel/data/ConversationData.java | 10 ++++++++++ .../ui/conversation/ConversationActivity.java | 9 +++++++++ .../ui/conversation/ConversationFragment.java | 4 ++++ 3 files changed, 23 insertions(+) diff --git a/src/com/android/messaging/datamodel/data/ConversationData.java b/src/com/android/messaging/datamodel/data/ConversationData.java index 83531c5..95c60a1 100644 --- a/src/com/android/messaging/datamodel/data/ConversationData.java +++ b/src/com/android/messaging/datamodel/data/ConversationData.java @@ -504,6 +504,16 @@ public class ConversationData extends BindableData { mLoaderManager.initLoader(SELF_PARTICIPANT_LOADER, args, mSelfParticipantLoaderCallbacks); } + public void restart(final BindingBase binding) { + final Bundle args = new Bundle(); + args.putString(BINDING_ID, binding.getBindingId()); + mLoaderManager.restartLoader(CONVERSATION_META_DATA_LOADER, args, mMetadataLoaderCallbacks); + mLoaderManager.restartLoader(CONVERSATION_MESSAGES_LOADER, args, mMessagesLoaderCallbacks); + mLoaderManager.restartLoader(PARTICIPANT_LOADER, args, mParticipantsLoaderCallbacks); + mLoaderManager.restartLoader(SELF_PARTICIPANT_LOADER, args, + mSelfParticipantLoaderCallbacks); + } + @Override protected void unregisterListeners() { mListeners.clear(); diff --git a/src/com/android/messaging/ui/conversation/ConversationActivity.java b/src/com/android/messaging/ui/conversation/ConversationActivity.java index 0934692..af99889 100644 --- a/src/com/android/messaging/ui/conversation/ConversationActivity.java +++ b/src/com/android/messaging/ui/conversation/ConversationActivity.java @@ -136,6 +136,15 @@ public class ConversationActivity extends BugleActionBarActivity mInstanceStateSaved = true; } + @Override + protected void onRestart() { + super.onRestart(); + final ConversationFragment conversationFragment = getConversationFragment(); + if (conversationFragment != null) { + conversationFragment.onRestart(); + } + } + @Override protected void onResume() { super.onResume(); diff --git a/src/com/android/messaging/ui/conversation/ConversationFragment.java b/src/com/android/messaging/ui/conversation/ConversationFragment.java index 35fae43..128ed7f 100644 --- a/src/com/android/messaging/ui/conversation/ConversationFragment.java +++ b/src/com/android/messaging/ui/conversation/ConversationFragment.java @@ -678,6 +678,10 @@ public class ConversationFragment extends Fragment implements ConversationDataLi mComposeMessageView.saveInputState(outState); } + public void onRestart() { + mBinding.getData().restart(mBinding); + } + @Override public void onResume() { super.onResume();