Search in sources :

Example 36 with Status

use of com.keylesspalace.tusky.entity.Status in project Tusky by tuskyapp.

the class ViewThreadFragment method onFavourite.

@Override
public void onFavourite(final boolean favourite, final int position) {
    final Status status = statuses.get(position);
    timelineCases.favouriteWithCallback(statuses.get(position), favourite, new Callback<Status>() {

        @Override
        public void onResponse(@NonNull Call<Status> call, @NonNull Response<Status> response) {
            if (response.isSuccessful()) {
                status.setFavourited(favourite);
                if (status.getReblog() != null) {
                    status.getReblog().setFavourited(favourite);
                }
                StatusViewData.Concrete viewdata = statuses.getPairedItem(position);
                StatusViewData.Builder viewDataBuilder = new StatusViewData.Builder((viewdata));
                viewDataBuilder.setFavourited(favourite);
                StatusViewData.Concrete newViewData = viewDataBuilder.createStatusViewData();
                statuses.setPairedItem(position, newViewData);
                adapter.setItem(position, newViewData, true);
            }
        }

        @Override
        public void onFailure(@NonNull Call<Status> call, @NonNull Throwable t) {
            Log.d(getClass().getSimpleName(), "Failed to favourite status: " + status.getId());
            t.printStackTrace();
        }
    });
}
Also used : Status(com.keylesspalace.tusky.entity.Status) StatusViewData(com.keylesspalace.tusky.viewdata.StatusViewData)

Example 37 with Status

use of com.keylesspalace.tusky.entity.Status in project Tusky by tuskyapp.

the class ViewThreadFragment method removeAllByAccountId.

@Override
public void removeAllByAccountId(String accountId) {
    Status status = null;
    if (!statuses.isEmpty()) {
        status = statuses.get(statusIndex);
    }
    // using iterator to safely remove items while iterating
    Iterator<Status> iterator = statuses.iterator();
    while (iterator.hasNext()) {
        Status s = iterator.next();
        if (s.getAccount().getId().equals(accountId)) {
            iterator.remove();
        }
    }
    statusIndex = statuses.indexOf(status);
    if (statusIndex == -1) {
        // the status got removed, close the activity
        getActivity().finish();
        return;
    }
    adapter.setDetailedStatusPosition(statusIndex);
    adapter.setStatuses(statuses.getPairedCopy());
}
Also used : Status(com.keylesspalace.tusky.entity.Status)

Example 38 with Status

use of com.keylesspalace.tusky.entity.Status in project Tusky by Vavassor.

the class StatusViewHolder method setupWithStatus.

@Override
public void setupWithStatus(StatusViewData.Concrete status, final StatusActionListener listener, StatusDisplayOptions statusDisplayOptions, @Nullable Object payloads) {
    if (payloads == null) {
        setupCollapsedState(status, listener);
        Status reblogging = status.getRebloggingStatus();
        if (reblogging == null) {
            hideStatusInfo();
        } else {
            String rebloggedByDisplayName = reblogging.getAccount().getDisplayName();
            setRebloggedByDisplayName(rebloggedByDisplayName, reblogging.getAccount().getEmojis(), statusDisplayOptions);
            statusInfo.setOnClickListener(v -> listener.onOpenReblog(getBindingAdapterPosition()));
        }
    }
    super.setupWithStatus(status, listener, statusDisplayOptions, payloads);
}
Also used : Status(com.keylesspalace.tusky.entity.Status)

Example 39 with Status

use of com.keylesspalace.tusky.entity.Status in project Tusky by Vavassor.

the class SFragment method more.

