Compare commits

..

66 Commits

Author SHA1 Message Date
LucasGGamerM
c837a2d4b6 Bumping version number 2022-12-21 09:28:19 -03:00
LucasGGamerM
70b91b7a9a Fixing npe on timeline 2022-12-21 09:27:16 -03:00
LucasGGamerM
27079a7ec5 Version 69 is special, lmao 2022-12-20 19:56:49 -03:00
LucasGGamerM
9563df0574 Making it appear in every post that isnt on the default language and that allows translation. Merge this as well @sk22, as its a rather useful thing 2022-12-20 19:22:42 -03:00
LucasGGamerM
638209cc13 Renaming string to fix the translate_post error message 2022-12-20 18:51:59 -03:00
LucasGGamerM
224c731afa Merge remote-tracking branch 'origin/develop' into develop 2022-12-20 17:43:38 -03:00
LucasGGamerM
0bbf937531 Please merge this @sk22, its a transparency filter for when the translation is loading 2022-12-20 17:42:47 -03:00
LucasGGamerM
3556c92c3e Please merge this @sk22 2022-12-20 17:35:40 -03:00
LucasGGamerM
87c5b23196 Re-re-cleaning unused things. 2022-12-20 17:13:17 -03:00
LucasGGamerM
c83910c885 Cleaning up the old implementation 2022-12-20 17:09:34 -03:00
LucasGGamerM
586622e90d Its barely working. Huge thanks to @sk22 btw 2022-12-20 16:52:48 -03:00
sk
e5e2430e03 check if server supports translation earlier
closes #172
2022-12-20 16:28:22 -03:00
sk
04bfdba50e Adding translate button from megalodon 2022-12-20 16:28:19 -03:00
sk
7abf15e9e0 use primary color for update notification
closes #169
2022-12-20 16:16:52 -03:00
Grishka
6b680831b8 Fix #472 2022-12-20 16:12:54 -03:00
sk
6cbf100828 fire counter updated event for content status
see mastodon#467
closes sk22#173
2022-12-20 14:12:46 -03:00
sk
3e7bbebe7f fix counter updates for preloaded data
re: mastodon#467
see fb5289372d
2022-12-20 14:12:46 -03:00
sk
56d344045a add drag to open to visibility button 2022-12-20 14:12:45 -03:00
LucasGGamerM
7ab634cc08 Renaming megalodon to moshidon 2022-12-20 14:12:01 -03:00
sk
9f0db3ebb5 update strings 2022-12-20 13:58:41 -03:00
sk22
6415eb8590 Translated using Weblate (German)
Currently translated at 100.0% (70 of 70 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/de/
2022-12-20 13:58:30 -03:00
AiOO
87c77b84a4 Translated using Weblate (Korean)
Currently translated at 100.0% (8 of 8 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/ko/
2022-12-20 13:57:37 -03:00
jonta
0b7bb16f22 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (8 of 8 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/pt_BR/
2022-12-20 13:57:37 -03:00
jonta
5164b5ba78 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (62 of 62 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/pt_BR/
2022-12-20 13:57:37 -03:00
gallegonovato
f3c28bc66a Translated using Weblate (Spanish)
Currently translated at 100.0% (62 of 62 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/es/
2022-12-20 13:57:36 -03:00
itslameni
239f7eb9e7 Translated using Weblate (Russian)
Currently translated at 37.5% (3 of 8 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/ru/
2022-12-20 13:57:21 -03:00
Linerly
d6daf7a553 Translated using Weblate (Indonesian)
Currently translated at 100.0% (8 of 8 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/id/
2022-12-20 13:57:21 -03:00
Radiquum
dfb3b230e6 Translated using Weblate (Russian)
Currently translated at 100.0% (62 of 62 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/ru/
2022-12-20 13:57:21 -03:00
Linerly
484a5c878f Translated using Weblate (Indonesian)
Currently translated at 100.0% (62 of 62 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/id/
2022-12-20 13:57:20 -03:00
Choukajohn
3f27cfb13b Translated using Weblate (French)
Currently translated at 100.0% (62 of 62 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/fr/
2022-12-20 13:57:15 -03:00
AiOO
38e2ba6ccd Translated using Weblate (Korean)
Currently translated at 100.0% (62 of 62 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/ko/
2022-12-20 13:57:03 -03:00
sk
3dad38e614 update strings 2022-12-20 13:57:02 -03:00
sk
0865c9d1bd update german 2022-12-20 13:57:02 -03:00
LucasGGamerM
20a8783d84 Making the icons good again in the profile page 2022-12-20 13:45:10 -03:00
LucasGGamerM
0b96fb05fc Bumping version number 2022-12-18 20:57:47 -03:00
LucasGGamerM
8767d62de7 Fixing a fucking NPE 2022-12-18 20:54:42 -03:00
LucasGGamerM
74fb04e2d4 Disabling the Translate button on statuses that are from the same default language, or that are private or direct messages. 2022-12-18 20:04:32 -03:00
LucasGGamerM
2537460e16 Tis broken 2022-12-18 19:43:48 -03:00
LucasGGamerM
be3dfde3be Changing out (again) the link back to moshidons github 2022-12-18 17:58:21 -03:00
LucasGGamerM
42025035ad Caching the status translation for easier use 2022-12-18 17:57:09 -03:00
LucasGGamerM
6a667fdf32 Bump version number 2022-12-18 14:11:18 -03:00
LucasGGamerM
bfafac3d4f Fixing the translate icon tint, changing translate icon to fluent icon. Making it better overall 2022-12-18 14:09:21 -03:00
LucasGGamerM
0cafbe9f91 Logic side done for the red theme. 2022-12-18 12:54:17 -03:00
LucasGGamerM
2fbf172729 Styles and colors.xml side done. Putting a string in there as well :D 2022-12-18 12:41:40 -03:00
sk
bb9755f4af Making the boost icon better 2022-12-18 11:12:55 -03:00
LucasGGamerM
2a01377a8a Why tf did this revert to the old thing? 2022-12-18 11:04:47 -03:00
LucasGGamerM
61cc6d5d07 Checking out of the account list fragment thing 2022-12-18 11:04:32 -03:00
LucasGGamerM
1d74a37f60 Dunno why, just want to commit this 2022-12-18 11:04:05 -03:00
LucasGGamerM
ef9645f9e7 Ranaming stuffs back to moshidon 2022-12-18 11:02:51 -03:00
sk
6a103ca3f3 fix text view cutting off text
closes #157
2022-12-18 10:52:01 -03:00
LucasGGamerM
c22772121b Ranaming stuffs back to moshidon 2022-12-17 21:23:52 -03:00
kaea
de7bc69d2a Translated using Weblate (Polish)
Currently translated at 100.0% (59 of 59 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/pl/
2022-12-17 21:21:55 -03:00
itslameni
2eccd572c9 Translated using Weblate (Russian)
Currently translated at 37.5% (3 of 8 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/ru/
2022-12-17 21:21:55 -03:00
itslameni
824a62024b A whole lot of stuffs, including merging stuffs from weblate 2022-12-17 21:21:54 -03:00
tippete
3a3cfda919 Translated using Weblate (Italian)
Currently translated at 100.0% (59 of 59 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/it/
2022-12-17 21:21:05 -03:00
AiOO
e29120cc51 Translated using Weblate (Korean)
Currently translated at 100.0% (8 of 8 strings)

Translation: Megalodon/metadata
Translate-URL: https://translate.codeberg.org/projects/megalodon/metadata/ko/
2022-12-17 21:21:03 -03:00
nitrogenez
197d5c6bc3 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (59 of 59 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/uk/
2022-12-17 21:21:00 -03:00
jonta
d143cc75db Translated using Weblate (Portuguese (Brazil))
Currently translated at 93.2% (55 of 59 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/pt_BR/
2022-12-17 21:21:00 -03:00
kaea
1635a06c54 Translated using Weblate (Polish)
Currently translated at 100.0% (59 of 59 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/pl/
2022-12-17 21:21:00 -03:00
Choukajohn
76de0d8c70 Translated using Weblate (French)
Currently translated at 100.0% (59 of 59 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/fr/
2022-12-17 21:21:00 -03:00
AiOO
402a995b8f Translated using Weblate (Korean)
Currently translated at 100.0% (59 of 59 strings)

Translation: Megalodon/values
Translate-URL: https://translate.codeberg.org/projects/megalodon/values/ko/
2022-12-17 21:21:00 -03:00
sk
f580ba7779 Refactoring names to custom. Thank you @sk22 for this amazing piece of commit 2022-12-17 21:19:40 -03:00
sk
bc3869b920 fix follow request list issues
closes #153
2022-12-17 21:09:56 -03:00
LucasGGamerM
020f4a5a1a Hiding material you in older android versions fix 2022-12-17 21:00:02 -03:00
sk
b054caa967 Hiding material you in older android versions 2022-12-17 20:52:11 -03:00
LucasGGamerM
82b7633650 Renaming stuff 2022-12-16 19:13:11 -03:00
67 changed files with 706 additions and 432 deletions

View File

@@ -1,4 +1,4 @@
![Pink logo with pink shark](mastodon/src/main/res/mipmap-xhdpi/ic_launcher_round.png) ![MoshidonLogo](mastodon/src/main/res/mipmap-xhdpi/ic_launcher_round.png)
# Moshidon, the material you mastodon client! # Moshidon, the material you mastodon client!

View File

@@ -9,8 +9,8 @@ android {
applicationId "org.joinmastodon.android.moshinda" applicationId "org.joinmastodon.android.moshinda"
minSdk 23 minSdk 23
targetSdk 33 targetSdk 33
versionCode 66 versionCode 70
versionName "1.1.4+fork.66.moshinda" versionName "1.1.4+fork.70.moshinda"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
resConfigs "ar-rSA", "be-rBY", "bn-rBD", "bs-rBA", "ca-rES", "cs-rCZ", "de-rDE", "el-rGR", "es-rES", "eu-rES", "fi-rFI", "fil-rPH", "fr-rFR", "ga-rIE", "gd-rGB", "gl-rES", "hi-rIN", "hr-rHR", "hu-rHU", "hy-rAM", "in-rID", "is-rIS", "it-rIT", "iw-rIL", "ja-rJP", "kab", "ko-rKR", "nl-rNL", "oc-rFR", "pl-rPL", "pt-rBR", "pt-rPT", "ro-rRO", "ru-rRU", "si-rLK", "sl-rSI", "sv-rSE", "th-rTH", "tr-rTR", "uk-rUA", "vi-rVN", "zh-rCN", "zh-rTW" resConfigs "ar-rSA", "be-rBY", "bn-rBD", "bs-rBA", "ca-rES", "cs-rCZ", "de-rDE", "el-rGR", "es-rES", "eu-rES", "fi-rFI", "fil-rPH", "fr-rFR", "ga-rIE", "gd-rGB", "gl-rES", "hi-rIN", "hr-rHR", "hu-rHU", "hy-rAM", "in-rID", "is-rIS", "it-rIT", "iw-rIL", "ja-rJP", "kab", "ko-rKR", "nl-rNL", "oc-rFR", "pl-rPL", "pt-rBR", "pt-rPT", "ro-rRO", "ru-rRU", "si-rLK", "sl-rSI", "sv-rSE", "th-rTH", "tr-rTR", "uk-rUA", "vi-rVN", "zh-rCN", "zh-rTW"
} }

View File

@@ -90,7 +90,8 @@ public class GlobalUserPreferences{
GREEN, GREEN,
BLUE, BLUE,
ORANGE, ORANGE,
YELLOW YELLOW,
RED
} }
public enum ThemePreference{ public enum ThemePreference{

View File

@@ -16,7 +16,7 @@ import org.joinmastodon.android.fragments.HomeFragment;
import org.joinmastodon.android.fragments.ProfileFragment; import org.joinmastodon.android.fragments.ProfileFragment;
import org.joinmastodon.android.fragments.ThreadFragment; import org.joinmastodon.android.fragments.ThreadFragment;
import org.joinmastodon.android.fragments.onboarding.AccountActivationFragment; import org.joinmastodon.android.fragments.onboarding.AccountActivationFragment;
import org.joinmastodon.android.fragments.onboarding.MoshidonLoginFragment; import org.joinmastodon.android.fragments.onboarding.CustomLoginFragment;
import org.joinmastodon.android.model.Notification; import org.joinmastodon.android.model.Notification;
import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.utils.UiUtils;
import org.joinmastodon.android.updater.GithubSelfUpdater; import org.joinmastodon.android.updater.GithubSelfUpdater;
@@ -33,7 +33,7 @@ public class MainActivity extends FragmentStackActivity{
if(savedInstanceState==null){ if(savedInstanceState==null){
if(AccountSessionManager.getInstance().getLoggedInAccounts().isEmpty()){ if(AccountSessionManager.getInstance().getLoggedInAccounts().isEmpty()){
showFragmentClearingBackStack(new MoshidonLoginFragment()); showFragmentClearingBackStack(new CustomLoginFragment());
}else{ }else{
AccountSessionManager.getInstance().maybeUpdateLocalInfo(); AccountSessionManager.getInstance().maybeUpdateLocalInfo();
AccountSession session; AccountSession session;

View File

@@ -11,6 +11,7 @@ import org.joinmastodon.android.events.StatusCountersUpdatedEvent;
import org.joinmastodon.android.model.Status; import org.joinmastodon.android.model.Status;
import java.util.HashMap; import java.util.HashMap;
import java.util.function.Consumer;
import me.grishka.appkit.api.Callback; import me.grishka.appkit.api.Callback;
import me.grishka.appkit.api.ErrorResponse; import me.grishka.appkit.api.ErrorResponse;
@@ -25,7 +26,7 @@ public class StatusInteractionController{
this.accountID=accountID; this.accountID=accountID;
} }
public void setFavorited(Status status, boolean favorited){ public void setFavorited(Status status, boolean favorited, Consumer<Status> cb){
if(!Looper.getMainLooper().isCurrentThread()) if(!Looper.getMainLooper().isCurrentThread())
throw new IllegalStateException("Can only be called from main thread"); throw new IllegalStateException("Can only be called from main thread");
@@ -38,6 +39,8 @@ public class StatusInteractionController{
@Override @Override
public void onSuccess(Status result){ public void onSuccess(Status result){
runningFavoriteRequests.remove(status.id); runningFavoriteRequests.remove(status.id);
result.favouritesCount = Math.max(0, status.favouritesCount) + (favorited ? 1 : -1);
cb.accept(result);
E.post(new StatusCountersUpdatedEvent(result)); E.post(new StatusCountersUpdatedEvent(result));
} }
@@ -46,24 +49,17 @@ public class StatusInteractionController{
runningFavoriteRequests.remove(status.id); runningFavoriteRequests.remove(status.id);
error.showToast(MastodonApp.context); error.showToast(MastodonApp.context);
status.favourited=!favorited; status.favourited=!favorited;
if(favorited) cb.accept(status);
status.favouritesCount--;
else
status.favouritesCount++;
E.post(new StatusCountersUpdatedEvent(status)); E.post(new StatusCountersUpdatedEvent(status));
} }
}) })
.exec(accountID); .exec(accountID);
runningFavoriteRequests.put(status.id, req); runningFavoriteRequests.put(status.id, req);
status.favourited=favorited; status.favourited=favorited;
if(favorited)
status.favouritesCount++;
else
status.favouritesCount--;
E.post(new StatusCountersUpdatedEvent(status)); E.post(new StatusCountersUpdatedEvent(status));
} }
public void setReblogged(Status status, boolean reblogged){ public void setReblogged(Status status, boolean reblogged, Consumer<Status> cb){
if(!Looper.getMainLooper().isCurrentThread()) if(!Looper.getMainLooper().isCurrentThread())
throw new IllegalStateException("Can only be called from main thread"); throw new IllegalStateException("Can only be called from main thread");
@@ -74,8 +70,11 @@ public class StatusInteractionController{
SetStatusReblogged req=(SetStatusReblogged) new SetStatusReblogged(status.id, reblogged) SetStatusReblogged req=(SetStatusReblogged) new SetStatusReblogged(status.id, reblogged)
.setCallback(new Callback<>(){ .setCallback(new Callback<>(){
@Override @Override
public void onSuccess(Status result){ public void onSuccess(Status reblog){
Status result = reblog.getContentStatus();
runningReblogRequests.remove(status.id); runningReblogRequests.remove(status.id);
result.reblogsCount = Math.max(0, status.reblogsCount) + (reblogged ? 1 : -1);
cb.accept(result);
E.post(new StatusCountersUpdatedEvent(result)); E.post(new StatusCountersUpdatedEvent(result));
} }
@@ -84,24 +83,21 @@ public class StatusInteractionController{
runningReblogRequests.remove(status.id); runningReblogRequests.remove(status.id);
error.showToast(MastodonApp.context); error.showToast(MastodonApp.context);
status.reblogged=!reblogged; status.reblogged=!reblogged;
if(reblogged) cb.accept(status);
status.reblogsCount--;
else
status.reblogsCount++;
E.post(new StatusCountersUpdatedEvent(status)); E.post(new StatusCountersUpdatedEvent(status));
} }
}) })
.exec(accountID); .exec(accountID);
runningReblogRequests.put(status.id, req); runningReblogRequests.put(status.id, req);
status.reblogged=reblogged; status.reblogged=reblogged;
if(reblogged)
status.reblogsCount++;
else
status.reblogsCount--;
E.post(new StatusCountersUpdatedEvent(status)); E.post(new StatusCountersUpdatedEvent(status));
} }
public void setBookmarked(Status status, boolean bookmarked){ public void setBookmarked(Status status, boolean bookmarked){
setBookmarked(status, bookmarked, r->{});
}
public void setBookmarked(Status status, boolean bookmarked, Consumer<Status> cb){
if(!Looper.getMainLooper().isCurrentThread()) if(!Looper.getMainLooper().isCurrentThread())
throw new IllegalStateException("Can only be called from main thread"); throw new IllegalStateException("Can only be called from main thread");
@@ -114,6 +110,7 @@ public class StatusInteractionController{
@Override @Override
public void onSuccess(Status result){ public void onSuccess(Status result){
runningBookmarkRequests.remove(status.id); runningBookmarkRequests.remove(status.id);
cb.accept(result);
E.post(new StatusCountersUpdatedEvent(result)); E.post(new StatusCountersUpdatedEvent(result));
} }
@@ -122,6 +119,7 @@ public class StatusInteractionController{
runningBookmarkRequests.remove(status.id); runningBookmarkRequests.remove(status.id);
error.showToast(MastodonApp.context); error.showToast(MastodonApp.context);
status.bookmarked=!bookmarked; status.bookmarked=!bookmarked;
cb.accept(status);
E.post(new StatusCountersUpdatedEvent(status)); E.post(new StatusCountersUpdatedEvent(status));
} }
}) })

View File

@@ -1,20 +0,0 @@
package org.joinmastodon.android.api.requests.statuses;
import org.joinmastodon.android.api.AllFieldsAreRequired;
import org.joinmastodon.android.api.MastodonAPIRequest;
import org.joinmastodon.android.model.BaseModel;
import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.model.StatusTranslation;
import java.util.Locale;
public class GetStatusTranslation extends MastodonAPIRequest<StatusTranslation>{
public GetStatusTranslation(String id){
super(HttpMethod.POST, "/statuses/"+id+"/translate", StatusTranslation.class);
Request r = new Request();
setRequestBody(r);
}
public static class Request{
}
}

View File

@@ -0,0 +1,11 @@
package org.joinmastodon.android.api.requests.statuses;
import org.joinmastodon.android.api.MastodonAPIRequest;
import org.joinmastodon.android.model.TranslatedStatus;
public class TranslateStatus extends MastodonAPIRequest<TranslatedStatus> {
public TranslateStatus(String id) {
super(HttpMethod.POST, "/statuses/"+id+"/translate", TranslatedStatus.class);
setRequestBody(new Object());
}
}

View File

@@ -104,6 +104,7 @@ public class AccountSessionManager{
public void addAccount(Instance instance, Token token, Account self, Application app, AccountActivationInfo activationInfo){ public void addAccount(Instance instance, Token token, Account self, Application app, AccountActivationInfo activationInfo){
instances.put(instance.uri, instance); instances.put(instance.uri, instance);
updateInstanceInfoV2(instance);
AccountSession session=new AccountSession(token, self, app, instance.uri, activationInfo==null, activationInfo); AccountSession session=new AccountSession(token, self, app, instance.uri, activationInfo==null, activationInfo);
sessions.put(session.getID(), session); sessions.put(session.getID(), session);
lastActiveAccountID=session.getID(); lastActiveAccountID=session.getID();
@@ -329,9 +330,7 @@ public class AccountSessionManager{
instances.put(domain, instance); instances.put(domain, instance);
updateInstanceEmojis(instance, domain); updateInstanceEmojis(instance, domain);
try { try {
if (Integer.parseInt(instance.version.split("\\.")[0]) >= 4) { updateInstanceInfoV2(instance);
updateInstanceInfoV2(domain);
}
} catch (Exception ignored) {} } catch (Exception ignored) {}
} }
@@ -343,17 +342,17 @@ public class AccountSessionManager{
.execNoAuth(domain); .execNoAuth(domain);
} }
public void updateInstanceInfoV2(String domain) { public void updateInstanceInfoV2(Instance instance) {
new GetInstance.V2().setCallback(new Callback<>() { new GetInstance.V2().setCallback(new Callback<>() {
@Override @Override
public void onSuccess(Instance.V2 v2) { public void onSuccess(Instance.V2 v2) {
Instance instanceInfo = instances.get(domain); if (instance != null) instance.v2 = v2;
if (instanceInfo != null) instanceInfo.v2 = v2; writeAccountsFile();
} }
@Override @Override
public void onError(ErrorResponse errorResponse) {} public void onError(ErrorResponse errorResponse) {}
}).execNoAuth(domain); }).execNoAuth(instance.uri);
} }
private void updateInstanceEmojis(Instance instance, String domain){ private void updateInstanceEmojis(Instance instance, String domain){

View File

@@ -462,21 +462,6 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
Status status=holder.getItem().status; Status status=holder.getItem().status;
revealSpoiler(status, holder.getItemID()); revealSpoiler(status, holder.getItemID());
} }
public void onRevealTranslationClick(HeaderStatusDisplayItem.Holder holder){
Status status=holder.getItem().status;
revealTranslation(status, holder.getItemID());
}
protected void revealTranslation(Status status, String itemID){
status.wantsTranslation=!status.wantsTranslation;
TextStatusDisplayItem.Holder text=findHolderOfType(itemID, TextStatusDisplayItem.Holder.class);
if(text!=null)
adapter.notifyItemChanged(text.getAbsoluteAdapterPosition()-getMainAdapterOffset());
HeaderStatusDisplayItem.Holder header=findHolderOfType(itemID, HeaderStatusDisplayItem.Holder.class);
if(header!=null)
header.rebind();
updateImagesSpoilerState(status, itemID);
}
protected void revealSpoiler(Status status, String itemID){ protected void revealSpoiler(Status status, String itemID){
status.spoilerRevealed=true; status.spoilerRevealed=true;

View File

@@ -155,7 +155,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
private int charCount, charLimit, trimmedCharCount; private int charCount, charLimit, trimmedCharCount;
private Button publishButton, languageButton; private Button publishButton, languageButton;
private PopupMenu languagePopup; private PopupMenu languagePopup, visibilityPopup;
private ImageButton mediaBtn, pollBtn, emojiBtn, spoilerBtn, visibilityBtn; private ImageButton mediaBtn, pollBtn, emojiBtn, spoilerBtn, visibilityBtn;
private ImageView sensitiveIcon; private ImageView sensitiveIcon;
private ComposeMediaLayout attachmentsView; private ComposeMediaLayout attachmentsView;
@@ -255,6 +255,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
wm=activity.getSystemService(WindowManager.class); wm=activity.getSystemService(WindowManager.class);
} }
@SuppressLint("ClickableViewAccessibility")
@Override @Override
public View onCreateContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ public View onCreateContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
creatingView=true; creatingView=true;
@@ -295,7 +296,9 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
pollBtn.setOnClickListener(v->togglePoll()); pollBtn.setOnClickListener(v->togglePoll());
emojiBtn.setOnClickListener(v->emojiKeyboard.toggleKeyboardPopup(mainEditText)); emojiBtn.setOnClickListener(v->emojiKeyboard.toggleKeyboardPopup(mainEditText));
spoilerBtn.setOnClickListener(v->toggleSpoiler()); spoilerBtn.setOnClickListener(v->toggleSpoiler());
visibilityBtn.setOnClickListener(this::onVisibilityClick); buildVisibilityPopup(visibilityBtn);
visibilityBtn.setOnClickListener(v->visibilityPopup.show());
visibilityBtn.setOnTouchListener(visibilityPopup.getDragToOpenListener());
sensitiveItem.setOnClickListener(v->toggleSensitive()); sensitiveItem.setOnClickListener(v->toggleSensitive());
emojiKeyboard.setOnIconChangedListener(new PopupKeyboard.OnIconChangeListener(){ emojiKeyboard.setOnIconChangedListener(new PopupKeyboard.OnIconChangeListener(){
@Override @Override
@@ -1396,11 +1399,11 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
return attachments.size(); return attachments.size();
} }
private void onVisibilityClick(View v){ private void buildVisibilityPopup(View v){
PopupMenu menu=new PopupMenu(getActivity(), v); visibilityPopup=new PopupMenu(getActivity(), v);
menu.inflate(R.menu.compose_visibility); visibilityPopup.inflate(R.menu.compose_visibility);
Menu m=menu.getMenu(); Menu m=visibilityPopup.getMenu();
UiUtils.enablePopupMenuIcons(getActivity(), menu); UiUtils.enablePopupMenuIcons(getActivity(), visibilityPopup);
m.setGroupCheckable(0, true, true); m.setGroupCheckable(0, true, true);
m.findItem(switch(statusVisibility){ m.findItem(switch(statusVisibility){
case PUBLIC -> R.id.vis_public; case PUBLIC -> R.id.vis_public;
@@ -1408,7 +1411,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
case PRIVATE -> R.id.vis_followers; case PRIVATE -> R.id.vis_followers;
case DIRECT -> R.id.vis_private; case DIRECT -> R.id.vis_private;
}).setChecked(true); }).setChecked(true);
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){ visibilityPopup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
@Override @Override
public boolean onMenuItemClick(MenuItem item){ public boolean onMenuItemClick(MenuItem item){
int id=item.getItemId(); int id=item.getItemId();
@@ -1426,7 +1429,6 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
return true; return true;
} }
}); });
menu.show();
} }
private void loadDefaultStatusVisibility(Bundle savedInstanceState) { private void loadDefaultStatusVisibility(Bundle savedInstanceState) {

View File

@@ -302,7 +302,7 @@ public class FollowRequestsListFragment extends BaseRecyclerFragment<FollowReque
RecyclerView.Adapter<? extends RecyclerView.ViewHolder> adapter = getBindingAdapter(); RecyclerView.Adapter<? extends RecyclerView.ViewHolder> adapter = getBindingAdapter();
if (!rel.requested && !rel.followedBy && adapter != null) { if (!rel.requested && !rel.followedBy && adapter != null) {
data.remove(item); data.remove(item);
adapter.notifyItemRemoved(getBindingAdapterPosition()); adapter.notifyItemRemoved(getLayoutPosition());
} else { } else {
rebind(); rebind();
} }

View File

@@ -11,6 +11,7 @@ import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.view.Gravity; import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowInsets; import android.view.WindowInsets;
@@ -31,6 +32,7 @@ import com.squareup.otto.Subscribe;
import org.joinmastodon.android.BuildConfig; import org.joinmastodon.android.BuildConfig;
import org.joinmastodon.android.E; import org.joinmastodon.android.E;
import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.GlobalUserPreferences.ColorPreference;
import org.joinmastodon.android.MainActivity; import org.joinmastodon.android.MainActivity;
import org.joinmastodon.android.MastodonApp; import org.joinmastodon.android.MastodonApp;
import org.joinmastodon.android.R; import org.joinmastodon.android.R;
@@ -96,7 +98,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
items.add(new HeaderItem(R.string.settings_theme)); items.add(new HeaderItem(R.string.settings_theme));
items.add(themeItem=new ThemeItem()); items.add(themeItem=new ThemeItem());
items.add(new SwitchItem(R.string.theme_true_black, R.drawable.ic_fluent_dark_theme_24_regular, GlobalUserPreferences.trueBlackTheme, this::onTrueBlackThemeChanged)); items.add(new SwitchItem(R.string.theme_true_black, R.drawable.ic_fluent_dark_theme_24_regular, GlobalUserPreferences.trueBlackTheme, this::onTrueBlackThemeChanged));
items.add(new SwitchItem(R.string.disable_marquee, R.drawable.ic_fluent_text_more_24_regular, GlobalUserPreferences.disableMarquee, i->{ items.add(new SwitchItem(R.string.sk_disable_marquee, R.drawable.ic_fluent_text_more_24_regular, GlobalUserPreferences.disableMarquee, i->{
GlobalUserPreferences.disableMarquee=i.checked; GlobalUserPreferences.disableMarquee=i.checked;
GlobalUserPreferences.save(); GlobalUserPreferences.save();
})); }));
@@ -115,7 +117,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
GlobalUserPreferences.showInteractionCounts=i.checked; GlobalUserPreferences.showInteractionCounts=i.checked;
GlobalUserPreferences.save(); GlobalUserPreferences.save();
})); }));
items.add(new SwitchItem(R.string.settings_always_reveal_content_warnings, R.drawable.ic_fluent_chat_warning_24_regular, GlobalUserPreferences.alwaysExpandContentWarnings, i->{ items.add(new SwitchItem(R.string.sk_settings_always_reveal_content_warnings, R.drawable.ic_fluent_chat_warning_24_regular, GlobalUserPreferences.alwaysExpandContentWarnings, i->{
GlobalUserPreferences.alwaysExpandContentWarnings=i.checked; GlobalUserPreferences.alwaysExpandContentWarnings=i.checked;
GlobalUserPreferences.save(); GlobalUserPreferences.save();
})); }));
@@ -158,15 +160,15 @@ public class SettingsFragment extends MastodonToolbarFragment{
checkForUpdateItem = new TextItem(R.string.sk_check_for_update, GithubSelfUpdater.getInstance()::checkForUpdates); checkForUpdateItem = new TextItem(R.string.sk_check_for_update, GithubSelfUpdater.getInstance()::checkForUpdates);
items.add(checkForUpdateItem); items.add(checkForUpdateItem);
} }
items.add(new TextItem(R.string.settings_contribute_fork, ()->UiUtils.launchWebBrowser(getActivity(), "https://github.com/LucasGGamerM/moshidon"))); items.add(new TextItem(R.string.sk_settings_contribute, ()->UiUtils.launchWebBrowser(getActivity(), "https://github.com/LucasGGamerM/moshidon")));
items.add(new TextItem(R.string.settings_clear_cache, this::clearImageCache)); items.add(new TextItem(R.string.settings_clear_cache, this::clearImageCache));
items.add(new TextItem(R.string.clear_recent_languages, ()->UiUtils.showConfirmationAlert(getActivity(), R.string.clear_recent_languages, R.string.confirm_clear_recent_languages, R.string.clear, ()->{ items.add(new TextItem(R.string.sk_clear_recent_languages, ()->UiUtils.showConfirmationAlert(getActivity(), R.string.sk_clear_recent_languages, R.string.sk_confirm_clear_recent_languages, R.string.clear, ()->{
GlobalUserPreferences.recentLanguages.remove(accountID); GlobalUserPreferences.recentLanguages.remove(accountID);
GlobalUserPreferences.save(); GlobalUserPreferences.save();
}))); })));
items.add(new TextItem(R.string.log_out, this::confirmLogOut)); items.add(new TextItem(R.string.log_out, this::confirmLogOut));
items.add(new FooterItem(getString(R.string.settings_app_version, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE))); items.add(new FooterItem(getString(R.string.sk_settings_app_version, BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE)));
} }
@Override @Override
@@ -710,6 +712,10 @@ public class SettingsFragment extends MastodonToolbarFragment{
pref = GlobalUserPreferences.ColorPreference.YELLOW; pref = GlobalUserPreferences.ColorPreference.YELLOW;
onColorPreferenceClick(pref); onColorPreferenceClick(pref);
} }
else if(id==R.id.red_color) {
pref = GlobalUserPreferences.ColorPreference.RED;
onColorPreferenceClick(pref);
}
else if(id==R.id.m3_color) { else if(id==R.id.m3_color) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
pref = GlobalUserPreferences.ColorPreference.MATERIAL3; pref = GlobalUserPreferences.ColorPreference.MATERIAL3;
@@ -724,6 +730,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
return true; return true;
}); });
// UiUtils.enablePopupMenuIcons(getActivity(), popupMenu); // UiUtils.enablePopupMenuIcons(getActivity(), popupMenu);
popupMenu.getMenu().findItem(R.id.m3_color).setVisible(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S);
button.setOnTouchListener(popupMenu.getDragToOpenListener()); button.setOnTouchListener(popupMenu.getDragToOpenListener());
button.setOnClickListener(v->popupMenu.show()); button.setOnClickListener(v->popupMenu.show());
} }
@@ -738,6 +745,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
case BLUE -> R.string.sk_color_theme_blue; case BLUE -> R.string.sk_color_theme_blue;
case ORANGE -> R.string.sk_color_theme_brown; case ORANGE -> R.string.sk_color_theme_brown;
case YELLOW -> R.string.sk_color_theme_yellow; case YELLOW -> R.string.sk_color_theme_yellow;
case RED -> R.string.sk_color_theme_red;
case MATERIAL3 -> R.string.sk_color_theme_material3; case MATERIAL3 -> R.string.sk_color_theme_material3;
}); });
} }
@@ -858,10 +866,10 @@ public class SettingsFragment extends MastodonToolbarFragment{
if (state == GithubSelfUpdater.UpdateState.CHECKING) return; if (state == GithubSelfUpdater.UpdateState.CHECKING) return;
GithubSelfUpdater.UpdateInfo info=updater.getUpdateInfo(); GithubSelfUpdater.UpdateInfo info=updater.getUpdateInfo();
if(state!=GithubSelfUpdater.UpdateState.DOWNLOADED){ if(state!=GithubSelfUpdater.UpdateState.DOWNLOADED){
text.setText(getString(R.string.update_available, info.version)); text.setText(getString(R.string.sk_update_available, info.version));
button.setText(getString(R.string.download_update, UiUtils.formatFileSize(getActivity(), info.size, false))); button.setText(getString(R.string.download_update, UiUtils.formatFileSize(getActivity(), info.size, false)));
}else{ }else{
text.setText(getString(R.string.update_ready, info.version)); text.setText(getString(R.string.sk_update_ready, info.version));
button.setText(R.string.install_update); button.setText(R.string.install_update);
} }
if(state==GithubSelfUpdater.UpdateState.DOWNLOADING){ if(state==GithubSelfUpdater.UpdateState.DOWNLOADING){

View File

@@ -189,8 +189,8 @@ public abstract class StatusListFragment extends BaseStatusListFragment<Status>{
} }
} }
for(Status s:preloadedData){ for(Status s:preloadedData){
if(s.id.equals(ev.id)){ if(s.getContentStatus().id.equals(ev.id)){
s.update(ev); s.getContentStatus().update(ev);
} }
} }
} }

