mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 09:20:19 +01:00
Add additional fallback logic for change dialog.
This commit is contained in:
committed by
Greyson Parrelli
parent
14565b0864
commit
55c69cd50a
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user