forked from mirrors/Fedilab
Merge branch 'develop'
This commit is contained in:
commit
376daf7c63
40 changed files with 393 additions and 56 deletions
|
@ -13,8 +13,8 @@ android {
|
|||
defaultConfig {
|
||||
minSdk 21
|
||||
targetSdk 32
|
||||
versionCode 448
|
||||
versionName "3.11.2"
|
||||
versionCode 449
|
||||
versionName "3.11.3"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
flavorDimensions "default"
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
[
|
||||
{
|
||||
"version": "3.11.3",
|
||||
"code": "449",
|
||||
"note": "Added:\n- Add more targeted languages in picker for translations\n- Add account name in push notifications\n\nFixed:\n- Fix a crash when changing language\n- Fix counter colors\n- Fix default link color\n- Fix a crash when clicking on mentions"
|
||||
},
|
||||
{
|
||||
"version": "3.11.2",
|
||||
"code": "448",
|
||||
|
|
|
@ -322,7 +322,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
|
|||
binding.compose.setOnClickListener(v -> startActivity(new Intent(this, ComposeActivity.class)));
|
||||
headerMenuOpen = false;
|
||||
|
||||
|
||||
PushHelper.startStreaming(BaseMainActivity.this);
|
||||
|
||||
// Passing each menu ID as a set of Ids because each
|
||||
// menu should be considered as top level destinations.
|
||||
|
@ -564,21 +564,15 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
|
|||
//Update account details
|
||||
new Thread(() -> {
|
||||
try {
|
||||
currentAccount = new Account(BaseMainActivity.this).getConnectedAccount();
|
||||
//Delete cache older than 7 days
|
||||
new StatusCache(BaseMainActivity.this).deleteForAllAccountAfter7Days();
|
||||
MutedAccounts mutedAccounts = new MutedAccounts(BaseMainActivity.this).getMutedAccount(currentAccount);
|
||||
if (mutedAccounts != null && mutedAccounts.accounts != null) {
|
||||
filteredAccounts = mutedAccounts.accounts;
|
||||
if (currentToken == null) {
|
||||
currentToken = sharedpreferences.getString(Helper.PREF_USER_TOKEN, null);
|
||||
}
|
||||
currentAccount = new Account(BaseMainActivity.this).getConnectedAccount();
|
||||
} catch (DBException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||
Runnable myRunnable = () -> {
|
||||
if (currentToken == null) {
|
||||
currentToken = sharedpreferences.getString(Helper.PREF_USER_TOKEN, null);
|
||||
}
|
||||
if (currentAccount == null) {
|
||||
//It is not, the user is redirected to the login page
|
||||
Intent myIntent = new Intent(BaseMainActivity.this, LoginActivity.class);
|
||||
|
@ -747,7 +741,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
|
|||
return false;
|
||||
});
|
||||
|
||||
PushHelper.startStreaming(BaseMainActivity.this);
|
||||
|
||||
|
||||
binding.toolbarSearch.setOnSearchClickListener(v -> binding.tabLayout.setVisibility(View.VISIBLE));
|
||||
//For receiving data from other activities
|
||||
|
@ -764,6 +758,30 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
|
|||
}
|
||||
}).start();
|
||||
}
|
||||
//Fetch some db values to initialize data
|
||||
new Thread(() -> {
|
||||
try {
|
||||
if (currentAccount == null) {
|
||||
if (currentToken == null || currentToken.trim().isEmpty()) {
|
||||
currentToken = sharedpreferences.getString(Helper.PREF_USER_TOKEN, null);
|
||||
}
|
||||
try {
|
||||
currentAccount = new Account(BaseMainActivity.this).getConnectedAccount();
|
||||
} catch (DBException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
MutedAccounts mutedAccounts = new MutedAccounts(BaseMainActivity.this).getMutedAccount(currentAccount);
|
||||
if (mutedAccounts != null && mutedAccounts.accounts != null) {
|
||||
filteredAccounts = mutedAccounts.accounts;
|
||||
}
|
||||
//Delete cache older than 7 days
|
||||
new StatusCache(BaseMainActivity.this).deleteForAllAccountAfter7Days();
|
||||
} catch (DBException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}).start();
|
||||
|
||||
//Fetch recent used accounts
|
||||
new Thread(() -> {
|
||||
try {
|
||||
|
|
|
@ -103,8 +103,6 @@ public class Status implements Serializable, Cloneable {
|
|||
public boolean isTruncated = true;
|
||||
public boolean isFetchMore = false;
|
||||
public PositionFetchMore positionFetchMore = PositionFetchMore.BOTTOM;
|
||||
public boolean isMediaDisplayed = false;
|
||||
public boolean isMediaObfuscated = true;
|
||||
public boolean isChecked = false;
|
||||
public String translationContent;
|
||||
public boolean translationShown;
|
||||
|
|
|
@ -197,7 +197,7 @@ public class MutedAccounts implements Serializable {
|
|||
MutedAccounts mutedAccounts = getMutedAccount(forAccount);
|
||||
if (mutedAccounts != null && mutedAccounts.accounts != null) {
|
||||
for (Account account : mutedAccounts.accounts) {
|
||||
if (account.id.equals(target.id)) {
|
||||
if (account != null && target != null && account.id.equals(target.id)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1537,7 +1537,7 @@ public class Helper {
|
|||
}
|
||||
notificationBuilder.setContentTitle(title);
|
||||
notificationBuilder.setLargeIcon(icon);
|
||||
|
||||
notificationBuilder.setSubText(String.format("@%s@%s", account.mastodon_account.username, account.instance));
|
||||
|
||||
Notification summaryNotification = new NotificationCompat.Builder(context, channelId)
|
||||
.setContentTitle(title)
|
||||
|
|
|
@ -125,7 +125,7 @@ public class SpannableHelper {
|
|||
linkColor = link_color;
|
||||
}
|
||||
} else {
|
||||
linkColor = ThemeHelper.getAttColor(context, R.attr.linkColor);
|
||||
linkColor = -1;
|
||||
}
|
||||
|
||||
SpannableString initialContent;
|
||||
|
@ -474,7 +474,9 @@ public class SpannableHelper {
|
|||
@Override
|
||||
public void updateDrawState(@NonNull TextPaint ds) {
|
||||
super.updateDrawState(ds);
|
||||
ds.setColor(linkColor);
|
||||
if (linkColor != -1) {
|
||||
ds.setColor(linkColor);
|
||||
}
|
||||
}
|
||||
|
||||
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
|
@ -701,7 +703,9 @@ public class SpannableHelper {
|
|||
public void updateDrawState(@NonNull TextPaint ds) {
|
||||
super.updateDrawState(ds);
|
||||
ds.setUnderlineText(false);
|
||||
ds.setColor(linkColor);
|
||||
if (linkColor != -1) {
|
||||
ds.setColor(linkColor);
|
||||
}
|
||||
}
|
||||
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
|
@ -735,7 +739,9 @@ public class SpannableHelper {
|
|||
public void updateDrawState(@NonNull TextPaint ds) {
|
||||
super.updateDrawState(ds);
|
||||
ds.setUnderlineText(false);
|
||||
ds.setColor(linkColor);
|
||||
if (linkColor != -1) {
|
||||
ds.setColor(linkColor);
|
||||
}
|
||||
}
|
||||
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
|
@ -772,7 +778,9 @@ public class SpannableHelper {
|
|||
public void updateDrawState(@NonNull TextPaint ds) {
|
||||
super.updateDrawState(ds);
|
||||
ds.setUnderlineText(false);
|
||||
ds.setColor(linkColor);
|
||||
if (linkColor != -1) {
|
||||
ds.setColor(linkColor);
|
||||
}
|
||||
}
|
||||
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
}
|
||||
|
@ -929,7 +937,9 @@ public class SpannableHelper {
|
|||
public void updateDrawState(@NonNull TextPaint ds) {
|
||||
super.updateDrawState(ds);
|
||||
ds.setUnderlineText(false);
|
||||
ds.setColor(linkColor);
|
||||
if (linkColor != -1) {
|
||||
ds.setColor(linkColor);
|
||||
}
|
||||
}
|
||||
|
||||
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
|
@ -1078,7 +1088,9 @@ public class SpannableHelper {
|
|||
public void updateDrawState(@NonNull TextPaint ds) {
|
||||
super.updateDrawState(ds);
|
||||
ds.setUnderlineText(false);
|
||||
ds.setColor(linkColor);
|
||||
if (linkColor != -1) {
|
||||
ds.setColor(linkColor);
|
||||
}
|
||||
}
|
||||
},
|
||||
startPosition, endPosition,
|
||||
|
|
|
@ -137,6 +137,8 @@ public class TimelineHelper {
|
|||
if (m.find()) {
|
||||
status.filteredByApp = filter;
|
||||
continue;
|
||||
} else {
|
||||
status.filteredByApp = null;
|
||||
}
|
||||
if (status.spoiler_text != null) {
|
||||
String spoilerText;
|
||||
|
@ -147,24 +149,29 @@ public class TimelineHelper {
|
|||
Matcher ms = p.matcher(spoilerText);
|
||||
if (ms.find()) {
|
||||
status.filteredByApp = filter;
|
||||
continue;
|
||||
} else {
|
||||
status.filteredByApp = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (filterTimeLineType == Timeline.TimeLineEnum.HOME) {
|
||||
if (filteredAccounts != null && filteredAccounts.size() > 0) {
|
||||
for (Account account : filteredAccounts) {
|
||||
if (account.acct.equals(status.account.acct) || (status.reblog != null && account.acct.equals(status.reblog.account.acct))) {
|
||||
Filter filterCustom = new Filter();
|
||||
filterCustom.filter_action = "hide";
|
||||
ArrayList<String> contextCustom = new ArrayList<>();
|
||||
contextCustom.add("home");
|
||||
filterCustom.title = "Fedilab";
|
||||
filterCustom.context = contextCustom;
|
||||
status.filteredByApp = filterCustom;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (filterTimeLineType == Timeline.TimeLineEnum.HOME) {
|
||||
if (filteredAccounts != null && filteredAccounts.size() > 0) {
|
||||
for (Status status : statuses) {
|
||||
if (status.filteredByApp != null) {
|
||||
continue;
|
||||
}
|
||||
for (Account account : filteredAccounts) {
|
||||
if (account.acct.equals(status.account.acct) || (status.reblog != null && account.acct.equals(status.reblog.account.acct))) {
|
||||
Filter filterCustom = new Filter();
|
||||
filterCustom.filter_action = "hide";
|
||||
ArrayList<String> contextCustom = new ArrayList<>();
|
||||
contextCustom.add("home");
|
||||
filterCustom.title = "Fedilab";
|
||||
filterCustom.context = contextCustom;
|
||||
status.filteredByApp = filterCustom;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1021,11 +1021,9 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|||
new WeakReference<>(holder.binding.spoiler), () -> recyclerView.post(() -> adapter.notifyItemChanged(holder.getBindingAdapterPosition()))),
|
||||
TextView.BufferType.SPANNABLE);
|
||||
statusToDeal.isExpended = true;
|
||||
statusToDeal.isMediaDisplayed = true;
|
||||
} else {
|
||||
holder.binding.spoilerExpand.setOnClickListener(v -> {
|
||||
statusToDeal.isExpended = !statusToDeal.isExpended;
|
||||
statusToDeal.isMediaDisplayed = !statusToDeal.isMediaDisplayed;
|
||||
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
|
||||
});
|
||||
holder.binding.spoilerExpand.setVisibility(View.VISIBLE);
|
||||
|
@ -2025,7 +2023,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|||
layoutMediaBinding.viewDescription.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
if (!mediaObfuscated(statusToDeal) || expand_media) {
|
||||
if (!statusToDeal.sensitive || expand_media) {
|
||||
layoutMediaBinding.viewHide.setImageResource(R.drawable.ic_baseline_visibility_24);
|
||||
RequestBuilder<Drawable> requestBuilder = Glide.with(layoutMediaBinding.media.getContext())
|
||||
.load(attachment.preview_url);
|
||||
|
@ -2051,8 +2049,8 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|||
}
|
||||
|
||||
layoutMediaBinding.media.setOnClickListener(v -> {
|
||||
if (statusToDeal.isMediaObfuscated && mediaObfuscated(statusToDeal) && !expand_media) {
|
||||
statusToDeal.isMediaObfuscated = false;
|
||||
if (statusToDeal.sensitive && !expand_media) {
|
||||
statusToDeal.sensitive = false;
|
||||
int position = holder.getBindingAdapterPosition();
|
||||
adapter.notifyItemChanged(position);
|
||||
|
||||
|
@ -2062,7 +2060,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|||
}
|
||||
|
||||
public void onFinish() {
|
||||
statusToDeal.isMediaObfuscated = true;
|
||||
statusToDeal.sensitive = true;
|
||||
adapter.notifyItemChanged(position);
|
||||
}
|
||||
}.start();
|
||||
|
@ -2099,7 +2097,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|||
mRecyclerView = recyclerView;
|
||||
}
|
||||
|
||||
private static boolean mediaObfuscated(Status status) {
|
||||
/* private static boolean mediaObfuscated(Status status) {
|
||||
//Media is not sensitive and doesn't have a spoiler text
|
||||
if (!status.isMediaObfuscated) {
|
||||
return false;
|
||||
|
@ -2112,7 +2110,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|||
} else {
|
||||
return status.sensitive;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
/**
|
||||
* Send a broadcast to other open fragments that content a timeline
|
||||
|
|
|
@ -55,7 +55,8 @@ public class FragmentLanguageSettings extends PreferenceFragmentCompat implement
|
|||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||
if (key.compareToIgnoreCase(getString(R.string.SET_DEFAULT_LOCALE_NEW)) == 0 || key.compareToIgnoreCase(getString(R.string.SET_TRANSLATE_VALUES_RESET)) == 0) {
|
||||
requireActivity().recreate();
|
||||
requireActivity().finish();
|
||||
startActivity(requireActivity().getIntent());
|
||||
Helper.recreateMainActivity(requireActivity());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -177,7 +177,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
|
|||
private String publicTrendsDomain;
|
||||
private int lockForResumeCall;
|
||||
private boolean isNotPinnedTimeline;
|
||||
|
||||
private int extraCalls;
|
||||
//Allow to recreate data when detaching/attaching fragment
|
||||
public void recreate() {
|
||||
initialStatuses = null;
|
||||
|
@ -290,6 +290,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
|
|||
//Only fragment in main view pager should not have the view initialized
|
||||
//AND Only the first fragment will initialize its view
|
||||
flagLoading = false;
|
||||
extraCalls = -1;
|
||||
|
||||
}
|
||||
|
||||
|
@ -454,12 +455,34 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
|
|||
min_id = fetched_statuses.pagination.min_id;
|
||||
}
|
||||
}
|
||||
int sizeBeforeFilter = 0;
|
||||
int filteredMessage = 0;
|
||||
int requestedMessages = MastodonHelper.statusesPerCall(requireActivity());
|
||||
sizeBeforeFilter = fetched_statuses.statuses.size();
|
||||
for (Status status : fetched_statuses.statuses) {
|
||||
if (status.filteredByApp != null) {
|
||||
filteredMessage++;
|
||||
}
|
||||
}
|
||||
//TODO: keep for an improvement in beta
|
||||
/*
|
||||
int displayedMessages = sizeBeforeFilter - filteredMessage;
|
||||
if(displayedMessages < 5 && extraCalls < 8) {
|
||||
router(direction);
|
||||
if(extraCalls == -1) {
|
||||
extraCalls = 1;
|
||||
} else {
|
||||
extraCalls++;
|
||||
}
|
||||
}*/
|
||||
} else if (direction == DIRECTION.BOTTOM) {
|
||||
flagLoading = true;
|
||||
}
|
||||
if (direction == DIRECTION.SCROLL_TOP) {
|
||||
binding.recyclerView.scrollToPosition(0);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -568,6 +591,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
|
|||
flagLoading = true;
|
||||
binding.loadingNextElements.setVisibility(View.VISIBLE);
|
||||
router(DIRECTION.BOTTOM);
|
||||
extraCalls = -1;
|
||||
}
|
||||
} else {
|
||||
binding.loadingNextElements.setVisibility(View.GONE);
|
||||
|
@ -577,6 +601,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
|
|||
flagLoading = true;
|
||||
binding.loadingNextElements.setVisibility(View.VISIBLE);
|
||||
router(DIRECTION.TOP);
|
||||
extraCalls = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -74,7 +74,7 @@ public class NotificationsVM extends AndroidViewModel {
|
|||
sortDesc(notificationList);
|
||||
if (timelineParams.direction == FragmentMastodonTimeline.DIRECTION.REFRESH || timelineParams.direction == FragmentMastodonTimeline.DIRECTION.SCROLL_TOP || timelineParams.direction == FragmentMastodonTimeline.DIRECTION.FETCH_NEW) {
|
||||
//When refreshing/scrolling to TOP, if last statuses fetched has a greater id from newest in cache, there is potential hole
|
||||
if (notificationList.get(notificationList.size() - 1).id.compareToIgnoreCase(timelineNotifications.get(0).id) > 0) {
|
||||
if (!timelineNotifications.contains(notificationList.get(notificationList.size() - 1))) {
|
||||
notificationList.get(notificationList.size() - 1).isFetchMore = true;
|
||||
notificationList.get(notificationList.size() - 1).positionFetchMore = Notification.PositionFetchMore.TOP;
|
||||
}
|
||||
|
|
|
@ -105,7 +105,7 @@ public class TimelinesVM extends AndroidViewModel {
|
|||
sortDesc(statusList);
|
||||
if (timelineParams.direction == FragmentMastodonTimeline.DIRECTION.REFRESH || timelineParams.direction == FragmentMastodonTimeline.DIRECTION.SCROLL_TOP || timelineParams.direction == FragmentMastodonTimeline.DIRECTION.FETCH_NEW) {
|
||||
//When refreshing/scrolling to TOP, if last statuses fetched has a greater id from newest in cache, there is potential hole
|
||||
if (statusList.get(statusList.size() - 1).id.compareToIgnoreCase(timelineStatuses.get(0).id) > 0) {
|
||||
if (!timelineStatuses.contains(statusList.get(statusList.size() - 1))) {
|
||||
statusList.get(statusList.size() - 1).isFetchMore = true;
|
||||
statusList.get(statusList.size() - 1).positionFetchMore = Status.PositionFetchMore.TOP;
|
||||
}
|
||||
|
@ -128,7 +128,7 @@ public class TimelinesVM extends AndroidViewModel {
|
|||
sortDescConv(conversationList);
|
||||
if (timelineParams.direction == FragmentMastodonTimeline.DIRECTION.REFRESH || timelineParams.direction == FragmentMastodonTimeline.DIRECTION.SCROLL_TOP || timelineParams.direction == FragmentMastodonTimeline.DIRECTION.FETCH_NEW) {
|
||||
//When refreshing/scrolling to TOP, if last statuses fetched has a greater id from newest in cache, there is potential hole
|
||||
if (conversationList.get(conversationList.size() - 1).id.compareToIgnoreCase(timelineConversations.get(0).id) > 0) {
|
||||
if (!timelineConversations.contains(conversationList.get(conversationList.size() - 1))) {
|
||||
conversationList.get(conversationList.size() - 1).isFetchMore = true;
|
||||
conversationList.get(conversationList.size() - 1).positionFetchMore = Conversation.PositionFetchMore.TOP;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="?attr/colorAccent" />
|
||||
<solid android:color="?colorPrimary" />
|
||||
<padding
|
||||
android:left="2dp"
|
||||
android:right="2dp" />
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
android:background="@drawable/shape_counter"
|
||||
android:gravity="center"
|
||||
android:padding="3dp"
|
||||
android:textColor="@color/white"
|
||||
android:textColor="?colorOnPrimary"
|
||||
android:textSize="11sp"
|
||||
tools:text="9+" />
|
||||
</merge>
|
|
@ -1232,6 +1232,27 @@
|
|||
<item>sr</item>
|
||||
<item>uk</item>
|
||||
<item>ru</item>
|
||||
<item>az</item>
|
||||
<item>ca</item>
|
||||
<item>cz</item>
|
||||
<item>da</item>
|
||||
<item>nl</item>
|
||||
<item>eo</item>
|
||||
<item>fi</item>
|
||||
<item>el</item>
|
||||
<item>he</item>
|
||||
<item>hi</item>
|
||||
<item>hu</item>
|
||||
<item>id</item>
|
||||
<item>ga</item>
|
||||
<item>ko</item>
|
||||
<item>fa</item>
|
||||
<item>pl</item>
|
||||
<item>sk</item>
|
||||
<item>sv</item>
|
||||
<item>tr</item>
|
||||
<item>uk</item>
|
||||
<item>vi</item>
|
||||
</string-array>
|
||||
<string-array name="SET_LIVE_TRANSLATE_VALUES" translatable="false">
|
||||
<item>-----</item>
|
||||
|
@ -1240,13 +1261,34 @@
|
|||
<item>Deutsch</item>
|
||||
<item>Italiano</item>
|
||||
<item>日本語</item>
|
||||
<item>繁體中文</item>
|
||||
<item>中文</item>
|
||||
<item>العربية</item>
|
||||
<item>Português</item>
|
||||
<item>Español</item>
|
||||
<item>Српски</item>
|
||||
<item>Українська</item>
|
||||
<item>Русский</item>
|
||||
<item>azərbaycan dili</item>
|
||||
<item>Català</item>
|
||||
<item>Czech</item>
|
||||
<item>Danish</item>
|
||||
<item>Nederlands</item>
|
||||
<item>Esperanto</item>
|
||||
<item>suomi</item>
|
||||
<item>Ελληνικά</item>
|
||||
<item>עברית</item>
|
||||
<item>हिन्दी</item>
|
||||
<item>magyar</item>
|
||||
<item>Bahasa Indonesia</item>
|
||||
<item>Gaeilge</item>
|
||||
<item>한국어</item>
|
||||
<item>فارسی</item>
|
||||
<item>Polski</item>
|
||||
<item>Slovakia</item>
|
||||
<item>Svenska</item>
|
||||
<item>Türkçe</item>
|
||||
<item>Українська</item>
|
||||
<item>Tiếng Việt</item>
|
||||
</string-array>
|
||||
<string-array name="SET_TRANSLATE_VALUES" translatable="false">
|
||||
<item>English</item>
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
Added:
|
||||
- Add more targeted languages in picker for translations
|
||||
- Add account name in push notifications
|
||||
|
||||
Fixed:
|
||||
- Fix a crash when changing language
|
||||
- Fix counter colors
|
||||
- Fix default link color
|
||||
- Fix a crash when clicking on mentions
|
13
src/fdroid/fastlane/metadata/android/fr/changelogs/422.txt
Normal file
13
src/fdroid/fastlane/metadata/android/fr/changelogs/422.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
Ajouté :
|
||||
- Affichage du client dans les messages détaillés
|
||||
- Support du visuel pour les citations commençant par ">"
|
||||
- Augmentation de l'indentation des fils (zéro à 20, défaut 5)
|
||||
- Visibilité des réponses publiques définies comme non-listée (peut être désactivé)
|
||||
|
||||
Changé :
|
||||
- Réduction de la taille du titre quand le texte est agrandi.
|
||||
|
||||
Résolu :
|
||||
- Filtres non-appliqués
|
||||
- Bloquer un compte ne retire pas les messages du cache
|
||||
- Quelques plantages
|
|
@ -0,0 +1,5 @@
|
|||
Résolu :
|
||||
- Ordre des notifications
|
||||
- URL lors du partage des messages boostés
|
||||
- Pages vides au redémarrage
|
||||
- Quelques plantages
|
|
@ -0,0 +1,4 @@
|
|||
Résolu :
|
||||
- Problèmes avec des messages/notifications affichés incorrectement
|
||||
- Friendica : problèmes avec les mentions et étiquettes (ouvrir le navigateur)
|
||||
- Amélioration du partage
|
|
@ -0,0 +1,9 @@
|
|||
Changé :
|
||||
- Les étiquettes sont classés par ordre de popularité dans la recherche
|
||||
|
||||
Résolu :
|
||||
- Impossible d'obtenir l'ID du client sur certains appareils
|
||||
- Les messages/notifications n'étaient pas affichés correctement
|
||||
- Notifications non-reçues
|
||||
- Friendica : problèmes avec les mentions et les étiquettes (ouvre le navigateur)
|
||||
- Amélioration du partage
|
|
@ -0,0 +1,9 @@
|
|||
Ajouté :
|
||||
- 2 nouveaux thèmes clairs
|
||||
- Fonctionnalités de modération
|
||||
|
||||
Résolu :
|
||||
- Filtres non-fonctionnels
|
||||
- Plantages avec les tendances
|
||||
- Contenu effacé lors de l'envoi de messages (mentions)
|
||||
- Autres corrections de bugs
|
16
src/fdroid/fastlane/metadata/android/fr/changelogs/427.txt
Normal file
16
src/fdroid/fastlane/metadata/android/fr/changelogs/427.txt
Normal file
|
@ -0,0 +1,16 @@
|
|||
Ajouté :
|
||||
- Suivi des balises (entrée dédiée dans le menu)
|
||||
- Réduction de la liste des langues lors de la rédaction (Paramètres > Composer)
|
||||
- Indicateur de langue lors de la rédaction
|
||||
- Les réponses sont automatiquement définies sur la langue du premier message
|
||||
- Deux nouveaux thèmes de jour
|
||||
- Plus de fonctionnalités de modération
|
||||
- Le nom de la liste peut être modifié
|
||||
|
||||
Résolu :
|
||||
- Le filtre ne fonctionne pas
|
||||
- Plantage avec les tendances
|
||||
- Problème avec les thèmes
|
||||
- Certains contenus perdus lors de l'envoi de messages (mentions)
|
||||
- Correction des blocages dans les fils chronologiques
|
||||
- Quelques autres correctifs
|
14
src/fdroid/fastlane/metadata/android/fr/changelogs/428.txt
Normal file
14
src/fdroid/fastlane/metadata/android/fr/changelogs/428.txt
Normal file
|
@ -0,0 +1,14 @@
|
|||
Ajouté :
|
||||
- Prise en charge des liens ouverts contenant /@display_name/ dans leur chemin (fonctionne sur les appareils plus anciens)
|
||||
- Afficher le nombre de réponses lorsque les compteurs sont activés
|
||||
- Ajout de la prise en charge du filtrage des messages de profil
|
||||
|
||||
Modifié :
|
||||
- La vue Composer prend toute la largeur même dans les fils
|
||||
- Réinitialiser le marqueur de notification push lors de la suppression du cache
|
||||
|
||||
Résolu :
|
||||
- Brouillon stocké lors de la réponse "non" ou l'invite de dialogue sans modifications
|
||||
- Les filtres ne fonctionnent pas avec les balises
|
||||
- Ajout d'un message d'erreur spécifique pour les balises suivies
|
||||
- Pages vides au démarrage de l'application
|
|
@ -0,0 +1,2 @@
|
|||
Ajouté :
|
||||
- Support complet des nouveaux filtres de Mastodon 4
|
|
@ -0,0 +1,5 @@
|
|||
Ajouté :
|
||||
- Visiter les profils sans être authentifié / Autoriser l'affichage de tous leurs messages
|
||||
|
||||
Corrigé :
|
||||
- L'enregistrement des médias échoue sur certains appareils
|
14
src/fdroid/fastlane/metadata/android/fr/changelogs/431.txt
Normal file
14
src/fdroid/fastlane/metadata/android/fr/changelogs/431.txt
Normal file
|
@ -0,0 +1,14 @@
|
|||
Ajouté :
|
||||
- Prise en charge complète des nouveaux filtres pour Mastodon 4
|
||||
- Visiter les profils sans être authentifié / Autoriser l'affichage de tous leurs messages
|
||||
|
||||
Modifié :
|
||||
- La vue Composer prend toute la largeur même dans les fils
|
||||
- Les comptes peuvent être mis en sourdine à partir de leur profil
|
||||
|
||||
Résolu :
|
||||
- Brouillon stocké lors de la réponse "non" ou de l'invite de dialogue sans modifications
|
||||
- Pages vides au démarrage de l'application
|
||||
- L'enregistrement et le partage de médias échouent sur certains appareils
|
||||
- Ajout de la prise en charge des notifications d'administration
|
||||
- Copier le contenu d'un message
|
13
src/fdroid/fastlane/metadata/android/fr/changelogs/432.txt
Normal file
13
src/fdroid/fastlane/metadata/android/fr/changelogs/432.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
Ajouté :
|
||||
- Liste des domaines bloqués (permet de débloquer)
|
||||
- Prise en charge des liens gemini
|
||||
- Suggestion de Suiveurs
|
||||
|
||||
Modifié :
|
||||
- Autoriser la modification du terme de recherche
|
||||
|
||||
Fixé :
|
||||
- Brouillons supprimés sans avertissement
|
||||
- L'application plante lorsque le proxy est défini
|
||||
- Filtre non synchronisé après avoir été modifié
|
||||
- Quelques plantages
|
18
src/fdroid/fastlane/metadata/android/fr/changelogs/433.txt
Normal file
18
src/fdroid/fastlane/metadata/android/fr/changelogs/433.txt
Normal file
|
@ -0,0 +1,18 @@
|
|||
Ajouté :
|
||||
- Liste des domaines bloqués (permet de débloquer)
|
||||
- Prise en charge des liens gemini
|
||||
- Suiveurs suggérés
|
||||
- Mod/Adm : gérer les domaines bloqués par l'instance
|
||||
- Ouvrir des messages avec un autre compte
|
||||
- Autoriser à désactiver les notifications pour les administrateurs
|
||||
- Trier les listes
|
||||
|
||||
Modifié :
|
||||
- Autoriser la modification du terme de recherche
|
||||
|
||||
Fixé :
|
||||
- Brouillons supprimés sans avertissement
|
||||
- Supprimer les listes de "Gérer les chronologies"
|
||||
- L'application plante lorsque le proxy est défini
|
||||
- Filtre non synchronisé après avoir été modifié
|
||||
- Quelques plantages / améliorations
|
12
src/fdroid/fastlane/metadata/android/fr/changelogs/434.txt
Normal file
12
src/fdroid/fastlane/metadata/android/fr/changelogs/434.txt
Normal file
|
@ -0,0 +1,12 @@
|
|||
Ajouté :
|
||||
- Silencer les tags par un appui long dans les timelines
|
||||
|
||||
Changé :
|
||||
- Les messages de comptes silencés sont à présent retirés du cache
|
||||
|
||||
Résolu :
|
||||
- Ouvrir avec un autre compte
|
||||
- Correction des sauts dans les profils
|
||||
- Médias non-affichés dans les albums → Force l'indexation
|
||||
- Le navigateur web intégré n'affiche pas le niveau admin
|
||||
- Quelques plantages
|
|
@ -0,0 +1,9 @@
|
|||
Ajouté :
|
||||
- Migration vers Material Design 3
|
||||
- 5 thèmes (Clair, Sombre, Solarized Clair/Sombre, Noir)
|
||||
- Basculement automatique entre Clair/Sombre
|
||||
- Les thèmes Clair et Sombre peuvent être définis en fonction de l'heure
|
||||
- Android 12+ : Couleur dynamique
|
||||
|
||||
Résolu :
|
||||
- Sauts dans les timelines
|
10
src/fdroid/fastlane/metadata/android/fr/changelogs/436.txt
Normal file
10
src/fdroid/fastlane/metadata/android/fr/changelogs/436.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
Changé :
|
||||
- Retrait du support du navigateur web intégré
|
||||
- Plus d'espace entre les boutons d'action des messages
|
||||
|
||||
Résolu :
|
||||
- Problème de taille du texte
|
||||
- Chevauchement de texte
|
||||
- Mauvais fond pour le thème Solarized Sombre
|
||||
- Mélange entre les thèmes Clair et Sombre
|
||||
- Bouton de sauvegarde caché
|
14
src/fdroid/fastlane/metadata/android/fr/changelogs/437.txt
Normal file
14
src/fdroid/fastlane/metadata/android/fr/changelogs/437.txt
Normal file
|
@ -0,0 +1,14 @@
|
|||
Ajouté :
|
||||
- Nouvelle apparence avec 5 thèmes
|
||||
|
||||
Changé :
|
||||
- Retrait du support du navigateur web intégré
|
||||
- Ajuster l'image d'aperçu affiche l'image verticalement
|
||||
- Ajout des compteurs à côté des images
|
||||
|
||||
Résolu :
|
||||
- Saut dans les timelines
|
||||
- Réponses aux mauvais messages avec les instances suivies
|
||||
- Bogue avec Supprimer & Réécrire avec un média
|
||||
- Liste ne peut pas être caché
|
||||
- Quelques plantages
|
|
@ -0,0 +1,6 @@
|
|||
Changé :
|
||||
- Retrait de la carte de présentation
|
||||
- Couleur des liens pour le thème Sombre
|
||||
|
||||
Résolu :
|
||||
- Crash lors du changement de thème
|
|
@ -0,0 +1,4 @@
|
|||
Résolu :
|
||||
- Les émojis personnalisés ne sont pas toujours affichés
|
||||
- Sauts dans les timelines quand "ajuster les images" est utilisé
|
||||
- Thème sombre : boutons de timeline sans toggle
|
|
@ -0,0 +1,3 @@
|
|||
Résolu :
|
||||
- Sauts lors du défilement avec ajustement des images
|
||||
- Bouton de récupération cassé avec le cache
|
11
src/fdroid/fastlane/metadata/android/fr/changelogs/442.txt
Normal file
11
src/fdroid/fastlane/metadata/android/fr/changelogs/442.txt
Normal file
|
@ -0,0 +1,11 @@
|
|||
Ajouté :
|
||||
- Thème Dracula
|
||||
|
||||
Changé :
|
||||
- Couleurs des thèmes Clair/Sombre/Noir
|
||||
|
||||
Résolu :
|
||||
- Images animés de profils non-affichées
|
||||
- Mentions cassées dans les descriptions et champs de profil
|
||||
- Les modèles de balises dans les URL cassent les liens
|
||||
- Faute de frappe dans les tags suivis
|
16
src/fdroid/fastlane/metadata/android/fr/changelogs/443.txt
Normal file
16
src/fdroid/fastlane/metadata/android/fr/changelogs/443.txt
Normal file
|
@ -0,0 +1,16 @@
|
|||
Ajouté :
|
||||
- Thème Dracula
|
||||
- Couleurs de messages personnalisées
|
||||
- Activer/Désactiver les cartes de présentation
|
||||
|
||||
Changé :
|
||||
- Couleurs pour certains thèmes
|
||||
- Espaces entre les boutons
|
||||
|
||||
Résolu :
|
||||
- Images animés sur les profils non-affichées
|
||||
- Mentions cassées dans les descriptions et champs de profil
|
||||
- Sauts lors du défilement avec les ajustements de miniatures
|
||||
- Bouton de récupération cassé avec le cache
|
||||
- Les modèles de balises dans les URL cassent les liens
|
||||
- Faute de frappe dans les tags suivis
|
|
@ -0,0 +1,4 @@
|
|||
Ajouté :
|
||||
- Afficher tous les messages d'une enfilade depuis l'instance distante (si possible)
|
||||
* Seulement pour les messages publiques des instances utilisant l'API Mastodon
|
||||
* Un bouton dédié est affiché en haut à droite quand les conditions sont remplies.
|
11
src/fdroid/fastlane/metadata/android/fr/changelogs/445.txt
Normal file
11
src/fdroid/fastlane/metadata/android/fr/changelogs/445.txt
Normal file
|
@ -0,0 +1,11 @@
|
|||
Ajouté :
|
||||
- Permettre de rétablir/ne plus suivre/désépingler une étiquette depuis les timelines des étiquettes
|
||||
- Automatiquement ajouter l'étiquette quand on écrit depuis une timeline d'étiquette
|
||||
- Ajout d'un bouton de traduction en bas des messages (par défaut : désactivé)
|
||||
- Ajout des rôles de comptes dans les profils
|
||||
|
||||
Résolu :
|
||||
- Contact impossible quand on écrit
|
||||
- Barre de status pour le thème Noir
|
||||
- Message dupliqué dans les conversations lorsque édité
|
||||
- Problème de couleur sur Android 5
|
Loading…
Reference in a new issue