Compare commits

...

87 Commits

Author SHA1 Message Date
LucasGGamerM
338d8405c0 Bump version number 2022-12-22 18:00:31 -03:00
LucasGGamerM
2169afa8e7 Merge remote-tracking branch 'origin/master' 2022-12-22 15:49:09 -03:00
LucasGGamerM
508ec06d93 Bump version number 2022-12-22 15:48:38 -03:00
LucasGGamerM
9fb39d9403 Making it compile again 2022-12-22 15:46:09 -03:00
sk
4879d74f80 implement followed hashtags list
closes sk22/megalodon#162
2022-12-22 15:36:02 -03:00
LucasGGamerM
ba3f6c4f95 Changing stuff back to moshidon again 2022-12-22 15:32:32 -03:00
LucasGGamerM
481241c4f6 Using fluent icon instead of normal icon for the color picker 2022-12-22 14:58:16 -03:00
LucasGGamerM
5798587dc6 merge branch 'feature/more_html_tags' 2022-12-22 14:50:15 -03:00
sk
066e3e08a2 disable boost button if disabled
closes #180
2022-12-22 14:49:21 -03:00
sk
16d6c14633 try to open link previews in app 2022-12-22 14:49:16 -03:00
sk
80a4a3551c match navigation bar color with toolbar 2022-12-22 14:47:57 -03:00
LucasGGamerM
74f3bb8708 Adding notification icons for different stuff, and fixing the color of the compose_shortcut thing 2022-12-22 14:46:06 -03:00
sk
c3e398b3c2 use color attributes instead of fixed colors 2022-12-22 14:33:46 -03:00
sk
dcfa812c83 fix media upload colors 2022-12-22 14:30:41 -03:00
sk
065e65d708 reset state on boost long click 2022-12-22 14:30:37 -03:00
sk
bca0dab381 add long-click to "quote" 2022-12-22 14:29:34 -03:00
sk
4a45c1055e only perform fedi lookup if looks like fedi url 2022-12-22 14:19:04 -03:00
sk
7c789746ce resolve fediverse links in app
closes sk22#177
closes sk22#96
2022-12-22 14:19:03 -03:00
sk
f46ce5576c reuse old brownish gray and move colors 2022-12-22 14:15:36 -03:00
sk
730e6fc1fa fix wrong default visibility in popup
closes sk22#174
2022-12-22 14:15:18 -03:00
sk
cb36cc042c move button text/background to styles 2022-12-22 14:15:05 -03:00
sk
5d586418f9 add toolbar background color 2022-12-22 14:15:05 -03:00
sk22
44f1d026d6 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-22 14:14:41 -03:00
jonta
defaa1095c 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-22 14:14:34 -03:00
gallegonovato
c67f2f8027 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-22 14:14:28 -03:00
Radiquum
452128565f 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-22 14:14:23 -03:00
Linerly
6322d3c984 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-22 14:14:18 -03:00
Choukajohn
d68c820e58 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-22 14:14:13 -03:00
AiOO
79f37b4813 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-22 14:14:07 -03:00
LucasGGamerM
87460a2fb6 Making it work again just in case idk 2022-12-22 11:52:43 -03:00
LucasGGamerM
6774a642d9 Setting purple as default and making it work idk 2022-12-22 11:49:07 -03:00
LucasGGamerM
f0bd9233b7 IT FINALLY FUCKING COMPILES 2022-12-22 11:27:52 -03:00
LucasGGamerM
66efe750a8 Trying to make it compile properly idek wtf to do anymore 2022-12-22 11:24:36 -03:00
sk
3658fc423b simplify themes 2022-12-22 11:08:26 -03:00
sk
3c3ad7447e only load default visibility if not editing
fix mastodon#306
2022-12-22 09:07:41 -03:00
LucasGGamerM
b570064b99 Fixing missing error toast message 2022-12-22 09:03:14 -03:00
LucasGGamerM
d9f6ef69fe Revert "Whatever the fuck this is. Hopefully it compiles on the first try"
This reverts commit bdac1d5bb4.
2022-12-22 09:01:30 -03:00
sk
bdac1d5bb4 Whatever the fuck this is. Hopefully it compiles on the first try 2022-12-22 09:00:51 -03:00
sk
1eee1ead5e merge miui fix for copying text 2022-12-22 08:58:08 -03:00
sk
0ec51f5b34 set pivot point once 2022-12-22 08:57:13 -03:00
sk
6c6fb05a7a fix broken long click 2022-12-22 08:57:08 -03:00
sk
09a0faacba fix bug in bookmark button
closes #167
2022-12-22 08:51:32 -03:00
sk
d0d1d15de5 add option to disable swiping
closes sk22#165
2022-12-22 08:50:25 -03:00
sk
e4e9516d5d copy post URL on long click 2022-12-22 08:48:05 -03:00
sk
05eceecbea move copy text to UiUtils 2022-12-22 08:48:01 -03:00
sk
71ba1bb0d5 restore toast message for android 13+ 2022-12-22 08:47:56 -03:00
sk
2160a26648 add vibration when copying username 2022-12-22 08:47:52 -03:00
sk
5433eac9c9 fix updating wrong status when interacting with reblog
see mastodon#467
2022-12-22 08:45:55 -03:00
LucasGGamerM
0a68f86200 Update default.html 2022-12-21 19:50:47 -03:00
LucasGGamerM
c91dae0346 Update README.md 2022-12-21 18:04:21 -03:00
LucasGGamerM
e1df7e5077 Update README.md 2022-12-21 18:03:52 -03:00
LucasGGamerM
0560b54559 Bump version number 2022-12-21 17:19:55 -03:00
LucasGGamerM
c78db7e835 Fixing the visibility of the translate button... again. This time I scrolled a lot, so i know its not broken 2022-12-21 17:19:28 -03:00
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
91 changed files with 1571 additions and 1565 deletions

View File

