Compare commits

...

48 Commits

Author SHA1 Message Date
LucasGGamerM
e8a8691b03 Adding 90 changelog 2023-02-01 22:02:29 -03:00
LucasGGamerM
7fe3d97347 Bump version number 2023-02-01 22:01:25 -03:00
poesty
a2e932934c Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (16 of 16 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/zh_Hans/
(cherry picked from commit c34b08ffb20b1e58307b13775165728a57aaa2f8)
2023-02-01 22:00:13 -03:00
Oliebol
e82e51ca88 Translated using Weblate (Dutch)
Currently translated at 12.5% (2 of 16 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/nl/
(cherry picked from commit 10c50b8a78aba6f275e3ce01260f585c27535e46)
2023-02-01 22:00:12 -03:00
tygyh
ef561b6724 Translated using Weblate (Swedish)
Currently translated at 100.0% (16 of 16 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/sv/
(cherry picked from commit 467bde77b94623a9aff2bf1e0a5f735819f65edb)
2023-02-01 22:00:12 -03:00
poesty
2bdff65c13 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (22 of 22 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/zh_Hans/
(cherry picked from commit 1937864d90f67d1a1df40f15e1b6e900aa55fa8a)
2023-02-01 22:00:12 -03:00
LucasGGamerM
286b642101 Merge branch 'feature/filters_again' 2023-02-01 21:46:50 -03:00
LucasGGamerM
27ed78c293 Merge branch 'feature/filters' 2023-02-01 21:44:35 -03:00
LucasGGamerM
562a5aae7d Its now a much cleaner transition 2023-02-01 21:42:47 -03:00
LucasGGamerM
4940eff7f9 Its pretty much done i think 2023-02-01 21:39:54 -03:00
LucasGGamerM
cfb9854a8e Adding a little bit of polish, and also adding a title to the filters 2023-02-01 21:16:47 -03:00
LucasGGamerM
594e49cf64 Fixing a weird bug I found 2023-02-01 20:21:19 -03:00
LucasGGamerM
ad2895e297 Doing a bit of cleanup. Man, I still dont believe what i have done 2023-01-31 20:36:01 -03:00
LucasGGamerM
dae2632c18 IT WORKS, now i need to polish it :) 2023-01-31 20:30:05 -03:00
LucasGGamerM
97f09d4569 Adding missing drawables? 2023-01-30 19:13:20 -03:00
LucasGGamerM
ac1dbc0f90 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	mastodon/src/main/res/values-de-rDE/strings_mo.xml
#	metadata/es-ES/changelogs/80.txt
#	metadata/es-ES/changelogs/81.txt
#	metadata/es-ES/full_description.txt
2023-01-30 18:55:16 -03:00
LucasGGamerM
cf67175826 Translated using Weblate (Portuguese (Brazil))
Currently translated at 95.4% (21 of 22 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/pt_BR/
2023-01-30 21:51:47 +00:00
MKCOOL142
dc8f81f447 Translated using Weblate (German)
Currently translated at 100.0% (22 of 22 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/de/
2023-01-30 21:51:46 +00:00
MKCOOL142
b11b4c95d0 Translated using Weblate (German)
Currently translated at 100.0% (16 of 16 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/de/
2023-01-30 21:51:46 +00:00
Espasant3
20dc664242 Translated using Weblate (Galician)
Currently translated at 40.0% (6 of 15 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/gl/
2023-01-30 19:04:45 +00:00
ewm
5cabab368f Translated using Weblate (Polish)
Currently translated at 13.3% (2 of 15 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/pl/
2023-01-30 19:04:45 +00:00
Oliebol
e512a0b327 Translated using Weblate (Dutch)
Currently translated at 6.6% (1 of 15 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/nl/
2023-01-30 19:04:45 +00:00
Espasant3
4a96392f11 Translated using Weblate (Spanish)
Currently translated at 86.6% (13 of 15 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/es/
2023-01-30 19:04:45 +00:00
ewm
74a28cb881 Translated using Weblate (Polish)
Currently translated at 90.9% (20 of 22 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/pl/
2023-01-30 19:04:45 +00:00
dontobi
cd712f5109 Translated using Weblate (German)
Currently translated at 100.0% (15 of 15 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/de/
2023-01-30 19:04:45 +00:00
Oliebol
11d5a65f04 Translated using Weblate (Dutch)
Currently translated at 81.8% (18 of 22 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/nl/
2023-01-30 19:04:45 +00:00
ghose
efc1a0b4e3 Translated using Weblate (Galician)
Currently translated at 15.3% (2 of 13 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/gl/
2023-01-30 19:04:45 +00:00
ghose
492d9e90b8 Translated using Weblate (Galician)
Currently translated at 100.0% (22 of 22 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/gl/
2023-01-30 19:04:45 +00:00
LucasGGamerM
ede4137935 It now hides everything! It still doesnt pop up though :D 2023-01-29 18:46:39 -03:00
LucasGGamerM
b625ed7aec Now it acctually shows a missing posts warning below every filtered post. Still a long way to go 2023-01-29 18:24:34 -03:00
LucasGGamerM
9a55f847b9 Its once again almost working 2023-01-28 20:19:41 -03:00
LucasGGamerM
0473062bc2 Its almost working! 2023-01-28 19:30:21 -03:00
tygyh
afbf13ef95 Translated using Weblate (Swedish)
Currently translated at 38.4% (5 of 13 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/sv/
2023-01-26 17:12:42 +00:00
HudobniVolk
8e4cff17a5 Translated using Weblate (Slovenian)
Currently translated at 46.1% (6 of 13 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/sl/
2023-01-26 17:12:42 +00:00
LamaEpik
da954ed3fd Translated using Weblate (French)
Currently translated at 15.3% (2 of 13 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/fr/
2023-01-26 17:12:42 +00:00
Andrewblasco
9d48beaebb Translated using Weblate (Spanish)
Currently translated at 100.0% (13 of 13 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/es/
2023-01-26 17:12:42 +00:00
tygyh
e607118347 Translated using Weblate (Swedish)
Currently translated at 31.8% (7 of 22 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/sv/
2023-01-26 17:12:42 +00:00
Andrewblasco
5f6dafb763 Translated using Weblate (Spanish)
Currently translated at 100.0% (22 of 22 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/es/
2023-01-26 17:12:42 +00:00
Kevin
052a000d3c Translated using Weblate (German)
Currently translated at 100.0% (22 of 22 strings)

Translation: Moshidon/values
Translate-URL: https://translate.codeberg.org/projects/moshidon/values/de/
2023-01-26 17:12:42 +00:00
Kevin
59315f81ec Translated using Weblate (German)
Currently translated at 100.0% (13 of 13 strings)

Translation: Moshidon/metadata
Translate-URL: https://translate.codeberg.org/projects/moshidon/metadata/de/
2023-01-26 17:12:42 +00:00
LucasGGamerM
b79b69d961 Adding a todo 2023-01-18 15:46:15 -03:00
LucasGGamerM
5118a1fb1e Reverting TextStatusDisplayItem to master's, as I have figured out a better way to do filters 2023-01-18 15:36:22 -03:00
LucasGGamerM
18275183d0 Merge branch 'master' into feature/filters 2023-01-18 15:28:07 -03:00
LucasGGamerM
6c778d05ea Its half working++ 2023-01-09 16:16:38 -03:00
LucasGGamerM
2d9938e8b2 Its half working 2023-01-08 21:31:01 -03:00
LucasGGamerM
1e99940c1d I have figured out something, I dont know what it is though 2023-01-08 21:01:59 -03:00
LucasGGamerM
2827bcffe3 Merge branch 'master' into feature/filters 2023-01-08 20:56:22 -03:00
LucasGGamerM
ce4e762cd5 Trying my best to make this work 2023-01-07 21:29:03 -03:00
68 changed files with 468 additions and 38 deletions

View File

@@ -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"
} }

View File

@@ -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;
} }

View File

@@ -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)

View File

@@ -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+

View File

@@ -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;

View File

@@ -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){

View File

@@ -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){

View File

@@ -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

View File

@@ -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

View File

@@ -84,6 +84,7 @@ public class LinkCardStatusDisplayItem extends StatusDisplayItem{
photo.setImageDrawable(crossfadeDrawable); photo.setImageDrawable(crossfadeDrawable);
didClear=false; didClear=false;
} }
} }
@Override @Override

View File

@@ -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){

View File

@@ -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

View File

@@ -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
} }

View File

@@ -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

View File

@@ -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(){
}
}
}

View File

@@ -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;
}
} }

View File

@@ -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>

View File

@@ -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>

View 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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>
<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> </resources>

View File

@@ -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>
<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> </resources>

View File

@@ -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>
<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> </resources>

View File

@@ -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>
<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> </resources>

View File

@@ -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>
<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> </resources>

View File

@@ -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-->

View 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

View File

@@ -0,0 +1 @@
Version 89 behebt Fehler beim Speichern von Einstellungen und verbessert die Stabilität.

View File

@@ -0,0 +1,3 @@
New things for release 90:
- The ability to have filtered posts show with a warning
- Minor bugfixes

View File

@@ -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!

View File

@@ -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

View File

@@ -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!

View File

@@ -0,0 +1 @@
Eliminación dos divisores de toots na cronoloxía principal! Isto tamén é configurábel.

View File

@@ -0,0 +1 @@
Engadindo un botón de doazón!

View File

@@ -0,0 +1 @@
Mastodon para Android pero é Material You e ten máis ferramentas

1
metadata/gl-ES/title.txt Normal file
View File

@@ -0,0 +1 @@
Moshidon

View File

@@ -0,0 +1 @@
Mastodon voor Android, maar met Material You en meer mogelijkheden

1
metadata/nl-NL/title.txt Normal file
View File

@@ -0,0 +1 @@
Moshidon

View 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
View File

@@ -0,0 +1 @@
Moshidon

View 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"

View 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!

View 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

View 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

View 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!

View 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!

View 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

View 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.

View 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

View 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

View 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.

View File

@@ -0,0 +1,9 @@
- 可以固定和重新排列时间线
- 支持仅限本地的帖文
- 缺少替代文本的指示器
- 改进的替代文本编辑器
- 跟随主题标签的时间轴标题
- 更多通知类别
- 添加回文件开启器
- 保存编辑草稿时提示
- 禁用“查看新帖文”按钮的选项

View File

@@ -0,0 +1 @@
删除主时间线上的嘟文分隔线!它也是可配置的。

View File

@@ -0,0 +1 @@
添加捐赠按钮!

View File

@@ -0,0 +1 @@
现在添加一个可选的开关,用于将发布按钮带到更容易触及的位置!现在默认了!

View File

@@ -0,0 +1,2 @@
修复发布按钮在低 DPI 或较长语言上被切断的问题。当它处于可访问状态时,它现在是一个图标!
更新日志预览的小修复

View File

@@ -0,0 +1,9 @@
Release 82 增加了很多来自上游的特性,例如:
- 草稿和定时帖文
- 设置页面返工
- 选择发布按钮文本的能力
- 减少动画的能力
- 机器人帐户配置文件的机器人图标!感谢@FineFindus
- 并更新了德语翻译!谢谢@dantobi
- 许多小的 UI 改进
- 主要的可用性改进,因为能够按住操作按钮与另一个帐户进行交互

View File

@@ -0,0 +1,4 @@
Release 83 带来了一些小的改进,例如:
- 修复点击提及时的崩溃问题
- 重做机器人图标
- 添加提醒以在您发布附件时添加图像描述,以便视障人士更好地参与。谢谢@FineFindus

View File

@@ -0,0 +1,3 @@
Release 84 修复了一些错误,例如:
- 登录回调不工作
- 更新德语翻译。谢谢@DanTobi

View File

@@ -0,0 +1,7 @@
Release 85 附带的新内容:
添加长按搜索按钮以调出键盘
在搜索选项卡中单击搜索按钮也会调出键盘
从机器人帐户中为嘟嘟声调出一个机器人图标,谢谢@FineFindus
提高帐户配置文件中机器人图标的可见性,感谢@FineFindus
更新德语翻译,谢谢@Dontobi
修复小的 UI 问题

View File

@@ -0,0 +1,4 @@
版本 86 的新内容:
- 能够堆叠通知,即:有多个通知;
- 介绍公告;
- 许多小的 UI 修复。

View File

@@ -0,0 +1,5 @@
87的新东西
- 来自 Megalodon 的新家庭布局,能够在它们之间切换是 WIP
- 更好地处理通知
- 一个新的被破坏的机器人图标
- 一堆小改进

View File

@@ -0,0 +1,6 @@
版本号 88 的新内容:
- 改进的 Fab 行为
- 更好地处理替代文本
- 为支持它的实例启用仅本地发布
- 修复一些崩溃
- 小改进

View File

@@ -0,0 +1 @@
版本 89 是一个错误修复版本,因此修复了一些崩溃以及一些未保存的设置。

View 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 的许多烦恼!

View File

@@ -0,0 +1 @@
Mastodon for Android 但它是 Material You 并且具有更多功能

1
metadata/zh-CN/title.txt Normal file
View File

@@ -0,0 +1 @@
Moshidon