add the ability to see who faved or boosted a toot (#962)

* move reblog/fav count up in detailed status view and make them clickable

* use status object returned by api when reblogging/faving

* Reblogs -> Boosts

* add support for viewing who faved/reblogged a status

* add onShowReblogs/onShowFavs to listener, fix display bug

* remove unneeded icon from previous revision

* small code improvements

* fix liking/boosting toot with card
This commit is contained in:
Konrad Pozniak 2018-12-27 09:48:24 +01:00 committed by GitHub
commit c869886c19
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 651 additions and 648 deletions

View file

@ -30,7 +30,6 @@ public abstract class AccountAdapter extends RecyclerView.Adapter {
static final int VIEW_TYPE_ACCOUNT = 0;
static final int VIEW_TYPE_FOOTER = 1;
List<Account> accountList;
AccountActionListener accountActionListener;
private boolean bottomLoading;
@ -60,7 +59,7 @@ public abstract class AccountAdapter extends RecyclerView.Adapter {
notifyDataSetChanged();
}
public void addItems(List<Account> newAccounts) {
public void addItems(@NonNull List<Account> newAccounts) {
int end = accountList.size();
Account last = accountList.get(end - 1);
if (last != null && !findAccount(newAccounts, last.getId())) {
@ -82,7 +81,7 @@ public abstract class AccountAdapter extends RecyclerView.Adapter {
}
}
private static boolean findAccount(List<Account> accounts, String id) {
private static boolean findAccount(@NonNull List<Account> accounts, String id) {
for (Account account : accounts) {
if (account.getId().equals(id)) {
return true;
@ -101,7 +100,7 @@ public abstract class AccountAdapter extends RecyclerView.Adapter {
return account;
}
public void addItem(Account account, int position) {
public void addItem(@NonNull Account account, int position) {
if (position < 0 || position > accountList.size()) {
return;
}

View file

@ -21,6 +21,7 @@ import com.keylesspalace.tusky.entity.Card;
import com.keylesspalace.tusky.entity.Status;
import com.keylesspalace.tusky.interfaces.StatusActionListener;
import com.keylesspalace.tusky.util.CustomURLSpan;
import com.keylesspalace.tusky.util.HtmlUtils;
import com.keylesspalace.tusky.util.LinkHelper;
import com.keylesspalace.tusky.viewdata.StatusViewData;
import com.squareup.picasso.Picasso;
@ -30,6 +31,7 @@ import java.text.NumberFormat;
import java.util.Date;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
class StatusDetailedViewHolder extends StatusBaseViewHolder {
private TextView reblogs;
@ -40,6 +42,10 @@ class StatusDetailedViewHolder extends StatusBaseViewHolder {
private TextView cardTitle;
private TextView cardDescription;
private TextView cardUrl;
private View infoDivider;
private View favReblogInfoContainer;
private NumberFormat numberFormat = NumberFormat.getNumberInstance();
StatusDetailedViewHolder(View view) {
super(view, false);
@ -51,6 +57,8 @@ class StatusDetailedViewHolder extends StatusBaseViewHolder {
cardTitle = view.findViewById(R.id.card_title);
cardDescription = view.findViewById(R.id.card_description);
cardUrl = view.findViewById(R.id.card_link);
infoDivider = view.findViewById(R.id.status_info_divider);
favReblogInfoContainer = view.findViewById(R.id.status_reblog_fav_info);
}
@Override
@ -68,6 +76,45 @@ class StatusDetailedViewHolder extends StatusBaseViewHolder {
}
}
private void setReblogAndFavCount(int reblogCount, int favCount, StatusActionListener listener) {
if(reblogCount > 0) {
String reblogCountString = numberFormat.format(reblogCount);
reblogs.setText(HtmlUtils.fromHtml(reblogs.getResources().getQuantityString(R.plurals.reblogs, reblogCount, reblogCountString)));
reblogs.setVisibility(View.VISIBLE);
} else {
reblogs.setVisibility(View.GONE);
}
if(favCount > 0) {
String favCountString = numberFormat.format(favCount);
favourites.setText(HtmlUtils.fromHtml(favourites.getResources().getQuantityString(R.plurals.favs, favCount, favCountString)));
favourites.setVisibility(View.VISIBLE);
} else {
favourites.setVisibility(View.GONE);
}
if(reblogs.getVisibility() == View.GONE && favourites.getVisibility() == View.GONE) {
infoDivider.setVisibility(View.GONE);
favReblogInfoContainer.setVisibility(View.GONE);
} else {
infoDivider.setVisibility(View.VISIBLE);
favReblogInfoContainer.setVisibility(View.VISIBLE);
}
reblogs.setOnClickListener( v -> {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
listener.onShowReblogs(position);
}
});
favourites.setOnClickListener( v -> {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
listener.onShowFavs(position);
}
});
}
private void setApplication(@Nullable Status.Application app) {
if (app != null) {
@ -91,12 +138,11 @@ class StatusDetailedViewHolder extends StatusBaseViewHolder {
boolean mediaPreviewEnabled) {
super.setupWithStatus(status, listener, mediaPreviewEnabled);
NumberFormat numberFormat = NumberFormat.getNumberInstance();
setReblogAndFavCount(status.getReblogsCount(), status.getFavouritesCount(), listener);
reblogs.setText(numberFormat.format(status.getReblogsCount()));
favourites.setText(numberFormat.format(status.getFavouritesCount()));
setApplication(status.getApplication());
View.OnLongClickListener longClickListener = view -> {
TextView textView = (TextView)view;
ClipboardManager clipboard = (ClipboardManager) view.getContext().getSystemService(Context.CLIPBOARD_SERVICE);