protected void more(@NonNull final Status status, View view, final int position) {
    final String id = status.getActionableId();
    final String accountId = status.getActionableStatus().getAccount().getId();
    final String accountUsername = status.getActionableStatus().getAccount().getUsername();
    final String statusUrl = status.getActionableStatus().getUrl();
    List<AccountEntity> accounts = accountManager.getAllAccountsOrderedByActive();
    String openAsTitle = null;
    String loggedInAccountId = null;
    AccountEntity activeAccount = accountManager.getActiveAccount();
    if (activeAccount != null) {
        loggedInAccountId = activeAccount.getAccountId();
    }
    PopupMenu popup = new PopupMenu(getContext(), view);
    // Give a different menu depending on whether this is the user's own toot or not.
    boolean statusIsByCurrentUser = loggedInAccountId != null && loggedInAccountId.equals(accountId);
    if (statusIsByCurrentUser) {
        popup.inflate(R.menu.status_more_for_user);
        Menu menu = popup.getMenu();
        switch(status.getVisibility()) {
            case PUBLIC:
            case UNLISTED:
                {
                    final String textId = getString(status.isPinned() ? R.string.unpin_action : R.string.pin_action);
                    menu.add(0, R.id.pin, 1, textId);
                    break;
                }
            case PRIVATE:
                {
                    boolean reblogged = status.getReblogged();
                    if (status.getReblog() != null)
                        reblogged = status.getReblog().getReblogged();
                    menu.findItem(R.id.status_reblog_private).setVisible(!reblogged);
                    menu.findItem(R.id.status_unreblog_private).setVisible(reblogged);
                    break;
                }
        }
    } else {
        popup.inflate(R.menu.status_more);
        Menu menu = popup.getMenu();
        menu.findItem(R.id.status_download_media).setVisible(!status.getAttachments().isEmpty());
    }
    Menu menu = popup.getMenu();
    MenuItem openAsItem = menu.findItem(R.id.status_open_as);
    switch(accounts.size()) {
        case 0:
        case 1:
            openAsItem.setVisible(false);
            break;
        case 2:
            for (AccountEntity account : accounts) {
                if (account != activeAccount) {
                    openAsTitle = String.format(getString(R.string.action_open_as), account.getFullName());
                    break;
                }
            }
            break;
        default:
            openAsTitle = String.format(getString(R.string.action_open_as), "…");
            break;
    }
    openAsItem.setTitle(openAsTitle);
    MenuItem muteConversationItem = menu.findItem(R.id.status_mute_conversation);
    boolean mutable = statusIsByCurrentUser || accountIsInMentions(activeAccount, status.getMentions());
    muteConversationItem.setVisible(mutable);
    if (mutable) {
        muteConversationItem.setTitle((status.getMuted() == null || !status.getMuted()) ? R.string.action_mute_conversation : R.string.action_unmute_conversation);
    }
    popup.setOnMenuItemClickListener(item -> {
        switch(item.getItemId()) {
            case R.id.status_share_content:
                {
                    Status statusToShare = status;
                    if (statusToShare.getReblog() != null)
                        statusToShare = statusToShare.getReblog();
                    Intent sendIntent = new Intent();
                    sendIntent.setAction(Intent.ACTION_SEND);
                    String stringToShare = statusToShare.getAccount().getUsername() + " - " + statusToShare.getContent().toString();
                    sendIntent.putExtra(Intent.EXTRA_TEXT, stringToShare);
                    sendIntent.putExtra(Intent.EXTRA_SUBJECT, statusUrl);
                    sendIntent.setType("text/plain");
                    startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_status_content_to)));
                    return true;
                }
            case R.id.status_share_link:
                {
                    Intent sendIntent = new Intent();
                    sendIntent.setAction(Intent.ACTION_SEND);
                    sendIntent.putExtra(Intent.EXTRA_TEXT, statusUrl);
                    sendIntent.setType("text/plain");
                    startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_status_link_to)));
                    return true;
                }
            case R.id.status_copy_link:
                {
                    ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
                    ClipData clip = ClipData.newPlainText(null, statusUrl);
                    clipboard.setPrimaryClip(clip);
                    return true;
                }
            case R.id.status_open_as:
                {
                    showOpenAsDialog(statusUrl, item.getTitle());
                    return true;
                }
            case R.id.status_download_media:
                {
                    requestDownloadAllMedia(status);
                    return true;
                }
            case R.id.status_mute:
                {
                    onMute(accountId, accountUsername);
                    return true;
                }
            case R.id.status_block:
                {
                    onBlock(accountId, accountUsername);
                    return true;
                }
            case R.id.status_report:
                {
                    openReportPage(accountId, accountUsername, id);
                    return true;
                }
            case R.id.status_unreblog_private:
                {
                    onReblog(false, position);
                    return true;
                }
            case R.id.status_reblog_private:
                {
                    onReblog(true, position);
                    return true;
                }
            case R.id.status_delete:
                {
                    showConfirmDeleteDialog(id, position);
                    return true;
                }
            case R.id.status_delete_and_redraft:
                {
                    showConfirmEditDialog(id, position, status);
                    return true;
                }
            case R.id.pin:
                {
                    timelineCases.pin(status.getId(), !status.isPinned()).to(autoDisposable(from(this, Lifecycle.Event.ON_DESTROY))).subscribe();
                    return true;
                }
            case R.id.status_mute_conversation:
                {
                    timelineCases.muteConversation(status.getId(), status.getMuted() == null || !status.getMuted()).onErrorReturnItem(status).observeOn(AndroidSchedulers.mainThread()).to(autoDisposable(from(this, Lifecycle.Event.ON_DESTROY))).subscribe();
                    return true;
                }
        }
        return false;
    });
    popup.show();
}
Also used : Status(com.keylesspalace.tusky.entity.Status) ClipboardManager(android.content.ClipboardManager) MenuItem(android.view.MenuItem) Intent(android.content.Intent) Menu(android.view.Menu) PopupMenu(androidx.appcompat.widget.PopupMenu) ClipData(android.content.ClipData) AccountEntity(com.keylesspalace.tusky.db.AccountEntity) PopupMenu(androidx.appcompat.widget.PopupMenu)

