diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 747388f4ec..fb1732b622 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -316,12 +316,6 @@
android:theme="@style/TextSecure.LightTheme.Popup"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize" />
-
-
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 3c1300ef91..3bbc159fcf 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java
@@ -123,7 +123,7 @@ import org.thoughtcrime.securesms.jobs.MultiDeviceViewOnceOpenJob;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
import org.thoughtcrime.securesms.longmessage.LongMessageFragment;
-import org.thoughtcrime.securesms.messagedetails.MessageDetailsActivity;
+import org.thoughtcrime.securesms.messagedetails.MessageDetailsFragment;
import org.thoughtcrime.securesms.messagerequests.MessageRequestState;
import org.thoughtcrime.securesms.messagerequests.MessageRequestViewModel;
import org.thoughtcrime.securesms.mms.GlideApp;
@@ -1005,7 +1005,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
}
private void handleDisplayDetails(ConversationMessage message) {
- startActivity(MessageDetailsActivity.getIntentForMessageDetails(requireContext(), message.getMessageRecord(), recipient.getId(), threadId));
+ MessageDetailsFragment.create(message.getMessageRecord(), recipient.getId()).show(getChildFragmentManager(), null);
}
private void handleForwardMessageParts(Set multiselectParts) {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java
index 63bbd53ecc..fde50e3e3e 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java
@@ -212,7 +212,7 @@ import org.thoughtcrime.securesms.mediaoverview.MediaOverviewActivity;
import org.thoughtcrime.securesms.mediasend.Media;
import org.thoughtcrime.securesms.mediasend.MediaSendActivityResult;
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionActivity;
-import org.thoughtcrime.securesms.messagedetails.MessageDetailsActivity;
+import org.thoughtcrime.securesms.messagedetails.MessageDetailsFragment;
import org.thoughtcrime.securesms.messagerequests.MessageRequestState;
import org.thoughtcrime.securesms.messagerequests.MessageRequestViewModel;
import org.thoughtcrime.securesms.messagerequests.MessageRequestsBottomView;
@@ -3730,7 +3730,7 @@ public class ConversationParentFragment extends Fragment
@Override
public void onMessageWithErrorClicked(@NonNull MessageRecord messageRecord) {
if (messageRecord.isIdentityMismatchFailure()) {
- SafetyNumberChangeDialog.show(requireActivity(), messageRecord);
+ SafetyNumberChangeDialog.show(requireContext(), getChildFragmentManager(), messageRecord);
} else if (messageRecord.hasFailedWithNetworkFailures()) {
new AlertDialog.Builder(requireContext())
.setMessage(R.string.conversation_activity__message_could_not_be_sent)
@@ -3738,7 +3738,7 @@ public class ConversationParentFragment extends Fragment
.setPositiveButton(R.string.conversation_activity__send, (dialog, which) -> MessageSender.resend(requireContext(), messageRecord))
.show();
} else {
- startActivity(MessageDetailsActivity.getIntentForMessageDetails(requireContext(), messageRecord, messageRecord.getRecipient().getId(), messageRecord.getThreadId()));
+ MessageDetailsFragment.create(messageRecord, recipient.getId()).show(getChildFragmentManager(), null);
}
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java
index f2d7a0ec26..62e4098f8d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java
@@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.conversation.ui.error;
import android.app.Activity;
import android.app.Dialog;
+import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -77,9 +78,9 @@ public final class SafetyNumberChangeDialog extends DialogFragment implements Sa
fragment.show(fragmentManager, SAFETY_NUMBER_DIALOG);
}
- public static void show(@NonNull FragmentActivity fragmentActivity, @NonNull MessageRecord messageRecord) {
+ public static void show(@NonNull Context context, @NonNull FragmentManager fragmentManager, @NonNull MessageRecord messageRecord) {
List ids = Stream.of(messageRecord.getIdentityKeyMismatches())
- .map(mismatch -> mismatch.getRecipientId(fragmentActivity).serialize())
+ .map(mismatch -> mismatch.getRecipientId(context).serialize())
.distinct()
.toList();
@@ -90,7 +91,7 @@ public final class SafetyNumberChangeDialog extends DialogFragment implements Sa
arguments.putInt(CONTINUE_TEXT_RESOURCE_EXTRA, R.string.safety_number_change_dialog__send_anyway);
SafetyNumberChangeDialog fragment = new SafetyNumberChangeDialog();
fragment.setArguments(arguments);
- fragment.show(fragmentActivity.getSupportFragmentManager(), SAFETY_NUMBER_DIALOG);
+ fragment.show(fragmentManager, SAFETY_NUMBER_DIALOG);
}
public static void showForCall(@NonNull FragmentManager fragmentManager, @NonNull RecipientId recipientId) {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsActivity.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsFragment.java
similarity index 63%
rename from app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsActivity.java
rename to app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsFragment.java
index 910724a6fe..17d7508e26 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsFragment.java
@@ -1,18 +1,17 @@
package org.thoughtcrime.securesms.messagedetails;
-import android.content.Context;
-import android.content.Intent;
import android.os.Bundle;
-import android.view.MenuItem;
import android.view.View;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.RecyclerView;
-import org.thoughtcrime.securesms.PassphraseRequiredActivity;
import org.thoughtcrime.securesms.R;
+import org.thoughtcrime.securesms.components.FullScreenDialogFragment;
import org.thoughtcrime.securesms.components.recyclerview.ToolbarShadowAnimationHelper;
import org.thoughtcrime.securesms.conversation.colors.Colorizer;
import org.thoughtcrime.securesms.conversation.colors.RecyclerViewColorizer;
@@ -27,17 +26,14 @@ 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.DynamicNoActionBarTheme;
-import org.thoughtcrime.securesms.util.DynamicTheme;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-public final class MessageDetailsActivity extends PassphraseRequiredActivity {
+public final class MessageDetailsFragment extends FullScreenDialogFragment {
private static final String MESSAGE_ID_EXTRA = "message_id";
- private static final String THREAD_ID_EXTRA = "thread_id";
private static final String TYPE_EXTRA = "type";
private static final String RECIPIENT_EXTRA = "recipient_id";
@@ -47,60 +43,53 @@ public final class MessageDetailsActivity extends PassphraseRequiredActivity {
private Colorizer colorizer;
private RecyclerViewColorizer recyclerViewColorizer;
- private DynamicTheme dynamicTheme = new DynamicNoActionBarTheme();
+ public static @NonNull DialogFragment create(@NonNull MessageRecord message, @NonNull RecipientId recipientId) {
+ DialogFragment dialogFragment = new MessageDetailsFragment();
+ Bundle args = new Bundle();
- public static @NonNull Intent getIntentForMessageDetails(@NonNull Context context, @NonNull MessageRecord message, @NonNull RecipientId recipientId, long threadId) {
- Intent intent = new Intent(context, MessageDetailsActivity.class);
- intent.putExtra(MESSAGE_ID_EXTRA, message.getId());
- intent.putExtra(THREAD_ID_EXTRA, threadId);
- intent.putExtra(TYPE_EXTRA, message.isMms() ? MmsSmsDatabase.MMS_TRANSPORT : MmsSmsDatabase.SMS_TRANSPORT);
- intent.putExtra(RECIPIENT_EXTRA, recipientId);
- return intent;
+ args.putLong(MESSAGE_ID_EXTRA, message.getId());
+ args.putString(TYPE_EXTRA, message.isMms() ? MmsSmsDatabase.MMS_TRANSPORT : MmsSmsDatabase.SMS_TRANSPORT);
+ args.putParcelable(RECIPIENT_EXTRA, recipientId);
+
+ dialogFragment.setArguments(args);
+
+ return dialogFragment;
}
@Override
- protected void onPreCreate() {
- dynamicTheme.onCreate(this);
+ protected int getTitle() {
+ return R.string.AndroidManifest__message_details;
}
@Override
- protected void onCreate(Bundle savedInstanceState, boolean ready) {
- super.onCreate(savedInstanceState, ready);
- setContentView(R.layout.message_details_activity);
+ protected int getDialogLayoutResource() {
+ return R.layout.message_details_fragment;
+ }
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
glideRequests = GlideApp.with(this);
- initializeList();
+ initializeList(view);
initializeViewModel();
- initializeActionBar();
- initializeVideoPlayer();
+ initializeVideoPlayer(view);
}
@Override
- protected void onResume() {
+ public void onResume() {
super.onResume();
- dynamicTheme.onResume(this);
adapter.resumeMessageExpirationTimer();
}
@Override
- protected void onPause() {
+ public void onPause() {
super.onPause();
adapter.pauseMessageExpirationTimer();
}
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == android.R.id.home) {
- onBackPressed();
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
-
- private void initializeList() {
- RecyclerView list = findViewById(R.id.message_details_list);
- View toolbarShadow = findViewById(R.id.toolbar_shadow);
+ private void initializeList(@NonNull View view) {
+ RecyclerView list = view.findViewById(R.id.message_details_list);
+ View toolbarShadow = view.findViewById(R.id.toolbar_shadow);
colorizer = new Colorizer();
adapter = new MessageDetailsAdapter(this, glideRequests, colorizer, this::onErrorClicked);
@@ -112,15 +101,15 @@ public final class MessageDetailsActivity extends PassphraseRequiredActivity {
}
private void initializeViewModel() {
- final RecipientId recipientId = getIntent().getParcelableExtra(RECIPIENT_EXTRA);
- final String type = getIntent().getStringExtra(TYPE_EXTRA);
- final Long messageId = getIntent().getLongExtra(MESSAGE_ID_EXTRA, -1);
+ final RecipientId recipientId = requireArguments().getParcelable(RECIPIENT_EXTRA);
+ final String type = requireArguments().getString(TYPE_EXTRA);
+ final Long messageId = requireArguments().getLong(MESSAGE_ID_EXTRA, -1);
final Factory factory = new Factory(recipientId, type, messageId);
viewModel = ViewModelProviders.of(this, factory).get(MessageDetailsViewModel.class);
viewModel.getMessageDetails().observe(this, details -> {
if (details == null) {
- finish();
+ dismissAllowingStateLoss();
} else {
adapter.submitList(convertToRows(details));
}
@@ -128,21 +117,15 @@ public final class MessageDetailsActivity extends PassphraseRequiredActivity {
viewModel.getRecipient().observe(this, recipient -> recyclerViewColorizer.setChatColors(recipient.getChatColors()));
}
- private void initializeVideoPlayer() {
- FrameLayout videoContainer = findViewById(R.id.video_container);
- RecyclerView recyclerView = findViewById(R.id.message_details_list);
- List holders = GiphyMp4ProjectionPlayerHolder.injectVideoViews(this, getLifecycle(), videoContainer, 1);
+ private void initializeVideoPlayer(@NonNull View view) {
+ FrameLayout videoContainer = view.findViewById(R.id.video_container);
+ RecyclerView recyclerView = view.findViewById(R.id.message_details_list);
+ List holders = GiphyMp4ProjectionPlayerHolder.injectVideoViews(requireContext(), getLifecycle(), videoContainer, 1);
GiphyMp4ProjectionRecycler callback = new GiphyMp4ProjectionRecycler(holders);
GiphyMp4PlaybackController.attach(recyclerView, callback, 1);
}
- private void initializeActionBar() {
- setSupportActionBar(findViewById(R.id.toolbar));
- requireSupportActionBar().setDisplayHomeAsUpEnabled(true);
- requireSupportActionBar().setTitle(R.string.AndroidManifest__message_details);
- }
-
private List> convertToRows(MessageDetails details) {
List> list = new ArrayList<>();
@@ -175,6 +158,6 @@ public final class MessageDetailsActivity extends PassphraseRequiredActivity {
}
private void onErrorClicked(@NonNull MessageRecord messageRecord) {
- SafetyNumberChangeDialog.show(this, messageRecord);
+ SafetyNumberChangeDialog.show(requireContext(), getChildFragmentManager(), messageRecord);
}
}
diff --git a/app/src/main/res/layout/message_details_activity.xml b/app/src/main/res/layout/message_details_fragment.xml
similarity index 62%
rename from app/src/main/res/layout/message_details_activity.xml
rename to app/src/main/res/layout/message_details_fragment.xml
index 175e47c19b..39b62fe81c 100644
--- a/app/src/main/res/layout/message_details_activity.xml
+++ b/app/src/main/res/layout/message_details_fragment.xml
@@ -1,24 +1,10 @@
-
-
+ app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toTopOf="parent" />
\ No newline at end of file