From a00ca599c1c6811b68fa6b86c2427033abe9ce44 Mon Sep 17 00:00:00 2001 From: sk Date: Mon, 13 Feb 2023 17:58:27 +0100 Subject: [PATCH 01/20] add newline --- metadata/en-US/changelogs/76.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata/en-US/changelogs/76.txt b/metadata/en-US/changelogs/76.txt index 6b94016b3..a0a0dcf80 100644 --- a/metadata/en-US/changelogs/76.txt +++ b/metadata/en-US/changelogs/76.txt @@ -3,4 +3,4 @@ - Collapse/expand function for very long posts - Option to automatically prefix replys CWs with “re:” - Option to hide interaction buttons in the timeline -- Various bugfixes, tweaks and improvements \ No newline at end of file +- Various bugfixes, tweaks and improvements From dd582c4bee273234044d7aafd60bdaecb616c4ef Mon Sep 17 00:00:00 2001 From: Grishka Date: Tue, 14 Feb 2023 03:57:49 +0300 Subject: [PATCH 02/20] Update locales & bump version --- mastodon/build.gradle | 6 +++--- mastodon/src/main/res/xml/locales_config.xml | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/mastodon/build.gradle b/mastodon/build.gradle index 8dd79492f..8ddbe867b 100644 --- a/mastodon/build.gradle +++ b/mastodon/build.gradle @@ -9,10 +9,10 @@ android { applicationId "org.joinmastodon.android" minSdk 23 targetSdk 33 - versionCode 49 - versionName "1.1.5" + versionCode 50 + versionName "1.2.0" 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", "da-rDK", "de-rDE", "el-rGR", "es-rES", "eu-rES", "fa-rIR", "fi-rFI", "fil-rPH", "fr-rFR", "ga-rIE", "gd-rGB", "gl-rES", "hi-rIN", "hr-rHR", "hu-rHU", "hy-rAM", "ig-rNG", "in-rID", "is-rIS", "it-rIT", "iw-rIL", "ja-rJP", "kab", "ko-rKR", "my-rMM", "nl-rNL", "no-rNO", "oc-rFR", "pl-rPL", "pt-rBR", "pt-rPT", "ro-rRO", "ru-rRU", "si-rLK", "sl-rSI", "sv-rSE", "th-rTH", "tr-rTR", "uk-rUA", "vi-rVN", "zh-rCN", "zh-rTW" } buildTypes { diff --git a/mastodon/src/main/res/xml/locales_config.xml b/mastodon/src/main/res/xml/locales_config.xml index 6b94551e1..473134120 100644 --- a/mastodon/src/main/res/xml/locales_config.xml +++ b/mastodon/src/main/res/xml/locales_config.xml @@ -6,11 +6,13 @@ + + @@ -21,6 +23,7 @@ + @@ -28,7 +31,9 @@ + + From c05d0b600eef4e30560a70393acc32f865e443d2 Mon Sep 17 00:00:00 2001 From: sk Date: Thu, 16 Feb 2023 16:42:47 +0100 Subject: [PATCH 03/20] default role color if not provided fixes sk22#430 --- .../org/joinmastodon/android/fragments/ProfileFragment.java | 6 ++++-- mastodon/src/main/res/drawable/bg_pill.xml | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java index 5357306db..ab7f987a6 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -489,8 +489,10 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList for (Account.Role role : account.roles) { TextView roleText = new TextView(getActivity(), null, 0, R.style.role_label); roleText.setText(role.name); - GradientDrawable bg = (GradientDrawable) roleText.getBackground().mutate(); - bg.setStroke(V.dp(2), Color.parseColor(role.color)); + if (!TextUtils.isEmpty(role.color) && role.color.startsWith("#")) try { + GradientDrawable bg = (GradientDrawable) roleText.getBackground().mutate(); + bg.setStroke(V.dp(2), Color.parseColor(role.color)); + } catch (Exception ignored) {} rolesView.addView(roleText); } } diff --git a/mastodon/src/main/res/drawable/bg_pill.xml b/mastodon/src/main/res/drawable/bg_pill.xml index af6a69a4f..d2318453f 100644 --- a/mastodon/src/main/res/drawable/bg_pill.xml +++ b/mastodon/src/main/res/drawable/bg_pill.xml @@ -4,5 +4,5 @@ android:shape="rectangle"> - + \ No newline at end of file From b07858a66d0332b63a711569ca134ae3df41c2a2 Mon Sep 17 00:00:00 2001 From: sk Date: Thu, 16 Feb 2023 17:04:56 +0100 Subject: [PATCH 04/20] don't crash when language array empty --- .../src/main/java/org/joinmastodon/android/model/Instance.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java b/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java index b1cc26252..09aae3adc 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Instance.java @@ -121,7 +121,7 @@ public class Instance extends BaseModel{ ci.domain=uri; ci.normalizedDomain=IDN.toUnicode(uri); ci.description=Html.fromHtml(shortDescription).toString().trim(); - if(languages!=null){ + if(languages!=null && languages.size() > 0){ ci.language=languages.get(0); ci.languages=languages; }else{ From 6b9b6710cfd2071375f8b8f7c453c4fba6acbcfd Mon Sep 17 00:00:00 2001 From: sk Date: Thu, 16 Feb 2023 19:44:39 +0100 Subject: [PATCH 05/20] enable remote-following accounts closes sk22#431 --- .../android/fragments/ProfileFragment.java | 38 +++++++++++++++++ .../joinmastodon/android/model/Account.java | 7 +++- .../android/model/Searchable.java | 5 +++ .../joinmastodon/android/model/Status.java | 7 +++- .../displayitems/FooterStatusDisplayItem.java | 1 + .../displayitems/HeaderStatusDisplayItem.java | 4 +- .../android/ui/utils/UiUtils.java | 41 ++++++++++++++++--- .../ic_fluent_person_add_28_regular.xml | 3 ++ mastodon/src/main/res/menu/profile.xml | 3 ++ mastodon/src/main/res/menu/profile_own.xml | 3 ++ mastodon/src/main/res/values/strings_sk.xml | 2 + 11 files changed, 106 insertions(+), 8 deletions(-) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/model/Searchable.java create mode 100644 mastodon/src/main/res/drawable/ic_fluent_person_add_28_regular.xml diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java index ab7f987a6..2ca180bae 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -24,6 +24,7 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import android.view.SubMenu; import android.view.View; import android.view.ViewGroup; import android.view.ViewOutlineProvider; @@ -37,6 +38,7 @@ import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; +import android.widget.Toast; import android.widget.Toolbar; import org.joinmastodon.android.GlobalUserPreferences; @@ -298,6 +300,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList }); actionButton.setOnClickListener(this::onActionButtonClick); + actionButton.setOnLongClickListener(this::onActionButtonLongClick); notifyButton.setOnClickListener(this::onNotifyButtonClick); avatar.setOnClickListener(this::onAvatarClick); cover.setOnClickListener(this::onCoverClick); @@ -601,6 +604,16 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList return; inflater.inflate(isOwnProfile ? R.menu.profile_own : R.menu.profile, menu); UiUtils.enableOptionsMenuIcons(getActivity(), menu, R.id.bookmarks, R.id.followed_hashtags); + boolean hasMultipleAccounts = AccountSessionManager.getInstance().getLoggedInAccounts().size() > 1; + MenuItem openWithAccounts = menu.findItem(R.id.open_with_account); + openWithAccounts.setVisible(hasMultipleAccounts); + SubMenu accountsMenu = openWithAccounts.getSubMenu(); + if (hasMultipleAccounts) { + accountsMenu.clear(); + UiUtils.populateAccountsMenu(accountID, accountsMenu, s-> UiUtils.openURL( + getActivity(), s.getID(), account.url, false + )); + } menu.findItem(R.id.share).setTitle(getString(R.string.share_user, account.getShortUsername())); if(isOwnProfile) return; @@ -794,6 +807,31 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList } } + private boolean onActionButtonLongClick(View v) { + if (isOwnProfile || AccountSessionManager.getInstance().getLoggedInAccounts().size() < 2) return false; + UiUtils.pickAccount(getActivity(), accountID, R.string.sk_follow_as, R.drawable.ic_fluent_person_add_28_regular, session -> { + UiUtils.lookupAccount(getActivity(), account, session.getID(), accountID, acc -> { + if (acc == null) return; + new SetAccountFollowed(acc.id, true, true).setCallback(new Callback<>() { + @Override + public void onSuccess(Relationship relationship) { + Toast.makeText( + getActivity(), + getString(R.string.sk_followed_as, session.self.getShortUsername()), + Toast.LENGTH_SHORT + ).show(); + } + + @Override + public void onError(ErrorResponse error) { + error.showToast(getActivity()); + } + }).exec(session.getID()); + }); + }, null); + return true; + } + private void setActionProgressVisible(boolean visible){ actionButton.setTextVisible(!visible); actionProgress.setVisibility(visible ? View.VISIBLE : View.GONE); diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Account.java b/mastodon/src/main/java/org/joinmastodon/android/model/Account.java index 9f996d769..362406f85 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Account.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Account.java @@ -14,7 +14,7 @@ import java.util.List; * Represents a user of Mastodon and their associated profile. */ @Parcel -public class Account extends BaseModel{ +public class Account extends BaseModel implements Searchable{ // Base attributes /** @@ -135,6 +135,11 @@ public class Account extends BaseModel{ public List roles; + @Override + public String getQuery() { + return url; + } + @Parcel public static class Role { public String name; diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Searchable.java b/mastodon/src/main/java/org/joinmastodon/android/model/Searchable.java new file mode 100644 index 000000000..6580a3cea --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Searchable.java @@ -0,0 +1,5 @@ +package org.joinmastodon.android.model; + +public interface Searchable { + String getQuery(); +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java index 455299287..8574b520c 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java @@ -11,7 +11,7 @@ import java.time.Instant; import java.util.List; @Parcel -public class Status extends BaseModel implements DisplayItemsParent{ +public class Status extends BaseModel implements DisplayItemsParent, Searchable{ @RequiredField public String id; @RequiredField @@ -163,4 +163,9 @@ public class Status extends BaseModel implements DisplayItemsParent{ s.filtered = List.of(); return s; } + + @Override + public String getQuery() { + return url; + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java index 48634cfed..c23841fac 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java @@ -190,6 +190,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ String accountID = session.getID(); args.putString("account", accountID); UiUtils.lookupStatus(v.getContext(), item.status, accountID, item.accountID, status -> { + if (status == null) return; args.putParcelable("replyTo", Parcels.wrap(status)); Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args); }); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java index f5ce471cf..ad9279e00 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java @@ -455,7 +455,9 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ if (hasMultipleAccounts && accountsMenu != null) { openWithAccounts.setVisible(true); accountsMenu.clear(); - populateAccountsMenu(accountsMenu); + UiUtils.populateAccountsMenu(item.accountID, accountsMenu, s-> UiUtils.openURL( + item.parentFragment.getActivity(), s.getID(), item.status.url, false + )); } else if (openWithAccounts != null) { openWithAccounts.setVisible(false); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java index c2f63a038..c720958a5 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java @@ -87,6 +87,7 @@ import org.joinmastodon.android.model.Notification; import org.joinmastodon.android.model.Relationship; import org.joinmastodon.android.model.ScheduledStatus; import org.joinmastodon.android.model.SearchResults; +import org.joinmastodon.android.model.Searchable; import org.joinmastodon.android.model.Status; import org.joinmastodon.android.model.StatusPrivacy; import org.joinmastodon.android.ui.M3AlertDialogBuilder; @@ -107,8 +108,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.function.BiPredicate; import java.util.function.Consumer; +import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -982,6 +985,8 @@ public class UiUtils { public static void pickInteractAs(Context context, String accountID, Status sourceStatus, Predicate checkInteracted, InteractionPerformer interactionPerformer, @StringRes int interactAsRes, @StringRes int interactedAsAccountRes, @StringRes int alreadyInteractedRes, @DrawableRes int iconRes) { pickAccount(context, accountID, interactAsRes, iconRes, session -> { lookupStatus(context, sourceStatus, session.getID(), accountID, status -> { + if (status == null) return; + if (checkInteracted.test(status)) { Toast.makeText(context, alreadyInteractedRes, Toast.LENGTH_SHORT).show(); return; @@ -997,18 +1002,33 @@ public class UiUtils { }, null); } - public static void lookupStatus(Context context, Status queryStatus, String targetAccountID, @Nullable String sourceAccountID, Consumer statusConsumer) { + public static void lookupStatus(Context context, Status queryStatus, String targetAccountID, @Nullable String sourceAccountID, Consumer resultConsumer) { + lookup(context, queryStatus, targetAccountID, sourceAccountID, GetSearchResults.Type.STATUSES, resultConsumer, results -> + !results.statuses.isEmpty() ? Optional.of(results.statuses.get(0)) : Optional.empty() + ); + } + + public static void lookupAccount(Context context, Account queryAccount, String targetAccountID, @Nullable String sourceAccountID, Consumer resultConsumer) { + lookup(context, queryAccount, targetAccountID, sourceAccountID, GetSearchResults.Type.ACCOUNTS, resultConsumer, results -> + !results.accounts.isEmpty() ? Optional.of(results.accounts.get(0)) : Optional.empty() + ); + } + + public static void lookup(Context context, T query, String targetAccountID, @Nullable String sourceAccountID, @Nullable GetSearchResults.Type type, Consumer resultConsumer, Function> extractResult) { if (sourceAccountID != null && targetAccountID.startsWith(sourceAccountID.substring(0, sourceAccountID.indexOf('_')))) { - statusConsumer.accept(queryStatus); + resultConsumer.accept(query); return; } - new GetSearchResults(queryStatus.url, GetSearchResults.Type.STATUSES, true).setCallback(new Callback<>() { + new GetSearchResults(query.getQuery(), type, true).setCallback(new Callback<>() { @Override public void onSuccess(SearchResults results) { - if (!results.statuses.isEmpty()) statusConsumer.accept(results.statuses.get(0)); - else + Optional result = extractResult.apply(results); + if (result.isPresent()) resultConsumer.accept(result.get()); + else { Toast.makeText(context, R.string.sk_resource_not_found, Toast.LENGTH_SHORT).show(); + resultConsumer.accept(null); + } } @Override @@ -1245,6 +1265,17 @@ public class UiUtils { return intent; } + public static void populateAccountsMenu(String excludeAccountID, Menu menu, Consumer onClick) { + List sessions=AccountSessionManager.getInstance().getLoggedInAccounts(); + sessions.stream().filter(s -> !s.getID().equals(excludeAccountID)).forEach(s -> { + String username = "@"+s.self.username+"@"+s.domain; + menu.add(username).setOnMenuItemClickListener((c) -> { + onClick.accept(s); + return true; + }); + }); + } + /** * Wraps a View.OnClickListener to filter multiple clicks in succession. * Useful for buttons that perform some action that changes their state asynchronously. diff --git a/mastodon/src/main/res/drawable/ic_fluent_person_add_28_regular.xml b/mastodon/src/main/res/drawable/ic_fluent_person_add_28_regular.xml new file mode 100644 index 000000000..5fa82eb93 --- /dev/null +++ b/mastodon/src/main/res/drawable/ic_fluent_person_add_28_regular.xml @@ -0,0 +1,3 @@ + + + diff --git a/mastodon/src/main/res/menu/profile.xml b/mastodon/src/main/res/menu/profile.xml index 30679843e..e3cc847d1 100644 --- a/mastodon/src/main/res/menu/profile.xml +++ b/mastodon/src/main/res/menu/profile.xml @@ -1,5 +1,8 @@ + + + diff --git a/mastodon/src/main/res/menu/profile_own.xml b/mastodon/src/main/res/menu/profile_own.xml index 5eb30f244..61543c3e5 100644 --- a/mastodon/src/main/res/menu/profile_own.xml +++ b/mastodon/src/main/res/menu/profile_own.xml @@ -2,6 +2,9 @@ + + + diff --git a/mastodon/src/main/res/values/strings_sk.xml b/mastodon/src/main/res/values/strings_sk.xml index 1f80d4ae1..7bad22ee0 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -259,4 +259,6 @@ Fix attachments? Some attachments haven’t finished uploading. Hide interaction buttons + Follow from other account + Followed from %s \ No newline at end of file From d20f8669e8aefeab8e39a8ae8b604e3182894234 Mon Sep 17 00:00:00 2001 From: sk22 Date: Fri, 17 Feb 2023 13:20:22 +0100 Subject: [PATCH 06/20] Auto-hide FAB on scroll (#435) * feat(composeButton): hide fab on scroll * feat(composeButton): hide when scrolling in profile fragment * refactor(compose-fab): show fab after small scroll distance * refactor(compose-fab): code cleanup * feat(composeButton): hide when scrolling in profile * fix: duplicate fab var * feat(fab): show when scrolled to top * add option to turn it off --------- Co-authored-by: FineFindus <63370021+FineFindus@users.noreply.github.com> --- .../android/GlobalUserPreferences.java | 3 ++ .../fragments/AccountTimelineFragment.java | 4 ++ .../fragments/BaseStatusListFragment.java | 38 ++++++++++++++++- .../android/fragments/ProfileFragment.java | 42 ++++++++++++++++++- .../android/fragments/SettingsFragment.java | 5 +++ mastodon/src/main/res/values/strings_sk.xml | 1 + 6 files changed, 90 insertions(+), 3 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java index 4aeefc228..ce645c5c5 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java @@ -43,6 +43,7 @@ public class GlobalUserPreferences{ public static boolean bottomEncoding; public static boolean collapseLongPosts; public static boolean spectatorMode; + public static boolean autoHideFab; public static String publishButtonText; public static ThemePreference theme; public static ColorPreference color; @@ -91,6 +92,7 @@ public class GlobalUserPreferences{ bottomEncoding=prefs.getBoolean("bottomEncoding", false); collapseLongPosts=prefs.getBoolean("collapseLongPosts", true); spectatorMode=prefs.getBoolean("spectatorMode", false); + autoHideFab=prefs.getBoolean("autoHideFab", true); publishButtonText=prefs.getString("publishButtonText", ""); theme=ThemePreference.values()[prefs.getInt("theme", 0)]; recentLanguages=fromJson(prefs.getString("recentLanguages", null), recentLanguagesType, new HashMap<>()); @@ -131,6 +133,7 @@ public class GlobalUserPreferences{ .putBoolean("prefixRepliesWithRe", prefixRepliesWithRe) .putBoolean("collapseLongPosts", collapseLongPosts) .putBoolean("spectatorMode", spectatorMode) + .putBoolean("autoHideFab", autoHideFab) .putString("publishButtonText", publishButtonText) .putBoolean("bottomEncoding", bottomEncoding) .putInt("theme", theme.ordinal()) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/AccountTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/AccountTimelineFragment.java index 41311e6a3..680db45eb 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/AccountTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/AccountTimelineFragment.java @@ -3,6 +3,10 @@ package org.joinmastodon.android.fragments; import android.app.Activity; import android.os.Bundle; import android.view.View; +import android.view.animation.TranslateAnimation; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import org.joinmastodon.android.R; import org.joinmastodon.android.api.requests.accounts.GetAccountStatuses; diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index a63a1f8ab..231356c24 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -13,9 +13,12 @@ import android.text.Layout; import android.text.StaticLayout; import android.text.TextPaint; import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.WindowInsets; +import android.view.animation.TranslateAnimation; +import android.widget.ImageButton; import android.widget.ImageButton; import android.widget.Toolbar; @@ -75,10 +78,11 @@ public abstract class BaseStatusListFragment exten protected DisplayItemsAdapter adapter; protected String accountID; protected PhotoViewer currentPhotoViewer; + protected ImageButton fab; + protected int scrollDiff = 0; protected HashMap knownAccounts=new HashMap<>(); protected HashMap relationships=new HashMap<>(); protected Rect tmpRect=new Rect(); - protected ImageButton fab; public BaseStatusListFragment(){ super(20); @@ -285,11 +289,42 @@ public abstract class BaseStatusListFragment exten @Override public void onViewCreated(View view, Bundle savedInstanceState){ super.onViewCreated(view, savedInstanceState); + fab=view.findViewById(R.id.fab); list.addOnScrollListener(new RecyclerView.OnScrollListener(){ @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy){ if(currentPhotoViewer!=null) currentPhotoViewer.offsetView(-dx, -dy); + + if (fab!=null && GlobalUserPreferences.autoHideFab) { + if (dy > 0 && fab.getVisibility() == View.VISIBLE) { + TranslateAnimation animate = new TranslateAnimation( + 0, + 0, + 0, + fab.getHeight() * 2); + animate.setDuration(300); + animate.setFillAfter(true); + fab.startAnimation(animate); + fab.setVisibility(View.INVISIBLE); + scrollDiff = 0; + } else if (dy < 0 && fab.getVisibility() != View.VISIBLE) { + if (list.getChildLayoutPosition(list.getChildAt(0)) == 0 || scrollDiff > 400) { + fab.setVisibility(View.VISIBLE); + TranslateAnimation animate = new TranslateAnimation( + 0, + 0, + fab.getHeight() * 2, + 0); + animate.setDuration(300); + animate.setFillAfter(true); + fab.startAnimation(animate); + scrollDiff = 0; + } else { + scrollDiff += Math.abs(dy); + } + } + } } }); list.addItemDecoration(new StatusListItemDecoration()); @@ -327,7 +362,6 @@ public abstract class BaseStatusListFragment exten updateToolbar(); if (withComposeButton()) { - fab = view.findViewById(R.id.fab); fab.setVisibility(View.VISIBLE); fab.setOnClickListener(this::onFabClick); fab.setOnLongClickListener(this::onFabLongClick); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java index 2ca180bae..18f4b67aa 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -19,11 +19,13 @@ import android.os.Bundle; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.text.style.ImageSpan; +import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import android.view.MotionEvent; import android.view.SubMenu; import android.view.View; import android.view.ViewGroup; @@ -31,9 +33,11 @@ import android.view.ViewOutlineProvider; import android.view.ViewTreeObserver; import android.view.WindowInsets; import android.view.inputmethod.InputMethodManager; +import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.EditText; import android.widget.FrameLayout; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.RelativeLayout; @@ -144,10 +148,11 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList private Uri editNewAvatar, editNewCover; private String profileAccountID; private boolean refreshing; - private View fab; + private ImageButton fab; private WindowInsets childInsets; private PhotoViewer currentPhotoViewer; private boolean editModeLoading; + protected int scrollDiff = 0; private static final int MAX_FIELDS=4; @@ -749,6 +754,10 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList notifyButton.setContentDescription(getString(relationship.notifying ? R.string.sk_user_post_notifications_on : R.string.sk_user_post_notifications_off, '@'+account.username)); } + public ImageButton getFab() { + return fab; + } + private void onScrollChanged(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY){ int topBarsH=getToolbar().getHeight()+statusBarHeight; if(scrollY>avatarBorder.getTop()-topBarsH){ @@ -779,6 +788,37 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList if(currentPhotoViewer!=null){ currentPhotoViewer.offsetView(0, oldScrollY-scrollY); } + + if (GlobalUserPreferences.autoHideFab) { + int dy = scrollY - oldScrollY; + if (dy > 0 && fab.getVisibility() == View.VISIBLE) { + TranslateAnimation animate = new TranslateAnimation( + 0, + 0, + 0, + fab.getHeight() * 2); + animate.setDuration(300); + animate.setFillAfter(true); + fab.startAnimation(animate); + fab.setVisibility(View.INVISIBLE); + scrollDiff = 0; + } else if (dy < 0 && fab.getVisibility() != View.VISIBLE) { + if (v.getScrollY() == 0 || scrollDiff > 400) { + fab.setVisibility(View.VISIBLE); + TranslateAnimation animate = new TranslateAnimation( + 0, + 0, + fab.getHeight() * 2, + 0); + animate.setDuration(300); + animate.setFillAfter(true); + fab.startAnimation(animate); + scrollDiff = 0; + } else { + scrollDiff += Math.abs(dy); + } + } + } } private Fragment getFragmentForPage(int page){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java index 0e0d6a40d..34e7a522f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/SettingsFragment.java @@ -248,6 +248,11 @@ public class SettingsFragment extends MastodonToolbarFragment{ GlobalUserPreferences.save(); needAppRestart=true; })); + items.add(new SwitchItem(R.string.sk_settings_hide_fab, R.drawable.ic_fluent_edit_24_regular, GlobalUserPreferences.autoHideFab, i->{ + GlobalUserPreferences.autoHideFab=i.checked; + GlobalUserPreferences.save(); + needAppRestart=true; + })); items.add(new SwitchItem(R.string.sk_settings_translate_only_opened, R.drawable.ic_fluent_translate_24_regular, GlobalUserPreferences.translateButtonOpenedOnly, i->{ GlobalUserPreferences.translateButtonOpenedOnly=i.checked; GlobalUserPreferences.save(); diff --git a/mastodon/src/main/res/values/strings_sk.xml b/mastodon/src/main/res/values/strings_sk.xml index 7bad22ee0..a94de6489 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -261,4 +261,5 @@ Hide interaction buttons Follow from other account Followed from %s + Auto-hide Compose button \ No newline at end of file From b19ae9bb10aec6fc19d6b35af28194c8780e032d Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 17 Feb 2023 13:27:41 +0100 Subject: [PATCH 07/20] bump version --- mastodon/build.gradle | 4 ++-- metadata/en-US/changelogs/77.txt | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 metadata/en-US/changelogs/77.txt diff --git a/mastodon/build.gradle b/mastodon/build.gradle index 895a8f24e..60e8ba425 100644 --- a/mastodon/build.gradle +++ b/mastodon/build.gradle @@ -9,8 +9,8 @@ android { applicationId "org.joinmastodon.android.sk" minSdk 23 targetSdk 33 - versionCode 76 - versionName "1.2.0+fork.76" + versionCode 77 + versionName "1.2.0+fork.77" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" resConfigs "ar-rSA", "be-rBY", "bn-rBD", "bs-rBA", "ca-rES", "cs-rCZ", "da-rDK", "de-rDE", "el-rGR", "es-rES", "eu-rES", "fa-rIR", "fi-rFI", "fil-rPH", "fr-rFR", "ga-rIE", "gd-rGB", "gl-rES", "hi-rIN", "hr-rHR", "hu-rHU", "hy-rAM", "ig-rNG", "in-rID", "is-rIS", "it-rIT", "iw-rIL", "ja-rJP", "kab", "ko-rKR", "my-rMM", "nl-rNL", "no-rNO", "oc-rFR", "pl-rPL", "pt-rBR", "pt-rPT", "ro-rRO", "ru-rRU", "si-rLK", "sl-rSI", "sv-rSE", "th-rTH", "tr-rTR", "uk-rUA", "vi-rVN", "zh-rCN", "zh-rTW" } diff --git a/metadata/en-US/changelogs/77.txt b/metadata/en-US/changelogs/77.txt new file mode 100644 index 000000000..5ce83835c --- /dev/null +++ b/metadata/en-US/changelogs/77.txt @@ -0,0 +1,4 @@ +- Long-press follow button to follow profiles from other account +- Option to open profiles in other account +- Auto-hide compose button when scrolling down the timeline +- Fix crash when opening server admin's profiles From e0aba23e8055592caffb7624f89e6f740a80dd26 Mon Sep 17 00:00:00 2001 From: AiOO Date: Tue, 14 Feb 2023 16:38:16 +0000 Subject: [PATCH 08/20] Translated using Weblate (Korean) Currently translated at 100.0% (259 of 259 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/ko/ --- mastodon/src/main/res/values-ko-rKR/strings_sk.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/mastodon/src/main/res/values-ko-rKR/strings_sk.xml b/mastodon/src/main/res/values-ko-rKR/strings_sk.xml index 5cadd0758..462c00979 100644 --- a/mastodon/src/main/res/values-ko-rKR/strings_sk.xml +++ b/mastodon/src/main/res/values-ko-rKR/strings_sk.xml @@ -258,4 +258,5 @@ 로컬 인스턴스 전용 아주 긴 게시물 접기 관객 모드 + 상호작용 버튼 가리기 \ No newline at end of file From 4dcf32d13a79ffc7158291babb3a2def78ca2c4f Mon Sep 17 00:00:00 2001 From: poesty Date: Mon, 13 Feb 2023 17:45:14 +0000 Subject: [PATCH 09/20] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (259 of 259 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/zh_Hans/ --- mastodon/src/main/res/values-zh-rCN/strings_sk.xml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/mastodon/src/main/res/values-zh-rCN/strings_sk.xml b/mastodon/src/main/res/values-zh-rCN/strings_sk.xml index d37bd04cd..9064f2838 100644 --- a/mastodon/src/main/res/values-zh-rCN/strings_sk.xml +++ b/mastodon/src/main/res/values-zh-rCN/strings_sk.xml @@ -18,7 +18,7 @@ 这是在你的联邦宇宙中最新发布的嘟文。 Megalodon 显示回复 - 显示转发 + 显示转嘟 自动加载新嘟文 显示互动次数 Megalodon v%1$s (%2$d) @@ -82,8 +82,8 @@ 删除所有 您确定要清除所有通知吗? 在联邦宇宙上查找它 - 撤销转发 - 转发可见性 + 撤销转嘟 + 转嘟可见性 关于这个嘟文 复制链接到嘟文 您关注的标签 @@ -96,7 +96,7 @@ 用其他账号收藏 收藏为 %s 已收藏 - 用其他账号转发 + 用其他账号转嘟 重新登录为 %s 已重新登录 用其他帐号回复 @@ -223,7 +223,7 @@ 耳机 人类 地球 - 编辑转发的嘟文 + 编辑了你转嘟的嘟文 钉子 通过屏蔽并立即解除屏蔽以移除%s的关注者身份? 拍板 @@ -259,4 +259,5 @@ 折叠很长的嘟文 在回复带有内容警告的嘟文前加上 \"re:\" 旁观模式 + 隐藏互动按钮 \ No newline at end of file From 545aa16cd32f1332fb276d504cc42a42bdd4ec04 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Tue, 14 Feb 2023 16:41:23 +0000 Subject: [PATCH 10/20] Translated using Weblate (Spanish) Currently translated at 100.0% (259 of 259 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/es/ --- mastodon/src/main/res/values-es-rES/strings_sk.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/mastodon/src/main/res/values-es-rES/strings_sk.xml b/mastodon/src/main/res/values-es-rES/strings_sk.xml index 32a102d79..3899d2007 100644 --- a/mastodon/src/main/res/values-es-rES/strings_sk.xml +++ b/mastodon/src/main/res/values-es-rES/strings_sk.xml @@ -258,4 +258,5 @@ Algunos adjuntos no han terminado de subirse. Añadir \"re:\" a respuestas a Advertencias de Contenido Modo espectador + Ocultar los botones interactivos \ No newline at end of file From 7e3193a7082a8f22d18a5e13990d164d2d5242f3 Mon Sep 17 00:00:00 2001 From: Espasant3 Date: Tue, 14 Feb 2023 19:39:06 +0000 Subject: [PATCH 11/20] Translated using Weblate (Galician) Currently translated at 100.0% (259 of 259 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/gl/ --- mastodon/src/main/res/values-gl-rES/strings_sk.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mastodon/src/main/res/values-gl-rES/strings_sk.xml b/mastodon/src/main/res/values-gl-rES/strings_sk.xml index 4f8c5cf7f..9e6d97e8b 100644 --- a/mastodon/src/main/res/values-gl-rES/strings_sk.xml +++ b/mastodon/src/main/res/values-gl-rES/strings_sk.xml @@ -252,10 +252,11 @@ Resultados da enquisa Contraer Algúns arquivos adxuntos aínda non remataron de cargarse. - Prefixo resposta CW con \"re:\" + Prefixar a resposta de AC con \"re:\" Filtrados: %s Expandir Contraer publicacións moi longas Arranxar arquivos adxuntos\? Modo espectador + Ocultar botóns de interacción \ No newline at end of file From 14d3add7b3fca75545bbd3153da29fa2682b2041 Mon Sep 17 00:00:00 2001 From: McKris Date: Mon, 13 Feb 2023 18:41:07 +0000 Subject: [PATCH 12/20] Translated using Weblate (Polish) Currently translated at 100.0% (259 of 259 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/pl/ --- mastodon/src/main/res/values-pl-rPL/strings_sk.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/mastodon/src/main/res/values-pl-rPL/strings_sk.xml b/mastodon/src/main/res/values-pl-rPL/strings_sk.xml index 7e3f3cbe6..8d9970d17 100644 --- a/mastodon/src/main/res/values-pl-rPL/strings_sk.xml +++ b/mastodon/src/main/res/values-pl-rPL/strings_sk.xml @@ -257,4 +257,5 @@ Niektóre załączniki jeszcze nie zostały przesłane. Zaczynaj CW odpowiedzi od “re:” Zwijaj bardzo długie posty + Ukryj przyciski interakcji \ No newline at end of file From daf4c69df4b1cb2690a1af451a5ef1ebc9199f3d Mon Sep 17 00:00:00 2001 From: ihor_ck Date: Mon, 13 Feb 2023 18:25:52 +0000 Subject: [PATCH 13/20] Translated using Weblate (Ukrainian) Currently translated at 100.0% (259 of 259 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/uk/ --- mastodon/src/main/res/values-uk-rUA/strings_sk.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/mastodon/src/main/res/values-uk-rUA/strings_sk.xml b/mastodon/src/main/res/values-uk-rUA/strings_sk.xml index 9ae71ec9d..b6eceba40 100644 --- a/mastodon/src/main/res/values-uk-rUA/strings_sk.xml +++ b/mastodon/src/main/res/values-uk-rUA/strings_sk.xml @@ -258,4 +258,5 @@ Згортати надто довгі дописи Деякі вкладення не повністю завантажилися. Режим глядача + Сховати кнопки взаємодії \ No newline at end of file From 1c743ee3a61baf1bbaa02b7be4422f1ff60cc156 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Tue, 14 Feb 2023 16:43:21 +0000 Subject: [PATCH 14/20] Translated using Weblate (Spanish) Currently translated at 100.0% (15 of 15 strings) Translation: Megalodon/metadata Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/es/ --- metadata/es/changelogs/76.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 metadata/es/changelogs/76.txt diff --git a/metadata/es/changelogs/76.txt b/metadata/es/changelogs/76.txt new file mode 100644 index 000000000..33ed701c6 --- /dev/null +++ b/metadata/es/changelogs/76.txt @@ -0,0 +1,6 @@ +- Filtros mejorados, incluida la compatibilidad con la opción "Ocultar con advertencia" +- Página de perfil rediseñada con los metadatos directamente debajo de la biografía. +- Función de contraer/expandir para mensajes muy largos. +- Opción de anteponer automáticamente el prefijo "re:" a los mensajes de respuesta. +- Opción de ocultar los botones de interacción en la línea de tiempo +- Varias correcciones de errores, ajustes y mejoras From e2293899f01b3bea1edc5c548277c697d54aab7d Mon Sep 17 00:00:00 2001 From: AiOO Date: Tue, 14 Feb 2023 16:37:14 +0000 Subject: [PATCH 15/20] Translated using Weblate (Korean) Currently translated at 100.0% (15 of 15 strings) Translation: Megalodon/metadata Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/ko/ --- metadata/ko/changelogs/76.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 metadata/ko/changelogs/76.txt diff --git a/metadata/ko/changelogs/76.txt b/metadata/ko/changelogs/76.txt new file mode 100644 index 000000000..2546c2154 --- /dev/null +++ b/metadata/ko/changelogs/76.txt @@ -0,0 +1,6 @@ +- “경고와 함께 숨기기” 호환성 등이 개선된 필터 +- 바이오 바로 밑에 메타데이터가 보이는 리디자인된 프로필 페이지 +- 아주 긴 게시물을 위한 접기/펴기 기능 +- 열람주의 게시물에 답글을 달 때 자동으로 접두사 “re:”를 추가하는 옵션 +- 타임라인에서 상호작용 버튼을 가릴 수 있는 옵션 +- 다양한 버그 수정 및 기능 개선 From 5cd1e88da9fe220d35b610d0b183e7bd19e8b776 Mon Sep 17 00:00:00 2001 From: McKris Date: Mon, 13 Feb 2023 18:40:55 +0000 Subject: [PATCH 16/20] Translated using Weblate (Polish) Currently translated at 100.0% (15 of 15 strings) Translation: Megalodon/metadata Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/pl/ --- metadata/pl/changelogs/76.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 metadata/pl/changelogs/76.txt diff --git a/metadata/pl/changelogs/76.txt b/metadata/pl/changelogs/76.txt new file mode 100644 index 000000000..f7034a9fc --- /dev/null +++ b/metadata/pl/changelogs/76.txt @@ -0,0 +1,6 @@ +- Ulepszone filtry, w tym kompatybilność z "Ukryj z ostrzeżeniem" +- Przeprojektowana strona profilu z metadanymi bezpośrednio pod bio +- Funkcja zwijania/rozwijania dla bardzo długich postów +- Opcja automatycznego prefiksowania odpowiedzi CW z "re:" +- Opcja ukrywania przycisków interakcji na osi czasu +- Różne poprawki błędów, usprawnienia i ulepszenia From 507fcea6462f6ce01ef0e7ca822621acef2a15e6 Mon Sep 17 00:00:00 2001 From: ihor_ck Date: Mon, 13 Feb 2023 18:31:31 +0000 Subject: [PATCH 17/20] Translated using Weblate (Ukrainian) Currently translated at 100.0% (15 of 15 strings) Translation: Megalodon/metadata Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/uk/ --- metadata/uk/changelogs/76.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 metadata/uk/changelogs/76.txt diff --git a/metadata/uk/changelogs/76.txt b/metadata/uk/changelogs/76.txt new file mode 100644 index 000000000..579bcd270 --- /dev/null +++ b/metadata/uk/changelogs/76.txt @@ -0,0 +1,6 @@ +- Удосконалено фільтри, включно з сумісними зі «Сховати з попередженням» +- Перероблена сторінка профілю з метаданими безпосередньо під біографією +- Функція згортання/розгортання дуже довгих повідомлень +- Опція автоматичного додавання префікса «re:» до відповідей на CW-повідомлення +- Можливість сховати кнопки взаємодії на часовій шкалі +- Різноманітні виправлення, зміни та поліпшення From df58cdd86e27bb48cb2d7bddff12f38051c0930a Mon Sep 17 00:00:00 2001 From: Espasant3 Date: Tue, 14 Feb 2023 19:40:08 +0000 Subject: [PATCH 18/20] Translated using Weblate (Galician) Currently translated at 100.0% (15 of 15 strings) Translation: Megalodon/metadata Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/gl/ --- metadata/gl-ES/changelogs/76.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 metadata/gl-ES/changelogs/76.txt diff --git a/metadata/gl-ES/changelogs/76.txt b/metadata/gl-ES/changelogs/76.txt new file mode 100644 index 000000000..fb95eec05 --- /dev/null +++ b/metadata/gl-ES/changelogs/76.txt @@ -0,0 +1,6 @@ +- Filtros mellorados, incluíndo a compatibilidade co filtro "Ocultar con aviso" +- Páxina de perfil redeseñada coa metadata diretamente debaixo da biografía +- Función de contraer/expander publicacións moi longas +- Opción de prefixar con "re:" automaticamente as respostas a ACs (avisos de contido) +- Opción para ocultar automáticamente os botóns de interación na cronolixía +- Varias correccións de erros, axustes e melloras From af9b527f355a9e4f35dfc5e46b4618c6f47df683 Mon Sep 17 00:00:00 2001 From: sk22 Date: Fri, 17 Feb 2023 12:28:40 +0000 Subject: [PATCH 19/20] Translated using Weblate (German) Currently translated at 100.0% (262 of 262 strings) Translation: Megalodon/values Translate-URL: https://translate.codeberg.org/projects/megalodon/values/de/ --- mastodon/src/main/res/values-de-rDE/strings_sk.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mastodon/src/main/res/values-de-rDE/strings_sk.xml b/mastodon/src/main/res/values-de-rDE/strings_sk.xml index 477d33a85..83992076a 100644 --- a/mastodon/src/main/res/values-de-rDE/strings_sk.xml +++ b/mastodon/src/main/res/values-de-rDE/strings_sk.xml @@ -258,4 +258,7 @@ Anhänge richtig stellen\? Interaktions-Buttons verstecken Einige Anhänge sind nicht fertig hochgeladen. + Mit %s gefolgt + Verfassen-Button automatisch ausblenden + Mit anderem Account folgen \ No newline at end of file From 7ea42c8403e9cf83a06443efb392f42989e10076 Mon Sep 17 00:00:00 2001 From: sk22 Date: Fri, 17 Feb 2023 12:30:32 +0000 Subject: [PATCH 20/20] Translated using Weblate (German) Currently translated at 100.0% (16 of 16 strings) Translation: Megalodon/metadata Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/de/ --- metadata/de-DE/changelogs/77.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 metadata/de-DE/changelogs/77.txt diff --git a/metadata/de-DE/changelogs/77.txt b/metadata/de-DE/changelogs/77.txt new file mode 100644 index 000000000..d3d60b2c6 --- /dev/null +++ b/metadata/de-DE/changelogs/77.txt @@ -0,0 +1,4 @@ +- Folgen-Button lange drücken, um Profil von anderem Account zu folgen +- Option, um Profile mit anderem Account zu öffnen +- Verfassen-Button wird beim Scrollen automatisch ausgeblendet +- Crash beim Öffnen von Admin-Accounts behoben