Fix leaking MessageDetailsActivity via list items.

This commit is contained in:
Cody Henthorne 2020-06-06 19:27:49 -04:00 committed by Greyson Parrelli
parent 5b4d74b7fe
commit 13027dc44b

View File

@ -81,23 +81,45 @@ public class MessageRecipientListItem extends RelativeLayout
this.deliveryStatusView = findViewById(R.id.delivery_status); this.deliveryStatusView = findViewById(R.id.delivery_status);
} }
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
observeMember();
}
@Override
protected void onDetachedFromWindow() {
unsubscribeFromMember();
super.onDetachedFromWindow();
}
public void set(final GlideRequests glideRequests, public void set(final GlideRequests glideRequests,
final MessageRecord record, final MessageRecord record,
final RecipientDeliveryStatus member, final RecipientDeliveryStatus member,
final boolean isPushGroup) final boolean isPushGroup)
{ {
if (this.member != null) this.member.getRecipient().live().removeForeverObserver(this); unsubscribeFromMember();
this.glideRequests = glideRequests; this.glideRequests = glideRequests;
this.member = member; this.member = member;
observeMember();
member.getRecipient().live().observeForever(this);
fromView.setText(member.getRecipient()); fromView.setText(member.getRecipient());
contactPhotoImage.setAvatar(glideRequests, member.getRecipient(), false); contactPhotoImage.setAvatar(glideRequests, member.getRecipient(), false);
setIssueIndicators(record, isPushGroup); setIssueIndicators(record, isPushGroup);
unidentifiedDeliveryIcon.setVisibility(TextSecurePreferences.isShowUnidentifiedDeliveryIndicatorsEnabled(getContext()) && member.isUnidentified() ? VISIBLE : GONE); unidentifiedDeliveryIcon.setVisibility(TextSecurePreferences.isShowUnidentifiedDeliveryIndicatorsEnabled(getContext()) && member.isUnidentified() ? VISIBLE : GONE);
} }
private void observeMember() {
if (isAttachedToWindow() && member != null && member.getRecipient() != null) {
member.getRecipient().live().observeForever(this);
}
}
private void unsubscribeFromMember() {
if (member != null && member.getRecipient() != null) member.getRecipient().live().removeForeverObserver(this);
}
private void setIssueIndicators(final MessageRecord record, private void setIssueIndicators(final MessageRecord record,
final boolean isPushGroup) final boolean isPushGroup)
{ {
@ -162,7 +184,7 @@ public class MessageRecipientListItem extends RelativeLayout
} }
public void unbind() { public void unbind() {
if (this.member != null && this.member.getRecipient() != null) this.member.getRecipient().live().removeForeverObserver(this); unsubscribeFromMember();
} }
@Override @Override