Merge remote-tracking branch 'megalodon_main/main'

# Conflicts:
#	mastodon/build.gradle
#	mastodon/src/github/AndroidManifest.xml
#	mastodon/src/main/res/values-de-rDE/strings_sk.xml
#	mastodon/src/main/res/values-es-rES/strings_sk.xml
#	mastodon/src/main/res/values-eu-rES/strings_sk.xml
#	mastodon/src/main/res/values-ko-rKR/strings_sk.xml
#	mastodon/src/main/res/values-pl-rPL/strings_sk.xml
#	mastodon/src/main/res/values-uk-rUA/strings_sk.xml
#	metadata/es/changelogs/83.txt
#	metadata/fr/short_description.txt
#	metadata/gl-ES/changelogs/83.txt
This commit is contained in:
LucasGGamerM 2023-04-22 13:53:50 -03:00
commit 5b391b44d3
41 changed files with 319 additions and 221 deletions

View File

@ -0,0 +1,11 @@
name: Validate Gradle Wrapper
on: [pull_request, push]
jobs:
validation:
name: Validation
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: gradle/wrapper-validation-action@v1

View File

@ -5,7 +5,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.3.1'
classpath 'com.android.tools.build:gradle:8.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}

View File

@ -17,3 +17,6 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=false
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=true
android.nonFinalResIds=false

Binary file not shown.

View File

@ -1,6 +1,7 @@
#Thu Jan 13 11:33:43 MSK 2022
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
distributionSha256Sum=e111cb9948407e26351227dabce49822fb88c37ee72f1d1582a69c68af2e702f
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

288
gradlew vendored
View File

@ -1,7 +1,7 @@
#!/usr/bin/env sh
#!/bin/sh
#
# Copyright 2015 the original author or authors.
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@ -17,67 +17,98 @@
#
##############################################################################
##
## Gradle start up script for UN*X
##
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
MAX_FD=maximum
warn () {
echo "$*"
}
} >&2
die () {
echo
echo "$*"
echo
exit 1
}
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@ -87,9 +118,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@ -98,7 +129,7 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
@ -106,80 +137,109 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"

11
gradlew.bat vendored
View File

@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal

View File

