Search in sources :

Example 6 with Media

use of org.thoughtcrime.securesms.mediasend.Media in project Signal-Android by signalapp.

the class ConversationParentFragment method initializeDraft.

// /// Initializers
private ListenableFuture<Boolean> initializeDraft(@NonNull ConversationIntents.Args args) {
    final SettableFuture<Boolean> result = new SettableFuture<>();
    final CharSequence draftText = args.getDraftText();
    final Uri draftMedia = requireActivity().getIntent().getData();
    final String draftContentType = requireActivity().getIntent().getType();
    final MediaType draftMediaType = MediaType.from(draftContentType);
    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.");
        sendSticker(stickerLocator, Objects.requireNonNull(draftContentType), draftMedia, 0, true);
        return new SettableFuture<>(false);
    }
    if (draftMedia != null && draftContentType != null && borderless) {
        SimpleTask.run(getLifecycle(), () -> getKeyboardImageDetails(draftMedia), details -> sendKeyboardImage(draftMedia, draftContentType, details));
        return new SettableFuture<>(false);
    }
    if (!Util.isEmpty(mediaList)) {
        Log.d(TAG, "Handling shared Media.");
        Intent sendIntent = MediaSelectionActivity.editor(requireContext(), sendButton.getSelectedTransport(), mediaList, recipient.getId(), draftText);
        startActivityForResult(sendIntent, MEDIA_SENDER);
        return new SettableFuture<>(false);
    }
    if (draftText != null) {
        composeText.setText("");
        composeText.append(draftText);
        result.set(true);
    }
    if (draftMedia != null && draftMediaType != null) {
        Log.d(TAG, "Handling shared Data.");
        return setMedia(draftMedia, draftMediaType);
    }
    if (draftText == null && draftMedia == null && draftMediaType == null) {
        return initializeDraftFromDatabase();
    } else {
        updateToggleButtonState();
        result.set(false);
    }
    return result;
}
Also used : SettableFuture(org.thoughtcrime.securesms.util.concurrent.SettableFuture) Media(org.thoughtcrime.securesms.mediasend.Media) StickerLocator(org.thoughtcrime.securesms.stickers.StickerLocator) MediaType(org.thoughtcrime.securesms.mms.SlideFactory.MediaType) PendingIntent(android.app.PendingIntent) Intent(android.content.Intent) SpannableString(android.text.SpannableString) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Uri(android.net.Uri)

Example 7 with Media

use of org.thoughtcrime.securesms.mediasend.Media in project Signal-Android by signalapp.

the class AddGroupDetailsFragment method showAvatarPicker.

private void showAvatarPicker() {
    Media media = viewModel.getAvatarMedia();
    SafeNavigation.safeNavigate(Navigation.findNavController(requireView()), AddGroupDetailsFragmentDirections.actionAddGroupDetailsFragmentToAvatarPicker(null, media).setIsNewGroup(true));
}
Also used : Media(org.thoughtcrime.securesms.mediasend.Media)

Example 8 with Media

use of org.thoughtcrime.securesms.mediasend.Media in project Signal-Android by signalapp.

