From aa6fa4594981457ef128fccc235af194bb59d007 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 11 Feb 2022 11:48:58 -0400 Subject: [PATCH] Display LongMessage in dialog fragment. --- app/src/main/AndroidManifest.xml | 2 - .../components/FullScreenDialogFragment.java | 6 +- .../conversation/ConversationFragment.java | 4 +- ...Activity.java => LongMessageFragment.java} | 111 +++++++----------- .../longmessage/LongMessageRepository.java | 2 +- ..._activity.xml => longmessage_fragment.xml} | 0 6 files changed, 52 insertions(+), 73 deletions(-) rename app/src/main/java/org/thoughtcrime/securesms/longmessage/{LongMessageActivity.java => LongMessageFragment.java} (60%) rename app/src/main/res/layout/{longmessage_activity.xml => longmessage_fragment.xml} (100%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6bd017322..747388f4e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -308,8 +308,6 @@ android:allowEmbedded="true" android:resizeableActivity="true" /> - - onNavigateUp()); return view; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index e4b720431..3c1300ef9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -122,7 +122,7 @@ import org.thoughtcrime.securesms.jobs.DirectoryRefreshJob; import org.thoughtcrime.securesms.jobs.MultiDeviceViewOnceOpenJob; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.linkpreview.LinkPreview; -import org.thoughtcrime.securesms.longmessage.LongMessageActivity; +import org.thoughtcrime.securesms.longmessage.LongMessageFragment; import org.thoughtcrime.securesms.messagedetails.MessageDetailsActivity; import org.thoughtcrime.securesms.messagerequests.MessageRequestState; import org.thoughtcrime.securesms.messagerequests.MessageRequestViewModel; @@ -1575,7 +1575,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect @Override public void onMoreTextClicked(@NonNull RecipientId conversationRecipientId, long messageId, boolean isMms) { if (getContext() != null && getActivity() != null) { - startActivity(LongMessageActivity.getIntent(getContext(), conversationRecipientId, messageId, isMms)); + LongMessageFragment.create(messageId, isMms).show(getChildFragmentManager(), null); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageActivity.java b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageFragment.java similarity index 60% rename from app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageActivity.java rename to app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageFragment.java index a5e316ecb..e36fcd4d3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageFragment.java @@ -1,7 +1,5 @@ package org.thoughtcrime.securesms.longmessage; -import android.content.Context; -import android.content.Intent; import android.graphics.PorterDuff; import android.os.Bundle; import android.text.SpannableString; @@ -9,48 +7,41 @@ import android.text.method.LinkMovementMethod; import android.text.style.URLSpan; import android.text.util.Linkify; import android.util.TypedValue; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.core.text.util.LinkifyCompat; -import androidx.lifecycle.ViewModelProviders; +import androidx.fragment.app.DialogFragment; +import androidx.lifecycle.ViewModelProvider; import com.annimon.stream.Stream; -import org.thoughtcrime.securesms.PassphraseRequiredActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.ConversationItemFooter; +import org.thoughtcrime.securesms.components.FullScreenDialogFragment; import org.thoughtcrime.securesms.components.emoji.EmojiTextView; -import org.thoughtcrime.securesms.conversation.colors.ChatColors; import org.thoughtcrime.securesms.conversation.colors.ColorizerView; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.recipients.RecipientId; -import org.thoughtcrime.securesms.util.DynamicLanguage; -import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.Projection; +import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.views.Stub; import java.util.Collections; +import java.util.Locale; -import static org.thoughtcrime.securesms.util.ThemeUtil.isDarkTheme; +public class LongMessageFragment extends FullScreenDialogFragment { -public class LongMessageActivity extends PassphraseRequiredActivity { - - private static final String KEY_CONVERSATION_RECIPIENT = "recipient_id"; private static final String KEY_MESSAGE_ID = "message_id"; private static final String KEY_IS_MMS = "is_mms"; private static final int MAX_DISPLAY_LENGTH = 64 * 1024; - private final DynamicLanguage dynamicLanguage = new DynamicLanguage(); - private final DynamicTheme dynamicTheme = new DynamicTheme(); - private Stub sentBubble; private Stub receivedBubble; private ColorizerView colorizerView; @@ -58,77 +49,63 @@ public class LongMessageActivity extends PassphraseRequiredActivity { private LongMessageViewModel viewModel; - public static Intent getIntent(@NonNull Context context, @NonNull RecipientId conversationRecipient, long messageId, boolean isMms) { - Intent intent = new Intent(context, LongMessageActivity.class); - intent.putExtra(KEY_CONVERSATION_RECIPIENT, conversationRecipient); - intent.putExtra(KEY_MESSAGE_ID, messageId); - intent.putExtra(KEY_IS_MMS, isMms); - return intent; + public static DialogFragment create(long messageId, boolean isMms) { + DialogFragment fragment = new LongMessageFragment(); + Bundle args = new Bundle(); + + args.putLong(KEY_MESSAGE_ID, messageId); + args.putBoolean(KEY_IS_MMS, isMms); + + fragment.setArguments(args); + + return fragment; + } + + + @Override + protected int getTitle() { + return -1; } @Override - protected void onPreCreate() { - super.onPreCreate(); - dynamicLanguage.onCreate(this); - dynamicTheme.onCreate(this); + protected int getDialogLayoutResource() { + return R.layout.longmessage_fragment; } @Override - protected void onCreate(Bundle savedInstanceState, boolean ready) { - super.onCreate(savedInstanceState, ready); - setContentView(R.layout.longmessage_activity); - - sentBubble = new Stub<>(findViewById(R.id.longmessage_sent_stub)); - receivedBubble = new Stub<>(findViewById(R.id.longmessage_received_stub)); - colorizerView = findViewById(R.id.colorizer); + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + sentBubble = new Stub<>(view.findViewById(R.id.longmessage_sent_stub)); + receivedBubble = new Stub<>(view.findViewById(R.id.longmessage_received_stub)); + colorizerView = view.findViewById(R.id.colorizer); bubbleLayoutListener = new BubbleLayoutListener(); - initViewModel(getIntent().getLongExtra(KEY_MESSAGE_ID, -1), getIntent().getBooleanExtra(KEY_IS_MMS, false)); - - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - } - - @Override - protected void onResume() { - super.onResume(); - dynamicLanguage.onResume(this); - dynamicTheme.onResume(this); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - super.onOptionsItemSelected(item); - - switch (item.getItemId()) { - case android.R.id.home: - finish(); - return true; - } - - return false; + initViewModel(requireArguments().getLong(KEY_MESSAGE_ID, -1), requireArguments().getBoolean(KEY_IS_MMS, false)); } private void initViewModel(long messageId, boolean isMms) { - viewModel = ViewModelProviders.of(this, new LongMessageViewModel.Factory(getApplication(), new LongMessageRepository(this), messageId, isMms)) + viewModel = new ViewModelProvider(this, + new LongMessageViewModel.Factory(requireActivity().getApplication(), + new LongMessageRepository(), messageId, isMms)) .get(LongMessageViewModel.class); viewModel.getMessage().observe(this, message -> { if (message == null) return; if (!message.isPresent()) { - Toast.makeText(this, R.string.LongMessageActivity_unable_to_find_message, Toast.LENGTH_SHORT).show(); - finish(); + Toast.makeText(requireContext(), R.string.LongMessageActivity_unable_to_find_message, Toast.LENGTH_SHORT).show(); + dismissAllowingStateLoss(); return; } if (message.get().getMessageRecord().isOutgoing()) { - getSupportActionBar().setTitle(getString(R.string.LongMessageActivity_your_message)); + toolbar.setTitle(getString(R.string.LongMessageActivity_your_message)); } else { Recipient recipient = message.get().getMessageRecord().getRecipient(); - String name = recipient.getDisplayName(this); - getSupportActionBar().setTitle(getString(R.string.LongMessageActivity_message_from_s, name)); + String name = recipient.getDisplayName(requireContext()); + + toolbar.setTitle(getString(R.string.LongMessageActivity_message_from_s, name)); } ViewGroup bubble; @@ -142,13 +119,13 @@ public class LongMessageActivity extends PassphraseRequiredActivity { bubbleLayoutListener.onLayoutChange(bubble, 0, 0, 0, 0, 0, 0, 0, 0); } else { bubble = receivedBubble.get(); - bubble.getBackground().setColorFilter(ContextCompat.getColor(this, R.color.signal_background_secondary), PorterDuff.Mode.MULTIPLY); + bubble.getBackground().setColorFilter(ContextCompat.getColor(requireContext(), R.color.signal_background_secondary), PorterDuff.Mode.MULTIPLY); } EmojiTextView text = bubble.findViewById(R.id.longmessage_text); ConversationItemFooter footer = bubble.findViewById(R.id.longmessage_footer); - CharSequence trimmedBody = getTrimmedBody(message.get().getFullBody(this)); + CharSequence trimmedBody = getTrimmedBody(message.get().getFullBody(requireContext())); SpannableString styledBody = linkifyMessageBody(new SpannableString(trimmedBody)); bubble.setVisibility(View.VISIBLE); @@ -156,11 +133,11 @@ public class LongMessageActivity extends PassphraseRequiredActivity { text.setMovementMethod(LinkMovementMethod.getInstance()); text.setTextSize(TypedValue.COMPLEX_UNIT_SP, SignalStore.settings().getMessageFontSize()); if (!message.get().getMessageRecord().isOutgoing()) { - text.setMentionBackgroundTint(ContextCompat.getColor(this, isDarkTheme(this) ? R.color.core_grey_60 : R.color.core_grey_20)); + text.setMentionBackgroundTint(ContextCompat.getColor(requireContext(), ThemeUtil.isDarkTheme(requireActivity()) ? R.color.core_grey_60 : R.color.core_grey_20)); } else { - text.setMentionBackgroundTint(ContextCompat.getColor(this, R.color.transparent_black_40)); + text.setMentionBackgroundTint(ContextCompat.getColor(requireContext(), R.color.transparent_black_40)); } - footer.setMessageRecord(message.get().getMessageRecord(), dynamicLanguage.getCurrentLocale()); + footer.setMessageRecord(message.get().getMessageRecord(), Locale.getDefault()); }); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageRepository.java b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageRepository.java index 2eb60a21a..a8bc1825c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageRepository.java @@ -31,7 +31,7 @@ class LongMessageRepository { private final MessageDatabase mmsDatabase; private final MessageDatabase smsDatabase; - LongMessageRepository(@NonNull Context context) { + LongMessageRepository() { this.mmsDatabase = SignalDatabase.mms(); this.smsDatabase = SignalDatabase.sms(); } diff --git a/app/src/main/res/layout/longmessage_activity.xml b/app/src/main/res/layout/longmessage_fragment.xml similarity index 100% rename from app/src/main/res/layout/longmessage_activity.xml rename to app/src/main/res/layout/longmessage_fragment.xml