@ -2,6 +2,12 @@ plugins {
id 'com.android.application'
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
android {
compileSdk 33
defaultConfig {
@ -13,7 +19,7 @@ android {
versionCode 99
versionName "1.2.0+fork.99.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"
resourceConfigurations += ['ar-rSA', 'ar-rDZ', 'be-rBY', 'bn-rBD', 'bs-rBA', 'ca-rES', 'cs-rCZ', 'da-rDK', 'de-rDE', 'el-rGR', 'es-rES', 'eu-rES', 'fa-rIR', 'fi-rFI', 'fil-rPH', 'fr-rFR', 'ga-rIE', 'gd-rGB', 'gl-rES', 'hi-rIN', 'hr-rHR', 'hu-rHU', 'hy-rAM', 'ig-rNG', 'in-rID', 'is-rIS', 'it-rIT', 'iw-rIL', 'ja-rJP', 'kab', 'ko-rKR', 'my-rMM', 'nl-rNL', 'no-rNO', 'oc-rFR', 'pl-rPL', 'pt-rBR', 'pt-rPT', 'ro-rRO', 'ru-rRU', 'si-rLK', 'sl-rSI', 'sv-rSE', 'th-rTH', 'tr-rTR', 'uk-rUA', 'ur-rIN', 'vi-rVN', 'zh-rCN', 'zh-rTW']
}
signingConfigs {
@ -88,14 +94,19 @@ android {
setRoot "src/github"
}
}
lintOptions{
checkReleaseBuilds false
namespace 'org.joinmastodon.android'
lint {
abortOnError false
checkReleaseBuilds false
}
buildFeatures {
buildConfig true
}
}
dependencies {
api 'androidx.annotation:annotation:1.3.0'
api 'androidx.annotation:annotation:1.6.0'
implementation 'com.squareup.okhttp3:okhttp:3.14.9'
implementation 'me.grishka.litex:recyclerview:1.2.1.1'
implementation 'me.grishka.litex:swiperefreshlayout:1.1.0.1'
@ -104,7 +115,7 @@ dependencies {
implementation 'me.grishka.litex:viewpager:1.0.0'
implementation 'me.grishka.litex:viewpager2:1.0.0'
implementation 'me.grishka.appkit:appkit:1.2.7'
implementation 'com.google.code.gson:gson:2.8.9'
implementation 'com.google.code.gson:gson:2.9.0'
implementation 'org.jsoup:jsoup:1.14.3'
implementation 'com.squareup:otto:1.3.8'
implementation 'de.psdev:async-otto:1.0.3'

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.joinmastodon.android">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

View File

@ -5,8 +5,6 @@ import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import org.joinmastodon.android.R;
import me.grishka.appkit.api.ErrorResponse;
public class MastodonErrorResponse extends ErrorResponse{
@ -22,7 +20,7 @@ public class MastodonErrorResponse extends ErrorResponse{
@Override
public void bindErrorView(View view){
TextView text=view.findViewById(R.id.error_text);
TextView text=view.findViewById(me.grishka.appkit.R.id.error_text);
text.setText(error);
}

View File

@ -119,7 +119,7 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene
content.setOrientation(LinearLayout.VERTICAL);
FrameLayout fragmentContainer=new FrameLayout(getActivity());
fragmentContainer.setId(R.id.fragment_wrap);
fragmentContainer.setId(me.grishka.appkit.R.id.fragment_wrap);
content.addView(fragmentContainer, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f));
inflater.inflate(R.layout.tab_bar, content);
@ -143,10 +143,10 @@ public class HomeFragment extends AppKitFragment implements OnBackPressedListene
if(savedInstanceState==null){
getChildFragmentManager().beginTransaction()
.add(R.id.fragment_wrap, homeTabFragment)
.add(R.id.fragment_wrap, searchFragment).hide(searchFragment)
.add(R.id.fragment_wrap, notificationsFragment).hide(notificationsFragment)
.add(R.id.fragment_wrap, profileFragment).hide(profileFragment)
.add(me.grishka.appkit.R.id.fragment_wrap, homeTabFragment)
.add(me.grishka.appkit.R.id.fragment_wrap, searchFragment).hide(searchFragment)
.add(me.grishka.appkit.R.id.fragment_wrap, notificationsFragment).hide(notificationsFragment)
.add(me.grishka.appkit.R.id.fragment_wrap, profileFragment).hide(profileFragment)
.commit();

View File

@ -16,6 +16,7 @@ import org.joinmastodon.android.events.PollUpdatedEvent;
import org.joinmastodon.android.events.RemoveAccountPostsEvent;
import org.joinmastodon.android.model.Account;
import org.joinmastodon.android.model.CacheablePaginatedResponse;
import org.joinmastodon.android.model.Emoji;
import org.joinmastodon.android.model.Filter;
import org.joinmastodon.android.model.Notification;
import org.joinmastodon.android.model.PaginatedResponse;
@ -24,6 +25,7 @@ import org.joinmastodon.android.ui.displayitems.AccountCardStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.HeaderStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.StatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem;
import org.joinmastodon.android.ui.text.HtmlParser;
import org.joinmastodon.android.ui.utils.DiscoverInfoBannerHelper;
import org.joinmastodon.android.ui.utils.InsetStatusItemDecoration;
import org.joinmastodon.android.ui.utils.UiUtils;
@ -88,6 +90,13 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
protected List<StatusDisplayItem> buildDisplayItems(Notification n){
Account reportTarget = n.report == null ? null : n.report.targetAccount == null ? null :
n.report.targetAccount;
Emoji emoji = new Emoji();
if(n.emojiUrl!=null){
emoji.shortcode=n.emoji.substring(1,n.emoji.length()-1);
emoji.url=n.emojiUrl;
emoji.staticUrl=n.emojiUrl;
emoji.visibleInPicker=false;
}
String extraText=switch(n.type){
case FOLLOW -> getString(R.string.user_followed_you);
case FOLLOW_REQUEST -> getString(R.string.user_sent_follow_request);
@ -98,8 +107,9 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
case UPDATE -> getString(R.string.sk_post_edited);
case SIGN_UP -> getString(R.string.sk_signed_up);
case REPORT -> getString(R.string.sk_reported);
case EMOJI_REACTION -> getString(R.string.sk_reacted, n.emoji);
};
HeaderStatusDisplayItem titleItem=extraText!=null ? new HeaderStatusDisplayItem(n.id, n.account, n.createdAt, this, accountID, n.status, extraText, n, null) : null;
HeaderStatusDisplayItem titleItem=extraText!=null ? new HeaderStatusDisplayItem(n.id, n.account, n.createdAt, this, accountID, n.status, n.emojiUrl!=null ? HtmlParser.parseCustomEmoji(extraText, Collections.singletonList(emoji)) : extraText, n, null) : null;
if(n.status!=null){
ArrayList<StatusDisplayItem> items=StatusDisplayItem.buildItems(this, n.status, accountID, n, knownAccounts, titleItem!=null, titleItem==null, n, false, Filter.FilterContext.NOTIFICATIONS);
if(titleItem!=null)

View File

@ -402,7 +402,7 @@ public class ProfileAboutFragment extends Fragment implements WindowInsetsAwareF
public void onSelectedChanged(@Nullable RecyclerView.ViewHolder viewHolder, int actionState){
super.onSelectedChanged(viewHolder, actionState);
if(actionState==ItemTouchHelper.ACTION_STATE_DRAG){
viewHolder.itemView.setTag(R.id.item_touch_helper_previous_elevation, viewHolder.itemView.getElevation()); // prevents the default behavior of changing elevation in onDraw()
viewHolder.itemView.setTag(me.grishka.appkit.R.id.item_touch_helper_previous_elevation, viewHolder.itemView.getElevation()); // prevents the default behavior of changing elevation in onDraw()
viewHolder.itemView.animate().translationZ(V.dp(1)).setDuration(200).setInterpolator(CubicBezierInterpolator.DEFAULT).start();
draggedViewHolder=viewHolder;
}

View File

@ -1512,7 +1512,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
public void onSelectedChanged(@Nullable RecyclerView.ViewHolder viewHolder, int actionState){
super.onSelectedChanged(viewHolder, actionState);
if(actionState==ItemTouchHelper.ACTION_STATE_DRAG){
viewHolder.itemView.setTag(R.id.item_touch_helper_previous_elevation, viewHolder.itemView.getElevation()); // prevents the default behavior of changing elevation in onDraw()
viewHolder.itemView.setTag(me.grishka.appkit.R.id.item_touch_helper_previous_elevation, viewHolder.itemView.getElevation()); // prevents the default behavior of changing elevation in onDraw()
viewHolder.itemView.animate().translationZ(V.dp(1)).setDuration(200).setInterpolator(CubicBezierInterpolator.DEFAULT).start();
draggedViewHolder=viewHolder;
}

View File

@ -20,6 +20,8 @@ public class Notification extends BaseModel implements DisplayItemsParent{
public Account account;
public Status status;
public Report report;
public String emoji;
public String emojiUrl;
@Override
public void postprocess() throws ObjectValidationException{
@ -54,7 +56,9 @@ public class Notification extends BaseModel implements DisplayItemsParent{
@SerializedName("admin.sign_up")
SIGN_UP,
@SerializedName("admin.report")
REPORT
REPORT,
@SerializedName("pleroma:emoji_reaction")
EMOJI_REACTION
}
@Parcel

View File

@ -86,13 +86,13 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
public final Status status;
private boolean hasVisibilityToggle;
boolean needBottomPadding;
private String extraText;
private CharSequence extraText;
private Notification notification;
private ScheduledStatus scheduledStatus;
private Announcement announcement;
private Consumer<String> consumeReadAnnouncement;
public HeaderStatusDisplayItem(String parentID, Account user, Instant createdAt, BaseStatusListFragment parentFragment, String accountID, Status status, String extraText, Notification notification, ScheduledStatus scheduledStatus){
public HeaderStatusDisplayItem(String parentID, Account user, Instant createdAt, BaseStatusListFragment parentFragment, String accountID, Status status, CharSequence extraText, Notification notification, ScheduledStatus scheduledStatus){
super(parentID, parentFragment);
user=scheduledStatus != null ? AccountSessionManager.getInstance().getAccount(accountID).self : user;
this.user=user;
@ -117,6 +117,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
}
}
this.extraText=extraText;
emojiHelper.addText(extraText);
}
public static HeaderStatusDisplayItem fromAnnouncement(Announcement a, Status fakeStatus, Account instanceUser, BaseStatusListFragment parentFragment, String accountID, Consumer<String> consumeReadID) {

View File

@ -1,5 +1,7 @@
package org.joinmastodon.android.ui.displayitems;
import static org.joinmastodon.android.GlobalUserPreferences.*;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
@ -181,10 +183,11 @@ public class MediaGridStatusDisplayItem extends StatusDisplayItem{
altTextIndex=index;
Attachment att=item.attachments.get(index);
boolean hasAltText = !TextUtils.isEmpty(att.description);
altTextButton.setVisibility(hasAltText && GlobalUserPreferences.showAltIndicator ? View.VISIBLE : View.GONE);
noAltTextButton.setVisibility(!hasAltText && GlobalUserPreferences.showNoAltIndicator ? View.VISIBLE : View.GONE);
altText.setVisibility(hasAltText && GlobalUserPreferences.showAltIndicator ? View.VISIBLE : View.GONE);
noAltText.setVisibility(!hasAltText && GlobalUserPreferences.showNoAltIndicator ? View.VISIBLE : View.GONE);
if ((hasAltText && !showAltIndicator) || (!hasAltText && !showNoAltIndicator)) return;
altTextButton.setVisibility(hasAltText && showAltIndicator ? View.VISIBLE : View.GONE);
noAltTextButton.setVisibility(!hasAltText && showNoAltIndicator ? View.VISIBLE : View.GONE);
altText.setVisibility(hasAltText && showAltIndicator ? View.VISIBLE : View.GONE);
noAltText.setVisibility(!hasAltText && showNoAltIndicator ? View.VISIBLE : View.GONE);
altText.setText(att.description);
altTextWrapper.setVisibility(View.VISIBLE);
altTextWrapper.setBackgroundResource(hasAltText ? R.drawable.bg_image_alt_overlay : R.drawable.bg_image_no_alt_overlay);
@ -251,8 +254,7 @@ public class MediaGridStatusDisplayItem extends StatusDisplayItem{
boolean hasAltText = !TextUtils.isEmpty(item.attachments.get(i).description);
if(c.btnsWrap!=null
&& c.btnsWrap!=btn
&& ((hasAltText && GlobalUserPreferences.showAltIndicator)
|| (!hasAltText && GlobalUserPreferences.showNoAltIndicator))
&& ((hasAltText && showAltIndicator) || (!hasAltText && showNoAltIndicator))
) c.btnsWrap.setVisibility(View.VISIBLE);
i++;
}

View File

@ -29,6 +29,16 @@ public class CustomEmojiHelper{
}
}
public void addText(CharSequence text) {
if(!(text instanceof Spanned))
return;
CustomEmojiSpan[] spans=((Spanned) text).getSpans(0, text.length(), CustomEmojiSpan.class);
for(List<CustomEmojiSpan> group:Arrays.stream(spans).collect(Collectors.groupingBy(s->s.emoji)).values()){
this.spans.add(group);
requests.add(group.get(0).createImageLoaderRequest());
}
}
public int getImageCount(){
return requests.size();
}

View File

@ -69,7 +69,7 @@
<string name="sk_translated_using">Traduït amb %s</string>
<string name="sk_post_language">Llengua: %s</string>
<string name="sk_available_languages">Llengües disponibles</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_confirm_clear_recent_languages">Segur que vols esborrar les llengües recents\?</string>
<string name="sk_welcome_text">El tauró et saluda! Per a començar, introdueix el domini de la instància a continuació.</string>
<string name="sk_tabs_disable_swipe">Desactiva el desplaçament entre pestanyes</string>

View File

@ -40,7 +40,7 @@
<string name="sk_no_update_available">Dim diweddariad ar gael</string>
<string name="sk_check_for_update">Gwirio am ddiweddariad</string>
<string name="sk_poll_allow_multiple">Caniatáu mwy nag un dewis</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_tabs_disable_swipe">Analluogi llusgo rhwng tabiau</string>
<string name="sk_settings_posting">Dewisiadau postio</string>
<string name="sk_settings_rules">Rheolau</string>

View File

@ -38,7 +38,7 @@
<string name="sk_disable_marquee">Laufschrift in Titelleisten deaktivieren</string>
<string name="sk_settings_contribute">Zu Megalodon beitragen</string>
<string name="sk_settings_show_federated_timeline">Föderierte Timeline anzeigen</string>
<string name="sk_notify_posts">Beitrags-Benachrichtigungen</string>
<string name="sk_notify_posts">Beitrags-Benachrichtigungen</string>
<string name="sk_settings_color_palette">Farbschema</string>
<string name="sk_color_palette_pink">Pink</string>
<string name="sk_color_palette_purple">Violett</string>
@ -50,7 +50,7 @@
<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>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_confirm_clear_recent_languages">Sicher, dass du die Liste der zuletzt verwendeten Sprachen leeren willst\?</string>
<string name="sk_translate_post">Übersetzen</string>
<string name="sk_translate_show_original">Original anzeigen</string>
@ -164,7 +164,7 @@
<string name="sk_alt_text_missing_title">Fehlende Bildbeschreibung</string>
<string name="sk_settings_disable_alt_text_reminder">Erinnerung zum Hinzufügen von Bildbeschreibungen ausschalten</string>
<string name="sk_alt_button">ALT</string>
<string name="sk_notify_update">Bearbeitet einen geteilten Beitrag</string>
<string name="sk_notify_update">einen geteilten Beitrag bearbeitet</string>
<string name="sk_timelines">Timelines</string>
<string name="sk_timeline">Timeline</string>
<string name="sk_hashtag">Hashtag</string>
@ -271,6 +271,5 @@
<string name="sk_show_thread">Thread öffnen</string>
<string name="sk_compact_reblog_reply_line">Kompakte Geteilt/Geantwortet-Zeile</string>
<string name="sk_reply_line_above_avatar">“Als Antwort auf”-Zeile über Profilbild</string>
<string name="sk_settings_confirm_before_reblog">Vor dem Rebloggen bestätigen</string>
<string name="sk_settings_show_new_posts_button">Schaltfläche \"Neue Beiträge anzeigen\"</string>
<string name="sk_settings_confirm_before_reblog">Vor dem Teilen bestätigen</string>
</resources>

View File

@ -53,7 +53,7 @@
<string name="sk_translated_using">Traducido mediante %s</string>
<string name="sk_post_language">Idioma: %s</string>
<string name="sk_available_languages">Idiomas disponibles</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_confirm_clear_recent_languages">¿Seguro que quieres borrar los idiomas usados recientemente\?</string>
<string name="sk_clear_recent_languages">Borrar idiomas usados recientemente</string>
<string name="sk_welcome_text">¡El tiburón te saluda! Para empezar, introduce a continuación el nombre del dominio de tu instancia.</string>
@ -272,6 +272,5 @@
<string name="sk_reply_line_above_avatar">\"En respuesta a\" línea sobre el avatar</string>
<string name="sk_show_thread">Mostrar hilo</string>
<string name="sk_compact_reblog_reply_line">Línea compacta de reblog/respuesta</string>
<string name="sk_settings_show_new_posts_button">Botón “Mostrar nuevas publicaciones”</string>
<string name="sk_settings_confirm_before_reblog">Confirmar antes de impulsar</string>
<string name="sk_settings_confirm_before_reblog">Confirmar antes de volver a publicar</string>
</resources>

View File

@ -35,7 +35,7 @@
<string name="sk_settings_contribute">Lagundu Megalodon</string>
<string name="sk_translated_using">%s-ekin itzulia</string>
<string name="sk_post_language">Hizkuntza: %s</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_bookmark_as">Beste kontu baten laster-marka</string>
<string name="sk_bookmarked_as">%s bezala laster-markara eramana</string>
<string name="sk_already_bookmarked">Dagoeneko laster-marka da</string>
@ -261,16 +261,14 @@
<string name="sk_follow_as">Jarraitu beste kontu batetik</string>
<string name="sk_followed_as">%s-(d/t)ik jarraitua</string>
<string name="sk_settings_hide_fab">Automatikoki ezkutatu Idatzi botoia</string>
<string name="sk_settings_reply_visibility_all">Erantzun guztiak</string>
<string name="sk_settings_reply_visibility_self">Niri eginiko erantzunak</string>
<string name="sk_settings_reply_visibility_following">Jarraitzen ditudanei eginiko erantzunak</string>
<string name="sk_in_reply">Erantzunez</string>
<string name="sk_reply_line_above_avatar">“Honi erantzunez” abatarraren gaineko lerroa</string>
<string name="sk_show_thread">Erakutsi haria</string>
<string name="sk_settings_confirm_before_reblog">Berretsi bultzatu aurretik</string>
<string name="sk_quoting_user">%s aipatzen</string>
<string name="sk_settings_reply_visibility">Erantzunaren ikusgarritasuna</string>
<string name="sk_settings_show_new_posts_button">“Erakutsi argitalpen berriak” botoia</string>
<string name="sk_notification_action_replied">%s-(r)i erantzuna bidali da</string>
<string name="sk_settings_reply_visibility_all">Erantzun guztiak</string>
<string name="sk_settings_reply_visibility_following">Jarraitzen ditudanei eginiko erantzunak</string>
<string name="sk_reply_line_above_avatar">\"Honi erantzunez\" abatarraren gaineko lerroa</string>
<string name="sk_show_thread">Erakutsi haria</string>
<string name="sk_compact_reblog_reply_line">Bultzada/erantzun lerro trinkoa</string>
<string name="sk_quoting_user">%s aipatzen</string>
<string name="sk_settings_reply_visibility_self">Niri eginiko erantzunak</string>
<string name="sk_notification_action_replied">%s-(r)i erantzun</string>
</resources>

View File

@ -53,7 +53,7 @@
<string name="sk_translated_using">Traduit en utilisant %s</string>
<string name="sk_post_language">Langue : %s</string>
<string name="sk_available_languages">Langues disponibles</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_confirm_clear_recent_languages">Êtes-vous sûr de vouloir effacer vos langues récemment utilisées \?</string>
<string name="sk_clear_recent_languages">Effacer les langues récemment utilisées</string>
<string name="sk_example_domain">exemple.social</string>
@ -273,4 +273,5 @@
<string name="sk_show_thread">Afficher le fil</string>
<string name="sk_compact_reblog_reply_line">Ligne de repost/réponse compacte</string>
<string name="sk_reply_line_above_avatar">Ligne \"En réponse à\" au-dessus de l\'avatar</string>
<string name="sk_settings_confirm_before_reblog">Confirmer avant de reposter</string>
</resources>

View File

@ -44,7 +44,7 @@
<string name="sk_disable_marquee">Desactivar desprazamento do texto na barra de título</string>
<string name="sk_welcome_title">¡Benvida!</string>
<string name="sk_settings_contribute">Contribúe a Megalodon</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_example_domain">exemplo.social</string>
<string name="sk_available_languages">Idiomas dispoñíbeis</string>
<string name="sk_settings_profile">Configurar perfil</string>

View File

@ -39,7 +39,7 @@
<string name="sk_settings_show_federated_timeline">Összevont idővonal megjelenítése</string>
<string name="sk_confirm_clear_recent_languages">Biztos, hogy törölni szeretné a nemrég használt nyelveket\?</string>
<string name="sk_available_languages">Elérhető nyelvek</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_settings_translate_only_opened">Csak a megnyitott hozzászólások lefordítása</string>
<string name="sk_already_reblogged">Már reblogoltam</string>
<string name="sk_reblogged_as">Átlogolva mint %s</string>

View File

@ -53,7 +53,7 @@
<string name="sk_confirm_clear_recent_languages">Apakah Anda yakin ingin menghapus bahasa terkini yang Anda gunakan\?</string>
<string name="sk_color_palette_material3">Sistem</string>
<string name="sk_available_languages">Bahasa yang tersedia</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$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>
@ -273,4 +273,5 @@
<string name="sk_reply_line_above_avatar">Baris “Membalas ke” di atas avatar</string>
<string name="sk_show_thread">Tampilkan utasan</string>
<string name="sk_compact_reblog_reply_line">Baris berbagi/balasan</string>
<string name="sk_settings_confirm_before_reblog">Konfirmasi sebelum membagikan ulang</string>
</resources>

View File

@ -51,7 +51,7 @@
<string name="sk_translate_show_original">Mostra originale</string>
<string name="sk_translated_using">Tradotto con %s</string>
<string name="sk_post_language">Lingua: %s</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$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 le lingue usate di recente</string>
<string name="sk_welcome_title">Benvenuto!</string>

View File

@ -51,7 +51,7 @@
<string name="sk_translate_post">번역하기</string>
<string name="sk_translate_show_original">원본 보기</string>
<string name="sk_post_language">언어: %s</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_translated_using">%s를 통해 번역함</string>
<string name="sk_available_languages">모든 언어</string>
<string name="sk_clear_recent_languages">최근 사용한 언어 지우기</string>
@ -100,7 +100,7 @@
<string name="sk_open_with_account">다른 계정으로 열기</string>
<string name="sk_resource_not_found">리소스를 찾을 수 없습니다</string>
<string name="sk_loading_resource_on_instance_title">%s 인스턴스에서 찾아오는 중</string>
<string name="sk_quote_post">언급하여 게시</string>
<string name="sk_quote_post">인용하여 게시</string>
<string name="sk_unsent_posts">게시하지 않은 게시물</string>
<string name="sk_draft">초안 작성</string>
<string name="sk_schedule">게시 예약</string>
@ -240,7 +240,7 @@
<string name="sk_settings_glitch_instance">Glitch 로컬에만 게시 모드</string>
<string name="sk_settings_support_local_only">서버가 로컬에만 게시하는 것을 지원함</string>
<string name="sk_inline_local_only">로컬에만 게시</string>
<string name="sk_inline_direct">멘션한 사람에게만 게시</string>
<string name="sk_inline_direct">멘션된 사람들만 보임</string>
<string name="sk_instance_features">인스턴스 기능 목록</string>
<string name="sk_settings_glitch_mode_explanation">사용하시는 인스턴스가 Glitch에서 실행 중인 경우 활성화하세요. Hometown이나 Akkoma의 경우 활성화할 필요가 없습니다.</string>
<string name="sk_settings_see_new_posts_button">“새 게시물 보기” 버튼</string>
@ -267,7 +267,7 @@
<string name="sk_settings_reply_visibility_all">모든 답글</string>
<string name="sk_settings_reply_visibility_following">팔로우한 계정에 대한 답글</string>
<string name="sk_settings_reply_visibility_self">나에 대한 답글</string>
<string name="sk_quoting_user">%s 님 언급</string>
<string name="sk_quoting_user">%s 님 인용</string>
<string name="sk_reply_line_above_avatar">아바타 위의 “…님에게 답글” 정보</string>
<string name="sk_show_thread">스레드 보기</string>
<string name="sk_notification_action_replied">%s 님에게 답글을 보냈습니다</string>

View File

@ -45,7 +45,7 @@
<string name="sk_reply_as">တခြားအကောင့်ဖြင့် ရီပလိုင်းပြန်မည်</string>
<string name="sk_translated_using">%s ဖြင့် ဘာသာပြန်ထားသည်</string>
<string name="sk_post_language">ဘာသာစကား။ ။%s</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_settings_filters">Filter များကို စီစဉ်မည်</string>
<string name="sk_settings_auth">လုံခြုံရေးဆိုင်ရာ ဆက်တင်များ</string>
<string name="sk_settings_rules">စည်းကမ်းချက်များ</string>

View File

@ -53,7 +53,7 @@
<string name="sk_bookmarked_as">Bookmark opgeslagen als %s</string>
<string name="sk_already_bookmarked">Al als bookmark opgeslagen</string>
<string name="sk_favorited_as">Als favoriet opgeslagen als %s</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_example_domain">example.social</string>
<string name="sk_reply_as">Antwoord met ander account</string>
<string name="sk_settings_uniform_icon_for_notifications">Zelfde icoon voor alle meldingen</string>

View File

@ -53,7 +53,7 @@
<string name="sk_translated_using">Przetłumaczono przy użyciu %s</string>
<string name="sk_post_language">Język: %s</string>
<string name="sk_available_languages">Dostępne języki</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_confirm_clear_recent_languages">Czy na pewno chcesz wyczyścić ostatnio użyte języki\?</string>
<string name="sk_clear_recent_languages">Wyczyść ostatnio użyte języki</string>
<string name="sk_example_domain">przykład.social</string>
@ -271,6 +271,5 @@
<string name="sk_reply_line_above_avatar">Tekst \"W odpowiedzi na\" nad avatarem</string>
<string name="sk_show_thread">Pokaż wątek</string>
<string name="sk_compact_reblog_reply_line">Zmniejsz linię reblogu/odpowiedzi</string>
<string name="sk_settings_show_new_posts_button">Przycisk \"Pokaż nowe wpisy\"</string>
<string name="sk_settings_confirm_before_reblog">Potwierdź przed reblogowaniem</string>
</resources>

View File

@ -51,7 +51,7 @@
<string name="sk_translated_using">Traduzido usando %s</string>
<string name="sk_post_language">Idioma: %s</string>
<string name="sk_available_languages">Idiomas disponíveis</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_confirm_clear_recent_languages">Você tem certeza 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 publicações</string>

View File

@ -25,7 +25,7 @@
<string name="sk_translate_show_original">Показать оригинал</string>
<string name="sk_translated_using">Переведено через %s</string>
<string name="sk_available_languages">Доступные языки</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_welcome_title">Добро пожаловать!</string>
<string name="sk_example_domain">example.social</string>
<string name="sk_settings_load_new_posts">Автоматически загружать новые посты</string>

View File

@ -52,7 +52,7 @@
<string name="sk_settings_color_palette">Barvna paleta</string>
<string name="sk_poll_allow_multiple">Dovoli več izbir</string>
<string name="sk_translate_show_original">Pokaži izvirnik</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_welcome_title">Dobrodošli!</string>
<string name="sk_example_domain">primer.social</string>
<string name="sk_already_bookmarked">Že dodano med zaznamke</string>

View File

@ -13,7 +13,7 @@
<string name="sk_translated_using">Перекладено за допомогою %s</string>
<string name="sk_post_language">Мова: %s</string>
<string name="sk_available_languages">Доступні мови</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_clear_recent_languages">Очистити нещодавно використані мови</string>
<string name="sk_settings_always_reveal_content_warnings">Завжди розкривати попередження про вміст</string>
<string name="sk_notification_type_status">Дописи</string>
@ -272,6 +272,5 @@
<string name="sk_reply_line_above_avatar">Рядок «У відповідь» над аватаром</string>
<string name="sk_show_thread">Показати потік</string>
<string name="sk_compact_reblog_reply_line">Компактний рядок для поширеного допису/відповіді</string>
<string name="sk_settings_confirm_before_reblog">Запросити підтвердження перед репостом</string>
<string name="sk_settings_show_new_posts_button">Кнопка \"Показати нові публікації\"</string>
<string name="sk_settings_confirm_before_reblog">Підтверджувати поширення</string>
</resources>

View File

@ -57,7 +57,7 @@
<string name="sk_translated_using">使用 %s 翻译</string>
<string name="sk_post_language">语言:%s</string>
<string name="sk_available_languages">可用语言</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_example_domain">example.social</string>
<string name="sk_tabs_disable_swipe">禁用选项卡之间的滑动</string>
<string name="sk_settings_profile">设置个人资料</string>

View File

@ -7,7 +7,7 @@
<string name="sk_translated_using">通過 %s 翻譯</string>
<string name="sk_post_language">語言: %s</string>
<string name="sk_available_languages">可用語言</string>
<string name="sk_language_name">%s (%s)</string>
<string name="sk_language_name">%1$s (%2$s)</string>
<string name="sk_welcome_title">歡迎!</string>
<string name="sk_app_name">Megalodon</string>
<string name="sk_pinned_posts">釘選</string>

View File

@ -60,7 +60,7 @@
<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_language_name">%1$s (%2$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>
@ -89,8 +89,8 @@
<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_loading_resource_on_instance_title">Looking it up on %s</string>
<string name="sk_undo_reblog">Undo reblog</string>
<string name="sk_reblog_with_visibility">Reblog with visibility</string>
<string name="sk_undo_reblog">Undo boost</string>
<string name="sk_reblog_with_visibility">Boost with visibility</string>
<string name="sk_quote_post">Post about this</string>
<string name="sk_hashtags_you_follow">Hashtags you follow</string>
<string name="sk_copy_link_to_post">Copy link to post</string>
@ -102,9 +102,9 @@
<string name="sk_favorite_as">Favorite with other account</string>
<string name="sk_favorited_as">Favorited as %s</string>
<string name="sk_already_favorited">Already favorited</string>
<string name="sk_reblog_as">Reblog with other account</string>
<string name="sk_reblogged_as">Reblogged as %s</string>
<string name="sk_already_reblogged">Already reblogged</string>
<string name="sk_reblog_as">Boost with other account</string>
<string name="sk_reblogged_as">Boosted as %s</string>
<string name="sk_already_reblogged">Already boosted</string>
<string name="sk_reply_as">Reply with other account</string>
<string name="sk_settings_uniform_icon_for_notifications">Uniform icon for all notifications</string>
<string name="sk_forward_report_to">Forward to %s</string>
@ -230,7 +230,7 @@
<string name="sk_alt_button">ALT</string>
<string name="sk_post_edited">edited</string>
<string name="sk_notification_type_update">Edited posts</string>
<string name="sk_notify_update">Edits a reblogged post</string>
<string name="sk_notify_update">Edits a boosted post</string>
<string name="sk_attach_file">Attach file</string>
<string name="sk_searching">Searching…</string>
<string name="sk_no_results">No results</string>
@ -252,6 +252,7 @@
<string name="sk_settings_glitch_mode_explanation">Enable this if your home instance runs on Glitch. Not needed for Hometown or Akkoma.</string>
<string name="sk_signed_up">signed up</string>
<string name="sk_reported">reported</string>
<string name="sk_reacted">reacted with %s</string>
<string name="sk_sign_ups">Users signing up</string>
<string name="sk_new_reports">New reports</string>
<string name="sk_settings_server_version">Server version: %s</string>
@ -271,6 +272,6 @@
<string name="sk_in_reply">In reply</string>
<string name="sk_reply_line_above_avatar">“In reply to” line above avatar</string>
<string name="sk_show_thread">Show thread</string>
<string name="sk_compact_reblog_reply_line">Compact reblog/reply line</string>
<string name="sk_settings_confirm_before_reblog">Confirm before reblogging</string>
<string name="sk_compact_reblog_reply_line">Compact boost/reply line</string>
<string name="sk_settings_confirm_before_reblog">Confirm before boosting</string>
</resources>

View File

@ -1,17 +0,0 @@
Megalodon is a modified version of the <a href="https://github.com/mastodon/mastodon-android">official Mastodon Android app</a> adding important features that are missing in the official app, such as the federated timeline, unlisted posting, bookmarks and an image description viewer.
<b>Key features</b>
- <b>Unlisted posting</b>: Post publicly without having your post show up in trends, hashtags or public timelines.
- <b>Federated timeline</b>: See all public posts from people on all other Fediverse neighborhoods your home instance is connected to.
- <b>Image description viewer</b>: Quickly check whether an image or video has an alt text attached to it.
- <b>Pinning posts</b>: Pin your most important posts to your profile and see what others have pinned using the “Pinned“ tab.
- <b>Bookmarks</b>: Quickly save posts and find them later in the Bookmarks list.
- <b>Follow hashtags</b>: See new posts from specific hashtags directly in your home timeline by following them.
- <b>Answering follow requests</b>: Accept or decline follow requests from your notifications or the dedicated Follow requests list.
- <b>Delete and re-draft</b>: The much-loved feature that made editing possible without an actual editing function.
<b>Unreleased official features, available in advance</b>
- Editing posts
- Integrated updater for GitHub releases

View File

@ -0,0 +1,5 @@
- 알림창에서 바로 좋아요/보관/답글 달기
- 타임라인에서 리블로그와 답글에 더 예쁘고 일관성 있는 헤더 제공
- 알림 표시 점 (아직 실제로 알림을 확인하지 않은 경우)
- Akkoma 유저를 위한 업데이트: 답글 표시 범위, 정렬된 스레드 답글, 인용, …
- 충돌 수정 및 사소한 업데이트