fix deleting boosted posts in profile
This commit is contained in:
parent
42fac30e63
commit
9a985aad29
|
@ -15,8 +15,8 @@ android {
|
||||||
applicationId "org.joinmastodon.android.sk"
|
applicationId "org.joinmastodon.android.sk"
|
||||||
minSdk 23
|
minSdk 23
|
||||||
targetSdk 33
|
targetSdk 33
|
||||||
versionCode 103
|
versionCode 104
|
||||||
versionName "2.1.6+fork.103"
|
versionName "2.1.6+fork.104"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
resourceConfigurations += ['ar-rSA', 'ar-rDZ', 'be-rBY', 'bn-rBD', 'bs-rBA', 'ca-rES', 'cs-rCZ', 'da-rDK', 'de-rDE', 'el-rGR', 'es-rES', 'eu-rES', 'fa-rIR', 'fi-rFI', 'fil-rPH', 'fr-rFR', 'ga-rIE', 'gd-rGB', 'gl-rES', 'hi-rIN', 'hr-rHR', 'hu-rHU', 'hy-rAM', 'ig-rNG', 'in-rID', 'is-rIS', 'it-rIT', 'iw-rIL', 'ja-rJP', 'kab', 'ko-rKR', 'my-rMM', 'nl-rNL', 'no-rNO', 'oc-rFR', 'pl-rPL', 'pt-rBR', 'pt-rPT', 'ro-rRO', 'ru-rRU', 'si-rLK', 'sl-rSI', 'sv-rSE', 'th-rTH', 'tr-rTR', 'uk-rUA', 'ur-rIN', 'vi-rVN', 'zh-rCN', 'zh-rTW']
|
resourceConfigurations += ['ar-rSA', 'ar-rDZ', 'be-rBY', 'bn-rBD', 'bs-rBA', 'ca-rES', 'cs-rCZ', 'da-rDK', 'de-rDE', 'el-rGR', 'es-rES', 'eu-rES', 'fa-rIR', 'fi-rFI', 'fil-rPH', 'fr-rFR', 'ga-rIE', 'gd-rGB', 'gl-rES', 'hi-rIN', 'hr-rHR', 'hu-rHU', 'hy-rAM', 'ig-rNG', 'in-rID', 'is-rIS', 'it-rIT', 'iw-rIL', 'ja-rJP', 'kab', 'ko-rKR', 'my-rMM', 'nl-rNL', 'no-rNO', 'oc-rFR', 'pl-rPL', 'pt-rBR', 'pt-rPT', 'ro-rRO', 'ru-rRU', 'si-rLK', 'sl-rSI', 'sv-rSE', 'th-rTH', 'tr-rTR', 'uk-rUA', 'ur-rIN', 'vi-rVN', 'zh-rCN', 'zh-rTW']
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package org.joinmastodon.android.events;
|
package org.joinmastodon.android.events;
|
||||||
|
|
||||||
import org.joinmastodon.android.model.ScheduledStatus;
|
|
||||||
|
|
||||||
public class ScheduledStatusDeletedEvent{
|
public class ScheduledStatusDeletedEvent{
|
||||||
public final String id;
|
public final String id;
|
||||||
public final String accountID;
|
public final String accountID;
|
||||||
|
|
|
@ -465,12 +465,12 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||||
|
|
||||||
public abstract void onItemClick(String id);
|
public abstract void onItemClick(String id);
|
||||||
|
|
||||||
protected void updatePoll(String itemID, Status status, Poll poll){
|
protected void updatePoll(String parentID, Status statusForContent, Poll poll){
|
||||||
status.poll=poll;
|
statusForContent.poll=poll;
|
||||||
int firstOptionIndex=-1, footerIndex=-1;
|
int firstOptionIndex=-1, footerIndex=-1;
|
||||||
int i=0;
|
int i=0;
|
||||||
for(StatusDisplayItem item:displayItems){
|
for(StatusDisplayItem item:displayItems){
|
||||||
if(item.parentID.equals(itemID)){
|
if(item.contentStatusID.equals(statusForContent.id)){
|
||||||
if(item instanceof PollOptionStatusDisplayItem && firstOptionIndex==-1){
|
if(item instanceof PollOptionStatusDisplayItem && firstOptionIndex==-1){
|
||||||
firstOptionIndex=i;
|
firstOptionIndex=i;
|
||||||
}else if(item instanceof PollFooterStatusDisplayItem){
|
}else if(item instanceof PollFooterStatusDisplayItem){
|
||||||
|
@ -485,7 +485,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||||
List<StatusDisplayItem> pollItems=displayItems.subList(firstOptionIndex, footerIndex+1);
|
List<StatusDisplayItem> pollItems=displayItems.subList(firstOptionIndex, footerIndex+1);
|
||||||
int prevSize=pollItems.size();
|
int prevSize=pollItems.size();
|
||||||
pollItems.clear();
|
pollItems.clear();
|
||||||
StatusDisplayItem.buildPollItems(itemID, this, poll, pollItems);
|
StatusDisplayItem.buildPollItems(parentID, statusForContent.id, this, poll, pollItems);
|
||||||
if(prevSize!=pollItems.size()){
|
if(prevSize!=pollItems.size()){
|
||||||
adapter.notifyItemRangeRemoved(firstOptionIndex, prevSize);
|
adapter.notifyItemRangeRemoved(firstOptionIndex, prevSize);
|
||||||
adapter.notifyItemRangeInserted(firstOptionIndex, pollItems.size());
|
adapter.notifyItemRangeInserted(firstOptionIndex, pollItems.size());
|
||||||
|
|
|
@ -238,7 +238,7 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
|
||||||
continue;
|
continue;
|
||||||
Status contentStatus=ntf.status.getContentStatus();
|
Status contentStatus=ntf.status.getContentStatus();
|
||||||
if(contentStatus.poll!=null && contentStatus.poll.id.equals(ev.poll.id)){
|
if(contentStatus.poll!=null && contentStatus.poll.id.equals(ev.poll.id)){
|
||||||
updatePoll(ntf.id, ntf.status, ev.poll);
|
updatePoll(ntf.id, contentStatus, ev.poll);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,7 +145,7 @@ public class StatusEditHistoryFragment extends StatusListFragment{
|
||||||
}
|
}
|
||||||
String sep = getString(R.string.sk_separator);
|
String sep = getString(R.string.sk_separator);
|
||||||
items.add(0, new ReblogOrReplyLineStatusDisplayItem(s.id, this, action+" "+sep+" "+date, Collections.emptyList(), 0, null, null, s));
|
items.add(0, new ReblogOrReplyLineStatusDisplayItem(s.id, this, action+" "+sep+" "+date, Collections.emptyList(), 0, null, null, s));
|
||||||
items.add(1, new DummyStatusDisplayItem(s.id, this));
|
items.add(1, new DummyStatusDisplayItem(s.id, s.getContentStatus().id, this));
|
||||||
}
|
}
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,9 @@ import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem;
|
||||||
import org.parceler.Parcels;
|
import org.parceler.Parcels;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
@ -174,41 +176,57 @@ public abstract class StatusListFragment extends BaseStatusListFragment<Status>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void removeStatus(Status status){
|
private void iterateRemoveStatus(List<Status> l, String id){
|
||||||
data.remove(status);
|
Iterator<Status> it=l.iterator();
|
||||||
preloadedData.remove(status);
|
while(it.hasNext()){
|
||||||
int index=-1, ancestorFirstIndex = -1, ancestorLastIndex = -1;
|
if(Objects.equals(it.next().getContentStatus().id, id)){
|
||||||
for(int i=0;i<displayItems.size();i++){
|
it.remove();
|
||||||
StatusDisplayItem item = displayItems.get(i);
|
|
||||||
if(status.id.equals(item.parentID)){
|
|
||||||
index=i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (item.parentID.equals(status.inReplyToId)) {
|
|
||||||
if (ancestorFirstIndex == -1) ancestorFirstIndex = i;
|
|
||||||
ancestorLastIndex = i;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int removeStatusDisplayItems(Status status, int index, int ancestorFirstIndex, int ancestorLastIndex, int indexOffset){
|
||||||
// did we find an ancestor that is also the status' neighbor?
|
// did we find an ancestor that is also the status' neighbor?
|
||||||
if (ancestorFirstIndex >= 0 && ancestorLastIndex == index - 1) {
|
if(ancestorFirstIndex>=0 && ancestorLastIndex==index-1){
|
||||||
for (int i = ancestorFirstIndex; i <= ancestorLastIndex; i++) {
|
for(int i=ancestorFirstIndex; i<=ancestorLastIndex; i++){
|
||||||
StatusDisplayItem item = displayItems.get(i);
|
StatusDisplayItem item=displayItems.get(i);
|
||||||
// update ancestor to have no descendant anymore
|
// update ancestor to have no descendant anymore
|
||||||
if (item.parentID.equals(status.inReplyToId)) item.hasDescendantNeighbor = false;
|
if(item.contentStatusID.equals(status.inReplyToId)) item.hasDescendantNeighbor=false;
|
||||||
}
|
}
|
||||||
adapter.notifyItemRangeChanged(ancestorFirstIndex, ancestorLastIndex - ancestorFirstIndex + 1);
|
adapter.notifyItemRangeChanged(ancestorFirstIndex-indexOffset, ancestorLastIndex-ancestorFirstIndex+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(index==-1)
|
if(index==-1) return 0;
|
||||||
return;
|
|
||||||
int lastIndex;
|
int lastIndex;
|
||||||
for(lastIndex=index;lastIndex<displayItems.size();lastIndex++){
|
for(lastIndex=index;lastIndex<displayItems.size();lastIndex++){
|
||||||
if(!displayItems.get(lastIndex).parentID.equals(status.id))
|
if(!displayItems.get(lastIndex).contentStatusID.equals(status.id))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
displayItems.subList(index, lastIndex).clear();
|
int count=lastIndex-index;
|
||||||
adapter.notifyItemRangeRemoved(index, lastIndex-index);
|
displayItems.subList(index-indexOffset, lastIndex-indexOffset).clear();
|
||||||
|
adapter.notifyItemRangeRemoved(index-indexOffset, lastIndex-index);
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void removeStatus(Status status){
|
||||||
|
Status contentStatus=status.getContentStatus();
|
||||||
|
String id=contentStatus.id;
|
||||||
|
iterateRemoveStatus(data, id);
|
||||||
|
iterateRemoveStatus(preloadedData, id);
|
||||||
|
int ancestorFirstIndex=-1, ancestorLastIndex=-1;
|
||||||
|
int offset=0;
|
||||||
|
for(int i=0;i<displayItems.size();i++){
|
||||||
|
StatusDisplayItem item = displayItems.get(i);
|
||||||
|
if(id.equals(item.contentStatusID)){
|
||||||
|
offset+=removeStatusDisplayItems(contentStatus, i, ancestorFirstIndex, ancestorLastIndex, offset);
|
||||||
|
ancestorFirstIndex=ancestorLastIndex=-1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(item.parentID.equals(status.inReplyToId)){
|
||||||
|
if(ancestorFirstIndex==-1) ancestorFirstIndex=i;
|
||||||
|
ancestorLastIndex=i;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class Announcement extends BaseModel implements DisplayItemsParent {
|
||||||
|
|
||||||
public Status toStatus() {
|
public Status toStatus() {
|
||||||
Status s=Status.ofFake(id, content, publishedAt);
|
Status s=Status.ofFake(id, content, publishedAt);
|
||||||
s.createdAt=startsAt != null ? startsAt : publishedAt;
|
s.createdAt=startsAt != null ? startsAt : publishedAt;
|
||||||
s.reactions=reactions;
|
s.reactions=reactions;
|
||||||
if(updatedAt != null) s.editedAt=updatedAt;
|
if(updatedAt != null) s.editedAt=updatedAt;
|
||||||
return s;
|
return s;
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class AccountCardStatusDisplayItem extends StatusDisplayItem{
|
||||||
public CharSequence parsedName, parsedBio;
|
public CharSequence parsedName, parsedBio;
|
||||||
|
|
||||||
public AccountCardStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, String accountID, Account account, Notification notification){
|
public AccountCardStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, String accountID, Account account, Notification notification){
|
||||||
super(parentID, parentFragment);
|
super(parentID, null, parentFragment);
|
||||||
this.account=account;
|
this.account=account;
|
||||||
this.notification=notification;
|
this.notification=notification;
|
||||||
avaRequest=new UrlImageLoaderRequest(
|
avaRequest=new UrlImageLoaderRequest(
|
||||||
|
|
|
@ -14,7 +14,7 @@ public class AccountStatusDisplayItem extends StatusDisplayItem{
|
||||||
public final AccountViewModel account;
|
public final AccountViewModel account;
|
||||||
|
|
||||||
public AccountStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Account account){
|
public AccountStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Account account){
|
||||||
super(parentID, parentFragment);
|
super(parentID, null, parentFragment);
|
||||||
this.account=new AccountViewModel(account, parentFragment.getAccountID());
|
this.account=new AccountViewModel(account, parentFragment.getAccountID());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class AudioStatusDisplayItem extends StatusDisplayItem{
|
||||||
private final ImageLoaderRequest imageRequest;
|
private final ImageLoaderRequest imageRequest;
|
||||||
|
|
||||||
public AudioStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, Attachment attachment){
|
public AudioStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, Attachment attachment){
|
||||||
super(parentID, parentFragment);
|
super(parentID, status.id, parentFragment);
|
||||||
this.status=status;
|
this.status=status;
|
||||||
this.attachment=attachment;
|
this.attachment=attachment;
|
||||||
imageRequest=new UrlImageLoaderRequest(TextUtils.isEmpty(attachment.previewUrl) ? status.account.avatarStatic : attachment.previewUrl, V.dp(100), V.dp(100));
|
imageRequest=new UrlImageLoaderRequest(TextUtils.isEmpty(attachment.previewUrl) ? status.account.avatarStatic : attachment.previewUrl, V.dp(100), V.dp(100));
|
||||||
|
|
|
@ -12,8 +12,8 @@ import me.grishka.appkit.utils.V;
|
||||||
|
|
||||||
public class DummyStatusDisplayItem extends StatusDisplayItem {
|
public class DummyStatusDisplayItem extends StatusDisplayItem {
|
||||||
|
|
||||||
public DummyStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment) {
|
public DummyStatusDisplayItem(String parentID, String contentStatusID, BaseStatusListFragment<?> parentFragment) {
|
||||||
super(parentID, parentFragment);
|
super(parentID, contentStatusID, parentFragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -65,7 +65,7 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
|
||||||
private static final float ALPHA_DISABLED=0.55f;
|
private static final float ALPHA_DISABLED=0.55f;
|
||||||
|
|
||||||
public EmojiReactionsStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status, String accountID, boolean hideEmpty, boolean forAnnouncement) {
|
public EmojiReactionsStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status, String accountID, boolean hideEmpty, boolean forAnnouncement) {
|
||||||
super(parentID, parentFragment);
|
super(parentID, status.id, parentFragment);
|
||||||
this.status=status;
|
this.status=status;
|
||||||
this.hideEmpty=hideEmpty;
|
this.hideEmpty=hideEmpty;
|
||||||
this.forAnnouncement=forAnnouncement;
|
this.forAnnouncement=forAnnouncement;
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class ExtendedFooterStatusDisplayItem extends StatusDisplayItem{
|
||||||
private static final DateTimeFormatter TIME_FORMATTER=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG, FormatStyle.SHORT);
|
private static final DateTimeFormatter TIME_FORMATTER=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG, FormatStyle.SHORT);
|
||||||
|
|
||||||
public ExtendedFooterStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, String accountID, Status status){
|
public ExtendedFooterStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, String accountID, Status status){
|
||||||
super(parentID, parentFragment);
|
super(parentID, status.id, parentFragment);
|
||||||
this.status=status;
|
this.status=status;
|
||||||
this.accountID=accountID;
|
this.accountID=accountID;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,29 +1,22 @@
|
||||||
package org.joinmastodon.android.ui.displayitems;
|
package org.joinmastodon.android.ui.displayitems;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
||||||
import org.joinmastodon.android.model.Attachment;
|
import org.joinmastodon.android.model.Attachment;
|
||||||
import org.joinmastodon.android.model.Card;
|
|
||||||
import org.joinmastodon.android.model.Status;
|
|
||||||
import org.joinmastodon.android.ui.drawables.BlurhashCrossfadeDrawable;
|
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
|
|
||||||
import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
|
|
||||||
|
|
||||||
public class FileStatusDisplayItem extends StatusDisplayItem{
|
public class FileStatusDisplayItem extends StatusDisplayItem{
|
||||||
private final Attachment attachment;
|
private final Attachment attachment;
|
||||||
|
|
||||||
public FileStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Attachment attachment) {
|
public FileStatusDisplayItem(String parentID, String contentStatusID, BaseStatusListFragment<?> parentFragment, Attachment attachment) {
|
||||||
super(parentID, parentFragment);
|
super(parentID, contentStatusID, parentFragment);
|
||||||
this.attachment=attachment;
|
this.attachment=attachment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
||||||
public boolean hideCounts;
|
public boolean hideCounts;
|
||||||
|
|
||||||
public FooterStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, String accountID){
|
public FooterStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, String accountID){
|
||||||
super(parentID, parentFragment);
|
super(parentID, status.id, parentFragment);
|
||||||
this.status=status;
|
this.status=status;
|
||||||
this.accountID=accountID;
|
this.accountID=accountID;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,10 +18,10 @@ import me.grishka.appkit.utils.V;
|
||||||
|
|
||||||
public class GapStatusDisplayItem extends StatusDisplayItem{
|
public class GapStatusDisplayItem extends StatusDisplayItem{
|
||||||
public boolean loading;
|
public boolean loading;
|
||||||
private Status status;
|
private final Status status;
|
||||||
|
|
||||||
public GapStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status){
|
public GapStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status){
|
||||||
super(parentID, parentFragment);
|
super(parentID, null, parentFragment);
|
||||||
this.status=status;
|
this.status=status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ public class HashtagStatusDisplayItem extends StatusDisplayItem{
|
||||||
public final Hashtag tag;
|
public final Hashtag tag;
|
||||||
|
|
||||||
public HashtagStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Hashtag tag){
|
public HashtagStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Hashtag tag){
|
||||||
super(parentID, parentFragment);
|
super(parentID, null, parentFragment);
|
||||||
this.tag=tag;
|
this.tag=tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
||||||
private Consumer<String> consumeReadAnnouncement;
|
private Consumer<String> consumeReadAnnouncement;
|
||||||
|
|
||||||
public HeaderStatusDisplayItem(String parentID, Account user, Instant createdAt, BaseStatusListFragment parentFragment, String accountID, Status status, CharSequence extraText, Notification notification, ScheduledStatus scheduledStatus){
|
public HeaderStatusDisplayItem(String parentID, Account user, Instant createdAt, BaseStatusListFragment parentFragment, String accountID, Status status, CharSequence extraText, Notification notification, ScheduledStatus scheduledStatus){
|
||||||
super(parentID, parentFragment);
|
super(parentID, status.id, parentFragment);
|
||||||
AccountSession session = AccountSessionManager.get(accountID);
|
AccountSession session = AccountSessionManager.get(accountID);
|
||||||
user=scheduledStatus != null ? session.self : user;
|
user=scheduledStatus != null ? session.self : user;
|
||||||
this.user=user;
|
this.user=user;
|
||||||
|
|
|
@ -28,7 +28,7 @@ public class LinkCardStatusDisplayItem extends StatusDisplayItem{
|
||||||
private final UrlImageLoaderRequest imgRequest;
|
private final UrlImageLoaderRequest imgRequest;
|
||||||
|
|
||||||
public LinkCardStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status){
|
public LinkCardStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status){
|
||||||
super(parentID, parentFragment);
|
super(parentID, status.id, parentFragment);
|
||||||
this.status=status;
|
this.status=status;
|
||||||
if(status.card.image!=null)
|
if(status.card.image!=null)
|
||||||
imgRequest=new UrlImageLoaderRequest(status.card.image, 1000, 1000);
|
imgRequest=new UrlImageLoaderRequest(status.card.image, 1000, 1000);
|
||||||
|
|
|
@ -57,7 +57,7 @@ public class MediaGridStatusDisplayItem extends StatusDisplayItem{
|
||||||
public String sensitiveTitle;
|
public String sensitiveTitle;
|
||||||
|
|
||||||
public MediaGridStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, PhotoLayoutHelper.TiledLayoutResult tiledLayout, List<Attachment> attachments, Status status){
|
public MediaGridStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, PhotoLayoutHelper.TiledLayoutResult tiledLayout, List<Attachment> attachments, Status status){
|
||||||
super(parentID, parentFragment);
|
super(parentID, status.id, parentFragment);
|
||||||
this.tiledLayout=tiledLayout;
|
this.tiledLayout=tiledLayout;
|
||||||
this.viewPool=parentFragment.getAttachmentViewsPool();
|
this.viewPool=parentFragment.getAttachmentViewsPool();
|
||||||
this.attachments=attachments;
|
this.attachments=attachments;
|
||||||
|
|
|
@ -49,7 +49,7 @@ public class NotificationHeaderStatusDisplayItem extends StatusDisplayItem{
|
||||||
private final CharSequence timestamp;
|
private final CharSequence timestamp;
|
||||||
|
|
||||||
public NotificationHeaderStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Notification notification, String accountID){
|
public NotificationHeaderStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Notification notification, String accountID){
|
||||||
super(parentID, parentFragment);
|
super(parentID, notification.status!=null ? notification.status.getContentStatus().id : null, parentFragment);
|
||||||
this.notification=notification;
|
this.notification=notification;
|
||||||
this.accountID=accountID;
|
this.accountID=accountID;
|
||||||
this.timestamp=notification.createdAt==null ? null : UiUtils.formatRelativeTimestamp(context, notification.createdAt);
|
this.timestamp=notification.createdAt==null ? null : UiUtils.formatRelativeTimestamp(context, notification.createdAt);
|
||||||
|
|
|
@ -15,8 +15,8 @@ import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
public class PollFooterStatusDisplayItem extends StatusDisplayItem{
|
public class PollFooterStatusDisplayItem extends StatusDisplayItem{
|
||||||
public final Poll poll;
|
public final Poll poll;
|
||||||
|
|
||||||
public PollFooterStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Poll poll){
|
public PollFooterStatusDisplayItem(String parentID, String contentStatusID, BaseStatusListFragment parentFragment, Poll poll){
|
||||||
super(parentID, parentFragment);
|
super(parentID, contentStatusID, parentFragment);
|
||||||
this.poll=poll;
|
this.poll=poll;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,8 +31,8 @@ public class PollOptionStatusDisplayItem extends StatusDisplayItem{
|
||||||
private final int optionIndex;
|
private final int optionIndex;
|
||||||
public final Poll poll;
|
public final Poll poll;
|
||||||
|
|
||||||
public PollOptionStatusDisplayItem(String parentID, Poll poll, int optionIndex, BaseStatusListFragment parentFragment){
|
public PollOptionStatusDisplayItem(String parentID, String contentStatusID, Poll poll, int optionIndex, BaseStatusListFragment parentFragment){
|
||||||
super(parentID, parentFragment);
|
super(parentID, contentStatusID, parentFragment);
|
||||||
this.optionIndex=optionIndex;
|
this.optionIndex=optionIndex;
|
||||||
option=poll.options.get(optionIndex);
|
option=poll.options.get(optionIndex);
|
||||||
this.poll=poll;
|
this.poll=poll;
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReblogOrReplyLineStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, CharSequence text, List<Emoji> emojis, @DrawableRes int icon, StatusPrivacy visibility, @Nullable View.OnClickListener handleClick, CharSequence fullText, Status status) {
|
public ReblogOrReplyLineStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, CharSequence text, List<Emoji> emojis, @DrawableRes int icon, StatusPrivacy visibility, @Nullable View.OnClickListener handleClick, CharSequence fullText, Status status) {
|
||||||
super(parentID, parentFragment);
|
super(parentID, status.getContentStatus().id, parentFragment);
|
||||||
SpannableStringBuilder ssb=new SpannableStringBuilder(text);
|
SpannableStringBuilder ssb=new SpannableStringBuilder(text);
|
||||||
if(AccountSessionManager.get(parentFragment.getAccountID()).getLocalPreferences().customEmojiInNames)
|
if(AccountSessionManager.get(parentFragment.getAccountID()).getLocalPreferences().customEmojiInNames)
|
||||||
HtmlParser.parseCustomEmoji(ssb, emojis);
|
HtmlParser.parseCustomEmoji(ssb, emojis);
|
||||||
|
|
|
@ -14,7 +14,7 @@ public class SectionHeaderStatusDisplayItem extends StatusDisplayItem{
|
||||||
public final Runnable onButtonClick;
|
public final Runnable onButtonClick;
|
||||||
|
|
||||||
public SectionHeaderStatusDisplayItem(BaseStatusListFragment parentFragment, String title, String buttonText, Runnable onButtonClick){
|
public SectionHeaderStatusDisplayItem(BaseStatusListFragment parentFragment, String title, String buttonText, Runnable onButtonClick){
|
||||||
super("", parentFragment);
|
super("", null, parentFragment);
|
||||||
this.title=title;
|
this.title=title;
|
||||||
this.buttonText=buttonText;
|
this.buttonText=buttonText;
|
||||||
this.onButtonClick=onButtonClick;
|
this.onButtonClick=onButtonClick;
|
||||||
|
|
|
@ -32,7 +32,7 @@ public class SpoilerStatusDisplayItem extends StatusDisplayItem{
|
||||||
private final int attachmentCount;
|
private final int attachmentCount;
|
||||||
|
|
||||||
public SpoilerStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, String title, Status statusForContent, Type type){
|
public SpoilerStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, String title, Status statusForContent, Type type){
|
||||||
super(parentID, parentFragment);
|
super(parentID, statusForContent.id, parentFragment);
|
||||||
this.status=statusForContent;
|
this.status=statusForContent;
|
||||||
this.type=type;
|
this.type=type;
|
||||||
this.attachmentCount=statusForContent.mediaAttachments.size();
|
this.attachmentCount=statusForContent.mediaAttachments.size();
|
||||||
|
|
|
@ -53,15 +53,15 @@ import me.grishka.appkit.utils.BindableViewHolder;
|
||||||
import me.grishka.appkit.views.UsableRecyclerView;
|
import me.grishka.appkit.views.UsableRecyclerView;
|
||||||
|
|
||||||
public abstract class StatusDisplayItem{
|
public abstract class StatusDisplayItem{
|
||||||
public final String parentID;
|
public final String parentID, contentStatusID;
|
||||||
public final BaseStatusListFragment<?> parentFragment;
|
public final BaseStatusListFragment<?> parentFragment;
|
||||||
public boolean inset;
|
public boolean inset;
|
||||||
public int index;
|
public int index;
|
||||||
public boolean
|
public boolean
|
||||||
hasDescendantNeighbor = false,
|
hasDescendantNeighbor=false,
|
||||||
hasAncestoringNeighbor = false,
|
hasAncestoringNeighbor=false,
|
||||||
isMainStatus = true,
|
isMainStatus=true,
|
||||||
isDirectDescendant = false;
|
isDirectDescendant=false;
|
||||||
|
|
||||||
public static final int FLAG_INSET=1;
|
public static final int FLAG_INSET=1;
|
||||||
public static final int FLAG_NO_FOOTER=1 << 1;
|
public static final int FLAG_NO_FOOTER=1 << 1;
|
||||||
|
@ -83,8 +83,9 @@ public abstract class StatusDisplayItem{
|
||||||
this.isDirectDescendant = isDirectDescendant;
|
this.isDirectDescendant = isDirectDescendant;
|
||||||
}
|
}
|
||||||
|
|
||||||
public StatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment){
|
public StatusDisplayItem(String parentID, String contentStatusID, BaseStatusListFragment<?> parentFragment){
|
||||||
this.parentID=parentID;
|
this.parentID=parentID;
|
||||||
|
this.contentStatusID=contentStatusID;
|
||||||
this.parentFragment=parentFragment;
|
this.parentFragment=parentFragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,7 +246,7 @@ public abstract class StatusDisplayItem{
|
||||||
}else if(!hasSpoiler && header!=null){
|
}else if(!hasSpoiler && header!=null){
|
||||||
header.needBottomPadding=true;
|
header.needBottomPadding=true;
|
||||||
}else if(hasSpoiler){
|
}else if(hasSpoiler){
|
||||||
contentItems.add(new DummyStatusDisplayItem(parentID, fragment));
|
contentItems.add(new DummyStatusDisplayItem(parentID, statusForContent.id, fragment));
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Attachment> imageAttachments=statusForContent.mediaAttachments.stream().filter(att->att.type.isImage()).collect(Collectors.toList());
|
List<Attachment> imageAttachments=statusForContent.mediaAttachments.stream().filter(att->att.type.isImage()).collect(Collectors.toList());
|
||||||
|
@ -269,11 +270,11 @@ public abstract class StatusDisplayItem{
|
||||||
contentItems.add(new AudioStatusDisplayItem(parentID, fragment, statusForContent, att));
|
contentItems.add(new AudioStatusDisplayItem(parentID, fragment, statusForContent, att));
|
||||||
}
|
}
|
||||||
if(att.type==Attachment.Type.UNKNOWN){
|
if(att.type==Attachment.Type.UNKNOWN){
|
||||||
contentItems.add(new FileStatusDisplayItem(parentID, fragment, att));
|
contentItems.add(new FileStatusDisplayItem(parentID, statusForContent.id, fragment, att));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(statusForContent.poll!=null){
|
if(statusForContent.poll!=null){
|
||||||
buildPollItems(parentID, fragment, statusForContent.poll, contentItems);
|
buildPollItems(parentID, statusForContent.id, fragment, statusForContent.poll, contentItems);
|
||||||
}
|
}
|
||||||
if(statusForContent.card!=null && statusForContent.mediaAttachments.isEmpty()){
|
if(statusForContent.card!=null && statusForContent.mediaAttachments.isEmpty()){
|
||||||
contentItems.add(new LinkCardStatusDisplayItem(parentID, fragment, statusForContent));
|
contentItems.add(new LinkCardStatusDisplayItem(parentID, fragment, statusForContent));
|
||||||
|
@ -300,7 +301,7 @@ public abstract class StatusDisplayItem{
|
||||||
boolean inset=(flags & FLAG_INSET)!=0;
|
boolean inset=(flags & FLAG_INSET)!=0;
|
||||||
// add inset dummy so last content item doesn't clip out of inset bounds
|
// add inset dummy so last content item doesn't clip out of inset bounds
|
||||||
if((inset || footer==null) && (flags & FLAG_CHECKABLE)==0){
|
if((inset || footer==null) && (flags & FLAG_CHECKABLE)==0){
|
||||||
items.add(new DummyStatusDisplayItem(parentID, fragment));
|
items.add(new DummyStatusDisplayItem(parentID, statusForContent.id, fragment));
|
||||||
// in case we ever need the dummy to display a margin for the media grid again:
|
// in case we ever need the dummy to display a margin for the media grid again:
|
||||||
// (i forgot why we apparently don't need this anymore)
|
// (i forgot why we apparently don't need this anymore)
|
||||||
// !contentItems.isEmpty() && contentItems
|
// !contentItems.isEmpty() && contentItems
|
||||||
|
@ -321,13 +322,13 @@ public abstract class StatusDisplayItem{
|
||||||
new ArrayList<>(List.of(new WarningFilteredStatusDisplayItem(parentID, fragment, statusForContent, items, applyingFilter)));
|
new ArrayList<>(List.of(new WarningFilteredStatusDisplayItem(parentID, fragment, statusForContent, items, applyingFilter)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void buildPollItems(String parentID, BaseStatusListFragment fragment, Poll poll, List<StatusDisplayItem> items){
|
public static void buildPollItems(String parentID, String contentStatusID, BaseStatusListFragment fragment, Poll poll, List<StatusDisplayItem> items){
|
||||||
int i=0;
|
int i=0;
|
||||||
for(Poll.Option opt:poll.options){
|
for(Poll.Option opt:poll.options){
|
||||||
items.add(new PollOptionStatusDisplayItem(parentID, poll, i, fragment));
|
items.add(new PollOptionStatusDisplayItem(parentID, contentStatusID, poll, i, fragment));
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
items.add(new PollFooterStatusDisplayItem(parentID, fragment, poll));
|
items.add(new PollFooterStatusDisplayItem(parentID, contentStatusID, fragment, poll));
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Type{
|
public enum Type{
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
|
||||||
public final Status status;
|
public final Status status;
|
||||||
|
|
||||||
public TextStatusDisplayItem(String parentID, CharSequence text, BaseStatusListFragment parentFragment, Status status, boolean disableTranslate){
|
public TextStatusDisplayItem(String parentID, CharSequence text, BaseStatusListFragment parentFragment, Status status, boolean disableTranslate){
|
||||||
super(parentID, parentFragment);
|
super(parentID, status.id, parentFragment);
|
||||||
this.text=text;
|
this.text=text;
|
||||||
this.status=status;
|
this.status=status;
|
||||||
this.disableTranslate=disableTranslate;
|
this.disableTranslate=disableTranslate;
|
||||||
|
|
|
@ -19,7 +19,7 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{
|
||||||
public LegacyFilter applyingFilter;
|
public LegacyFilter applyingFilter;
|
||||||
|
|
||||||
public WarningFilteredStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status, List<StatusDisplayItem> filteredItems, LegacyFilter applyingFilter){
|
public WarningFilteredStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status, List<StatusDisplayItem> filteredItems, LegacyFilter applyingFilter){
|
||||||
super(parentID, parentFragment);
|
super(parentID, status.id, parentFragment);
|
||||||
this.status=status;
|
this.status=status;
|
||||||
this.filteredItems = filteredItems;
|
this.filteredItems = filteredItems;
|
||||||
this.applyingFilter = applyingFilter;
|
this.applyingFilter = applyingFilter;
|
||||||
|
|
|
@ -210,6 +210,7 @@ public class HtmlParser{
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void parseCustomEmoji(SpannableStringBuilder ssb, List<Emoji> emojis){
|
public static void parseCustomEmoji(SpannableStringBuilder ssb, List<Emoji> emojis){
|
||||||
|
if(emojis==null) return;
|
||||||
Map<String, Emoji> emojiByCode =
|
Map<String, Emoji> emojiByCode =
|
||||||
emojis.stream()
|
emojis.stream()
|
||||||
.collect(
|
.collect(
|
||||||
|
|
|
@ -68,6 +68,7 @@ import org.joinmastodon.android.E;
|
||||||
import org.joinmastodon.android.GlobalUserPreferences;
|
import org.joinmastodon.android.GlobalUserPreferences;
|
||||||
import org.joinmastodon.android.MastodonApp;
|
import org.joinmastodon.android.MastodonApp;
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
|
import org.joinmastodon.android.api.CacheController;
|
||||||
import org.joinmastodon.android.api.MastodonAPIRequest;
|
import org.joinmastodon.android.api.MastodonAPIRequest;
|
||||||
import org.joinmastodon.android.api.MastodonErrorResponse;
|
import org.joinmastodon.android.api.MastodonErrorResponse;
|
||||||
import org.joinmastodon.android.api.StatusInteractionController;
|
import org.joinmastodon.android.api.StatusInteractionController;
|
||||||
|
@ -630,18 +631,24 @@ public class UiUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void confirmDeletePost(Activity activity, String accountID, Status status, Consumer<Status> resultCallback, boolean forRedraft) {
|
public static void confirmDeletePost(Activity activity, String accountID, Status status, Consumer<Status> resultCallback, boolean forRedraft) {
|
||||||
|
Status s=status.getContentStatus();
|
||||||
showConfirmationAlert(activity,
|
showConfirmationAlert(activity,
|
||||||
forRedraft ? R.string.sk_confirm_delete_and_redraft_title : R.string.confirm_delete_title,
|
forRedraft ? R.string.sk_confirm_delete_and_redraft_title : R.string.confirm_delete_title,
|
||||||
forRedraft ? R.string.sk_confirm_delete_and_redraft : R.string.confirm_delete,
|
forRedraft ? R.string.sk_confirm_delete_and_redraft : R.string.confirm_delete,
|
||||||
forRedraft ? R.string.sk_delete_and_redraft : R.string.delete,
|
forRedraft ? R.string.sk_delete_and_redraft : R.string.delete,
|
||||||
forRedraft ? R.drawable.ic_fluent_arrow_clockwise_28_regular : R.drawable.ic_fluent_delete_28_regular,
|
forRedraft ? R.drawable.ic_fluent_arrow_clockwise_28_regular : R.drawable.ic_fluent_delete_28_regular,
|
||||||
() -> new DeleteStatus(status.id)
|
() -> new DeleteStatus(s.id)
|
||||||
.setCallback(new Callback<>() {
|
.setCallback(new Callback<>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(Status result) {
|
public void onSuccess(Status result) {
|
||||||
resultCallback.accept(result);
|
resultCallback.accept(result);
|
||||||
AccountSessionManager.getInstance().getAccount(accountID).getCacheController().deleteStatus(status.id);
|
CacheController cache=AccountSessionManager.get(accountID).getCacheController();
|
||||||
E.post(new StatusDeletedEvent(status.id, accountID));
|
cache.deleteStatus(s.id);
|
||||||
|
E.post(new StatusDeletedEvent(s.id, accountID));
|
||||||
|
if(status!=s){
|
||||||
|
cache.deleteStatus(status.id);
|
||||||
|
E.post(new StatusDeletedEvent(status.id, accountID));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1711,7 +1718,7 @@ public class UiUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Optional<String> extractPronouns(Context context, @Nullable Account account) {
|
public static Optional<String> extractPronouns(Context context, @Nullable Account account) {
|
||||||
if (account == null) return Optional.empty();
|
if (account==null || account.fields==null) return Optional.empty();
|
||||||
String localizedPronouns=context.getString(R.string.sk_pronouns_label).toLowerCase();
|
String localizedPronouns=context.getString(R.string.sk_pronouns_label).toLowerCase();
|
||||||
|
|
||||||
// higher = worse. the lowest number wins. also i'm sorry for writing this
|
// higher = worse. the lowest number wins. also i'm sorry for writing this
|
||||||
|
|
Loading…
Reference in New Issue