View File

@@ -23,6 +23,7 @@ import org.joinmastodon.android.R;
import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships; import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships;
import org.joinmastodon.android.api.requests.accounts.SetAccountFollowed; import org.joinmastodon.android.api.requests.accounts.SetAccountFollowed;
import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.fragments.ListTimelinesFragment;
import org.joinmastodon.android.fragments.ProfileFragment; import org.joinmastodon.android.fragments.ProfileFragment;
import org.joinmastodon.android.fragments.report.ReportReasonChoiceFragment; import org.joinmastodon.android.fragments.report.ReportReasonChoiceFragment;
import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Account;
@@ -286,6 +287,7 @@ public abstract class BaseAccountListFragment extends BaseRecyclerFragment<BaseA
menu.findItem(R.id.mute).setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getDisplayUsername())); menu.findItem(R.id.mute).setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getDisplayUsername()));
menu.findItem(R.id.block).setTitle(getString(relationship.blocking ? R.string.unblock_user : R.string.block_user, account.getDisplayUsername())); menu.findItem(R.id.block).setTitle(getString(relationship.blocking ? R.string.unblock_user : R.string.block_user, account.getDisplayUsername()));
menu.findItem(R.id.report).setTitle(getString(R.string.report_user, account.getDisplayUsername())); menu.findItem(R.id.report).setTitle(getString(R.string.report_user, account.getDisplayUsername()));
menu.findItem(R.id.manage_user_lists).setTitle(getString(R.string.sk_lists_with_user, account.getDisplayUsername())).setVisible(relationship.following);
MenuItem hideBoosts=menu.findItem(R.id.hide_boosts); MenuItem hideBoosts=menu.findItem(R.id.hide_boosts);
MenuItem manageUserLists=menu.findItem(R.id.manage_user_lists); MenuItem manageUserLists=menu.findItem(R.id.manage_user_lists);
if(relationship.following){ if(relationship.following){
@@ -372,6 +374,12 @@ public abstract class BaseAccountListFragment extends BaseRecyclerFragment<BaseA
}) })
.wrapProgress(getActivity(), R.string.loading, false) .wrapProgress(getActivity(), R.string.loading, false)
.exec(accountID); .exec(accountID);
}else if(id==R.id.manage_user_lists){
final Bundle args=new Bundle();
args.putString("account", accountID);
args.putString("profileAccount", account.id);
args.putString("profileDisplayUsername", account.getDisplayUsername());
Nav.go(getActivity(), ListTimelinesFragment.class, args);
} }
return true; return true;
} }

