mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-25 11:20:47 +01:00
Localize Conversation Intent creation.
This commit is contained in:
@@ -320,15 +320,6 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||
|
||||
private static final String STATE_REACT_WITH_ANY_PAGE = "STATE_REACT_WITH_ANY_PAGE";
|
||||
|
||||
public static final String RECIPIENT_EXTRA = "recipient_id";
|
||||
public static final String THREAD_ID_EXTRA = "thread_id";
|
||||
public static final String TEXT_EXTRA = "draft_text";
|
||||
public static final String MEDIA_EXTRA = "media_list";
|
||||
public static final String STICKER_EXTRA = "sticker_extra";
|
||||
public static final String BORDERLESS_EXTRA = "borderless_extra";
|
||||
public static final String DISTRIBUTION_TYPE_EXTRA = "distribution_type";
|
||||
public static final String STARTING_POSITION_EXTRA = "starting_position";
|
||||
|
||||
private static final int PICK_GALLERY = 1;
|
||||
private static final int PICK_DOCUMENT = 2;
|
||||
private static final int PICK_AUDIO = 3;
|
||||
@@ -398,35 +389,6 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||
private final DynamicTheme dynamicTheme = new DynamicDarkToolbarTheme();
|
||||
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
|
||||
|
||||
public static @NonNull Intent buildIntent(@NonNull Context context,
|
||||
@NonNull RecipientId recipientId,
|
||||
long threadId,
|
||||
int distributionType,
|
||||
int startingPosition)
|
||||
{
|
||||
Intent intent = buildIntent(context, recipientId, threadId);
|
||||
intent.putExtra(ConversationActivity.DISTRIBUTION_TYPE_EXTRA, distributionType);
|
||||
intent.putExtra(ConversationActivity.STARTING_POSITION_EXTRA, startingPosition);
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
public static @NonNull Intent buildIntent(@NonNull Context context,
|
||||
@NonNull RecipientId recipientId,
|
||||
long threadId)
|
||||
{
|
||||
Intent intent = new Intent(context, ConversationActivity.class);
|
||||
intent.putExtra(ConversationActivity.RECIPIENT_EXTRA, recipientId.serialize());
|
||||
intent.putExtra(ConversationActivity.THREAD_ID_EXTRA, threadId);
|
||||
intent.setAction(Intent.ACTION_DEFAULT);
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
||||
public static @NonNull RecipientId getRecipientId(@NonNull Intent intent) {
|
||||
return RecipientId.from(Objects.requireNonNull(intent.getStringExtra(RECIPIENT_EXTRA)));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreCreate() {
|
||||
dynamicTheme.onCreate(this);
|
||||
@@ -435,7 +397,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle state, boolean ready) {
|
||||
if (getIntent().getStringExtra(RECIPIENT_EXTRA) == null) {
|
||||
if (ConversationIntents.isInvalid(getIntent())) {
|
||||
Log.w(TAG, "[onCreate] Missing recipientId!");
|
||||
// TODO [greyson] Navigation
|
||||
startActivity(new Intent(this, MainActivity.class));
|
||||
@@ -443,9 +405,9 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||
return;
|
||||
}
|
||||
|
||||
RecipientId recipientId = getRecipientId(getIntent());
|
||||
ConversationIntents.Args args = ConversationIntents.Args.from(getIntent());
|
||||
|
||||
reportShortcutLaunch(recipientId);
|
||||
reportShortcutLaunch(args.getRecipientId());
|
||||
setContentView(R.layout.conversation_activity);
|
||||
|
||||
getWindow().getDecorView().setBackgroundResource(R.color.signal_background_primary);
|
||||
@@ -455,11 +417,11 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||
initializeReceivers();
|
||||
initializeActionBar();
|
||||
initializeViews();
|
||||
initializeResources();
|
||||
initializeResources(args);
|
||||
initializeLinkPreviewObserver();
|
||||
initializeSearchObserver();
|
||||
initializeStickerObserver();
|
||||
initializeViewModel();
|
||||
initializeViewModel(args);
|
||||
initializeGroupViewModel();
|
||||
initializeMentionsViewModel();
|
||||
initializeEnabledCheck();
|
||||
@@ -470,7 +432,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||
public void onSuccess(Boolean result) {
|
||||
initializeProfiles();
|
||||
initializeGv1Migration();
|
||||
initializeDraft().addListener(new AssertedSuccessListener<Boolean>() {
|
||||
initializeDraft(args).addListener(new AssertedSuccessListener<Boolean>() {
|
||||
@Override
|
||||
public void onSuccess(Boolean loadedDraft) {
|
||||
if (loadedDraft != null && loadedDraft) {
|
||||
@@ -513,9 +475,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||
silentlySetComposeText("");
|
||||
}
|
||||
|
||||
RecipientId recipientId = getRecipientId(intent);
|
||||
|
||||
if (recipientId == null) {
|
||||
if (ConversationIntents.isInvalid(intent)) {
|
||||
Log.w(TAG, "[onNewIntent] Missing recipientId!");
|
||||
// TODO [greyson] Navigation
|
||||
startActivity(new Intent(this, MainActivity.class));
|
||||
@@ -523,13 +483,16 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||
return;
|
||||
}
|
||||
|
||||
reportShortcutLaunch(recipientId);
|
||||
setIntent(intent);
|
||||
initializeResources();
|
||||
|
||||
viewModel.setArgs(ConversationIntents.Args.from(intent));
|
||||
|
||||
reportShortcutLaunch(viewModel.getArgs().getRecipientId());
|
||||
initializeResources(viewModel.getArgs());
|
||||
initializeSecurity(recipient.get().isRegistered(), isDefaultSms).addListener(new AssertedSuccessListener<Boolean>() {
|
||||
@Override
|
||||
public void onSuccess(Boolean result) {
|
||||
initializeDraft();
|
||||
initializeDraft(viewModel.getArgs());
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1454,16 +1417,16 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||
|
||||
///// Initializers
|
||||
|
||||
private ListenableFuture<Boolean> initializeDraft() {
|
||||
private ListenableFuture<Boolean> initializeDraft(@NonNull ConversationIntents.Args args) {
|
||||
final SettableFuture<Boolean> result = new SettableFuture<>();
|
||||
|
||||
final CharSequence draftText = getIntent().getCharSequenceExtra(TEXT_EXTRA);
|
||||
final CharSequence draftText = args.getDraftText();
|
||||
final Uri draftMedia = getIntent().getData();
|
||||
final String draftContentType = getIntent().getType();
|
||||
final MediaType draftMediaType = MediaType.from(draftContentType);
|
||||
final List<Media> mediaList = getIntent().getParcelableArrayListExtra(MEDIA_EXTRA);
|
||||
final StickerLocator stickerLocator = getIntent().getParcelableExtra(STICKER_EXTRA);
|
||||
final boolean borderless = getIntent().getBooleanExtra(BORDERLESS_EXTRA, false);
|
||||
final List<Media> mediaList = args.getMedia();
|
||||
final StickerLocator stickerLocator = args.getStickerLocator();
|
||||
final boolean borderless = args.isBorderless();
|
||||
|
||||
if (stickerLocator != null && draftMedia != null) {
|
||||
Log.d(TAG, "Handling shared sticker.");
|
||||
@@ -1972,14 +1935,14 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||
supportActionBar.setDisplayShowTitleEnabled(false);
|
||||
}
|
||||
|
||||
private void initializeResources() {
|
||||
private void initializeResources(@NonNull ConversationIntents.Args args) {
|
||||
if (recipient != null) {
|
||||
recipient.removeObservers(this);
|
||||
}
|
||||
|
||||
recipient = Recipient.live(getRecipientId(getIntent()));
|
||||
threadId = getIntent().getLongExtra(THREAD_ID_EXTRA, -1);
|
||||
distributionType = getIntent().getIntExtra(DISTRIBUTION_TYPE_EXTRA, ThreadDatabase.DistributionTypes.DEFAULT);
|
||||
recipient = Recipient.live(args.getRecipientId());
|
||||
threadId = args.getThreadId();
|
||||
distributionType = args.getDistributionType();
|
||||
glideRequests = GlideApp.with(this);
|
||||
|
||||
recipient.observe(this, this::onRecipientChanged);
|
||||
@@ -2049,8 +2012,10 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||
});
|
||||
}
|
||||
|
||||
private void initializeViewModel() {
|
||||
private void initializeViewModel(@NonNull ConversationIntents.Args args) {
|
||||
this.viewModel = ViewModelProviders.of(this, new ConversationViewModel.Factory()).get(ConversationViewModel.class);
|
||||
|
||||
this.viewModel.setArgs(args);
|
||||
}
|
||||
|
||||
private void initializeGroupViewModel() {
|
||||
@@ -3572,9 +3537,9 @@ public class ConversationActivity extends PassphraseRequiredActivity
|
||||
}
|
||||
|
||||
private void presentMessageRequestState(@Nullable MessageRequestViewModel.MessageData messageData) {
|
||||
if ((getIntent().hasExtra(TEXT_EXTRA) && !Util.isEmpty(getIntent().getStringExtra(TEXT_EXTRA))) ||
|
||||
getIntent().hasExtra(MEDIA_EXTRA) ||
|
||||
getIntent().hasExtra(STICKER_EXTRA))
|
||||
if (!Util.isEmpty(viewModel.getArgs().getDraftText()) ||
|
||||
viewModel.getArgs().getMedia() != null ||
|
||||
viewModel.getArgs().getStickerLocator() != null)
|
||||
{
|
||||
Log.d(TAG, "[presentMessageRequestState] Have extra, so ignoring provided state.");
|
||||
messageRequestBottomView.setVisibility(View.GONE);
|
||||
|
||||
@@ -114,7 +114,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.recipients.ui.bottomsheet.RecipientBottomSheetDialogFragment;
|
||||
import org.thoughtcrime.securesms.revealable.ViewOnceMessageActivity;
|
||||
import org.thoughtcrime.securesms.revealable.ViewOnceUtil;
|
||||
import org.thoughtcrime.securesms.sharing.ShareActivity;
|
||||
import org.thoughtcrime.securesms.sharing.ShareIntents;
|
||||
import org.thoughtcrime.securesms.sms.MessageSender;
|
||||
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
|
||||
import org.thoughtcrime.securesms.stickers.StickerLocator;
|
||||
@@ -389,7 +389,7 @@ public class ConversationFragment extends LoggingFragment {
|
||||
}
|
||||
|
||||
private int getStartPosition() {
|
||||
return requireActivity().getIntent().getIntExtra(ConversationActivity.STARTING_POSITION_EXTRA, -1);
|
||||
return conversationViewModel.getArgs().getStartingPosition();
|
||||
}
|
||||
|
||||
private void initializeMessageRequestViewModel() {
|
||||
@@ -481,8 +481,8 @@ public class ConversationFragment extends LoggingFragment {
|
||||
|
||||
int startingPosition = getStartPosition();
|
||||
|
||||
this.recipient = Recipient.live(ConversationActivity.getRecipientId(requireActivity().getIntent()));
|
||||
this.threadId = this.getActivity().getIntent().getLongExtra(ConversationActivity.THREAD_ID_EXTRA, -1);
|
||||
this.recipient = Recipient.live(conversationViewModel.getArgs().getRecipientId());
|
||||
this.threadId = conversationViewModel.getArgs().getThreadId();
|
||||
this.markReadHelper = new MarkReadHelper(threadId, requireContext());
|
||||
|
||||
conversationViewModel.onConversationDataAvailable(threadId, startingPosition);
|
||||
@@ -773,8 +773,8 @@ public class ConversationFragment extends LoggingFragment {
|
||||
listener.onForwardClicked();
|
||||
|
||||
SimpleTask.run(getLifecycle(), () -> {
|
||||
Intent composeIntent = new Intent(getActivity(), ShareActivity.class);
|
||||
composeIntent.putExtra(Intent.EXTRA_TEXT, conversationMessage.getDisplayBody(requireContext()));
|
||||
ShareIntents.Builder shareIntentBuilder = new ShareIntents.Builder(requireActivity());
|
||||
shareIntentBuilder.setText(conversationMessage.getDisplayBody(requireContext()));
|
||||
|
||||
if (conversationMessage.getMessageRecord().isMms()) {
|
||||
MmsMessageRecord mediaMessage = (MmsMessageRecord) conversationMessage.getMessageRecord();
|
||||
@@ -810,31 +810,24 @@ public class ConversationFragment extends LoggingFragment {
|
||||
}
|
||||
|
||||
if (!mediaList.isEmpty()) {
|
||||
composeIntent.putExtra(ConversationActivity.MEDIA_EXTRA, mediaList);
|
||||
shareIntentBuilder.setMedia(mediaList);
|
||||
}
|
||||
} else if (mediaMessage.containsMediaSlide()) {
|
||||
Slide slide = mediaMessage.getSlideDeck().getSlides().get(0);
|
||||
composeIntent.putExtra(Intent.EXTRA_STREAM, slide.getUri());
|
||||
composeIntent.setType(slide.getContentType());
|
||||
composeIntent.putExtra(ConversationActivity.BORDERLESS_EXTRA, slide.isBorderless());
|
||||
|
||||
if (slide.hasSticker()) {
|
||||
composeIntent.putExtra(ConversationActivity.STICKER_EXTRA, slide.asAttachment().getSticker());
|
||||
composeIntent.setType(slide.asAttachment().getContentType());
|
||||
}
|
||||
shareIntentBuilder.setSlide(slide);
|
||||
}
|
||||
|
||||
if (mediaMessage.getSlideDeck().getTextSlide() != null && mediaMessage.getSlideDeck().getTextSlide().getUri() != null) {
|
||||
try (InputStream stream = PartAuthority.getAttachmentStream(requireContext(), mediaMessage.getSlideDeck().getTextSlide().getUri())) {
|
||||
String fullBody = Util.readFullyAsString(stream);
|
||||
composeIntent.putExtra(Intent.EXTRA_TEXT, fullBody);
|
||||
shareIntentBuilder.setText(fullBody);
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, "Failed to read long message text when forwarding.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return composeIntent;
|
||||
return shareIntentBuilder.build();
|
||||
}, this::startActivity);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,229 @@
|
||||
package org.thoughtcrime.securesms.conversation;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.thoughtcrime.securesms.database.ThreadDatabase;
|
||||
import org.thoughtcrime.securesms.mediasend.Media;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.sharing.ShareIntents;
|
||||
import org.thoughtcrime.securesms.stickers.StickerLocator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
|
||||
public class ConversationIntents {
|
||||
|
||||
private static final String EXTRA_RECIPIENT = "recipient_id";
|
||||
private static final String EXTRA_THREAD_ID = "thread_id";
|
||||
private static final String EXTRA_TEXT = "draft_text";
|
||||
private static final String EXTRA_MEDIA = "media_list";
|
||||
private static final String EXTRA_STICKER = "sticker_extra";
|
||||
private static final String EXTRA_BORDERLESS = "borderless_extra";
|
||||
private static final String EXTRA_DISTRIBUTION_TYPE = "distribution_type";
|
||||
private static final String EXTRA_STARTING_POSITION = "starting_position";
|
||||
|
||||
private ConversationIntents() {
|
||||
}
|
||||
|
||||
public static @NonNull Builder createBuilder(@NonNull Context context, @NonNull RecipientId recipientId, long threadId) {
|
||||
return new Builder(context, recipientId, threadId);
|
||||
}
|
||||
|
||||
public static @NonNull Builder createPopUpBuilder(@NonNull Context context, @NonNull RecipientId recipientId, long threadId) {
|
||||
return new Builder(context, ConversationPopupActivity.class, recipientId, threadId);
|
||||
}
|
||||
|
||||
static boolean isInvalid(@NonNull Intent intent) {
|
||||
return !intent.hasExtra(EXTRA_RECIPIENT);
|
||||
}
|
||||
|
||||
final static class Args {
|
||||
private final RecipientId recipientId;
|
||||
private final long threadId;
|
||||
private final String draftText;
|
||||
private final ArrayList<Media> media;
|
||||
private final StickerLocator stickerLocator;
|
||||
private final boolean isBorderless;
|
||||
private final int distributionType;
|
||||
private final int startingPosition;
|
||||
|
||||
static Args from(@NonNull Intent intent) {
|
||||
return new Args(RecipientId.from(Objects.requireNonNull(intent.getStringExtra(EXTRA_RECIPIENT))),
|
||||
intent.getLongExtra(EXTRA_THREAD_ID, -1),
|
||||
intent.getStringExtra(EXTRA_TEXT),
|
||||
intent.getParcelableArrayListExtra(EXTRA_MEDIA),
|
||||
intent.getParcelableExtra(EXTRA_STICKER),
|
||||
intent.getBooleanExtra(EXTRA_BORDERLESS, false),
|
||||
intent.getIntExtra(EXTRA_DISTRIBUTION_TYPE, ThreadDatabase.DistributionTypes.DEFAULT),
|
||||
intent.getIntExtra(EXTRA_STARTING_POSITION, -1));
|
||||
}
|
||||
|
||||
private Args(@NonNull RecipientId recipientId,
|
||||
long threadId,
|
||||
@Nullable String draftText,
|
||||
@Nullable ArrayList<Media> media,
|
||||
@Nullable StickerLocator stickerLocator,
|
||||
boolean isBorderless,
|
||||
int distributionType,
|
||||
int startingPosition)
|
||||
{
|
||||
this.recipientId = recipientId;
|
||||
this.threadId = threadId;
|
||||
this.draftText = draftText;
|
||||
this.media = media;
|
||||
this.stickerLocator = stickerLocator;
|
||||
this.isBorderless = isBorderless;
|
||||
this.distributionType = distributionType;
|
||||
this.startingPosition = startingPosition;
|
||||
}
|
||||
|
||||
public @NonNull RecipientId getRecipientId() {
|
||||
return recipientId;
|
||||
}
|
||||
|
||||
public long getThreadId() {
|
||||
return threadId;
|
||||
}
|
||||
|
||||
public @Nullable String getDraftText() {
|
||||
return draftText;
|
||||
}
|
||||
|
||||
public @Nullable ArrayList<Media> getMedia() {
|
||||
return media;
|
||||
}
|
||||
|
||||
public @Nullable StickerLocator getStickerLocator() {
|
||||
return stickerLocator;
|
||||
}
|
||||
|
||||
public int getDistributionType() {
|
||||
return distributionType;
|
||||
}
|
||||
|
||||
public int getStartingPosition() {
|
||||
return startingPosition;
|
||||
}
|
||||
|
||||
public boolean isBorderless() {
|
||||
return isBorderless;
|
||||
}
|
||||
}
|
||||
|
||||
public final static class Builder {
|
||||
private final Context context;
|
||||
private final Class<? extends ConversationActivity> conversationActivityClass;
|
||||
private final RecipientId recipientId;
|
||||
private final long threadId;
|
||||
|
||||
private String draftText;
|
||||
private ArrayList<Media> media;
|
||||
private StickerLocator stickerLocator;
|
||||
private boolean isBorderless;
|
||||
private int distributionType = ThreadDatabase.DistributionTypes.DEFAULT;
|
||||
private int startingPosition = -1;
|
||||
private Uri dataUri;
|
||||
private String dataType;
|
||||
|
||||
private Builder(@NonNull Context context,
|
||||
@NonNull RecipientId recipientId,
|
||||
long threadId)
|
||||
{
|
||||
this(context, ConversationActivity.class, recipientId, threadId);
|
||||
}
|
||||
|
||||
private Builder(@NonNull Context context,
|
||||
@NonNull Class<? extends ConversationActivity> conversationActivityClass,
|
||||
@NonNull RecipientId recipientId,
|
||||
long threadId)
|
||||
{
|
||||
this.context = context;
|
||||
this.conversationActivityClass = conversationActivityClass;
|
||||
this.recipientId = recipientId;
|
||||
this.threadId = threadId;
|
||||
}
|
||||
|
||||
public @NonNull Builder withDraftText(@Nullable String draftText) {
|
||||
this.draftText = draftText;
|
||||
return this;
|
||||
}
|
||||
|
||||
public @NonNull Builder withMedia(@Nullable Collection<Media> media) {
|
||||
this.media = media != null ? new ArrayList<>(media) : null;
|
||||
return this;
|
||||
}
|
||||
|
||||
public @NonNull Builder withStickerLocator(@Nullable StickerLocator stickerLocator) {
|
||||
this.stickerLocator = stickerLocator;
|
||||
return this;
|
||||
}
|
||||
|
||||
public @NonNull Builder asBorderless(boolean isBorderless) {
|
||||
this.isBorderless = isBorderless;
|
||||
return this;
|
||||
}
|
||||
|
||||
public @NonNull Builder withDistributionType(int distributionType) {
|
||||
this.distributionType = distributionType;
|
||||
return this;
|
||||
}
|
||||
|
||||
public @NonNull Builder withStartingPosition(int startingPosition) {
|
||||
this.startingPosition = startingPosition;
|
||||
return this;
|
||||
}
|
||||
|
||||
public @NonNull Builder withDataUri(@Nullable Uri dataUri) {
|
||||
this.dataUri = dataUri;
|
||||
return this;
|
||||
}
|
||||
|
||||
public @NonNull Builder withDataType(@Nullable String dataType) {
|
||||
this.dataType = dataType;
|
||||
return this;
|
||||
}
|
||||
|
||||
public @NonNull Intent build() {
|
||||
if (stickerLocator != null && media != null) {
|
||||
throw new IllegalStateException("Cannot have both sticker and media array");
|
||||
}
|
||||
|
||||
Intent intent = new Intent(context, conversationActivityClass);
|
||||
|
||||
intent.setAction(Intent.ACTION_DEFAULT);
|
||||
intent.putExtra(EXTRA_RECIPIENT, recipientId.serialize());
|
||||
intent.putExtra(EXTRA_THREAD_ID, threadId);
|
||||
intent.putExtra(EXTRA_DISTRIBUTION_TYPE, distributionType);
|
||||
intent.putExtra(EXTRA_STARTING_POSITION, startingPosition);
|
||||
intent.putExtra(EXTRA_BORDERLESS, isBorderless);
|
||||
|
||||
if (draftText != null) {
|
||||
intent.putExtra(EXTRA_TEXT, draftText);
|
||||
}
|
||||
|
||||
if (media != null) {
|
||||
intent.putParcelableArrayListExtra(EXTRA_MEDIA, media);
|
||||
}
|
||||
|
||||
if (stickerLocator != null) {
|
||||
intent.putExtra(EXTRA_STICKER, stickerLocator);
|
||||
}
|
||||
|
||||
if (dataUri != null && dataType != null) {
|
||||
intent.setDataAndType(dataUri, dataType);
|
||||
} else if (dataUri != null) {
|
||||
intent.setData(dataUri);
|
||||
} else if (dataType != null) {
|
||||
intent.setType(dataType);
|
||||
}
|
||||
|
||||
return intent;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,7 @@
|
||||
package org.thoughtcrime.securesms.conversation;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Build.VERSION;
|
||||
import android.os.Build.VERSION_CODES;
|
||||
import android.os.Bundle;
|
||||
import androidx.core.app.ActivityOptionsCompat;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.logging.Log;
|
||||
import android.view.Display;
|
||||
import android.view.Gravity;
|
||||
import android.view.Menu;
|
||||
@@ -16,6 +10,10 @@ import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import androidx.core.app.ActivityOptionsCompat;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.logging.Log;
|
||||
import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
|
||||
|
||||
import java.util.concurrent.ExecutionException;
|
||||
@@ -83,9 +81,8 @@ public class ConversationPopupActivity extends ConversationActivity {
|
||||
@Override
|
||||
public void onSuccess(Long result) {
|
||||
ActivityOptionsCompat transition = ActivityOptionsCompat.makeScaleUpAnimation(getWindow().getDecorView(), 0, 0, getWindow().getAttributes().width, getWindow().getAttributes().height);
|
||||
Intent intent = new Intent(ConversationPopupActivity.this, ConversationActivity.class);
|
||||
intent.putExtra(ConversationActivity.RECIPIENT_EXTRA, getRecipient().getId().serialize());
|
||||
intent.putExtra(ConversationActivity.THREAD_ID_EXTRA, result);
|
||||
Intent intent = ConversationIntents.createBuilder(ConversationPopupActivity.this, getRecipient().getId(), result)
|
||||
.build();
|
||||
|
||||
startActivity(intent, transition.toBundle());
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.app.Application;
|
||||
|
||||
import androidx.annotation.MainThread;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
import androidx.lifecycle.Transformations;
|
||||
@@ -39,6 +40,7 @@ class ConversationViewModel extends ViewModel {
|
||||
private final MutableLiveData<Boolean> showScrollButtons;
|
||||
private final MutableLiveData<Boolean> hasUnreadMentions;
|
||||
|
||||
private ConversationIntents.Args args;
|
||||
private int jumpToPosition;
|
||||
|
||||
private ConversationViewModel() {
|
||||
@@ -147,6 +149,14 @@ class ConversationViewModel extends ViewModel {
|
||||
return conversationMetadata.getValue() != null ? conversationMetadata.getValue().getLastSeenPosition() : 0;
|
||||
}
|
||||
|
||||
void setArgs(@NonNull ConversationIntents.Args args) {
|
||||
this.args = args;
|
||||
}
|
||||
|
||||
@NonNull ConversationIntents.Args getArgs() {
|
||||
return Objects.requireNonNull(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCleared() {
|
||||
super.onCleared();
|
||||
|
||||
Reference in New Issue
Block a user