Add additional fallback logic for change dialog.

This commit is contained in:
Cody Henthorne
2021-07-13 19:37:00 -04:00
committed by Greyson Parrelli
parent 14565b0864
commit 55c69cd50a
10 changed files with 60 additions and 210 deletions

View File

@@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.messagedetails;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.FrameLayout;
@@ -13,9 +12,9 @@ import androidx.recyclerview.widget.RecyclerView;
import org.thoughtcrime.securesms.PassphraseRequiredActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.color.MaterialColor;
import org.thoughtcrime.securesms.conversation.colors.Colorizer;
import org.thoughtcrime.securesms.conversation.colors.ColorizerView;
import org.thoughtcrime.securesms.conversation.ui.error.SafetyNumberChangeDialog;
import org.thoughtcrime.securesms.database.MmsSmsDatabase;
import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackController;
@@ -26,9 +25,7 @@ import org.thoughtcrime.securesms.messagedetails.MessageDetailsViewModel.Factory
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.DynamicDarkActionBarTheme;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.WindowUtil;
import java.util.ArrayList;
import java.util.Collection;
@@ -102,7 +99,7 @@ public final class MessageDetailsActivity extends PassphraseRequiredActivity {
ColorizerView colorizerView = findViewById(R.id.message_details_colorizer);
colorizer = new Colorizer(colorizerView);
adapter = new MessageDetailsAdapter(this, glideRequests, colorizer);
adapter = new MessageDetailsAdapter(this, glideRequests, colorizer, this::onErrorClicked);
list.setAdapter(adapter);
list.setItemAnimator(null);
@@ -170,4 +167,8 @@ public final class MessageDetailsActivity extends PassphraseRequiredActivity {
}
return true;
}
private void onErrorClicked(@NonNull MessageRecord messageRecord) {
SafetyNumberChangeDialog.show(this, messageRecord);
}
}

View File

@@ -13,6 +13,7 @@ import androidx.recyclerview.widget.RecyclerView;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.conversation.ConversationMessage;
import org.thoughtcrime.securesms.conversation.colors.Colorizer;
import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.mms.GlideRequests;
import java.util.List;
@@ -22,15 +23,17 @@ final class MessageDetailsAdapter extends ListAdapter<MessageDetailsAdapter.Mess
private static final Object EXPIRATION_TIMER_CHANGE_PAYLOAD = new Object();
private final LifecycleOwner lifecycleOwner;
private final GlideRequests glideRequests;
private final Colorizer colorizer;
private boolean running;
private final GlideRequests glideRequests;
private final Colorizer colorizer;
private Callbacks callbacks;
private boolean running;
MessageDetailsAdapter(@NonNull LifecycleOwner lifecycleOwner, @NonNull GlideRequests glideRequests, @NonNull Colorizer colorizer) {
MessageDetailsAdapter(@NonNull LifecycleOwner lifecycleOwner, @NonNull GlideRequests glideRequests, @NonNull Colorizer colorizer, @NonNull Callbacks callbacks) {
super(new MessageDetailsDiffer());
this.lifecycleOwner = lifecycleOwner;
this.glideRequests = glideRequests;
this.colorizer = colorizer;
this.callbacks = callbacks;
this.running = true;
}
@@ -42,7 +45,7 @@ final class MessageDetailsAdapter extends ListAdapter<MessageDetailsAdapter.Mess
case MessageDetailsViewState.RECIPIENT_HEADER:
return new RecipientHeaderViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_details_recipient_header, parent, false));
case MessageDetailsViewState.RECIPIENT:
return new RecipientViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_details_recipient, parent, false));
return new RecipientViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.message_details_recipient, parent, false), callbacks);
default:
throw new AssertionError("unknown view type");
}
@@ -143,4 +146,8 @@ final class MessageDetailsAdapter extends ListAdapter<MessageDetailsAdapter.Mess
this.itemType = itemType;
}
}
interface Callbacks {
void onErrorClicked(@NonNull MessageRecord messageRecord);
}
}

View File

@@ -3,9 +3,9 @@ package org.thoughtcrime.securesms.messagedetails;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.thoughtcrime.securesms.ConfirmIdentityDialog;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.AvatarImageView;
import org.thoughtcrime.securesms.components.FromTextView;
@@ -15,16 +15,19 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences;
import java.util.Locale;
final class RecipientViewHolder extends RecyclerView.ViewHolder {
private final AvatarImageView avatar;
private final FromTextView fromView;
private final TextView timestamp;
private final TextView error;
private final View conflictButton;
private final View unidentifiedDeliveryIcon;
private final AvatarImageView avatar;
private final FromTextView fromView;
private final TextView timestamp;
private final TextView error;
private final View conflictButton;
private final View unidentifiedDeliveryIcon;
private MessageDetailsAdapter.Callbacks callbacks;
RecipientViewHolder(View itemView) {
RecipientViewHolder(@NonNull View itemView, @NonNull MessageDetailsAdapter.Callbacks callbacks) {
super(itemView);
this.callbacks = callbacks;
fromView = itemView.findViewById(R.id.message_details_recipient_name);
avatar = itemView.findViewById(R.id.message_details_recipient_avatar);
timestamp = itemView.findViewById(R.id.message_details_recipient_timestamp);
@@ -43,7 +46,7 @@ final class RecipientViewHolder extends RecyclerView.ViewHolder {
error.setVisibility(View.VISIBLE);
conflictButton.setVisibility(View.VISIBLE);
error.setText(itemView.getContext().getString(R.string.message_details_recipient__new_safety_number));
conflictButton.setOnClickListener(unused -> new ConfirmIdentityDialog(itemView.getContext(), data.getMessageRecord(), data.getKeyMismatchFailure()).show());
conflictButton.setOnClickListener(unused -> callbacks.onErrorClicked(data.getMessageRecord()));
} else if ((data.getNetworkFailure() != null && !data.getMessageRecord().isPending()) || (!data.getMessageRecord().getRecipient().isPushGroup() && data.getMessageRecord().isFailed())) {
timestamp.setVisibility(View.GONE);
error.setVisibility(View.VISIBLE);