@@ -5,7 +5,7 @@
> A fork of [megalodon](https://github.com/sk22/megalodon) which is a fork of [official Mastodon Android app](https://github.com/mastodon/mastodon-android) adding important features that are missing in the official app and possibly wont ever be implemented, such as the federated timeline, unlisted posting, bookmarks and an image description viewer.
[![Download latest release](https://img.shields.io/badge/dynamic/json?color=d92aad&label=download%20apk&query=%24.tag_name&url=https%3A%2F%2Fapi.github.com%2Frepos%2Fsk22%2Fmastodon-android-fork%2Freleases%2Flatest&style=for-the-badge)](https://github.com/LucasGGamerM/moshidon/releases/latest/download/moshidon.apk)
[![Download latest release](https://img.shields.io/badge/dynamic/json?color=d92aad&label=download%20apk&query=%24.tag_name&url=https%3A%2F%2Fapi.github.com%2Frepos%2FLucasGGamerM%2Fmoshidon%2Freleases%2Flatest&style=for-the-badge)](https://github.com/LucasGGamerM/moshidon/releases/latest/download/moshidon.apk)
---

View File

@@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Megalodon</title>
<title>Moshidon</title>
<link rel="icon" href="mastodon/src/main/res/mipmap-mdpi/ic_launcher_round.png">
<link rel="me" href="https://floss.social/@mastodon">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.1.0/github-markdown.min.css">
@@ -14,4 +14,4 @@
{{ content }}
</div>
</body>
</html>
</html>

View File

@@ -9,8 +9,8 @@ android {
applicationId "org.joinmastodon.android.moshinda"
minSdk 23
targetSdk 33
versionCode 68
versionName "1.1.4+fork.68.moshinda"
versionCode 72
versionName "1.1.4+fork.72.moshinda"
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"
}

View File

@@ -4,7 +4,8 @@
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
@@ -19,7 +20,7 @@
android:localeConfig="@xml/locales_config"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/Theme.Mastodon.AutoLightDark.Original"
android:theme="@style/Theme.Mastodon.AutoLightDark"
android:largeHeap="true">
<activity android:name=".MainActivity" android:exported="true" android:configChanges="orientation|screenSize" android:windowSoftInputMode="adjustResize" android:launchMode="singleTask">

View File

@@ -52,7 +52,8 @@ public class ExternalShareActivity extends FragmentStackActivity{
Intent intent=getIntent();
StringBuilder builder=new StringBuilder();
if (intent.hasExtra(Intent.EXTRA_SUBJECT)) builder.append(intent.getStringExtra(Intent.EXTRA_SUBJECT)).append("\n");
String subject = "";
if (intent.hasExtra(Intent.EXTRA_SUBJECT)) builder.append(subject = intent.getStringExtra(Intent.EXTRA_SUBJECT)).append("\n\n");
if (intent.hasExtra(Intent.EXTRA_TEXT)) builder.append(intent.getStringExtra(Intent.EXTRA_TEXT)).append("\n");
String text=builder.toString();
List<Uri> mediaUris;
@@ -80,6 +81,8 @@ public class ExternalShareActivity extends FragmentStackActivity{
args.putString("account", accountID);
if(!TextUtils.isEmpty(text))
args.putString("prefilledText", text);
if(!subject.isBlank())
args.putInt("selectionEnd", subject.length());
if(mediaUris!=null && !mediaUris.isEmpty())
args.putParcelableArrayList("mediaAttachments", toArrayList(mediaUris));
Fragment fragment=new ComposeFragment();

View File

@@ -25,13 +25,13 @@ public class GlobalUserPreferences{
public static boolean showInteractionCounts;
public static boolean alwaysExpandContentWarnings;
public static boolean disableMarquee;
public static boolean disableSwipe;
public static boolean voteButtonForSingleChoice;
public static ThemePreference theme;
public static ColorPreference color;
private final static Type recentLanguagesType = new TypeToken<Map<String, List<String>>>() {}.getType();
public static Map<String, List<String>> recentLanguages;
public static Map<String, String> defaultLanguages;
private static SharedPreferences getPrefs(){
return MastodonApp.context.getSharedPreferences("global", Context.MODE_PRIVATE);
@@ -54,15 +54,21 @@ public class GlobalUserPreferences{
showInteractionCounts=prefs.getBoolean("showInteractionCounts", false);
alwaysExpandContentWarnings=prefs.getBoolean("alwaysExpandContentWarnings", false);
disableMarquee=prefs.getBoolean("disableMarquee", false);
disableSwipe=prefs.getBoolean("disableSwipe", false);
voteButtonForSingleChoice=prefs.getBoolean("voteButtonForSingleChoice", true);
theme=ThemePreference.values()[prefs.getInt("theme", 0)];
recentLanguages=fromJson(prefs.getString("recentLanguages", "{}"), recentLanguagesType, new HashMap<>());
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){
color=ColorPreference.values()[prefs.getInt("color", 0)];
}else{
color=ColorPreference.values()[prefs.getInt("color", 1)];
}
try {
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){
color=ColorPreference.valueOf(prefs.getString("color", ColorPreference.MATERIAL3.name()));
}else{
color=ColorPreference.PURPLE;
}
} catch (IllegalArgumentException|ClassCastException ignored) {
// invalid color name or color was previously saved as integer
color=ColorPreference.PURPLE;
}
}
public static void save(){
@@ -77,21 +83,22 @@ public class GlobalUserPreferences{
.putBoolean("showInteractionCounts", showInteractionCounts)
.putBoolean("alwaysExpandContentWarnings", alwaysExpandContentWarnings)
.putBoolean("disableMarquee", disableMarquee)
.putBoolean("disableSwipe", disableSwipe)
.putInt("theme", theme.ordinal())
.putString("color", color.name())
.putString("recentLanguages", gson.toJson(recentLanguages))
.putInt("color", color.ordinal())
.apply();
}
public enum ColorPreference{
MATERIAL3,
PURPLE,
PINK,
PURPLE,
GREEN,
BLUE,
ORANGE,
YELLOW,
RED
BROWN,
RED,
YELLOW
}
public enum ThemePreference{
@@ -100,3 +107,4 @@ public class GlobalUserPreferences{
DARK
}
}

View File

@@ -137,13 +137,20 @@ public class PushNotificationReceiver extends BroadcastReceiver{
builder.setContentTitle(pn.title)
.setContentText(pn.body)
.setStyle(new Notification.BigTextStyle().bigText(pn.body))
.setSmallIcon(R.drawable.ic_ntf_logo)
.setContentIntent(PendingIntent.getActivity(context, accountID.hashCode() & 0xFFFF, contentIntent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT))
.setWhen(notification==null ? System.currentTimeMillis() : notification.createdAt.toEpochMilli())
.setShowWhen(true)
.setCategory(Notification.CATEGORY_SOCIAL)
.setAutoCancel(true)
.setColor(context.getColor(R.color.shortcut_icon_background));
switch (pn.notificationType) {
case FAVORITE -> builder.setSmallIcon(R.drawable.ic_fluent_star_24_filled);
case REBLOG -> builder.setSmallIcon(R.drawable.ic_fluent_arrow_repeat_all_24_filled);
case FOLLOW -> builder.setSmallIcon(R.drawable.ic_fluent_person_add_24_filled);
case MENTION -> builder.setSmallIcon(R.drawable.ic_fluent_mention_24_filled);
case POLL -> builder.setSmallIcon(R.drawable.ic_fluent_poll_24_filled);
default -> builder.setSmallIcon(R.drawable.ic_ntf_logo);
}
if(avatar!=null){
builder.setLargeIcon(UiUtils.getBitmapFromDrawable(avatar));
}

View File

@@ -20,6 +20,7 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import androidx.annotation.CallSuper;
import androidx.annotation.StringRes;
@@ -101,9 +102,14 @@ public abstract class MastodonAPIRequest<T> extends APIRequest<T>{
}
public MastodonAPIRequest<T> wrapProgress(Activity activity, @StringRes int message, boolean cancelable){
return wrapProgress(activity, message, cancelable, null);
}
public MastodonAPIRequest<T> wrapProgress(Activity activity, @StringRes int message, boolean cancelable, Consumer<ProgressDialog> transform){
progressDialog=new ProgressDialog(activity);
progressDialog.setMessage(activity.getString(message));
progressDialog.setCancelable(cancelable);
if (transform != null) transform.accept(progressDialog);
if(cancelable){
progressDialog.setOnCancelListener(dialog->cancel());
}

View File

@@ -70,7 +70,8 @@ public class StatusInteractionController{
SetStatusReblogged req=(SetStatusReblogged) new SetStatusReblogged(status.id, reblogged)
.setCallback(new Callback<>(){
@Override
public void onSuccess(Status result){
public void onSuccess(Status reblog){
Status result = reblog.getContentStatus();
runningReblogRequests.remove(status.id);
result.reblogsCount = Math.max(0, status.reblogsCount) + (reblogged ? 1 : -1);
cb.accept(result);

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

@@ -0,0 +1,24 @@
package org.joinmastodon.android.api.requests.tags;
import com.google.gson.reflect.TypeToken;
import org.joinmastodon.android.api.MastodonAPIRequest;
import org.joinmastodon.android.api.requests.HeaderPaginationRequest;
import org.joinmastodon.android.model.Hashtag;
import java.util.List;
public class GetFollowedHashtags extends HeaderPaginationRequest<Hashtag> {
public GetFollowedHashtags(String maxID, String minID, int limit, String sinceID){
super(HttpMethod.GET, "/followed_tags", new TypeToken<>(){});
if(maxID!=null)
addQueryParameter("max_id", maxID);
if(minID!=null)
addQueryParameter("min_id", minID);
if(sinceID!=null)
addQueryParameter("since_id", sinceID);
if(limit>0)
addQueryParameter("limit", ""+limit);
}
}

View File

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

View File

@@ -463,22 +463,6 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
revealSpoiler(status, holder.getItemID());
}
public void onRevealTranslationClick(HeaderStatusDisplayItem.Holder holder, View v){
Status status=holder.getItem().status;
revealTranslation(status, holder.getItemID(), v);
}
protected void revealTranslation(Status status, String itemID, View v){
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){
status.spoilerRevealed=true;
TextStatusDisplayItem.Holder text=findHolderOfType(itemID, TextStatusDisplayItem.Holder.class);
@@ -803,7 +787,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
currentMediaHiddenLayoutsWidth=width;
String title=getString(R.string.sensitive_content);
TextPaint titlePaint=new TextPaint(Paint.ANTI_ALIAS_FLAG);
titlePaint.setColor(getResources().getColor(R.color.gray_50));
titlePaint.setColor(UiUtils.getThemeColor(getContext(), R.attr.colorGray50));
titlePaint.setTextSize(V.dp(22));
titlePaint.setTypeface(mediumTypeface);
mediaHiddenTitleLayout=StaticLayout.Builder.obtain(title, 0, title.length(), titlePaint, width)
@@ -814,7 +798,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
.setAlignment(Layout.Alignment.ALIGN_CENTER)
.build();
TextPaint textPaint=new TextPaint(Paint.ANTI_ALIAS_FLAG);
textPaint.setColor(getResources().getColor(R.color.gray_200));
textPaint.setColor(UiUtils.getThemeColor(getContext(), R.attr.colorGray200));
textPaint.setTextSize(V.dp(16));
String text=getString(R.string.sensitive_content_explain);
mediaHiddenTextLayout=StaticLayout.Builder.obtain(text, 0, text.length(), textPaint, width)

View File

@@ -155,7 +155,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
private int charCount, charLimit, trimmedCharCount;
private Button publishButton, languageButton;
private PopupMenu languagePopup;
private PopupMenu languagePopup, visibilityPopup;
private ImageButton mediaBtn, pollBtn, emojiBtn, spoilerBtn, visibilityBtn;
private ImageView sensitiveIcon;
private ComposeMediaLayout attachmentsView;
@@ -203,10 +203,14 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
private String language;
private MastodonLanguage.LanguageResolver languageResolver;
private int navigationBarColorBefore;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setRetainInstance(true);
navigationBarColorBefore = getActivity().getWindow().getNavigationBarColor();
getActivity().getWindow().setNavigationBarColor(UiUtils.getThemeColor(getActivity(), R.attr.colorBackgroundLightest));
accountID=getArguments().getString("account");
AccountSession session=AccountSessionManager.getInstance().getAccount(accountID);
@@ -233,6 +237,8 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
charLimit=instance.configuration.statuses.maxCharacters;
else
charLimit=500;
if (editingStatus == null) loadDefaultStatusVisibility(savedInstanceState);
}
@Override
@@ -246,6 +252,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
UiUtils.removeCallbacks(updateUploadEtaRunnable);
updateUploadEtaRunnable=null;
}
getActivity().getWindow().setNavigationBarColor(navigationBarColorBefore);
}
@Override
@@ -255,6 +262,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
wm=activity.getSystemService(WindowManager.class);
}
@SuppressLint("ClickableViewAccessibility")
@Override
public View onCreateContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
creatingView=true;
@@ -295,7 +303,9 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
pollBtn.setOnClickListener(v->togglePoll());
emojiBtn.setOnClickListener(v->emojiKeyboard.toggleKeyboardPopup(mainEditText));
spoilerBtn.setOnClickListener(v->toggleSpoiler());
visibilityBtn.setOnClickListener(this::onVisibilityClick);
buildVisibilityPopup(visibilityBtn);
visibilityBtn.setOnClickListener(v->visibilityPopup.show());
visibilityBtn.setOnTouchListener(visibilityPopup.getDragToOpenListener());
sensitiveItem.setOnClickListener(v->toggleSensitive());
emojiKeyboard.setOnIconChangedListener(new PopupKeyboard.OnIconChangeListener(){
@Override
@@ -389,6 +399,12 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
loadDefaultStatusVisibility(savedInstanceState);
updateVisibilityIcon();
visibilityPopup.getMenu().findItem(switch(statusVisibility){
case PUBLIC -> R.id.vis_public;
case UNLISTED -> R.id.vis_unlisted;
case PRIVATE -> R.id.vis_followers;
case DIRECT -> R.id.vis_private;
}).setChecked(true);
autocompleteViewController=new ComposeAutocompleteViewController(getActivity(), accountID);
autocompleteViewController.setCompletionSelectedListener(this::onAutocompleteOptionSelected);
@@ -592,6 +608,11 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
ignoreSelectionChanges=false;
initialText=prefilledText;
}
if (getArguments().containsKey("selectionStart") || getArguments().containsKey("selectionEnd")) {
int selectionStart=getArguments().getInt("selectionStart", 0);
int selectionEnd=getArguments().getInt("selectionEnd", selectionStart);
mainEditText.setSelection(selectionStart, selectionEnd);
}
ArrayList<Uri> mediaUris=getArguments().getParcelableArrayList("mediaAttachments");
if(mediaUris!=null && !mediaUris.isEmpty()){
for(Uri uri:mediaUris){
@@ -1396,19 +1417,13 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
return attachments.size();
}
private void onVisibilityClick(View v){
PopupMenu menu=new PopupMenu(getActivity(), v);
menu.inflate(R.menu.compose_visibility);
Menu m=menu.getMenu();
UiUtils.enablePopupMenuIcons(getActivity(), menu);
private void buildVisibilityPopup(View v){
visibilityPopup=new PopupMenu(getActivity(), v);
visibilityPopup.inflate(R.menu.compose_visibility);
Menu m=visibilityPopup.getMenu();
UiUtils.enablePopupMenuIcons(getActivity(), visibilityPopup);
m.setGroupCheckable(0, true, true);
m.findItem(switch(statusVisibility){
case PUBLIC -> R.id.vis_public;
case UNLISTED -> R.id.vis_unlisted;
case PRIVATE -> R.id.vis_followers;
case DIRECT -> R.id.vis_private;
}).setChecked(true);
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
visibilityPopup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem item){
int id=item.getItemId();
@@ -1426,7 +1441,6 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
return true;
}
});
menu.show();
}
private void loadDefaultStatusVisibility(Bundle savedInstanceState) {

View File

@@ -0,0 +1,107 @@
package org.joinmastodon.android.fragments;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.requests.tags.GetFollowedHashtags;
import org.joinmastodon.android.model.Hashtag;
import org.joinmastodon.android.model.HeaderPaginationList;
import org.joinmastodon.android.ui.utils.UiUtils;
import me.grishka.appkit.api.SimpleCallback;
import me.grishka.appkit.fragments.BaseRecyclerFragment;
import me.grishka.appkit.utils.BindableViewHolder;
import me.grishka.appkit.views.UsableRecyclerView;
public class FollowedHashtagsFragment extends BaseRecyclerFragment<Hashtag> implements ScrollableToTop {
private String nextMaxID;
private String accountId;
public FollowedHashtagsFragment() {
super(20);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args=getArguments();
accountId=args.getString("account");
setTitle(R.string.sk_hashtags_you_follow);
}
@Override
protected void onShown(){
super.onShown();
if(!getArguments().getBoolean("noAutoLoad") && !loaded && !dataLoading)
loadData();
}
@Override
protected void doLoadData(int offset, int count){
currentRequest=new GetFollowedHashtags(offset==0 ? null : nextMaxID, null, count, null)
.setCallback(new SimpleCallback<>(this){
@Override
public void onSuccess(HeaderPaginationList<Hashtag> result){
if(result.nextPageUri!=null)
nextMaxID=result.nextPageUri.getQueryParameter("max_id");
else
nextMaxID=null;
onDataLoaded(result, nextMaxID!=null);
}
})
.exec(accountId);
}
@Override
protected RecyclerView.Adapter getAdapter() {
return new HashtagsAdapter();
}
@Override
public void scrollToTop() {
smoothScrollRecyclerViewToTop(list);
}
private class HashtagsAdapter extends RecyclerView.Adapter<HashtagViewHolder>{
@NonNull
@Override
public HashtagViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
return new HashtagViewHolder();
}
@Override
public void onBindViewHolder(@NonNull HashtagViewHolder holder, int position) {
holder.bind(data.get(position));
}
@Override
public int getItemCount() {
return data.size();
}
}
private class HashtagViewHolder extends BindableViewHolder<Hashtag> implements UsableRecyclerView.Clickable{
private final TextView title;
public HashtagViewHolder(){
super(getActivity(), R.layout.item_text, list);
title=findViewById(R.id.title);
}
@Override
public void onBind(Hashtag item) {
title.setText(item.name);
title.setCompoundDrawablesRelativeWithIntrinsicBounds(itemView.getContext().getDrawable(R.drawable.ic_fluent_number_symbol_24_regular), null, null, null);
}
@Override
public void onClick() {
UiUtils.openHashtagTimeline(getActivity(), accountId, item.name, item.following);
}
}
}

View File

@@ -1,14 +1,9 @@
package org.joinmastodon.android.fragments;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -23,17 +18,13 @@ import org.joinmastodon.android.model.ListTimeline;
import org.joinmastodon.android.ui.utils.UiUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import me.grishka.appkit.api.ErrorResponse;
import me.grishka.appkit.api.SimpleCallback;
import me.grishka.appkit.fragments.BaseRecyclerFragment;
import me.grishka.appkit.utils.BindableViewHolder;
import me.grishka.appkit.utils.V;
import me.grishka.appkit.views.UsableRecyclerView;
public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> implements ScrollableToTop {
@@ -159,7 +150,7 @@ public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> im
private final CheckBox listToggle;
public ListViewHolder(){
super(getActivity(), R.layout.item_list_timeline, list);
super(getActivity(), R.layout.item_text, list);
title=findViewById(R.id.title);
listToggle=findViewById(R.id.list_toggle);
}
@@ -167,8 +158,10 @@ public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> im
@Override
public void onBind(ListTimeline item) {
title.setText(item.title);
title.setCompoundDrawablesRelativeWithIntrinsicBounds(itemView.getContext().getDrawable(R.drawable.ic_fluent_people_community_24_regular), null, null, null);
if (profileAccountId != null) {
Boolean checked = userInList.get(item.id);
listToggle.setVisibility(View.VISIBLE);
listToggle.setChecked(userInList.containsKey(item.id) && checked != null && checked);
listToggle.setOnClickListener(this::onClickToggle);
} else {

View File

@@ -14,6 +14,7 @@ import android.widget.FrameLayout;
import android.widget.LinearLayout;
import org.joinmastodon.android.E;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.requests.accounts.GetFollowRequests;
import org.joinmastodon.android.events.FollowRequestHandledEvent;
@@ -109,6 +110,7 @@ public class NotificationsFragment extends MastodonToolbarFragment implements Sc
tabLayout.setTabTextColors(UiUtils.getThemeColor(getActivity(), R.attr.colorTabInactive), UiUtils.getThemeColor(getActivity(), android.R.attr.textColorPrimary));
pager.setOffscreenPageLimit(4);
pager.setUserInputEnabled(!GlobalUserPreferences.disableSwipe);
pager.setAdapter(new DiscoverPagerAdapter());
pager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback(){
@Override

View File

@@ -10,6 +10,7 @@ import android.app.Activity;
import android.app.Fragment;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Outline;
@@ -18,6 +19,8 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.style.ImageSpan;
@@ -234,6 +237,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
}
pager.setOffscreenPageLimit(5);
pager.setUserInputEnabled(!GlobalUserPreferences.disableSwipe);
pager.setAdapter(new ProfilePagerAdapter());
pager.getLayoutParams().height=getResources().getDisplayMetrics().heightPixels;
@@ -288,10 +292,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
if(!username.contains("@")){
username+="@"+AccountSessionManager.getInstance().getAccount(accountID).domain;
}
getActivity().getSystemService(ClipboardManager.class).setPrimaryClip(ClipData.newPlainText(null, "@"+username));
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.TIRAMISU){ // Android 13+ SystemUI shows its own thing when you put things into the clipboard
Toast.makeText(getActivity(), R.string.text_copied, Toast.LENGTH_SHORT).show();
}
UiUtils.copyText(getActivity(), '@'+username);
return true;
});
@@ -623,6 +624,10 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
args.putString("profileAccount", profileAccountID);
args.putString("profileDisplayUsername", account.getDisplayUsername());
Nav.go(getActivity(), ListTimelinesFragment.class, args);
}else if(id==R.id.followed_hashtags){
Bundle args=new Bundle();
args.putString("account", accountID);
Nav.go(getActivity(), FollowedHashtagsFragment.class, args);
}
return true;
}

View File

@@ -121,6 +121,11 @@ public class SettingsFragment extends MastodonToolbarFragment{
GlobalUserPreferences.alwaysExpandContentWarnings=i.checked;
GlobalUserPreferences.save();
}));
items.add(new SwitchItem(R.string.sk_tabs_disable_swipe, R.drawable.ic_fluent_swipe_right_24_regular, GlobalUserPreferences.disableSwipe, i->{
GlobalUserPreferences.disableSwipe=i.checked;
GlobalUserPreferences.save();
needAppRestart=true;
}));
items.add(new HeaderItem(R.string.home_timeline));
items.add(new SwitchItem(R.string.sk_settings_show_replies, R.drawable.ic_fluent_chat_multiple_24_regular, GlobalUserPreferences.showReplies, i->{
@@ -705,7 +710,7 @@ public class SettingsFragment extends MastodonToolbarFragment{
onColorPreferenceClick(pref);
}
else if(id==R.id.orange_color) {
pref = GlobalUserPreferences.ColorPreference.ORANGE;
pref = ColorPreference.BROWN;
onColorPreferenceClick(pref);
}
else if(id==R.id.yellow_color) {
@@ -720,9 +725,6 @@ public class SettingsFragment extends MastodonToolbarFragment{
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
pref = GlobalUserPreferences.ColorPreference.MATERIAL3;
onColorPreferenceClick(pref);
}else{
Toast.makeText(getActivity(), R.string.sk_not_supported,
Toast.LENGTH_LONG).show();
}
}
else
@@ -737,16 +739,16 @@ public class SettingsFragment extends MastodonToolbarFragment{
@Override
public void onBind(ColorPicker item){
icon.setImageResource(R.drawable.ic_color_theme_preference);
icon.setImageResource(R.drawable.ic_fluent_color_24_regular);
button.setText(switch(GlobalUserPreferences.color){
case PINK -> R.string.sk_color_theme_pink;
case PURPLE -> R.string.sk_color_theme_purple;
case GREEN -> R.string.sk_color_theme_green;
case BLUE -> R.string.sk_color_theme_blue;
case ORANGE -> R.string.sk_color_theme_brown;
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 PINK -> R.string.sk_color_palette_pink;
case PURPLE -> R.string.sk_color_palette_purple;
case GREEN -> R.string.sk_color_palette_green;
case BLUE -> R.string.sk_color_palette_blue;
case BROWN -> R.string.sk_color_palette_brown;
case YELLOW -> R.string.sk_color_palette_yellow;
case RED -> R.string.sk_color_palette_red;
case MATERIAL3 -> R.string.sk_color_palette_material3;
});
}
}

View File

@@ -177,7 +177,7 @@ public abstract class StatusListFragment extends BaseStatusListFragment<Status>{
public void onStatusCountersUpdated(StatusCountersUpdatedEvent ev){
for(Status s:data){
if(s.getContentStatus().id.equals(ev.id)){
s.update(ev);
s.getContentStatus().update(ev);
for(int i=0;i<list.getChildCount();i++){
RecyclerView.ViewHolder holder=list.getChildViewHolder(list.getChildAt(i));
if(holder instanceof FooterStatusDisplayItem.Holder footer && footer.getItem().status==s.getContentStatus()){
@@ -189,8 +189,8 @@ public abstract class StatusListFragment extends BaseStatusListFragment<Status>{
}
}
for(Status s:preloadedData){
if(s.id.equals(ev.id)){
s.update(ev);
if(s.getContentStatus().id.equals(ev.id)){
s.getContentStatus().update(ev);
}
}
}

View File

@@ -104,6 +104,7 @@ public class DiscoverFragment extends AppKitFragment implements ScrollableToTop,
tabLayout.setTabTextColors(UiUtils.getThemeColor(getActivity(), R.attr.colorTabInactive), UiUtils.getThemeColor(getActivity(), android.R.attr.textColorPrimary));
pager.setOffscreenPageLimit(4);
pager.setUserInputEnabled(!GlobalUserPreferences.disableSwipe);
pager.setAdapter(new DiscoverPagerAdapter());
pager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback(){
@Override

View File

@@ -155,7 +155,7 @@ public class SignupFragment extends ToolbarFragment{
}
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));
passwordConfirmWrap.setErrorState();
return;

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

@@ -6,13 +6,13 @@ import android.os.Build;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
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.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
@@ -26,8 +26,6 @@ import org.joinmastodon.android.model.StatusPrivacy;
import org.joinmastodon.android.ui.utils.UiUtils;
import org.parceler.Parcels;
import java.text.DecimalFormat;
import me.grishka.appkit.Nav;
import me.grishka.appkit.utils.CubicBezierInterpolator;
import me.grishka.appkit.utils.V;
@@ -53,6 +51,9 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
private final ImageView share;
private static final Animation opacityOut, opacityIn;
private View touchingView = null;
private final Runnable longClickRunnable = () -> { if (touchingView != null) touchingView.performLongClick(); };
private final View.AccessibilityDelegate buttonAccessibilityDelegate=new View.AccessibilityDelegate(){
@Override
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info){
@@ -63,12 +64,12 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
};
static {
opacityOut = new AlphaAnimation(1, 0.5f);
opacityOut = new AlphaAnimation(1, 0.7f);
opacityOut.setDuration(200);
opacityOut.setInterpolator(CubicBezierInterpolator.DEFAULT);
opacityOut.setFillAfter(true);
opacityIn = new AlphaAnimation(0.5f, 1);
opacityIn.setDuration(150);
opacityIn = new AlphaAnimation(0.7f, 1);
opacityIn.setDuration(300);
opacityIn.setInterpolator(CubicBezierInterpolator.DEFAULT);
}
@@ -95,6 +96,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
reply.setAccessibilityDelegate(buttonAccessibilityDelegate);
boost.setOnTouchListener(this::onButtonTouch);
boost.setOnClickListener(this::onBoostClick);
boost.setOnLongClickListener(this::onBoostLongClick);
boost.setAccessibilityDelegate(buttonAccessibilityDelegate);
favorite.setOnTouchListener(this::onButtonTouch);
favorite.setOnClickListener(this::onFavoriteClick);
@@ -104,6 +106,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
bookmark.setAccessibilityDelegate(buttonAccessibilityDelegate);
share.setOnTouchListener(this::onButtonTouch);
share.setOnClickListener(this::onShareClick);
share.setOnLongClickListener(this::onShareLongClick);
share.setAccessibilityDelegate(buttonAccessibilityDelegate);
}
@@ -129,28 +132,39 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
}
}
private boolean onButtonTouch(View v, MotionEvent event){
boolean disabled = !v.isEnabled() || (v instanceof FrameLayout parentFrame &&
parentFrame.getChildCount() > 0 && !parentFrame.getChildAt(0).isEnabled());
int action = event.getAction();
long eventDuration = event.getEventTime() - event.getDownTime();
if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
touchingView = null;
v.removeCallbacks(longClickRunnable);
v.animate().scaleX(1).scaleY(1).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(150).start();
if (disabled) return true;
if (action == MotionEvent.ACTION_UP && eventDuration < ViewConfiguration.getLongPressTimeout()) v.performClick();
else v.startAnimation(opacityIn);
} else if (action == MotionEvent.ACTION_DOWN) {
touchingView = v;
// 20dp to center in middle of icon, because: (icon width = 24dp) / 2 + (paddingStart = 8dp)
v.setPivotX(V.dp(20));
v.animate().scaleX(0.85f).scaleY(0.85f).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(75).start();
if (disabled) return true;
v.postDelayed(longClickRunnable, ViewConfiguration.getLongPressTimeout());
v.startAnimation(opacityOut);
}
return true;
}
private void onReplyClick(View v){
v.startAnimation(opacityIn);
Bundle args=new Bundle();
args.putString("account", item.accountID);
args.putParcelable("replyTo", Parcels.wrap(item.status));
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){
v.startAnimation(opacityOut);
boost.setSelected(!item.status.reblogged);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setReblogged(item.status, !item.status.reblogged, r->{
v.startAnimation(opacityIn);
@@ -158,8 +172,19 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
});
}
private boolean onBoostLongClick(View v){
v.setAlpha(1);
v.setScaleX(1);
v.setScaleY(1);
Bundle args=new Bundle();
args.putString("account", item.accountID);
args.putString("prefilledText", "\n\n" + item.status.url);
args.putInt("selectionStart", 0);
Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args);
return true;
}
private void onFavoriteClick(View v){
v.startAnimation(opacityOut);
favorite.setSelected(!item.status.favourited);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(item.status, !item.status.favourited, r->{
v.startAnimation(opacityIn);
@@ -168,7 +193,6 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
}
private void onBookmarkClick(View v){
v.startAnimation(opacityOut);
bookmark.setSelected(item.status.bookmarked);
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(item.status, !item.status.bookmarked, r->{
v.startAnimation(opacityIn);
@@ -176,12 +200,18 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
}
private void onShareClick(View v){
v.startAnimation(opacityIn);
Intent intent=new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, item.status.url);
v.getContext().startActivity(Intent.createChooser(intent, v.getContext().getString(R.string.share_toot_title)));
}
private boolean onShareLongClick(View v){
UiUtils.copyText(v.getContext(), item.status.url);
return true;
}
private int descriptionForId(int id){
if(id==R.id.reply_btn)
return R.string.button_reply;

View File

@@ -63,7 +63,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
private SpannableStringBuilder parsedName;
public final Status status;
private boolean hasVisibilityToggle;
private boolean hasTranslateToggle;
boolean needBottomPadding;
private String extraText;
@@ -77,10 +76,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
this.status=status;
HtmlParser.parseCustomEmoji(parsedName, user.emojis);
emojiHelper.setText(parsedName);
Preferences prefs = AccountSessionManager.getInstance().getAccount(accountID).preferences;
if(status!=null){
hasTranslateToggle = !(Objects.equals(status.language, prefs.postingDefaultLanguage) || (status.visibility == StatusPrivacy.DIRECT || status.visibility == StatusPrivacy.PRIVATE));
// hasTranslateToggle = !status.language.equals(prefs.postingDefaultLanguage) || (status.visibility==StatusPrivacy.PRIVATE);
hasVisibilityToggle=status.sensitive || !TextUtils.isEmpty(status.spoilerText);
if(!hasVisibilityToggle && !status.mediaAttachments.isEmpty()){
for(Attachment att:status.mediaAttachments){
@@ -114,7 +110,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
public static class Holder extends StatusDisplayItem.Holder<HeaderStatusDisplayItem> implements ImageLoaderViewHolder{
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 Relationship relationship;
private APIRequest<?> currentRelationshipRequest;
@@ -128,7 +124,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
public Holder(Activity activity, ViewGroup parent){
super(activity, R.layout.display_item_header, parent);
translate=findViewById(R.id.translate);
name=findViewById(R.id.name);
username=findViewById(R.id.username);
timestamp=findViewById(R.id.timestamp);
@@ -141,7 +136,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
avatar.setClipToOutline(true);
more.setOnClickListener(this::onMoreClick);
visibility.setOnClickListener(v->item.parentFragment.onVisibilityIconClick(this));
translate.setOnClickListener(v->item.parentFragment.onRevealTranslationClick(this, v));
optionsMenu=new PopupMenu(activity, more);
optionsMenu.inflate(R.menu.post);
@@ -235,7 +229,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
else
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);
translate.setVisibility(item.hasTranslateToggle ? View.VISIBLE : View.GONE);
if(item.hasVisibilityToggle){
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));
@@ -243,10 +236,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
visibility.setTooltipText(visibility.getContentDescription());
}
}
if(item.hasTranslateToggle){
translate.setImageResource(R.drawable.ic_translate);
translate.setSelected(item.status.wantsTranslation);
}
itemView.setPadding(itemView.getPaddingLeft(), itemView.getPaddingTop(), itemView.getPaddingRight(), item.needBottomPadding ? V.dp(16) : 0);
if(TextUtils.isEmpty(item.extraText)){
extraText.setVisibility(View.GONE);

View File

@@ -95,7 +95,7 @@ public class LinkCardStatusDisplayItem extends StatusDisplayItem{
}
private void onClick(View v){
UiUtils.launchWebBrowser(itemView.getContext(), item.status.card.url);
UiUtils.openURL(itemView.getContext(), item.parentFragment.getAccountID(), item.status.card.url);
}
}
}

View File

@@ -8,16 +8,20 @@ import android.text.TextUtils;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Button;
import android.widget.TextView;
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.model.Instance;
import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.model.StatusTranslation;
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.utils.CustomEmojiHelper;
import org.joinmastodon.android.ui.views.LinkedTextView;
@@ -35,18 +39,21 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
private CharSequence parsedSpoilerText;
public boolean textSelectable;
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){
super(parentID, parentFragment);
this.text=text;
this.status=status;
// this.wantsTranslation=wantsTranslation;
emojiHelper.setText(text);
if(!TextUtils.isEmpty(status.spoilerText)){
parsedSpoilerText=HtmlParser.parseCustomEmoji(status.spoilerText, status.emojis);
spoilerEmojiHelper=new CustomEmojiHelper();
spoilerEmojiHelper.setText(parsedSpoilerText);
}
session = AccountSessionManager.getInstance().getAccount(parentFragment.getAccountID());
}
@Override
@@ -71,9 +78,10 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
public static class Holder extends StatusDisplayItem.Holder<TextStatusDisplayItem> implements ImageLoaderViewHolder{
private final LinkedTextView text;
private final LinearLayout spoilerHeader;
private final TextView spoilerTitle, spoilerTitleInline;
private final View spoilerOverlay, borderTop, borderBottom;
private final TextView spoilerTitle, spoilerTitleInline, translateInfo;
private final View spoilerOverlay, borderTop, borderBottom, textWrap, translateWrap, translateProgress;
private final Drawable backgroundColor, borderColor;
private final Button translateButton;
public Holder(Activity activity, ViewGroup parent){
super(activity, R.layout.display_item_text, parent);
@@ -84,6 +92,11 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
spoilerOverlay=findViewById(R.id.spoiler_overlay);
borderTop=findViewById(R.id.border_top);
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));
TypedValue outValue=new TypedValue();
@@ -97,32 +110,9 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
@Override
public void onBind(TextStatusDisplayItem item){
if(item.status.wantsTranslation && item.status.translation == null){
new GetStatusTranslation(item.status.id)
.setCallback(new Callback<StatusTranslation>(){
@Override
public void onSuccess(StatusTranslation statusTranslation){
item.status.translation = statusTranslation.getStrippedText();
text.setText(item.status.translation);
}
@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());
}
if(item.status.wantsTranslation){
if(item.status.translation != null)
{
text.setText(item.status.translation);
}
}else{
text.setText(item.text);
}
text.setText(item.translated
? HtmlParser.parse(item.translation.content, item.status.emojis, item.status.mentions, item.status.tags, item.parentFragment.getAccountID())
: item.text);
text.setTextIsSelectable(item.textSelectable);
spoilerTitleInline.setTextIsSelectable(item.textSelectable);
text.setInvalidateOnEveryFrame(false);
@@ -136,20 +126,60 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
if(item.status.spoilerRevealed){
spoilerOverlay.setVisibility(View.GONE);
spoilerHeader.setVisibility(View.VISIBLE);
text.setVisibility(View.VISIBLE);
textWrap.setVisibility(View.VISIBLE);
itemView.setClickable(false);
}else{
spoilerOverlay.setVisibility(View.VISIBLE);
spoilerHeader.setVisibility(View.GONE);
text.setVisibility(View.GONE);
textWrap.setVisibility(View.GONE);
itemView.setClickable(true);
}
}else{
spoilerOverlay.setVisibility(View.GONE);
spoilerHeader.setVisibility(View.GONE);
text.setVisibility(View.VISIBLE);
textWrap.setVisibility(View.VISIBLE);
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(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

View File

@@ -182,7 +182,7 @@ public class HtmlParser{
ssb.append("", new DeleteWhenCopiedSpan(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}else if(blockElements.contains(el.nodeName()) && node.nextSibling()!=null){
ssb.append("\n"); // line end
ssb.append("\n", new RelativeSizeSpan(0.75f), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // margin after block
ssb.append("\n", new RelativeSizeSpan(0.65f), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // margin after block
}
}
}

View File

@@ -0,0 +1,68 @@
package org.joinmastodon.android.ui.utils;
import static org.joinmastodon.android.GlobalUserPreferences.ColorPreference;
import static org.joinmastodon.android.GlobalUserPreferences.ThemePreference;
import static org.joinmastodon.android.GlobalUserPreferences.theme;
import static org.joinmastodon.android.GlobalUserPreferences.trueBlackTheme;
import android.content.Context;
import android.content.res.Resources;
import androidx.annotation.StyleRes;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.R;
import java.util.Map;
public class ColorPalette {
public static final Map<GlobalUserPreferences.ColorPreference, ColorPalette> palettes = Map.of(
ColorPreference.MATERIAL3, new ColorPalette(R.style.ColorPalette_Material3)
.dark(R.style.ColorPalette_Material3_Dark, R.style.ColorPalette_Material3_AutoLightDark),
ColorPreference.PINK, new ColorPalette(R.style.ColorPalette_Pink),
ColorPreference.PURPLE, new ColorPalette(R.style.ColorPalette_Purple),
ColorPreference.GREEN, new ColorPalette(R.style.ColorPalette_Green),
ColorPreference.BLUE, new ColorPalette(R.style.ColorPalette_Blue),
ColorPreference.BROWN, new ColorPalette(R.style.ColorPalette_Brown),
ColorPreference.RED, new ColorPalette(R.style.ColorPalette_Red),
ColorPreference.YELLOW, new ColorPalette(R.style.ColorPalette_Yellow)
);
private @StyleRes int base;
private @StyleRes int autoDark;
private @StyleRes int light;
private @StyleRes int dark;
private @StyleRes int black;
private @StyleRes int autoBlack;
public ColorPalette(@StyleRes int baseRes) { base = baseRes; }
public ColorPalette(@StyleRes int lightRes, @StyleRes int darkRes, @StyleRes int autoDarkRes, @StyleRes int blackRes, @StyleRes int autoBlackRes) {
light = lightRes;
dark = darkRes;
autoDark = autoDarkRes;
black = blackRes;
autoBlack = autoBlackRes;
}
public ColorPalette light(@StyleRes int res) { light = res; return this; }
public ColorPalette dark(@StyleRes int res, @StyleRes int auto) { dark = res; autoDark = auto; return this; }
public ColorPalette black(@StyleRes int res, @StyleRes int auto) { dark = res; autoBlack = auto; return this; }
public void apply(Context context) {
if (!((dark != 0 && autoDark != 0) || (black != 0 && autoBlack != 0) || light != 0 || base != 0)) {
throw new IllegalStateException("Invalid color scheme definition");
}
Resources.Theme t = context.getTheme();
if (base != 0) t.applyStyle(base, true);
if (light != 0 && theme.equals(ThemePreference.LIGHT)) t.applyStyle(light, true);
else if (theme.equals(ThemePreference.DARK)) {
if (dark != 0 && !trueBlackTheme) t.applyStyle(dark, true);
else if (black != 0 && trueBlackTheme) t.applyStyle(black, true);
} else if (theme.equals(ThemePreference.AUTO)) {
if (autoDark != 0 && !trueBlackTheme) t.applyStyle(autoDark, true);
else if (autoBlack != 0 && trueBlackTheme) t.applyStyle(autoBlack, true);
}
}
}

View File

@@ -1,9 +1,16 @@
package org.joinmastodon.android.ui.utils;
import static org.joinmastodon.android.GlobalUserPreferences.theme;
import static org.joinmastodon.android.GlobalUserPreferences.trueBlackTheme;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ActivityNotFoundException;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
@@ -11,6 +18,7 @@ import android.content.res.TypedArray;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.InsetDrawable;
@@ -19,10 +27,12 @@ import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.provider.OpenableColumns;
import android.provider.Settings;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -42,6 +52,7 @@ import org.joinmastodon.android.api.requests.accounts.SetAccountMuted;
import org.joinmastodon.android.api.requests.accounts.SetDomainBlocked;
import org.joinmastodon.android.api.requests.accounts.AuthorizeFollowRequest;
import org.joinmastodon.android.api.requests.accounts.RejectFollowRequest;
import org.joinmastodon.android.api.requests.search.GetSearchResults;
import org.joinmastodon.android.api.requests.statuses.DeleteStatus;
import org.joinmastodon.android.api.requests.statuses.GetStatusByID;
import org.joinmastodon.android.api.requests.statuses.SetStatusPinned;
@@ -52,8 +63,6 @@ import org.joinmastodon.android.events.NotificationDeletedEvent;
import org.joinmastodon.android.events.RemoveAccountPostsEvent;
import org.joinmastodon.android.events.StatusDeletedEvent;
import org.joinmastodon.android.events.StatusUnpinnedEvent;
import org.joinmastodon.android.fragments.BaseStatusListFragment;
import org.joinmastodon.android.fragments.ComposeFragment;
import org.joinmastodon.android.fragments.HashtagTimelineFragment;
import org.joinmastodon.android.fragments.ListTimelineFragment;
import org.joinmastodon.android.fragments.ProfileFragment;
@@ -62,6 +71,7 @@ import org.joinmastodon.android.model.Account;
import org.joinmastodon.android.model.Emoji;
import org.joinmastodon.android.model.ListTimeline;
import org.joinmastodon.android.model.Relationship;
import org.joinmastodon.android.model.SearchResults;
import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
import org.joinmastodon.android.ui.text.CustomEmojiSpan;
@@ -70,6 +80,8 @@ import org.parceler.Parcels;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URI;
import java.net.URISyntaxException;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
@@ -656,103 +668,76 @@ public class UiUtils{
}
public static void setUserPreferredTheme(Context context){
// boolean isDarkTheme = isDarkTheme();
switch(GlobalUserPreferences.color){
case PINK:
context.setTheme(switch(GlobalUserPreferences.theme){
case AUTO ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_AutoLightDark_TrueBlack : R.style.Theme_Mastodon_AutoLightDark;
case LIGHT ->
R.style.Theme_Mastodon_Light;
case DARK ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_Dark_TrueBlack : R.style.Theme_Mastodon_Dark;
});
break;
case PURPLE:
context.setTheme(switch(GlobalUserPreferences.theme){
case AUTO ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_AutoLightDark_TrueBlack_Original : R.style.Theme_Mastodon_AutoLightDark_Original;
case LIGHT ->
R.style.Theme_Mastodon_Light_Original;
case DARK ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_Dark_TrueBlack_Original : R.style.Theme_Mastodon_Dark_Original;
});
break;
case GREEN:
context.setTheme(switch(GlobalUserPreferences.theme){
case AUTO ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_AutoLightDark_TrueBlack_Green : R.style.Theme_Mastodon_AutoLightDark_Green;
case LIGHT ->
R.style.Theme_Mastodon_Light_Green;
case DARK ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_Dark_TrueBlack_Green : R.style.Theme_Mastodon_Dark_Green;
});
break;
case BLUE:
context.setTheme(switch(GlobalUserPreferences.theme){
case AUTO ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_AutoLightDark_TrueBlack_Blue : R.style.Theme_Mastodon_AutoLightDark_Blue;
case LIGHT ->
R.style.Theme_Mastodon_Light_Blue;
case DARK ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_Dark_TrueBlack_Blue : R.style.Theme_Mastodon_Dark_Blue;
});
break;
case ORANGE:
context.setTheme(switch(GlobalUserPreferences.theme){
case AUTO ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_AutoLightDark_TrueBlack_Orange : R.style.Theme_Mastodon_AutoLightDark_Orange;
case LIGHT ->
R.style.Theme_Mastodon_Light_Orange;
case DARK ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_Dark_TrueBlack_Orange : R.style.Theme_Mastodon_Dark_Orange;
});
break;
case YELLOW:
context.setTheme(switch(GlobalUserPreferences.theme){
case AUTO ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_AutoLightDark_TrueBlack_Yellow : R.style.Theme_Mastodon_AutoLightDark_Yellow;
case LIGHT ->
R.style.Theme_Mastodon_Light_Yellow;
case DARK ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_Dark_TrueBlack_Yellow : R.style.Theme_Mastodon_Dark_Yellow;
});
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:
context.setTheme(switch(GlobalUserPreferences.theme){
case AUTO ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_AutoLightDark_TrueBlack_Material3 : R.style.Theme_Mastodon_AutoLightDark_Material3;
case LIGHT ->
R.style.Theme_Mastodon_Light_Material3;
case DARK ->
GlobalUserPreferences.trueBlackTheme ? R.style.Theme_Mastodon_Dark_TrueBlack_Material3 : R.style.Theme_Mastodon_Dark_Material3;
});
break;
}
context.setTheme(switch (theme) {
case LIGHT -> R.style.Theme_Mastodon_Light;
case DARK -> trueBlackTheme ? R.style.Theme_Mastodon_Dark_TrueBlack : R.style.Theme_Mastodon_Dark;
default -> trueBlackTheme ? R.style.Theme_Mastodon_AutoLightDark_TrueBlack : R.style.Theme_Mastodon_AutoLightDark;
});
ColorPalette palette = ColorPalette.palettes.get(GlobalUserPreferences.color);
if (palette != null) palette.apply(context);
}
public static boolean isDarkTheme(){
if(GlobalUserPreferences.theme==GlobalUserPreferences.ThemePreference.AUTO)
if(theme==GlobalUserPreferences.ThemePreference.AUTO)
return (MastodonApp.context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK)==Configuration.UI_MODE_NIGHT_YES;
return GlobalUserPreferences.theme==GlobalUserPreferences.ThemePreference.DARK;
return theme==GlobalUserPreferences.ThemePreference.DARK;
}
public static void openURL(Context context, @Nullable String accountID, String url){
// https://mastodon.foo.bar/@User
// https://mastodon.foo.bar/@User/43456787654678
// https://pleroma.foo.bar/users/User
// https://pleroma.foo.bar/users/9qTHT2ANWUdXzENqC0
// https://pleroma.foo.bar/notice/9sBHWIlwwGZi5QGlHc
// https://pleroma.foo.bar/objects/d4643c42-3ae0-4b73-b8b0-c725f5819207
// https://friendica.foo.bar/profile/user
// https://friendica.foo.bar/display/d4643c42-3ae0-4b73-b8b0-c725f5819207
// https://misskey.foo.bar/notes/83w6r388br (always lowercase)
// https://pixelfed.social/p/connyduck/391263492998670833
// https://pixelfed.social/connyduck
// https://gts.foo.bar/@goblin/statuses/01GH9XANCJ0TA8Y95VE9H3Y0Q2
// https://gts.foo.bar/@goblin
// https://foo.microblog.pub/o/5b64045effd24f48a27d7059f6cb38f5
//
// COPIED FROM https://github.com/tuskyapp/Tusky/blob/develop/app/src/main/java/com/keylesspalace/tusky/util/LinkHelper.kt
public static boolean looksLikeMastodonUrl(String urlString) {
URI uri;
try {
uri = new URI(urlString);
} catch (URISyntaxException e) {
return false;
}
if (uri.getQuery() != null || uri.getFragment() != null || uri.getPath() == null) return false;
String it = uri.getPath();
return it.matches("^/@[^/]+$") ||
it.matches("^/@[^/]+/\\d+$") ||
it.matches("^/users/\\w+$") ||
it.matches("^/notice/[a-zA-Z0-9]+$") ||
it.matches("^/objects/[-a-f0-9]+$") ||
it.matches("^/notes/[a-z0-9]+$") ||
it.matches("^/display/[-a-f0-9]+$") ||
it.matches("^/profile/\\w+$") ||
it.matches("^/p/\\w+/\\d+$") ||
it.matches("^/\\w+$") ||
it.matches("^/@[^/]+/statuses/[a-zA-Z0-9]+$") ||
it.matches("^/o/[a-f0-9]+$");
}
public static void openURL(Context context, String accountID, String url){
Consumer<ProgressDialog> transformDialogForLookup = dialog -> {
dialog.setTitle(R.string.loading_fediverse_resource_title);
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, context.getString(R.string.cancel), (d, which) -> d.cancel());
dialog.setButton(DialogInterface.BUTTON_POSITIVE, context.getString(R.string.open_in_browser), (d, which) -> {
d.cancel();
launchWebBrowser(context, url);
});
};
Uri uri=Uri.parse(url);
if(accountID!=null && "https".equals(uri.getScheme()) && AccountSessionManager.getInstance().getAccount(accountID).domain.equalsIgnoreCase(uri.getAuthority())){
List<String> path=uri.getPathSegments();
// Match URLs like https://mastodon.social/@Gargron/108132679274083591
if(path.size()==2 && path.get(0).matches("^@[a-zA-Z0-9_]+$") && path.get(1).matches("^[0-9]+$")){
List<String> path=uri.getPathSegments();
if(accountID!=null && "https".equals(uri.getScheme())){
if(path.size()==2 && path.get(0).matches("^@[a-zA-Z0-9_]+$") && path.get(1).matches("^[0-9]+$") && AccountSessionManager.getInstance().getAccount(accountID).domain.equalsIgnoreCase(uri.getAuthority())){
new GetStatusByID(path.get(1))
.setCallback(new Callback<>(){
@Override
@@ -769,11 +754,61 @@ public class UiUtils{
launchWebBrowser(context, url);
}
})
.wrapProgress((Activity)context, R.string.loading, true)
.wrapProgress((Activity)context, R.string.loading, true, transformDialogForLookup)
.exec(accountID);
return;
} else if (looksLikeMastodonUrl(url)) {
new GetSearchResults(url, null, true)
.setCallback(new Callback<>() {
@Override
public void onSuccess(SearchResults results) {
Bundle args=new Bundle();
args.putString("account", accountID);
if (!results.statuses.isEmpty()) {
args.putParcelable("status", Parcels.wrap(results.statuses.get(0)));
Nav.go((Activity) context, ThreadFragment.class, args);
} else if (!results.accounts.isEmpty()) {
args.putParcelable("profileAccount", Parcels.wrap(results.accounts.get(0)));
Nav.go((Activity) context, ProfileFragment.class, args);
} else {
launchWebBrowser(context, url);
}
}
@Override
public void onError(ErrorResponse error) {
error.showToast(context);
launchWebBrowser(context, url);
}
})
.wrapProgress((Activity)context, R.string.loading, true, transformDialogForLookup)
.exec(accountID);
return;
}
}
launchWebBrowser(context, url);
}
public static void copyText(Context context, String text) {
context.getSystemService(ClipboardManager.class).setPrimaryClip(ClipData.newPlainText(null, text));
if(Build.VERSION.SDK_INT<Build.VERSION_CODES.TIRAMISU || UiUtils.isMIUI()){ // Android 13+ SystemUI shows its own thing when you put things into the clipboard
Toast.makeText(context, R.string.text_copied, Toast.LENGTH_SHORT).show();
}
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) vibrator.vibrate(VibrationEffect.createOneShot(50, VibrationEffect.DEFAULT_AMPLITUDE));
else vibrator.vibrate(50);
}
private static String getSystemProperty(String key){
try{
Class<?> props=Class.forName("android.os.SystemProperties");
Method get=props.getMethod("get", String.class);
return (String)get.invoke(null, key);
}catch(Exception ignore){}
return null;
}
public static boolean isMIUI(){
return !TextUtils.isEmpty(getSystemProperty("ro.miui.ui.version.code"));
}
}

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?colorSecondary"/>
<item android:color="?colorGray50"/>
</selector>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="?colorWindowBackground"/>
<solid android:color="?colorGray800"/>
<corners android:radius="10dp"/>
<padding android:top="16dp" android:left="16dp" android:right="16dp" android:bottom="16dp"/>
</shape>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/gray_25"/>
<solid android:color="?colorGray25"/>
<corners android:radius="10dp"/>
<padding android:top="16dp" android:left="16dp" android:right="16dp" android:bottom="16dp"/>
</shape>

View File

@@ -2,7 +2,7 @@
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/highlight_over_dark">
<item>
<shape android:shape="oval">
<solid android:color="?colorSearchHint"/>
<solid android:color="?colorGray600"/>
</shape>
</item>
</ripple>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:tint="@color/gray_800">
<shape android:tint="?colorGray800">
<solid android:color="#CC000000"/>
</shape>
</item>

View File

@@ -1,23 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M12,22C6.49,22 2,17.51 2,12S6.49,2 12,2s10,4.04 10,9c0,3.31 -2.69,6 -6,6h-1.77c-0.28,0 -0.5,0.22 -0.5,0.5 0,0.12 0.05,0.23 0.13,0.33 0.41,0.47 0.64,1.06 0.64,1.67 0,1.38 -1.12,2.5 -2.5,2.5zM12,4c-4.41,0 -8,3.59 -8,8s3.59,8 8,8c0.28,0 0.5,-0.22 0.5,-0.5 0,-0.16 -0.08,-0.28 -0.14,-0.35 -0.41,-0.46 -0.63,-1.05 -0.63,-1.65 0,-1.38 1.12,-2.5 2.5,-2.5L16,15c2.21,0 4,-1.79 4,-4 0,-3.86 -3.59,-7 -8,-7z"/>
<path
android:fillColor="#FF000000"
android:pathData="M6.5,11.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/>
<path
android:fillColor="#FF000000"
android:pathData="M9.5,7.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/>
<path
android:fillColor="#FF000000"
android:pathData="M14.5,7.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/>
<path
android:fillColor="#FF000000"
android:pathData="M17.5,11.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/>
</vector>

View File

@@ -1,3 +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="M20.998 6.25c0-1.795-1.454-3.25-3.25-3.25H6.25C4.455 3 3 4.455 3 6.25v11.499c0 1.795 1.455 3.25 3.25 3.25h4.914l0.356-1.424 0.02-0.076H6.25c-0.204 0-0.4-0.035-0.582-0.1l5.807-5.685 0.083-0.07c0.291-0.213 0.7-0.19 0.966 0.07l2.079 2.036 1.06-1.06-2.09-2.048-0.128-0.116c-0.878-0.738-2.187-0.7-3.02 0.116l-5.822 5.7C4.536 18.157 4.5 17.957 4.5 17.75V6.25c0-0.966 0.783-1.75 1.75-1.75h11.499c0.966 0 1.75 0.784 1.75 1.75v4.983c0.478-0.19 0.993-0.264 1.5-0.22V6.25zm-3.495 2.502c0-1.244-1.008-2.252-2.252-2.252-1.244 0-2.252 1.008-2.252 2.252 0 1.243 1.008 2.252 2.252 2.252 1.244 0 2.252-1.009 2.252-2.252zm-3.004 0C14.499 8.336 14.836 8 15.251 8s0.752 0.336 0.752 0.752c0 0.415-0.337 0.752-0.752 0.752s-0.752-0.337-0.752-0.752zm4.6 3.917l-5.902 5.901c-0.345 0.345-0.589 0.776-0.707 1.248l-0.457 1.83c-0.2 0.797 0.522 1.518 1.318 1.319l1.83-0.458c0.472-0.118 0.904-0.362 1.248-0.706L22.33 15.9c0.892-0.893 0.892-2.34 0-3.232-0.893-0.893-2.34-0.893-3.233 0z" android:fillColor="@color/gray_25"/>
<path android:pathData="M20.998 6.25c0-1.795-1.454-3.25-3.25-3.25H6.25C4.455 3 3 4.455 3 6.25v11.499c0 1.795 1.455 3.25 3.25 3.25h4.914l0.356-1.424 0.02-0.076H6.25c-0.204 0-0.4-0.035-0.582-0.1l5.807-5.685 0.083-0.07c0.291-0.213 0.7-0.19 0.966 0.07l2.079 2.036 1.06-1.06-2.09-2.048-0.128-0.116c-0.878-0.738-2.187-0.7-3.02 0.116l-5.822 5.7C4.536 18.157 4.5 17.957 4.5 17.75V6.25c0-0.966 0.783-1.75 1.75-1.75h11.499c0.966 0 1.75 0.784 1.75 1.75v4.983c0.478-0.19 0.993-0.264 1.5-0.22V6.25zm-3.495 2.502c0-1.244-1.008-2.252-2.252-2.252-1.244 0-2.252 1.008-2.252 2.252 0 1.243 1.008 2.252 2.252 2.252 1.244 0 2.252-1.009 2.252-2.252zm-3.004 0C14.499 8.336 14.836 8 15.251 8s0.752 0.336 0.752 0.752c0 0.415-0.337 0.752-0.752 0.752s-0.752-0.337-0.752-0.752zm4.6 3.917l-5.902 5.901c-0.345 0.345-0.589 0.776-0.707 1.248l-0.457 1.83c-0.2 0.797 0.522 1.518 1.318 1.319l1.83-0.458c0.472-0.118 0.904-0.362 1.248-0.706L22.33 15.9c0.892-0.893 0.892-2.34 0-3.232-0.893-0.893-2.34-0.893-3.233 0z" android:fillColor="?colorGray25"/>
</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="M12 2c5.43 0 9.848 4.327 9.996 9.72L22 12v1.525c-0.014 2.198-1.8 3.975-4 3.975-1.446 0-2.712-0.767-3.415-1.916-0.8 0.834-1.882 1.35-3.085 1.35-2.515 0-4.5-2.25-4.5-4.967C7 9.25 8.985 7 11.5 7c0.937 0 1.8 0.312 2.514 0.844C14.087 7.366 14.501 7 15 7c0.513 0 0.935 0.386 0.993 0.883L16 8v5.5c0 1.105 0.895 2 2 2 1.054 0 1.918-0.816 1.994-1.85L20 13.474V12c0-4.418-3.582-8-8-8s-8 3.582-8 8 3.582 8 8 8c0.921 0 1.82-0.155 2.67-0.456 0.52-0.184 1.092 0.089 1.276 0.61 0.184 0.52-0.089 1.091-0.61 1.276C14.275 21.806 13.15 22 12 22 6.477 22 2 17.523 2 12S6.477 2 12 2zm-0.35 7.005L11.5 9C10.15 9 9 10.302 9 11.967c0 1.664 1.15 2.966 2.5 2.966 1.3 0 2.415-1.207 2.495-2.783L14 11.93c-0.017-1.586-1.075-2.834-2.35-2.925L11.5 9l0.15 0.005z" 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="M10.987 2.89c0.077-0.408-0.19-0.8-0.598-0.877-0.407-0.077-0.799 0.19-0.876 0.598L8.494 7.998 3.75 8C3.335 8 3 8.336 3 8.75 3 9.166 3.336 9.5 3.75 9.5l4.46-0.002-0.946 5L2.75 14.5C2.335 14.5 2 14.836 2 15.25 2 15.665 2.336 16 2.75 16l4.23-0.002-0.967 5.116c-0.077 0.407 0.19 0.8 0.598 0.876 0.407 0.077 0.799-0.19 0.876-0.598l1.02-5.395 5.474-0.002-0.968 5.119c-0.077 0.407 0.19 0.8 0.598 0.876 0.407 0.077 0.799-0.19 0.876-0.598l1.021-5.398 4.742-0.002c0.415 0 0.75-0.336 0.75-0.75 0-0.415-0.336-0.75-0.75-0.75l-4.458 0.002 0.946-5 4.512-0.002c0.415 0 0.75-0.336 0.75-0.75s-0.336-0.75-0.75-0.75l-4.23 0.002 0.966-5.104c0.077-0.408-0.19-0.8-0.598-0.877-0.407-0.077-0.799 0.19-0.876 0.598l-1.018 5.384-5.474 0.002 0.966-5.107zm-1.25 6.608l5.474-0.003-0.946 5-5.474 0.002 0.946-5z" 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="M11 17.5c0-1.289 0.376-2.49 1.023-3.5h-7.77c-1.242 0-2.25 1.007-2.25 2.25v0.919c0 0.572 0.18 1.13 0.511 1.596C4.056 20.929 6.58 22 10 22c0.932 0 1.797-0.08 2.592-0.24C11.601 20.62 11 19.13 11 17.5zm4-10.495c0-2.761-2.238-5-5-5-2.761 0-5 2.239-5 5s2.239 5 5 5c2.762 0 5-2.239 5-5zM23 17.5c0-3.037-2.462-5.5-5.5-5.5-3.037 0-5.5 2.463-5.5 5.5 0 3.038 2.463 5.5 5.5 5.5 3.038 0 5.5-2.462 5.5-5.5zm-5.59-3.492L17.5 14l0.09 0.008c0.204 0.037 0.365 0.198 0.402 0.402L18 14.5V17h2.504l0.09 0.008c0.204 0.037 0.365 0.198 0.402 0.402l0.008 0.09-0.008 0.09c-0.037 0.204-0.198 0.365-0.402 0.402L20.504 18H18v2.5l-0.008 0.09c-0.037 0.204-0.198 0.365-0.402 0.402L17.5 21l-0.09-0.008c-0.204-0.037-0.364-0.198-0.402-0.402L17 20.5V18h-2.496l-0.09-0.008c-0.204-0.037-0.365-0.198-0.402-0.402l-0.008-0.09 0.008-0.09c0.037-0.204 0.198-0.365 0.402-0.402L14.504 17H17v-2.5l0.008-0.09c0.038-0.204 0.198-0.365 0.402-0.402z" 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:autoMirrored="true" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M5.997 12c0 0.38 0.282 0.694 0.647 0.743l0.102 0.007H19.44l-2.216 2.22c-0.266 0.266-0.29 0.683-0.073 0.976l0.073 0.084c0.266 0.267 0.682 0.29 0.975 0.073l0.084-0.073 3.497-3.5c0.267-0.266 0.29-0.683 0.073-0.976L21.78 11.47l-3.497-3.5c-0.292-0.293-0.767-0.293-1.06 0-0.265 0.266-0.29 0.683-0.072 0.976l0.073 0.084 2.216 2.22H6.746c-0.414 0-0.75 0.336-0.75 0.75zM2 12c0 2.761 2.237 5 4.996 5 2.143 0 3.972-1.351 4.68-3.25h-1.651C9.42 14.797 8.29 15.5 6.995 15.5 5.066 15.5 3.5 13.933 3.5 12s1.565-3.5 3.497-3.5c1.294 0 2.425 0.704 3.03 1.75h1.651C10.968 8.352 9.14 7 6.996 7 4.236 7 2 9.239 2 12z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@@ -5,5 +5,5 @@
android:viewportHeight="4">
<path
android:pathData="M4,2C4,3.1046 3.1046,4 2,4C0.8954,4 0,3.1046 0,2C0,0.8954 0.8954,0 2,0C3.1046,0 4,0.8954 4,2ZM10,2C10,3.1046 9.1046,4 8,4C6.8954,4 6,3.1046 6,2C6,0.8954 6.8954,0 8,0C9.1046,0 10,0.8954 10,2ZM14,4C15.1046,4 16,3.1046 16,2C16,0.8954 15.1046,0 14,0C12.8954,0 12,0.8954 12,2C12,3.1046 12.8954,4 14,4Z"
android:fillColor="@color/gray_500"/>
android:fillColor="?colorGray500"/>
</vector>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="27dp"/>
<stroke android:width="2dp" android:color="@color/gray_25"/>
<stroke android:width="2dp" android:color="?colorGray25"/>
</shape>

View File

@@ -2,14 +2,14 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:gravity="center_vertical">
<shape>
<solid android:color="@color/gray_500"/>
<solid android:color="?colorGray500"/>
<corners android:radius="1dp"/>
<size android:height="2dp"/>
</shape>
</item>
<item android:gravity="center_vertical" android:id="@android:id/secondaryProgress">
<clip>
<shape android:tint="@color/gray_50">
<shape android:tint="?colorGray50">
<solid android:color="#40000000"/>
<corners android:radius="1dp"/>
<size android:height="2dp"/>
@@ -19,7 +19,7 @@
<item android:gravity="center_vertical" android:id="@android:id/progress">
<clip>
<shape>
<solid android:color="@color/gray_50"/>
<solid android:color="?colorGray50"/>
<corners android:radius="1dp"/>
<size android:height="2dp"/>
</shape>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<solid android:color="@color/gray_25"/>
<solid android:color="?colorGray25"/>
<size android:width="18dp" android:height="18dp"/>
</shape>

View File

@@ -6,7 +6,7 @@
android:shape="ring"
android:thickness="4dp"
android:useLevel="true">
<solid android:color="@color/gray_100"/>
<solid android:color="?colorGray100"/>
</shape>
</item>
</layer-list>

View File

@@ -83,7 +83,7 @@
android:layout_alignParentTop="true"
android:src="@drawable/ic_fluent_dismiss_24_filled"
android:contentDescription="@string/cancel"
android:tint="@color/gray_100"
android:tint="?colorGray100"
android:background="@drawable/bg_upload_progress"/>
<ProgressBar
@@ -104,7 +104,7 @@
android:layout_height="16dp"
android:layout_below="@id/retry_or_cancel_upload"
android:layout_marginTop="16dp"
android:textColor="@color/gray_200"
android:textColor="?colorGray200"
android:textSize="14dp"
android:gravity="center_horizontal"
android:singleLine="true"
@@ -119,7 +119,7 @@
android:layout_height="32dp"
android:layout_below="@id/state_title"
android:includeFontPadding="false"
android:textColor="@color/gray_200"
android:textColor="?colorGray200"
android:gravity="center_horizontal|top"
android:lines="2"
android:maxLines="2"

View File

@@ -26,25 +26,13 @@
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginTop="-6dp"
android:layout_marginEnd="6dp"
android:layout_toStartOf="@id/more"
android:layout_marginRight="6dp"
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:scaleType="center"
android:src="@drawable/ic_translate"
android:tint="@color/translate_icon" />
<ImageView
android:id="@+id/avatar"
android:layout_width="46dp"
@@ -58,7 +46,7 @@
android:layout_width="match_parent"
android:layout_height="24dp"
android:layout_marginEnd="8dp"
android:layout_toStartOf="@id/translate"
android:layout_toStartOf="@id/visibility"
android:layout_toEndOf="@id/avatar">
<TextView
@@ -90,7 +78,7 @@
android:layout_height="20dp"
android:layout_below="@id/name_wrap"
android:layout_marginEnd="8dp"
android:layout_toStartOf="@id/translate"
android:layout_toStartOf="@id/visibility"
android:layout_toEndOf="@id/avatar"
android:layoutDirection="locale"
android:orientation="horizontal">

View File

@@ -7,6 +7,7 @@
android:paddingBottom="12dp">
<LinearLayout
android:id="@+id/text_wrap"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
@@ -32,10 +33,9 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/m3_title_medium"
android:background="@color/error_900"
android:background="?colorBackgroundLight"
tools:text="CW title"/>
<View
android:id="@+id/border_bottom"
android:layout_width="match_parent"
@@ -49,27 +49,58 @@
android:layout_height="wrap_content"
android:paddingHorizontal="16dp"
android:textSize="16sp"
android:textAppearance="@style/m3_body_large"
tools:text="setting up my mstdn"/>
android:textAppearance="@style/m3_body_large"/>
<!-- <Button-->
<!-- android:id="@+id/translate"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="32dp"-->
<!-- android:background="@drawable/bg_inline_button"-->
<!-- android:elevation="0dp"-->
<!-- 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" />-->
<org.joinmastodon.android.ui.views.AutoOrientationLinearLayout
android:id="@+id/translate_wrap"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:gravity="center_vertical">
<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
android:visibility="gone"
android:id="@+id/spoiler_overlay"

View File

@@ -42,7 +42,7 @@
android:layout_margin="16dp"
android:paddingRight="8dp"
android:paddingLeft="8dp"
android:textColor="@color/gray_50t"
android:textColor="?colorGray50t"
android:textAllCaps="true"
android:fontFamily="sans-serif-medium"
android:textSize="14dp"

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="48dp"
android:paddingHorizontal="16dp"
android:gravity="center_vertical"
android:layoutDirection="locale">
<ImageView
android:id="@+id/icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="32dp"
android:importantForAccessibility="no"
android:tint="?android:textColorPrimary"
tools:src="@drawable/ic_fluent_color_24_regular"/>
<TextView
android:id="@+id/text"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginEnd="8dp"
android:gravity="center_vertical"
android:textColor="?android:textColorPrimary"
android:textSize="16sp" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:background="@drawable/bg_inline_button"
android:elevation="0dp"
android:ellipsize="middle"
android:fontFamily="sans-serif-medium"
android:singleLine="true"
android:stateListAnimator="@null"
android:textColor="?android:textColorPrimary"
android:textSize="16sp"
tools:text="@string/sk_color_palette_pink" />
</LinearLayout>

View File

@@ -15,7 +15,7 @@
android:layout_marginEnd="32dp"
android:importantForAccessibility="no"
android:tint="?android:textColorPrimary"
tools:src="@drawable/ic_color_theme_preference"/>
tools:src="@drawable/ic_fluent_color_24_regular"/>
<TextView
@@ -27,7 +27,7 @@
android:textSize="16sp"
android:singleLine="true"
android:ellipsize="end"
android:text="@string/sk_settings_color_picker"/>
android:text="@string/sk_settings_color_palette"/>
<Button
android:id="@+id/color_picker_button"

View File

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

View File

@@ -12,7 +12,6 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingHorizontal="16dp"
android:drawableLeft="@drawable/ic_fluent_people_community_24_regular"
android:drawableTint="?android:textColorSecondary"
android:drawablePadding="16dp"
android:textAppearance="@style/m3_title_medium"
@@ -26,6 +25,7 @@
android:clickable="false"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:visibility="gone"
android:paddingRight="16dp"/>
<!-- <ImageView-->

View File

@@ -55,7 +55,7 @@
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:src="@drawable/ic_pause_24"
android:tint="@color/gray_50"
android:tint="?colorGray50"
android:contentDescription="@string/pause"
android:background="?android:selectableItemBackgroundBorderless"/>

View File

@@ -1,11 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/m3_color" android:title="@string/sk_color_theme_material3"/>
<item android:id="@+id/purple_color" android:title="@string/sk_color_theme_purple"/>
<item android:id="@+id/pink_color" android:title="@string/sk_color_theme_pink"/>
<item android:id="@+id/green_color" android:title="@string/sk_color_theme_green"/>
<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/yellow_color" android:title="@string/sk_color_theme_yellow"/>
<item android:id="@+id/red_color" android:title="@string/sk_color_theme_red"/>
<item android:id="@+id/m3_color" android:title="@string/sk_color_palette_material3"/>
<item android:id="@+id/purple_color" android:title="@string/sk_color_palette_purple"/>
<item android:id="@+id/pink_color" android:title="@string/sk_color_palette_pink"/>
<item android:id="@+id/green_color" android:title="@string/sk_color_palette_green"/>
<item android:id="@+id/blue_color" android:title="@string/sk_color_palette_blue"/>
<item android:id="@+id/brown_color" android:title="@string/sk_color_palette_brown"/>
<item android:id="@+id/yellow_color" android:title="@string/sk_color_palette_yellow"/>
<item android:id="@+id/red_color" android:title="@string/sk_color_palette_red"/>
<item android:id="@+id/nord_color" android:title="@string/sk_color_palette_nord"/>
</menu>

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<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/favorites" android:title="@string/your_favorites" android:icon="@drawable/ic_fluent_star_24_regular"/>
<item android:id="@+id/share" android:title="@string/share_user" android:icon="@drawable/ic_fluent_share_24_regular"/>
<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" android:showAsAction="always"/>
<item android:id="@+id/followed_hashtags" android:title="@string/sk_hashtags_you_follow" android:icon="@drawable/ic_fluent_number_symbol_24_regular" android:showAsAction="always"/>
<item android:id="@+id/share" android:title="@string/share_user" android:icon="@drawable/ic_fluent_share_24_regular" android:showAsAction="always"/>
</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_notification_type_status">Publicacions</string>
<string name="sk_notify_posts">Notificacions de publicacions</string>
<string name="sk_settings_color_picker">Color de tema</string>
<string name="sk_color_theme_pink">Rosa</string>
<string name="sk_color_theme_purple">Lila</string>
<string name="sk_color_theme_green">Verd</string>
<string name="sk_color_theme_blue">Blau</string>
<string name="sk_color_theme_brown">Marró</string>
<string name="sk_color_theme_yellow">Groc</string>
<string name="sk_settings_color_palette">Color de tema</string>
<string name="sk_color_palette_pink">Rosa</string>
<string name="sk_color_palette_purple">Lila</string>
<string name="sk_color_palette_green">Verd</string>
<string name="sk_color_palette_blue">Blau</string>
<string name="sk_color_palette_brown">Marró</string>
<string name="sk_color_palette_yellow">Groc</string>
</resources>

View File

@@ -40,13 +40,13 @@
<string name="sk_settings_show_federated_timeline">Föderierte Timeline anzeigen</string>
<string name="sk_notify_posts">Beitrags-Benachrichtigungen</string>
<string name="sk_settings_color_picker">Farbschema</string>
<string name="sk_color_theme_pink">Pink</string>
<string name="sk_color_theme_purple">Violett</string>
<string name="sk_color_theme_green">Grün</string>
<string name="sk_color_theme_brown">Braun</string>
<string name="sk_color_theme_yellow">Gelb</string>
<string name="sk_color_palette_pink">Pink</string>
<string name="sk_color_palette_purple">Violett</string>
<string name="sk_color_palette_green">Grün</string>
<string name="sk_color_palette_brown">Braun</string>
<string name="sk_color_palette_yellow">Gelb</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_translated_using">Übersetzt mit %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_available_languages">Verfügbare Sprachen</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_theme_material3">System</string>
<string name="sk_color_theme_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>

View File

@@ -56,4 +56,9 @@
<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_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_theme_material3">Sistema</string>
<string name="sk_color_theme_red">Rojo</string>
</resources>

View File

@@ -59,4 +59,6 @@
<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_theme_material3">Système</string>
<string name="sk_color_theme_red">Rouge</string>
</resources>

View File

@@ -28,7 +28,7 @@
<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_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_pin_post">Sematkan ke profil</string>
<string name="sk_visibility_unlisted">Tidak terdaftar</string>
@@ -41,10 +41,24 @@
<string name="sk_notification_type_status">Kiriman</string>
<string name="sk_notify_posts">Notifikasi kiriman</string>
<string name="sk_settings_color_picker">Warna tema</string>
<string name="sk_color_theme_pink">Merah muda</string>
<string name="sk_color_theme_pink">Merah Muda</string>
<string name="sk_color_theme_purple">Ungu</string>
<string name="sk_color_theme_green">Hijau</string>
<string name="sk_color_theme_blue">Biru</string>
<string name="sk_color_theme_brown">Cokelat</string>
<string name="sk_color_theme_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_theme_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_theme_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>

View File

@@ -2,13 +2,13 @@
<resources>
<string name="sk_notification_type_status">Post</string>
<string name="sk_notify_posts">Notifiche post</string>
<string name="sk_settings_color_picker">Colore del tema</string>
<string name="sk_color_theme_pink">Rosa</string>
<string name="sk_color_theme_purple">Viola</string>
<string name="sk_color_theme_green">Verde</string>
<string name="sk_color_theme_blue">Blu</string>
<string name="sk_color_theme_brown">Marrone</string>
<string name="sk_color_theme_yellow">Giallo</string>
<string name="sk_settings_color_palette">Colore del tema</string>
<string name="sk_color_palette_pink">Rosa</string>
<string name="sk_color_palette_purple">Viola</string>
<string name="sk_color_palette_green">Verde</string>
<string name="sk_color_palette_blue">Blu</string>
<string name="sk_color_palette_brown">Marrone</string>
<string name="sk_color_palette_yellow">Giallo</string>
<string name="sk_app_name">Moshidon</string>
<string name="sk_pinned_posts">Fissati</string>
<string name="sk_delete_and_redraft">Elimina e riscrivi</string>
@@ -49,14 +49,15 @@
<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 usando %s</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">Permetti scelta multipla</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>

View File

@@ -59,4 +59,6 @@
<string name="sk_example_domain">example.social</string>
<string name="sk_welcome_title">환영합니다!</string>
<string name="sk_welcome_text">상어가 당신을 맞이합니다! 시작하기 위해, 아래에 사용하시는 인스턴스의 도메인 이름을 입력해주세요.</string>
<string name="sk_color_theme_material3">시스템</string>
<string name="sk_color_theme_red">빨간색</string>
</resources>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="shortcut_icon_background">@color/gray_700</color>
<color name="shortcut_icon_foreground">@color/original_primary_600</color>
<color name="shortcut_icon_background">#282C37</color>
<!-- <color name="shortcut_icon_foreground">@color/purple_primary_600</color>-->
</resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="ColorPalette.Material3.AutoLightDark" parent="ColorPalette.Material3.Dark"/>
</resources>

View File

@@ -2,25 +2,4 @@
<resources>
<style name="Theme.Mastodon.AutoLightDark" parent="Theme.Mastodon.Dark"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack" parent="Theme.Mastodon.Dark.TrueBlack"/>
<style name="Theme.Mastodon.AutoLightDark.Original" parent="Theme.Mastodon.Dark.Original"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Original" parent="Theme.Mastodon.Dark.TrueBlack.Original"/>
<style name="Theme.Mastodon.AutoLightDark.Green" parent="Theme.Mastodon.Dark.Green"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Green" parent="Theme.Mastodon.Dark.TrueBlack.Green"/>
<style name="Theme.Mastodon.AutoLightDark.Blue" parent="Theme.Mastodon.Dark.Blue"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Blue" parent="Theme.Mastodon.Dark.TrueBlack.Blue"/>
<style name="Theme.Mastodon.AutoLightDark.Orange" parent="Theme.Mastodon.Dark.Orange"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Orange" parent="Theme.Mastodon.Dark.TrueBlack.Orange"/>
<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.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.TrueBlack.Material3" parent="Theme.Mastodon.Dark.TrueBlack.Material3"/>
</resources>

View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>

View File

@@ -40,13 +40,13 @@
<string name="sk_visibility_unlisted">Niewidoczny</string>
<string name="sk_notification_type_status">Wpisy</string>
<string name="sk_notify_posts">Powiadomienia wpisów</string>
<string name="sk_settings_color_picker">Motyw</string>
<string name="sk_color_theme_pink">Różowy</string>
<string name="sk_color_theme_purple">Fioletowy</string>
<string name="sk_color_theme_green">Zielony</string>
<string name="sk_color_theme_blue">Niebieski</string>
<string name="sk_color_theme_brown">Brązowy</string>
<string name="sk_color_theme_yellow">Żółty</string>
<string name="sk_settings_color_palette">Motyw</string>
<string name="sk_color_palette_pink">Różowy</string>
<string name="sk_color_palette_purple">Fioletowy</string>
<string name="sk_color_palette_green">Zielony</string>
<string name="sk_color_palette_blue">Niebieski</string>
<string name="sk_color_palette_brown">Brązowy</string>
<string name="sk_color_palette_yellow">Żółty</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_show_original">Pokaż oryginał</string>

View File

@@ -55,4 +55,10 @@
<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_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_theme_material3">Sistema</string>
<string name="sk_color_theme_red">Vermelho</string>
</resources>

View File

@@ -53,4 +53,12 @@
<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_theme_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_theme_red">Красный</string>
</resources>

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="sk_notify_posts">Сповіщення про пости</string>
<string name="sk_settings_color_picker">Колірна тема</string>
<string name="sk_color_theme_purple">Фіолетовий</string>
<string name="sk_color_theme_green">Зелений</string>
<string name="sk_color_theme_blue">Синий</string>
<string name="sk_color_theme_brown">Коричневий</string>
<string name="sk_color_theme_yellow">Жовтий</string>
<string name="sk_settings_color_palette">Колірна тема</string>
<string name="sk_color_palette_purple">Фіолетовий</string>
<string name="sk_color_palette_green">Зелений</string>
<string name="sk_color_palette_blue">Синий</string>
<string name="sk_color_palette_brown">Коричневий</string>
<string name="sk_color_palette_yellow">Жовтий</string>
<string name="sk_poll_allow_multiple">Дозволити кілька виборів</string>
<string name="sk_translate_post">Перекласти</string>
<string name="sk_translate_show_original">Показати оригінал</string>
@@ -17,7 +17,7 @@
<string name="sk_clear_recent_languages">Очистити нещодавно використані мови</string>
<string name="sk_settings_always_reveal_content_warnings">Завжди відкривати вміст</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_app_name">Moshidon</string>
<string name="sk_pinned_posts">Закріплене</string>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Widget.Mastodon.Toolbar" parent="android:Widget.Material.Toolbar">
<item name="android:contentInsetStartWithNavigation">0dp</item>
<item name="android:titleMarginEnd">0dp</item>
<item name="android:titleMarginStart">0dp</item>
</style>
</resources>

View File

@@ -1,9 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="navigation_bar_bg">@color/gray_50</color>
<color name="green_navigation_bar_bg">@color/green_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="yellow_navigation_bar_bg">@color/yellow_gray_50</color>
<color name="red_navigation_bar_bg">@color/red_gray_50</color>
</resources>

View File

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

View File

@@ -17,7 +17,28 @@
<attr name="colorTabInactive" format="color"/>
<attr name="colorAccentLightest" format="color"/>
<attr name="profileHeaderBackground" format="color"/>
<attr name="toolbarBackground" format="color"/>
<attr name="colorButtonBackgroundPrimaryDarkOnLight" format="color"/>
<attr name="colorButtonBackgroundPrimaryDarkOnLightDisabled" format="color"/>
<attr name="colorButtonTextPrimaryDarkOnLight" format="color"/>
<attr name="colorButtonTextPrimaryDarkOnLightDisabled" format="color"/>
<attr name="colorButtonBackgroundPrimaryLightOnDark" format="color"/>
<attr name="colorButtonBackgroundPrimaryLightOnDarkDisabled" format="color"/>
<attr name="colorButtonTextPrimaryLightOnDark" format="color"/>
<attr name="colorButtonTextPrimaryLightOnDarkDisabled" format="color"/>
<attr name="colorButtonBackgroundSecondaryDarkOnLight" format="color"/>
<attr name="colorButtonBackgroundSecondaryDarkOnLightDisabled" format="color"/>
<attr name="colorButtonTextSecondaryDarkOnLight" format="color"/>
<attr name="colorButtonTextSecondaryDarkOnLightDisabled" format="color"/>
<attr name="colorButtonBackgroundSecondaryLightOnDark" format="color"/>
<attr name="colorButtonBackgroundSecondaryLightOnDarkDisabled" format="color"/>
<attr name="colorButtonTextSecondaryLightOnDark" format="color"/>
<attr name="colorButtonTextSecondaryLightOnDarkDisabled" format="color"/>
<attr name="colorM3Primary" format="color"/>
<attr name="colorM3OnPrimary" format="color"/>
<attr name="colorM3PrimaryContainer" format="color"/>
@@ -56,4 +77,30 @@
<attr name="android:labelTextSize" format="dimension"/>
<attr name="labelTextColor" format="color"/>
</declare-styleable>
<attr name="colorPrimary25" format="color" />
<attr name="colorPrimary50" format="color" />
<attr name="colorPrimary100" format="color" />
<attr name="colorPrimary200" format="color" />
<attr name="colorPrimary300" format="color" />
<attr name="colorPrimary400" format="color" />
<attr name="colorPrimary500" format="color" />
<attr name="colorPrimary600" format="color" />
<attr name="colorPrimary700" format="color" />
<attr name="colorPrimary800" format="color" />
<attr name="colorPrimary900" format="color" />
<attr name="colorGray25" format="color" />
<attr name="colorGray50" format="color" />
<attr name="colorGray50t" format="color" />
<attr name="colorGray100" format="color" />
<attr name="colorGray200" format="color" />
<attr name="colorGray300" format="color" />
<attr name="colorGray400" format="color" />
<attr name="colorGray500" format="color" />
<attr name="colorGray600" format="color" />
<attr name="colorGray700" format="color" />
<attr name="colorGray800" format="color" />
<attr name="colorGray800t" format="color" />
<attr name="colorGray900" format="color" />
</resources>

View File

@@ -5,12 +5,13 @@
<color name="fluent_default_icon_tint">?android:textColorPrimary</color>
<color name="gray_900">#121029</color>
<color name="gray_800t">#cc2b2938</color>
<color name="gray_800">#2b2938</color>
<color name="gray_700">#353454</color>
<color name="gray_600">#464666</color>
<color name="gray_500">#696685</color>
<color name="gray_900">#110c10</color>
<color name="gray_800t">#cc191417</color>
<color name="gray_800">#191417</color>
<color name="gray_700">#231f22</color>
<color name="gray_600">#3b373a</color>
<color name="gray_500">#625d60</color>
<color name="gray_400">#9998b3</color>
<color name="gray_300">#d1d1de</color>
<color name="gray_200">#e6e6ed</color>
@@ -31,141 +32,6 @@
<color name="primary_800">#ae218a</color>
<color name="primary_900">#6d1556</color>
<color name="original_primary_25">#fafaff</color>
<color name="original_primary_50">#f4f3ff</color>
<color name="original_primary_100">#ebebff</color>
<color name="original_primary_200">#d7d7ff</color>
<color name="original_primary_300">#c2c2ff</color>
<color name="original_primary_400">#9999ff</color>
<color name="original_primary_500">#6364ff</color>
<color name="original_primary_600">#562cfc</color>
<color name="original_primary_700">#431cbb</color>
<color name="original_primary_800">#2f0c7a</color>
<color name="original_primary_900">#17063b</color>
<color name="green_primary_25">#fafaff</color>
<color name="green_primary_50">#d1feaf</color>
<color name="green_primary_100">#bbf294</color>
<color name="green_primary_200">#a0d57b</color>
<color name="green_primary_300">#85b962</color>
<color name="green_primary_400">#6c9e4b</color>
<color name="green_primary_500">#528232</color>
<color name="green_primary_600">#3b6a1c</color>
<color name="green_primary_700">#245103</color>
<color name="green_primary_800">#163800</color>
<color name="green_primary_900">#0a2100</color>
<color name="blue_primary_25">#fafaff</color>
<color name="blue_primary_50">#e8f2ff</color>
<color name="blue_primary_100">#cee5ff</color>
<color name="blue_primary_200">#97cbff</color>
<color name="blue_primary_300">#65b1f4</color>
<color name="blue_primary_400">#4796d7</color>
<color name="blue_primary_500">#227bba</color>
<color name="blue_primary_600">#00639b</color>
<color name="blue_primary_700">#004a76</color>
<color name="blue_primary_800">#003354</color>
<color name="blue_primary_900">#001d33</color>
<color name="orange_primary_25">#fafaff</color>
<color name="orange_primary_50">#ffeedf</color>
<color name="orange_primary_100">#ffdcbb</color>
<color name="orange_primary_200">#ffb869</color>
<color name="orange_primary_300">#e89a3b</color>
<color name="orange_primary_400">#c98121</color>
<color name="orange_primary_500">#a96700</color>
<color name="orange_primary_600">#885200</color>
<color name="orange_primary_700">#673d00</color>
<color name="orange_primary_800">#482900</color>
<color name="orange_primary_900">#2b1700</color>
<color name="yellow_primary_25">#fafaff</color>
<color name="yellow_primary_50">#fff0ca</color>
<color name="yellow_primary_100">#ffe084</color>
<color name="yellow_primary_200">#e8c349</color>
<color name="yellow_primary_300">#cba82f</color>
<color name="yellow_primary_400">#ae8d10</color>
<color name="yellow_primary_500">#8f7300</color>
<color name="yellow_primary_600">#735c00</color>
<color name="yellow_primary_700">#574500</color>
<color name="yellow_primary_800">#3c2f00</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_800t">#cc171717</color>
<color name="custom_gray_800">#171717</color>
<color name="custom_gray_700">#191919</color>
<color name="custom_gray_600">#212121</color>
<color name="custom_gray_500">#242424</color>
<!-- Old Colors:-->
<!-- <color name="green_gray_400">#8f918e</color>-->
<!-- <color name="green_gray_300">#a9aca8</color>-->
<!-- <color name="green_gray_200">#c5c7c3</color>-->
<!-- <color name="green_gray_100">#e1e3df</color>-->
<!-- <color name="green_gray_50t">#eff1ed</color>-->
<!-- <color name="green_gray_50">#eff1ed</color>-->
<!-- <color name="green_gray_25">#f7f8fa</color>-->
<!-- <color name="blue_gray_400">#919191</color>-->
<!-- <color name="blue_gray_300">#ababab</color>-->
<!-- <color name="blue_gray_200">#c6c6c6</color>-->
<!-- <color name="blue_gray_100">#e2e2e2</color>-->
<!-- <color name="blue_gray_50t">#f1f1f1</color>-->
<!-- <color name="blue_gray_50">#f1f1f1</color>-->
<!-- <color name="blue_gray_25">#f7f8fa</color>-->
<color name="green_gray_400">#a2b095</color>
<color name="green_gray_300">#bdcbaf</color>
<color name="green_gray_200">#d9e7ca</color>
<color name="green_gray_100">#d9e7ca</color>
<color name="green_gray_50t">#cce8f8d8</color>
<color name="green_gray_50">#e8f5d8</color>
<color name="green_gray_25">#f7f8fa</color>
<color name="blue_gray_400">#9eadbe</color>
<color name="blue_gray_300">#b9c8da</color>
<color name="blue_gray_200">#d5e4f7</color>
<color name="blue_gray_100">#e8f2ff</color>
<color name="blue_gray_50t">#cce8f2ff</color>
<color name="blue_gray_50">#e8f2ff</color>
<color name="blue_gray_25">#f7f8fa</color>
<color name="orange_gray_400">#c3a689</color>
<color name="orange_gray_300">#e0c1a3</color>
<color name="orange_gray_200">#feddbd</color>
<color name="orange_gray_100">#ffeedf</color>
<color name="orange_gray_50t">#ccffeedf</color>
<color name="orange_gray_50">#ffeedf</color>
<color name="orange_gray_25">#f7f8fa</color>
<color name="yellow_gray_400">#b8aa87</color>
<color name="yellow_gray_300">#d4c5a1</color>
<color name="yellow_gray_200">#f1e1bb</color>
<color name="yellow_gray_100">#fff0ca</color>
<color name="yellow_gray_50t">#ccfff0ca</color>
<color name="yellow_gray_50">#fff0ca</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_50">#FEF3F2</color>
@@ -230,13 +96,39 @@
<color name="favorite_selected">@color/warning_500</color>
<color name="bookmark_selected">@color/success_500</color>
<color name="boost_selected">?android:colorPrimary</color>
<color name="translate_selected">?android:colorPrimary</color>
<color name="boost_selected">@color/primary_500</color>
<color name="shortcut_icon_background">#282C37</color>
<!-- <color name="shortcut_icon_foreground">@color/primary_700</color>-->
<color name="shortcut_icon_foreground">@color/purple_primary_700</color>
<!-- M3 dynamic colors -->
<color name="m3_navigation_bar_bg">@color/gray_50</color>
<color name="m3_gray_900">@color/gray_900</color>
<color name="m3_gray_800t">@color/gray_800t</color>
<color name="m3_gray_800">@color/gray_800</color>
<color name="m3_gray_700">@color/gray_700</color>
<color name="m3_gray_600">@color/gray_600</color>
<color name="m3_gray_500">@color/gray_500</color>
<color name="m3_gray_400">@color/gray_400</color>
<color name="m3_gray_300">@color/gray_300</color>
<color name="m3_gray_200">@color/gray_200</color>
<color name="m3_gray_100">@color/gray_100</color>
<color name="m3_gray_50t">@color/gray_50t</color>
<color name="m3_gray_50">@color/gray_50</color>
<color name="m3_gray_25">@color/gray_25</color>
<color name="m3_primary_25">@color/purple_primary_25</color>
<color name="m3_primary_50">@color/purple_primary_50</color>
<color name="m3_primary_100">@color/purple_primary_100</color>
<color name="m3_primary_200">@color/purple_primary_200</color>
<color name="m3_primary_300">@color/purple_primary_300</color>
<color name="m3_primary_400">@color/purple_primary_400</color>
<color name="m3_primary_500">@color/purple_primary_500</color>
<color name="m3_primary_600">@color/purple_primary_600</color>
<color name="m3_primary_700">@color/purple_primary_700</color>
<color name="m3_primary_800">@color/purple_primary_800</color>
<color name="m3_primary_900">@color/purple_primary_900</color>
<!-- light theme -->
<color name="m3_sys_light_primary">#6750A4</color>
@@ -280,4 +172,144 @@
<color name="m3_sys_dark_on_surface_variant">#CAC4D0</color>
<color name="m3_sys_dark_outline">#938F99</color>
<!-- PALETTE COLORS -->
<color name="purple_primary_25">#fafaff</color>
<color name="purple_primary_50">#f4f3ff</color>
<color name="purple_primary_100">#ebebff</color>
<color name="purple_primary_200">#d7d7ff</color>
<color name="purple_primary_300">#c2c2ff</color>
<color name="purple_primary_400">#9999ff</color>
<color name="purple_primary_500">#6364ff</color>
<color name="purple_primary_600">#562cfc</color>
<color name="purple_primary_700">#431cbb</color>
<color name="purple_primary_800">#2f0c7a</color>
<color name="purple_primary_900">#17063b</color>
<color name="green_primary_25">#fafaff</color>
<color name="green_primary_50">#d1feaf</color>
<color name="green_primary_100">#bbf294</color>
<color name="green_primary_200">#a0d57b</color>
<color name="green_primary_300">#85b962</color>
<color name="green_primary_400">#6c9e4b</color>
<color name="green_primary_500">#528232</color>
<color name="green_primary_600">#3b6a1c</color>
<color name="green_primary_700">#245103</color>
<color name="green_primary_800">#163800</color>
<color name="green_primary_900">#0a2100</color>
<color name="brownish_gray_900">#110c10</color>
<color name="brownish_gray_800">#191417</color>
<color name="brownish_gray_800t">#cc191417</color>
<color name="brownish_gray_700">#231f22</color>
<color name="brownish_gray_600">#3b373a</color>
<color name="brownish_gray_500">#625d60</color>
<color name="green_gray_400">#a2b095</color>
<color name="green_gray_300">#bdcbaf</color>
<color name="green_gray_200">#d9e7ca</color>
<color name="green_gray_100">#d9e7ca</color>
<color name="green_gray_50t">#cce8f8d8</color>
<color name="green_gray_50">#e8f5d8</color>
<color name="green_gray_25">#f7f8fa</color>
<color name="blue_primary_25">#fafaff</color>
<color name="blue_primary_50">#e8f2ff</color>
<color name="blue_primary_100">#cee5ff</color>
<color name="blue_primary_200">#97cbff</color>
<color name="blue_primary_300">#65b1f4</color>
<color name="blue_primary_400">#4796d7</color>
<color name="blue_primary_500">#227bba</color>
<color name="blue_primary_600">#00639b</color>
<color name="blue_primary_700">#004a76</color>
<color name="blue_primary_800">#003354</color>
<color name="blue_primary_900">#001d33</color>
<color name="blue_gray_400">#9eadbe</color>
<color name="blue_gray_300">#b9c8da</color>
<color name="blue_gray_200">#d5e4f7</color>
<color name="blue_gray_100">#e8f2ff</color>
<color name="blue_gray_50t">#cce8f2ff</color>
<color name="blue_gray_50">#e8f2ff</color>
<color name="blue_gray_25">#f7f8fa</color>
<color name="brown_primary_25">#fafaff</color>
<color name="brown_primary_50">#ffeedf</color>
<color name="brown_primary_100">#ffdcbb</color>
<color name="brown_primary_200">#ffb869</color>
<color name="brown_primary_300">#e89a3b</color>
<color name="brown_primary_400">#c98121</color>
<color name="brown_primary_500">#a96700</color>
<color name="brown_primary_600">#885200</color>
<color name="brown_primary_700">#673d00</color>
<color name="brown_primary_800">#482900</color>
<color name="brown_primary_900">#2b1700</color>
<color name="brown_gray_400">#c3a689</color>
<color name="brown_gray_300">#e0c1a3</color>
<color name="brown_gray_200">#feddbd</color>
<color name="brown_gray_100">#ffeedf</color>
<color name="brown_gray_50t">#ccffeedf</color>
<color name="brown_gray_50">#ffeedf</color>
<color name="brown_gray_25">#f7f8fa</color>
<color name="yellow_primary_25">#fafaff</color>
<color name="yellow_primary_50">#fff0ca</color>
<color name="yellow_primary_100">#ffe084</color>
<color name="yellow_primary_200">#e8c349</color>
<color name="yellow_primary_300">#cba82f</color>
<color name="yellow_primary_400">#ae8d10</color>
<color name="yellow_primary_500">#8f7300</color>
<color name="yellow_primary_600">#735c00</color>
<color name="yellow_primary_700">#574500</color>
<color name="yellow_primary_800">#3c2f00</color>
<color name="yellow_primary_900">#231b00</color>
<color name="yellow_gray_400">#b8aa87</color>
<color name="yellow_gray_300">#d4c5a1</color>
<color name="yellow_gray_200">#f1e1bb</color>
<color name="yellow_gray_100">#fff0ca</color>
<color name="yellow_gray_50t">#ccfff0ca</color>
<color name="yellow_gray_50">#fff0ca</color>
<color name="yellow_gray_25">#f7f8fa</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="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="nord_primary_25">#fafaff</color>
<color name="nord_primary_50">#eff0ff</color>
<color name="nord_primary_100">#dfe1f2</color>
<color name="nord_primary_200">#c3c6d6</color>
<color name="nord_primary_300">#a8aaba</color>
<color name="nord_primary_400">#8f909f</color>
<color name="nord_primary_500">#727584</color>
<color name="nord_primary_600">#5b5e6c</color>
<color name="nord_primary_700">#434654</color>
<color name="nord_primary_800">#2d303d</color>
<color name="nord_primary_900">#181b27</color>
<color name="nord_gray_400">#aaaab4</color>
<color name="nord_gray_300">#c5c6d0</color>
<color name="nord_gray_200">#e2e2ec</color>
<color name="nord_gray_100">#eff0ff</color>
<color name="nord_gray_50t">#f0f0faca</color>
<color name="nord_gray_50">#f0f0fa</color>
<color name="nord_gray_25">#f7f8fa</color>
</resources>

View File

@@ -0,0 +1,265 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="ColorPalette">
<item name="colorPrimary25">@color/primary_25</item>
<item name="colorPrimary50">@color/primary_50</item>
<item name="colorPrimary100">@color/primary_100</item>
<item name="colorPrimary200">@color/primary_200</item>
<item name="colorPrimary300">@color/primary_300</item>
<item name="colorPrimary400">@color/primary_400</item>
<item name="colorPrimary500">@color/primary_500</item>
<item name="colorPrimary600">@color/primary_600</item>
<item name="colorPrimary700">@color/primary_700</item>
<item name="colorPrimary800">@color/primary_800</item>
<item name="colorPrimary900">@color/primary_900</item>
<item name="colorGray900">@color/gray_900</item>
<item name="colorGray800t">@color/gray_800t</item>
<item name="colorGray800">@color/gray_800</item>
<item name="colorGray700">@color/gray_700</item>
<item name="colorGray600">@color/gray_600</item>
<item name="colorGray500">@color/gray_500</item>
<item name="colorGray400">@color/gray_400</item>
<item name="colorGray300">@color/gray_300</item>
<item name="colorGray200">@color/gray_200</item>
<item name="colorGray100">@color/gray_100</item>
<item name="colorGray50t">@color/gray_50t</item>
<item name="colorGray50">@color/gray_50</item>
<item name="colorGray25">@color/gray_25</item>
</style>
<style name="ColorPalette.Material3">
<item name="colorPrimary25">@color/m3_primary_25</item>
<item name="colorPrimary50">@color/m3_primary_50</item>
<item name="colorPrimary100">@color/m3_primary_100</item>
<item name="colorPrimary200">@color/m3_primary_200</item>
<item name="colorPrimary300">@color/m3_primary_300</item>
<item name="colorPrimary400">@color/m3_primary_400</item>
<item name="colorPrimary500">@color/m3_primary_500</item>
<item name="colorPrimary600">@color/m3_primary_600</item>
<item name="colorPrimary700">@color/m3_primary_700</item>
<item name="colorPrimary800">@color/m3_primary_800</item>
<item name="colorPrimary900">@color/m3_primary_900</item>
<item name="colorGray900">@color/m3_gray_900</item>
<item name="colorGray800t">@color/m3_gray_800t</item>
<item name="colorGray800">@color/m3_gray_800</item>
<item name="colorGray700">@color/m3_gray_700</item>
<item name="colorGray600">@color/m3_gray_600</item>
<item name="colorGray500">@color/m3_gray_500</item>
<item name="colorGray400">@color/m3_gray_400</item>
<item name="colorGray300">@color/m3_gray_300</item>
<item name="colorGray200">@color/m3_gray_200</item>
<item name="colorGray100">@color/m3_gray_100</item>
<item name="colorGray50t">@color/m3_gray_50t</item>
<item name="colorGray50">@color/m3_gray_50</item>
<item name="colorGray25">@color/m3_gray_25</item>
</style>
<style name="ColorPalette.Material3.Dark">
<item name="colorPollVoted">?colorGray700</item>
<item name="colorWindowBackground">?colorGray900</item>
<item name="colorBackgroundLight">?colorGray800</item>
<item name="colorBackgroundLightest">?colorGray900</item>
<item name="android:colorBackground">?colorGray800</item>
<item name="android:statusBarColor">?colorGray900</item>
<item name="toolbarBackground">?colorGray900</item>
</style>
<style name="ColorPalette.Pink">
<item name="colorPrimary25">@color/primary_25</item>
<item name="colorPrimary50">@color/primary_50</item>
<item name="colorPrimary100">@color/primary_100</item>
<item name="colorPrimary200">@color/primary_200</item>
<item name="colorPrimary300">@color/primary_300</item>
<item name="colorPrimary400">@color/primary_400</item>
<item name="colorPrimary500">@color/primary_500</item>
<item name="colorPrimary600">@color/primary_600</item>
<item name="colorPrimary700">@color/primary_700</item>
<item name="colorPrimary800">@color/primary_800</item>
<item name="colorPrimary900">@color/primary_900</item>
</style>
<style name="ColorPalette.Purple">
<item name="colorPrimary25">@color/purple_primary_25</item>
<item name="colorPrimary50">@color/purple_primary_50</item>
<item name="colorPrimary100">@color/purple_primary_100</item>
<item name="colorPrimary200">@color/purple_primary_200</item>
<item name="colorPrimary300">@color/purple_primary_300</item>
<item name="colorPrimary400">@color/purple_primary_400</item>
<item name="colorPrimary500">@color/purple_primary_500</item>
<item name="colorPrimary600">@color/purple_primary_600</item>
<item name="colorPrimary700">@color/purple_primary_700</item>
<item name="colorPrimary800">@color/purple_primary_800</item>
<item name="colorPrimary900">@color/purple_primary_900</item>
</style>
<style name="ColorPalette.Green">
<item name="colorPrimary25">@color/green_primary_25</item>
<item name="colorPrimary50">@color/green_primary_50</item>
<item name="colorPrimary100">@color/green_primary_100</item>
<item name="colorPrimary200">@color/green_primary_200</item>
<item name="colorPrimary300">@color/green_primary_300</item>
<item name="colorPrimary400">@color/green_primary_400</item>
<item name="colorPrimary500">@color/green_primary_500</item>
<item name="colorPrimary600">@color/green_primary_600</item>
<item name="colorPrimary700">@color/green_primary_700</item>
<item name="colorPrimary800">@color/green_primary_800</item>
<item name="colorPrimary900">@color/green_primary_900</item>
<item name="colorGray900">@color/brownish_gray_900</item>
<item name="colorGray800t">@color/brownish_gray_800t</item>
<item name="colorGray800">@color/brownish_gray_800</item>
<item name="colorGray700">@color/brownish_gray_700</item>
<item name="colorGray600">@color/brownish_gray_600</item>
<item name="colorGray500">@color/brownish_gray_500</item>
<item name="colorGray400">@color/green_gray_400</item>
<item name="colorGray300">@color/green_gray_300</item>
<item name="colorGray200">@color/green_gray_200</item>
<item name="colorGray100">@color/green_gray_100</item>
<item name="colorGray50t">@color/green_gray_50t</item>
<item name="colorGray50">@color/green_gray_50</item>
<item name="colorGray25">@color/green_gray_25</item>
</style>
<style name="ColorPalette.Blue">
<item name="colorPrimary25">@color/blue_primary_25</item>
<item name="colorPrimary50">@color/blue_primary_50</item>
<item name="colorPrimary100">@color/blue_primary_100</item>
<item name="colorPrimary200">@color/blue_primary_200</item>
<item name="colorPrimary300">@color/blue_primary_300</item>
<item name="colorPrimary400">@color/blue_primary_400</item>
<item name="colorPrimary500">@color/blue_primary_500</item>
<item name="colorPrimary600">@color/blue_primary_600</item>
<item name="colorPrimary700">@color/blue_primary_700</item>
<item name="colorPrimary800">@color/blue_primary_800</item>
<item name="colorPrimary900">@color/blue_primary_900</item>
<item name="colorGray400">@color/blue_gray_400</item>
<item name="colorGray300">@color/blue_gray_300</item>
<item name="colorGray200">@color/blue_gray_200</item>
<item name="colorGray100">@color/blue_gray_100</item>
<item name="colorGray50t">@color/blue_gray_50t</item>
<item name="colorGray50">@color/blue_gray_50</item>
<item name="colorGray25">@color/blue_gray_25</item>
</style>
<style name="ColorPalette.Brown">
<item name="colorPrimary25">@color/brown_primary_25</item>
<item name="colorPrimary50">@color/brown_primary_50</item>
<item name="colorPrimary100">@color/brown_primary_100</item>
<item name="colorPrimary200">@color/brown_primary_200</item>
<item name="colorPrimary300">@color/brown_primary_300</item>
<item name="colorPrimary400">@color/brown_primary_400</item>
<item name="colorPrimary500">@color/brown_primary_500</item>
<item name="colorPrimary600">@color/brown_primary_600</item>
<item name="colorPrimary700">@color/brown_primary_700</item>
<item name="colorPrimary800">@color/brown_primary_800</item>
<item name="colorPrimary900">@color/brown_primary_900</item>
<item name="colorGray900">@color/brownish_gray_900</item>
<item name="colorGray800t">@color/brownish_gray_800t</item>
<item name="colorGray800">@color/brownish_gray_800</item>
<item name="colorGray700">@color/brownish_gray_700</item>
<item name="colorGray600">@color/brownish_gray_600</item>
<item name="colorGray500">@color/brownish_gray_500</item>
<item name="colorGray400">@color/brown_gray_400</item>
<item name="colorGray300">@color/brown_gray_300</item>
<item name="colorGray200">@color/brown_gray_200</item>
<item name="colorGray100">@color/brown_gray_100</item>
<item name="colorGray50t">@color/brown_gray_50t</item>
<item name="colorGray50">@color/brown_gray_50</item>
<item name="colorGray25">@color/brown_gray_25</item>
</style>
<style name="ColorPalette.Yellow">
<item name="colorPrimary25">@color/yellow_primary_25</item>
<item name="colorPrimary50">@color/yellow_primary_50</item>
<item name="colorPrimary100">@color/yellow_primary_100</item>
<item name="colorPrimary200">@color/yellow_primary_200</item>
<item name="colorPrimary300">@color/yellow_primary_300</item>
<item name="colorPrimary400">@color/yellow_primary_400</item>
<item name="colorPrimary500">@color/yellow_primary_500</item>
<item name="colorPrimary600">@color/yellow_primary_600</item>
<item name="colorPrimary700">@color/yellow_primary_700</item>
<item name="colorPrimary800">@color/yellow_primary_800</item>
<item name="colorPrimary900">@color/yellow_primary_900</item>
<item name="colorGray900">@color/brownish_gray_900</item>
<item name="colorGray800t">@color/brownish_gray_800t</item>
<item name="colorGray800">@color/brownish_gray_800</item>
<item name="colorGray700">@color/brownish_gray_700</item>
<item name="colorGray600">@color/brownish_gray_600</item>
<item name="colorGray500">@color/brownish_gray_500</item>
<item name="colorGray400">@color/yellow_gray_400</item>
<item name="colorGray300">@color/yellow_gray_300</item>
<item name="colorGray200">@color/yellow_gray_200</item>
<item name="colorGray100">@color/yellow_gray_100</item>
<item name="colorGray50t">@color/yellow_gray_50t</item>
<item name="colorGray50">@color/yellow_gray_50</item>
<item name="colorGray25">@color/yellow_gray_25</item>
</style>
<style name="ColorPalette.Red">
<item name="colorPrimary25">@color/red_primary_25</item>
<item name="colorPrimary50">@color/red_primary_50</item>
<item name="colorPrimary100">@color/red_primary_100</item>
<item name="colorPrimary200">@color/red_primary_200</item>
<item name="colorPrimary300">@color/red_primary_300</item>
<item name="colorPrimary400">@color/red_primary_400</item>
<item name="colorPrimary500">@color/red_primary_500</item>
<item name="colorPrimary600">@color/red_primary_600</item>
<item name="colorPrimary700">@color/red_primary_700</item>
<item name="colorPrimary800">@color/red_primary_800</item>
<item name="colorPrimary900">@color/red_primary_900</item>
<item name="colorGray900">@color/brownish_gray_900</item>
<item name="colorGray800t">@color/brownish_gray_800t</item>
<item name="colorGray800">@color/brownish_gray_800</item>
<item name="colorGray700">@color/brownish_gray_700</item>
<item name="colorGray600">@color/brownish_gray_600</item>
<item name="colorGray500">@color/brownish_gray_500</item>
<item name="colorGray400">@color/red_gray_400</item>
<item name="colorGray300">@color/red_gray_300</item>
<item name="colorGray200">@color/red_gray_200</item>
<item name="colorGray100">@color/red_gray_100</item>
<item name="colorGray50t">@color/red_gray_50t</item>
<item name="colorGray50">@color/red_gray_50</item>
<item name="colorGray25">@color/red_gray_25</item>
</style>
<style name="ColorPalette.Blueish">
<item name="colorPrimary25">@color/nord_primary_25</item>
<item name="colorPrimary50">@color/nord_primary_50</item>
<item name="colorPrimary100">@color/nord_primary_100</item>
<item name="colorPrimary200">@color/nord_primary_200</item>
<item name="colorPrimary300">@color/nord_primary_300</item>
<item name="colorPrimary400">@color/nord_primary_400</item>
<item name="colorPrimary500">@color/nord_primary_500</item>
<item name="colorPrimary600">@color/nord_primary_600</item>
<item name="colorPrimary700">@color/nord_primary_700</item>
<item name="colorPrimary800">@color/nord_primary_800</item>
<item name="colorPrimary900">@color/nord_primary_900</item>
<item name="colorGray900">@color/brownish_gray_900</item>
<item name="colorGray800t">@color/brownish_gray_800t</item>
<item name="colorGray800">@color/brownish_gray_800</item>
<item name="colorGray700">@color/brownish_gray_700</item>
<item name="colorGray600">@color/brownish_gray_600</item>
<item name="colorGray500">@color/brownish_gray_500</item>
<item name="colorGray400">@color/nord_gray_400</item>
<item name="colorGray300">@color/nord_gray_300</item>
<item name="colorGray200">@color/nord_gray_200</item>
<item name="colorGray100">@color/nord_gray_100</item>
<item name="colorGray50t">@color/nord_gray_50t</item>
<item name="colorGray50">@color/nord_gray_50</item>
<item name="colorGray25">@color/nord_gray_25</item>
</style>
</resources>

View File

@@ -2,7 +2,7 @@
<resources>
<string name="app_name" translatable="false">Moshidon</string>
<string name="get_started">Get started</string>
<string name="get_started">Create account</string>
<string name="already_have_account">I already have an account</string>
<string name="log_in">Log in</string>
<string name="next">Next</string>
@@ -398,17 +398,6 @@
<string name="remove_bookmark">Remove bookmark</string>
<string name="bookmarks">Bookmarks</string>
<string name="your_favorites">Your Favorites</string>
<string name="settings_always_reveal_content_warnings">Always reveal content warnings</string>
<string name="disable_marquee">Disable scrolling text in title bars</string>
<string name="settings_contribute_fork">Contribute to Moshidon</string>
<!-- <string name="settings_color_picker">Color theme:</string>-->
<!-- <string name="pink_color">Pink</string>-->
<!-- <string name="purple_color">Purple</string>-->
<!-- <string name="green_color">Green</string>-->
<!-- <string name="blue_color">Blue</string>-->
<!-- <string name="orange_color">Orange</string>-->
<!-- <string name="yellow_color">Yellow</string>-->
<string name="translate">Translate</string>
<string name="login_title">Welcome Back</string>
<string name="login_subtitle">Log in with the server where you created your account.</string>
<string name="server_url">Server URL</string>
@@ -433,9 +422,5 @@
<string name="not_accepting_new_members">Not accepting new members</string>
<string name="category_special_interests">Special Interests</string>
<string name="signup_passwords_dont_match">Passwords don\'t match</string>
<string name="post_language">Language: %s</string>
<string name="available_languages">Available languages</string>
<string name="language_name">%s (%s)</string>
<string name="clear_recent_languages">Clear recent languages</string>
<string name="confirm_clear_recent_languages">Are you sure you want to clear your recently used languages?</string>
<string name="loading_fediverse_resource_title">Looking it up on the Fediverse…</string>
</resources>

View File

@@ -1,65 +1,91 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="sk_app_name" translatable="false">Moshidon</string>
<string name="sk_pinned_posts">Pinned</string>
<string name="sk_delete_and_redraft">Delete and re-draft</string>
<string name="sk_confirm_delete_and_redraft_title">Delete and re-draft Post</string>
<string name="sk_confirm_delete_and_redraft">Are you sure you want to delete and re-draft this post?</string>
<string name="sk_pin_post">Pin to profile</string>
<string name="sk_confirm_pin_post_title">Pin post to profile</string>
<string name="sk_confirm_pin_post">Do you want to pin this post to your profile?</string>
<string name="sk_pinning">Pinning post…</string>
<string name="sk_unpin_post">Unpin from profile</string>
<string name="sk_confirm_unpin_post_title">Unpin post from profile</string>
<string name="sk_confirm_unpin_post">Are you sure you want to unpin this post?</string>
<string name="sk_unpinning">Unpinning post…</string>
<string name="sk_image_description">Image description</string>
<string name="sk_visibility_unlisted">Unlisted</string>
<string name="sk_settings_show_replies">Show replies</string>
<string name="sk_settings_show_boosts">Show boosts</string>
<string name="sk_settings_load_new_posts">Automatically load new posts</string>
<string name="sk_settings_show_interaction_counts">Show interaction counts</string>
<string name="sk_settings_app_version">Moshidon v%1$s (%2$d)</string>
<string name="sk_mark_media_as_sensitive">Mark media as sensitive</string>
<string name="sk_user_post_notifications_on">Turned on post notifications for %s</string>
<string name="sk_user_post_notifications_off">Turned off post notifications for %s</string>
<string name="sk_federated_timeline">Federation</string>
<string name="sk_federated_timeline_info_banner">These are the most recent posts by the people in your federation.</string>
<string name="sk_update_available">Moshidon %s is ready to download.</string>
<string name="sk_update_ready">Moshidon %s is downloaded and ready to install.</string>
<string name="sk_check_for_update">Check for update</string>
<string name="sk_no_update_available">No update available</string>
<string name="sk_list_timelines">Lists</string>
<string name="sk_follow_requests">Follow requests</string>
<string name="sk_accept_follow_request">Accept follow request</string>
<string name="sk_reject_follow_request">Reject follow request</string>
<string name="sk_lists_with_user">Lists with %s</string>
<string name="sk_settings_always_reveal_content_warnings">Always reveal content warnings</string>
<string name="sk_disable_marquee">Disable scrolling text in title bars</string>
<string name="sk_settings_contribute">Contribute to Moshidon</string>
<string name="sk_settings_show_federated_timeline">Show federated timeline</string>
<string name="sk_notification_type_status">Posts</string>
<string name="sk_notify_posts">Post notifications</string>
<string name="sk_settings_color_picker">Color theme</string>
<string name="sk_color_theme_pink">Pink</string>
<string name="sk_color_theme_purple">Purple</string>
<string name="sk_color_theme_green">Green</string>
<string name="sk_color_theme_blue">Blue</string>
<string name="sk_color_theme_brown">Orange</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_not_supported">Not supported on your device</string>
<string name="sk_poll_allow_multiple">Allow multiple choices</string>
<string name="sk_translate_post">Translate</string>
<string name="sk_translate_show_original">Show original</string>
<string name="sk_translated_using">Translated using %s</string>
<string name="sk_post_language">Language: %s</string>
<string name="sk_available_languages">Available languages</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_clear_recent_languages">Clear recent languages</string>
<string name="sk_confirm_clear_recent_languages">Are you sure you want to clear your recently used languages?</string>
<string name="sk_welcome_title">Welcome to Moshidon!</string>
<string name="sk_welcome_text">To get started, please enter your home instances domain name below.</string>
<string name="sk_example_domain">example.social</string>
</resources>
<string name="sk_app_name">Moshidon</string>
<string name="sk_pinned_posts">Pinned</string>
<string name="sk_delete_and_redraft">Delete and re-draft</string>
<string name="sk_confirm_delete_and_redraft_title">Delete and re-draft Post</string>
<string name="sk_confirm_delete_and_redraft">Are you sure you want to delete and re-draft this post?</string>
<string name="sk_pin_post">Pin to profile</string>
<string name="sk_confirm_pin_post_title">Pin post to profile</string>
<string name="sk_confirm_pin_post">Do you want to pin this post to your profile?</string>
<string name="sk_pinning">Pinning post…</string>
<string name="sk_unpin_post">Unpin from profile</string>
<string name="sk_confirm_unpin_post_title">Unpin post from profile</string>
<string name="sk_confirm_unpin_post">Are you sure you want to unpin this post?</string>
<string name="sk_unpinning">Unpinning post…</string>
<string name="sk_image_description">Image description</string>
<string name="sk_visibility_unlisted">Unlisted</string>
<string name="sk_settings_show_replies">Show replies</string>
<string name="sk_settings_show_boosts">Show boosts</string>
<string name="sk_settings_load_new_posts">Automatically load new posts</string>
<string name="sk_settings_show_interaction_counts">Show interaction counts</string>
<string name="sk_settings_app_version">Moshidon v%1$s (%2$d)</string>
<string name="sk_mark_media_as_sensitive">Mark media as sensitive</string>
<string name="sk_user_post_notifications_on">Turned on post notifications for %s</string>
<string name="sk_user_post_notifications_off">Turned off post notifications for %s</string>
<string name="sk_federated_timeline">Federation</string>
<string name="sk_federated_timeline_info_banner">These are the most recent posts by the people in your federation.</string>
<string name="sk_update_available">Moshidon %s is ready to download.</string>
<string name="sk_update_ready">Moshidon %s is downloaded and ready to install.</string>
<string name="sk_check_for_update">Check for update</string>
<string name="sk_no_update_available">No update available</string>
<string name="sk_list_timelines">Lists</string>
<string name="sk_follow_requests">Follow requests</string>
<string name="sk_accept_follow_request">Accept follow request</string>
<string name="sk_reject_follow_request">Reject follow request</string>
<string name="sk_lists_with_user">Lists with %s</string>
<string name="sk_settings_always_reveal_content_warnings">Always reveal content warnings</string>
<string name="sk_disable_marquee">Disable scrolling text in title bars</string>
<string name="sk_settings_contribute">Contribute to Moshidon</string>
<string name="sk_settings_show_federated_timeline">Show federated timeline</string>
<string name="sk_notification_type_status">Posts</string>
<string name="sk_notify_posts">Post notifications</string>
<string name="sk_settings_color_palette">Color palette</string>
<string name="sk_color_palette_material3">System</string>
<string name="sk_color_palette_pink">Pink</string>
<string name="sk_color_palette_purple">Purple</string>
<string name="sk_color_palette_green">Green</string>
<string name="sk_color_palette_blue">Blue</string>
<string name="sk_color_palette_brown">Brown</string>
<string name="sk_color_palette_red">Red</string>
<string name="sk_color_palette_yellow">Yellow</string>
<string name="sk_color_palette_nord">Nord</string>
<string name="sk_poll_allow_multiple">Allow multiple choices</string>
<string name="sk_translate_post">Translate</string>
<string name="sk_translate_show_original">Show original</string>
<string name="sk_translated_using">Translated using %s</string>
<string name="sk_post_language">Language: %s</string>
<string name="sk_available_languages">Available languages</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_clear_recent_languages">Clear recently used languages</string>
<string name="sk_confirm_clear_recent_languages">Are you sure you want to clear your recently used languages?</string>
<string name="sk_welcome_title">Welcome!</string>
<string name="sk_welcome_text">The shark salutes you! To get started, please enter your home instances domain name below.</string>
<string name="sk_example_domain">example.social</string>
<string name="sk_app_username" translatable="false">\@megalodon</string>
<string name="sk_tabs_disable_swipe">Disable swiping between tabs</string>
<string name="sk_settings_profile">Set up profile</string>
<string name="sk_settings_posting">Posting preferences</string>
<string name="sk_settings_filters">Configure filters</string>
<string name="sk_settings_auth">Security settings</string>
<string name="sk_settings_rules">Rules</string>
<string name="sk_settings_about">About the app</string>
<string name="sk_settings_donate">Donate</string>
<string name="sk_delete_notification">Delete notification</string>
<string name="sk_delete_notification_confirm_action">Delete notification</string>
<string name="sk_delete_notification_confirm">Are you sure you want to delete this notification?</string>
<string name="sk_clear_all_notifications">Clear all notifications</string>
<string name="sk_clear_all_notifications_confirm_action">Delete all</string>
<string name="sk_clear_all_notifications_confirm">Are you sure you want to clear all notifications\?</string>
<string name="sk_enable_delete_notifications">Enable deleting notifications</string>
<string name="sk_settings_publish_button_text">Publish button text</string>
<string name="sk_settings_publish_button_text_title">Customize Publish button text</string>
<string name="sk_settings_hide_translate_in_timeline">Hide translate button in timeline</string>
<string name="sk_settings_translation_availability_note_available">%s supports translation!</string>
<string name="sk_settings_translation_availability_note_unavailable">%s does not appear to support translation.</string>
<string name="sk_loading_fediverse_resource_title">Looking it up on the Fediverse…</string>
<string name="sk_undo_reblog">Undo reblog</string>
<string name="sk_reblog_with_visibility">Reblog with visibility</string>
<string name="sk_quote_post">Post about this</string>
<string name="sk_hashtags_you_follow">Hashtags you follow</string>
</resources>

View File

@@ -13,30 +13,31 @@
<item name="secondaryButtonStyle">@style/Widget.Mastodon.Button.Secondary_DarkOnLight</item>
<item name="primaryLargeButtonStyle">@style/Widget.Mastodon.Button.Large.Primary_DarkOnLight</item>
<item name="secondaryLargeButtonStyle">@style/Widget.Mastodon.Button.Large.Secondary_DarkOnLight</item>
<item name="android:colorAccent">@color/primary_700</item>
<item name="android:colorPrimary">@color/custom_gray_800</item>
<item name="android:colorBackground">@color/gray_100</item>
<item name="android:textColorPrimary">@color/custom_gray_800</item>
<item name="android:textColorSecondary">@color/custom_gray_500</item>
<item name="colorButtonText">@color/gray_50</item>
<item name="android:colorAccent">?colorPrimary700</item>
<item name="android:colorPrimary">?colorGray800</item>
<item name="android:colorBackground">?colorGray100</item>
<item name="android:textColorPrimary">?colorGray800</item>
<item name="android:textColorSecondary">?colorGray500</item>
<item name="colorButtonText">?colorGray50</item>
<item name="colorSecondary">#E9EDF2</item>
<item name="colorBackgroundLight">@color/gray_50</item>
<item name="colorBackgroundLightest">@color/gray_25</item>
<item name="colorBackgroundLight">?colorGray50</item>
<item name="colorBackgroundLightest">?colorGray25</item>
<item name="colorBackgroundPopup">?colorBackgroundLightest</item>
<item name="colorDarkIcon">@color/custom_gray_900</item>
<item name="colorDarkIcon">?colorGray900</item>
<item name="colorWindowBackground">@color/white</item>
<item name="android:statusBarColor">@color/gray_50</item>
<item name="android:navigationBarColor">@color/navigation_bar_bg</item>
<item name="android:statusBarColor">?colorGray50</item>
<item name="android:navigationBarColor">?android:statusBarColor</item>
<item name="android:actionBarTheme">@style/Theme.Mastodon.Toolbar</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert</item>
<item name="colorPollMostVoted">@color/primary_500</item>
<item name="colorPollVoted">@color/gray_300</item>
<item name="colorAccentLight">@color/primary_600</item>
<item name="colorSearchField">@color/gray_200</item>
<item name="colorSearchHint">@color/custom_gray_600</item>
<item name="colorTabInactive">@color/gray_400</item>
<item name="colorAccentLightest">@color/primary_100</item>
<item name="profileHeaderBackground">@color/custom_gray_500</item>
<item name="colorPollMostVoted">?colorPrimary500</item>
<item name="colorPollVoted">?colorGray300</item>
<item name="colorAccentLight">?colorPrimary600</item>
<item name="colorSearchField">?colorGray200</item>
<item name="colorSearchHint">?colorGray600</item>
<item name="colorTabInactive">?colorGray400</item>
<item name="colorAccentLightest">?colorPrimary100</item>
<item name="profileHeaderBackground">?colorGray500</item>
<item name="toolbarBackground">?colorGray50</item>
<item name="buttonBackground">@drawable/bg_button_primary_dark_on_light</item>
<item name="android:editTextBackground">@drawable/bg_edittext_light</item>
@@ -72,8 +73,27 @@
<item name="colorM3OnError">#FFF</item>
<item name="colorM3ErrorContainer">#F9DEDC</item>
<item name="colorM3OnErrorContainer">#410E0B</item>
<!-- colors for button_bg|text_primary|secondary_dark|light_on_light|dark.xml -->
<item name="colorButtonBackgroundPrimaryDarkOnLight">?colorGray800</item>
<item name="colorButtonBackgroundPrimaryDarkOnLightDisabled">?colorGray300</item>
<item name="colorButtonTextPrimaryDarkOnLight">?colorGray50</item>
<item name="colorButtonTextPrimaryDarkOnLightDisabled">?colorGray400</item>
<item name="colorButtonBackgroundPrimaryLightOnDark">?colorGray100</item>
<item name="colorButtonBackgroundPrimaryLightOnDarkDisabled">?colorGray500</item>
<item name="colorButtonTextPrimaryLightOnDark">?colorGray800</item>
<item name="colorButtonTextPrimaryLightOnDarkDisabled">?colorGray400</item>
<item name="colorButtonBackgroundSecondaryDarkOnLight">?colorGray25</item>
<item name="colorButtonBackgroundSecondaryDarkOnLightDisabled">?colorGray100</item>
<item name="colorButtonTextSecondaryDarkOnLight">?colorGray800</item>
<item name="colorButtonTextSecondaryDarkOnLightDisabled">?colorGray400</item>
<item name="colorButtonBackgroundSecondaryLightOnDark">?colorGray600</item>
<item name="colorButtonBackgroundSecondaryLightOnDarkDisabled">?colorGray300</item>
<item name="colorButtonTextSecondaryLightOnDark">?colorGray50</item>
<item name="colorButtonTextSecondaryLightOnDarkDisabled">?colorGray400</item>
</style>
<style name="Theme.Mastodon.Dark" parent="Theme.AppKit">
<!-- needed to disable scrim on API 29+ -->
<item name="android:enforceNavigationBarContrast" tools:ignore="NewApi">false</item>
@@ -87,32 +107,31 @@
<item name="secondaryButtonStyle">@style/Widget.Mastodon.Button.Secondary_LightOnDark</item>
<item name="primaryLargeButtonStyle">@style/Widget.Mastodon.Button.Large.Primary_LightOnDark</item>
<item name="secondaryLargeButtonStyle">@style/Widget.Mastodon.Button.Large.Secondary_LightOnDark</item>
<item name="android:colorAccent">@color/primary_400</item>
<item name="android:colorPrimary">@color/gray_50</item>
<item name="android:colorBackground">@color/custom_gray_700</item>
<item name="android:textColorPrimary">@color/gray_50</item>
<item name="android:textColorSecondary">@color/gray_400</item>
<item name="colorButtonText">@color/custom_gray_800</item>
<item name="android:colorAccent">?colorPrimary400</item>
<item name="android:colorPrimary">?colorGray50</item>
<item name="android:colorBackground">?colorGray700</item>
<item name="android:textColorPrimary">?colorGray50</item>
<item name="android:textColorSecondary">?colorGray400</item>
<item name="colorButtonText">?colorGray800</item>
<item name="colorSecondary">#E9EDF2</item>
<item name="colorBackgroundLight">@color/custom_gray_700</item>
<item name="colorBackgroundLightest">@color/custom_gray_900</item>
<item name="colorBackgroundLight">?colorGray700</item>
<item name="colorBackgroundLightest">?colorGray900</item>
<item name="colorBackgroundPopup">?colorBackgroundLightest</item>
<item name="colorDarkIcon">@color/gray_25</item>
<item name="colorWindowBackground">@color/custom_gray_800</item>
<item name="android:statusBarColor">@color/custom_gray_800</item>
<item name="android:navigationBarColor">@color/custom_gray_800</item>
<item name="colorDarkIcon">?colorGray25</item>
<item name="colorWindowBackground">?colorGray800</item>
<item name="android:statusBarColor">?colorGray800</item>
<item name="android:navigationBarColor">?android:statusBarColor</item>
<item name="android:actionBarTheme">@style/Theme.Mastodon.Toolbar.Dark</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Dark</item>
<item name="colorPollMostVoted">@color/primary_700</item>
<item name="colorPollVoted">@color/custom_gray_600</item>
<item name="colorAccentLight">@color/primary_600</item>
<item name="colorAccentLightest">@color/primary_800</item>
<item name="colorTabInactive">@color/gray_400</item>
<item name="colorPollMostVoted">?colorPrimary700</item>
<item name="colorPollVoted">?colorGray600</item>
<item name="colorAccentLight">?colorPrimary600</item>
<item name="colorAccentLightest">?colorPrimary800</item>
<item name="colorTabInactive">?colorGray400</item>
<item name="profileHeaderBackground">?colorWindowBackground</item>
<!-- TODO dark colors -->
<item name="colorSearchField">@color/custom_gray_700</item>
<item name="colorSearchHint">@color/gray_300</item>
<item name="colorSearchField">?colorGray700</item>
<item name="colorSearchHint">?colorGray300</item>
<item name="toolbarBackground">?colorGray800</item>
<item name="buttonBackground">@drawable/bg_button_primary_light_on_dark</item>
<item name="android:editTextBackground">@drawable/bg_edittext_dark</item>
@@ -148,6 +167,24 @@
<item name="colorM3OnError">#601410</item>
<item name="colorM3ErrorContainer">#8C1D18</item>
<item name="colorM3OnErrorContainer">#F9DEDC</item>
<!-- colors for button_bg|text_primary|secondary_dark|light_on_light|dark.xml -->
<item name="colorButtonBackgroundPrimaryDarkOnLight">?colorGray800</item>
<item name="colorButtonBackgroundPrimaryDarkOnLightDisabled">?colorGray300</item>
<item name="colorButtonTextPrimaryDarkOnLight">?colorGray50</item>
<item name="colorButtonTextPrimaryDarkOnLightDisabled">?colorGray400</item>
<item name="colorButtonBackgroundPrimaryLightOnDark">?colorGray100</item>
<item name="colorButtonBackgroundPrimaryLightOnDarkDisabled">?colorGray500</item>
<item name="colorButtonTextPrimaryLightOnDark">?colorGray800</item>
<item name="colorButtonTextPrimaryLightOnDarkDisabled">?colorGray400</item>
<item name="colorButtonBackgroundSecondaryDarkOnLight">?colorGray25</item>
<item name="colorButtonBackgroundSecondaryDarkOnLightDisabled">?colorGray100</item>
<item name="colorButtonTextSecondaryDarkOnLight">?colorGray800</item>
<item name="colorButtonTextSecondaryDarkOnLightDisabled">?colorGray400</item>
<item name="colorButtonBackgroundSecondaryLightOnDark">?colorGray600</item>
<item name="colorButtonBackgroundSecondaryLightOnDarkDisabled">?colorGray300</item>
<item name="colorButtonTextSecondaryLightOnDark">?colorGray50</item>
<item name="colorButtonTextSecondaryLightOnDarkDisabled">?colorGray400</item>
</style>
<style name="Theme.Mastodon.Dark.TrueBlack">
@@ -157,708 +194,31 @@
<item name="android:actionBarTheme">@style/Theme.Mastodon.Toolbar.Dark.TrueBlack</item>
<item name="colorBackgroundLight">@color/black</item>
<item name="colorButtonText">@color/black</item>
<item name="colorPollVoted">@color/custom_gray_800</item>
<item name="colorSearchField">@color/custom_gray_900</item>
<item name="colorPollVoted">?colorGray700</item>
<item name="colorSearchField">?colorGray900</item>
<item name="colorBackgroundLightest">@color/black</item>
<item name="colorBackgroundPopup">@color/custom_gray_900</item>
<item name="colorBackgroundPopup">?colorGray900</item>
<item name="colorWindowBackground">@color/black</item>
<item name="colorM3Background">#000</item>
<!-- <item name="colorButtonBackgroundPrimaryLightOnDarkDisabled">?colorGray900</item>-->
</style>
<style name="Theme.Mastodon.AutoLightDark" parent="Theme.Mastodon.Light"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack" parent="Theme.Mastodon.Light"/>
<style name="Theme.Mastodon.Light.CustomBase" parent="Theme.Mastodon.Light">
<!-- needed to disable scrim on API 29+ -->
<item name="android:colorPrimary">@color/custom_gray_800</item>
<item name="android:textColorPrimary">@color/custom_gray_800</item>
<item name="android:textColorSecondary">@color/custom_gray_500</item>
<item name="colorDarkIcon">@color/custom_gray_900</item>
<item name="colorSearchHint">@color/custom_gray_600</item>
<item name="profileHeaderBackground">@color/custom_gray_500</item>
</style>
<style name="Theme.Mastodon.Dark.CustomBase" parent="Theme.Mastodon.Dark">
<!-- needed to disable scrim on API 29+ -->
<item name="android:colorBackground">@color/custom_gray_700</item>
<item name="colorButtonText">@color/custom_gray_800</item>
<item name="colorBackgroundLight">@color/custom_gray_700</item>
<item name="colorBackgroundLightest">@color/custom_gray_900</item>
<item name="colorBackgroundPopup">@color/custom_gray_900</item>
<item name="colorDarkIcon">@color/gray_25</item>
<item name="colorWindowBackground">@color/custom_gray_800</item>
<item name="android:statusBarColor">@color/custom_gray_800</item>
<item name="android:navigationBarColor">@color/custom_gray_800</item>
<item name="colorPollVoted">@color/custom_gray_600</item>
<item name="profileHeaderBackground">?colorWindowBackground</item>
<item name="android:actionBarTheme">@style/Theme.Mastodon.Toolbar.Dark.CustomBase</item>
<!-- TODO dark colors -->
<item name="colorSearchField">@color/custom_gray_700</item>
</style>
<style name="Theme.Mastodon.Dark.TrueBlack.CustomBase">
<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.Light.Material3" parent="Theme.Mastodon.Light.CustomBase">
<!-- needed to disable scrim on API 29+ -->
<item name="android:colorPrimary">@color/m3_gray_800</item>
<item name="android:textColorPrimary">@color/m3_gray_800</item>
<item name="android:textColorSecondary">@color/m3_gray_500</item>
<item name="colorDarkIcon">@color/m3_gray_900</item>
<item name="colorSearchHint">@color/m3_gray_600</item>
<item name="profileHeaderBackground">@color/m3_gray_500</item>
<item name="android:colorAccent">@color/m3_primary_700</item>
<item name="android:colorBackground">@color/m3_gray_100</item>
<item name="colorButtonText">@color/m3_gray_50</item>
<item name="colorBackgroundLight">@color/m3_gray_50</item>
<item name="colorBackgroundLightest">@color/m3_gray_25</item>
<item name="android:statusBarColor">@color/m3_gray_50</item>
<item name="android:navigationBarColor">@color/m3_navigation_bar_bg</item>
<item name="android:actionBarTheme">@style/Theme.Mastodon.Toolbar.M3</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.M3</item>
<item name="colorPollMostVoted">@color/m3_primary_500</item>
<item name="colorPollVoted">@color/m3_gray_300</item>
<item name="colorAccentLight">@color/m3_primary_600</item>
<item name="colorSearchField">@color/m3_gray_200</item>
<item name="colorTabInactive">@color/m3_gray_400</item>
<item name="colorAccentLightest">@color/m3_primary_100</item>
<item name="colorSecondary">@color/m3_gray_50</item>
</style>
<style name="Theme.Mastodon.Dark.Material3" parent="Theme.Mastodon.Dark.CustomBase">
<!-- needed to disable scrim on API 29+ -->
<item name="android:colorBackground">@color/m3_gray_800</item>
<item name="colorButtonText">@color/m3_gray_900</item>
<item name="colorBackgroundLight">@color/m3_gray_800</item>
<item name="colorBackgroundLightest">@color/m3_gray_900</item>
<item name="colorBackgroundPopup">@color/m3_gray_900</item>
<item name="colorDarkIcon">@color/m3_gray_25</item>
<item name="colorWindowBackground">@color/m3_gray_900</item>
<item name="android:statusBarColor">@color/m3_gray_900</item>
<item name="android:navigationBarColor">@color/m3_gray_900</item>
<item name="colorPollVoted">@color/m3_gray_700</item>
<item name="profileHeaderBackground">?colorWindowBackground</item>
<item name="android:actionBarTheme">@style/Theme.Mastodon.Toolbar.Dark.Material3</item>
<item name="android:colorAccent">@color/m3_primary_400</item>
<item name="android:colorPrimary">@color/m3_gray_50</item>
<item name="android:textColorPrimary">@color/m3_gray_50</item>
<item name="android:textColorSecondary">@color/m3_gray_400</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Dark.M3</item>
<item name="colorPollMostVoted">@color/m3_primary_700</item>
<item name="colorAccentLight">@color/m3_primary_600</item>
<item name="colorAccentLightest">@color/m3_primary_800</item>
<item name="colorTabInactive">@color/m3_gray_400</item>
<item name="colorSearchHint">@color/m3_gray_300</item>
<item name="colorSecondary">@color/m3_gray_50</item>
<!-- TODO dark colors -->
<item name="colorSearchField">@color/m3_gray_700</item>
</style>
<style name="Theme.Mastodon.Dark.TrueBlack.Material3" parent="Theme.Mastodon.Dark.Material3">
<item name="android:colorAccent">@color/m3_primary_400</item>
<item name="colorPollMostVoted">@color/m3_primary_700</item>
<item name="colorAccentLight">@color/m3_primary_600</item>
<item name="colorAccentLightest">@color/m3_primary_800</item>
<item name="colorSecondary">@color/m3_gray_50</item>
<item name="colorPollVoted">@color/m3_gray_800</item>
<item name="colorSearchField">@color/m3_gray_900</item>
<item name="colorBackgroundPopup">@color/m3_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.Material3" parent="Theme.Mastodon.Light.Material3"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Material3" parent="Theme.Mastodon.Light.Material3"/>
<style name="Theme.Mastodon.Dialog.Alert.Dark.M3" 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/m3_primary_600</item>
<item name="android:colorPrimary">@color/m3_gray_50</item>
<item name="android:colorBackground">@color/m3_gray_700</item>
<item name="android:textColorPrimary">@color/m3_gray_50</item>
<item name="android:textColorSecondary">@color/m3_gray_400</item>
</style>
<style name="Theme.Mastodon.Dialog.Alert.M3" 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/m3_primary_700</item>
<item name="android:colorPrimary">@color/m3_gray_800</item>
<item name="android:colorBackground">@color/m3_gray_100</item>
<item name="android:textColorPrimary">@color/m3_gray_800</item>
<item name="android:textColorSecondary">@color/m3_gray_500</item>
</style>
<style name="Theme.Mastodon.Toolbar.M3" parent="android:ThemeOverlay.Material.ActionBar">
<item name="android:colorPrimary">@color/m3_gray_50</item>
<item name="android:textColorPrimary">@color/m3_gray_800</item>
<item name="android:textColorSecondary">@color/m3_gray_800</item>
</style>
<style name="Theme.Mastodon.Light.Green" parent="Theme.Mastodon.Light.CustomBase">
<item name="android:colorAccent">@color/green_primary_700</item>
<item name="android:colorBackground">@color/green_gray_100</item>
<item name="colorButtonText">@color/green_gray_50</item>
<item name="colorBackgroundLight">@color/green_gray_50</item>
<item name="colorBackgroundLightest">@color/green_gray_25</item>
<item name="android:statusBarColor">@color/green_gray_50</item>
<item name="android:navigationBarColor">@color/green_navigation_bar_bg</item>
<item name="android:actionBarTheme">@style/Theme.Mastodon.Toolbar.Green</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Green</item>
<item name="colorPollMostVoted">@color/green_primary_500</item>
<item name="colorPollVoted">@color/green_gray_300</item>
<item name="colorAccentLight">@color/green_primary_600</item>
<item name="colorSearchField">@color/green_gray_200</item>
<item name="colorTabInactive">@color/green_gray_400</item>
<item name="colorAccentLightest">@color/green_primary_100</item>
<item name="colorSecondary">@color/green_gray_50</item>
</style>
<style name="Theme.Mastodon.Dark.Green" parent="Theme.Mastodon.Dark.CustomBase">
<item name="android:colorAccent">@color/green_primary_400</item>
<item name="android:colorPrimary">@color/green_gray_50</item>
<item name="android:textColorPrimary">@color/green_gray_50</item>
<item name="android:textColorSecondary">@color/green_gray_400</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Dark.Green</item>
<item name="colorPollMostVoted">@color/green_primary_700</item>
<item name="colorAccentLight">@color/green_primary_600</item>
<item name="colorAccentLightest">@color/green_primary_800</item>
<item name="colorTabInactive">@color/green_gray_400</item>
<item name="colorSearchHint">@color/green_gray_300</item>
<item name="colorSecondary">@color/green_gray_50</item>
</style>
<style name="Theme.Mastodon.Dark.TrueBlack.Green" parent="Theme.Mastodon.Dark.Green">
<item name="android:colorAccent">@color/green_primary_400</item>
<item name="colorPollMostVoted">@color/green_primary_700</item>
<item name="colorAccentLight">@color/green_primary_600</item>
<item name="colorAccentLightest">@color/green_primary_800</item>
<item name="colorSecondary">@color/green_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.Green" parent="Theme.Mastodon.Light.Green"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Green" parent="Theme.Mastodon.Light.Green"/>
<style name="Theme.Mastodon.Dialog.Alert.Dark.Green" 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/green_primary_600</item>
<item name="android:colorPrimary">@color/green_gray_50</item>
<item name="android:colorBackground">@color/custom_gray_700</item>
<item name="android:textColorPrimary">@color/green_gray_50</item>
<item name="android:textColorSecondary">@color/green_gray_400</item>
</style>
<style name="Theme.Mastodon.Dialog.Alert.Green" 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/green_primary_700</item>
<item name="android:colorPrimary">@color/custom_gray_800</item>
<item name="android:colorBackground">@color/green_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.Green" parent="android:ThemeOverlay.Material.ActionBar">
<item name="android:colorPrimary">@color/green_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.Light.Blue" parent="Theme.Mastodon.Light.CustomBase">
<item name="android:colorAccent">@color/blue_primary_700</item>
<item name="android:colorBackground">@color/blue_gray_100</item>
<item name="colorButtonText">@color/blue_gray_50</item>
<item name="colorBackgroundLight">@color/blue_gray_50</item>
<item name="colorBackgroundLightest">@color/blue_gray_25</item>
<item name="android:statusBarColor">@color/blue_gray_50</item>
<item name="android:navigationBarColor">@color/blue_navigation_bar_bg</item>
<item name="android:actionBarTheme">@style/Theme.Mastodon.Toolbar.Blue</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Blue</item>
<item name="colorPollMostVoted">@color/blue_primary_500</item>
<item name="colorPollVoted">@color/blue_gray_300</item>
<item name="colorAccentLight">@color/blue_primary_600</item>
<item name="colorSearchField">@color/blue_gray_200</item>
<item name="colorTabInactive">@color/blue_gray_400</item>
<item name="colorAccentLightest">@color/blue_primary_100</item>
<item name="colorSecondary">@color/blue_gray_50</item>
</style>
<style name="Theme.Mastodon.Dark.Blue" parent="Theme.Mastodon.Dark.CustomBase">
<item name="android:colorAccent">@color/blue_primary_400</item>
<item name="android:colorPrimary">@color/blue_gray_50</item>
<item name="android:textColorPrimary">@color/blue_gray_50</item>
<item name="android:textColorSecondary">@color/blue_gray_400</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Dark.Blue</item>
<item name="colorPollMostVoted">@color/blue_primary_700</item>
<item name="colorAccentLight">@color/blue_primary_600</item>
<item name="colorAccentLightest">@color/blue_primary_800</item>
<item name="colorTabInactive">@color/blue_gray_400</item>
<item name="colorSearchHint">@color/blue_gray_300</item>
<item name="colorSecondary">@color/blue_gray_50</item>
</style>
<style name="Theme.Mastodon.Dark.TrueBlack.Blue" parent="Theme.Mastodon.Dark.Blue">
<item name="android:colorAccent">@color/blue_primary_400</item>
<item name="colorPollMostVoted">@color/blue_primary_700</item>
<item name="colorAccentLight">@color/blue_primary_600</item>
<item name="colorAccentLightest">@color/blue_primary_800</item>
<item name="colorSecondary">@color/blue_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.Blue" parent="Theme.Mastodon.Light.Blue"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Blue" parent="Theme.Mastodon.Light.Blue"/>
<style name="Theme.Mastodon.Dialog.Alert.Dark.Blue" 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/blue_primary_600</item>
<item name="android:colorPrimary">@color/blue_gray_50</item>
<item name="android:colorBackground">@color/custom_gray_700</item>
<item name="android:textColorPrimary">@color/blue_gray_50</item>
<item name="android:textColorSecondary">@color/blue_gray_400</item>
</style>
<style name="Theme.Mastodon.Dialog.Alert.Blue" 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/blue_primary_700</item>
<item name="android:colorPrimary">@color/custom_gray_800</item>
<item name="android:colorBackground">@color/blue_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.Blue" parent="android:ThemeOverlay.Material.ActionBar">
<item name="android:colorPrimary">@color/blue_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.Light.Orange" parent="Theme.Mastodon.Light.CustomBase">
<item name="android:colorAccent">@color/orange_primary_700</item>
<item name="android:colorBackground">@color/orange_gray_100</item>
<item name="colorButtonText">@color/orange_gray_50</item>
<item name="colorBackgroundLight">@color/orange_gray_50</item>
<item name="colorBackgroundLightest">@color/orange_gray_25</item>
<item name="android:statusBarColor">@color/orange_gray_50</item>
<item name="android:navigationBarColor">@color/orange_navigation_bar_bg</item>
<item name="android:actionBarTheme">@style/Theme.Mastodon.Toolbar.Orange</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Orange</item>
<item name="colorPollMostVoted">@color/orange_primary_500</item>
<item name="colorPollVoted">@color/orange_gray_300</item>
<item name="colorAccentLight">@color/orange_primary_600</item>
<item name="colorSearchField">@color/orange_gray_200</item>
<item name="colorTabInactive">@color/orange_gray_400</item>
<item name="colorAccentLightest">@color/orange_primary_100</item>
<item name="colorSecondary">@color/orange_gray_50</item>
</style>
<style name="Theme.Mastodon.Dark.Orange" parent="Theme.Mastodon.Dark.CustomBase">
<item name="android:colorAccent">@color/orange_primary_400</item>
<item name="android:colorPrimary">@color/orange_gray_50</item>
<item name="android:textColorPrimary">@color/orange_gray_50</item>
<item name="android:textColorSecondary">@color/orange_gray_400</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Dark.Orange</item>
<item name="colorPollMostVoted">@color/orange_primary_700</item>
<item name="colorAccentLight">@color/orange_primary_600</item>
<item name="colorAccentLightest">@color/orange_primary_800</item>
<item name="colorTabInactive">@color/orange_gray_400</item>
<item name="colorSearchHint">@color/orange_gray_300</item>
<item name="colorSecondary">@color/orange_gray_50</item>
</style>
<style name="Theme.Mastodon.Dark.TrueBlack.Orange" parent="Theme.Mastodon.Dark.Orange">
<item name="android:colorAccent">@color/orange_primary_400</item>
<item name="colorPollMostVoted">@color/orange_primary_700</item>
<item name="colorAccentLight">@color/orange_primary_600</item>
<item name="colorAccentLightest">@color/orange_primary_800</item>
<item name="colorSecondary">@color/orange_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.Orange" parent="Theme.Mastodon.Light.Orange"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Orange" parent="Theme.Mastodon.Light.Orange"/>
<style name="Theme.Mastodon.Dialog.Alert.Dark.Orange" 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/orange_primary_600</item>
<item name="android:colorPrimary">@color/orange_gray_50</item>
<item name="android:colorBackground">@color/custom_gray_700</item>
<item name="android:textColorPrimary">@color/orange_gray_50</item>
<item name="android:textColorSecondary">@color/orange_gray_400</item>
</style>
<style name="Theme.Mastodon.Dialog.Alert.Orange" 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/orange_primary_700</item>
<item name="android:colorPrimary">@color/custom_gray_800</item>
<item name="android:colorBackground">@color/orange_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.Orange" parent="android:ThemeOverlay.Material.ActionBar">
<item name="android:colorPrimary">@color/orange_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.Light.Yellow" parent="Theme.Mastodon.Light.CustomBase">
<item name="android:colorAccent">@color/yellow_primary_700</item>
<item name="android:colorBackground">@color/yellow_gray_100</item>
<item name="colorButtonText">@color/yellow_gray_50</item>
<item name="colorBackgroundLight">@color/yellow_gray_50</item>
<item name="colorBackgroundLightest">@color/yellow_gray_25</item>
<item name="android:statusBarColor">@color/yellow_gray_50</item>
<item name="android:navigationBarColor">@color/yellow_navigation_bar_bg</item>
<item name="android:actionBarTheme">@style/Theme.Mastodon.Toolbar.Yellow</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Yellow</item>
<item name="colorPollMostVoted">@color/yellow_primary_500</item>
<item name="colorPollVoted">@color/yellow_gray_300</item>
<item name="colorAccentLight">@color/yellow_primary_600</item>
<item name="colorSearchField">@color/yellow_gray_200</item>
<item name="colorTabInactive">@color/yellow_gray_400</item>
<item name="colorAccentLightest">@color/yellow_primary_100</item>
<item name="colorSecondary">@color/yellow_gray_50</item>
</style>
<style name="Theme.Mastodon.Dark.Yellow" parent="Theme.Mastodon.Dark.CustomBase">
<item name="android:colorAccent">@color/yellow_primary_400</item>
<item name="android:colorPrimary">@color/yellow_gray_50</item>
<item name="android:textColorPrimary">@color/yellow_gray_50</item>
<item name="android:textColorSecondary">@color/yellow_gray_400</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Dark.Yellow</item>
<item name="colorPollMostVoted">@color/yellow_primary_700</item>
<item name="colorAccentLight">@color/yellow_primary_600</item>
<item name="colorAccentLightest">@color/yellow_primary_800</item>
<item name="colorTabInactive">@color/yellow_gray_400</item>
<item name="colorSearchHint">@color/yellow_gray_300</item>
<item name="colorSecondary">@color/yellow_gray_50</item>
</style>
<style name="Theme.Mastodon.Dark.TrueBlack.Yellow" parent="Theme.Mastodon.Dark.Yellow">
<item name="android:colorAccent">@color/yellow_primary_400</item>
<item name="colorPollMostVoted">@color/yellow_primary_700</item>
<item name="colorAccentLight">@color/yellow_primary_600</item>
<item name="colorAccentLightest">@color/yellow_primary_800</item>
<item name="colorSecondary">@color/yellow_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.Yellow" parent="Theme.Mastodon.Light.Yellow"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Yellow" parent="Theme.Mastodon.Light.Yellow"/>
<style name="Theme.Mastodon.Dialog.Alert.Dark.Yellow" 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/yellow_primary_600</item>
<item name="android:colorPrimary">@color/yellow_gray_50</item>
<item name="android:colorBackground">@color/custom_gray_700</item>
<item name="android:textColorPrimary">@color/yellow_gray_50</item>
<item name="android:textColorSecondary">@color/yellow_gray_400</item>
</style>
<style name="Theme.Mastodon.Dialog.Alert.Yellow" 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/yellow_primary_700</item>
<item name="android:colorPrimary">@color/custom_gray_800</item>
<item name="android:colorBackground">@color/yellow_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.Yellow" parent="android:ThemeOverlay.Material.ActionBar">
<item name="android:colorPrimary">@color/yellow_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.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">
<item name="android:colorAccent">@color/original_primary_400</item>
<item name="colorPollMostVoted">@color/original_primary_700</item>
<item name="colorAccentLight">@color/original_primary_600</item>
<item name="colorAccentLightest">@color/original_primary_800</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Dark.Original</item>
</style>
<style name="Theme.Mastodon.Dark.TrueBlack.Original" parent="Theme.Mastodon.Dark.TrueBlack">
<item name="android:colorAccent">@color/original_primary_400</item>
<item name="colorPollMostVoted">@color/original_primary_700</item>
<item name="colorAccentLight">@color/original_primary_600</item>
<item name="colorAccentLightest">@color/original_primary_800</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Dark.Original</item>
</style>
<style name="Theme.Mastodon.Light.Original" parent="Theme.Mastodon.Light">
<item name="android:colorAccent">@color/original_primary_400</item>
<item name="colorPollMostVoted">@color/original_primary_700</item>
<item name="colorAccentLight">@color/original_primary_600</item>
<item name="colorAccentLightest">@color/original_primary_800</item>
<item name="android:alertDialogTheme">@style/Theme.Mastodon.Dialog.Alert.Original</item>
</style>
<style name="Theme.Mastodon.AutoLightDark.Original" parent="Theme.Mastodon.Light.Original"/>
<style name="Theme.Mastodon.AutoLightDark.TrueBlack.Original" parent="Theme.Mastodon.Light.Original"/>
<style name="Theme.Mastodon.Dialog.Alert.Dark.Original" 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/original_primary_600</item>
<item name="android:colorPrimary">@color/gray_50</item>
<item name="android:colorBackground">@color/custom_gray_700</item>
<item name="android:textColorPrimary">@color/gray_50</item>
<item name="android:textColorSecondary">@color/gray_400</item>
</style>
<style name="Theme.Mastodon.Dialog.Alert.Original" 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/original_primary_700</item>
<item name="android:colorPrimary">@color/custom_gray_800</item>
<item name="android:colorBackground">@color/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" parent="android:ThemeOverlay.Material.ActionBar">
<item name="android:colorPrimary">@color/gray_50</item>
<item name="android:textColorPrimary">@color/custom_gray_800</item>
<item name="android:textColorSecondary">@color/custom_gray_800</item>
<item name="android:colorPrimary">?toolbarBackground</item>
<item name="android:toolbarStyle">@style/Widget.Mastodon.Toolbar</item>
<item name="android:textColorPrimary">?colorGray800</item>
<item name="android:textColorSecondary">?colorGray800</item>
</style>
<style name="Theme.Mastodon.Toolbar.Dark" parent="android:ThemeOverlay.Material.Dark.ActionBar">
<item name="android:colorPrimary">@color/custom_gray_800</item>
<item name="android:textColorPrimary">@color/gray_50</item>
<item name="android:textColorSecondary">@color/gray_50</item>
</style>
<style name="Theme.Mastodon.Toolbar.Dark.CustomBase" parent="android:ThemeOverlay.Material.Dark.ActionBar">
<item name="android:colorPrimary">@color/custom_gray_800</item>
<item name="android:textColorPrimary">@color/gray_50</item>
<item name="android:textColorSecondary">@color/gray_50</item>
</style>
<style name="Theme.Mastodon.Toolbar.Dark.Material3" parent="android:ThemeOverlay.Material.Dark.ActionBar">
<item name="android:colorPrimary">@color/m3_gray_900</item>
<item name="android:textColorPrimary">@color/m3_gray_50</item>
<item name="android:textColorSecondary">@color/m3_gray_50</item>
<item name="android:colorPrimary">?toolbarBackground</item>
<item name="android:textColorPrimary">?colorGray50</item>
<item name="android:textColorSecondary">?colorGray50</item>
<item name="android:toolbarStyle">@style/Widget.Mastodon.Toolbar</item>
</style>
<style name="Theme.Mastodon.Toolbar.Dark.TrueBlack" parent="android:ThemeOverlay.Material.Dark.ActionBar">
@@ -866,14 +226,14 @@
</style>
<style name="Theme.Mastodon.Toolbar.Profile">
<item name="android:textColorPrimary">?android:colorPrimary</item>
<item name="android:textColorSecondary">?android:colorPrimary</item>
<item name="android:drawableTint">?android:colorPrimary</item>
<item name="android:textColorPrimary">?colorGray25</item>
<item name="android:textColorSecondary">?colorGray25</item>
<item name="android:drawableTint">?colorGray25</item>
<item name="android:popupTheme">?android:actionBarTheme</item>
<item name="android:titleTextAppearance">@style/m3_title_medium</item>
<item name="android:titleTextColor">?android:colorPrimary</item>
<item name="android:titleTextColor">?colorGray25</item>
<item name="android:subtitleTextAppearance">@style/m3_body_medium</item>
<item name="android:subtitleTextColor">?android:colorPrimary</item>
<item name="android:subtitleTextColor">?colorGray25</item>
</style>
<style name="Widget.Mastodon.Button" parent="android:Widget.Material.Button">
@@ -945,11 +305,11 @@
<item name="android:buttonBarButtonStyle">@style/Widget.Mastodon.ButtonBarButton</item>
<!-- colors -->
<item name="android:colorAccent">@color/primary_700</item>
<item name="android:colorPrimary">@color/custom_gray_800</item>
<item name="android:colorBackground">@color/gray_100</item>
<item name="android:textColorPrimary">@color/custom_gray_800</item>
<item name="android:textColorSecondary">@color/custom_gray_500</item>
<item name="android:colorAccent">?colorPrimary700</item>
<item name="android:colorPrimary">?colorGray800</item>
<item name="android:colorBackground">?colorGray100</item>
<item name="android:textColorPrimary">?colorGray800</item>
<item name="android:textColorSecondary">?colorGray500</item>
</style>
<style name="Theme.Mastodon.Dialog.Alert.Dark" parent="android:Theme.Material.Dialog.Alert">
@@ -959,11 +319,11 @@
<item name="android:buttonBarButtonStyle">@style/Widget.Mastodon.ButtonBarButton</item>
<!-- colors -->
<item name="android:colorAccent">@color/primary_600</item>
<item name="android:colorPrimary">@color/gray_50</item>
<item name="android:colorBackground">@color/custom_gray_700</item>
<item name="android:textColorPrimary">@color/gray_50</item>
<item name="android:textColorSecondary">@color/gray_400</item>
<item name="android:colorAccent">?colorPrimary600</item>
<item name="android:colorPrimary">?colorGray50</item>
<item name="android:colorBackground">?colorGray700</item>
<item name="android:textColorPrimary">?colorGray50</item>
<item name="android:textColorSecondary">?colorGray400</item>
</style>
<style name="Widget.Mastodon.ButtonBarButton" parent="android:Widget.Material.Button.Borderless">

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

@@ -9,3 +9,7 @@ Megalodon은 <a href="https://github.com/mastodon/mastodon-android">공식 마
- <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>Linha do tempo federada</b>: Veja todas as postagens públicas de pessoas em todo o Fediverso que sua instância 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>Fixando postagens</b>: Fixe suas postagens mais importantes em seu perfil e veja o que outras pessoas fixaram usando a guia "Fixado".
- <b>Seguir hashtags</b>: Veja novas postagens de hashtags específicas diretamente em sua linha do tempo inicial seguindo-as.
- <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>Excluir e reescrever</b>: O recurso muito amado que tornou a edição possível sem uma função de edição real.
- <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 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 imagens</b>: Verifique rapidamente se uma imagem ou vídeo tem um texto alt anexado a ele.
- <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 novos posts de hashtags específicos diretamente em sua linha de tempo de casa, seguindo-os.
- <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>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

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