Example 40 with Status

use of com.keylesspalace.tusky.entity.Status in project Tusky by Vavassor.

the class SFragment method reply.

protected void reply(Status status) {
    String inReplyToId = status.getActionableId();
    Status actionableStatus = status.getActionableStatus();
    Status.Visibility replyVisibility = actionableStatus.getVisibility();
    String contentWarning = actionableStatus.getSpoilerText();
    List<Status.Mention> mentions = actionableStatus.getMentions();
    Set<String> mentionedUsernames = new LinkedHashSet<>();
    mentionedUsernames.add(actionableStatus.getAccount().getUsername());
    String loggedInUsername = null;
    AccountEntity activeAccount = accountManager.getActiveAccount();
    if (activeAccount != null) {
        loggedInUsername = activeAccount.getUsername();
    }
    for (Status.Mention mention : mentions) {
        mentionedUsernames.add(mention.getUsername());
    }
    mentionedUsernames.remove(loggedInUsername);
    ComposeOptions composeOptions = new ComposeOptions();
    composeOptions.setInReplyToId(inReplyToId);
    composeOptions.setReplyVisibility(replyVisibility);
    composeOptions.setContentWarning(contentWarning);
    composeOptions.setMentionedUsernames(mentionedUsernames);
    composeOptions.setReplyingStatusAuthor(actionableStatus.getAccount().getLocalUsername());
    composeOptions.setReplyingStatusContent(actionableStatus.getContent().toString());
    Intent intent = ComposeActivity.startIntent(getContext(), composeOptions);
    getActivity().startActivity(intent);
}
Also used : Status(com.keylesspalace.tusky.entity.Status) LinkedHashSet(java.util.LinkedHashSet) ComposeOptions(com.keylesspalace.tusky.components.compose.ComposeActivity.ComposeOptions) Intent(android.content.Intent) AccountEntity(com.keylesspalace.tusky.db.AccountEntity)

Aggregations

Status (com.keylesspalace.tusky.entity.Status)48 StatusViewData (com.keylesspalace.tusky.viewdata.StatusViewData)13 Notification (com.keylesspalace.tusky.entity.Notification)10 Intent (android.content.Intent)4 ArrayList (java.util.ArrayList)4 Either (com.keylesspalace.tusky.util.Either)3 NotificationViewData (com.keylesspalace.tusky.viewdata.NotificationViewData)3 List (java.util.List)3 Context (android.content.Context)2 Pair (android.support.v4.util.Pair)2 TextView (android.widget.TextView)2 AccountEntity (com.keylesspalace.tusky.db.AccountEntity)2 PendingIntent (android.app.PendingIntent)1 ClipData (android.content.ClipData)1 ClipboardManager (android.content.ClipboardManager)1 BitmapDrawable (android.graphics.drawable.BitmapDrawable)1 ColorDrawable (android.graphics.drawable.ColorDrawable)1 Drawable (android.graphics.drawable.Drawable)1 Spanned (android.text.Spanned)1 TextUtils (android.text.TextUtils)1