View File

@@ -36,11 +36,11 @@ import me.grishka.appkit.utils.SingleViewRecyclerAdapter;
import me.grishka.appkit.utils.V; import me.grishka.appkit.utils.V;
import me.grishka.appkit.views.UsableRecyclerView; import me.grishka.appkit.views.UsableRecyclerView;
public class MoshidonLoginFragment extends InstanceCatalogFragment { public class CustomLoginFragment extends InstanceCatalogFragment {
private View headerView; private View headerView;
public MoshidonLoginFragment() { public CustomLoginFragment() {
super(R.layout.fragment_moshidon_welcome, 1); super(R.layout.fragment_welcome_custom, 1);
} }
@Override @Override
@@ -131,7 +131,7 @@ public class MoshidonLoginFragment extends InstanceCatalogFragment {
@Override @Override
protected RecyclerView.Adapter getAdapter(){ protected RecyclerView.Adapter getAdapter(){
headerView=getActivity().getLayoutInflater().inflate(R.layout.header_megalodon_welcome, list, false); headerView=getActivity().getLayoutInflater().inflate(R.layout.header_welcome_custom, list, false);
searchEdit=headerView.findViewById(R.id.search_edit); searchEdit=headerView.findViewById(R.id.search_edit);
searchEdit.setOnEditorActionListener(this::onSearchEnterPressed); searchEdit.setOnEditorActionListener(this::onSearchEnterPressed);
@@ -203,7 +203,7 @@ public class MoshidonLoginFragment extends InstanceCatalogFragment {
private final RadioButton radioButton; private final RadioButton radioButton;
public InstanceViewHolder(){ public InstanceViewHolder(){
super(getActivity(), R.layout.item_moshidon_instance, list); super(getActivity(), R.layout.item_instance_custom, list);
// itemView.setPadding(V.dp(16), V.dp(16), V.dp(16), V.dp(16)); // itemView.setPadding(V.dp(16), V.dp(16), V.dp(16), V.dp(16));
// TypedValue value = new TypedValue(); // TypedValue value = new TypedValue();

View File

@@ -155,7 +155,7 @@ public class SignupFragment extends ToolbarFragment{
} }
private void onButtonClick(){ private void onButtonClick(){
if(!password.getText().equals(passwordConfirm.getText())){ if(!password.getText().toString().equals(passwordConfirm.getText().toString())){
passwordConfirm.setError(getString(R.string.signup_passwords_dont_match)); passwordConfirm.setError(getString(R.string.signup_passwords_dont_match));
passwordConfirmWrap.setErrorState(); passwordConfirmWrap.setErrorState();
return; return;

View File

@@ -50,6 +50,7 @@ public class Status extends BaseModel implements DisplayItemsParent{
public Card card; public Card card;
public String language; public String language;
public String text; public String text;
public String translation;
public boolean favourited; public boolean favourited;
public boolean reblogged; public boolean reblogged;

View File

@@ -1,146 +0,0 @@
package org.joinmastodon.android.model;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.api.ObjectValidationException;
import org.joinmastodon.android.api.RequiredField;
import org.joinmastodon.android.events.StatusCountersUpdatedEvent;
import org.joinmastodon.android.ui.text.HtmlParser;
import org.parceler.Parcel;
import java.time.Instant;
import java.util.List;
@Parcel
public class StatusTranslation extends BaseModel implements DisplayItemsParent{
// @RequiredField
public String id;
// @RequiredField
public String uri;
// @RequiredField
public Instant createdAt;
// @RequiredField
public Account account;
// @RequiredField
public String content;
// @RequiredField
public StatusPrivacy visibility;
public boolean sensitive;
// @RequiredField
public String spoilerText;
// @RequiredField
public List<Attachment> mediaAttachments;
public Application application;
// @RequiredField
public List<Mention> mentions;
// @RequiredField
public List<Hashtag> tags;
// @RequiredField
public List<Emoji> emojis;
public long reblogsCount;
public long favouritesCount;
public long repliesCount;
public Instant editedAt;
public String url;
public String inReplyToId;
public String inReplyToAccountId;
public Status reblog;
public Poll poll;
public Card card;
public String language;
public String text;
public boolean favourited;
public boolean reblogged;
public boolean muted;
public boolean bookmarked;
public boolean pinned;
public transient boolean spoilerRevealed;
public transient boolean hasGapAfter;
private transient String strippedText;
@Override
public void postprocess() throws ObjectValidationException{
super.postprocess();
// if(application!=null)
// application.postprocess();
// for(Mention m:mentions)
// m.postprocess();
// for(Hashtag t:tags)
// t.postprocess();
// for(Emoji e:emojis)
// e.postprocess();
// for(Attachment a:mediaAttachments)
// a.postprocess();
// account.postprocess();
// if(poll!=null)
// poll.postprocess();
// if(card!=null)
// card.postprocess();
// if(reblog!=null)
// reblog.postprocess();
// spoilerRevealed=GlobalUserPreferences.alwaysExpandContentWarnings || !sensitive;
}
@Override
public String toString(){
return "Status{"+
"id='"+id+'\''+
", uri='"+uri+'\''+
", createdAt="+createdAt+
", account="+account+
", content='"+content+'\''+
", visibility="+visibility+
", sensitive="+sensitive+
", spoilerText='"+spoilerText+'\''+
", mediaAttachments="+mediaAttachments+
", application="+application+
", mentions="+mentions+
", tags="+tags+
", emojis="+emojis+
", reblogsCount="+reblogsCount+
", favouritesCount="+favouritesCount+
", repliesCount="+repliesCount+
", url='"+url+'\''+
", inReplyToId='"+inReplyToId+'\''+
", inReplyToAccountId='"+inReplyToAccountId+'\''+
", reblog="+reblog+
", poll="+poll+
", card="+card+
", language='"+language+'\''+
", text='"+text+'\''+
", favourited="+favourited+
", reblogged="+reblogged+
", muted="+muted+
", bookmarked="+bookmarked+
", pinned="+pinned+
'}';
}
@Override
public String getID(){
return id;
}
public void update(StatusCountersUpdatedEvent ev){
favouritesCount=ev.favorites;
reblogsCount=ev.reblogs;
repliesCount=ev.replies;
favourited=ev.favorited;
reblogged=ev.reblogged;
bookmarked=ev.bookmarked;
pinned=ev.pinned;
}
public StatusTranslation getContentStatus(){
return this;
}
public String getStrippedText(){
if(strippedText==null)
strippedText=HtmlParser.strip(content);
return strippedText;
}
}

View File

@@ -0,0 +1,7 @@
package org.joinmastodon.android.model;
public class TranslatedStatus extends BaseModel {
public String content;
public String detectedSourceLanguage;
public String provider;
}

View File

@@ -23,7 +23,7 @@ import org.joinmastodon.android.R;
import org.joinmastodon.android.api.requests.oauth.RevokeOauthToken; import org.joinmastodon.android.api.requests.oauth.RevokeOauthToken;
import org.joinmastodon.android.api.session.AccountSession; import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.fragments.onboarding.MoshidonLoginFragment; import org.joinmastodon.android.fragments.onboarding.CustomLoginFragment;
import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.utils.UiUtils;
import java.util.List; import java.util.List;
@@ -77,7 +77,7 @@ public class AccountSwitcherSheet extends BottomSheet{
holder.avatar.setImageResource(R.drawable.ic_fluent_add_circle_24_filled); holder.avatar.setImageResource(R.drawable.ic_fluent_add_circle_24_filled);
holder.avatar.setImageTintList(ColorStateList.valueOf(UiUtils.getThemeColor(activity, android.R.attr.textColorPrimary))); holder.avatar.setImageTintList(ColorStateList.valueOf(UiUtils.getThemeColor(activity, android.R.attr.textColorPrimary)));
adapter.addAdapter(new ClickableSingleViewRecyclerAdapter(holder.itemView, ()->{ adapter.addAdapter(new ClickableSingleViewRecyclerAdapter(holder.itemView, ()->{
Nav.go(activity, MoshidonLoginFragment.class, null); Nav.go(activity, CustomLoginFragment.class, null);
dismiss(); dismiss();
})); }));

View File

@@ -12,6 +12,8 @@ import android.widget.ImageView;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import org.joinmastodon.android.R; import org.joinmastodon.android.R;
import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.fragments.BaseStatusListFragment;
import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Account;
@@ -23,7 +25,9 @@ import org.joinmastodon.android.ui.utils.CustomEmojiHelper;
import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.utils.UiUtils;
import org.joinmastodon.android.ui.views.ProgressBarButton; import org.joinmastodon.android.ui.views.ProgressBarButton;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List;
import me.grishka.appkit.imageloader.ImageLoaderViewHolder; import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
import me.grishka.appkit.imageloader.requests.ImageLoaderRequest; import me.grishka.appkit.imageloader.requests.ImageLoaderRequest;
@@ -154,10 +158,18 @@ public class AccountCardStatusDisplayItem extends StatusDisplayItem{
private void onFollowRequestButtonClick(View v) { private void onFollowRequestButtonClick(View v) {
itemView.setHasTransientState(true); itemView.setHasTransientState(true);
UiUtils.handleFollowRequest((Activity) v.getContext(), item.account, item.parentFragment.getAccountID(), item.notification.id , v == acceptButton, relationship, rel -> { UiUtils.handleFollowRequest((Activity) v.getContext(), item.account, item.parentFragment.getAccountID(), null, v == acceptButton, relationship, rel -> {
itemView.setHasTransientState(false); itemView.setHasTransientState(false);
item.parentFragment.putRelationship(item.account.id, rel); item.parentFragment.putRelationship(item.account.id, rel);
rebind(); RecyclerView.Adapter<? extends RecyclerView.ViewHolder> adapter = getBindingAdapter();
if (!rel.requested && !rel.followedBy && adapter != null) {
int index = item.parentFragment.getDisplayItems().indexOf(item);
item.parentFragment.getDisplayItems().remove(index);
item.parentFragment.getDisplayItems().remove(index - 1);
adapter.notifyItemRangeRemoved(getLayoutPosition()-1, 2);
} else {
rebind();
}
}); });
} }

View File

@@ -4,9 +4,14 @@ import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityNodeInfo;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.ScaleAnimation;
import android.widget.Button; import android.widget.Button;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
@@ -24,7 +29,7 @@ import org.parceler.Parcels;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import me.grishka.appkit.Nav; import me.grishka.appkit.Nav;
import me.grishka.appkit.utils.BindableViewHolder; import me.grishka.appkit.utils.CubicBezierInterpolator;
import me.grishka.appkit.utils.V; import me.grishka.appkit.utils.V;
public class FooterStatusDisplayItem extends StatusDisplayItem{ public class FooterStatusDisplayItem extends StatusDisplayItem{
@@ -46,6 +51,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
public static class Holder extends StatusDisplayItem.Holder<FooterStatusDisplayItem>{ public static class Holder extends StatusDisplayItem.Holder<FooterStatusDisplayItem>{
private final TextView reply, boost, favorite, bookmark; private final TextView reply, boost, favorite, bookmark;
private final ImageView share; private final ImageView share;
private static final Animation opacityOut, opacityIn;
private final View.AccessibilityDelegate buttonAccessibilityDelegate=new View.AccessibilityDelegate(){ private final View.AccessibilityDelegate buttonAccessibilityDelegate=new View.AccessibilityDelegate(){
@Override @Override
@@ -56,6 +62,16 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
} }
}; };
static {
opacityOut = new AlphaAnimation(1, 0.5f);
opacityOut.setDuration(200);
opacityOut.setInterpolator(CubicBezierInterpolator.DEFAULT);
opacityOut.setFillAfter(true);
opacityIn = new AlphaAnimation(0.5f, 1);
opacityIn.setDuration(150);
opacityIn.setInterpolator(CubicBezierInterpolator.DEFAULT);
}
public Holder(Activity activity, ViewGroup parent){ public Holder(Activity activity, ViewGroup parent){
super(activity, R.layout.display_item_footer, parent); super(activity, R.layout.display_item_footer, parent);
reply=findViewById(R.id.reply); reply=findViewById(R.id.reply);
@@ -74,14 +90,19 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
View favorite=findViewById(R.id.favorite_btn); View favorite=findViewById(R.id.favorite_btn);
View share=findViewById(R.id.share_btn); View share=findViewById(R.id.share_btn);
View bookmark=findViewById(R.id.bookmark_btn); View bookmark=findViewById(R.id.bookmark_btn);
reply.setOnTouchListener(this::onButtonTouch);
reply.setOnClickListener(this::onReplyClick); reply.setOnClickListener(this::onReplyClick);
reply.setAccessibilityDelegate(buttonAccessibilityDelegate); reply.setAccessibilityDelegate(buttonAccessibilityDelegate);
boost.setOnTouchListener(this::onButtonTouch);
boost.setOnClickListener(this::onBoostClick); boost.setOnClickListener(this::onBoostClick);
boost.setAccessibilityDelegate(buttonAccessibilityDelegate); boost.setAccessibilityDelegate(buttonAccessibilityDelegate);
favorite.setOnTouchListener(this::onButtonTouch);
favorite.setOnClickListener(this::onFavoriteClick); favorite.setOnClickListener(this::onFavoriteClick);
favorite.setAccessibilityDelegate(buttonAccessibilityDelegate); favorite.setAccessibilityDelegate(buttonAccessibilityDelegate);
bookmark.setOnTouchListener(this::onButtonTouch);
bookmark.setOnClickListener(this::onBookmarkClick); bookmark.setOnClickListener(this::onBookmarkClick);
bookmark.setAccessibilityDelegate(buttonAccessibilityDelegate); bookmark.setAccessibilityDelegate(buttonAccessibilityDelegate);
share.setOnTouchListener(this::onButtonTouch);
share.setOnClickListener(this::onShareClick); share.setOnClickListener(this::onShareClick);
share.setAccessibilityDelegate(buttonAccessibilityDelegate); share.setAccessibilityDelegate(buttonAccessibilityDelegate);
} }
@@ -115,21 +136,43 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args); Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args);
} }
private boolean onButtonTouch(View v, MotionEvent event){
int action = event.getAction();
// 20dp to center in middle of icon, because: (icon width = 24dp) / 2 + (paddingStart = 8dp)
v.setPivotX(V.dp(20));
if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
v.animate().scaleX(1).scaleY(1).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(100).start();
if (action == MotionEvent.ACTION_UP) v.performClick();
} else if (action == MotionEvent.ACTION_DOWN) {
v.animate().scaleX(0.85f).scaleY(0.85f).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(50).start();
}
return true;
}
private void onBoostClick(View v){ private void onBoostClick(View v){
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setReblogged(item.status, !item.status.reblogged); v.startAnimation(opacityOut);
boost.setSelected(item.status.reblogged); boost.setSelected(!item.status.reblogged);
bindButton(boost, item.status.reblogsCount); AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setReblogged(item.status, !item.status.reblogged, r->{
v.startAnimation(opacityIn);
bindButton(boost, r.reblogsCount);
});
} }
private void onFavoriteClick(View v){ private void onFavoriteClick(View v){
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(item.status, !item.status.favourited); v.startAnimation(opacityOut);
favorite.setSelected(item.status.favourited); favorite.setSelected(!item.status.favourited);
bindButton(favorite, item.status.favouritesCount); AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(item.status, !item.status.favourited, r->{
v.startAnimation(opacityIn);
bindButton(favorite, r.favouritesCount);
});
} }
private void onBookmarkClick(View v){ private void onBookmarkClick(View v){
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(item.status, !item.status.bookmarked); v.startAnimation(opacityOut);
bookmark.setSelected(item.status.bookmarked); bookmark.setSelected(item.status.bookmarked);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(item.status, !item.status.bookmarked, r->{
v.startAnimation(opacityIn);
});
} }
private void onShareClick(View v){ private void onShareClick(View v){

View File

@@ -23,7 +23,6 @@ import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.R; import org.joinmastodon.android.R;
import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships; import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships;
import org.joinmastodon.android.api.requests.statuses.GetStatusSourceText; import org.joinmastodon.android.api.requests.statuses.GetStatusSourceText;
import org.joinmastodon.android.api.requests.statuses.GetStatusTranslation;
import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.fragments.BaseStatusListFragment;
import org.joinmastodon.android.fragments.ComposeFragment; import org.joinmastodon.android.fragments.ComposeFragment;
@@ -32,9 +31,10 @@ import org.joinmastodon.android.fragments.ThreadFragment;
import org.joinmastodon.android.fragments.report.ReportReasonChoiceFragment; import org.joinmastodon.android.fragments.report.ReportReasonChoiceFragment;
import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Account;
import org.joinmastodon.android.model.Attachment; import org.joinmastodon.android.model.Attachment;
import org.joinmastodon.android.model.Preferences;
import org.joinmastodon.android.model.Relationship; import org.joinmastodon.android.model.Relationship;
import org.joinmastodon.android.model.Status; import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.model.StatusTranslation; import org.joinmastodon.android.model.StatusPrivacy;
import org.joinmastodon.android.ui.text.HtmlParser; import org.joinmastodon.android.ui.text.HtmlParser;
import org.joinmastodon.android.ui.utils.CustomEmojiHelper; import org.joinmastodon.android.ui.utils.CustomEmojiHelper;
import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.utils.UiUtils;
@@ -43,6 +43,7 @@ import org.parceler.Parcels;
import java.time.Instant; import java.time.Instant;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects;
import me.grishka.appkit.Nav; import me.grishka.appkit.Nav;
import me.grishka.appkit.api.APIRequest; import me.grishka.appkit.api.APIRequest;
@@ -62,7 +63,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
private SpannableStringBuilder parsedName; private SpannableStringBuilder parsedName;
public final Status status; public final Status status;
private boolean hasVisibilityToggle; private boolean hasVisibilityToggle;
private boolean hasTranslateToggle;
boolean needBottomPadding; boolean needBottomPadding;
private String extraText; private String extraText;
@@ -77,7 +77,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
HtmlParser.parseCustomEmoji(parsedName, user.emojis); HtmlParser.parseCustomEmoji(parsedName, user.emojis);
emojiHelper.setText(parsedName); emojiHelper.setText(parsedName);
if(status!=null){ if(status!=null){
hasTranslateToggle=true;
hasVisibilityToggle=status.sensitive || !TextUtils.isEmpty(status.spoilerText); hasVisibilityToggle=status.sensitive || !TextUtils.isEmpty(status.spoilerText);
if(!hasVisibilityToggle && !status.mediaAttachments.isEmpty()){ if(!hasVisibilityToggle && !status.mediaAttachments.isEmpty()){
for(Attachment att:status.mediaAttachments){ for(Attachment att:status.mediaAttachments){
@@ -111,7 +110,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
public static class Holder extends StatusDisplayItem.Holder<HeaderStatusDisplayItem> implements ImageLoaderViewHolder{ public static class Holder extends StatusDisplayItem.Holder<HeaderStatusDisplayItem> implements ImageLoaderViewHolder{
private final TextView name, username, timestamp, extraText; private final TextView name, username, timestamp, extraText;
private final ImageView avatar, more, visibility, translate; private final ImageView avatar, more, visibility;
private final PopupMenu optionsMenu; private final PopupMenu optionsMenu;
private Relationship relationship; private Relationship relationship;
private APIRequest<?> currentRelationshipRequest; private APIRequest<?> currentRelationshipRequest;
@@ -125,7 +124,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
public Holder(Activity activity, ViewGroup parent){ public Holder(Activity activity, ViewGroup parent){
super(activity, R.layout.display_item_header, parent); super(activity, R.layout.display_item_header, parent);
translate=findViewById(R.id.translate);
name=findViewById(R.id.name); name=findViewById(R.id.name);
username=findViewById(R.id.username); username=findViewById(R.id.username);
timestamp=findViewById(R.id.timestamp); timestamp=findViewById(R.id.timestamp);
@@ -138,7 +136,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
avatar.setClipToOutline(true); avatar.setClipToOutline(true);
more.setOnClickListener(this::onMoreClick); more.setOnClickListener(this::onMoreClick);
visibility.setOnClickListener(v->item.parentFragment.onVisibilityIconClick(this)); visibility.setOnClickListener(v->item.parentFragment.onVisibilityIconClick(this));
translate.setOnClickListener(v->item.parentFragment.onRevealTranslationClick(this));
optionsMenu=new PopupMenu(activity, more); optionsMenu=new PopupMenu(activity, more);
optionsMenu.inflate(R.menu.post); optionsMenu.inflate(R.menu.post);
@@ -232,7 +229,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
else else
timestamp.setText(item.parentFragment.getString(R.string.edited_timestamp, UiUtils.formatRelativeTimestamp(itemView.getContext(), item.status.editedAt))); timestamp.setText(item.parentFragment.getString(R.string.edited_timestamp, UiUtils.formatRelativeTimestamp(itemView.getContext(), item.status.editedAt)));
visibility.setVisibility(item.hasVisibilityToggle && !item.inset ? View.VISIBLE : View.GONE); visibility.setVisibility(item.hasVisibilityToggle && !item.inset ? View.VISIBLE : View.GONE);
translate.setVisibility(item.hasTranslateToggle ? View.VISIBLE : View.GONE);
if(item.hasVisibilityToggle){ if(item.hasVisibilityToggle){
visibility.setImageResource(item.status.spoilerRevealed ? R.drawable.ic_visibility_off : R.drawable.ic_visibility); visibility.setImageResource(item.status.spoilerRevealed ? R.drawable.ic_visibility_off : R.drawable.ic_visibility);
visibility.setContentDescription(item.parentFragment.getString(item.status.spoilerRevealed ? R.string.hide_content : R.string.reveal_content)); visibility.setContentDescription(item.parentFragment.getString(item.status.spoilerRevealed ? R.string.hide_content : R.string.reveal_content));
@@ -240,9 +236,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
visibility.setTooltipText(visibility.getContentDescription()); visibility.setTooltipText(visibility.getContentDescription());
} }
} }
if(item.hasTranslateToggle){
translate.setImageResource(item.status.wantsTranslation ? R.drawable.ic_translate_on : R.drawable.ic_translate_off);
}
itemView.setPadding(itemView.getPaddingLeft(), itemView.getPaddingTop(), itemView.getPaddingRight(), item.needBottomPadding ? V.dp(16) : 0); itemView.setPadding(itemView.getPaddingLeft(), itemView.getPaddingTop(), itemView.getPaddingRight(), item.needBottomPadding ? V.dp(16) : 0);
if(TextUtils.isEmpty(item.extraText)){ if(TextUtils.isEmpty(item.extraText)){
extraText.setVisibility(View.GONE); extraText.setVisibility(View.GONE);

View File

@@ -8,16 +8,20 @@ import android.text.TextUtils;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.Button;
import android.widget.TextView; import android.widget.TextView;
import org.joinmastodon.android.R; import org.joinmastodon.android.R;
import org.joinmastodon.android.api.requests.statuses.GetStatusTranslation; import org.joinmastodon.android.api.requests.statuses.TranslateStatus;
import org.joinmastodon.android.api.session.AccountSession;
import org.joinmastodon.android.api.session.AccountSessionManager;
import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.fragments.BaseStatusListFragment;
import org.joinmastodon.android.model.Instance;
import org.joinmastodon.android.model.Status; import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.model.StatusTranslation;
import org.joinmastodon.android.ui.drawables.SpoilerStripesDrawable; import org.joinmastodon.android.ui.drawables.SpoilerStripesDrawable;
import org.joinmastodon.android.model.StatusPrivacy;
import org.joinmastodon.android.model.TranslatedStatus;
import org.joinmastodon.android.ui.text.HtmlParser; import org.joinmastodon.android.ui.text.HtmlParser;
import org.joinmastodon.android.ui.utils.CustomEmojiHelper; import org.joinmastodon.android.ui.utils.CustomEmojiHelper;
import org.joinmastodon.android.ui.views.LinkedTextView; import org.joinmastodon.android.ui.views.LinkedTextView;
@@ -35,18 +39,21 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
private CharSequence parsedSpoilerText; private CharSequence parsedSpoilerText;
public boolean textSelectable; public boolean textSelectable;
public final Status status; public final Status status;
public boolean translated = false;
public TranslatedStatus translation = null;
private AccountSession session;
public TextStatusDisplayItem(String parentID, CharSequence text, BaseStatusListFragment parentFragment, Status status){ public TextStatusDisplayItem(String parentID, CharSequence text, BaseStatusListFragment parentFragment, Status status){
super(parentID, parentFragment); super(parentID, parentFragment);
this.text=text; this.text=text;
this.status=status; this.status=status;
// this.wantsTranslation=wantsTranslation;
emojiHelper.setText(text); emojiHelper.setText(text);
if(!TextUtils.isEmpty(status.spoilerText)){ if(!TextUtils.isEmpty(status.spoilerText)){
parsedSpoilerText=HtmlParser.parseCustomEmoji(status.spoilerText, status.emojis); parsedSpoilerText=HtmlParser.parseCustomEmoji(status.spoilerText, status.emojis);
spoilerEmojiHelper=new CustomEmojiHelper(); spoilerEmojiHelper=new CustomEmojiHelper();
spoilerEmojiHelper.setText(parsedSpoilerText); spoilerEmojiHelper.setText(parsedSpoilerText);
} }
session = AccountSessionManager.getInstance().getAccount(parentFragment.getAccountID());
} }
@Override @Override
@@ -71,9 +78,10 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
public static class Holder extends StatusDisplayItem.Holder<TextStatusDisplayItem> implements ImageLoaderViewHolder{ public static class Holder extends StatusDisplayItem.Holder<TextStatusDisplayItem> implements ImageLoaderViewHolder{
private final LinkedTextView text; private final LinkedTextView text;
private final LinearLayout spoilerHeader; private final LinearLayout spoilerHeader;
private final TextView spoilerTitle, spoilerTitleInline; private final TextView spoilerTitle, spoilerTitleInline, translateInfo;
private final View spoilerOverlay, borderTop, borderBottom; private final View spoilerOverlay, borderTop, borderBottom, textWrap, translateWrap, translateProgress;
private final Drawable backgroundColor, borderColor; private final Drawable backgroundColor, borderColor;
private final Button translateButton;
public Holder(Activity activity, ViewGroup parent){ public Holder(Activity activity, ViewGroup parent){
super(activity, R.layout.display_item_text, parent); super(activity, R.layout.display_item_text, parent);
@@ -84,6 +92,11 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
spoilerOverlay=findViewById(R.id.spoiler_overlay); spoilerOverlay=findViewById(R.id.spoiler_overlay);
borderTop=findViewById(R.id.border_top); borderTop=findViewById(R.id.border_top);
borderBottom=findViewById(R.id.border_bottom); borderBottom=findViewById(R.id.border_bottom);
textWrap=findViewById(R.id.text_wrap);
translateWrap=findViewById(R.id.translate_wrap);
translateButton=findViewById(R.id.translate_btn);
translateInfo=findViewById(R.id.translate_info);
translateProgress=findViewById(R.id.translate_progress);
itemView.setOnClickListener(v->item.parentFragment.onRevealSpoilerClick(this)); itemView.setOnClickListener(v->item.parentFragment.onRevealSpoilerClick(this));
TypedValue outValue=new TypedValue(); TypedValue outValue=new TypedValue();
@@ -97,26 +110,9 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
@Override @Override
public void onBind(TextStatusDisplayItem item){ public void onBind(TextStatusDisplayItem item){
if(item.status.wantsTranslation){ text.setText(item.translated
new GetStatusTranslation(item.status.id) ? HtmlParser.parse(item.translation.content, item.status.emojis, item.status.mentions, item.status.tags, item.parentFragment.getAccountID())
.setCallback(new Callback<StatusTranslation>(){ : item.text);
@Override
public void onSuccess(StatusTranslation status){
text.setText(status.getStrippedText());
}
@Override
public void onError(ErrorResponse error){
item.status.wantsTranslation=false;
text.setText(item.text);
error.showToast(item.parentFragment.getActivity());
}
})
.wrapProgress(item.parentFragment.getActivity(), R.string.loading, true)
.exec(item.parentFragment.getAccountID());
}else{
text.setText(item.text);
}
text.setTextIsSelectable(item.textSelectable); text.setTextIsSelectable(item.textSelectable);
spoilerTitleInline.setTextIsSelectable(item.textSelectable); spoilerTitleInline.setTextIsSelectable(item.textSelectable);
text.setInvalidateOnEveryFrame(false); text.setInvalidateOnEveryFrame(false);
@@ -130,20 +126,60 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
if(item.status.spoilerRevealed){ if(item.status.spoilerRevealed){
spoilerOverlay.setVisibility(View.GONE); spoilerOverlay.setVisibility(View.GONE);
spoilerHeader.setVisibility(View.VISIBLE); spoilerHeader.setVisibility(View.VISIBLE);
text.setVisibility(View.VISIBLE); textWrap.setVisibility(View.VISIBLE);
itemView.setClickable(false); itemView.setClickable(false);
}else{ }else{
spoilerOverlay.setVisibility(View.VISIBLE); spoilerOverlay.setVisibility(View.VISIBLE);
spoilerHeader.setVisibility(View.GONE); spoilerHeader.setVisibility(View.GONE);
text.setVisibility(View.GONE); textWrap.setVisibility(View.GONE);
itemView.setClickable(true); itemView.setClickable(true);
} }
}else{ }else{
spoilerOverlay.setVisibility(View.GONE); spoilerOverlay.setVisibility(View.GONE);
spoilerHeader.setVisibility(View.GONE); spoilerHeader.setVisibility(View.GONE);
text.setVisibility(View.VISIBLE); textWrap.setVisibility(View.VISIBLE);
itemView.setClickable(false); itemView.setClickable(false);
} }
Instance instanceInfo = AccountSessionManager.getInstance().getInstanceInfo(item.session.domain);
boolean translateEnabled = instanceInfo.v2 != null && instanceInfo.v2.configuration.translation != null && instanceInfo.v2.configuration.translation.enabled;
translateWrap.setVisibility(item.textSelectable && translateEnabled &&
!item.status.visibility.isLessVisibleThan(StatusPrivacy.UNLISTED) &&
item.status.language != null &&
(item.session.preferences == null || !item.status.language.equalsIgnoreCase(item.session.preferences.postingDefaultLanguage))
? View.VISIBLE : View.GONE);
translateButton.setText(item.translated ? R.string.sk_translate_show_original : R.string.sk_translate_post);
translateInfo.setText(item.translated ? itemView.getResources().getString(R.string.sk_translated_using, item.translation.provider) : "");
translateButton.setOnClickListener(v->{
if (item.translation == null) {
translateProgress.setVisibility(View.VISIBLE);
translateButton.setClickable(false);
translateButton.setAlpha(.50f);
new TranslateStatus(item.status.id).setCallback(new Callback<>() {
@Override
public void onSuccess(TranslatedStatus translatedStatus) {
item.translation = translatedStatus;
item.translated = true;
translateProgress.setVisibility(View.GONE);
translateButton.setClickable(true);
translateButton.setAlpha(1f);
rebind();
}
@Override
public void onError(ErrorResponse error) {
translateProgress.setVisibility(View.GONE);
translateButton.setClickable(true);
translateButton.setAlpha(1f);
error.showToast(itemView.getContext());
}
}).exec(item.parentFragment.getAccountID());
} else {
item.translated = !item.translated;
rebind();
}
});
} }
@Override @Override

View File

@@ -718,6 +718,16 @@ public class UiUtils{
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_Dark_TrueBlack_Yellow : R.style.Theme_Mastodon_Dark_Yellow; GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_Dark_TrueBlack_Yellow : R.style.Theme_Mastodon_Dark_Yellow;
}); });
break; break;
case RED:
context.setTheme(switch(GlobalUserPreferences.theme){
case AUTO ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_AutoLightDark_TrueBlack_Red : R.style.Theme_Mastodon_AutoLightDark_Red;
case LIGHT ->
R.style.Theme_Mastodon_Light_Red;
case DARK ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_Dark_TrueBlack_Red : R.style.Theme_Mastodon_Dark_Red;
});
break;
case MATERIAL3: case MATERIAL3:
context.setTheme(switch(GlobalUserPreferences.theme){ context.setTheme(switch(GlobalUserPreferences.theme){
case AUTO -> case AUTO ->

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?android:colorAccent" android:state_selected="true"/>
<item android:color="?android:textColorSecondary" android:state_enabled="true"/>
<item android:color="?colorSecondary"/>
</selector>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/ic_fluent_arrow_repeat_all_24_filled"/> <item android:state_selected="true" android:drawable="@drawable/ic_fluent_arrow_repeat_all_24_very_filled"/>
<item android:state_enabled="true" android:drawable="@drawable/ic_fluent_arrow_repeat_all_24_regular"/> <item android:state_enabled="true" android:drawable="@drawable/ic_fluent_arrow_repeat_all_24_regular"/>
<item android:drawable="@drawable/ic_fluent_arrow_repeat_all_off_24_regular"/> <item android:drawable="@drawable/ic_fluent_arrow_repeat_all_off_24_regular"/>
</selector> </selector>

View File

@@ -0,0 +1,23 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M9,9.123C7.423,9.123 6.125,10.421 6.125,11.994C6.125,12.523 6.269,13.014 6.514,13.434C6.514,13.435 6.513,13.436 6.514,13.438L6.619,13.607L6.623,13.613C6.666,13.679 6.706,13.747 6.744,13.816L7.787,12.775C9.015,11.549 10.977,11.548 12.205,12.775C12.789,13.359 13.077,14.104 13.105,14.863L15.002,14.863C16.579,14.863 17.875,13.567 17.875,11.992C17.875,11.463 17.731,10.972 17.486,10.553L17.486,10.549L17.381,10.379C17.337,10.311 17.295,10.241 17.256,10.17L16.215,11.211C14.986,12.439 13.025,12.44 11.797,11.213C11.218,10.634 10.931,9.885 10.902,9.123L9,9.123z"
android:strokeWidth="3"
android:fillColor="#212121"/>
<path
android:pathData="M20.787,8.06C20.603,7.828 20.319,7.678 20,7.678c-0.552,0 -1,0.447 -1,0.999 0,0.208 0.064,0.401 0.172,0.561C19.695,10.028 20,10.975 20,11.993c0,2.759 -2.238,4.996 -4.999,4.996l-5.586,-0.001 1.294,-1.291 0.084,-0.095c0.281,-0.362 0.279,-0.872 -0.006,-1.231L10.709,14.284 10.614,14.2C10.252,13.92 9.741,13.922 9.382,14.206L9.294,14.284 6.289,17.287 6.206,17.382c-0.281,0.362 -0.279,0.872 0.006,1.231l0.078,0.087 3.005,3.003 0.094,0.083c0.392,0.305 0.96,0.277 1.32,-0.083 0.363,-0.362 0.389,-0.934 0.078,-1.326l-0.078,-0.087 -1.304,-1.303 5.596,0.001 0.241,-0.004C18.996,18.857 22,15.776 22,11.993 22,10.534 21.552,9.178 20.787,8.057Z"
android:fillColor="#212121"/>
<path
android:pathData="M14.712,2.289 L14.625,2.211C14.233,1.901 13.661,1.926 13.298,2.289L13.22,2.376C12.91,2.768 12.936,3.34 13.298,3.702l1.299,1.297 -5.598,0 -0.241,0.004C5.004,5.13 2,8.211 2,11.993c0,1.445 0.438,2.787 1.189,3.898 0.182,0.251 0.477,0.415 0.811,0.415 0.552,0 1,-0.447 1,-0.999C5,15.091 4.931,14.891 4.815,14.729L4.68,14.511C4.248,13.772 4,12.911 4,11.993 4,9.234 6.238,6.998 8.999,6.998L14.595,6.998 13.298,8.295 13.22,8.382c-0.311,0.392 -0.285,0.964 0.078,1.326 0.391,0.39 1.024,0.39 1.414,0L17.718,6.705 17.795,6.618C18.106,6.226 18.08,5.654 17.718,5.292Z"
android:strokeWidth="3"
android:fillColor="#212121"/>
<path
android:pathData="M20.11,5.619L20.11,5.619A1.393,0.037 0,0 1,21.503 5.656L21.503,5.656A1.393,0.037 0,0 1,20.11 5.693L20.11,5.693A1.393,0.037 0,0 1,18.717 5.656L18.717,5.656A1.393,0.037 0,0 1,20.11 5.619z"
android:strokeWidth="52.513"
android:fillColor="#613583"
android:fillType="evenOdd"
android:fillAlpha="0.0156863"/>
</vector>

View File

@@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M16.953 5.303c0.167-0.526-0.124-1.088-0.65-1.256-0.526-0.167-1.089 0.124-1.256 0.65-0.124 0.389-0.236 0.899-0.324 1.344-0.565 0.012-1.12 0-1.652-0.038-0.55-0.04-1.03 0.375-1.069 0.926-0.039 0.55 0.376 1.03 0.927 1.069 0.46 0.032 0.934 0.048 1.416 0.047-0.106 0.612-0.184 1.176-0.24 1.697-1.263 0.717-2.142 1.685-2.636 2.701-0.624 1.283-0.7 2.857 0.239 3.883 0.675 0.736 1.704 0.758 2.499 0.588 0.322-0.068 0.654-0.176 0.988-0.32 0.255 0.346 0.716 0.5 1.142 0.348 0.52-0.186 0.79-0.759 0.604-1.278L16.9 15.549c1.148-0.931 2.202-2.307 2.735-4.06 0.286 0.251 0.507 0.55 0.658 0.864 0.284 0.594 0.334 1.271 0.099 1.91-0.234 0.633-0.78 1.313-1.84 1.843-0.493 0.247-0.694 0.847-0.447 1.341 0.247 0.494 0.848 0.695 1.342 0.448 1.44-0.72 2.385-1.758 2.821-2.94 0.434-1.176 0.332-2.414-0.17-3.464-0.44-0.918-1.171-1.68-2.104-2.165C19.998 9.22 20 9.11 20 9c0-0.552-0.448-1-1-1-0.473 0-0.87 0.329-0.974 0.77-0.567-0.045-1.17-0.003-1.796 0.138 0.047-0.304 0.102-0.626 0.166-0.964 0.977-0.094 1.944-0.253 2.842-0.473 0.536-0.131 0.864-0.672 0.733-1.209-0.131-0.536-0.673-0.864-1.21-0.733-0.621 0.152-1.285 0.272-1.963 0.358 0.048-0.208 0.1-0.409 0.155-0.583zm-3.686 8.015c0.166-0.34 0.414-0.697 0.758-1.037 0.02 0.348 0.053 0.67 0.098 0.973 0.083 0.56 0.207 1.048 0.341 1.477-0.243 0.109-0.47 0.184-0.674 0.227-0.429 0.092-0.588 0.019-0.614 0.006l-0.004-0.001c-0.162-0.193-0.329-0.774 0.095-1.645zm4.498-2.562c-0.308 1.112-0.89 2.03-1.568 2.73-0.035-0.164-0.067-0.338-0.095-0.525-0.076-0.513-0.117-1.132-0.088-1.904 0.033-0.013 0.067-0.024 0.1-0.036l1.651-0.265zm-1.651 0.265l1.651-0.265c-0.495-0.025-1.049 0.053-1.651 0.265zM7.536 6.29c-2.02-0.589-3.67-0.038-4.456 0.33-0.5 0.234-0.716 0.83-0.482 1.33 0.234 0.5 0.83 0.715 1.33 0.481 0.53-0.248 1.66-0.626 3.048-0.222 0.365 0.107 0.569 0.248 0.69 0.37 0.122 0.123 0.204 0.27 0.258 0.454 0.067 0.225 0.087 0.446 0.09 0.69C7.84 9.68 7.655 9.64 7.459 9.606c-1.146-0.199-2.733-0.215-4.262 0.64-1.271 0.713-1.796 2.168-1.682 3.448 0.12 1.326 0.94 2.679 2.572 3.136 1.48 0.414 2.913-0.045 3.877-0.507l0.08-0.04c0.122 0.416 0.506 0.719 0.96 0.719 0.553 0 1-0.448 1-1V10.5c0-0.053 0.002-0.12 0.005-0.2 0.012-0.417 0.034-1.16-0.168-1.838C9.71 8.023 9.48 7.57 9.086 7.172S8.176 6.478 7.538 6.29H7.537zm-0.419 5.287c0.344 0.06 0.647 0.143 0.887 0.222v2.197c-0.224 0.156-0.538 0.35-0.904 0.525-0.792 0.38-1.682 0.605-2.473 0.384-0.698-0.195-1.06-0.742-1.119-1.389-0.062-0.693 0.243-1.286 0.667-1.523 0.987-0.553 2.06-0.569 2.943-0.415z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M16.961 5.987c0.13-0.394-0.082-0.818-0.475-0.949-0.393-0.13-0.818 0.083-0.948 0.476-0.148 0.445-0.304 1.04-0.42 1.512-0.736 0.026-1.446 0.018-2.067-0.024-0.413-0.028-0.771 0.284-0.8 0.697-0.027 0.413 0.285 0.771 0.698 0.8 0.563 0.038 1.19 0.05 1.844 0.037-0.144 0.765-0.241 1.449-0.3 2.064-1.215 0.642-2.061 1.504-2.539 2.412-0.613 1.166-0.66 2.556 0.206 3.443 0.571 0.584 1.408 0.64 2.129 0.485 0.405-0.087 0.825-0.248 1.24-0.474l0.018 0.046c0.145 0.389 0.577 0.586 0.965 0.44 0.388-0.144 0.585-0.576 0.44-0.964-0.056-0.152-0.114-0.291-0.17-0.424 1.023-0.936 1.915-2.308 2.285-4.047 0.638 0.312 1.07 0.836 1.278 1.4 0.227 0.613 0.213 1.312-0.097 1.952-0.308 0.636-0.933 1.265-2.015 1.681-0.387 0.149-0.58 0.583-0.431 0.97 0.149 0.386 0.582 0.579 0.969 0.43 1.387-0.533 2.33-1.402 2.827-2.427 0.494-1.02 0.518-2.143 0.154-3.127-0.414-1.116-1.3-2.01-2.505-2.424 0.002-0.073 0.003-0.147 0.003-0.222C19.25 9.336 18.914 9 18.5 9c-0.405 0-0.735 0.322-0.75 0.724-0.524-0.005-1.084 0.07-1.672 0.237 0.064-0.455 0.148-0.953 0.257-1.5 1.185-0.089 2.364-0.252 3.337-0.48 0.403-0.095 0.653-0.5 0.558-0.902-0.095-0.404-0.498-0.654-0.902-0.559-0.767 0.18-1.69 0.318-2.637 0.406 0.085-0.33 0.18-0.67 0.27-0.94zm-3.68 7.723c0.227-0.43 0.6-0.886 1.147-1.3 0.017 0.492 0.065 0.926 0.137 1.317 0.094 0.52 0.236 0.974 0.386 1.373-0.306 0.171-0.632 0.3-0.977 0.374-0.485 0.104-0.687-0.012-0.742-0.068-0.24-0.245-0.394-0.853 0.05-1.696zm4.315-2.487c-0.21 0.966-0.7 2.022-1.414 2.848-0.052-0.184-0.1-0.385-0.142-0.612-0.089-0.49-0.14-1.092-0.111-1.866 0.11-0.042 0.222-0.082 0.339-0.12 0.481-0.16 0.924-0.238 1.328-0.25zM7.96 6.53C5.72 5.878 3.958 6.681 3.385 6.997c-0.363 0.2-0.494 0.657-0.294 1.02C3.29 8.378 3.747 8.51 4.11 8.31c0.405-0.223 1.736-0.833 3.43-0.34 0.773 0.227 1.098 0.64 1.264 1.056 0.133 0.332 0.175 0.691 0.188 1.042-0.27-0.075-0.581-0.15-0.923-0.21-1.132-0.202-2.682-0.263-4.122 0.427-1.586 0.76-2.13 2.316-1.902 3.697 0.224 1.356 1.216 2.666 2.8 2.951 1.43 0.258 2.806-0.256 3.757-0.761 0.14-0.074 0.271-0.148 0.396-0.222v0.3c0 0.414 0.335 0.75 0.75 0.75 0.414 0 0.75-0.336 0.75-0.75v-5.79c0-0.454 0-1.236-0.3-1.99-0.331-0.829-1.005-1.578-2.236-1.94H7.96zm-0.153 4.804c0.483 0.086 0.898 0.206 1.19 0.305v2.506l-0.105 0.078C8.653 14.4 8.31 14.63 7.9 14.847c-0.84 0.447-1.85 0.779-2.788 0.61-0.845-0.152-1.445-0.866-1.586-1.72-0.138-0.83 0.179-1.673 1.07-2.1 1.037-0.496 2.226-0.478 3.212-0.303z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/ic_fluent_translate_24_filled"/>
<item android:state_enabled="true" android:drawable="@drawable/ic_fluent_translate_24_regular"/>
<item android:drawable="@drawable/ic_fluent_translate_24_regular"/>
</selector>

View File

@@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?colorSecondary" android:pathData="M12.87,15.07l-2.54,-2.51 0.03,-0.03c1.74,-1.94 2.98,-4.17 3.71,-6.53L17,6L17,4h-7L10,2L8,2v2L1,4v1.99h11.17C11.5,7.92 10.44,9.75 9,11.35 8.07,10.32 7.3,9.19 6.69,8h-2c0.73,1.63 1.73,3.17 2.98,4.56l-5.09,5.02L4,19l5,-5 3.11,3.11 0.76,-2.04zM18.5,10h-2L12,22h2l1.12,-3h4.75L21,22h2l-4.5,-12zM15.88,17l1.62,-4.33L19.12,17h-3.24z"/>
</vector>

View File

@@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?colorSecondary" android:pathData="M12.87,15.07l-2.54,-2.51 0.03,-0.03c1.74,-1.94 2.98,-4.17 3.71,-6.53L17,6L17,4h-7L10,2L8,2v2L1,4v1.99h11.17C11.5,7.92 10.44,9.75 9,11.35 8.07,10.32 7.3,9.19 6.69,8h-2c0.73,1.63 1.73,3.17 2.98,4.56l-5.09,5.02L4,19l5,-5 3.11,3.11 0.76,-2.04zM18.5,10h-2L12,22h2l1.12,-3h4.75L21,22h2l-4.5,-12zM15.88,17l1.62,-4.33L19.12,17h-3.24z"/>
</vector>

View File

@@ -26,20 +26,8 @@
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="36dp" android:layout_height="36dp"
android:layout_marginTop="-6dp" android:layout_marginTop="-6dp"
android:layout_marginEnd="6dp" android:layout_marginRight="6dp"
android:layout_toStartOf="@id/more" android:layout_toLeftOf="@id/more"
android:background="?android:selectableItemBackgroundBorderless"
android:scaleType="center"
android:src="@drawable/ic_visibility"
android:tint="?android:textColorSecondary" />
<ImageView
android:id="@+id/translate"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginTop="-6dp"
android:layout_marginEnd="6dp"
android:layout_toStartOf="@id/visibility"
android:background="?android:selectableItemBackgroundBorderless" android:background="?android:selectableItemBackgroundBorderless"
android:scaleType="center" android:scaleType="center"
android:src="@drawable/ic_visibility" android:src="@drawable/ic_visibility"
@@ -58,7 +46,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="24dp" android:layout_height="24dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:layout_toStartOf="@id/translate" android:layout_toStartOf="@id/visibility"
android:layout_toEndOf="@id/avatar"> android:layout_toEndOf="@id/avatar">
<TextView <TextView
@@ -90,7 +78,7 @@
android:layout_height="20dp" android:layout_height="20dp"
android:layout_below="@id/name_wrap" android:layout_below="@id/name_wrap"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:layout_toStartOf="@id/translate" android:layout_toStartOf="@id/visibility"
android:layout_toEndOf="@id/avatar" android:layout_toEndOf="@id/avatar"
android:layoutDirection="locale" android:layoutDirection="locale"
android:orientation="horizontal"> android:orientation="horizontal">

View File

@@ -7,6 +7,7 @@
android:paddingBottom="12dp"> android:paddingBottom="12dp">
<LinearLayout <LinearLayout
android:id="@+id/text_wrap"
android:orientation="vertical" android:orientation="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@@ -32,10 +33,9 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textAppearance="@style/m3_title_medium" android:textAppearance="@style/m3_title_medium"
android:background="@color/error_900" android:background="?colorBackgroundLight"
tools:text="CW title"/> tools:text="CW title"/>
<View <View
android:id="@+id/border_bottom" android:id="@+id/border_bottom"
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -49,27 +49,58 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingHorizontal="16dp" android:paddingHorizontal="16dp"
android:textSize="16sp" android:textSize="16sp"
android:textAppearance="@style/m3_body_large" android:textAppearance="@style/m3_body_large"/>
tools:text="setting up my mstdn"/>
<!-- <Button--> <org.joinmastodon.android.ui.views.AutoOrientationLinearLayout
<!-- android:id="@+id/translate"--> android:id="@+id/translate_wrap"
<!-- android:layout_width="wrap_content"--> android:layout_width="match_parent"
<!-- android:layout_height="32dp"--> android:layout_height="wrap_content"
<!-- android:background="@drawable/bg_inline_button"--> android:layout_marginTop="8dp"
<!-- android:elevation="0dp"--> android:gravity="center_vertical">
<!-- android:ellipsize="middle"-->
<!-- android:fontFamily="sans-serif-medium"-->
<!-- android:singleLine="true"-->
<!-- android:stateListAnimator="@null"-->
<!-- android:textColor="?android:textColorPrimary"-->
<!-- android:textSize="16sp"-->
<!-- tools:text="@string/pink_color" />-->
<FrameLayout
android:id="@+id/action_btn_wrap"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
android:clipToPadding="false">
<org.joinmastodon.android.ui.views.ProgressBarButton
android:id="@+id/translate_btn"
style="?secondaryButtonStyle"
android:background="?android:selectableItemBackground"
android:textColor="?android:textColorSecondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="8dp"
tools:text="@string/sk_translate_post"/>
<ProgressBar
android:id="@+id/translate_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true"
style="?android:progressBarStyleSmall"
android:elevation="10dp"
android:outlineProvider="none"
android:indeterminateTint="?android:textColorPrimary"
android:visibility="gone"/>
</FrameLayout>
<TextView
android:id="@+id/translate_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="4dp"
android:layout_weight="1"
android:textColor="?android:textColorSecondary"
android:textAlignment="textEnd"
tools:text="Translated using TranslateEngine" />
</org.joinmastodon.android.ui.views.AutoOrientationLinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:visibility="gone" android:visibility="gone"
android:id="@+id/spoiler_overlay" android:id="@+id/spoiler_overlay"

View File

@@ -85,7 +85,7 @@
<LinearLayout <LinearLayout
android:id="@+id/posts_btn" android:id="@+id/posts_btn"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="56dp" android:layout_height="wrap_content"
android:layout_marginTop="12dp" android:layout_marginTop="12dp"
android:layout_marginEnd="12dp" android:layout_marginEnd="12dp"
android:gravity="center_horizontal" android:gravity="center_horizontal"
@@ -112,7 +112,7 @@
<LinearLayout <LinearLayout
android:id="@+id/following_btn" android:id="@+id/following_btn"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="56dp" android:layout_height="wrap_content"
android:layout_marginTop="12dp" android:layout_marginTop="12dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:padding="4dp" android:padding="4dp"
@@ -140,7 +140,7 @@
<LinearLayout <LinearLayout
android:id="@+id/followers_btn" android:id="@+id/followers_btn"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="56dp" android:layout_height="wrap_content"
android:layout_marginTop="12dp" android:layout_marginTop="12dp"
android:layout_marginEnd="12dp" android:layout_marginEnd="12dp"
android:padding="4dp" android:padding="4dp"

View File

@@ -35,7 +35,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end" android:layout_gravity="center_vertical|end"
android:background="?android:selectableItemBackground" android:background="?android:selectableItemBackground"
android:textColor="?colorAccentLight" android:textColor="?android:textColorPrimary"
android:textAllCaps="true" android:textAllCaps="true"
android:textSize="14dp" android:textSize="14dp"
android:paddingLeft="16dp" android:paddingLeft="16dp"

View File

@@ -7,4 +7,5 @@
<item android:id="@+id/blue_color" android:title="@string/sk_color_theme_blue"/> <item android:id="@+id/blue_color" android:title="@string/sk_color_theme_blue"/>
<item android:id="@+id/orange_color" android:title="@string/sk_color_theme_brown"/> <item android:id="@+id/orange_color" android:title="@string/sk_color_theme_brown"/>
<item android:id="@+id/yellow_color" android:title="@string/sk_color_theme_yellow"/> <item android:id="@+id/yellow_color" android:title="@string/sk_color_theme_yellow"/>
<item android:id="@+id/red_color" android:title="@string/sk_color_theme_red"/>
</menu> </menu>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/bookmarks" android:title="@string/bookmarks" android:icon="@drawable/ic_fluent_bookmark_multiple_24_regular" android:showAsAction="always"/> <item android:id="@+id/bookmarks" android:title="@string/bookmarks" android:icon="@drawable/ic_fluent_bookmark_24_regular" android:showAsAction="always"/>
<item android:id="@+id/favorites" android:title="@string/your_favorites" android:icon="@drawable/ic_fluent_star_24_regular"/> <item android:id="@+id/favorites" android:title="@string/your_favorites" android:icon="@drawable/ic_fluent_star_24_regular" android:showAsAction="always"/>
<item android:id="@+id/share" android:title="@string/share_user" android:icon="@drawable/ic_fluent_share_24_regular"/> <item android:id="@+id/share" android:title="@string/share_user" android:icon="@drawable/ic_fluent_share_24_regular" android:showAsAction="always"/>
</menu> </menu>

View File

@@ -40,11 +40,11 @@
<string name="sk_settings_show_federated_timeline">Mostra la línia de temps federada</string> <string name="sk_settings_show_federated_timeline">Mostra la línia de temps federada</string>
<string name="sk_notification_type_status">Publicacions</string> <string name="sk_notification_type_status">Publicacions</string>
<string name="sk_notify_posts">Notificacions de publicacions</string> <string name="sk_notify_posts">Notificacions de publicacions</string>
<string name="sk_settings_color_picker">Color de tema</string> <string name="sk_settings_color_palette">Color de tema</string>
<string name="sk_color_theme_pink">Rosa</string> <string name="sk_color_palette_pink">Rosa</string>
<string name="sk_color_theme_purple">Lila</string> <string name="sk_color_palette_purple">Lila</string>
<string name="sk_color_theme_green">Verd</string> <string name="sk_color_palette_green">Verd</string>
<string name="sk_color_theme_blue">Blau</string> <string name="sk_color_palette_blue">Blau</string>
<string name="sk_color_theme_brown">Marró</string> <string name="sk_color_palette_brown">Marró</string>
<string name="sk_color_theme_yellow">Groc</string> <string name="sk_color_palette_yellow">Groc</string>
</resources> </resources>

View File

@@ -39,14 +39,14 @@
<string name="sk_settings_contribute">Zu Moshidon beitragen</string> <string name="sk_settings_contribute">Zu Moshidon beitragen</string>
<string name="sk_settings_show_federated_timeline">Föderierte Timeline anzeigen</string> <string name="sk_settings_show_federated_timeline">Föderierte Timeline anzeigen</string>
<string name="sk_notify_posts">Beitrags-Benachrichtigungen</string> <string name="sk_notify_posts">Beitrags-Benachrichtigungen</string>
<string name="sk_settings_color_picker">Farbschema</string> <string name="sk_settings_color_palette">Farbschema</string>
<string name="sk_color_theme_pink">Pink</string> <string name="sk_color_palette_pink">Pink</string>
<string name="sk_color_theme_purple">Violett</string> <string name="sk_color_palette_purple">Violett</string>
<string name="sk_color_theme_green">Grün</string> <string name="sk_color_palette_green">Grün</string>
<string name="sk_color_theme_brown">Braun</string> <string name="sk_color_palette_brown">Braun</string>
<string name="sk_color_theme_yellow">Gelb</string> <string name="sk_color_palette_yellow">Gelb</string>
<string name="sk_notification_type_status">Beiträge</string> <string name="sk_notification_type_status">Beiträge</string>
<string name="sk_color_theme_blue">Blau</string> <string name="sk_color_palette_blue">Blau</string>
<string name="sk_poll_allow_multiple">Mehrfachantworten erlauben</string> <string name="sk_poll_allow_multiple">Mehrfachantworten erlauben</string>
<string name="sk_translated_using">Übersetzt mit %s</string> <string name="sk_translated_using">Übersetzt mit %s</string>
<string name="sk_post_language">Sprache: %s</string> <string name="sk_post_language">Sprache: %s</string>
@@ -56,4 +56,17 @@
<string name="sk_translate_show_original">Original anzeigen</string> <string name="sk_translate_show_original">Original anzeigen</string>
<string name="sk_available_languages">Verfügbare Sprachen</string> <string name="sk_available_languages">Verfügbare Sprachen</string>
<string name="sk_clear_recent_languages">Zuletzt verwendete Sprachen leeren</string> <string name="sk_clear_recent_languages">Zuletzt verwendete Sprachen leeren</string>
<string name="sk_welcome_title">Willkommen!</string>
<string name="sk_example_domain">beispiel.social</string>
<string name="sk_welcome_text">Der Hai sagt Hi! Um anzufangen, bitte gib den Domain-Namen deiner Heim-Instanz unten ein.</string>
<string name="sk_color_palette_material3">System</string>
<string name="sk_color_palette_red">Rot</string>
<string name="sk_settings_profile">Profil einrichten</string>
<string name="sk_settings_posting">Einstellungen für Beiträge</string>
<string name="sk_settings_filters">Filter konfigurieren</string>
<string name="sk_settings_auth">Sicherheitseinstellungen</string>
<string name="sk_settings_rules">Regelwerk</string>
<string name="sk_settings_about">Über die App</string>
<string name="sk_settings_donate">Spenden</string>
<string name="sk_tabs_disable_swipe">Wischen zwischen Tabs deaktivieren</string>
</resources> </resources>

View File

@@ -40,13 +40,13 @@
<string name="sk_settings_app_version">Moshidon v%1$s (%2$d)</string> <string name="sk_settings_app_version">Moshidon v%1$s (%2$d)</string>
<string name="sk_notification_type_status">Publicaciones</string> <string name="sk_notification_type_status">Publicaciones</string>
<string name="sk_notify_posts">Publicar notificaciones</string> <string name="sk_notify_posts">Publicar notificaciones</string>
<string name="sk_settings_color_picker">Colores para los temas</string> <string name="sk_settings_color_palette">Colores para los temas</string>
<string name="sk_color_theme_pink">Rosa</string> <string name="sk_color_palette_pink">Rosa</string>
<string name="sk_color_theme_purple">Violeta</string> <string name="sk_color_palette_purple">Violeta</string>
<string name="sk_color_theme_green">Verde</string> <string name="sk_color_palette_green">Verde</string>
<string name="sk_color_theme_blue">Azul</string> <string name="sk_color_palette_blue">Azul</string>
<string name="sk_color_theme_brown">Marrón</string> <string name="sk_color_palette_brown">Marrón</string>
<string name="sk_color_theme_yellow">Amarillo</string> <string name="sk_color_palette_yellow">Amarillo</string>
<string name="sk_poll_allow_multiple">Permitir respuesta múltiple</string> <string name="sk_poll_allow_multiple">Permitir respuesta múltiple</string>
<string name="sk_translate_post">Traducir</string> <string name="sk_translate_post">Traducir</string>
<string name="sk_translate_show_original">Mostrar original</string> <string name="sk_translate_show_original">Mostrar original</string>
@@ -56,4 +56,9 @@
<string name="sk_language_name">%s (%s)</string> <string name="sk_language_name">%s (%s)</string>
<string name="sk_confirm_clear_recent_languages">¿Confirma que quiere vaciar sus idiomas usados recientemente\?</string> <string name="sk_confirm_clear_recent_languages">¿Confirma que quiere vaciar sus idiomas usados recientemente\?</string>
<string name="sk_clear_recent_languages">Vaciar idiomas usados recientemente</string> <string name="sk_clear_recent_languages">Vaciar idiomas usados recientemente</string>
<string name="sk_welcome_text">¡El tiburón te saluda! Para empezar, introduzca a continuación el nombre del dominio de su instancia de origen.</string>
<string name="sk_example_domain">example.social</string>
<string name="sk_welcome_title">¡Bienvenidos!</string>
<string name="sk_color_palette_material3">Sistema</string>
<string name="sk_color_palette_red">Rojo</string>
</resources> </resources>

View File

@@ -40,13 +40,13 @@
<string name="sk_federated_timeline_info_banner">Ce sont les messages les plus récents des membres de votre fédération.</string> <string name="sk_federated_timeline_info_banner">Ce sont les messages les plus récents des membres de votre fédération.</string>
<string name="sk_notification_type_status">Messages</string> <string name="sk_notification_type_status">Messages</string>
<string name="sk_notify_posts">Notifications des messages</string> <string name="sk_notify_posts">Notifications des messages</string>
<string name="sk_color_theme_pink">Rose</string> <string name="sk_color_palette_pink">Rose</string>
<string name="sk_color_theme_purple">Violet</string> <string name="sk_color_palette_purple">Violet</string>
<string name="sk_color_theme_green">Vert</string> <string name="sk_color_palette_green">Vert</string>
<string name="sk_color_theme_blue">Bleu</string> <string name="sk_color_palette_blue">Bleu</string>
<string name="sk_color_theme_brown">Marron</string> <string name="sk_color_palette_brown">Marron</string>
<string name="sk_color_theme_yellow">Jaune</string> <string name="sk_color_palette_yellow">Jaune</string>
<string name="sk_settings_color_picker">Couleur d\'accentuation</string> <string name="sk_settings_color_palette">Couleur d\'accentuation</string>
<string name="sk_poll_allow_multiple">Autoriser plusieurs choix</string> <string name="sk_poll_allow_multiple">Autoriser plusieurs choix</string>
<string name="sk_translate_post">Traduire</string> <string name="sk_translate_post">Traduire</string>
<string name="sk_translate_show_original">Afficher l\'original</string> <string name="sk_translate_show_original">Afficher l\'original</string>
@@ -56,4 +56,9 @@
<string name="sk_language_name">%s (%s)</string> <string name="sk_language_name">%s (%s)</string>
<string name="sk_confirm_clear_recent_languages">Êtes-vous sûr de vouloir effacer vos langues récemment utilisées \?</string> <string name="sk_confirm_clear_recent_languages">Êtes-vous sûr de vouloir effacer vos langues récemment utilisées \?</string>
<string name="sk_clear_recent_languages">Effacer les langues récemment utilisées</string> <string name="sk_clear_recent_languages">Effacer les langues récemment utilisées</string>
<string name="sk_example_domain">exemple.social</string>
<string name="sk_welcome_title">Bienvenue !</string>
<string name="sk_welcome_text">Le requin vous salue ! Pour commencer, veuillez entrer le nom de domaine de votre instance personnelle ci-dessous.</string>
<string name="sk_color_palette_material3">Système</string>
<string name="sk_color_palette_red">Rouge</string>
</resources> </resources>

View File

@@ -28,7 +28,7 @@
<string name="sk_app_name">Moshidon</string> <string name="sk_app_name">Moshidon</string>
<string name="sk_confirm_delete_and_redraft">Hapus dan tulis ulang kiriman ini\?</string> <string name="sk_confirm_delete_and_redraft">Hapus dan tulis ulang kiriman ini\?</string>
<string name="sk_confirm_unpin_post">Apakah Anda yakin untuk menghapus sematan kiriman ini\?</string> <string name="sk_confirm_unpin_post">Apakah Anda yakin untuk menghapus sematan kiriman ini\?</string>
<string name="sk_settings_contribute">Kontribusi ke Moshidon</string> <string name="sk_settings_contribute">Berkontribusi ke Moshidon</string>
<string name="sk_pinned_posts">Disematkan</string> <string name="sk_pinned_posts">Disematkan</string>
<string name="sk_pin_post">Sematkan ke profil</string> <string name="sk_pin_post">Sematkan ke profil</string>
<string name="sk_visibility_unlisted">Tidak terdaftar</string> <string name="sk_visibility_unlisted">Tidak terdaftar</string>
@@ -40,11 +40,25 @@
<string name="sk_settings_show_federated_timeline">Tampilkan lini masa federasi</string> <string name="sk_settings_show_federated_timeline">Tampilkan lini masa federasi</string>
<string name="sk_notification_type_status">Kiriman</string> <string name="sk_notification_type_status">Kiriman</string>
<string name="sk_notify_posts">Notifikasi kiriman</string> <string name="sk_notify_posts">Notifikasi kiriman</string>
<string name="sk_settings_color_picker">Warna tema</string> <string name="sk_settings_color_palette">Warna tema</string>
<string name="sk_color_theme_pink">Merah muda</string> <string name="sk_color_palette_pink">Merah Muda</string>
<string name="sk_color_theme_purple">Ungu</string> <string name="sk_color_palette_purple">Ungu</string>
<string name="sk_color_theme_green">Hijau</string> <string name="sk_color_palette_green">Hijau</string>
<string name="sk_color_theme_blue">Biru</string> <string name="sk_color_palette_blue">Biru</string>
<string name="sk_color_theme_brown">Cokelat</string> <string name="sk_color_palette_brown">Cokelat</string>
<string name="sk_color_theme_yellow">Kuning</string> <string name="sk_color_palette_yellow">Kuning</string>
<string name="sk_poll_allow_multiple">Perbolehkan beberapa pilihan</string>
<string name="sk_clear_recent_languages">Hapus bahasa terkini yang digunakan</string>
<string name="sk_welcome_title">Selamat datang!</string>
<string name="sk_confirm_clear_recent_languages">Apakah Anda yakin ingin menghapus bahasa terkini yang Anda gunakan\?</string>
<string name="sk_color_palette_material3">Sistem</string>
<string name="sk_available_languages">Bahasa yang tersedia</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_translate_post">Terjemahkan</string>
<string name="sk_translate_show_original">Tampilkan yang asli</string>
<string name="sk_post_language">Bahasa: %s</string>
<string name="sk_example_domain">contoh.social</string>
<string name="sk_color_palette_red">Merah</string>
<string name="sk_translated_using">Diterjemahkan menggunakan %s</string>
<string name="sk_welcome_text">Hiu menyapamu! Untuk memulai, silakan memasukkan nama domain instansi Anda di bawah.</string>
</resources> </resources>

View File

@@ -2,13 +2,13 @@
<resources> <resources>
<string name="sk_notification_type_status">Post</string> <string name="sk_notification_type_status">Post</string>
<string name="sk_notify_posts">Notifiche post</string> <string name="sk_notify_posts">Notifiche post</string>
<string name="sk_settings_color_picker">Colore del tema</string> <string name="sk_settings_color_palette">Colore del tema</string>
<string name="sk_color_theme_pink">Rosa</string> <string name="sk_color_palette_pink">Rosa</string>
<string name="sk_color_theme_purple">Viola</string> <string name="sk_color_palette_purple">Viola</string>
<string name="sk_color_theme_green">Verde</string> <string name="sk_color_palette_green">Verde</string>
<string name="sk_color_theme_blue">Blu</string> <string name="sk_color_palette_blue">Blu</string>
<string name="sk_color_theme_brown">Marrone</string> <string name="sk_color_palette_brown">Marrone</string>
<string name="sk_color_theme_yellow">Giallo</string> <string name="sk_color_palette_yellow">Giallo</string>
<string name="sk_app_name">Moshidon</string> <string name="sk_app_name">Moshidon</string>
<string name="sk_pinned_posts">Fissati</string> <string name="sk_pinned_posts">Fissati</string>
<string name="sk_delete_and_redraft">Elimina e riscrivi</string> <string name="sk_delete_and_redraft">Elimina e riscrivi</string>
@@ -47,4 +47,17 @@
<string name="sk_settings_show_federated_timeline">Mostra timeline federata</string> <string name="sk_settings_show_federated_timeline">Mostra timeline federata</string>
<string name="sk_disable_marquee">Disabilita scorrimento titoli</string> <string name="sk_disable_marquee">Disabilita scorrimento titoli</string>
<string name="sk_reject_follow_request">Rifiuta richiesta di seguirti</string> <string name="sk_reject_follow_request">Rifiuta richiesta di seguirti</string>
<string name="sk_translate_post">Traduci</string>
<string name="sk_translate_show_original">Mostra originale</string>
<string name="sk_translated_using">Tradotto con %s</string>
<string name="sk_post_language">Lingua: %s</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_confirm_clear_recent_languages">Sei sicuro di voler cancellare le lingue usate di recente\?</string>
<string name="sk_clear_recent_languages">Cancella lingue usate di recente</string>
<string name="sk_welcome_title">Benvenuto!</string>
<string name="sk_example_domain">example.social</string>
<string name="sk_poll_allow_multiple">Consenti scelte multiple</string>
<string name="sk_available_languages">Lingue disponibili</string>
<string name="sk_welcome_text">Lo squalo ti saluta! Per iniziare inserisci il dominio dell\'istanza a cui sei iscritto.</string>
<string name="sk_color_palette_material3">Sistema</string>
</resources> </resources>

View File

@@ -39,13 +39,13 @@
<string name="sk_settings_show_federated_timeline">연합 타임라인 표시</string> <string name="sk_settings_show_federated_timeline">연합 타임라인 표시</string>
<string name="sk_notification_type_status">게시물</string> <string name="sk_notification_type_status">게시물</string>
<string name="sk_notify_posts">게시물 알림</string> <string name="sk_notify_posts">게시물 알림</string>
<string name="sk_settings_color_picker">테마 색상</string> <string name="sk_settings_color_palette">테마 색상</string>
<string name="sk_color_theme_pink">분홍색</string> <string name="sk_color_palette_pink">분홍색</string>
<string name="sk_color_theme_purple">보라색</string> <string name="sk_color_palette_purple">보라색</string>
<string name="sk_color_theme_green">초록색</string> <string name="sk_color_palette_green">초록색</string>
<string name="sk_color_theme_blue">파란색</string> <string name="sk_color_palette_blue">파란색</string>
<string name="sk_color_theme_brown">갈색</string> <string name="sk_color_palette_brown">갈색</string>
<string name="sk_color_theme_yellow">노란색</string> <string name="sk_color_palette_yellow">노란색</string>
<string name="sk_settings_contribute">Moshidon에 기여</string> <string name="sk_settings_contribute">Moshidon에 기여</string>
<string name="sk_poll_allow_multiple">다중 선택 허용</string> <string name="sk_poll_allow_multiple">다중 선택 허용</string>
<string name="sk_translate_post">번역하기</string> <string name="sk_translate_post">번역하기</string>
@@ -56,4 +56,9 @@
<string name="sk_available_languages">모든 언어</string> <string name="sk_available_languages">모든 언어</string>
<string name="sk_clear_recent_languages">최근 사용한 언어 지우기</string> <string name="sk_clear_recent_languages">최근 사용한 언어 지우기</string>
<string name="sk_confirm_clear_recent_languages">정말로 최근 사용한 언어를 지우시겠습니까\?</string> <string name="sk_confirm_clear_recent_languages">정말로 최근 사용한 언어를 지우시겠습니까\?</string>
<string name="sk_example_domain">example.social</string>
<string name="sk_welcome_title">환영합니다!</string>
<string name="sk_welcome_text">상어가 당신을 맞이합니다! 시작하기 위해, 아래에 사용하시는 인스턴스의 도메인 이름을 입력해주세요.</string>
<string name="sk_color_palette_material3">시스템</string>
<string name="sk_color_palette_red">빨간색</string>
</resources> </resources>

View File

@@ -18,6 +18,9 @@
<style name="Theme.Mastodon.AutoLightDark.Yellow" parent="Theme.Mastodon.Dark.Yellow"/> <style name="Theme.Mastodon.AutoLightDark.Yellow" parent="Theme.Mastodon.Dark.Yellow"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Yellow" parent="Theme.Mastodon.Dark.TrueBlack.Yellow"/> <style name="Theme.Mastodon.AutoLightDark.TrueBlack.Yellow" parent="Theme.Mastodon.Dark.TrueBlack.Yellow"/>
<style name="Theme.Mastodon.AutoLightDark.Red" parent="Theme.Mastodon.Dark.Red"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Red" parent="Theme.Mastodon.Dark.TrueBlack.Red"/>
<style name="Theme.Mastodon.AutoLightDark.Material3" parent="Theme.Mastodon.Dark.Material3"/> <style name="Theme.Mastodon.AutoLightDark.Material3" parent="Theme.Mastodon.Dark.Material3"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Material3" parent="Theme.Mastodon.Dark.TrueBlack.Material3"/> <style name="Theme.Mastodon.AutoLightDark.TrueBlack.Material3" parent="Theme.Mastodon.Dark.TrueBlack.Material3"/>
</resources> </resources>

View File

@@ -15,7 +15,7 @@
<string name="sk_mark_media_as_sensitive">Oznacz jako wrażliwe</string> <string name="sk_mark_media_as_sensitive">Oznacz jako wrażliwe</string>
<string name="sk_user_post_notifications_on">Włączono powiadomienia dla postu %s</string> <string name="sk_user_post_notifications_on">Włączono powiadomienia dla postu %s</string>
<string name="sk_user_post_notifications_off">Wyłączono powiadomienia dla postu %s</string> <string name="sk_user_post_notifications_off">Wyłączono powiadomienia dla postu %s</string>
<string name="sk_federated_timeline">Globalne</string> <string name="sk_federated_timeline">fediwersum</string>
<string name="sk_federated_timeline_info_banner">To są najnowsze post ze znanej sieci fediwersum dla twojego serwera.</string> <string name="sk_federated_timeline_info_banner">To są najnowsze post ze znanej sieci fediwersum dla twojego serwera.</string>
<string name="sk_update_available">Moshidon %s jest dostępny do pobrania.</string> <string name="sk_update_available">Moshidon %s jest dostępny do pobrania.</string>
<string name="sk_update_ready">Moshidon %s został pobrany i jest gotowy do instalacji.</string> <string name="sk_update_ready">Moshidon %s został pobrany i jest gotowy do instalacji.</string>
@@ -40,13 +40,13 @@
<string name="sk_visibility_unlisted">Niewidoczny</string> <string name="sk_visibility_unlisted">Niewidoczny</string>
<string name="sk_notification_type_status">Wpisy</string> <string name="sk_notification_type_status">Wpisy</string>
<string name="sk_notify_posts">Powiadomienia wpisów</string> <string name="sk_notify_posts">Powiadomienia wpisów</string>
<string name="sk_settings_color_picker">Motyw</string> <string name="sk_settings_color_palette">Motyw</string>
<string name="sk_color_theme_pink">Różowy</string> <string name="sk_color_palette_pink">Różowy</string>
<string name="sk_color_theme_purple">Fioletowy</string> <string name="sk_color_palette_purple">Fioletowy</string>
<string name="sk_color_theme_green">Zielony</string> <string name="sk_color_palette_green">Zielony</string>
<string name="sk_color_theme_blue">Niebieski</string> <string name="sk_color_palette_blue">Niebieski</string>
<string name="sk_color_theme_brown">Brązowy</string> <string name="sk_color_palette_brown">Brązowy</string>
<string name="sk_color_theme_yellow">Żółty</string> <string name="sk_color_palette_yellow">Żółty</string>
<string name="sk_poll_allow_multiple">Pozwalaj na wybieranie wielu opcji</string> <string name="sk_poll_allow_multiple">Pozwalaj na wybieranie wielu opcji</string>
<string name="sk_translate_post">Przetłumacz</string> <string name="sk_translate_post">Przetłumacz</string>
<string name="sk_translate_show_original">Pokaż oryginał</string> <string name="sk_translate_show_original">Pokaż oryginał</string>
@@ -56,4 +56,7 @@
<string name="sk_language_name">%s (%s)</string> <string name="sk_language_name">%s (%s)</string>
<string name="sk_confirm_clear_recent_languages">Czy na pewno chcesz wyczyścić ostatnio użyte języki\?</string> <string name="sk_confirm_clear_recent_languages">Czy na pewno chcesz wyczyścić ostatnio użyte języki\?</string>
<string name="sk_clear_recent_languages">Wyczyść ostatnio użyte języki</string> <string name="sk_clear_recent_languages">Wyczyść ostatnio użyte języki</string>
<string name="sk_example_domain">przykład.social</string>
<string name="sk_welcome_title">Witaj!</string>
<string name="sk_welcome_text">Rekin się kłania! Aby zacząć, wpisz adres swojej instancji poniżej.</string>
</resources> </resources>

View File

@@ -38,14 +38,14 @@
<string name="sk_settings_show_federated_timeline">Mostre a linha do tempo federada</string> <string name="sk_settings_show_federated_timeline">Mostre a linha do tempo federada</string>
<string name="sk_visibility_unlisted">Não-listado</string> <string name="sk_visibility_unlisted">Não-listado</string>
<string name="sk_settings_show_interaction_counts">Mostrar contagens de interação</string> <string name="sk_settings_show_interaction_counts">Mostrar contagens de interação</string>
<string name="sk_color_theme_purple">Roxo</string> <string name="sk_color_palette_purple">Roxo</string>
<string name="sk_color_theme_green">Verde</string> <string name="sk_color_palette_green">Verde</string>
<string name="sk_color_theme_blue">Azul</string> <string name="sk_color_palette_blue">Azul</string>
<string name="sk_color_theme_brown">Marrom</string> <string name="sk_color_palette_brown">Marrom</string>
<string name="sk_color_theme_yellow">Amarelo</string> <string name="sk_color_palette_yellow">Amarelo</string>
<string name="sk_color_theme_pink">Rosa</string> <string name="sk_color_palette_pink">Rosa</string>
<string name="sk_notification_type_status">Postagens</string> <string name="sk_notification_type_status">Postagens</string>
<string name="sk_settings_color_picker">Cor do tema</string> <string name="sk_settings_color_palette">Cor do tema</string>
<string name="sk_translate_post">Traduzir</string> <string name="sk_translate_post">Traduzir</string>
<string name="sk_translate_show_original">Mostrar original</string> <string name="sk_translate_show_original">Mostrar original</string>
<string name="sk_translated_using">Traduzido usando %s</string> <string name="sk_translated_using">Traduzido usando %s</string>
@@ -54,4 +54,11 @@
<string name="sk_language_name">%s (%s)</string> <string name="sk_language_name">%s (%s)</string>
<string name="sk_confirm_clear_recent_languages">Tem certeza de que deseja limpar os idiomas usados recentemente\?</string> <string name="sk_confirm_clear_recent_languages">Tem certeza de que deseja limpar os idiomas usados recentemente\?</string>
<string name="sk_clear_recent_languages">Limpar idiomas usados recentemente</string> <string name="sk_clear_recent_languages">Limpar idiomas usados recentemente</string>
<string name="sk_notify_posts">Notificações de posts</string>
<string name="sk_poll_allow_multiple">Permitir múltiplas escolhas</string>
<string name="sk_welcome_text">O tubarão te cumprimenta! Para começar, por favor, digite abaixo o nome de domínio de sua instância de origem.</string>
<string name="sk_example_domain">exemplo.social</string>
<string name="sk_welcome_title">Bem vindo!</string>
<string name="sk_color_palette_material3">Sistema</string>
<string name="sk_color_palette_red">Vermelho</string>
</resources> </resources>

View File

@@ -15,4 +15,50 @@
<string name="sk_visibility_unlisted">Скрытый</string> <string name="sk_visibility_unlisted">Скрытый</string>
<string name="sk_mark_media_as_sensitive">Отметить медиафайл как деликатный</string> <string name="sk_mark_media_as_sensitive">Отметить медиафайл как деликатный</string>
<string name="sk_settings_app_version">Moshidon v%1$s (%2$d)</string> <string name="sk_settings_app_version">Moshidon v%1$s (%2$d)</string>
<string name="sk_notification_type_status">Публикации</string>
<string name="sk_notify_posts">Отправляет публикацию</string>
<string name="sk_settings_color_palette">Цветовая схема</string>
<string name="sk_color_palette_pink">Розовый</string>
<string name="sk_color_palette_purple">Фиолетовый</string>
<string name="sk_color_palette_brown">Коричневый</string>
<string name="sk_color_palette_yellow">Жёлтый</string>
<string name="sk_translate_show_original">Показать оригинальную публикацию</string>
<string name="sk_translated_using">Переведено через %s</string>
<string name="sk_available_languages">Доступные языки</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_welcome_title">Добро пожаловать!</string>
<string name="sk_example_domain">example.social</string>
<string name="sk_settings_load_new_posts">Автоматически загружать новые публикации</string>
<string name="sk_settings_show_replies">Показывать ответы на публикации</string>
<string name="sk_federated_timeline">Федерация</string>
<string name="sk_update_available">Moshidon %s готов к скачиванию.</string>
<string name="sk_update_ready">Moshidon %s скачан и готов к установке новой версии.</string>
<string name="sk_check_for_update">Проверить обновления</string>
<string name="sk_follow_requests">Запросы на подписку</string>
<string name="sk_lists_with_user">Списки с %s</string>
<string name="sk_confirm_unpin_post">Вы точно хотите открепить эту публикацию от профиля\?</string>
<string name="sk_unpinning">Открепление публикации…</string>
<string name="sk_federated_timeline_info_banner">Это самые последние публикации людей из вашей федерации.</string>
<string name="sk_no_update_available">Обновление отсутствует</string>
<string name="sk_list_timelines">Списки</string>
<string name="sk_accept_follow_request">Принять запрос на подписку</string>
<string name="sk_reject_follow_request">Отклонить заявку на подписку</string>
<string name="sk_settings_always_reveal_content_warnings">Всегда раскрывать предупреждения о непристойном контенте</string>
<string name="sk_settings_contribute">Внести свой код в Moshidon</string>
<string name="sk_settings_show_federated_timeline">Показывать федеративную временную шкалу</string>
<string name="sk_color_palette_green">Зелёный</string>
<string name="sk_color_palette_blue">Синий</string>
<string name="sk_translate_post">Перевести</string>
<string name="sk_post_language">Язык: %s</string>
<string name="sk_clear_recent_languages">Очистить недавно использованные языки</string>
<string name="sk_confirm_clear_recent_languages">Вы точно хотите очистить недавно использованные языки\?</string>
<string name="sk_welcome_text">Акула приветствует вас! Чтобы начать, пожалуйста, введите домен своего домашнего сервера (инстанса) ниже.</string>
<string name="sk_poll_allow_multiple">Разрешить несколько вариантов ответа</string>
<string name="sk_user_post_notifications_on">Уведомления о постах %s включены</string>
<string name="sk_user_post_notifications_off">Уведомления о новых постах %s отключены</string>
<string name="sk_color_palette_material3">Система</string>
<string name="sk_settings_show_boosts">Показать репосты</string>
<string name="sk_settings_show_interaction_counts">Показывать количество взаимодействий</string>
<string name="sk_disable_marquee">Отключить прокручиваемый текст в заголовках</string>
<string name="sk_color_palette_red">Красный</string>
</resources> </resources>

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="sk_notify_posts">Сповіщення про пости</string> <string name="sk_notify_posts">Сповіщення про пости</string>
<string name="sk_settings_color_picker">Колірна тема</string> <string name="sk_settings_color_palette">Колірна тема</string>
<string name="sk_color_theme_purple">Фіолетовий</string> <string name="sk_color_palette_purple">Фіолетовий</string>
<string name="sk_color_theme_green">Зелений</string> <string name="sk_color_palette_green">Зелений</string>
<string name="sk_color_theme_blue">Синий</string> <string name="sk_color_palette_blue">Синий</string>
<string name="sk_color_theme_brown">Коричневий</string> <string name="sk_color_palette_brown">Коричневий</string>
<string name="sk_color_theme_yellow">Жовтий</string> <string name="sk_color_palette_yellow">Жовтий</string>
<string name="sk_poll_allow_multiple">Дозволити кілька виборів</string> <string name="sk_poll_allow_multiple">Дозволити кілька виборів</string>
<string name="sk_translate_post">Перекласти</string> <string name="sk_translate_post">Перекласти</string>
<string name="sk_translate_show_original">Показати оригінал</string> <string name="sk_translate_show_original">Показати оригінал</string>
@@ -17,7 +17,7 @@
<string name="sk_clear_recent_languages">Очистити нещодавно використані мови</string> <string name="sk_clear_recent_languages">Очистити нещодавно використані мови</string>
<string name="sk_settings_always_reveal_content_warnings">Завжди відкривати вміст</string> <string name="sk_settings_always_reveal_content_warnings">Завжди відкривати вміст</string>
<string name="sk_notification_type_status">Пости</string> <string name="sk_notification_type_status">Пости</string>
<string name="sk_color_theme_pink">Рожевий</string> <string name="sk_color_palette_pink">Рожевий</string>
<string name="sk_confirm_clear_recent_languages">Ви впевнені, що хочете очистити нещодавно використані мови\?</string> <string name="sk_confirm_clear_recent_languages">Ви впевнені, що хочете очистити нещодавно використані мови\?</string>
<string name="sk_app_name">Moshidon</string> <string name="sk_app_name">Moshidon</string>
<string name="sk_pinned_posts">Закріплене</string> <string name="sk_pinned_posts">Закріплене</string>
@@ -56,4 +56,7 @@
<string name="sk_no_update_available">Немає доступних оновлень</string> <string name="sk_no_update_available">Немає доступних оновлень</string>
<string name="sk_list_timelines">Списки</string> <string name="sk_list_timelines">Списки</string>
<string name="sk_settings_show_federated_timeline">Показувати федеративну стрічку</string> <string name="sk_settings_show_federated_timeline">Показувати федеративну стрічку</string>
<string name="sk_example_domain">example.social</string>
<string name="sk_welcome_title">Вітаємо!</string>
<string name="sk_welcome_text">Акулка вас вітає! Щоб розпочати, введіть нижче доменне ім’я вашого інстансу.</string>
</resources> </resources>

View File

@@ -5,4 +5,5 @@
<color name="blue_navigation_bar_bg">@color/blue_gray_50</color> <color name="blue_navigation_bar_bg">@color/blue_gray_50</color>
<color name="orange_navigation_bar_bg">@color/orange_gray_50</color> <color name="orange_navigation_bar_bg">@color/orange_gray_50</color>
<color name="yellow_navigation_bar_bg">@color/yellow_gray_50</color> <color name="yellow_navigation_bar_bg">@color/yellow_gray_50</color>
<color name="red_navigation_bar_bg">@color/red_gray_50</color>
</resources> </resources>

View File

@@ -38,13 +38,13 @@
<string name="sk_settings_show_federated_timeline">显示联邦时间轴</string> <string name="sk_settings_show_federated_timeline">显示联邦时间轴</string>
<string name="sk_follow_requests">关注请求</string> <string name="sk_follow_requests">关注请求</string>
<string name="sk_settings_always_reveal_content_warnings">总是显示内容警告</string> <string name="sk_settings_always_reveal_content_warnings">总是显示内容警告</string>
<string name="sk_settings_color_picker">主题色</string> <string name="sk_settings_color_palette">主题色</string>
<string name="sk_color_theme_pink"></string> <string name="sk_color_palette_pink"></string>
<string name="sk_color_theme_purple"></string> <string name="sk_color_palette_purple"></string>
<string name="sk_color_theme_green">绿</string> <string name="sk_color_palette_green">绿</string>
<string name="sk_color_theme_blue"></string> <string name="sk_color_palette_blue"></string>
<string name="sk_color_theme_brown"></string> <string name="sk_color_palette_brown"></string>
<string name="sk_color_theme_yellow"></string> <string name="sk_color_palette_yellow"></string>
<string name="sk_notification_type_status">嘟文</string> <string name="sk_notification_type_status">嘟文</string>
<string name="sk_notify_posts">嘟文通知</string> <string name="sk_notify_posts">嘟文通知</string>
</resources> </resources>

View File

@@ -91,6 +91,18 @@
<color name="yellow_primary_800">#3c2f00</color> <color name="yellow_primary_800">#3c2f00</color>
<color name="yellow_primary_900">#231b00</color> <color name="yellow_primary_900">#231b00</color>
<color name="red_primary_25">#FFFBFA</color>
<color name="red_primary_50">#FEF3F2</color>
<color name="red_primary_100">#FEE4E2</color>
<color name="red_primary_200">#FECDCA</color>
<color name="red_primary_300">#FDA29B</color>
<color name="red_primary_400">#F97066</color>
<color name="red_primary_500">#F04438</color>
<color name="red_primary_600">#D92D20</color>
<color name="red_primary_700">#B42318</color>
<color name="red_primary_800">#912018</color>
<color name="red_primary_900">#7A271A</color>
<color name="custom_gray_900">#000000</color> <color name="custom_gray_900">#000000</color>
<color name="custom_gray_800t">#cc171717</color> <color name="custom_gray_800t">#cc171717</color>
<color name="custom_gray_800">#171717</color> <color name="custom_gray_800">#171717</color>
@@ -147,6 +159,14 @@
<color name="yellow_gray_50">#fff0ca</color> <color name="yellow_gray_50">#fff0ca</color>
<color name="yellow_gray_25">#f7f8fa</color> <color name="yellow_gray_25">#f7f8fa</color>
<color name="red_gray_400">#d69f84</color>
<color name="red_gray_300">#f4ba9e</color>
<color name="red_gray_200">#ffdbcb</color>
<color name="red_gray_100">#ffedea</color>
<color name="red_gray_50t">#ffede6ca</color>
<color name="red_gray_50">#ffede6</color>
<color name="red_gray_25">#f7f8fa</color>
<color name="error_25">#FFFBFA</color> <color name="error_25">#FFFBFA</color>
<color name="error_50">#FEF3F2</color> <color name="error_50">#FEF3F2</color>
<color name="error_100">#FEE4E2</color> <color name="error_100">#FEE4E2</color>
@@ -211,6 +231,7 @@
<color name="favorite_selected">@color/warning_500</color> <color name="favorite_selected">@color/warning_500</color>
<color name="bookmark_selected">@color/success_500</color> <color name="bookmark_selected">@color/success_500</color>
<color name="boost_selected">?android:colorPrimary</color> <color name="boost_selected">?android:colorPrimary</color>
<color name="translate_selected">?android:colorPrimary</color>
<color name="shortcut_icon_background">#282C37</color> <color name="shortcut_icon_background">#282C37</color>
<!-- <color name="shortcut_icon_foreground">@color/primary_700</color>--> <!-- <color name="shortcut_icon_foreground">@color/primary_700</color>-->

View File

@@ -47,6 +47,7 @@
<string name="sk_color_theme_blue">Blue</string> <string name="sk_color_theme_blue">Blue</string>
<string name="sk_color_theme_brown">Orange</string> <string name="sk_color_theme_brown">Orange</string>
<string name="sk_color_theme_yellow">Yellow</string> <string name="sk_color_theme_yellow">Yellow</string>
<string name="sk_color_theme_red">Red</string>
<string name="sk_color_theme_material3">Material You</string> <string name="sk_color_theme_material3">Material You</string>
<string name="sk_not_supported">Not supported on your device</string> <string name="sk_not_supported">Not supported on your device</string>
<string name="sk_poll_allow_multiple">Allow multiple choices</string> <string name="sk_poll_allow_multiple">Allow multiple choices</string>

View File

@@ -690,6 +690,97 @@
<item name="android:textColorSecondary">@color/custom_gray_800</item> <item name="android:textColorSecondary">@color/custom_gray_800</item>
</style> </style>
<style name="Theme.Mastodon.Light.Red" parent="Theme.Mastodon.Light.CustomBase">
<item name="android:colorAccent">@color/red_primary_700</item>
<item name="android:colorBackground">@color/red_gray_100</item>
<item name="colorButtonText">@color/red_gray_50</item>
<item name="colorBackgroundLight">@color/red_gray_50</item>
<item name="colorBackgroundLightest">@color/red_gray_25</item>
<item name="android:statusBarColor">@color/red_gray_50</item>
<item name="android:navigationBarColor">@color/red_navigation_bar_bg</item>
<item name="android:actionBarTheme">@style/Theme.Mastodon.Toolbar.Red</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Red</item>
<item name="colorPollMostVoted">@color/red_primary_500</item>
<item name="colorPollVoted">@color/red_gray_300</item>
<item name="colorAccentLight">@color/red_primary_600</item>
<item name="colorSearchField">@color/red_gray_200</item>
<item name="colorTabInactive">@color/red_gray_400</item>
<item name="colorAccentLightest">@color/red_primary_100</item>
<item name="colorSecondary">@color/red_gray_50</item>
</style>
<style name="Theme.Mastodon.Dark.Red" parent="Theme.Mastodon.Dark.CustomBase">
<item name="android:colorAccent">@color/red_primary_400</item>
<item name="android:colorPrimary">@color/red_gray_50</item>
<item name="android:textColorPrimary">@color/red_gray_50</item>
<item name="android:textColorSecondary">@color/red_gray_400</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Dark.Red</item>
<item name="colorPollMostVoted">@color/red_primary_700</item>
<item name="colorAccentLight">@color/red_primary_600</item>
<item name="colorAccentLightest">@color/red_primary_800</item>
<item name="colorTabInactive">@color/red_gray_400</item>
<item name="colorSearchHint">@color/red_gray_300</item>
<item name="colorSecondary">@color/red_gray_50</item>
</style>
<style name="Theme.Mastodon.Dark.TrueBlack.Red" parent="Theme.Mastodon.Dark.Red">
<item name="android:colorAccent">@color/red_primary_400</item>
<item name="colorPollMostVoted">@color/red_primary_700</item>
<item name="colorAccentLight">@color/red_primary_600</item>
<item name="colorAccentLightest">@color/red_primary_800</item>
<item name="colorSecondary">@color/red_gray_50</item>
<item name="colorPollVoted">@color/custom_gray_800</item>
<item name="colorSearchField">@color/custom_gray_900</item>
<item name="colorBackgroundPopup">@color/custom_gray_900</item>
<item name="android:navigationBarColor">@color/black</item>
<item name="android:colorBackground">@color/black</item>
<item name="android:statusBarColor">@color/black</item>
<item name="android:actionBarTheme">@style/Theme.Mastodon.Toolbar.Dark.TrueBlack</item>
<item name="colorBackgroundLight">@color/black</item>
<item name="colorWindowBackground">@color/black</item>
<item name="colorButtonText">@color/black</item>
<item name="colorBackgroundLightest">@color/black</item>
</style>
<style name="Theme.Mastodon.AutoLightDark.Red" parent="Theme.Mastodon.Light.Red"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Red" parent="Theme.Mastodon.Light.Red"/>
<style name="Theme.Mastodon.Dialog.Alert.Dark.Red" parent="android:Theme.Material.Dialog.Alert">
<item name="android:windowTitleStyle">@style/alert_title</item>
<item name="android:dialogPreferredPadding">24dp</item>
<item name="android:windowBackground">@drawable/bg_alert</item>
<item name="android:buttonBarButtonStyle">@style/Widget.Mastodon.ButtonBarButton</item>
<!-- colors -->
<item name="android:colorAccent">@color/red_primary_600</item>
<item name="android:colorPrimary">@color/red_gray_50</item>
<item name="android:colorBackground">@color/custom_gray_700</item>
<item name="android:textColorPrimary">@color/red_gray_50</item>
<item name="android:textColorSecondary">@color/red_gray_400</item>
</style>
<style name="Theme.Mastodon.Dialog.Alert.Red" parent="android:Theme.Material.Light.Dialog.Alert">
<item name="android:windowTitleStyle">@style/alert_title</item>
<item name="android:dialogPreferredPadding">24dp</item>
<item name="android:windowBackground">@drawable/bg_alert</item>
<item name="android:buttonBarButtonStyle">@style/Widget.Mastodon.ButtonBarButton</item>
<!-- colors -->
<item name="android:colorAccent">@color/red_primary_700</item>
<item name="android:colorPrimary">@color/custom_gray_800</item>
<item name="android:colorBackground">@color/red_gray_100</item>
<item name="android:textColorPrimary">@color/custom_gray_800</item>
<item name="android:textColorSecondary">@color/custom_gray_500</item>
</style>
<style name="Theme.Mastodon.Toolbar.Red" parent="android:ThemeOverlay.Material.ActionBar">
<item name="android:colorPrimary">@color/red_gray_50</item>
<item name="android:textColorPrimary">@color/custom_gray_800</item>
<item name="android:textColorSecondary">@color/custom_gray_800</item>
</style>
<style name="Theme.Mastodon.Dark.Original" parent="Theme.Mastodon.Dark"> <style name="Theme.Mastodon.Dark.Original" parent="Theme.Mastodon.Dark">
<item name="android:colorAccent">@color/original_primary_400</item> <item name="android:colorAccent">@color/original_primary_400</item>

View File

@@ -0,0 +1,4 @@
- Diperbaiki perenderan tag HTML dan aktifkan perenderan format Markdown
- Dimulai <a href="https://translate.codeberg.org/projects/megalodon">proyek terjemahkan Weblate</a>
- Ditambahkan saklar untuk lini masa Federasi
- Versi 52-54 adalah perubahan kecil untuk sebuah rilis di Google Play

View File

@@ -0,0 +1,6 @@
- Tema warna kustom oleh @LucasGGamerM
- Logo teks "megalodon" baru dikirim oleh @LucasGGamerM
- Pencarian emoji lebih baik saat menulis kiriman
- Diubah antarmuka pemungutan suara (tampilkan suara sendiri, selalu tampilkan tombol kirim suara, jangan potong jawaban panjang)
- Ditambahkan pengaturan notifikasi dorong untuk notifikasi kiriman
- Perbaikan kutu

View File

@@ -0,0 +1,6 @@
- Ditambahkan pemilih bahasa
- Ditambahkan kemampuan terjemahan
- Ditingkatkan semantik untuk kiriman suara pada pemungutan suara (tombol radio dan kotak centang)
- Ditambahkan opsi untuk perbolehkan mengirim suara beberapa opsi pada pemungutan suara
- Layar masuk baru
- Perbaikan kutu

View File

@@ -9,3 +9,7 @@ Megalodon adalah versi modifikasi <a href="https://github.com/mastodon/mastodon-
- <b>Ikuti tagar</b>: Lihat kiriman baru dari tagar spesifik secara langsung dalam lini masa beranda Anda dengan mengikutinya. - <b>Ikuti tagar</b>: Lihat kiriman baru dari tagar spesifik secara langsung dalam lini masa beranda Anda dengan mengikutinya.
- <b>Menjawab permintaan pengikut</b>: Tolak atau terima permintaan pengikut dari notifikasi Anda atau daftar permintaan pengikut khusus. - <b>Menjawab permintaan pengikut</b>: Tolak atau terima permintaan pengikut dari notifikasi Anda atau daftar permintaan pengikut khusus.
- <b>Hapus dan draf ulang</b>: Fitur yang banyak disukai yang membuat penyuntingan memungkinkan tanpa fungsi penyuntingan yang asli. - <b>Hapus dan draf ulang</b>: Fitur yang banyak disukai yang membuat penyuntingan memungkinkan tanpa fungsi penyuntingan yang asli.
- <b>Pemilih bahasa</b>: Pilih bahasa untuk setiap kiriman tanpa kesulitan supaya saringan dan terjemahan bekerja dengan benar.
- <b>Terjemahan</b>: Terjemahkan kiriman dalam Megalodon dengan mudah! Hanya bekerja jika fitur juga tersedia di Mastodon Web Anda.
- <b>Indikator keterlihatan kiriman</b>: Ketika membuka atau membalas kiriman, sebuah ikon kecil yang menandakan keterlihatan kiriman akan ditampilkan.
- <b>Tema warna</b>: Jika Anda tidak ingin warna Merah Muda bawaan (hiunya diam-diam menghakimimu), tema warna Moshidon akan menyelesaikan masalah itu.

View File

@@ -2,4 +2,5 @@
- 번역 기능 추가 - 번역 기능 추가
- 투표 기능의 보다 명확한 표현 (라디오 버튼 및 체크박스) - 투표 기능의 보다 명확한 표현 (라디오 버튼 및 체크박스)
- 투표 생성 시 다중 선택이 가능하도록 옵션 추가 - 투표 생성 시 다중 선택이 가능하도록 옵션 추가
- 새로운 로그인 화면
- 버그 수정 - 버그 수정

View File

@@ -1,11 +1,15 @@
Megalodon은 <a href="https://github.com/mastodon/mastodon-android">공식 마스토돈 안드로이드 앱</a>의 수정된 버전으로, 공식 앱에서 누락된 연합 타임라인, 타임라인에 비표시하여 게시, 이미지 설명 표시와 같은 중요한 기능들을 추가했습니다. Megalodon은 <a href="https://github.com/mastodon/mastodon-android">공식 마스토돈 안드로이드 앱</a>의 수정된 버전으로, 공식 앱에서 누락된 연합 타임라인, 타임라인에 비표시하여 게시, 이미지 설명 뷰어와 같은 중요한 기능들을 추가했습니다.
<b>주요 기능</b> <b>주요 기능</b>
- <b>타임라인에 비표시하여 게시</b>: 모두가 볼 수 있지만 트렌드, 해시태그 및 공개된 타임라인에 보이지 않습니다. - <b>타임라인에 비표시하여 게시</b>: 모두가 볼 수 있지만 트렌드, 해시태그 및 공개된 타임라인에 보이지 않습니다.
- <b>연합 타임라인</b>: 사용 중인 인스턴스에 연결된 연합우주의 사람들이 올린 모든 공개된 게시물을 확인하세요. - <b>연합 타임라인</b>: 사용 중인 인스턴스에 연결된 연합우주의 사람들이 올린 모든 공개된 게시물을 확인하세요.
- <b>이미지 설명 표시</b>: 이미지나 동영상에 대체 텍스트가 있는지 빠르게 확인하세요. - <b>이미지 설명 뷰어</b>: 이미지나 동영상에 대체 텍스트가 있는지 빠르게 확인하세요.
- <b>게시물 고정</b>: 가장 중요한 게시물을 프로필에 고정하고 “고정됨” 탭으로 다른 사용자가 고정한 게시물을 확인하세요. - <b>게시물 고정</b>: 가장 중요한 게시물을 프로필에 고정하고 “고정됨” 탭으로 다른 사용자가 고정한 게시물을 확인하세요.
- <b>해시태그 팔로우</b>: 특정 해시태그를 팔로우하고 해시태그가 포함된 새로운 게시물을 홈 타임라인에서 바로 확인하세요. - <b>해시태그 팔로우</b>: 특정 해시태그를 팔로우하고 해시태그가 포함된 새로운 게시물을 홈 타임라인에서 바로 확인하세요.
- <b>팔로우 요청에 응답</b>: 알림 또는 전용 팔로우 요청 목록을 통해 팔로우 요청을 허가하거나 거부하세요. - <b>팔로우 요청에 응답</b>: 알림 또는 전용 팔로우 요청 목록을 통해 팔로우 요청을 허가하거나 거부하세요.
- <b>삭제하고 다시 쓰기</b>: 실제 수정 기능 없이도 수정이 가능하도록 해 많은 사랑을 받고 있는 기능입니다. - <b>삭제하고 다시 쓰기</b>: 실제 수정 기능 없이도 수정이 가능하도록 해 많은 사랑을 받고 있는 기능입니다.
- <b>언어 선택기</b>: 게시물을 작성할 때 불편함 없이 언어를 선택하고 필터와 번역 기능이 제대로 동작할 수 있도록 하세요.
- <b>번역</b>: Megaloton에서 바로 게시물을 번역해보세요! 이 기능은 사용하시는 Mastodon 웹에서 지원해야 사용하실 수 있습니다.
- <b>게시물 공개 범위 표시기</b>: 게시물을 열거나 답글을 달 때, 게시물의 공개 범위를 편리한 아이콘으로 표시합니다.
- <b>색상 테마</b>: 기본 핑크 색상이 마음에 들지 않으신다면(상어가 당신을 넌지시 바라봅니다), Moshidon의 색상 테마가 도움을 줄 것입니다.

View File

@@ -1,11 +1,15 @@
Megalodon é uma versão modificada do <a href="https://github.com/mastodon/mastodon-android">aplicativo oficial do Mastodon para Android</a> adicionando importantes funcionalidades que estão faltando no aplicativo oficial, como a linha do tempo federada, postagens não listadas e um visualizador de descrições de imagem. Megalodon é uma versão modificada do aplicativo <a href="https://github.com/mastodon/mastodon-android">official Mastodon Android app</a> adicionando características importantes que estão faltando no aplicativo oficial, tais como a linha do tempo federada, postagem não listada e um visualizador de descrição de imagem.
<b>Principais recursos</b> <b>Características-chave</b>
- <b>Postagem não listada</b>: Poste publicamente sem que sua postagem apareça nas tendências, hashtags ou linhas do tempo públicas. - <b>Publicação na lista</b>: Postar publicamente sem que seu post apareça em tendências, hashtags ou linhas de tempo públicas.
- <b>Linha do tempo federada</b>: Veja todas as postagens públicas de pessoas em todo o Fediverso que sua instância está conectada. - <b>Linha de tempo federada</b>: Veja todas as postagens públicas de pessoas em todos os outros bairros Fediverse aos quais sua instância de origem está conectada.
- <b>Visualizador de descrição de imagem</b>: Verifique rapidamente se uma imagem ou vídeo tem um texto alternativo anexado a ele. - <b>Visualizador de descrição de imagens</b>: Verifique rapidamente se uma imagem ou vídeo tem um texto alt anexado a ele.
- <b>Fixando postagens</b>: Fixe suas postagens mais importantes em seu perfil e veja o que outras pessoas fixaram usando a guia "Fixado". - <b>Fixar posts</b>: Fixe seus posts mais importantes em seu perfil e veja o que os outros fixaram usando a aba "Fixado".
- <b>Seguir hashtags</b>: Veja novas postagens de hashtags específicas diretamente em sua linha do tempo inicial seguindo-as. - <b>Seguir hashtags</b>: Veja novos posts de hashtags específicos diretamente em sua linha de tempo de casa, seguindo-os.
- <b>Respondendo a solicitações de seguir</b>: Aceite ou recuse pedidos para seguir de suas notificações ou da lista dedicada de solicitações de seguir. - <b>Responder às solicitações</b>: Aceitar ou recusar após as solicitações de suas notificações ou da lista dedicada de solicitações Follow.
- <b>Excluir e reescrever</b>: O recurso muito amado que tornou a edição possível sem uma função de edição real. - <b>Deletar e reescrever</b>: O recurso muito apreciado que tornou possível a edição sem uma função de edição real.
- <b>Seletor de idioma</b>: Selecione indolor o idioma para cada post que você fizer, para que os filtros e a tradução estejam funcionando corretamente.
- <b>Tradução</b>: Traduza facilmente os postes dentro do Megalodon! Só funciona se o recurso também estiver disponível em seu Mastodon Web.
- <b>Indicador de visibilidade de post</b>: Ao abrir ou responder a um post, será exibido um ícone indicando a visibilidade do post.
- <b>Temas de cor</b>: Caso você não goste da cor rosa padrão (o tubarão está silenciosamente julgando você), os temas de cor de Moshidon o cobrirão.

View File

@@ -0,0 +1,15 @@
Megalodon - это модифицированная версия <a href="https://github.com/mastodon/mastodon-android">официального клиента Mastodon на Android</a>, добавляющая важные функции, отсутствующие в официальном приложении, такие как объединенная временная шкала, "скрытая" публикация и просмотр описания изображений.
<b>Основные отличия от официального клиента</b>
- <b>Скрытая Публикация</b>: Публикуйте публично, без того, чтобы ваш пост отображался в трендах, хэштегах или общедоступных временных шкалах.
- <b> Объединенная временная шкала</b>: смотрите все общедоступные сообщения от людей во всех других районах Fediverse, к которым подключен ваш домашний сервер (инстанс).
- <b> Просмотр описания изображения</b>: быстро проверьте, прикреплен ли к изображению или видео альтернативный текст.
- <b> Закрепление сообщений</b>: Прикрепите свои самые важные сообщения к своему профилю и посмотрите, что другие прикрепили, используя вкладку “Закреплено“.
- <b> Подписывайтесь на хэштеги</b>: смотрите новые сообщения с определенными хэштегами непосредственно на своей домашней временной шкале, следуя за ними.
- <b> Ответы на запросы подписчиков</b>: принимайте или отклоняйте запросы подписчиков из ваших уведомлений или специального списка запросов подписчиков.
- <b>"Удалить и исправить"</b>: очень любимая функция, которая сделала возможным редактирование без реальной функции редактирования.
- <b>Выбор языка</b>: Безболезненно выбирайте язык для каждой публикации, которую вы делаете, чтобы фильтры и перевод работали правильно.
- <b>Перевод публикации</b>: Легко переводите публикации прямо внутри Megalodon! Работает только в том случае, если администратор вашего домашнего сервера включил эту функцию для Web-клиента Mastodon.
- <b>Индикатор видимости поста</b>: При открытии поста или ответе на него будет отображаться удобный значок, указывающий на видимость поста.
- <b>Цветовая схема</b>: Если вам по умолчанию не устраивает розовый цвет в клиенте (акула молча вас осуждает), цветовые схемы Moshidon помогут вам.