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 {
|
defaultConfig {
|
||||||
minSdk 21
|
minSdk 21
|
||||||
targetSdk 32
|
targetSdk 32
|
||||||
versionCode 448
|
versionCode 449
|
||||||
versionName "3.11.2"
|
versionName "3.11.3"
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
flavorDimensions "default"
|
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",
|
"version": "3.11.2",
|
||||||
"code": "448",
|
"code": "448",
|
||||||
|
|
|
@ -322,7 +322,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
|
||||||
binding.compose.setOnClickListener(v -> startActivity(new Intent(this, ComposeActivity.class)));
|
binding.compose.setOnClickListener(v -> startActivity(new Intent(this, ComposeActivity.class)));
|
||||||
headerMenuOpen = false;
|
headerMenuOpen = false;
|
||||||
|
|
||||||
|
PushHelper.startStreaming(BaseMainActivity.this);
|
||||||
|
|
||||||
// Passing each menu ID as a set of Ids because each
|
// Passing each menu ID as a set of Ids because each
|
||||||
// menu should be considered as top level destinations.
|
// menu should be considered as top level destinations.
|
||||||
|
@ -564,21 +564,15 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
|
||||||
//Update account details
|
//Update account details
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
try {
|
try {
|
||||||
currentAccount = new Account(BaseMainActivity.this).getConnectedAccount();
|
if (currentToken == null) {
|
||||||
//Delete cache older than 7 days
|
currentToken = sharedpreferences.getString(Helper.PREF_USER_TOKEN, null);
|
||||||
new StatusCache(BaseMainActivity.this).deleteForAllAccountAfter7Days();
|
|
||||||
MutedAccounts mutedAccounts = new MutedAccounts(BaseMainActivity.this).getMutedAccount(currentAccount);
|
|
||||||
if (mutedAccounts != null && mutedAccounts.accounts != null) {
|
|
||||||
filteredAccounts = mutedAccounts.accounts;
|
|
||||||
}
|
}
|
||||||
|
currentAccount = new Account(BaseMainActivity.this).getConnectedAccount();
|
||||||
} catch (DBException e) {
|
} catch (DBException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||||
Runnable myRunnable = () -> {
|
Runnable myRunnable = () -> {
|
||||||
if (currentToken == null) {
|
|
||||||
currentToken = sharedpreferences.getString(Helper.PREF_USER_TOKEN, null);
|
|
||||||
}
|
|
||||||
if (currentAccount == null) {
|
if (currentAccount == null) {
|
||||||
//It is not, the user is redirected to the login page
|
//It is not, the user is redirected to the login page
|
||||||
Intent myIntent = new Intent(BaseMainActivity.this, LoginActivity.class);
|
Intent myIntent = new Intent(BaseMainActivity.this, LoginActivity.class);
|
||||||
|
@ -747,7 +741,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
PushHelper.startStreaming(BaseMainActivity.this);
|
|
||||||
|
|
||||||
binding.toolbarSearch.setOnSearchClickListener(v -> binding.tabLayout.setVisibility(View.VISIBLE));
|
binding.toolbarSearch.setOnSearchClickListener(v -> binding.tabLayout.setVisibility(View.VISIBLE));
|
||||||
//For receiving data from other activities
|
//For receiving data from other activities
|
||||||
|
@ -764,6 +758,30 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
|
||||||
}
|
}
|
||||||
}).start();
|
}).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
|
//Fetch recent used accounts
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -103,8 +103,6 @@ public class Status implements Serializable, Cloneable {
|
||||||
public boolean isTruncated = true;
|
public boolean isTruncated = true;
|
||||||
public boolean isFetchMore = false;
|
public boolean isFetchMore = false;
|
||||||
public PositionFetchMore positionFetchMore = PositionFetchMore.BOTTOM;
|
public PositionFetchMore positionFetchMore = PositionFetchMore.BOTTOM;
|
||||||
public boolean isMediaDisplayed = false;
|
|
||||||
public boolean isMediaObfuscated = true;
|
|
||||||
public boolean isChecked = false;
|
public boolean isChecked = false;
|
||||||
public String translationContent;
|
public String translationContent;
|
||||||
public boolean translationShown;
|
public boolean translationShown;
|
||||||
|
|
|
@ -197,7 +197,7 @@ public class MutedAccounts implements Serializable {
|
||||||
MutedAccounts mutedAccounts = getMutedAccount(forAccount);
|
MutedAccounts mutedAccounts = getMutedAccount(forAccount);
|
||||||
if (mutedAccounts != null && mutedAccounts.accounts != null) {
|
if (mutedAccounts != null && mutedAccounts.accounts != null) {
|
||||||
for (Account account : mutedAccounts.accounts) {
|
for (Account account : mutedAccounts.accounts) {
|
||||||
if (account.id.equals(target.id)) {
|
if (account != null && target != null && account.id.equals(target.id)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1537,7 +1537,7 @@ public class Helper {
|
||||||
}
|
}
|
||||||
notificationBuilder.setContentTitle(title);
|
notificationBuilder.setContentTitle(title);
|
||||||
notificationBuilder.setLargeIcon(icon);
|
notificationBuilder.setLargeIcon(icon);
|
||||||
|
notificationBuilder.setSubText(String.format("@%s@%s", account.mastodon_account.username, account.instance));
|
||||||
|
|
||||||
Notification summaryNotification = new NotificationCompat.Builder(context, channelId)
|
Notification summaryNotification = new NotificationCompat.Builder(context, channelId)
|
||||||
.setContentTitle(title)
|
.setContentTitle(title)
|
||||||
|
|
|
@ -125,7 +125,7 @@ public class SpannableHelper {
|
||||||
linkColor = link_color;
|
linkColor = link_color;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
linkColor = ThemeHelper.getAttColor(context, R.attr.linkColor);
|
linkColor = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
SpannableString initialContent;
|
SpannableString initialContent;
|
||||||
|
@ -474,7 +474,9 @@ public class SpannableHelper {
|
||||||
@Override
|
@Override
|
||||||
public void updateDrawState(@NonNull TextPaint ds) {
|
public void updateDrawState(@NonNull TextPaint ds) {
|
||||||
super.updateDrawState(ds);
|
super.updateDrawState(ds);
|
||||||
ds.setColor(linkColor);
|
if (linkColor != -1) {
|
||||||
|
ds.setColor(linkColor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||||
|
@ -701,7 +703,9 @@ public class SpannableHelper {
|
||||||
public void updateDrawState(@NonNull TextPaint ds) {
|
public void updateDrawState(@NonNull TextPaint ds) {
|
||||||
super.updateDrawState(ds);
|
super.updateDrawState(ds);
|
||||||
ds.setUnderlineText(false);
|
ds.setUnderlineText(false);
|
||||||
ds.setColor(linkColor);
|
if (linkColor != -1) {
|
||||||
|
ds.setColor(linkColor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||||
}
|
}
|
||||||
|
@ -735,7 +739,9 @@ public class SpannableHelper {
|
||||||
public void updateDrawState(@NonNull TextPaint ds) {
|
public void updateDrawState(@NonNull TextPaint ds) {
|
||||||
super.updateDrawState(ds);
|
super.updateDrawState(ds);
|
||||||
ds.setUnderlineText(false);
|
ds.setUnderlineText(false);
|
||||||
ds.setColor(linkColor);
|
if (linkColor != -1) {
|
||||||
|
ds.setColor(linkColor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||||
}
|
}
|
||||||
|
@ -772,7 +778,9 @@ public class SpannableHelper {
|
||||||
public void updateDrawState(@NonNull TextPaint ds) {
|
public void updateDrawState(@NonNull TextPaint ds) {
|
||||||
super.updateDrawState(ds);
|
super.updateDrawState(ds);
|
||||||
ds.setUnderlineText(false);
|
ds.setUnderlineText(false);
|
||||||
ds.setColor(linkColor);
|
if (linkColor != -1) {
|
||||||
|
ds.setColor(linkColor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||||
}
|
}
|
||||||
|
@ -929,7 +937,9 @@ public class SpannableHelper {
|
||||||
public void updateDrawState(@NonNull TextPaint ds) {
|
public void updateDrawState(@NonNull TextPaint ds) {
|
||||||
super.updateDrawState(ds);
|
super.updateDrawState(ds);
|
||||||
ds.setUnderlineText(false);
|
ds.setUnderlineText(false);
|
||||||
ds.setColor(linkColor);
|
if (linkColor != -1) {
|
||||||
|
ds.setColor(linkColor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||||
|
@ -1078,7 +1088,9 @@ public class SpannableHelper {
|
||||||
public void updateDrawState(@NonNull TextPaint ds) {
|
public void updateDrawState(@NonNull TextPaint ds) {
|
||||||
super.updateDrawState(ds);
|
super.updateDrawState(ds);
|
||||||
ds.setUnderlineText(false);
|
ds.setUnderlineText(false);
|
||||||
ds.setColor(linkColor);
|
if (linkColor != -1) {
|
||||||
|
ds.setColor(linkColor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
startPosition, endPosition,
|
startPosition, endPosition,
|
||||||
|
|
|
@ -137,6 +137,8 @@ public class TimelineHelper {
|
||||||
if (m.find()) {
|
if (m.find()) {
|
||||||
status.filteredByApp = filter;
|
status.filteredByApp = filter;
|
||||||
continue;
|
continue;
|
||||||
|
} else {
|
||||||
|
status.filteredByApp = null;
|
||||||
}
|
}
|
||||||
if (status.spoiler_text != null) {
|
if (status.spoiler_text != null) {
|
||||||
String spoilerText;
|
String spoilerText;
|
||||||
|
@ -147,24 +149,29 @@ public class TimelineHelper {
|
||||||
Matcher ms = p.matcher(spoilerText);
|
Matcher ms = p.matcher(spoilerText);
|
||||||
if (ms.find()) {
|
if (ms.find()) {
|
||||||
status.filteredByApp = filter;
|
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))) {
|
if (filterTimeLineType == Timeline.TimeLineEnum.HOME) {
|
||||||
Filter filterCustom = new Filter();
|
if (filteredAccounts != null && filteredAccounts.size() > 0) {
|
||||||
filterCustom.filter_action = "hide";
|
for (Status status : statuses) {
|
||||||
ArrayList<String> contextCustom = new ArrayList<>();
|
if (status.filteredByApp != null) {
|
||||||
contextCustom.add("home");
|
continue;
|
||||||
filterCustom.title = "Fedilab";
|
}
|
||||||
filterCustom.context = contextCustom;
|
for (Account account : filteredAccounts) {
|
||||||
status.filteredByApp = filterCustom;
|
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()))),
|
new WeakReference<>(holder.binding.spoiler), () -> recyclerView.post(() -> adapter.notifyItemChanged(holder.getBindingAdapterPosition()))),
|
||||||
TextView.BufferType.SPANNABLE);
|
TextView.BufferType.SPANNABLE);
|
||||||
statusToDeal.isExpended = true;
|
statusToDeal.isExpended = true;
|
||||||
statusToDeal.isMediaDisplayed = true;
|
|
||||||
} else {
|
} else {
|
||||||
holder.binding.spoilerExpand.setOnClickListener(v -> {
|
holder.binding.spoilerExpand.setOnClickListener(v -> {
|
||||||
statusToDeal.isExpended = !statusToDeal.isExpended;
|
statusToDeal.isExpended = !statusToDeal.isExpended;
|
||||||
statusToDeal.isMediaDisplayed = !statusToDeal.isMediaDisplayed;
|
|
||||||
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
|
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
|
||||||
});
|
});
|
||||||
holder.binding.spoilerExpand.setVisibility(View.VISIBLE);
|
holder.binding.spoilerExpand.setVisibility(View.VISIBLE);
|
||||||
|
@ -2025,7 +2023,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
||||||
layoutMediaBinding.viewDescription.setVisibility(View.GONE);
|
layoutMediaBinding.viewDescription.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mediaObfuscated(statusToDeal) || expand_media) {
|
if (!statusToDeal.sensitive || expand_media) {
|
||||||
layoutMediaBinding.viewHide.setImageResource(R.drawable.ic_baseline_visibility_24);
|
layoutMediaBinding.viewHide.setImageResource(R.drawable.ic_baseline_visibility_24);
|
||||||
RequestBuilder<Drawable> requestBuilder = Glide.with(layoutMediaBinding.media.getContext())
|
RequestBuilder<Drawable> requestBuilder = Glide.with(layoutMediaBinding.media.getContext())
|
||||||
.load(attachment.preview_url);
|
.load(attachment.preview_url);
|
||||||
|
@ -2051,8 +2049,8 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
||||||
}
|
}
|
||||||
|
|
||||||
layoutMediaBinding.media.setOnClickListener(v -> {
|
layoutMediaBinding.media.setOnClickListener(v -> {
|
||||||
if (statusToDeal.isMediaObfuscated && mediaObfuscated(statusToDeal) && !expand_media) {
|
if (statusToDeal.sensitive && !expand_media) {
|
||||||
statusToDeal.isMediaObfuscated = false;
|
statusToDeal.sensitive = false;
|
||||||
int position = holder.getBindingAdapterPosition();
|
int position = holder.getBindingAdapterPosition();
|
||||||
adapter.notifyItemChanged(position);
|
adapter.notifyItemChanged(position);
|
||||||
|
|
||||||
|
@ -2062,7 +2060,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onFinish() {
|
public void onFinish() {
|
||||||
statusToDeal.isMediaObfuscated = true;
|
statusToDeal.sensitive = true;
|
||||||
adapter.notifyItemChanged(position);
|
adapter.notifyItemChanged(position);
|
||||||
}
|
}
|
||||||
}.start();
|
}.start();
|
||||||
|
@ -2099,7 +2097,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
||||||
mRecyclerView = recyclerView;
|
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
|
//Media is not sensitive and doesn't have a spoiler text
|
||||||
if (!status.isMediaObfuscated) {
|
if (!status.isMediaObfuscated) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -2112,7 +2110,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
||||||
} else {
|
} else {
|
||||||
return status.sensitive;
|
return status.sensitive;
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send a broadcast to other open fragments that content a timeline
|
* Send a broadcast to other open fragments that content a timeline
|
||||||
|
|
|
@ -55,7 +55,8 @@ public class FragmentLanguageSettings extends PreferenceFragmentCompat implement
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
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) {
|
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());
|
Helper.recreateMainActivity(requireActivity());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -177,7 +177,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
|
||||||
private String publicTrendsDomain;
|
private String publicTrendsDomain;
|
||||||
private int lockForResumeCall;
|
private int lockForResumeCall;
|
||||||
private boolean isNotPinnedTimeline;
|
private boolean isNotPinnedTimeline;
|
||||||
|
private int extraCalls;
|
||||||
//Allow to recreate data when detaching/attaching fragment
|
//Allow to recreate data when detaching/attaching fragment
|
||||||
public void recreate() {
|
public void recreate() {
|
||||||
initialStatuses = null;
|
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
|
//Only fragment in main view pager should not have the view initialized
|
||||||
//AND Only the first fragment will initialize its view
|
//AND Only the first fragment will initialize its view
|
||||||
flagLoading = false;
|
flagLoading = false;
|
||||||
|
extraCalls = -1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -454,12 +455,34 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
|
||||||
min_id = fetched_statuses.pagination.min_id;
|
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) {
|
} else if (direction == DIRECTION.BOTTOM) {
|
||||||
flagLoading = true;
|
flagLoading = true;
|
||||||
}
|
}
|
||||||
if (direction == DIRECTION.SCROLL_TOP) {
|
if (direction == DIRECTION.SCROLL_TOP) {
|
||||||
binding.recyclerView.scrollToPosition(0);
|
binding.recyclerView.scrollToPosition(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -568,6 +591,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
|
||||||
flagLoading = true;
|
flagLoading = true;
|
||||||
binding.loadingNextElements.setVisibility(View.VISIBLE);
|
binding.loadingNextElements.setVisibility(View.VISIBLE);
|
||||||
router(DIRECTION.BOTTOM);
|
router(DIRECTION.BOTTOM);
|
||||||
|
extraCalls = -1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
binding.loadingNextElements.setVisibility(View.GONE);
|
binding.loadingNextElements.setVisibility(View.GONE);
|
||||||
|
@ -577,6 +601,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
|
||||||
flagLoading = true;
|
flagLoading = true;
|
||||||
binding.loadingNextElements.setVisibility(View.VISIBLE);
|
binding.loadingNextElements.setVisibility(View.VISIBLE);
|
||||||
router(DIRECTION.TOP);
|
router(DIRECTION.TOP);
|
||||||
|
extraCalls = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ public class NotificationsVM extends AndroidViewModel {
|
||||||
sortDesc(notificationList);
|
sortDesc(notificationList);
|
||||||
if (timelineParams.direction == FragmentMastodonTimeline.DIRECTION.REFRESH || timelineParams.direction == FragmentMastodonTimeline.DIRECTION.SCROLL_TOP || timelineParams.direction == FragmentMastodonTimeline.DIRECTION.FETCH_NEW) {
|
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
|
//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).isFetchMore = true;
|
||||||
notificationList.get(notificationList.size() - 1).positionFetchMore = Notification.PositionFetchMore.TOP;
|
notificationList.get(notificationList.size() - 1).positionFetchMore = Notification.PositionFetchMore.TOP;
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,7 +105,7 @@ public class TimelinesVM extends AndroidViewModel {
|
||||||
sortDesc(statusList);
|
sortDesc(statusList);
|
||||||
if (timelineParams.direction == FragmentMastodonTimeline.DIRECTION.REFRESH || timelineParams.direction == FragmentMastodonTimeline.DIRECTION.SCROLL_TOP || timelineParams.direction == FragmentMastodonTimeline.DIRECTION.FETCH_NEW) {
|
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
|
//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).isFetchMore = true;
|
||||||
statusList.get(statusList.size() - 1).positionFetchMore = Status.PositionFetchMore.TOP;
|
statusList.get(statusList.size() - 1).positionFetchMore = Status.PositionFetchMore.TOP;
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,7 @@ public class TimelinesVM extends AndroidViewModel {
|
||||||
sortDescConv(conversationList);
|
sortDescConv(conversationList);
|
||||||
if (timelineParams.direction == FragmentMastodonTimeline.DIRECTION.REFRESH || timelineParams.direction == FragmentMastodonTimeline.DIRECTION.SCROLL_TOP || timelineParams.direction == FragmentMastodonTimeline.DIRECTION.FETCH_NEW) {
|
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
|
//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).isFetchMore = true;
|
||||||
conversationList.get(conversationList.size() - 1).positionFetchMore = Conversation.PositionFetchMore.TOP;
|
conversationList.get(conversationList.size() - 1).positionFetchMore = Conversation.PositionFetchMore.TOP;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:shape="rectangle">
|
android:shape="rectangle">
|
||||||
<solid android:color="?attr/colorAccent" />
|
<solid android:color="?colorPrimary" />
|
||||||
<padding
|
<padding
|
||||||
android:left="2dp"
|
android:left="2dp"
|
||||||
android:right="2dp" />
|
android:right="2dp" />
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
android:background="@drawable/shape_counter"
|
android:background="@drawable/shape_counter"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:padding="3dp"
|
android:padding="3dp"
|
||||||
android:textColor="@color/white"
|
android:textColor="?colorOnPrimary"
|
||||||
android:textSize="11sp"
|
android:textSize="11sp"
|
||||||
tools:text="9+" />
|
tools:text="9+" />
|
||||||
</merge>
|
</merge>
|
|
@ -1232,6 +1232,27 @@
|
||||||
<item>sr</item>
|
<item>sr</item>
|
||||||
<item>uk</item>
|
<item>uk</item>
|
||||||
<item>ru</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>
|
||||||
<string-array name="SET_LIVE_TRANSLATE_VALUES" translatable="false">
|
<string-array name="SET_LIVE_TRANSLATE_VALUES" translatable="false">
|
||||||
<item>-----</item>
|
<item>-----</item>
|
||||||
|
@ -1240,13 +1261,34 @@
|
||||||
<item>Deutsch</item>
|
<item>Deutsch</item>
|
||||||
<item>Italiano</item>
|
<item>Italiano</item>
|
||||||
<item>日本語</item>
|
<item>日本語</item>
|
||||||
<item>繁體中文</item>
|
<item>中文</item>
|
||||||
<item>العربية</item>
|
<item>العربية</item>
|
||||||
<item>Português</item>
|
<item>Português</item>
|
||||||
<item>Español</item>
|
<item>Español</item>
|
||||||
<item>Српски</item>
|
<item>Српски</item>
|
||||||
<item>Українська</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>
|
||||||
<string-array name="SET_TRANSLATE_VALUES" translatable="false">
|
<string-array name="SET_TRANSLATE_VALUES" translatable="false">
|
||||||
<item>English</item>
|
<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