Search in sources :

Example 11 with Status

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

the class ReportActivity method fetchRecentStatuses.

private void fetchRecentStatuses(String accountId) {
    Callback<List<Status>> callback = new Callback<List<Status>>() {

        @Override
        public void onResponse(Call<List<Status>> call, Response<List<Status>> response) {
            if (!response.isSuccessful()) {
                onFetchStatusesFailure(new Exception(response.message()));
                return;
            }
            List<Status> statusList = response.body();
            List<ReportAdapter.ReportStatus> itemList = new ArrayList<>();
            for (Status status : statusList) {
                if (status.getReblog() == null) {
                    ReportAdapter.ReportStatus item = new ReportAdapter.ReportStatus(status.getId(), status.getContent(), false);
                    itemList.add(item);
                }
            }
            adapter.addItems(itemList);
        }

        @Override
        public void onFailure(Call<List<Status>> call, Throwable t) {
            onFetchStatusesFailure((Exception) t);
        }
    };
    mastodonApi.accountStatuses(accountId, null, null, null, null).enqueue(callback);
}
Also used : Status(com.keylesspalace.tusky.entity.Status) ReportAdapter(com.keylesspalace.tusky.adapter.ReportAdapter) Call(retrofit2.Call) ArrayList(java.util.ArrayList) Response(retrofit2.Response) Callback(retrofit2.Callback) ArrayList(java.util.ArrayList) List(java.util.List)

Example 12 with Status

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

the class NotificationHelper method getStatusReplyIntent.

private static PendingIntent getStatusReplyIntent(String action, Context context, Notification body, AccountEntity account) {
    Status status = body.getStatus();
    String citedLocalAuthor = status.getAccount().getLocalUsername();
    String citedText = status.getContent().toString();
    String inReplyToId = status.getId();
    Status actionableStatus = status.getActionableStatus();
    Status.Visibility replyVisibility = actionableStatus.getVisibility();
    String contentWarning = actionableStatus.getSpoilerText();
    List<Status.Mention> mentions = actionableStatus.getMentions();
    List<String> mentionedUsernames = new ArrayList<>();
    mentionedUsernames.add(actionableStatus.getAccount().getUsername());
    for (Status.Mention mention : mentions) {
        mentionedUsernames.add(mention.getUsername());
    }
    mentionedUsernames.removeAll(Collections.singleton(account.getUsername()));
    mentionedUsernames = new ArrayList<>(new LinkedHashSet<>(mentionedUsernames));
    Intent replyIntent = new Intent(context, SendStatusBroadcastReceiver.class).setAction(action).putExtra(KEY_CITED_AUTHOR_LOCAL, citedLocalAuthor).putExtra(KEY_CITED_TEXT, citedText).putExtra(KEY_SENDER_ACCOUNT_ID, account.getId()).putExtra(KEY_SENDER_ACCOUNT_IDENTIFIER, account.getIdentifier()).putExtra(KEY_SENDER_ACCOUNT_FULL_NAME, account.getFullName()).putExtra(KEY_NOTIFICATION_ID, notificationId).putExtra(KEY_CITED_STATUS_ID, inReplyToId).putExtra(KEY_VISIBILITY, replyVisibility).putExtra(KEY_SPOILER, contentWarning).putExtra(KEY_MENTIONS, mentionedUsernames.toArray(new String[0]));
    return PendingIntent.getBroadcast(context.getApplicationContext(), notificationId, replyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
}
Also used : Status(com.keylesspalace.tusky.entity.Status) LinkedHashSet(java.util.LinkedHashSet) ArrayList(java.util.ArrayList) PendingIntent(android.app.PendingIntent) Intent(android.content.Intent) SendStatusBroadcastReceiver(com.keylesspalace.tusky.receiver.SendStatusBroadcastReceiver)

Example 13 with Status

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

the class NotificationsFragment method onFavourite.

@Override
public void onFavourite(final boolean favourite, final int position) {
    final Notification notification = notifications.get(position).asRight();
    final Status status = notification.getStatus();
    timelineCases.favourite(status.getId(), favourite).observeOn(AndroidSchedulers.mainThread()).to(autoDisposable(from(this))).subscribe((newStatus) -> setFavouriteForStatus(status.getId(), favourite), (t) -> Log.d(getClass().getSimpleName(), "Failed to favourite status: " + status.getId(), t));
}
Also used : Status(com.keylesspalace.tusky.entity.Status) Notification(com.keylesspalace.tusky.entity.Notification)

Example 14 with Status

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

the class NotificationsFragment method updateStatus.

private void updateStatus(String statusId, Function<Status, Status> mapper) {
    int index = CollectionsKt.indexOfFirst(this.notifications, (s) -> s.isRight() && s.asRight().getStatus() != null && s.asRight().getStatus().getId().equals(statusId));
    if (index == -1)
        return;
    // We have quite some graph here:
    // 
    // Notification --------> Status
    // ^
    // |
    // StatusViewData
    // ^
    // |
    // NotificationViewData -----+
    // 
    // So if we have "new" status we need to update all references to be sure that data is
    // up-to-date:
    // 1. update status
    // 2. update notification
    // 3. update statusViewData
    // 4. update notificationViewData
    Status oldStatus = notifications.get(index).asRight().getStatus();
    NotificationViewData.Concrete oldViewData = (NotificationViewData.Concrete) this.notifications.getPairedItem(index);
    Status newStatus = mapper.apply(oldStatus);
    Notification newNotification = this.notifications.get(index).asRight().copyWithStatus(newStatus);
    StatusViewData.Concrete newStatusViewData = Objects.requireNonNull(oldViewData.getStatusViewData()).copyWithStatus(newStatus);
    NotificationViewData.Concrete newViewData = oldViewData.copyWithStatus(newStatusViewData);
    notifications.set(index, new Either.Right<>(newNotification));
    notifications.setPairedItem(index, newViewData);
    updateAdapter();
}
Also used : Status(com.keylesspalace.tusky.entity.Status) StatusViewData(com.keylesspalace.tusky.viewdata.StatusViewData) NotificationViewData(com.keylesspalace.tusky.viewdata.NotificationViewData) Either(com.keylesspalace.tusky.util.Either) Notification(com.keylesspalace.tusky.entity.Notification)

Example 15 with Status

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

the class NotificationsFragment method onViewThread.

@Override
public void onViewThread(int position) {
    Notification notification = notifications.get(position).asRight();
    Status status = notification.getStatus();
    if (status == null)
        return;
    ;
    super.viewThread(status.getActionableId(), status.getActionableStatus().getUrl());
}
Also used : Status(com.keylesspalace.tusky.entity.Status) Notification(com.keylesspalace.tusky.entity.Notification)

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