the class ManageProfileFragment method onViewCreated.

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    this.toolbar = view.findViewById(R.id.toolbar);
    this.avatarView = view.findViewById(R.id.manage_profile_avatar);
    this.avatarPlaceholderView = view.findViewById(R.id.manage_profile_avatar_placeholder);
    this.profileNameView = view.findViewById(R.id.manage_profile_name);
    this.profileNameContainer = view.findViewById(R.id.manage_profile_name_container);
    this.usernameView = view.findViewById(R.id.manage_profile_username);
    this.usernameContainer = view.findViewById(R.id.manage_profile_username_container);
    this.aboutView = view.findViewById(R.id.manage_profile_about);
    this.aboutContainer = view.findViewById(R.id.manage_profile_about_container);
    this.aboutEmojiView = view.findViewById(R.id.manage_profile_about_icon);
    this.avatarInitials = view.findViewById(R.id.manage_profile_avatar_initials);
    this.avatarBackground = view.findViewById(R.id.manage_profile_avatar_background);
    this.badgesContainer = view.findViewById(R.id.manage_profile_badges_container);
    this.badgeView = view.findViewById(R.id.manage_profile_badge);
    initializeViewModel();
    this.toolbar.setNavigationOnClickListener(v -> requireActivity().finish());
    View editAvatar = view.findViewById(R.id.manage_profile_edit_photo);
    editAvatar.setOnClickListener(v -> onEditAvatarClicked());
    this.profileNameContainer.setOnClickListener(v -> {
        SafeNavigation.safeNavigate(Navigation.findNavController(v), ManageProfileFragmentDirections.actionManageProfileName());
    });
    this.usernameContainer.setOnClickListener(v -> {
        SafeNavigation.safeNavigate(Navigation.findNavController(v), ManageProfileFragmentDirections.actionManageUsername());
    });
    this.aboutContainer.setOnClickListener(v -> {
        SafeNavigation.safeNavigate(Navigation.findNavController(v), ManageProfileFragmentDirections.actionManageAbout());
    });
    getParentFragmentManager().setFragmentResultListener(AvatarPickerFragment.REQUEST_KEY_SELECT_AVATAR, getViewLifecycleOwner(), (key, bundle) -> {
        if (bundle.getBoolean(AvatarPickerFragment.SELECT_AVATAR_CLEAR)) {
            viewModel.onAvatarSelected(requireContext(), null);
        } else {
            Media result = bundle.getParcelable(AvatarPickerFragment.SELECT_AVATAR_MEDIA);
            viewModel.onAvatarSelected(requireContext(), result);
        }
    });
    avatarInitials.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
        if (avatarInitials.length() > 0) {
            updateInitials(avatarInitials.getText().toString());
        }
    });
    if (FeatureFlags.donorBadges()) {
        badgesContainer.setOnClickListener(v -> {
            if (Recipient.self().getBadges().isEmpty()) {
                BecomeASustainerFragment.show(getParentFragmentManager());
            } else {
                SafeNavigation.safeNavigate(Navigation.findNavController(v), ManageProfileFragmentDirections.actionManageProfileFragmentToBadgeManageFragment());
            }
        });
    } else {
        badgesContainer.setVisibility(View.GONE);
    }
}
Also used : Media(org.thoughtcrime.securesms.mediasend.Media) ImageView(android.widget.ImageView) View(android.view.View) TextView(android.widget.TextView) BadgeImageView(org.thoughtcrime.securesms.badges.BadgeImageView)

Example 9 with Media

use of org.thoughtcrime.securesms.mediasend.Media in project Signal-Android by signalapp.

the class EditProfileFragment method onViewCreated.

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    GroupId groupId = GroupId.parseNullableOrThrow(requireArguments().getString(GROUP_ID, null));
    initializeViewModel(requireArguments().getBoolean(EXCLUDE_SYSTEM, false), groupId, savedInstanceState != null);
    initializeResources(view, groupId);
    initializeProfileAvatar();
    initializeProfileName();
    getParentFragmentManager().setFragmentResultListener(AvatarPickerFragment.REQUEST_KEY_SELECT_AVATAR, getViewLifecycleOwner(), (key, bundle) -> {
        if (bundle.getBoolean(AvatarPickerFragment.SELECT_AVATAR_CLEAR)) {
            viewModel.setAvatarMedia(null);
            viewModel.setAvatar(null);
            avatar.setImageDrawable(null);
        } else {
            Media media = bundle.getParcelable(AvatarPickerFragment.SELECT_AVATAR_MEDIA);
            handleMediaFromResult(media);
        }
    });
}
Also used : Media(org.thoughtcrime.securesms.mediasend.Media) ParcelableGroupId(org.thoughtcrime.securesms.groups.ParcelableGroupId) GroupId(org.thoughtcrime.securesms.groups.GroupId)

