diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java index 74ec334f2..1c90c4766 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationActivity.java @@ -306,11 +306,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity dcContext.eventCenter.addObserver(this, DcContext.DC_EVENT_CHAT_MODIFIED); dcContext.eventCenter.addObserver(this, DcContext.DC_EVENT_CONTACTS_CHANGED); - dcContext.eventCenter.addObserver(this, DcContext.DC_EVENT_INCOMING_MSG); - dcContext.eventCenter.addObserver(this, DcContext.DC_EVENT_MSGS_CHANGED); - dcContext.eventCenter.addObserver(this, DcContext.DC_EVENT_MSG_DELIVERED); - dcContext.eventCenter.addObserver(this, DcContext.DC_EVENT_MSG_FAILED); - dcContext.eventCenter.addObserver(this, DcContext.DC_EVENT_MSG_READ); } @Override @@ -1951,9 +1946,5 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity if (eventId==DcContext.DC_EVENT_CHAT_MODIFIED || eventId==DcContext.DC_EVENT_CONTACTS_CHANGED) { onModified(recipient); } - else { - // TODO: delivered/read events this can be optimized by just updating the single checkmark/icon - fragment.reloadList(); - } } } diff --git a/src/org/thoughtcrime/securesms/ConversationFragment.java b/src/org/thoughtcrime/securesms/ConversationFragment.java index 575a8e503..403636df4 100644 --- a/src/org/thoughtcrime/securesms/ConversationFragment.java +++ b/src/org/thoughtcrime/securesms/ConversationFragment.java @@ -54,6 +54,7 @@ import android.widget.Toast; import android.widget.ViewSwitcher; import com.b44t.messenger.DcContext; +import com.b44t.messenger.DcEventCenter; import com.b44t.messenger.DcMsg; import org.thoughtcrime.securesms.ConversationAdapter.HeaderViewHolder; @@ -95,7 +96,8 @@ import java.util.Set; @SuppressLint("StaticFieldLeak") public class ConversationFragment extends Fragment - implements LoaderManager.LoaderCallbacks + implements LoaderManager.LoaderCallbacks, + DcEventCenter.DcEventDelegate { private static final String TAG = ConversationFragment.class.getSimpleName(); private static final String KEY_LIMIT = "limit"; @@ -165,6 +167,18 @@ public class ConversationFragment extends Fragment initializeResources(); initializeListAdapter(); + + dcContext.eventCenter.addObserver(this, DcContext.DC_EVENT_INCOMING_MSG); + dcContext.eventCenter.addObserver(this, DcContext.DC_EVENT_MSGS_CHANGED); + dcContext.eventCenter.addObserver(this, DcContext.DC_EVENT_MSG_DELIVERED); + dcContext.eventCenter.addObserver(this, DcContext.DC_EVENT_MSG_FAILED); + dcContext.eventCenter.addObserver(this, DcContext.DC_EVENT_MSG_READ); + } + + @Override + public void onDestroy() { + dcContext.eventCenter.removeObservers(this); + super.onDestroy(); } @Override @@ -196,7 +210,10 @@ public class ConversationFragment extends Fragment } public void reloadList() { - getLoaderManager().restartLoader(0, Bundle.EMPTY, this); + LoaderManager loaderManager = getLoaderManager(); + if (loaderManager!=null) { + getLoaderManager().restartLoader(0, Bundle.EMPTY, this); + } } public void moveToLastSeen() { @@ -883,4 +900,9 @@ public class ConversationFragment extends Fragment }, 400); } } + + public void handleEvent(int eventId, Object data1, Object data2) { + // TODO: delivered/read events this can be optimized by just updating the single checkmark/icon + reloadList(); + } }