Compare commits
48 Commits
1.1.4+fork
...
1.1.4+fork
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e8a8691b03 | ||
|
|
7fe3d97347 | ||
|
|
a2e932934c | ||
|
|
e82e51ca88 | ||
|
|
ef561b6724 | ||
|
|
2bdff65c13 | ||
|
|
286b642101 | ||
|
|
27ed78c293 | ||
|
|
562a5aae7d | ||
|
|
4940eff7f9 | ||
|
|
cfb9854a8e | ||
|
|
594e49cf64 | ||
|
|
ad2895e297 | ||
|
|
dae2632c18 | ||
|
|
97f09d4569 | ||
|
|
ac1dbc0f90 | ||
|
|
cf67175826 | ||
|
|
dc8f81f447 | ||
|
|
b11b4c95d0 | ||
|
|
20dc664242 | ||
|
|
5cabab368f | ||
|
|
e512a0b327 | ||
|
|
4a96392f11 | ||
|
|
74a28cb881 | ||
|
|
cd712f5109 | ||
|
|
11d5a65f04 | ||
|
|
efc1a0b4e3 | ||
|
|
492d9e90b8 | ||
|
|
ede4137935 | ||
|
|
b625ed7aec | ||
|
|
9a55f847b9 | ||
|
|
0473062bc2 | ||
|
|
afbf13ef95 | ||
|
|
8e4cff17a5 | ||
|
|
da954ed3fd | ||
|
|
9d48beaebb | ||
|
|
e607118347 | ||
|
|
5f6dafb763 | ||
|
|
052a000d3c | ||
|
|
59315f81ec | ||
|
|
b79b69d961 | ||
|
|
5118a1fb1e | ||
|
|
18275183d0 | ||
|
|
6c778d05ea | ||
|
|
2d9938e8b2 | ||
|
|
1e99940c1d | ||
|
|
2827bcffe3 | ||
|
|
ce4e762cd5 |
@@ -9,8 +9,8 @@ android {
|
|||||||
applicationId "org.joinmastodon.android.moshinda"
|
applicationId "org.joinmastodon.android.moshinda"
|
||||||
minSdk 23
|
minSdk 23
|
||||||
targetSdk 33
|
targetSdk 33
|
||||||
versionCode 89
|
versionCode 90
|
||||||
versionName "1.1.4+fork.89.moshinda"
|
versionName "1.1.4+fork.90.moshinda"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
resConfigs "ar-rSA", "be-rBY", "bn-rBD", "bs-rBA", "ca-rES", "cs-rCZ", "de-rDE", "el-rGR", "es-rES", "eu-rES", "fi-rFI", "fil-rPH", "fr-rFR", "ga-rIE", "gd-rGB", "gl-rES", "hi-rIN", "hr-rHR", "hu-rHU", "hy-rAM", "in-rID", "is-rIS", "it-rIT", "iw-rIL", "ja-rJP", "kab", "ko-rKR", "nl-rNL", "oc-rFR", "pl-rPL", "pt-rBR", "pt-rPT", "ro-rRO", "ru-rRU", "si-rLK", "sl-rSI", "sv-rSE", "th-rTH", "tr-rTR", "uk-rUA", "vi-rVN", "zh-rCN", "zh-rTW"
|
resConfigs "ar-rSA", "be-rBY", "bn-rBD", "bs-rBA", "ca-rES", "cs-rCZ", "de-rDE", "el-rGR", "es-rES", "eu-rES", "fi-rFI", "fil-rPH", "fr-rFR", "ga-rIE", "gd-rGB", "gl-rES", "hi-rIN", "hr-rHR", "hu-rHU", "hy-rAM", "in-rID", "is-rIS", "it-rIT", "iw-rIL", "ja-rJP", "kab", "ko-rKR", "nl-rNL", "oc-rFR", "pl-rPL", "pt-rBR", "pt-rPT", "ro-rRO", "ru-rRU", "si-rLK", "sl-rSI", "sv-rSE", "th-rTH", "tr-rTR", "uk-rUA", "vi-rVN", "zh-rCN", "zh-rTW"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ import org.joinmastodon.android.ui.displayitems.PollFooterStatusDisplayItem;
|
|||||||
import org.joinmastodon.android.ui.displayitems.PollOptionStatusDisplayItem;
|
import org.joinmastodon.android.ui.displayitems.PollOptionStatusDisplayItem;
|
||||||
import org.joinmastodon.android.ui.displayitems.StatusDisplayItem;
|
import org.joinmastodon.android.ui.displayitems.StatusDisplayItem;
|
||||||
import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem;
|
import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem;
|
||||||
|
import org.joinmastodon.android.ui.displayitems.WarningFilteredStatusDisplayItem;
|
||||||
import org.joinmastodon.android.ui.photoviewer.PhotoViewer;
|
import org.joinmastodon.android.ui.photoviewer.PhotoViewer;
|
||||||
import org.joinmastodon.android.ui.photoviewer.PhotoViewerHost;
|
import org.joinmastodon.android.ui.photoviewer.PhotoViewerHost;
|
||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
@@ -513,6 +514,26 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
|||||||
updateImagesSpoilerState(status, itemID);
|
updateImagesSpoilerState(status, itemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// public void onRevealFilteredClick(TextStatusDisplayItem.Holder holder){
|
||||||
|
// Status status=holder.getItem().status;
|
||||||
|
// revealFiltered(status, holder.getItemID());
|
||||||
|
// }
|
||||||
|
|
||||||
|
public void onRevealFilteredClick(WarningFilteredStatusDisplayItem.Holder holder){
|
||||||
|
Status status=holder.getItem().status;
|
||||||
|
// revealFiltered(status, holder.getItemID());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void revealFiltered(Status status, ArrayList<StatusDisplayItem> showedItems){
|
||||||
|
status.filterRevealed=true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// public void notifyItemsChanged(int adapterPosition){
|
||||||
|
// adapter.notifyItemChanged(adapterPosition);
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
public void onVisibilityIconClick(HeaderStatusDisplayItem.Holder holder){
|
public void onVisibilityIconClick(HeaderStatusDisplayItem.Holder holder){
|
||||||
Status status=holder.getItem().status;
|
Status status=holder.getItem().status;
|
||||||
status.spoilerRevealed=!status.spoilerRevealed;
|
status.spoilerRevealed=!status.spoilerRevealed;
|
||||||
@@ -543,6 +564,16 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
|||||||
|
|
||||||
public void onGapClick(GapStatusDisplayItem.Holder item){}
|
public void onGapClick(GapStatusDisplayItem.Holder item){}
|
||||||
|
|
||||||
|
public void onWarningClick(WarningFilteredStatusDisplayItem.Holder warningItem){
|
||||||
|
int i = warningItem.getAbsoluteAdapterPosition();
|
||||||
|
displayItems.remove(warningItem.getAbsoluteAdapterPosition());
|
||||||
|
for(StatusDisplayItem item:warningItem.filteredItems){
|
||||||
|
displayItems.add(i, item);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
adapter.notifyItemChanged(warningItem.getAbsoluteAdapterPosition());
|
||||||
|
}
|
||||||
|
|
||||||
public String getAccountID(){
|
public String getAccountID(){
|
||||||
return accountID;
|
return accountID;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ public class HomeTimelineFragment extends FabStatusListFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<Status> filterPosts(List<Status> items) {
|
private List<Status> filterPosts(List<Status> items) {
|
||||||
|
// This is the function I must use to solve the filters thing for real
|
||||||
return items.stream().filter(i ->
|
return items.stream().filter(i ->
|
||||||
(GlobalUserPreferences.showReplies || i.inReplyToId == null) &&
|
(GlobalUserPreferences.showReplies || i.inReplyToId == null) &&
|
||||||
(GlobalUserPreferences.showBoosts || i.reblog == null)
|
(GlobalUserPreferences.showBoosts || i.reblog == null)
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ public class Filter extends BaseModel{
|
|||||||
@RequiredField
|
@RequiredField
|
||||||
public String id;
|
public String id;
|
||||||
@RequiredField
|
@RequiredField
|
||||||
|
public String title;
|
||||||
|
@RequiredField
|
||||||
public String phrase;
|
public String phrase;
|
||||||
public transient EnumSet<FilterContext> context=EnumSet.noneOf(FilterContext.class);
|
public transient EnumSet<FilterContext> context=EnumSet.noneOf(FilterContext.class);
|
||||||
public Instant expiresAt;
|
public Instant expiresAt;
|
||||||
@@ -61,6 +63,7 @@ public class Filter extends BaseModel{
|
|||||||
public String toString(){
|
public String toString(){
|
||||||
return "Filter{"+
|
return "Filter{"+
|
||||||
"id='"+id+'\''+
|
"id='"+id+'\''+
|
||||||
|
", title='"+title+'\''+
|
||||||
", phrase='"+phrase+'\''+
|
", phrase='"+phrase+'\''+
|
||||||
", context="+context+
|
", context="+context+
|
||||||
", expiresAt="+expiresAt+
|
", expiresAt="+expiresAt+
|
||||||
|
|||||||
@@ -58,6 +58,8 @@ public class Status extends BaseModel implements DisplayItemsParent{
|
|||||||
public boolean bookmarked;
|
public boolean bookmarked;
|
||||||
public boolean pinned;
|
public boolean pinned;
|
||||||
|
|
||||||
|
public boolean filterRevealed;
|
||||||
|
|
||||||
public transient boolean spoilerRevealed;
|
public transient boolean spoilerRevealed;
|
||||||
public transient boolean hasGapAfter;
|
public transient boolean hasGapAfter;
|
||||||
private transient String strippedText;
|
private transient String strippedText;
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ public class AudioStatusDisplayItem extends StatusDisplayItem{
|
|||||||
}else{
|
}else{
|
||||||
seekBar.setEnabled(false);
|
seekBar.setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onPlayPauseClick(View v){
|
private void onPlayPauseClick(View v){
|
||||||
|
|||||||
@@ -153,6 +153,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
bookmark.setSelected(item.status.bookmarked);
|
bookmark.setSelected(item.status.bookmarked);
|
||||||
boost.setEnabled(item.status.visibility==StatusPrivacy.PUBLIC || item.status.visibility==StatusPrivacy.UNLISTED || item.status.visibility==StatusPrivacy.LOCAL
|
boost.setEnabled(item.status.visibility==StatusPrivacy.PUBLIC || item.status.visibility==StatusPrivacy.UNLISTED || item.status.visibility==StatusPrivacy.LOCAL
|
||||||
|| (item.status.visibility==StatusPrivacy.PRIVATE && item.status.account.id.equals(AccountSessionManager.getInstance().getAccount(item.accountID).self.id)));
|
|| (item.status.visibility==StatusPrivacy.PRIVATE && item.status.account.id.equals(AccountSessionManager.getInstance().getAccount(item.accountID).self.id)));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bindButton(TextView btn, long count){
|
private void bindButton(TextView btn, long count){
|
||||||
|
|||||||
@@ -177,7 +177,9 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
optionsMenu=new PopupMenu(activity, more);
|
optionsMenu=new PopupMenu(activity, more);
|
||||||
|
|
||||||
optionsMenu.inflate(R.menu.post);
|
optionsMenu.inflate(R.menu.post);
|
||||||
|
|
||||||
optionsMenu.setOnMenuItemClickListener(menuItem->{
|
optionsMenu.setOnMenuItemClickListener(menuItem->{
|
||||||
Account account=item.user;
|
Account account=item.user;
|
||||||
int id=menuItem.getItemId();
|
int id=menuItem.getItemId();
|
||||||
@@ -275,11 +277,29 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
args.putString("profileDisplayUsername", account.getDisplayUsername());
|
args.putString("profileDisplayUsername", account.getDisplayUsername());
|
||||||
Nav.go(item.parentFragment.getActivity(), ListTimelinesFragment.class, args);
|
Nav.go(item.parentFragment.getActivity(), ListTimelinesFragment.class, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!item.status.filterRevealed){
|
||||||
|
this.itemView.setVisibility(View.GONE);
|
||||||
|
ViewGroup.LayoutParams params = this.itemView.getLayoutParams();
|
||||||
|
params.height = 0;
|
||||||
|
params.width = 0;
|
||||||
|
this.itemView.setLayoutParams(params);
|
||||||
|
// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition());
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
UiUtils.enablePopupMenuIcons(activity, optionsMenu);
|
UiUtils.enablePopupMenuIcons(activity, optionsMenu);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// public void setFilteredShown(){
|
||||||
|
// this.itemView.setVisibility(View.VISIBLE);
|
||||||
|
// params = this.itemView.getLayoutParams();
|
||||||
|
// params.height = 0;
|
||||||
|
// params.width = 0;
|
||||||
|
// this.itemView.setLayoutParams(params);
|
||||||
|
// }
|
||||||
|
|
||||||
private void populateAccountsMenu(Menu menu) {
|
private void populateAccountsMenu(Menu menu) {
|
||||||
List<AccountSession> sessions=AccountSessionManager.getInstance().getLoggedInAccounts();
|
List<AccountSession> sessions=AccountSessionManager.getInstance().getLoggedInAccounts();
|
||||||
sessions.stream().filter(s -> !s.getID().equals(item.accountID)).forEach(s -> {
|
sessions.stream().filter(s -> !s.getID().equals(item.accountID)).forEach(s -> {
|
||||||
@@ -299,20 +319,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
botIcon.setColorFilter(username.getCurrentTextColor());
|
botIcon.setColorFilter(username.getCurrentTextColor());
|
||||||
separator.setVisibility(View.VISIBLE);
|
separator.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
// if(item.user.bot){
|
|
||||||
// SpannableStringBuilder ssb = new SpannableStringBuilder();
|
|
||||||
// ssb.append('@'+item.user.acct);
|
|
||||||
// ssb.append(" ");
|
|
||||||
// Drawable botIcon=username.getResources().getDrawable(R.drawable.ic_bot, itemView.getContext().getTheme()).mutate();
|
|
||||||
// botIcon.setBounds(0, 0, botIcon.getIntrinsicWidth(), botIcon.getIntrinsicHeight());
|
|
||||||
// botIcon.setTint(username.getCurrentTextColor());
|
|
||||||
// ssb.append(itemView.getContext().getString(R.string.manually_approves_followers), new ImageSpan(botIcon, ImageSpan.ALIGN_BASELINE), 0);
|
|
||||||
// username.setPaddingRelative(0,0,16,0);
|
|
||||||
// username.setText(ssb);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// username.setCompoundDrawablesWithIntrinsicBounds(item.user.bot ? R.drawable.ic_fluent_bot_24_filled : 0, 0, 0, 0);
|
|
||||||
|
|
||||||
if (item.scheduledStatus!=null)
|
if (item.scheduledStatus!=null)
|
||||||
if (item.scheduledStatus.scheduledAt.isAfter(CreateStatus.DRAFTS_AFTER_INSTANT)) {
|
if (item.scheduledStatus.scheduledAt.isAfter(CreateStatus.DRAFTS_AFTER_INSTANT)) {
|
||||||
timestamp.setText(R.string.sk_draft);
|
timestamp.setText(R.string.sk_draft);
|
||||||
@@ -393,6 +399,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
|
|||||||
|
|
||||||
more.setContentDescription(desc);
|
more.setContentDescription(desc);
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) more.setTooltipText(desc);
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) more.setTooltipText(desc);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ public abstract class ImageStatusDisplayItem extends StatusDisplayItem{
|
|||||||
photo.setImageDrawable(crossfadeDrawable);
|
photo.setImageDrawable(crossfadeDrawable);
|
||||||
photo.setContentDescription(TextUtils.isEmpty(item.attachment.description) ? item.parentFragment.getString(R.string.media_no_description) : item.attachment.description);
|
photo.setContentDescription(TextUtils.isEmpty(item.attachment.description) ? item.parentFragment.getString(R.string.media_no_description) : item.attachment.description);
|
||||||
didClear=false;
|
didClear=false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ public class LinkCardStatusDisplayItem extends StatusDisplayItem{
|
|||||||
photo.setImageDrawable(crossfadeDrawable);
|
photo.setImageDrawable(crossfadeDrawable);
|
||||||
didClear=false;
|
didClear=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -106,6 +106,15 @@ public class PhotoStatusDisplayItem extends ImageStatusDisplayItem{
|
|||||||
altTextWrapper.setVisibility(View.GONE);
|
altTextWrapper.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!item.status.filterRevealed){
|
||||||
|
this.itemView.setVisibility(View.GONE);
|
||||||
|
ViewGroup.LayoutParams params = this.itemView.getLayoutParams();
|
||||||
|
params.height = 0;
|
||||||
|
params.width = 0;
|
||||||
|
this.itemView.setLayoutParams(params);
|
||||||
|
// item.parentFragment.notifyItemsChanged(this.getAbsoluteAdapterPosition());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onShowHideClick(View v){
|
private void onShowHideClick(View v){
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{
|
|||||||
if (visibilityText != 0) text.setContentDescription(item.text + " (" + ctx.getString(visibilityText) + ")");
|
if (visibilityText != 0) text.setContentDescription(item.text + " (" + ctx.getString(visibilityText) + ")");
|
||||||
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.N)
|
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.N)
|
||||||
UiUtils.fixCompoundDrawableTintOnAndroid6(text);
|
UiUtils.fixCompoundDrawableTintOnAndroid6(text);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
import org.joinmastodon.android.R;
|
import org.joinmastodon.android.R;
|
||||||
|
import org.joinmastodon.android.api.session.AccountSession;
|
||||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||||
import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
||||||
import org.joinmastodon.android.fragments.HashtagTimelineFragment;
|
import org.joinmastodon.android.fragments.HashtagTimelineFragment;
|
||||||
@@ -19,6 +20,7 @@ import org.joinmastodon.android.fragments.ThreadFragment;
|
|||||||
import org.joinmastodon.android.model.Account;
|
import org.joinmastodon.android.model.Account;
|
||||||
import org.joinmastodon.android.model.Attachment;
|
import org.joinmastodon.android.model.Attachment;
|
||||||
import org.joinmastodon.android.model.DisplayItemsParent;
|
import org.joinmastodon.android.model.DisplayItemsParent;
|
||||||
|
import org.joinmastodon.android.model.Filter;
|
||||||
import org.joinmastodon.android.model.Hashtag;
|
import org.joinmastodon.android.model.Hashtag;
|
||||||
import org.joinmastodon.android.model.Notification;
|
import org.joinmastodon.android.model.Notification;
|
||||||
import org.joinmastodon.android.model.Poll;
|
import org.joinmastodon.android.model.Poll;
|
||||||
@@ -26,6 +28,7 @@ import org.joinmastodon.android.model.ScheduledStatus;
|
|||||||
import org.joinmastodon.android.model.Status;
|
import org.joinmastodon.android.model.Status;
|
||||||
import org.joinmastodon.android.ui.PhotoLayoutHelper;
|
import org.joinmastodon.android.ui.PhotoLayoutHelper;
|
||||||
import org.joinmastodon.android.ui.text.HtmlParser;
|
import org.joinmastodon.android.ui.text.HtmlParser;
|
||||||
|
import org.joinmastodon.android.utils.StatusFilterPredicate;
|
||||||
import org.parceler.Parcels;
|
import org.parceler.Parcels;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -78,6 +81,7 @@ public abstract class StatusDisplayItem{
|
|||||||
case ACCOUNT -> new AccountStatusDisplayItem.Holder(activity, parent);
|
case ACCOUNT -> new AccountStatusDisplayItem.Holder(activity, parent);
|
||||||
case HASHTAG -> new HashtagStatusDisplayItem.Holder(activity, parent);
|
case HASHTAG -> new HashtagStatusDisplayItem.Holder(activity, parent);
|
||||||
case GAP -> new GapStatusDisplayItem.Holder(activity, parent);
|
case GAP -> new GapStatusDisplayItem.Holder(activity, parent);
|
||||||
|
case WARNING -> new WarningFilteredStatusDisplayItem.Holder(activity, parent);
|
||||||
case EXTENDED_FOOTER -> new ExtendedFooterStatusDisplayItem.Holder(activity, parent);
|
case EXTENDED_FOOTER -> new ExtendedFooterStatusDisplayItem.Holder(activity, parent);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -89,11 +93,19 @@ public abstract class StatusDisplayItem{
|
|||||||
public static ArrayList<StatusDisplayItem> buildItems(BaseStatusListFragment fragment, Status status, String accountID, DisplayItemsParent parentObject, Map<String, Account> knownAccounts, boolean inset, boolean addFooter, Notification notification, boolean disableTranslate){
|
public static ArrayList<StatusDisplayItem> buildItems(BaseStatusListFragment fragment, Status status, String accountID, DisplayItemsParent parentObject, Map<String, Account> knownAccounts, boolean inset, boolean addFooter, Notification notification, boolean disableTranslate){
|
||||||
String parentID=parentObject.getID();
|
String parentID=parentObject.getID();
|
||||||
ArrayList<StatusDisplayItem> items=new ArrayList<>();
|
ArrayList<StatusDisplayItem> items=new ArrayList<>();
|
||||||
|
|
||||||
|
ArrayList<StatusDisplayItem> filtered=new ArrayList<>();
|
||||||
|
|
||||||
Status statusForContent=status.getContentStatus();
|
Status statusForContent=status.getContentStatus();
|
||||||
Bundle args=new Bundle();
|
Bundle args=new Bundle();
|
||||||
args.putString("account", accountID);
|
args.putString("account", accountID);
|
||||||
ScheduledStatus scheduledStatus = parentObject instanceof ScheduledStatus ? (ScheduledStatus) parentObject : null;
|
ScheduledStatus scheduledStatus = parentObject instanceof ScheduledStatus ? (ScheduledStatus) parentObject : null;
|
||||||
|
|
||||||
|
List<Filter> filters=AccountSessionManager.getInstance().getAccount(accountID).wordFilters.stream().filter(f->f.context.contains(Filter.FilterContext.HOME)).collect(Collectors.toList());
|
||||||
|
StatusFilterPredicate filterPredicate = new StatusFilterPredicate(filters);
|
||||||
|
|
||||||
|
statusForContent.filterRevealed = filterPredicate.testWithWarning(status);
|
||||||
|
|
||||||
if(status.reblog!=null){
|
if(status.reblog!=null){
|
||||||
boolean isOwnPost = AccountSessionManager.getInstance().isSelf(fragment.getAccountID(), status.account);
|
boolean isOwnPost = AccountSessionManager.getInstance().isSelf(fragment.getAccountID(), status.account);
|
||||||
items.add(new ReblogOrReplyLineStatusDisplayItem(parentID, fragment, fragment.getString(R.string.user_boosted, status.account.displayName), status.account.emojis, R.drawable.ic_fluent_arrow_repeat_all_20_filled, isOwnPost ? status.visibility : null, i->{
|
items.add(new ReblogOrReplyLineStatusDisplayItem(parentID, fragment, fragment.getString(R.string.user_boosted, status.account.displayName), status.account.emojis, R.drawable.ic_fluent_arrow_repeat_all_20_filled, isOwnPost ? status.visibility : null, i->{
|
||||||
@@ -126,11 +138,12 @@ public abstract class StatusDisplayItem{
|
|||||||
}
|
}
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
HeaderStatusDisplayItem header;
|
HeaderStatusDisplayItem header;
|
||||||
items.add(header=new HeaderStatusDisplayItem(parentID, statusForContent.account, statusForContent.createdAt, fragment, accountID, statusForContent, null, notification, scheduledStatus));
|
items.add(header=new HeaderStatusDisplayItem(parentID, statusForContent.account, statusForContent.createdAt, fragment, accountID, statusForContent, null, notification, scheduledStatus));
|
||||||
if(!TextUtils.isEmpty(statusForContent.content))
|
if(!TextUtils.isEmpty(statusForContent.content)){
|
||||||
items.add(new TextStatusDisplayItem(parentID, HtmlParser.parse(statusForContent.content, statusForContent.emojis, statusForContent.mentions, statusForContent.tags, accountID), fragment, statusForContent, disableTranslate));
|
items.add(new TextStatusDisplayItem(parentID, HtmlParser.parse(statusForContent.content, statusForContent.emojis, statusForContent.mentions, statusForContent.tags, accountID), fragment, statusForContent, disableTranslate));
|
||||||
else
|
} else
|
||||||
header.needBottomPadding=true;
|
header.needBottomPadding=true;
|
||||||
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());
|
||||||
if(!imageAttachments.isEmpty()){
|
if(!imageAttachments.isEmpty()){
|
||||||
@@ -162,14 +175,22 @@ public abstract class StatusDisplayItem{
|
|||||||
}
|
}
|
||||||
if(addFooter){
|
if(addFooter){
|
||||||
items.add(new FooterStatusDisplayItem(parentID, fragment, statusForContent, accountID));
|
items.add(new FooterStatusDisplayItem(parentID, fragment, statusForContent, accountID));
|
||||||
if(status.hasGapAfter && !(fragment instanceof ThreadFragment))
|
if(status.hasGapAfter && !(fragment instanceof ThreadFragment)){
|
||||||
items.add(new GapStatusDisplayItem(parentID, fragment));
|
items.add(new GapStatusDisplayItem(parentID, fragment));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int i=1;
|
int i=1;
|
||||||
for(StatusDisplayItem item:items){
|
for(StatusDisplayItem item:items){
|
||||||
item.inset=inset;
|
item.inset=inset;
|
||||||
item.index=i++;
|
item.index=i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!statusForContent.filterRevealed){
|
||||||
|
filtered.add(new WarningFilteredStatusDisplayItem(parentID, fragment, statusForContent, items));
|
||||||
|
return filtered;
|
||||||
|
}
|
||||||
|
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,6 +217,7 @@ public abstract class StatusDisplayItem{
|
|||||||
ACCOUNT,
|
ACCOUNT,
|
||||||
HASHTAG,
|
HASHTAG,
|
||||||
GAP,
|
GAP,
|
||||||
|
WARNING,
|
||||||
EXTENDED_FOOTER
|
EXTENDED_FOOTER
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -114,8 +114,8 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
|
|||||||
@Override
|
@Override
|
||||||
public void onBind(TextStatusDisplayItem item){
|
public void onBind(TextStatusDisplayItem item){
|
||||||
text.setText(item.translated
|
text.setText(item.translated
|
||||||
? HtmlParser.parse(item.translation.content, item.status.emojis, item.status.mentions, item.status.tags, item.parentFragment.getAccountID())
|
? HtmlParser.parse(item.translation.content, item.status.emojis, item.status.mentions, item.status.tags, item.parentFragment.getAccountID())
|
||||||
: item.text);
|
: item.text);
|
||||||
text.setTextIsSelectable(item.textSelectable);
|
text.setTextIsSelectable(item.textSelectable);
|
||||||
spoilerTitleInline.setTextIsSelectable(item.textSelectable);
|
spoilerTitleInline.setTextIsSelectable(item.textSelectable);
|
||||||
text.setInvalidateOnEveryFrame(false);
|
text.setInvalidateOnEveryFrame(false);
|
||||||
@@ -156,6 +156,9 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
|
|||||||
? View.VISIBLE : View.GONE);
|
? View.VISIBLE : View.GONE);
|
||||||
translateButton.setText(item.translated ? R.string.sk_translate_show_original : R.string.sk_translate_post);
|
translateButton.setText(item.translated ? R.string.sk_translate_show_original : R.string.sk_translate_post);
|
||||||
translateInfo.setText(item.translated ? itemView.getResources().getString(R.string.sk_translated_using, item.translation.provider) : "");
|
translateInfo.setText(item.translated ? itemView.getResources().getString(R.string.sk_translated_using, item.translation.provider) : "");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
translateButton.setOnClickListener(v->{
|
translateButton.setOnClickListener(v->{
|
||||||
if (item.translation == null) {
|
if (item.translation == null) {
|
||||||
translateProgress.setVisibility(View.VISIBLE);
|
translateProgress.setVisibility(View.VISIBLE);
|
||||||
@@ -186,6 +189,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
|
|||||||
rebind();
|
rebind();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
package org.joinmastodon.android.ui.displayitems;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import org.joinmastodon.android.R;
|
||||||
|
import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
||||||
|
import org.joinmastodon.android.model.Status;
|
||||||
|
import org.joinmastodon.android.ui.drawables.SawtoothTearDrawable;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
// Mind the gap!
|
||||||
|
public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{
|
||||||
|
public boolean loading;
|
||||||
|
public final Status status;
|
||||||
|
public ArrayList<StatusDisplayItem> filteredItems;
|
||||||
|
|
||||||
|
public WarningFilteredStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, ArrayList<StatusDisplayItem> items){
|
||||||
|
super(parentID, parentFragment);
|
||||||
|
this.status=status;
|
||||||
|
this.filteredItems = items;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Type getType(){
|
||||||
|
return Type.WARNING;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Holder extends StatusDisplayItem.Holder<WarningFilteredStatusDisplayItem>{
|
||||||
|
public final View warningWrap;
|
||||||
|
public final Button showBtn;
|
||||||
|
public final TextView text;
|
||||||
|
public ArrayList<StatusDisplayItem> filteredItems;
|
||||||
|
|
||||||
|
public Holder(Context context, ViewGroup parent){
|
||||||
|
super(context, R.layout.display_item_warning, parent);
|
||||||
|
warningWrap=findViewById(R.id.warning_wrap);
|
||||||
|
showBtn=findViewById(R.id.reveal_btn);
|
||||||
|
showBtn.setOnClickListener(i -> item.parentFragment.onWarningClick(this));
|
||||||
|
text=findViewById(R.id.text);
|
||||||
|
// itemView.setOnClickListener(v->item.parentFragment.onRevealFilteredClick(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBind(WarningFilteredStatusDisplayItem item){
|
||||||
|
filteredItems = item.filteredItems;
|
||||||
|
text.setText(item.parentFragment.getString(R.string.mo_filtered, item.status.filtered.get(item.status.filtered.size() -1).filter.title));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(){
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -38,4 +38,22 @@ public class StatusFilterPredicate implements Predicate<Status>{
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean testWithWarning(Status status) {
|
||||||
|
if(status.filtered!=null){
|
||||||
|
if (status.filtered.isEmpty()){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
boolean matches=status.filtered.stream()
|
||||||
|
.map(filterResult->filterResult.filter)
|
||||||
|
.filter(filter->filter.expiresAt==null||filter.expiresAt.isAfter(Instant.now()))
|
||||||
|
.anyMatch(filter->filter.filterAction==Filter.FilterAction.WARN);
|
||||||
|
return !matches;
|
||||||
|
}
|
||||||
|
for(Filter filter:filters){
|
||||||
|
if(filter.matches(status))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
|
||||||
|
<path android:pathData="M3.897 4.054L3.97 3.97c0.266-0.267 0.683-0.29 0.976-0.073L5.03 3.97 10 8.939l4.97-4.97c0.266-0.266 0.683-0.29 0.976-0.072L16.03 3.97c0.267 0.266 0.29 0.683 0.073 0.976L16.03 5.03 11.061 10l4.97 4.97c0.266 0.266 0.29 0.683 0.072 0.976L16.03 16.03c-0.266 0.267-0.683 0.29-0.976 0.073L14.97 16.03 10 11.061l-4.97 4.97c-0.266 0.266-0.683 0.29-0.976 0.072L3.97 16.03c-0.267-0.266-0.29-0.683-0.073-0.976L3.97 14.97 8.939 10l-4.97-4.97C3.704 4.764 3.68 4.347 3.898 4.054L3.97 3.97 3.897 4.054z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||||
|
</vector>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
|
||||||
|
<path android:pathData="M22 6.5c0 3.038-2.462 5.5-5.5 5.5S11 9.538 11 6.5 13.462 1 16.5 1 22 3.462 22 6.5zm-7.146-2.354c-0.196-0.195-0.512-0.195-0.708 0-0.195 0.196-0.195 0.512 0 0.708L15.793 6.5l-1.647 1.646c-0.195 0.196-0.195 0.512 0 0.707 0.196 0.196 0.512 0.196 0.708 0L16.5 7.208l1.646 1.647c0.196 0.195 0.512 0.195 0.708 0 0.195-0.196 0.195-0.512 0-0.707L17.207 6.5l1.647-1.646c0.195-0.196 0.195-0.512 0-0.708-0.196-0.195-0.512-0.195-0.708 0L16.5 5.793l-1.646-1.647zM19.5 14v-1.732c0.551-0.287 1.056-0.651 1.5-1.078v7.56c0 1.733-1.357 3.15-3.066 3.245L17.75 22H6.25c-1.733 0-3.15-1.357-3.245-3.066L3 18.75V7.25C3 5.517 4.356 4.1 6.066 4.005L6.25 4h4.248c-0.198 0.474-0.34 0.977-0.422 1.5H6.25c-0.918 0-1.671 0.707-1.744 1.606L4.5 7.25V14H9c0.38 0 0.694 0.282 0.743 0.648L9.75 14.75C9.75 15.993 10.757 17 12 17c1.19 0 2.166-0.925 2.245-2.096l0.005-0.154c0-0.38 0.282-0.694 0.648-0.743L15 14h4.5zm-15 1.5v3.25c0 0.918 0.707 1.671 1.606 1.744L6.25 20.5h11.5c0.918 0 1.671-0.707 1.744-1.607L19.5 18.75V15.5h-3.825c-0.335 1.648-1.75 2.904-3.475 2.995L12 18.5c-1.747 0-3.215-1.195-3.632-2.812L8.325 15.5H4.5z" android:fillColor="@color/fluent_default_icon_tint"/>
|
||||||
|
</vector>
|
||||||
31
mastodon/src/main/res/layout/display_item_warning.xml
Normal file
31
mastodon/src/main/res/layout/display_item_warning.xml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="75dp"
|
||||||
|
android:id="@+id/warning_wrap"
|
||||||
|
android:background="@drawable/bg_timeline_gap">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/text"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_gravity="start|center_vertical"
|
||||||
|
android:textAppearance="@style/m3_title_medium"
|
||||||
|
android:textColor="?android:textColorSecondary"
|
||||||
|
android:text="@string/mo_filtered"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/reveal_btn"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:layout_gravity="end|center_vertical"
|
||||||
|
android:text="@string/tap_to_reveal"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:visibility="visible"
|
||||||
|
/>
|
||||||
|
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp">
|
||||||
|
</FrameLayout>
|
||||||
@@ -3,15 +3,15 @@
|
|||||||
<string name="mo_app_name" translatable="false">Moshidon</string>
|
<string name="mo_app_name" translatable="false">Moshidon</string>
|
||||||
<string name="mo_color_palette_nord">Nord</string>
|
<string name="mo_color_palette_nord">Nord</string>
|
||||||
<string name="mo_app_username" translatable="false">\@moshidon</string>
|
<string name="mo_app_username" translatable="false">\@moshidon</string>
|
||||||
<string name="mo_disable_dividers">Beitrags Trennung deaktivieren</string>
|
<string name="mo_disable_dividers">Beitrags-Trennlinien deaktivieren</string>
|
||||||
<string name="mo_relocate_publish_button">Veröffentlichen-Schaltfläche verschieben</string>
|
<string name="mo_relocate_publish_button">Veröffentlichen-Schaltfläche verschieben</string>
|
||||||
<string name="mo_hide_compose_button_while_scrolling_setting">Veröffentlichen Schaltfläche beim scrollen ausblenden</string>
|
<string name="mo_hide_compose_button_while_scrolling_setting">Veröffentlichen Schaltfläche beim scrollen ausblenden</string>
|
||||||
<string name="mo_welcome_text">Moshidon sagt Hi! gib den Domain-Namen deiner Heimat-Instanz unten ein.</string>
|
<string name="mo_welcome_text">Moshidon sagt Hi! Gib den Domain-Namen deiner Heimat-Instanz unten ein.</string>
|
||||||
<!-- Setting this as non-translatable as it simply doesnt change with language-->
|
<!-- Setting this as non-translatable as it simply doesnt change with language-->
|
||||||
<string name="mo_settings_app_version" translatable="false">Moshidon v%1$s (%2$d)</string>
|
<string name="mo_settings_app_version" translatable="false">Moshidon v%1$s (%2$d)</string>
|
||||||
<string name="mo_personal_note">Notiz zu diesem Profil hinzufügen</string>
|
<string name="mo_personal_note">Notiz zu diesem Profil hinzufügen</string>
|
||||||
<string name="mo_personal_note_confirm">Änderungen der Notiz bestätigen</string>
|
<string name="mo_personal_note_confirm">Änderungen der Notiz bestätigen</string>
|
||||||
<string name="mo_personal_note_update_failed">Speichern der Notiz fehlgeschlagen</string>
|
<string name="mo_personal_note_update_failed">Speichern der Notiz ist fehlgeschlagen</string>
|
||||||
<string name="mo_settings_contribute">Zu Megalodon beitragen</string>
|
<string name="mo_settings_contribute">Zu Megalodon beitragen</string>
|
||||||
<string name="mo_update_available">Moshidon %s ist bereit zum herunterladen.</string>
|
<string name="mo_update_available">Moshidon %s ist bereit zum herunterladen.</string>
|
||||||
<string name="mo_update_ready">Moshidon %s ist heruntergeladen und bereit zur Installation.</string>
|
<string name="mo_update_ready">Moshidon %s ist heruntergeladen und bereit zur Installation.</string>
|
||||||
|
|||||||
@@ -1,4 +1,22 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="mo_hide_compose_button_while_scrolling_setting">Agochar o botón do editor ao desprazarse</string>
|
||||||
</resources>
|
<string name="mo_welcome_text">Para comezar escribe o nome de dominio da instancia da túa conta.</string>
|
||||||
|
<string name="mo_personal_note_confirm">Confirma os cambios na nota</string>
|
||||||
|
<string name="mo_personal_note_update_failed">Non se gardou a nota</string>
|
||||||
|
<string name="mo_settings_contribute">Contribúe a Moshidon</string>
|
||||||
|
<string name="mo_update_available">Moshidon %s está lista para descarga.</string>
|
||||||
|
<string name="mo_no_image_desc_title">Sen descrición para a imaxe</string>
|
||||||
|
<string name="mo_emoji_recent">Usados recentemente</string>
|
||||||
|
<string name="mo_clear_recent_emoji">Limpar lista emojis recentes</string>
|
||||||
|
<string name="mo_disable_relocate_publish_button_to_enable_customization">Desactivar a opción de Mover o botón de publicar para permitir personalización</string>
|
||||||
|
<string name="mo_poll_option_add">Engadir nova opción á enquisa</string>
|
||||||
|
<string name="mo_fab_compose">Redactar</string>
|
||||||
|
<string name="mo_sending_error">Erro ao publicar</string>
|
||||||
|
<string name="mo_color_palette_nord">Nord</string>
|
||||||
|
<string name="mo_disable_dividers">Desactivar divisores de publicación</string>
|
||||||
|
<string name="mo_relocate_publish_button">Mover o botón de publicar</string>
|
||||||
|
<string name="mo_personal_note">Engade unha nota para este perfil</string>
|
||||||
|
<string name="mo_update_ready">Moshidon %s foi descargada e lista para instalar.</string>
|
||||||
|
<string name="mo_no_image_desc">As imaxes incluídas non teñen descrición. Por favor, considera engadila para axudar ás persoas con dificultades visuais.</string>
|
||||||
|
</resources>
|
||||||
@@ -1,4 +1,19 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="mo_hide_compose_button_while_scrolling_setting">Verberg bericht knop tijdens scrollen</string>
|
||||||
</resources>
|
<string name="mo_personal_note">Voeg een notitie toe over dit profiel</string>
|
||||||
|
<string name="mo_personal_note_confirm">Bevestig de wijzigingen aan de notitie</string>
|
||||||
|
<string name="mo_personal_note_update_failed">Notitie bewaren mislukt</string>
|
||||||
|
<string name="mo_settings_contribute">Bijdragen aan Moshidon</string>
|
||||||
|
<string name="mo_update_ready">Moshidon %s is gedownload en gereed voor installatie.</string>
|
||||||
|
<string name="mo_update_available">Moshidon %s staat gereed om te downloaden.</string>
|
||||||
|
<string name="mo_no_image_desc_title">Geen beschrijving bij afbeelding</string>
|
||||||
|
<string name="mo_emoji_recent">Recent gebruikt</string>
|
||||||
|
<string name="mo_poll_option_add">Voeg nieuwe peiling optie toe</string>
|
||||||
|
<string name="mo_sending_error">Fout bij plaatsen bericht</string>
|
||||||
|
<string name="mo_disable_dividers">Berichten scheidingslijn uitschakelen</string>
|
||||||
|
<string name="mo_relocate_publish_button">Verplaats publiceerknop</string>
|
||||||
|
<string name="mo_welcome_text">Om te beginnen vul je hieronder de domeinnaam in van de instance (server).</string>
|
||||||
|
<string name="mo_clear_recent_emoji">Wis recent gebruikte emoji</string>
|
||||||
|
<string name="mo_no_image_desc">De bijgesloten afbeeldingen hebben geen omschrijving. Overweeg deze alsnog toe te voegen, zodat ook mensen met een visuele handicap kunnen deelnemen.</string>
|
||||||
|
</resources>
|
||||||
@@ -1,4 +1,20 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="mo_color_palette_nord">Nord</string>
|
||||||
</resources>
|
<string name="mo_relocate_publish_button">Przenieś przycisk publikacji</string>
|
||||||
|
<string name="mo_hide_compose_button_while_scrolling_setting">Ukryj przycisk tworzenia podczas przewijania</string>
|
||||||
|
<string name="mo_personal_note">Dodaj notatkę do tego profilu</string>
|
||||||
|
<string name="mo_personal_note_confirm">Zatwierdź zmiany w notatce</string>
|
||||||
|
<string name="mo_personal_note_update_failed">Nie udało się zapisać notatki</string>
|
||||||
|
<string name="mo_update_available">Moshidon %s jest gotowy do pobrania.</string>
|
||||||
|
<string name="mo_update_ready">Moshidon %s jest już pobrany i gotowy do instalacji.</string>
|
||||||
|
<string name="mo_no_image_desc_title">Brak opisu obrazka</string>
|
||||||
|
<string name="mo_emoji_recent">Ostatnio używane</string>
|
||||||
|
<string name="mo_clear_recent_emoji">Wyczyść ostatnio używane emoji</string>
|
||||||
|
<string name="mo_poll_option_add">Dodaj nową opcję wyboru do ankiety</string>
|
||||||
|
<string name="mo_fab_compose">Stwórz</string>
|
||||||
|
<string name="mo_sending_error">Błąd przy publikowaniu</string>
|
||||||
|
<string name="mo_welcome_text">Aby rozpocząć, wpisz poniżej nazwę domeny swojej instancji.</string>
|
||||||
|
<string name="mo_settings_contribute">Wspomóż rozwój Moshidon</string>
|
||||||
|
<string name="mo_no_image_desc">Dołączone obrazy nie mają opisu. Proszę rozważyć dodanie opisów, aby umożliwić osobom niedowidzącym ich odczytanie.</string>
|
||||||
|
</resources>
|
||||||
@@ -1,4 +1,21 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="mo_color_palette_nord">Nord</string>
|
||||||
</resources>
|
<string name="mo_disable_dividers">Desabilitar divisores de toots</string>
|
||||||
|
<string name="mo_relocate_publish_button">Relocalizar botão de postagem</string>
|
||||||
|
<string name="mo_hide_compose_button_while_scrolling_setting">Ocultar compositor ao rolar a tela</string>
|
||||||
|
<string name="mo_welcome_text">Para começar, por favor, digite abaixo o nome de domínio de sua instância de origem.</string>
|
||||||
|
<string name="mo_personal_note">Adicionar nota sobre este perfil</string>
|
||||||
|
<string name="mo_personal_note_confirm">Confirmar mudanças na nota</string>
|
||||||
|
<string name="mo_personal_note_update_failed">Falha em salvar nota</string>
|
||||||
|
<string name="mo_settings_contribute">Contribua para o Moshidon</string>
|
||||||
|
<string name="mo_update_available">Moshidon %s está pronto para baixar.</string>
|
||||||
|
<string name="mo_update_ready">Moshidon %s está baixado e pronto para instalar.</string>
|
||||||
|
<string name="mo_no_image_desc_title">Nenhuma descrição de imagem</string>
|
||||||
|
<string name="mo_no_image_desc">As imagens incluídas não possuem descrição. Por favor considere adicionar uma, para permitir que as pessoas visualmente deficientes participem.</string>
|
||||||
|
<string name="mo_emoji_recent">Usado recentemente</string>
|
||||||
|
<string name="mo_clear_recent_emoji">Limpar emojis usados recentemente</string>
|
||||||
|
<string name="mo_disable_relocate_publish_button_to_enable_customization">Desabilite Relocalizar botão de postagem para permitir modificações</string>
|
||||||
|
<string name="mo_fab_compose">Compor</string>
|
||||||
|
<string name="mo_sending_error">Erro ao publicar</string>
|
||||||
|
</resources>
|
||||||
@@ -1,4 +1,22 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="mo_emoji_recent">最近使用</string>
|
||||||
</resources>
|
<string name="mo_color_palette_nord">Nord</string>
|
||||||
|
<string name="mo_disable_dividers">禁用帖文分隔线</string>
|
||||||
|
<string name="mo_relocate_publish_button">重新定位发布按钮</string>
|
||||||
|
<string name="mo_hide_compose_button_while_scrolling_setting">滚动时隐藏撰写按钮</string>
|
||||||
|
<string name="mo_welcome_text">要开始使用,请在下面输入您的主实例的域名。</string>
|
||||||
|
<string name="mo_personal_note">添加关于此个人资料的备注</string>
|
||||||
|
<string name="mo_personal_note_confirm">确认更改备注</string>
|
||||||
|
<string name="mo_personal_note_update_failed">保存备注失败</string>
|
||||||
|
<string name="mo_settings_contribute">为Moshidon做出贡献</string>
|
||||||
|
<string name="mo_update_available">Moshidon %s 已准备好下载。</string>
|
||||||
|
<string name="mo_update_ready">Moshidon %s 已下载并准备安装。</string>
|
||||||
|
<string name="mo_no_image_desc_title">无图片描述</string>
|
||||||
|
<string name="mo_no_image_desc">包含的图像没有描述。请考虑添加描述,以便让视障人士参与。</string>
|
||||||
|
<string name="mo_clear_recent_emoji">清除最近使用的表情符号</string>
|
||||||
|
<string name="mo_disable_relocate_publish_button_to_enable_customization">禁用重新定位发布按钮以允许自定义</string>
|
||||||
|
<string name="mo_poll_option_add">添加新的投票选项</string>
|
||||||
|
<string name="mo_fab_compose">撰写</string>
|
||||||
|
<string name="mo_sending_error">发布帖文时出错</string>
|
||||||
|
</resources>
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
<string name="mo_no_image_desc">The included images have no description. Please consider adding one, to allow visually impaired people to participate.</string>
|
<string name="mo_no_image_desc">The included images have no description. Please consider adding one, to allow visually impaired people to participate.</string>
|
||||||
<string name="mo_emoji_recent">Recently used</string>
|
<string name="mo_emoji_recent">Recently used</string>
|
||||||
<string name="mo_clear_recent_emoji">Clear recently used emoji</string>
|
<string name="mo_clear_recent_emoji">Clear recently used emoji</string>
|
||||||
|
<string name="mo_filtered">Filtered: %s</string>
|
||||||
<string name="mo_disable_relocate_publish_button_to_enable_customization">Disable "Relocate publish button" to allow customization</string>
|
<string name="mo_disable_relocate_publish_button_to_enable_customization">Disable "Relocate publish button" to allow customization</string>
|
||||||
|
|
||||||
<!-- accessibility labels-->
|
<!-- accessibility labels-->
|
||||||
|
|||||||
6
metadata/de-DE/changelogs/88.txt
Normal file
6
metadata/de-DE/changelogs/88.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Neue Dinge für die Version Nummer 88:
|
||||||
|
- Ein verbessertes Fab-Verhalten
|
||||||
|
- Bessere Behandlung von Bildbeschreibungen
|
||||||
|
- Aktivieren des lokalen Postings für Instanzen, die es unterstützen
|
||||||
|
- Behebung einiger Abstürze
|
||||||
|
- Kleinere Verbesserungen
|
||||||
1
metadata/de-DE/changelogs/89.txt
Normal file
1
metadata/de-DE/changelogs/89.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Version 89 behebt Fehler beim Speichern von Einstellungen und verbessert die Stabilität.
|
||||||
3
metadata/en-US/changelogs/90,txt
Normal file
3
metadata/en-US/changelogs/90,txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
New things for release 90:
|
||||||
|
- The ability to have filtered posts show with a warning
|
||||||
|
- Minor bugfixes
|
||||||
@@ -1 +1 @@
|
|||||||
¡Se añade una opción para mover el botón de publicación a una posición más cómoda! Ahora es la opción por defecto.
|
¡Se añade una opción para mover el botón de publicación a una posición más cómoda! Ahora es la opción por defecto!
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
Se arregla un problema con el botón de publicación, que aparecía cortado en pantallas con resoluciones bajas o con textos largos. Ahora es un icono cuando se coloca en la parte de abajo.
|
Se arregla un problema con el botón de publicación, que aparecía cortado en pantallas con resoluciones bajas o con textos largos. ¡Ahora es un icono cuando se coloca en la parte de abajo!
|
||||||
Pequeños arreglos a la visualización de cambios de versión.
|
Pequeños arreglos a la visualización de cambios de versión
|
||||||
|
|||||||
@@ -12,4 +12,4 @@ Moshidon es una versión modificada de <a href="https://github.com/mastodon/mast
|
|||||||
-<b>Seguir hashtags</b>: Sigue hashtags para ver las nuevas publicaciones de hashtags específicos directamente en tu cronología.
|
-<b>Seguir hashtags</b>: Sigue hashtags para ver las nuevas publicaciones de hashtags específicos directamente en tu cronología.
|
||||||
-<b>Peticiones de seguimiento</b>: Acepta o rechaza peticiones de seguimiento desde las notificaciones o la lista dedicada.
|
-<b>Peticiones de seguimiento</b>: Acepta o rechaza peticiones de seguimiento desde las notificaciones o la lista dedicada.
|
||||||
-<b>Borrar y reescribir</b>: La característica más buscada, que te permite editar.
|
-<b>Borrar y reescribir</b>: La característica más buscada, que te permite editar.
|
||||||
-<b>Extras</b>: Incluye varios extras en la interfaz, como iconos específicos en las notificaciones o corrección de molestias de la interfaz original.
|
-<b>Extras</b>: Incluye varios extras en la interfaz, como iconos específicos en las notificaciones o corrección de molestias de la interfaz original!
|
||||||
|
|||||||
1
metadata/gl-ES/changelogs/78.txt
Normal file
1
metadata/gl-ES/changelogs/78.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Eliminación dos divisores de toots na cronoloxía principal! Isto tamén é configurábel.
|
||||||
1
metadata/gl-ES/changelogs/79.txt
Normal file
1
metadata/gl-ES/changelogs/79.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Engadindo un botón de doazón!
|
||||||
1
metadata/gl-ES/short_description.txt
Normal file
1
metadata/gl-ES/short_description.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Mastodon para Android pero é Material You e ten máis ferramentas
|
||||||
1
metadata/gl-ES/title.txt
Normal file
1
metadata/gl-ES/title.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Moshidon
|
||||||
1
metadata/nl-NL/short_description.txt
Normal file
1
metadata/nl-NL/short_description.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Mastodon voor Android, maar met Material You en meer mogelijkheden
|
||||||
1
metadata/nl-NL/title.txt
Normal file
1
metadata/nl-NL/title.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Moshidon
|
||||||
1
metadata/pl-PL/short_description.txt
Normal file
1
metadata/pl-PL/short_description.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Mastodon na Android ale ma więcej funkcji i jest w stylu Material You
|
||||||
1
metadata/pl-PL/title.txt
Normal file
1
metadata/pl-PL/title.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Moshidon
|
||||||
9
metadata/sv-SE/changelogs/73.txt
Normal file
9
metadata/sv-SE/changelogs/73.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
- Tidslinjer kan fästas och ordnas om
|
||||||
|
- Stöd endast-lokala inlägg
|
||||||
|
- Indikator för saknade alt-texter
|
||||||
|
- Förbättrad alt-textredigerare
|
||||||
|
- Rubrik i tidslinjen för följda hashtags
|
||||||
|
- Fler meddelandekategorier
|
||||||
|
- Lägg tillbaka filöppnare
|
||||||
|
- Fråga när du sparar redigerat utkast
|
||||||
|
- Alternativ för att inaktivera knappen "Se nya inlägg"
|
||||||
1
metadata/sv-SE/changelogs/80.txt
Normal file
1
metadata/sv-SE/changelogs/80.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Lägger nu till en valfri växel för att få publiceringsknappen till en mer nåbar position! Det är standard nu!
|
||||||
2
metadata/sv-SE/changelogs/81.txt
Normal file
2
metadata/sv-SE/changelogs/81.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
Åtgärdar publiceringsknappen som klipps bort på låga DPI:er eller på längre språk. Det är nu en ikon när den är nåbar!
|
||||||
|
Mindre korrigeringar av förhandsgranskningen av ändringsloggen
|
||||||
9
metadata/sv-SE/changelogs/82.txt
Normal file
9
metadata/sv-SE/changelogs/82.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
Release 82 lägger till många funktioner från uppströms, till exempel:
|
||||||
|
- Utkast och schemalagda inlägg
|
||||||
|
- En omarbetning av en inställningssida
|
||||||
|
- Möjligheten att välja publiceringsknappens text
|
||||||
|
- Möjligheten att minska animationer
|
||||||
|
- En botikon för botkontoprofiler! Tack @FineFindus
|
||||||
|
- Och uppdaterad tysk översättning! Tack @dantobi
|
||||||
|
- Många mindre UI-förbättringar
|
||||||
|
- Stora användbarhetsförbättringar, som möjligheten att hålla åtgärdsknappar för att interagera med ett annat konto
|
||||||
4
metadata/sv-SE/changelogs/83.txt
Normal file
4
metadata/sv-SE/changelogs/83.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
Release 83 ger några mindre förbättringar, såsom:
|
||||||
|
- Åtgärda kraschproblem när du klickar på omnämnanden
|
||||||
|
- Omarbetar botikonen
|
||||||
|
- Att lägga till en påminnelse om att lägga till en bildbeskrivning om du lägger upp en bilaga gör att synskadade kan delta bättre. Tack @FineFindus!
|
||||||
3
metadata/sv-SE/changelogs/84.txt
Normal file
3
metadata/sv-SE/changelogs/84.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Release 84 fixar några buggar, såsom:
|
||||||
|
- Återuppringning av inloggning fungerar inte
|
||||||
|
- Uppdatering av tysk översättning. Tack @DanTobi!
|
||||||
7
metadata/sv-SE/changelogs/85.txt
Normal file
7
metadata/sv-SE/changelogs/85.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Nya grejer som kommer med Release 85:
|
||||||
|
Lägger till en lång klick-sökknapp för att få fram tangentbordet
|
||||||
|
Om du klickar på sökknappen när du redan är på sökfliken visas också tangentbordet
|
||||||
|
Tar fram en bot-ikon för att använda botkonton, tack @FineFindus!
|
||||||
|
Förbättrar synligheten för botikonen i kontoprofilen, tack @FineFindus!
|
||||||
|
Uppdaterar tysk översättning, tack @Dontobi!
|
||||||
|
Fixar mindre UI-problem
|
||||||
4
metadata/sv-SE/changelogs/86.txt
Normal file
4
metadata/sv-SE/changelogs/86.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
Nya saker för release 86:
|
||||||
|
- Möjlighet att stapla meddelanden, dvs: ha flera meddelanden;
|
||||||
|
- Introduktion av meddelanden;
|
||||||
|
- Många mindre UI-fixar.
|
||||||
5
metadata/sv-SE/changelogs/87.txt
Normal file
5
metadata/sv-SE/changelogs/87.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
Nya saker för 87:
|
||||||
|
- En ny hemlayout från Megalodon, med möjligheten att växla mellan dem är WIP
|
||||||
|
- Bättre hantering av aviseringar
|
||||||
|
- En ny omarbetad bot-ikon
|
||||||
|
– Ett gäng mindre förbättringar
|
||||||
6
metadata/sv-SE/changelogs/88.txt
Normal file
6
metadata/sv-SE/changelogs/88.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Nya saker för release nummer 88:
|
||||||
|
- Ett förbättrat Fab-beteende
|
||||||
|
- Bättre hantering av alt-texter
|
||||||
|
- Aktivera endast-lokalt inlägg för instanser som stöder det
|
||||||
|
- Fixa några krascher
|
||||||
|
- Små förbättringar
|
||||||
1
metadata/sv-SE/changelogs/89.txt
Normal file
1
metadata/sv-SE/changelogs/89.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Release 89 är en buggfix-release, så några krascher har åtgärdats och några inställningar som inte sparas.
|
||||||
9
metadata/zh-CN/changelogs/73.txt
Normal file
9
metadata/zh-CN/changelogs/73.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
- 可以固定和重新排列时间线
|
||||||
|
- 支持仅限本地的帖文
|
||||||
|
- 缺少替代文本的指示器
|
||||||
|
- 改进的替代文本编辑器
|
||||||
|
- 跟随主题标签的时间轴标题
|
||||||
|
- 更多通知类别
|
||||||
|
- 添加回文件开启器
|
||||||
|
- 保存编辑草稿时提示
|
||||||
|
- 禁用“查看新帖文”按钮的选项
|
||||||
1
metadata/zh-CN/changelogs/78.txt
Normal file
1
metadata/zh-CN/changelogs/78.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
删除主时间线上的嘟文分隔线!它也是可配置的。
|
||||||
1
metadata/zh-CN/changelogs/79.txt
Normal file
1
metadata/zh-CN/changelogs/79.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
添加捐赠按钮!
|
||||||
1
metadata/zh-CN/changelogs/80.txt
Normal file
1
metadata/zh-CN/changelogs/80.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
现在添加一个可选的开关,用于将发布按钮带到更容易触及的位置!现在默认了!
|
||||||
2
metadata/zh-CN/changelogs/81.txt
Normal file
2
metadata/zh-CN/changelogs/81.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
修复发布按钮在低 DPI 或较长语言上被切断的问题。当它处于可访问状态时,它现在是一个图标!
|
||||||
|
更新日志预览的小修复
|
||||||
9
metadata/zh-CN/changelogs/82.txt
Normal file
9
metadata/zh-CN/changelogs/82.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
Release 82 增加了很多来自上游的特性,例如:
|
||||||
|
- 草稿和定时帖文
|
||||||
|
- 设置页面返工
|
||||||
|
- 选择发布按钮文本的能力
|
||||||
|
- 减少动画的能力
|
||||||
|
- 机器人帐户配置文件的机器人图标!感谢@FineFindus
|
||||||
|
- 并更新了德语翻译!谢谢@dantobi
|
||||||
|
- 许多小的 UI 改进
|
||||||
|
- 主要的可用性改进,因为能够按住操作按钮与另一个帐户进行交互
|
||||||
4
metadata/zh-CN/changelogs/83.txt
Normal file
4
metadata/zh-CN/changelogs/83.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
Release 83 带来了一些小的改进,例如:
|
||||||
|
- 修复点击提及时的崩溃问题
|
||||||
|
- 重做机器人图标
|
||||||
|
- 添加提醒以在您发布附件时添加图像描述,以便视障人士更好地参与。谢谢@FineFindus!
|
||||||
3
metadata/zh-CN/changelogs/84.txt
Normal file
3
metadata/zh-CN/changelogs/84.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Release 84 修复了一些错误,例如:
|
||||||
|
- 登录回调不工作
|
||||||
|
- 更新德语翻译。谢谢@DanTobi!
|
||||||
7
metadata/zh-CN/changelogs/85.txt
Normal file
7
metadata/zh-CN/changelogs/85.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Release 85 附带的新内容:
|
||||||
|
添加长按搜索按钮以调出键盘
|
||||||
|
在搜索选项卡中单击搜索按钮也会调出键盘
|
||||||
|
从机器人帐户中为嘟嘟声调出一个机器人图标,谢谢@FineFindus!
|
||||||
|
提高帐户配置文件中机器人图标的可见性,感谢@FineFindus!
|
||||||
|
更新德语翻译,谢谢@Dontobi!
|
||||||
|
修复小的 UI 问题
|
||||||
4
metadata/zh-CN/changelogs/86.txt
Normal file
4
metadata/zh-CN/changelogs/86.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
版本 86 的新内容:
|
||||||
|
- 能够堆叠通知,即:有多个通知;
|
||||||
|
- 介绍公告;
|
||||||
|
- 许多小的 UI 修复。
|
||||||
5
metadata/zh-CN/changelogs/87.txt
Normal file
5
metadata/zh-CN/changelogs/87.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
87的新东西:
|
||||||
|
- 来自 Megalodon 的新家庭布局,能够在它们之间切换是 WIP
|
||||||
|
- 更好地处理通知
|
||||||
|
- 一个新的被破坏的机器人图标
|
||||||
|
- 一堆小改进
|
||||||
6
metadata/zh-CN/changelogs/88.txt
Normal file
6
metadata/zh-CN/changelogs/88.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
版本号 88 的新内容:
|
||||||
|
- 改进的 Fab 行为
|
||||||
|
- 更好地处理替代文本
|
||||||
|
- 为支持它的实例启用仅本地发布
|
||||||
|
- 修复一些崩溃
|
||||||
|
- 小改进
|
||||||
1
metadata/zh-CN/changelogs/89.txt
Normal file
1
metadata/zh-CN/changelogs/89.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
版本 89 是一个错误修复版本,因此修复了一些崩溃以及一些未保存的设置。
|
||||||
15
metadata/zh-CN/full_description.txt
Normal file
15
metadata/zh-CN/full_description.txt
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
Moshidon 是<a href="https://github.com/mastodon/mastodon-android">官方 Mastodon Android 应用</a>的修改版本,添加了官方应用中缺少的重要功能,例如联合时间轴、不公开发帖和图像描述查看器。
|
||||||
|
|
||||||
|
<b>主要特点</b>
|
||||||
|
|
||||||
|
- <b>许多颜色</b>:为您提供 material you 主题和许多丰富多彩的主题选项!
|
||||||
|
- <b>翻译按钮</b>:带来翻译按钮!
|
||||||
|
- <b>嘟文语言选择器</b>:引入了嘟文语言选择器!
|
||||||
|
- <b>不公开发帖</b>:公开发布而不让您的嘟文出现在趋势、主题标签或公共时间轴中。
|
||||||
|
- <b>跨站时间轴</b>:查看您的主实例连接到的所有其他联邦宇宙社区的人们的所有公开帖文。
|
||||||
|
- <b>图片描述查看器</b>:快速检查图片或视频是否附加了替代文字。
|
||||||
|
- <b>置顶帖文</b>:将您最重要的帖文置顶到您的个人资料,并使用“已置顶”选项卡查看其他人置顶的内容。
|
||||||
|
- <b>关注主题标签</b>:通过关注直接在您的主页时间线中查看来自特定主题标签的新帖文。
|
||||||
|
- <b>回应关注请求</b>:接受或拒绝来自您的通知或专用关注请求列表的关注请求。
|
||||||
|
- <b>删除和重新起草</b>:这个备受喜爱的功能使编辑成为可能,而无需实际的编辑功能。
|
||||||
|
- <b>更多</b>:带来许多额外的 UI 功能,例如通知上的交互图标,并消除了原始 UI 的许多烦恼!
|
||||||
1
metadata/zh-CN/short_description.txt
Normal file
1
metadata/zh-CN/short_description.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Mastodon for Android 但它是 Material You 并且具有更多功能
|
||||||
1
metadata/zh-CN/title.txt
Normal file
1
metadata/zh-CN/title.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Moshidon
|
||||||
Reference in New Issue
Block a user