Example 10 with Media

use of org.thoughtcrime.securesms.mediasend.Media in project Signal-Android by signalapp.

the class ShareActivity method openInterstitial.

private void openInterstitial(@NonNull Set<ShareContactAndThread> shareContactAndThreads, @Nullable ShareData shareData) {
    MultiShareArgs.Builder builder = new MultiShareArgs.Builder(shareContactAndThreads).withMedia(args.getExtraMedia()).withDraftText(args.getExtraText() != null ? args.getExtraText().toString() : null).withStickerLocator(args.getExtraSticker()).asBorderless(args.isBorderless());
    if (shareData != null && shareData.isForIntent()) {
        Log.i(TAG, "Shared data is a single file.");
        builder.withDataUri(shareData.getUri()).withDataType(shareData.getMimeType());
    } else if (shareData != null && shareData.isForMedia()) {
        Log.i(TAG, "Shared data is set of media.");
        builder.withMedia(shareData.getMedia());
    } else if (shareData != null && shareData.isForPrimitive()) {
        Log.i(TAG, "Shared data is a primitive type.");
    } else if (shareData == null && args.getExtraSticker() != null) {
        builder.withDataType(getIntent().getType());
    } else {
        Log.i(TAG, "Shared data was not external.");
    }
    MultiShareArgs multiShareArgs = builder.build();
    InterstitialContentType interstitialContentType = multiShareArgs.getInterstitialContentType();
    switch(interstitialContentType) {
        case TEXT:
            startActivityForResult(ShareInterstitialActivity.createIntent(this, multiShareArgs), RESULT_TEXT_CONFIRMATION);
            break;
        case MEDIA:
            List<Media> media = new ArrayList<>(multiShareArgs.getMedia());
            if (media.isEmpty()) {
                media.add(new Media(multiShareArgs.getDataUri(), multiShareArgs.getDataType(), 0, 0, 0, 0, 0, false, false, Optional.absent(), Optional.absent(), Optional.absent()));
            }
            Intent intent = MediaSelectionActivity.share(this, MultiShareSender.getWorstTransportOption(this, multiShareArgs.getShareContactAndThreads()), media, Stream.of(multiShareArgs.getShareContactAndThreads()).map(ShareContactAndThread::getRecipientId).toList(), multiShareArgs.getDraftText());
            startActivityForResult(intent, RESULT_MEDIA_CONFIRMATION);
            break;
        default:
            // noinspection CodeBlock2Expr
            MultiShareSender.send(multiShareArgs, results -> {
                MultiShareDialogs.displayResultDialog(this, results, () -> {
                    viewModel.onSuccessfulShare();
                    finish();
                });
            });
            break;
    }
}
Also used : Media(org.thoughtcrime.securesms.mediasend.Media) ArrayList(java.util.ArrayList) Intent(android.content.Intent)

Aggregations

Media (org.thoughtcrime.securesms.mediasend.Media)22 Intent (android.content.Intent)8 PendingIntent (android.app.PendingIntent)6 Context (android.content.Context)6 Uri (android.net.Uri)6 View (android.view.View)6 NonNull (androidx.annotation.NonNull)6 Nullable (androidx.annotation.Nullable)6 Stream (com.annimon.stream.Stream)6 ArrayList (java.util.ArrayList)6 List (java.util.List)6 TransportOption (org.thoughtcrime.securesms.TransportOption)6 Manifest (android.Manifest)4 SuppressLint (android.annotation.SuppressLint)4 Bitmap (android.graphics.Bitmap)4 Drawable (android.graphics.drawable.Drawable)4 SpannableString (android.text.SpannableString)4 ImageView (android.widget.ImageView)4 TextView (android.widget.TextView)4 WorkerThread (androidx.annotation.WorkerThread)4