Merge branch 'develop'

This commit is contained in:
Thomas 2022-12-30 18:12:09 +01:00
commit c3006080ba
44 changed files with 927 additions and 199 deletions

View File

@ -13,8 +13,8 @@ android {
defaultConfig {
minSdk 21
targetSdk 33
versionCode 456
versionName "3.13.2"
versionCode 457
versionName "3.13.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
flavorDimensions "default"

View File

@ -1,4 +1,9 @@
[
{
"version": "3.13.3",
"code": "457",
"note": "Added:\n- Allow to enable extra features in Settings\n- Customizable settings for extra features\n- Support quotes, reactions with messages\n- Support text format (html, markdown, etc.) when composing\n\nFixed:\n- CW not working with media\n- Media not displayed for older instances\n- Some crashes\n"
},
{
"version": "3.13.2",
"code": "456",

View File

@ -122,6 +122,7 @@ import app.fedilab.android.activities.SuggestionActivity;
import app.fedilab.android.activities.TrendsActivity;
import app.fedilab.android.activities.admin.AdminActionActivity;
import app.fedilab.android.broadcastreceiver.NetworkStateReceiver;
import app.fedilab.android.client.endpoints.MastodonAccountsService;
import app.fedilab.android.client.entities.api.Emoji;
import app.fedilab.android.client.entities.api.EmojiInstance;
import app.fedilab.android.client.entities.api.Filter;
@ -159,6 +160,8 @@ import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public abstract class BaseMainActivity extends BaseActivity implements NetworkStateReceiver.NetworkStateReceiverListener, FragmentMastodonTimeline.UpdateCounters, FragmentNotificationContainer.UpdateCounters, FragmentMastodonConversation.UpdateCounters {
@ -585,9 +588,35 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
} catch (DBException e) {
e.printStackTrace();
}
//If the attached account is null, the app will fetch remote instance to get up-to-date values
if (currentAccount != null && currentAccount.mastodon_account == null) {
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.callTimeout(60, TimeUnit.SECONDS)
.proxy(Helper.getProxy(getApplication().getApplicationContext()))
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://" + MainActivity.currentInstance + "/api/v1/")
.addConverterFactory(GsonConverterFactory.create(Helper.getDateBuilder()))
.client(okHttpClient)
.build();
MastodonAccountsService mastodonAccountsService = retrofit.create(MastodonAccountsService.class);
retrofit2.Call<app.fedilab.android.client.entities.api.Account> accountCall = mastodonAccountsService.verify_credentials(MainActivity.currentToken);
if (accountCall != null) {
try {
retrofit2.Response<app.fedilab.android.client.entities.api.Account> accountResponse = accountCall.execute();
if (accountResponse.isSuccessful()) {
currentAccount.mastodon_account = accountResponse.body();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> {
if (currentAccount == null) {
if (currentAccount == null || currentAccount.mastodon_account == null) {
//It is not, the user is redirected to the login page
Intent myIntent = new Intent(BaseMainActivity.this, LoginActivity.class);
startActivity(myIntent);

View File

@ -104,7 +104,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
public static final int TAKE_PHOTO = 5600;
private final Timer timer = new Timer();
private List<Status> statusList;
private Status statusReply, statusMention;
private Status statusReply, statusMention, statusQuoted;
private StatusDraft statusDraft;
private ComposeAdapter composeAdapter;
private boolean promptSaveDraft;
@ -465,6 +465,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
Bundle b = getIntent().getExtras();
if (b != null) {
statusReply = (Status) b.getSerializable(Helper.ARG_STATUS_REPLY);
statusQuoted = (Status) b.getSerializable(Helper.ARG_QUOTED_MESSAGE);
statusDraft = (StatusDraft) b.getSerializable(Helper.ARG_STATUS_DRAFT);
scheduledStatus = (ScheduledStatus) b.getSerializable(Helper.ARG_STATUS_SCHEDULED);
statusReplyId = b.getString(Helper.ARG_STATUS_REPLY_ID);
@ -557,6 +558,9 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
List<Status> statusDraftList = new ArrayList<>();
Status status = new Status();
status.id = Helper.generateIdString();
if (statusQuoted != null) {
status.quote_id = statusQuoted.id;
}
statusDraftList.add(status);
if (statusReplyId != null && statusDraft != null) {//Delete and redraft
@ -647,6 +651,18 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
binding.recyclerView.setAdapter(composeAdapter);
statusesVM.getContext(currentInstance, BaseMainActivity.currentToken, statusReply.id)
.observe(ComposeActivity.this, this::initializeContextView);
} else if (statusQuoted != null) {
statusList.add(statusQuoted);
int statusCount = statusList.size();
statusDraftList.get(0).quote_id = statusQuoted.id;
//StatusDraftList at this point should only have one element
statusList.addAll(statusDraftList);
composeAdapter = new ComposeAdapter(statusList, statusCount, account, accountMention, visibility, editMessageId);
composeAdapter.manageDrafts = this;
composeAdapter.promptDraftListener = this;
LinearLayoutManager mLayoutManager = new LinearLayoutManager(ComposeActivity.this);
binding.recyclerView.setLayoutManager(mLayoutManager);
binding.recyclerView.setAdapter(composeAdapter);
} else {
//Compose without replying
statusList.addAll(statusDraftList);

View File

@ -59,7 +59,9 @@ public interface MastodonStatusesService {
@Field("sensitive") Boolean sensitive,
@Field("spoiler_text") String spoiler_text,
@Field("visibility") String visibility,
@Field("language") String language
@Field("language") String language,
@Field("quote_id") String quote_id,
@Field("content_type") String content_type
);
@GET("statuses/{id}/source")

View File

@ -48,6 +48,10 @@ public class Status implements Serializable, Cloneable {
public String spoiler_text;
@SerializedName("text")
public String text;
@SerializedName("quote_id")
public String quote_id;
@SerializedName("content_type")
public String content_type;
@SerializedName("visibility")
public String visibility;
@SerializedName("language")
@ -76,6 +80,8 @@ public class Status implements Serializable, Cloneable {
public String content;
@SerializedName("reblog")
public Status reblog;
@SerializedName("quote")
public Status quote;
@SerializedName("application")
public App application;
@SerializedName("account")
@ -111,7 +117,7 @@ public class Status implements Serializable, Cloneable {
public transient boolean setCursorToEnd = false;
public transient int cursorPosition = 0;
public transient boolean submitted = false;
public transient boolean spoilerChecked = false;
public boolean spoilerChecked = false;
public Filter filteredByApp;
public transient Spannable contentSpan;
public transient Spannable contentSpoilerSpan;

View File

@ -226,6 +226,7 @@ public class Helper {
public static final String ARG_STATUS_DRAFT_ID = "ARG_STATUS_DRAFT_ID";
public static final String ARG_STATUS_REPLY = "ARG_STATUS_REPLY";
public static final String ARG_MENTION_BOOSTER = "ARG_MENTION_BOOSTER";
public static final String ARG_QUOTED_MESSAGE = "ARG_QUOTED_MESSAGE";
public static final String ARG_STATUS_REPLY_ID = "ARG_STATUS_REPLY_ID";
public static final String ARG_ACCOUNT = "ARG_ACCOUNT";
public static final String ARG_ACCOUNT_ID = "ARG_ACCOUNT_ID";

View File

@ -432,6 +432,8 @@ public class MediaHelper {
}
int orientation = getImageOrientation(uri, context.getContentResolver());
int scaledImageSize = 1024;
final int maxRetry = 3;
int retry = 0;
do {
FileOutputStream outputStream = new FileOutputStream(targetedFile);
decodeBitmapInputStream = context.getContentResolver().openInputStream(uri);
@ -452,7 +454,8 @@ public class MediaHelper {
reorientedBitmap.compress(format, 100, outputStream);
reorientedBitmap.recycle();
scaledImageSize /= 2;
} while (targetedFile.length() > getMaxSize(targetedFile.length()));
retry++;
} while (targetedFile.length() > getMaxSize(targetedFile.length()) && retry < maxRetry);
} catch (Exception e) {
e.printStackTrace();
if (decodeBitmapInputStream != null) {

View File

@ -52,6 +52,7 @@ import androidx.lifecycle.ViewModelStoreOwner;
import androidx.preference.PreferenceManager;
import com.bumptech.glide.Glide;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
@ -289,10 +290,10 @@ public class SpannableHelper {
@Override
public void onLongClick(View view) {
Context mContext = view.getContext();
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mContext);
MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(mContext);
PopupLinksBinding popupLinksBinding = PopupLinksBinding.inflate(LayoutInflater.from(context));
dialogBuilder.setView(popupLinksBinding.getRoot());
AlertDialog alertDialog = dialogBuilder.create();
materialAlertDialogBuilder.setView(popupLinksBinding.getRoot());
AlertDialog alertDialog = materialAlertDialogBuilder.create();
alertDialog.show();
String finalURl = newURL;
String uniqueUrl = newURL.endsWith("") ? newURL : newURL + "";

View File

@ -221,10 +221,10 @@ public class ComposeWorker extends Worker {
if (dataPost.scheduledDate == null) {
if (dataPost.statusEditId == null) {
statusCall = mastodonStatusesService.createStatus(null, dataPost.token, statuses.get(i).text, attachmentIds, poll_options, poll_expire_in,
poll_multiple, poll_hide_totals, in_reply_to_status, statuses.get(i).sensitive, statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), language);
poll_multiple, poll_hide_totals, statuses.get(i).quote_id == null ? in_reply_to_status : null, statuses.get(i).sensitive, statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), language, statuses.get(i).quote_id, statuses.get(i).content_type);
} else { //Status is edited
statusCall = mastodonStatusesService.updateStatus(null, dataPost.token, dataPost.statusEditId, statuses.get(i).text, attachmentIds, poll_options, poll_expire_in,
poll_multiple, poll_hide_totals, in_reply_to_status, statuses.get(i).sensitive, statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), language);
poll_multiple, poll_hide_totals, statuses.get(i).quote_id == null ? in_reply_to_status : null, statuses.get(i).sensitive, statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), language);
}
try {
Response<Status> statusResponse = statusCall.execute();
@ -285,7 +285,7 @@ public class ComposeWorker extends Worker {
}
} else {
Call<ScheduledStatus> scheduledStatusCall = mastodonStatusesService.createScheduledStatus(null, dataPost.token, statuses.get(i).text, attachmentIds, poll_options, poll_expire_in,
poll_multiple, poll_hide_totals, in_reply_to_status, statuses.get(i).sensitive, statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), dataPost.scheduledDate, statuses.get(i).language);
poll_multiple, poll_hide_totals, statuses.get(i).quote_id == null ? in_reply_to_status : null, statuses.get(i).sensitive, statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), dataPost.scheduledDate, statuses.get(i).language);
try {
Response<ScheduledStatus> statusResponse = scheduledStatusCall.execute();

View File

@ -28,6 +28,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
@ -99,6 +100,7 @@ import java.util.regex.Pattern;
import app.fedilab.android.BaseMainActivity;
import app.fedilab.android.R;
import app.fedilab.android.activities.ComposeActivity;
import app.fedilab.android.activities.MainActivity;
import app.fedilab.android.client.entities.api.Attachment;
import app.fedilab.android.client.entities.api.Emoji;
import app.fedilab.android.client.entities.api.EmojiInstance;
@ -1273,9 +1275,40 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
Status statusDraft = statusList.get(position);
ComposeViewHolder holder = (ComposeViewHolder) viewHolder;
boolean extraFeatures = sharedpreferences.getBoolean(context.getString(R.string.SET_EXTAND_EXTRA_FEATURES) + MainActivity.currentUserID + MainActivity.currentInstance, false);
holder.binding.buttonEmojiOne.setVisibility(View.VISIBLE);
if (extraFeatures) {
holder.binding.buttonTextFormat.setVisibility(View.VISIBLE);
holder.binding.buttonTextFormat.setOnClickListener(v -> {
AlertDialog.Builder builder = new AlertDialog.Builder(context, Helper.dialogStyle());
builder.setTitle(context.getString(R.string.post_format));
Resources res = context.getResources();
String[] formatArr = res.getStringArray(R.array.SET_POST_FORMAT);
int selection = 0;
String defaultFormat = sharedpreferences.getString(context.getString(R.string.SET_POST_FORMAT) + account.user_id + account.instance, "text/plain");
for (String format : formatArr) {
if (statusDraft.content_type != null && statusDraft.content_type.equalsIgnoreCase(format)) {
break;
} else if (statusDraft.content_type == null && defaultFormat.equalsIgnoreCase(format)) {
break;
}
selection++;
}
builder.setSingleChoiceItems(formatArr, selection, null);
builder.setPositiveButton(R.string.validate, (dialog, which) -> {
int selectedPosition = ((AlertDialog) dialog).getListView().getCheckedItemPosition();
statusDraft.content_type = formatArr[selectedPosition];
notifyItemChanged(holder.getLayoutPosition());
dialog.dismiss();
});
builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
builder.create().show();
});
} else {
holder.binding.buttonTextFormat.setVisibility(View.GONE);
}
holder.binding.buttonEmojiOne.setOnClickListener(v -> {
InputMethodManager imm = (InputMethodManager) context.getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(holder.binding.buttonEmojiOne.getWindowToken(), 0);
@ -1414,6 +1447,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
} else {
holder.binding.contentSpoiler.setVisibility(View.GONE);
}
holder.binding.buttonSensitive.setChecked(statusDraft.spoilerChecked);
holder.binding.buttonSensitive.setOnClickListener(v -> {
if (holder.binding.contentSpoiler.getVisibility() == View.VISIBLE) {
statusDraft.spoilerChecked = false;

View File

@ -32,6 +32,7 @@ import app.fedilab.android.R;
import app.fedilab.android.client.entities.api.Reaction;
import app.fedilab.android.databinding.DrawerReactionBinding;
import app.fedilab.android.helper.Helper;
import app.fedilab.android.helper.ThemeHelper;
import app.fedilab.android.viewmodel.mastodon.AnnouncementsVM;
import app.fedilab.android.viewmodel.pleroma.ActionsVM;
@ -74,6 +75,7 @@ public class ReactionAdapter extends RecyclerView.Adapter<ReactionAdapter.Reacti
holder.binding.reactionCount.setText(String.valueOf(reaction.count));
if (reaction.me) {
holder.binding.reactionContainer.setBackgroundResource(R.drawable.reaction_voted);
holder.binding.reactionCount.setTextColor(ThemeHelper.getAttColor(context, R.attr.colorOnPrimary));
} else {
holder.binding.reactionContainer.setBackgroundResource(R.drawable.reaction_border);
}

View File

@ -392,10 +392,13 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
boolean confirmFav = sharedpreferences.getBoolean(context.getString(R.string.SET_NOTIF_VALIDATION_FAV), false);
boolean confirmBoost = sharedpreferences.getBoolean(context.getString(R.string.SET_NOTIF_VALIDATION), true);
boolean fullAttachement = sharedpreferences.getBoolean(context.getString(R.string.SET_FULL_PREVIEW), false);
boolean displayBookmark = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_BOOKMARK), true);
boolean displayTranslate = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_TRANSLATE), false);
boolean displayBookmark = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_BOOKMARK) + MainActivity.currentUserID + MainActivity.currentInstance, true);
boolean displayTranslate = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_TRANSLATE) + MainActivity.currentUserID + MainActivity.currentInstance, false);
boolean displayCounters = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_COUNTER_FAV_BOOST), false);
boolean removeLeftMargin = sharedpreferences.getBoolean(context.getString(R.string.SET_REMOVE_LEFT_MARGIN), false);
boolean extraFeatures = sharedpreferences.getBoolean(context.getString(R.string.SET_EXTAND_EXTRA_FEATURES) + MainActivity.currentUserID + MainActivity.currentInstance, false);
boolean displayQuote = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_QUOTES) + MainActivity.currentUserID + MainActivity.currentInstance, true);
boolean displayReactions = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_REACTIONS) + MainActivity.currentUserID + MainActivity.currentInstance, true);
if (removeLeftMargin) {
LinearLayoutCompat.MarginLayoutParams p = (LinearLayoutCompat.MarginLayoutParams) holder.binding.spoiler.getLayoutParams();
@ -438,6 +441,60 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
String loadMediaType = sharedpreferences.getString(context.getString(R.string.SET_LOAD_MEDIA_TYPE), "ALWAYS");
if (statusToDeal.quote != null) {
holder.binding.quotedMessage.cardviewContainer.setCardElevation((int) Helper.convertDpToPixel(5, context));
holder.binding.quotedMessage.dividerCard.setVisibility(View.GONE);
holder.binding.quotedMessage.cardviewContainer.setStrokeWidth((int) Helper.convertDpToPixel(1, context));
holder.binding.quotedMessage.cardviewContainer.setOnClickListener(v -> holder.binding.quotedMessage.statusContent.callOnClick());
holder.binding.quotedMessage.statusContent.setOnTouchListener((view, motionEvent) -> {
if (motionEvent.getAction() == MotionEvent.ACTION_UP && !view.hasFocus()) {
try {
view.requestFocus();
} catch (Exception ignored) {
}
}
return false;
});
holder.binding.quotedMessage.statusContent.setOnClickListener(v -> {
if (status.isFocused || v.getTag() == SpannableHelper.CLICKABLE_SPAN) {
if (v.getTag() == SpannableHelper.CLICKABLE_SPAN) {
v.setTag(null);
}
return;
}
Intent intent = new Intent(context, ContextActivity.class);
intent.putExtra(Helper.ARG_STATUS, statusToDeal.quote);
context.startActivity(intent);
});
holder.binding.quotedMessage.cardviewContainer.setStrokeColor(ThemeHelper.getAttColor(context, R.attr.colorPrimary));
holder.binding.quotedMessage.statusContent.setText(
statusToDeal.quote.getSpanContent(context,
new WeakReference<>(holder.binding.quotedMessage.statusContent), null),
TextView.BufferType.SPANNABLE);
MastodonHelper.loadPPMastodon(holder.binding.quotedMessage.avatar, statusToDeal.quote.account);
if (statusToDeal.quote.account != null) {
holder.binding.quotedMessage.displayName.setText(
statusToDeal.quote.account.getSpanDisplayName(context,
new WeakReference<>(holder.binding.quotedMessage.displayName)),
TextView.BufferType.SPANNABLE);
holder.binding.quotedMessage.username.setText(String.format("@%s", statusToDeal.quote.account.acct));
}
if (statusToDeal.quote.spoiler_text != null && !statusToDeal.quote.spoiler_text.trim().isEmpty()) {
holder.binding.quotedMessage.spoiler.setVisibility(View.VISIBLE);
holder.binding.quotedMessage.spoiler.setText(
statusToDeal.quote.getSpanSpoiler(context,
new WeakReference<>(holder.binding.quotedMessage.spoiler), null),
TextView.BufferType.SPANNABLE);
} else {
holder.binding.quotedMessage.spoiler.setVisibility(View.GONE);
holder.binding.quotedMessage.spoiler.setText(null);
}
holder.binding.quotedMessage.cardviewContainer.setVisibility(View.VISIBLE);
} else {
holder.binding.quotedMessage.cardviewContainer.setVisibility(View.GONE);
}
if (currentAccount != null && currentAccount.api == Account.API.PLEROMA) {
if (status.pleroma != null && status.pleroma.emoji_reactions != null && status.pleroma.emoji_reactions.size() > 0) {
holder.binding.layoutReactions.getRoot().setVisibility(View.VISIBLE);
@ -498,8 +555,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
int paddingDp = (int) (paddingPixel * density);
builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
builder.setTitle(R.string.insert_emoji);
if (emojis != null && emojis.size() > 0 && emojis.get(BaseMainActivity.currentInstance) != null) {
if (emojis != null && emojis.size() > 0) {
GridView gridView = new GridView(context);
gridView.setAdapter(new EmojiAdapter(emojis.get(BaseMainActivity.currentInstance)));
gridView.setNumColumns(5);
@ -508,9 +564,6 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
String url = emojis.get(BaseMainActivity.currentInstance).get(index).url;
String static_url = emojis.get(BaseMainActivity.currentInstance).get(index).static_url;
boolean alreadyAdded = false;
if (status.pleroma == null || status.pleroma.emoji_reactions == null) {
return;
}
for (Reaction reaction : status.pleroma.emoji_reactions) {
if (reaction.name.compareTo(emojiStr) == 0 && reaction.me) {
alreadyAdded = true;
@ -553,9 +606,21 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
int truncate_toots_size = sharedpreferences.getInt(context.getString(R.string.SET_TRUNCATE_TOOTS_SIZE), 0);
if (currentAccount != null && currentAccount.api == Account.API.PLEROMA) {
holder.binding.statusAddCustomEmoji.setVisibility(View.VISIBLE);
holder.binding.statusEmoji.setVisibility(View.VISIBLE);
if (extraFeatures) {
if (displayQuote) {
holder.binding.actionButtonQuote.setVisibility(View.VISIBLE);
} else {
holder.binding.actionButtonQuote.setVisibility(View.GONE);
}
if (displayReactions) {
holder.binding.statusAddCustomEmoji.setVisibility(View.VISIBLE);
holder.binding.statusEmoji.setVisibility(View.VISIBLE);
} else {
holder.binding.statusAddCustomEmoji.setVisibility(View.GONE);
holder.binding.statusEmoji.setVisibility(View.GONE);
}
}
holder.binding.actionButtonFavorite.pressOnTouch(false);
@ -611,7 +676,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
}
}
if (statusToDeal.card != null && (display_card || statusToDeal.isFocused)) {
if (statusToDeal.card != null && (display_card || statusToDeal.isFocused) && statusToDeal.quote_id == null) {
if (statusToDeal.card.width > statusToDeal.card.height) {
holder.binding.cardImageHorizontal.setVisibility(View.VISIBLE);
holder.binding.cardImageVertical.setVisibility(View.GONE);
@ -951,6 +1016,11 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
holder.binding.statusAddCustomEmoji.getLayoutParams().width = (int) (normalSize * scaleIcon);
holder.binding.statusAddCustomEmoji.getLayoutParams().height = (int) (normalSize * scaleIcon);
holder.binding.statusAddCustomEmoji.requestLayout();
holder.binding.actionButtonQuote.getLayoutParams().width = (int) (normalSize * scaleIcon);
holder.binding.actionButtonQuote.getLayoutParams().height = (int) (normalSize * scaleIcon);
holder.binding.actionButtonQuote.requestLayout();
holder.binding.statusEmoji.getLayoutParams().width = (int) (normalSize * scaleIcon);
holder.binding.statusEmoji.getLayoutParams().height = (int) (normalSize * scaleIcon);
holder.binding.actionButtonMore.getLayoutParams().width = (int) (normalSize * scaleIcon);
@ -1172,7 +1242,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
holder.binding.mediaContainer.setVisibility(View.GONE);
} else {
holder.binding.statusContent.setVisibility(View.VISIBLE);
if (statusToDeal.card != null && (display_card || statusToDeal.isFocused)) {
if (statusToDeal.card != null && statusToDeal.quote_id == null && (display_card || statusToDeal.isFocused)) {
holder.binding.card.setVisibility(View.VISIBLE);
} else {
holder.binding.card.setVisibility(View.GONE);
@ -1903,6 +1973,11 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
CrossActionHelper.doCrossAction(context, CrossActionHelper.TypeOfCrossAction.REPLY_ACTION, null, statusToDeal);
return true;
});
holder.binding.actionButtonQuote.setOnClickListener(v -> {
Intent intent = new Intent(context, ComposeActivity.class);
intent.putExtra(Helper.ARG_QUOTED_MESSAGE, statusToDeal);
context.startActivity(intent);
});
holder.binding.actionButtonReply.setOnClickListener(v -> {
if (remote) {
Toasty.info(context, context.getString(R.string.retrieve_remote_status), Toasty.LENGTH_SHORT).show();
@ -2286,6 +2361,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
if (theme_icons_color != -1) {
Helper.changeDrawableColor(context, holder.binding.actionButtonReply, theme_icons_color);
Helper.changeDrawableColor(context, holder.binding.statusAddCustomEmoji, theme_icons_color);
Helper.changeDrawableColor(context, holder.binding.actionButtonQuote, theme_icons_color);
Helper.changeDrawableColor(context, holder.binding.statusEmoji, theme_icons_color);
Helper.changeDrawableColor(context, holder.binding.actionButtonMore, theme_icons_color);
Helper.changeDrawableColor(context, R.drawable.ic_round_star_24, theme_icons_color);

View File

@ -0,0 +1,142 @@
package app.fedilab.android.ui.fragment.settings;
/* Copyright 2022 Thomas Schneider
*
* This file is a part of Fedilab
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with Fedilab; if not,
* see <http://www.gnu.org/licenses>. */
import android.content.SharedPreferences;
import android.os.Bundle;
import androidx.preference.ListPreference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreferenceCompat;
import app.fedilab.android.R;
import app.fedilab.android.activities.MainActivity;
import app.fedilab.android.helper.Helper;
public class FragmentExtraFeaturesSettings extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.pref_extra_features);
createPref();
}
private void createPref() {
getPreferenceScreen().removeAll();
addPreferencesFromResource(R.xml.pref_extra_features);
PreferenceScreen preferenceScreen = getPreferenceScreen();
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity());
SwitchPreferenceCompat SET_EXTAND_EXTRA_FEATURES = findPreference(getString(R.string.SET_EXTAND_EXTRA_FEATURES));
if (SET_EXTAND_EXTRA_FEATURES != null) {
boolean checked = sharedpreferences.getBoolean(getString(R.string.SET_EXTAND_EXTRA_FEATURES) + MainActivity.currentUserID + MainActivity.currentInstance, false);
SET_EXTAND_EXTRA_FEATURES.setChecked(checked);
}
SwitchPreferenceCompat SET_DISPLAY_BOOKMARK = findPreference(getString(R.string.SET_DISPLAY_BOOKMARK));
if (SET_DISPLAY_BOOKMARK != null) {
boolean checked = sharedpreferences.getBoolean(getString(R.string.SET_DISPLAY_BOOKMARK) + MainActivity.currentUserID + MainActivity.currentInstance, true);
SET_DISPLAY_BOOKMARK.setChecked(checked);
}
SwitchPreferenceCompat SET_DISPLAY_TRANSLATE = findPreference(getString(R.string.SET_DISPLAY_TRANSLATE));
if (SET_DISPLAY_TRANSLATE != null) {
boolean checked = sharedpreferences.getBoolean(getString(R.string.SET_DISPLAY_TRANSLATE) + MainActivity.currentUserID + MainActivity.currentInstance, false);
SET_DISPLAY_TRANSLATE.setChecked(checked);
}
SwitchPreferenceCompat SET_DISPLAY_QUOTES = findPreference(getString(R.string.SET_DISPLAY_QUOTES));
if (SET_DISPLAY_QUOTES != null) {
boolean checked = sharedpreferences.getBoolean(getString(R.string.SET_DISPLAY_QUOTES) + MainActivity.currentUserID + MainActivity.currentInstance, true);
SET_DISPLAY_QUOTES.setChecked(checked);
}
SwitchPreferenceCompat SET_DISPLAY_REACTIONS = findPreference(getString(R.string.SET_DISPLAY_REACTIONS));
if (SET_DISPLAY_REACTIONS != null) {
boolean checked = sharedpreferences.getBoolean(getString(R.string.SET_DISPLAY_REACTIONS) + MainActivity.currentUserID + MainActivity.currentInstance, true);
SET_DISPLAY_REACTIONS.setChecked(checked);
}
ListPreference SET_POST_FORMAT = findPreference(getString(R.string.SET_POST_FORMAT));
if (SET_POST_FORMAT != null) {
SET_POST_FORMAT.getContext().setTheme(Helper.dialogStyle());
String format = sharedpreferences.getString(getString(R.string.SET_POST_FORMAT) + MainActivity.currentUserID + MainActivity.currentInstance, "text/plain");
SET_POST_FORMAT.setValue(format);
}
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (getActivity() != null) {
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity());
SharedPreferences.Editor editor = sharedpreferences.edit();
if (key.compareToIgnoreCase(getString(R.string.SET_EXTAND_EXTRA_FEATURES)) == 0) {
SwitchPreferenceCompat SET_EXTAND_EXTRA_FEATURES = findPreference(getString(R.string.SET_EXTAND_EXTRA_FEATURES));
if (SET_EXTAND_EXTRA_FEATURES != null) {
editor.putBoolean(getString(R.string.SET_EXTAND_EXTRA_FEATURES) + MainActivity.currentUserID + MainActivity.currentInstance, SET_EXTAND_EXTRA_FEATURES.isChecked());
}
}
if (key.compareToIgnoreCase(getString(R.string.SET_DISPLAY_BOOKMARK)) == 0) {
SwitchPreferenceCompat SET_DISPLAY_BOOKMARK = findPreference(getString(R.string.SET_DISPLAY_BOOKMARK));
if (SET_DISPLAY_BOOKMARK != null) {
editor.putBoolean(getString(R.string.SET_DISPLAY_BOOKMARK) + MainActivity.currentUserID + MainActivity.currentInstance, SET_DISPLAY_BOOKMARK.isChecked());
}
}
if (key.compareToIgnoreCase(getString(R.string.SET_DISPLAY_TRANSLATE)) == 0) {
SwitchPreferenceCompat SET_DISPLAY_TRANSLATE = findPreference(getString(R.string.SET_DISPLAY_TRANSLATE));
if (SET_DISPLAY_TRANSLATE != null) {
editor.putBoolean(getString(R.string.SET_DISPLAY_TRANSLATE) + MainActivity.currentUserID + MainActivity.currentInstance, SET_DISPLAY_TRANSLATE.isChecked());
}
}
if (key.compareToIgnoreCase(getString(R.string.SET_DISPLAY_QUOTES)) == 0) {
SwitchPreferenceCompat SET_DISPLAY_QUOTES = findPreference(getString(R.string.SET_DISPLAY_QUOTES));
if (SET_DISPLAY_QUOTES != null) {
editor.putBoolean(getString(R.string.SET_DISPLAY_QUOTES) + MainActivity.currentUserID + MainActivity.currentInstance, SET_DISPLAY_QUOTES.isChecked());
}
}
if (key.compareToIgnoreCase(getString(R.string.SET_DISPLAY_REACTIONS)) == 0) {
SwitchPreferenceCompat SET_DISPLAY_REACTIONS = findPreference(getString(R.string.SET_DISPLAY_REACTIONS));
if (SET_DISPLAY_REACTIONS != null) {
editor.putBoolean(getString(R.string.SET_DISPLAY_REACTIONS) + MainActivity.currentUserID + MainActivity.currentInstance, SET_DISPLAY_REACTIONS.isChecked());
}
}
if (key.compareToIgnoreCase(getString(R.string.SET_POST_FORMAT)) == 0) {
ListPreference SET_POST_FORMAT = findPreference(getString(R.string.SET_POST_FORMAT));
if (SET_POST_FORMAT != null) {
editor.putString(getString(R.string.SET_POST_FORMAT) + MainActivity.currentUserID + MainActivity.currentInstance, SET_POST_FORMAT.getValue());
}
}
editor.apply();
}
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
}

View File

@ -27,9 +27,11 @@ import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.preference.SeekBarPreference;
import androidx.preference.SwitchPreferenceCompat;
import app.fedilab.android.BuildConfig;
import app.fedilab.android.R;
import app.fedilab.android.activities.MainActivity;
import app.fedilab.android.helper.Helper;
import app.fedilab.android.helper.LogoHelper;
import es.dmoral.toasty.Toasty;
@ -67,6 +69,12 @@ public class FragmentInterfaceSettings extends PreferenceFragmentCompat implemen
SET_LOGO_LAUNCHER.getContext().setTheme(Helper.dialogStyle());
SET_LOGO_LAUNCHER.setIcon(LogoHelper.getDrawable(SET_LOGO_LAUNCHER.getValue()));
}
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity());
SwitchPreferenceCompat SET_EXTAND_EXTRA_FEATURES = findPreference(getString(R.string.SET_EXTAND_EXTRA_FEATURES));
if (SET_EXTAND_EXTRA_FEATURES != null) {
boolean checked = sharedpreferences.getBoolean(getString(R.string.SET_EXTAND_EXTRA_FEATURES) + MainActivity.currentUserID + MainActivity.currentInstance, false);
SET_EXTAND_EXTRA_FEATURES.setChecked(checked);
}
recreate = false;
}
@ -81,6 +89,7 @@ public class FragmentInterfaceSettings extends PreferenceFragmentCompat implemen
editor.putFloat(getString(R.string.SET_FONT_SCALE), scale);
recreate = true;
}
if (key.compareToIgnoreCase(getString(R.string.SET_FONT_SCALE_ICON_INT)) == 0) {
int progress = sharedPreferences.getInt(getString(R.string.SET_FONT_SCALE_ICON_INT), 110);
float scale = (float) (progress) / 100.0f;
@ -94,6 +103,13 @@ public class FragmentInterfaceSettings extends PreferenceFragmentCompat implemen
recreate = true;
}
if (key.compareToIgnoreCase(getString(R.string.SET_EXTAND_EXTRA_FEATURES)) == 0) {
SwitchPreferenceCompat SET_EXTAND_EXTRA_FEATURES = findPreference(getString(R.string.SET_EXTAND_EXTRA_FEATURES));
if (SET_EXTAND_EXTRA_FEATURES != null) {
editor.putBoolean(getString(R.string.SET_EXTAND_EXTRA_FEATURES) + MainActivity.currentUserID + MainActivity.currentInstance, SET_EXTAND_EXTRA_FEATURES.isChecked());
}
recreate = true;
}
if (key.compareToIgnoreCase(getString(R.string.SET_LOGO_LAUNCHER)) == 0) {
ListPreference SET_LOGO_LAUNCHER = findPreference(getString(R.string.SET_LOGO_LAUNCHER));
if (SET_LOGO_LAUNCHER != null) {

View File

@ -121,6 +121,16 @@ public class FragmentSettingsCategories extends PreferenceFragmentCompat {
return false;
});
}
Preference pref_category_key_extra_features = findPreference(getString(R.string.pref_category_key_extra_features));
if (pref_category_key_extra_features != null) {
pref_category_key_extra_features.setOnPreferenceClickListener(preference -> {
NavController navController = Navigation.findNavController(requireActivity(), R.id.fragment_container);
navController.navigate(FragmentSettingsCategoriesDirections.Companion.categoriesToExtraFeatures());
return false;
});
}
ActivityResultLauncher<String> permissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
if (isGranted) {
try {

View File

@ -22,8 +22,10 @@ import androidx.preference.ListPreference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreferenceCompat;
import app.fedilab.android.R;
import app.fedilab.android.activities.MainActivity;
import app.fedilab.android.helper.Helper;
public class FragmentTimelinesSettings extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
@ -37,6 +39,7 @@ public class FragmentTimelinesSettings extends PreferenceFragmentCompat implemen
private void createPref() {
getPreferenceScreen().removeAll();
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity());
addPreferencesFromResource(R.xml.pref_timelines);
PreferenceScreen preferenceScreen = getPreferenceScreen();
ListPreference SET_LOAD_MEDIA_TYPE = findPreference(getString(R.string.SET_LOAD_MEDIA_TYPE));
@ -60,6 +63,16 @@ public class FragmentTimelinesSettings extends PreferenceFragmentCompat implemen
preferenceScreen.removePreferenceRecursively("SET_TRANSLATOR_VERSION");
}
}
SwitchPreferenceCompat SET_DISPLAY_BOOKMARK = findPreference(getString(R.string.SET_DISPLAY_BOOKMARK));
if (SET_DISPLAY_BOOKMARK != null) {
boolean checked = sharedpreferences.getBoolean(getString(R.string.SET_DISPLAY_BOOKMARK) + MainActivity.currentUserID + MainActivity.currentInstance, true);
SET_DISPLAY_BOOKMARK.setChecked(checked);
}
SwitchPreferenceCompat SET_DISPLAY_TRANSLATE = findPreference(getString(R.string.SET_DISPLAY_TRANSLATE));
if (SET_DISPLAY_TRANSLATE != null) {
boolean checked = sharedpreferences.getBoolean(getString(R.string.SET_DISPLAY_TRANSLATE) + MainActivity.currentUserID + MainActivity.currentInstance, false);
SET_DISPLAY_TRANSLATE.setChecked(checked);
}
}
@Override
@ -67,10 +80,22 @@ public class FragmentTimelinesSettings extends PreferenceFragmentCompat implemen
if (getActivity() != null) {
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity());
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.apply();
if (key.compareToIgnoreCase(getString(R.string.SET_TRANSLATOR)) == 0) {
createPref();
}
if (key.compareToIgnoreCase(getString(R.string.SET_DISPLAY_BOOKMARK)) == 0) {
SwitchPreferenceCompat SET_DISPLAY_BOOKMARK = findPreference(getString(R.string.SET_DISPLAY_BOOKMARK));
if (SET_DISPLAY_BOOKMARK != null) {
editor.putBoolean(getString(R.string.SET_DISPLAY_BOOKMARK) + MainActivity.currentUserID + MainActivity.currentInstance, SET_DISPLAY_BOOKMARK.isChecked());
}
}
if (key.compareToIgnoreCase(getString(R.string.SET_DISPLAY_TRANSLATE)) == 0) {
SwitchPreferenceCompat SET_DISPLAY_TRANSLATE = findPreference(getString(R.string.SET_DISPLAY_TRANSLATE));
if (SET_DISPLAY_TRANSLATE != null) {
editor.putBoolean(getString(R.string.SET_DISPLAY_TRANSLATE) + MainActivity.currentUserID + MainActivity.currentInstance, SET_DISPLAY_TRANSLATE.isChecked());
}
}
editor.apply();
}
}

View File

@ -186,12 +186,14 @@ public class StatusesVM extends AndroidViewModel {
Boolean sensitive,
String spoiler_text,
String visibility,
String language) {
String language,
String quote_id,
String content_type) {
MastodonStatusesService mastodonStatusesService = init(instance);
statusMutableLiveData = new MutableLiveData<>();
new Thread(() -> {
Call<Status> statusCall = mastodonStatusesService.createStatus(idempotency_Key, token, text, media_ids, poll_options, poll_expire_in,
poll_multiple, poll_hide_totals, in_reply_to_id, sensitive, spoiler_text, visibility, language);
poll_multiple, poll_hide_totals, in_reply_to_id, sensitive, spoiler_text, visibility, language, quote_id, content_type);
Status status = null;
if (statusCall != null) {
try {

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/black"
android:pathData="M20.5,11H19V7c0,-1.1 -0.9,-2 -2,-2h-4V3.5C13,2.12 11.88,1 10.5,1S8,2.12 8,3.5V5H4c-1.1,0 -1.99,0.9 -1.99,2v3.8H3.5c1.49,0 2.7,1.21 2.7,2.7s-1.21,2.7 -2.7,2.7H2V20c0,1.1 0.9,2 2,2h3.8v-1.5c0,-1.49 1.21,-2.7 2.7,-2.7 1.49,0 2.7,1.21 2.7,2.7V22H17c1.1,0 2,-0.9 2,-2v-4h1.5c1.38,0 2.5,-1.12 2.5,-2.5S21.88,11 20.5,11z" />
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?attr/colorControlNormal"
android:pathData="M6,17h3l2,-4L11,7L5,7v6h3zM14,17h3l2,-4L19,7h-6v6h3z" />
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="#FFFFFF"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M9,4v3h5v12h3L17,7h5L22,4L9,4zM3,12h3v7h3v-7h3L12,9L3,9v3z" />
</vector>

View File

@ -0,0 +1,9 @@
<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="@android:color/white"
android:pathData="M21.71,11.29l-9,-9c-0.39,-0.39 -1.02,-0.39 -1.41,0l-9,9c-0.39,0.39 -0.39,1.02 0,1.41l9,9c0.39,0.39 1.02,0.39 1.41,0l9,-9c0.39,-0.38 0.39,-1.01 0,-1.41zM14,14.5V12h-4v2c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1v-3c0,-0.55 0.45,-1 1,-1h5V7.5l3.15,3.15c0.2,0.2 0.2,0.51 0,0.71L14,14.5z" />
</vector>

View File

@ -0,0 +1,9 @@
<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="@android:color/white"
android:pathData="M15,20H5V7c0,-0.55 -0.45,-1 -1,-1h0C3.45,6 3,6.45 3,7v13c0,1.1 0.9,2 2,2h10c0.55,0 1,-0.45 1,-1v0C16,20.45 15.55,20 15,20zM20,16V4c0,-1.1 -0.9,-2 -2,-2H9C7.9,2 7,2.9 7,4v12c0,1.1 0.9,2 2,2h9C19.1,18 20,17.1 20,16zM18,16H9V4h9V16z" />
</vector>

View File

@ -0,0 +1,9 @@
<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="@android:color/white"
android:pathData="M17,7h-3c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h3c1.65,0 3,1.35 3,3s-1.35,3 -3,3h-3c-0.55,0 -1,0.45 -1,1c0,0.55 0.45,1 1,1h3c2.76,0 5,-2.24 5,-5S19.76,7 17,7zM8,12c0,0.55 0.45,1 1,1h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1H9C8.45,11 8,11.45 8,12zM10,15H7c-1.65,0 -3,-1.35 -3,-3s1.35,-3 3,-3h3c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1H7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5h3c0.55,0 1,-0.45 1,-1C11,15.45 10.55,15 10,15z" />
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M18,19H6c-0.55,0 -1,-0.45 -1,-1V6c0,-0.55 0.45,-1 1,-1h5c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1H5c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2v-6c0,-0.55 -0.45,-1 -1,-1s-1,0.45 -1,1v5c0,0.55 -0.45,1 -1,1zM14,4c0,0.55 0.45,1 1,1h2.59l-9.13,9.13c-0.39,0.39 -0.39,1.02 0,1.41 0.39,0.39 1.02,0.39 1.41,0L19,6.41V9c0,0.55 0.45,1 1,1s1,-0.45 1,-1V4c0,-0.55 -0.45,-1 -1,-1h-5c-0.55,0 -1,0.45 -1,1z" />
</vector>

View File

@ -0,0 +1,9 @@
<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="@android:color/white"
android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92s2.92,-1.31 2.92,-2.92 -1.31,-2.92 -2.92,-2.92z" />
</vector>

View File

@ -394,6 +394,12 @@
</com.google.android.material.card.MaterialCardView>
<include
android:id="@+id/quoted_message"
layout="@layout/drawer_status_simple"
android:visibility="gone"
tools:visibility="visible" />
<com.google.android.material.button.MaterialButton
android:id="@+id/display_media"
android:layout_width="wrap_content"
@ -628,7 +634,7 @@
<com.varunest.sparkbutton.SparkButton
android:id="@+id/action_button_boost"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/action_button_favorite"
app:layout_constraintEnd_toStartOf="@+id/action_button_quote"
app:layout_constraintStart_toEndOf="@+id/action_button_reply_container"
app:layout_constraintTop_toTopOf="parent"
android:layout_width="48dp"
@ -642,11 +648,29 @@
app:sparkbutton_primaryColor="@color/boost_icon"
app:sparkbutton_secondaryColor="@color/boost_icon" />
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/action_button_quote"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:background="@color/transparent"
android:clickable="true"
android:contentDescription="@string/translate"
android:focusable="true"
android:src="@drawable/ic_baseline_format_quote_24"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/action_button_favorite"
app:layout_constraintStart_toEndOf="@+id/action_button_boost"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
<com.varunest.sparkbutton.SparkButton
android:id="@+id/action_button_favorite"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/action_button_bookmark"
app:layout_constraintStart_toEndOf="@+id/action_button_boost"
app:layout_constraintStart_toEndOf="@+id/action_button_quote"
app:layout_constraintTop_toTopOf="parent"
android:layout_width="48dp"
android:layout_height="48dp"

View File

@ -91,6 +91,18 @@
app:layout_constraintTop_toBottomOf="@id/button_emoji"
tools:visibility="visible" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_text_format"
style="@style/Fedilab.SmallIconButton"
android:layout_marginEnd="6dp"
android:contentDescription="@string/post_format"
android:visibility="gone"
app:icon="@drawable/ic_baseline_format_size_24"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/button_emoji_one"
tools:visibility="visible" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/sensitive_media"
android:layout_width="0dp"

View File

@ -34,6 +34,7 @@
android:background="?colorOutline" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/main_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dp"

View File

@ -3,67 +3,52 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
android:orientation="vertical"
android:padding="@dimen/fab_margin">
android:padding="12dp">
<androidx.appcompat.widget.AppCompatTextView
<com.google.android.material.button.MaterialButton
android:id="@+id/display_full_link"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:drawableEnd="@drawable/ic_baseline_navigate_next_24"
android:text="@string/display_full_link"
android:textColor="?colorPrimary"
android:textSize="16sp"
app:drawableTint="?colorPrimary" />
android:textAlignment="textStart"
app:icon="@drawable/ic_full_link" />
<androidx.appcompat.widget.AppCompatTextView
<com.google.android.material.button.MaterialButton
android:id="@+id/share_link"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:drawableEnd="@drawable/ic_baseline_navigate_next_24"
android:text="@string/share_link"
android:textColor="?colorPrimary"
android:textSize="16sp"
app:drawableTint="?colorPrimary" />
android:textAlignment="textStart"
app:icon="@drawable/ic_share_link" />
<androidx.appcompat.widget.AppCompatTextView
<com.google.android.material.button.MaterialButton
android:id="@+id/open_other_app"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:drawableEnd="@drawable/ic_baseline_navigate_next_24"
android:text="@string/open_other_app"
android:textColor="?colorPrimary"
android:textSize="16sp"
app:drawableTint="?colorPrimary" />
android:textAlignment="textStart"
app:icon="@drawable/ic_open_external" />
<androidx.appcompat.widget.AppCompatTextView
<com.google.android.material.button.MaterialButton
android:id="@+id/copy_link"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:drawableEnd="@drawable/ic_baseline_navigate_next_24"
android:text="@string/copy_link"
android:textColor="?colorPrimary"
android:textSize="16sp"
app:drawableTint="?colorPrimary" />
android:textAlignment="textStart"
app:icon="@drawable/ic_copy_link" />
<androidx.appcompat.widget.AppCompatTextView
<com.google.android.material.button.MaterialButton
android:id="@+id/check_redirect"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:drawableEnd="@drawable/ic_baseline_navigate_next_24"
android:text="@string/check_redirect"
android:textColor="?colorPrimary"
android:textSize="16sp"
app:drawableTint="?colorPrimary" />
android:textAlignment="textStart"
app:icon="@drawable/ic_check_redirect" />
</LinearLayout>

View File

@ -68,6 +68,14 @@
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit" />
<action
android:id="@+id/categories_to_extra_features"
app:destination="@id/FragmentExtraFeaturesSettings"
app:enterAnim="@anim/enter"
app:exitAnim="@anim/exit"
app:popEnterAnim="@anim/pop_enter"
app:popExitAnim="@anim/pop_exit" />
</fragment>
<fragment
@ -105,6 +113,11 @@
android:name="app.fedilab.android.ui.fragment.settings.FragmentLanguageSettings"
android:label="@string/languages" />
<fragment
android:id="@+id/FragmentExtraFeaturesSettings"
android:name="app.fedilab.android.ui.fragment.settings.FragmentExtraFeaturesSettings"
android:label="@string/set_extand_extra_features_title" />
<fragment
android:id="@+id/FragmentCustomLightSettings"
android:name="app.fedilab.android.ui.fragment.settings.FragmentCustomLightSettings"

View File

@ -946,4 +946,9 @@
<string name="report_all_more">Vyberte vše, co vyhovuje</string>
<string name="set_remove_left_margin_title">Odstranit levý okraj</string>
<string name="set_remove_left_margin">Odstranit v časových osách levý okraj, aby se zprávy zobrazovaly kompaktněji</string>
<string name="translator">Překladač</string>
<string name="set_translator">Překladač</string>
<string name="api_key">Klíč pro API překladače</string>
<string name="version">Verze</string>
<string name="set_translator_version">Verze překladače</string>
</resources>

View File

@ -18,7 +18,7 @@
<string name="email">E-Mail</string>
<string name="accounts">Konten</string>
<string name="toots">Nachrichten</string>
<string name="tags">Schlagwörter (tags)</string>
<string name="tags">Hashtags</string>
<string name="save">Speichern</string>
<string name="instance">Instanz</string>
<string name="instance_example">Instanz: mastodon.social</string>
@ -36,7 +36,7 @@
<string name="validate">Bestätigen</string>
<string name="media">Medien</string>
<string name="share_with">Teilen mit</string>
<string name="shared_via">Geteilt von Fedilab</string>
<string name="shared_via">Geteilt mit Fedilab</string>
<string name="replies">Antworten</string>
<string name="username">Benutzername</string>
<string name="drafts">Entwürfe</string>
@ -61,10 +61,10 @@
<string name="disclaimer_full">Die folgenden Informationen könnten das Profil des Nutzers unvollständig wiedergeben.</string>
<string name="insert_emoji">Emoji einfügen</string>
<string name="no_emoji">Die App verfügt derzeit nicht über benutzerdefinierte Emojis.</string>
<string name="logout_account_confirmation">Sind Du sicher, dass Sie @%1$s@%2$s abmelden möchten\?</string>
<string name="logout_account_confirmation">Bist Du sicher, dass Du Dich von @%1$s@%2$s abmelden möchtest\?</string>
<!-- Status -->
<string name="no_status">Keine Nachrichten zum Anzeigen</string>
<string name="favourite_add">Diese Nachricht deinen Favoriten hinzufügen\?</string>
<string name="favourite_add">Diese Nachricht Deinen Favoriten hinzufügen\?</string>
<string name="favourite_remove">Diese Nachricht aus Ihren Favoriten entfernen\?</string>
<string name="reblog_add">Diese Nachricht teilen\?</string>
<string name="reblog_remove">Geteilte Nachricht zurückziehen\?</string>
@ -75,7 +75,7 @@
<string name="more_action_5">Kopieren</string>
<string name="more_action_6">Teilen</string>
<string name="more_action_7">Erwähnen</string>
<string name="more_action_8">Zeitlich begrenzt lautlos schalten</string>
<string name="more_action_8">Zeitlich begrenzt stumm schalten</string>
<string name="more_action_9">Löschen &amp; neu entwerfen</string>
<string-array name="more_action_confirm">
<item>Lautlosmodus für dieses Konto aktivieren?</item>
@ -152,17 +152,19 @@
<string name="no_scheduled_toots">Keine geplanten Nachrichten vorhanden!</string>
<string name="remove_scheduled">Geplante Nachricht löschen\?</string>
<string name="toot_scheduled">Die Nachricht wurde geplant!</string>
<string name="toot_scheduled_date">Der geplante Termin muss nach dem aktuellen Zeitpunkt liegen!</string>
<string name="toot_scheduled_date">Der geplante Termin muss in der Zukunft liegen!</string>
<!-- timed mute -->
<string name="timed_mute_date_error">Die Dauer für den Lautlosmodus sollte mehr als eine Minute betragen.</string>
<string name="timed_mute_date">%1$s wurde bis %2$s lautlos geschaltet.\n Du kannst den Lautlosmodus für diesen Nutzer beenden, indem du sein/ihr Profil besuchst.</string>
<string name="timed_mute_profile">%1$s ist bis %2$s lautlos geschaltet.\n Hier antippen, um den Lautlosmodus zu beenden.</string>
<string name="timed_mute_date_error">Die Dauer für die Stummschaltung sollte mehr als eine Minute betragen.</string>
<string name="timed_mute_date">%1$s wurde bis %2$s lautlos geschaltet.
\n Du kannst die Stummschaltung für diese Person beenden, indem Du ihr Profil besuchst.</string>
<string name="timed_mute_profile">%1$s ist bis %2$s stumm geschaltet.
\n Hier antippen, um die Stummschaltung zu beenden.</string>
<!-- Notifications -->
<string name="no_notifications">Keine Benachrichtigungen</string>
<string name="notif_mention">hat dich erwähnt</string>
<string name="notif_status">hat eine neue Nachricht geschrieben</string>
<string name="notif_reblog">hat deinen Beitrag geteilt</string>
<string name="notif_favourite">hat deinen Status favorisiert</string>
<string name="notif_reblog">hat Deinen Beitrag geteilt</string>
<string name="notif_favourite">hat Deinen Status favorisiert</string>
<string name="notif_follow">folgt dir</string>
<string name="notif_follow_request">fragte, dir zu folgen</string>
<string name="delete_notification_ask_all">Entferne alle Benachrichtigungen?</string>
@ -173,14 +175,14 @@
<string name="client_error">Fehler beim Laden der Client ID!</string>
<string name="toast_block">Konto wurde gesperrt!</string>
<string name="toast_unblock">Das Konto wurde entsperrt!</string>
<string name="toast_mute">Nutzer wurde lautlos geschaltet!</string>
<string name="toast_unmute">Lautlosmodus für dieses Konto aufgehoben!</string>
<string name="toast_mute">Nutzer wurde stumm geschaltet!</string>
<string name="toast_unmute">Stummschaltung für dieses Konto aufgehoben!</string>
<string name="toast_follow">Du folgst dem Nutzer!</string>
<string name="toast_unfollow">Du folgst dem Nutzer nicht mehr!</string>
<string name="toast_reblog">Die Nachricht wurde geteilt!</string>
<string name="toast_unreblog">Die Nachricht wird nicht länger geteilt!</string>
<string name="toast_favourite">Die Nachricht wurde deinen Favoriten hinzugefügt!</string>
<string name="toast_unfavourite">Die Nachricht wurde aus deinen Favoriten entfernt!</string>
<string name="toast_favourite">Die Nachricht wurde Deinen Favoriten hinzugefügt!</string>
<string name="toast_unfavourite">Die Nachricht wurde aus Deinen Favoriten entfernt!</string>
<string name="toast_error">Es ist ein Fehler aufgetreten!</string>
<string name="toast_code_error">Ein Fehler ist aufgetreten! Die Instanz hat keinen Autorisierungscode gesendet!</string>
<string name="toast_error_instance">Der Name der Instanz scheint ungültig zu sein!</string>
@ -191,12 +193,12 @@
<!-- Settings -->
<string name="set_toots_page">Anzahl der Nachrichten pro Ladevorgang</string>
<string name="set_disable_gif">GIF Avatare deaktivieren</string>
<string name="set_notif_follow">mir jemand folgt</string>
<string name="set_notif_follow_share">jemand meinen Beitrag teilt</string>
<string name="set_notif_follow_add">jemand meinen Beitrag favorisiert</string>
<string name="set_notif_follow_mention">ich erwähnt werde</string>
<string name="set_notif_follow_poll">Benachrichtigen, sobald eine Umfrage beendet ist</string>
<string name="set_notif_status">Benachrichtigung über neue Beiträge aktivieren</string>
<string name="set_notif_follow">Benachrichtigung wenn mir jemand folgt</string>
<string name="set_notif_follow_share">Benachrichtigung wenn jemand meinen Beitrag teilt</string>
<string name="set_notif_follow_add">Benachrichtigung wenn jemand meinen Beitrag favorisiert</string>
<string name="set_notif_follow_mention">Benachrichtigung wenn ich erwähnt werde</string>
<string name="set_notif_follow_poll">Benachrichtigung wenn eine Umfrage beendet ist</string>
<string name="set_notif_status">Benachrichtigung über neue Beiträge</string>
<string name="set_share_validation">Bestätigungsdialog vor dem Teilen anzeigen</string>
<string name="set_share_validation_fav">Bestätigungsdialog vor dem Favorisieren anzeigen</string>
<string name="set_notify">Benachrichtigen?</string>
@ -225,8 +227,8 @@
</string-array>
<string name="action_follow">Folgen</string>
<string name="action_unblock">Nicht mehr blockieren</string>
<string name="action_mute">Lautlos</string>
<string name="action_unmute">Lautlosmodus beenden</string>
<string name="action_mute">Stumm</string>
<string name="action_unmute">Stummschaltung beenden</string>
<string name="request_sent">Anfrage gesendet</string>
<string name="followed_by">folgt dir</string>
<string name="set_capitalize">Ersten Buchstaben bei Antworten groß schreiben</string>
@ -252,7 +254,7 @@
<string name="delete">Löschen</string>
<!-- About lists -->
<string name="action_lists">Listen</string>
<string name="action_lists_confirm_delete">Möchtest du diese Liste wirklich dauerhaft löschen?</string>
<string name="action_lists_confirm_delete">Möchtest Du diese Liste wirklich dauerhaft löschen\?</string>
<string name="action_lists_add_to">Zur Liste hinzufügen</string>
<string name="action_lists_delete">Liste löschen</string>
<string name="action_lists_title_placeholder">Neuer Listentitel</string>
@ -260,7 +262,7 @@
<string name="action_lists_empty">Du hast noch keine Listen!</string>
<!-- Migration -->
<string name="account_moved_to">%1$s wurde verschoben nach %2$s</string>
<string name="media_ready">Media wurde geladen. Hier klicken zum anzeigen.</string>
<string name="media_ready">Datei wurde geladen. Hier klicken zum Anzeigen.</string>
<!-- Proxy -->
<string name="proxy_set">Proxy</string>
<string name="proxy_enable">Proxy aktivieren?</string>
@ -271,7 +273,7 @@
<string name="set_share_details">Nachricht-Details beim Teilen hinzufügen</string>
<string name="support_the_app_on_liberapay">Unterstütze die app auf Liberapay</string>
<string name="alert_regex">Es gibt einen Fehler im regulären Ausdruck!</string>
<string name="toast_instance_unavailable">Es wurden keine Zeitleisten in dieser Instanz gefunden!</string>
<string name="toast_instance_unavailable">Es wurden keine Timelines in dieser Instanz gefunden!</string>
<string name="follow_instance">Folge Instanz</string>
<string name="toast_instance_already_added">Du folgst dieser Instanz bereits!</string>
<string name="action_partnership">Partnerschaften</string>
@ -283,13 +285,13 @@
<string name="filters">Filter</string>
<string name="action_filters_empty_content">Keine Filter vorhanden. Du kannst durch Klicken auf \"+\" neue Filter erstellen.</string>
<string name="filter_keyword">Schlagwort oder Phrase</string>
<string name="context_home">Lokale Zeitleiste</string>
<string name="context_public">Öffentliche Zeitleiste</string>
<string name="context_home">Startseite</string>
<string name="context_public">Öffentliche Timeline</string>
<string name="context_notification">Benachrichtigungen</string>
<string name="context_conversation">Unterhaltungen</string>
<string name="filter_keyword_explanations">Wird unabhängig vom umgebenen Text oder Inhaltswarnung einer Nachricht verglichen</string>
<string name="context_drop">Entfernen anstatt zu verstecken</string>
<string name="context_drop_explanations">Gefilterte Nachrichten werden unwiderruflich verschwinden, selbst wenn der Filter später entfernt wurde</string>
<string name="context_drop_explanations">Gefilterte Nachrichten werden unwiderruflich verschwinden, selbst wenn der Filter später entfernt wird</string>
<string name="context_whole_word_explanations">Wenn das Schlüsselwort oder -phrase nur Buchstaben und Zahlen enthält, wird es nur angewendet werden, wenn es dem ganzen Wort entspricht</string>
<string name="context_whole_word">Ganzes Wort</string>
<string name="filter_context">Kontext filtern</string>
@ -309,7 +311,9 @@
<string name="channel_notif_media">Medien Download</string>
<string name="select_sound">Klingelton auswählen</string>
<string name="set_enable_time_slot">Zeitfenster aktivieren</string>
<string name="block_domain_confirm_message">Möchtest du %s wirklich sperren?\n\nEs werden keine Inhalte aus dieser Domain in einer öffentlichen Zeitleiste oder in deinen Benachrichtigungen angezeigt. Deine Follower aus dieser Domain werden entfernt.</string>
<string name="block_domain_confirm_message">Möchtest Du %s wirklich sperren\?
\n
\nEs werden keine Inhalte aus dieser Domain in einer öffentlichen Timeline oder in Deinen Benachrichtigungen angezeigt. Deine Follower aus dieser Domain werden entfernt.</string>
<string name="block_domain">Blockiere Domäne</string>
<string name="toast_block_domain">Die Domäne ist blockiert</string>
<string name="retrieve_remote_status">Rufe entfernten Status ab</string>
@ -323,7 +327,7 @@
<string name="set_truncate_toot">Kürze Nachrichten mit mehr als x Zeilen. Null bedeutet deaktiviert.</string>
<string name="display_toot_truncate">Mehr anzeigen</string>
<string name="hide_toot_truncate">Weniger anzeigen</string>
<string name="tags_already_stored">Dieses Schlagwort existiert bereits!</string>
<string name="tags_already_stored">Dieser Hashtag existiert bereits!</string>
<string name="schedule_boost">Teilen des Beitrags planen</string>
<string name="boost_scheduled">Teilen geplant!</string>
<string name="no_scheduled_boosts">Nichts geplant!</string>
@ -354,8 +358,8 @@
<string name="pixelfed_instance">Pixelfed-Instanz</string>
<string name="mastodon_instance">Mastodon-Instanz</string>
<string name="any_tags">Irgendwelche davon</string>
<string name="all_tags">Alle von denen</string>
<string name="none_tags">Keine von denen</string>
<string name="all_tags">Alle davon</string>
<string name="none_tags">Keine davon</string>
<string name="some_words_any">Eines dieser Wörter (durch Leerzeichen getrennt)</string>
<string name="some_words_all">Alle diese Wörter (durch Leerzeichen getrennt)</string>
<string name="some_tags">Wörter zum Filter hinzufügen (durch Leerzeichen getrennt)</string>
@ -368,7 +372,7 @@
<string name="share">Teilen</string>
<string name="toots_server">Nachrichten (Server)</string>
<string name="toots_client">Nachrichten (Gerät)</string>
<string name="settings_category_label_timelines">Zeitleisten</string>
<string name="settings_category_label_timelines">Timelines</string>
<string name="settings_category_label_interface">Benutzeroberfläche</string>
<string name="contact">Kontakte</string>
<string name="toot_select_file_error">Bei der Auswahl der Sicherungsdatei ist ein Problem aufgetreten!</string>
@ -378,8 +382,8 @@
<string name="calls_blocked">Von der Anwendung blockierte HTTP-Aufrufe</string>
<string name="list_of_blocked_domains">Liste der blockierten Aufrufe</string>
<string name="submit">Senden</string>
<string name="filter_timeline_with_a_tag">Zeitleiste mit Schlagwörtern filtern</string>
<string name="no_tags">Keine Schlagwörter</string>
<string name="filter_timeline_with_a_tag">Timeline mit Hashtags filtern</string>
<string name="no_tags">Keine Hashtags</string>
<string name="set_retrieve_metadata_share_from_extras">Metadaten abrufen, wenn die URL von anderen Apps geteilt wird</string>
<!-- end languages -->
<string name="create_poll">Umfrage erstellen</string>
@ -388,22 +392,22 @@
<string name="done">Fertig</string>
<string name="poll_finish_at">endet um %s</string>
<string name="vote">Abstimmen</string>
<string name="notif_poll">Eine Umfrage, in der du abgestimmt hast, ist beendet</string>
<string name="notif_poll">Eine Umfrage, in der Du abgestimmt hast, ist beendet</string>
<string name="notif_poll_self">Eine Ihrer Umfragen wurde beendet</string>
<string name="settings_category_notif_categories">Kategorien</string>
<string name="move_timeline">Zeitleiste verschieben</string>
<string name="hide_timeline">Zeitleiste ausblenden</string>
<string name="reorder_timelines">Verwaltung von Zeitleisten</string>
<string name="move_timeline">Timeline verschieben</string>
<string name="hide_timeline">Timeline ausblenden</string>
<string name="reorder_timelines">Verwaltung der Timelines</string>
<string name="reorder_list_deleted">Liste endgültig gelöscht</string>
<string name="reorder_instance_removed">Gefolgte Instanz entfernt</string>
<string name="reorder_tag_removed">Angeheftetes Schlagwort entfernt</string>
<string name="reorder_tag_removed">Angehefteter Hashtag entfernt</string>
<string name="undo">Widerrufen</string>
<string name="warning_main_timeline">Hauptzeitleisten können nur ausgeblendet werden!</string>
<string name="warning_main_timeline">Haupt-Timelines können nur ausgeblendet werden!</string>
<string name="set_sensitive_content">Medien immer als sensibel kennzeichnen</string>
<string name="gnu_instance">GNU-Instanz</string>
<string name="set_forward_tags">Schlagwörter in Antworten übernehmen</string>
<string name="set_forward_tags">Hashtags in Antworten übernehmen</string>
<string name="set_long_press_media">Lange Drücken, um Medien zu speichern</string>
<string name="add_tags">Schlagwörter verwalten</string>
<string name="add_tags">Hashtags verwalten</string>
<string name="display_name">Anzeigename</string>
<string name="label_emoji">Emoji</string>
<string name="label_text">Text</string>
@ -445,12 +449,12 @@
<string name="account_created">Konto erstellt!</string>
<string name="account_created_message"> Dein Konto wurde erfolgreich erstellt!
\n
\nDenke daran, deine E-Mail-Adresse innerhalb der nächsten 48 Stunden zu bestätigen.
\nDenke daran, Deine E-Mail-Adresse innerhalb der nächsten 48 Stunden zu bestätigen.
\n
\nDu kannst nun dein Konto verbinden, indem du <b>%1$s</b> in das erste Feld schreibst und auf die Schaltfläche <b>Verbinden</b> klickst.
\nDu kannst nun Dein Konto verbinden, indem Du <b>%1$s</b> in das erste Feld schreibst und auf die Schaltfläche <b>Verbinden</b> klickst.
\n
\n<b>Wichtig</b>: Wenn deine Instanz eine Bestätigung benötigt, erhältst du eine E-Mail, sobald sie geprüft wurde! </string>
<string name="save_draft">Möchtest du die Nachricht als Entwurf speichern?</string>
\n<b>Wichtig</b>: Wenn Deine Instanz eine Bestätigung benötigt, erhältst Du eine E-Mail, sobald sie geprüft wurde! </string>
<string name="save_draft">Möchtest Du die Nachricht als Entwurf speichern\?</string>
<string name="administration">Verwaltung</string>
<string name="reports">Berichte</string>
<string name="unresolved">Ungelöst</string>
@ -469,15 +473,15 @@
<string name="unsuspend">Unterbrechen widerrufen</string>
<string name="audio">Die Anwendung benötigt Zugriff auf die Audioaufzeichnung</string>
<string name="voice_message">Sprachnachricht</string>
<string name="set_enable_time_slot_indication">Innerhalb des Zeitfensters sendet die App Mitteilungen. Du kannst dieses Zeitfenster mit dem richtigen Drehwähler umkehren (d. h. leise).</string>
<string name="set_fit_preview_indication">Vorschauen in Zeitachsen werden nicht beschnitten</string>
<string name="set_capitalize_indication">Automatisches Einfügen eines Zeilenumbruchs nach der Anweisung den ersten Buchstaben groß zu schreiben</string>
<string name="set_enable_time_slot_indication">Innerhalb des Zeitfensters sendet die App Benachrichtigungen. Du kannst dieses Zeitfenster mit dem rechten Schieber zurücksetzen (d. h. leise).</string>
<string name="set_fit_preview_indication">Vorschauen in den Timelines werden nicht beschnitten</string>
<string name="set_capitalize_indication">Automatisches Einfügen eines Zeilenumbruchs nach einer Erwähnung, um den ersten Buchstaben groß zu schreiben</string>
<string name="settings_title_custom_sharing_indication">Ermöglicht es Inhaltserstellern, den Status ihrer RSS-Feeds zu teilen</string>
<string name="compose">Verfassen</string>
<string name="select">Auswählen</string>
<string name="add_instances">Instanz hinzufügen</string>
<string name="set_enable_crash_report">Absturzberichte aktivieren</string>
<string name="set_enable_crash_report_indication">Wenn aktiviert, wird lokal ein Absturzbericht erstellt. Anschließend kannst du diesen teilen.</string>
<string name="set_enable_crash_report_indication">Wenn aktiviert, wird ein Absturzbericht erstellt. Anschließend kannst Du diesen teilen.</string>
<string name="crash_title">Fedilab ist abgestürzt :(</string>
<string name="crash_message">Du kannst mir den Fehlerreport per E-Mail senden. Dies hilft mir bei der Fehlerbehebung:)\n\nDu kannst weitere Inhalte hinzufügen. Danke!</string>
<string name="visibility">Sichtbarkeit</string>
@ -503,37 +507,37 @@
<string name="poll_duplicated_entry">Ihre Umfrage kann keine doppelten Optionen haben!</string>
<string name="set_clear_cache_exit">Cache beim Verlassen löschen</string>
<string name="set_clear_cache_exit_indication">Der Cache (Medien, zwischengespeicherte Nachrichten, Daten aus dem eingebauten Browser) wird automatisch gelöscht, wenn die Anwendung verlassen wird.</string>
<string name="unfollow_confirm">Möchtest du diesem Konto nicht mehr folgen?</string>
<string name="set_unfollow_validation">Bestätigungsdialog anzeigen, bevor nicht mehr gefolgt wird</string>
<string name="unfollow_confirm">Möchtest Du diesem Konto nicht mehr folgen\?</string>
<string name="set_unfollow_validation">Bestätigungsdialog vor dem Entfolgen anzeigen</string>
<string name="replace_medium">Medium</string>
<string name="replace_medium_description">Nutze eine alternative Benutzeroberfläche für Medium</string>
<string name="replace_medium_host">Standard: scribe.rip</string>
<string name="set_push_notifications">Verwenden Du ein Push-Benachrichtigungssystem, um Benachrichtigungen in Echtzeit zu erhalten.</string>
<string name="set_push_notifications">Verwende ein Push-Benachrichtigungs-System, um Benachrichtigungen in Echtzeit zu erhalten.</string>
<string name="action_add_notes">Notizen hinzufügen</string>
<string name="note_for_account">Notizen für das Konto</string>
<string name="set_resize_picture_indication">Erlauben es, große Fotos in kleinere Bilder mit sehr weniger oder vernachlässigbaren Verlust der Qualität des Bildes zu komprimieren.</string>
<string name="set_resize_video_indication">Erlaube das Komprimieren von Videos während die Qualität erhalten bleibt.</string>
<string name="order_by">Sortieren nach</string>
<string name="link_color_title">Links</string>
<string name="link_color">Ändern Du die Farbe der Links (URLs, Erwähnungen, Tags, etc.) in Nachrichten</string>
<string name="boost_header_color_title">Reblogs Titel</string>
<string name="link_color">Ändert die Farbe der Links (URLs, Erwähnungen, Hashtags, etc.) in Nachrichten</string>
<string name="boost_header_color_title">Titelzeile des geteilten Beitrags</string>
<string name="displayname_title">Ändern der Farbe des Anzeigenamens oben in den Nachrichten</string>
<string name="username_title">Ändern der Farbe des Benutzernamens am Anfang von Nachrichten</string>
<string name="boost_header_color">Ändern der Farbe der Kopfzeile für Reblogs</string>
<string name="boost_header_color">Ändert die Farbe der Kopfzeile von geteilten Beiträgen</string>
<string name="background_status_title">Beiträge</string>
<string name="background_status">Hintergrundfarbe der posts in den timelines</string>
<string name="background_status">Hintergrundfarbe der Beiträge in den Timelines</string>
<string name="reset_color">Farben zurücksetzen</string>
<string name="clik_reset">Tippen Du hier, um alle Ihre benutzerdefinierten Farben zurückzusetzen</string>
<string name="clik_reset">Tippe hier, um all Deine benutzerdefinierten Farben zurückzusetzen</string>
<string name="reset">Zurücksetzen</string>
<string name="icons_color_title">Symbole</string>
<string name="icons_color">Farbe der unteren Symbole in Zeitleisten</string>
<string name="icons_color">Farbe der unteren Symbole in den Timelines</string>
<string name="logo_of_the_instance">Logo der Instanz</string>
<string name="edit_profile">Profil bearbeiten</string>
<string name="make_an_action">Aktion ausführen</string>
<string name="translation">Übersetzung</string>
<string name="text_color_title">Textfarbe</string>
<string name="text_color">Ändere die Textfarbe in Nachrichten</string>
<string name="pref_custom_theme">Verwenden Du ein benutzerdefiniertes Design</string>
<string name="pref_custom_theme">Verwende ein benutzerdefiniertes Design</string>
<string name="theming">Farbschema</string>
<string name="data_export_theme">Das Theme wurde exportiert</string>
<string name="data_export_theme_success">Das Design wurde erfolgreich als CSV exportiert</string>
@ -572,9 +576,9 @@
<string name="set_watermark_indication">Automatisches Hinzufügen eines Wasserzeichens am unteren Rand von Bildern. Der Text kann für jedes Konto angepasst werden.</string>
<string name="no_distributors_found">Keine Dienste gefunden!</string>
<string name="no_distributors_explanation">Du benötigen einen Dienst, um Push-Benachrichtigungen zu erhalten.
\nWeitere Details finden Sie unter %1$s.
\nWeitere Details findest Du unter %1$s.
\n
\nDu können Push-Benachrichtigungen auch in den Einstellungen deaktivieren, um diese Nachricht zu ignorieren.</string>
\nDu kannst Push-Benachrichtigungen auch in den Einstellungen deaktivieren, um keine Benachrichtigungen zu erhalten.</string>
<string name="select_distributors">Dienstanbieter auswählen</string>
<string name="keepon">Fortfahren</string>
<string name="instance_not_valid">Diese Instanz scheint nicht gültig zu sein!</string>
@ -589,9 +593,9 @@
<string name="stop_recording">Aufnahme anhalten</string>
<string name="report_val1">Ich mag es nicht</string>
<string name="report_val2">Es ist Spam</string>
<string name="toast_bookmark">Die Nachricht wurde zu deinen Lesezeichen hinzugefügt!</string>
<string name="toast_unbookmark">Die Nachricht wurde von deinen Lesezeichen entfernt!</string>
<string name="set_accounts_page">Anzahl der Konten pro Laden</string>
<string name="toast_bookmark">Die Nachricht wurde zu Deinen Lesezeichen hinzugefügt!</string>
<string name="toast_unbookmark">Die Nachricht wurde von Deinen Lesezeichen entfernt!</string>
<string name="set_accounts_page">Anzahl der Konten pro Ladevorgang</string>
<string name="category_music">Musik</string>
<string name="cannot_be_empty">Dieses Feld kann nicht leer sein!</string>
<string name="replace_youtube">YouTube</string>
@ -605,15 +609,15 @@
<string name="other">Andere</string>
<string name="display">Anzeige</string>
<string name="report_1_title">Du willst das nicht sehen\?</string>
<string name="report_val_more3">Du bist dir bewusst, dass es gegen bestimmte Regeln verstößt</string>
<string name="report_val_more3">Du bist Dir bewusst, dass es gegen bestimmte Regeln verstößt</string>
<string name="report_val3">Es verstößt gegen die Serverregeln</string>
<string name="report_val_more4">Das Thema lässt sich nicht in andere Kategorien einordnen</string>
<string name="report_val4">Es ist etwas anderes</string>
<string name="report_val_more1">Es ist nichts was du sehen möchtest</string>
<string name="report_val_more1">Es ist nichts was Du sehen möchtest</string>
<string name="report_title">Meldung %1$s</string>
<string name="instance_health_uptime">Verfügbarkeit: %,.2f %%</string>
<string name="report_more_additional">Zusätzliche Kommentare</string>
<string name="report_more">Gibt es noch etwas, das wir deiner Meinung nach wissen sollten\?</string>
<string name="report_more">Gibt es noch etwas, das wir Deiner Meinung nach wissen sollten\?</string>
<string name="report_all_more">Wähle alle zutreffenden Punkte aus</string>
<string name="report_3_title">Welche Regeln werden verletzt\?</string>
<string name="report_2_title">Gibt es Beiträge, die diesen Bericht belegen\?</string>
@ -645,7 +649,7 @@
<string name="notification_sounds">Benachrichtigungstöne</string>
<string name="type_of_notifications_title">Wähle die Art der Benachrichtigung</string>
<string name="pref_contributor">Themen der Mitwirkenden</string>
<string name="customize_timelines">Zeitleisten anpassen</string>
<string name="customize_timelines">Timelines anpassen</string>
<string name="select_a_theme">Ein Thema wählen</string>
<string name="more_actions">Weitere Aktionen</string>
<string name="pref_contributor_summary">Wähle ein Thema, das von Mitwirkenden erstellt wurde</string>
@ -654,7 +658,7 @@
<string name="poll_type">Art der Umfrage:</string>
<string name="bottom_menu">Unteres Menü</string>
<string name="top_menu">Oberes Menü</string>
<string name="report_1_title_more">Einstellungen zur Kontrolle dessen, was du auf Mastodon siehst:</string>
<string name="report_1_title_more">Einstellungen zur Kontrolle dessen, was Du auf Mastodon siehst:</string>
<string name="hide_content">Inhalt verbergen &lt;</string>
<string name="category_custom">Benutzerdefiniert</string>
<string name="post_message_text">Sende Nachricht %d/%d</string>
@ -667,7 +671,7 @@
<string name="report_indication_title_status">Sage uns, was es mit diesem Beitrag auf sich hat</string>
<string name="report_1_mute_title">Stummschalten %1$s</string>
<string name="report_1_block_title">Blockieren %1$s</string>
<string name="invite_join_the_fediverse">Hallo! Wir laden dich ein, dem Fediverse beizutreten.</string>
<string name="invite_join_the_fediverse">Hallo! Wir laden Dich ein, dem Fediverse beizutreten.</string>
<string name="set_bot_content">Bot-Konto</string>
<string name="interactions">Interaktionen</string>
<string name="set_discoverable_content">Konto auffindbar</string>
@ -675,7 +679,7 @@
<string name="pref_theme_base_summary">Wähle, ob die Basis des Themas dunkel oder hell sein soll</string>
<string name="types_of_notifications_to_display">Arten der anzuzeigenden Benachrichtigungen</string>
<string name="toots_visibility_title">Standardmäßige Sichtbarkeit der Nachrichten:</string>
<string name="set_notifications_page">Anzahl an Benachrichtigungen pro Ladezyklus</string>
<string name="set_notifications_page">Anzahl an Benachrichtigungen pro Ladevorgang</string>
<string name="replace_instagram_description">Nutze eine alternative Benutzeroberfläche für Instagram</string>
<string name="replace_instagram_host">Instagram Frontend Domain</string>
<string name="replace_reddit_description">Nutze eine alternative Benutzeroberfläche für Reddit</string>
@ -686,13 +690,13 @@
<string name="report_more_remote">Das Konto stammt von einem anderen Server. Die anonymisierte Kopie des Berichts auch dorthin senden\?</string>
<string name="report_indication_title_status_more">Wähle die beste Übereinstimmung</string>
<string name="report_1_unfollow_title">Entfolge %1$s</string>
<string name="report_1_unfollow">Du folgst diesem Konto. Um die Beiträge nicht mehr in deiner Home-Timeline zu sehen, entfolge ihm.</string>
<string name="report_1_mute">Du wirst die Beiträge nicht mehr sehen. Du können dir immer noch folgen und deine Beiträge sehen und wissen nicht, dass sie stummgeschaltet sind.</string>
<string name="report_1_unfollow">Du folgst diesem Konto. Um die Beiträge nicht mehr auf Deiner Startseite zu sehen, entfolge ihm.</string>
<string name="report_1_mute">Du wirst ihre Beiträge nicht mehr sehen. Sie können Dir immer noch folgen und Deine Beiträge sehen und wissen nicht, dass sie stummgeschaltet sind.</string>
<string name="report_1_block">Du wirst ihre Beiträge nicht mehr sehen. Sie werden Deine Beiträge nicht sehen und Dir nicht mehr folgen können. Sie werden erkennen können, dass sie blockiert sind.</string>
<string name="notif_display_reblogs">Boosten</string>
<string name="notif_display_reblogs">Geteilte Beiträge</string>
<string name="notif_display_updates_from_people">Aktualisierungen Anderer</string>
<string name="notif_display_follows">Folgende</string>
<string name="also_boosted_by">Auch geboostet von:</string>
<string name="also_boosted_by">Auch geteilt von:</string>
<string name="set_unfollow_validation_title">Entfolgen bestätigen</string>
<string name="also_favourite_by">"Auch favorisiert von: "</string>
<string name="admin_scope">Ich bin ein Moderator</string>
@ -729,8 +733,8 @@
<string name="export_settings">Einstellungen exportieren</string>
<string name="load_media_type_title">Vorschaubilder für Medien laden</string>
<string name="display_timelines">Timelines anzeigen</string>
<string name="set_display_counters_description">Anzahl der neuen Nachrichten in der Timeline werden in einer Blase in der Registerkarte angezeigt</string>
<string name="remember_position">Position in der Timeline merken</string>
<string name="set_display_counters_description">Die Anzahl neuer Nachrichten in den Timelines wird in der Registerkarte angezeigt</string>
<string name="remember_position">Position in den Timelines merken</string>
<string name="set_use_cache_indication">Timelines werden zwischengespeichert, um die Anwendung zu beschleunigen.</string>
<string name="cached_messages">Zwischengespeicherte Nachricht</string>
<string name="reply">Antwort</string>
@ -765,7 +769,7 @@
<string name="view_the_original_message">Originalnachricht öffnen</string>
<string name="type_of_notifications_delay_title">Benachrichtigungsabrufzeit</string>
<string name="fetch_notifications">Hole Benachrichtigungen</string>
<string name="set_single_topbar">Wenn aktiv, hat die App nur eine einzelne Bar für die Timelines</string>
<string name="set_single_topbar">Wenn aktiv, hat die App nur eine Anzeigeleiste für alle Timelines</string>
<string name="media_cannot_be_uploaded">Datei konnte nicht hochgeladen werden!</string>
<string name="refresh_every">Hole Benachrichtigungen alle:</string>
<string name="set_your_max_char_count">Maximale Anzahl an Zeichen setzen</string>
@ -773,15 +777,15 @@
<string name="push_distributors">Push-Dienst</string>
<string name="toast_token">Die App konnte kein Token abrufen</string>
<string name="edit_message">Nachricht bearbeiten</string>
<string name="action_pinned_delete">Angepinnte Zeitleisten löschen\?</string>
<string name="action_pinned_delete">Angepinnte Timelines löschen\?</string>
<string name="notif_submitted_report">Bericht eingereicht</string>
<string name="action_privacy_policy">Datenschutz-Bestimmungen</string>
<string name="unpin_timeline">Die angepinnte Zeitleiste entfernen\?</string>
<string name="unpin_timeline_description">Bist Du sicher, dass diese Zeitleiste nicht mehr angepinnt sein soll\?</string>
<string name="unpin_timeline">Die angepinnte Timeline entfernen\?</string>
<string name="unpin_timeline_description">Bist Du sicher, dass diese Timeline nicht mehr angepinnt sein soll\?</string>
<string name="blocked_domains">Geblockte Domänen</string>
<string name="full_date_edited">%1$s bearbeitet %2$s</string>
<string name="unblock_domain">Domäne freigeben</string>
<string name="no_blocked_domains">Du hast keine geblockten Domänen</string>
<string name="no_blocked_domains">Du hast keine Domänen geblockt</string>
<string name="unblock_domain_confirm">Sicher, dass Du %1$s wieder freigeben willst\?</string>
<string name="Suggestions">Vorschläge</string>
<string name="not_interested">Nicht interessiert</string>
@ -794,7 +798,7 @@
<string name="account_rejected">Konto abgelehnt</string>
<string name="account_approved">Konto genehmigt</string>
<string name="report">Meldung</string>
<string name="display_media_notification_summary">Medien in Benachrichtigungen für Reblogs und Favoriten werden angezeigt</string>
<string name="display_media_notification_summary">Medien in Benachrichtigungen für geteilte Beiträge und Favoriten werden angezeigt</string>
<string name="set_live_translate">Übersetzung in eine bestimmte Sprache erzwingen. Wähle den ersten Wert, um auf Geräteeinstellungen zurückzusetzen</string>
<string name="status_history">Nachrichten-Verlauf</string>
<string name="edited_message_at">Bearbeitet am %1$s</string>
@ -821,15 +825,15 @@
<string name="account_silenced">Konto stummgeschaltet</string>
<string name="restart_the_app">App neu starten\?</string>
<string name="restart">Neustart</string>
<string name="restart_the_app_theme">Du solltest die App neu starten um die Änderungen anzuwenden.</string>
<string name="action_followed_tag_empty">Du folgst bisher keinen Tags!</string>
<string name="action_unfollow_tag">Tag nicht mehr folgen</string>
<string name="action_unfollow_tag_confirm">Bist Du sicher dass Du diesem Tag nicht mehr folgen willst\?</string>
<string name="restart_the_app_theme">Du musst die App neu starten um die Änderungen anzuwenden.</string>
<string name="action_followed_tag_empty">Du folgst bisher keinen Hashtags!</string>
<string name="action_unfollow_tag">Hashtag nicht mehr folgen</string>
<string name="action_unfollow_tag_confirm">Bist Du sicher dass Du diesem Hashtag nicht mehr folgen willst\?</string>
<string name="unfollow">Nicht mehr folgen</string>
<string name="action_tag_follow">Tag folgen</string>
<string name="write_the_tag_to_follow">Schreibe den Tag dem Du folgen willst</string>
<string name="followed_tags">Gefolgte Tags</string>
<string name="follow_tag">Tag folgen</string>
<string name="action_tag_follow">Hashtag folgen</string>
<string name="write_the_tag_to_follow">Schreibe den Hashtag, dem Du folgen möchtest</string>
<string name="followed_tags">Gefolgten Hashtags</string>
<string name="follow_tag">Hashtag folgen</string>
<string name="aggregate_notifications_summary">Falls aktiv wird die App alle zusammenhängenden Benachrichtigungen einklappen</string>
<string name="action_lists_edit">Liste bearbeiten</string>
<string name="profiles">Profile</string>
@ -840,14 +844,14 @@
<string name="hide_with_warning">Mit Warnung verstecken</string>
<string name="hide_completely">Vollständig verstecken</string>
<string name="hide_completely_description">Den gefilterten Inhalt komplett verstecken und so verhalten als ob dieser nie existiert hätte</string>
<string name="context_home_list">Start und Listen</string>
<string name="context_home_list">Startseite und Listen</string>
<string name="title">Titel</string>
<string name="keyword_or_phrase">Schlagwort oder Satz</string>
<string name="delete_keyword">Schlagwort löschen</string>
<string name="add_keyword">Schlagwort hinzufügen</string>
<string name="filtered_by">Gefiltert: %1$s</string>
<string name="show_anyway">Trotzdem anzeigen</string>
<string name="delete_timeline">Zeitleiste löschen</string>
<string name="delete_timeline">Timeline löschen</string>
<string name="notif_signed_up">Angemeldet</string>
<string name="channel_notif_signup">Neue Registrierung</string>
<string name="notif_sign_up">Eine Benutzer hat sich registriert</string>
@ -862,7 +866,7 @@
<string name="channel_notif_report">Neue Meldung</string>
<string name="hide_with_warning_description">Verstecke den gefilterten Inhalt hinter einer Warnung die den Titel des Filters enthält</string>
<string name="filter_action">Aktion filtern</string>
<string name="filter_action_explanations">Wähle die Aktion aus die durchgeführt werden soll wenn ein Beitrag Deinem Filter entspricht</string>
<string name="filter_action_explanations">Wähle die Aktion aus die durchgeführt werden soll, wenn ein Beitrag dem Filter entspricht</string>
<string name="toast_error_add_to_list">Hinzufügen des Kontos zur Liste fehlgeschlagen!</string>
<string name="keep_notifications">Benachrichtigungen behalten</string>
<string name="set_notif_admin_report">Neue Meldung (Moderatoren)</string>
@ -872,7 +876,7 @@
<string name="login_status">Anmeldestatus</string>
<string name="set_language_picker_title">Sprachen in der Auswahl</string>
<string name="set_language_picker">Erlaube die Liste der Sprachen in der Auswahl beim Verfassen einer Nachricht zu reduzieren.</string>
<string name="not_valid_tag_name">Bezeichnung des Tags ist nicht zulässig!</string>
<string name="not_valid_tag_name">Bezeichnung des Hashtags ist nicht zulässig!</string>
<string name="severity">Schweregrad</string>
<string name="reject_media">Medien ablehnen</string>
<string name="admin_reject_media">Mediendateien ablehnen</string>
@ -893,45 +897,50 @@
<string name="admin_domainblock_public_comment">Kommentiere die Domainbeschränkung für die Öffentlichkeit, wenn die Verteilung der Liste der Domainbeschränkunden aktiviert ist.</string>
<string name="order_lists">Listen sortieren</string>
<string name="notif_reported">Bericht senden</string>
<string name="mute_tag">Den Tag %1$s wirklich stummschalten\?</string>
<string name="max_indentation_thread">Maximaler Einzug in Threads</string>
<string name="mute_tag">Den Hashtag %1$s wirklich stummschalten\?</string>
<string name="max_indentation_thread">Maximale Einzugtiefe in den Beiträgen</string>
<string name="account_undisabled">Konto wieder aktiviert</string>
<string name="state">Status</string>
<string name="pref_customize_summary">Ermöglicht benutzerdefinierte Farben für Designs.</string>
<string name="set_dynamic_color">Dynamische Farben</string>
<string name="set_dynamic_color_indication">Farbton dem Farbschema des persönlichen Hintergrunds anpassen.</string>
<string name="type_default_theme_light">Standard helles Design</string>
<string name="type_default_theme_dark">Standard dunkles Design</string>
<string name="type_default_theme_light">Helles Standard-Design</string>
<string name="type_default_theme_dark">Dunkles Standard-Design</string>
<string name="type_of_theme">Wähle den Modus für das Design</string>
<string name="pref_customize">Farben anpassen</string>
<string name="set_cardview_indication">Wenn aktiviert, sind die Beiträge in der Timeline schattiert und erhöht.</string>
<string name="set_customize_light">Helles Thema anpassen</string>
<string name="set_customize_light_indication">Gestattet, einige Elemente des hellen Themas zu personalisieren.</string>
<string name="set_customize_dark">Dunkles Thema anpassen</string>
<string name="set_customize_dark_indication">Gestattet, einige Elemente des dunklen Themas zu personalisieren.</string>
<string name="set_cardview_indication">Wenn aktiviert, werden Beiträge in der Timeline schattiert und erhaben dargestellt.</string>
<string name="set_customize_light">Helles Design anpassen</string>
<string name="set_customize_light_indication">Gestattet, einige Elemente des hellen Designs zu personalisieren.</string>
<string name="set_customize_dark">Dunkles Design anpassen</string>
<string name="set_customize_dark_indication">Gestattet, einige Elemente des dunklen Designs zu personalisieren.</string>
<string name="set_custom_colors">Eigene Farben auswählen</string>
<string name="light_custom_colors">Hell - Eigene Farben</string>
<string name="cark_custom_colors">Dunkel - Eigene Farben</string>
<string name="display_remote_conversation">Entfernte Konversation anzeigen</string>
<string name="toast_on_your_instance">Die Konversation begann auf Deiner Instanz!</string>
<string name="toast_error_fetch_message">Die Anwendung hat keine entfernten Nachrichten gefunden.</string>
<string name="mute_tag_action">Tag stummschalten</string>
<string name="unpin_tag">Anpinnen des Tags aufheben</string>
<string name="unmute_tag_action">Stummschaltung des Tags aufheben</string>
<string name="toast_error_fetch_message">Die Anwendung hat die entfernte Nachricht nicht gefunden.</string>
<string name="mute_tag_action">Hashtag stummschalten</string>
<string name="unpin_tag">Anpinnen des Hashtags aufheben</string>
<string name="unmute_tag_action">Stummschaltung des Hashtags aufheben</string>
<string name="toast_try_later">Bitte später nochmal versuchen.</string>
<string name="pin_tag">Tag anpinnen</string>
<string name="put_all_accounts_in_home_muted">Alle Konten werden in der Timeline der Startseite stumm geschaltet.</string>
<string name="pin_tag">Hashtag anpinnen</string>
<string name="put_all_accounts_in_home_muted">Alle Konten auf der Startseite stumm schalten.</string>
<string name="add_all_users_home_muted">Alle Benutzer auf der Startseite stummschalten</string>
<string name="import_data">Daten importieren</string>
<string name="group_reblogs">Gruppiere geteilte Nachrichten in der Timeline der Startseite</string>
<string name="group_reblogs">Gruppiere geteilte Beiträge auf der Startseite</string>
<string name="mute_them_all">Alle stummschalten</string>
<string name="manage_accounts">Konten verwalten</string>
<string name="muted_menu_home">Auf Startseite stummgeschaltete Nutzer</string>
<string name="unfollow_tag">Tag entfolgen</string>
<string name="mute_home">r Startseite stummschalten</string>
<string name="unfollow_tag">Hashtag entfolgen</string>
<string name="mute_home">Auf der Startseite stummschalten</string>
<string name="unmute_home">Stummschaltung auf der Startseite aufheben</string>
<string name="set_remove_left_margin">Entfernt den linken Rand in den Timelines, um die Nachricht kompakter zu machen</string>
<string name="set_remove_left_margin">Entfernt den linken Rand in den Timelines, um Nachrichten kompakter darzustellen</string>
<string name="set_display_translate_indication">Übersetzungs-Knopf immer anzeigen</string>
<string name="set_cardview">Kartenansicht</string>
<string name="set_remove_left_margin_title">Entferne linken Rand</string>
<string name="version">Version</string>
<string name="api_key">Übersetzungsdienst API-Schlüssel</string>
<string name="set_translator">Übersetzungsdienst</string>
<string name="set_translator_version">Übersetzungsdienst-Version</string>
<string name="translator">Übersetzungsdienst</string>
</resources>

View File

@ -145,4 +145,51 @@
<string name="no_scheduled_toots">Chan eil teachdaireachd air an sgeideil ri sealltainn ann!</string>
<string name="remove_scheduled">A bheil thu airson an teachdaireachd sgeidealaichte a sguabadh às\?</string>
<string name="toot_scheduled">Chaidh an teachdaireachd a chur air an sgeideal!</string>
<string name="toast_error">Ìoc! Thachair mearachd!</string>
<string name="delete_notification_ask_all">A bheil thu airson gach brath a sguabadh às\?</string>
<string name="delete_notification_all">Chaidh gach brath a sguabadh às!</string>
<string name="toast_unblock">Chan eil an cunntas ga bhacadh tuilleadh!</string>
<string name="toast_mute">Chaidh an cunntas a mhùthadh!</string>
<string name="toast_unmute">Chan eil an cunntas ga mhùchadh tuilleadh!</string>
<string name="toast_follow">Chaidh an cunntas a leantainn!</string>
<string name="toast_unfollow">Chan eil an cunntas ga leantainn tuilleadh!</string>
<string name="set_toots_page">Àireamh de theachdaireachdan anns gach luchdadh</string>
<string name="set_accounts_page">Àireamh de chunntasan anns gach luchdadh</string>
<string name="set_disable_gif">Cuir avataran GIF à comas</string>
<string name="set_notify">A bheil thu airson brath fhaighinn\?</string>
<string name="set_notif_silent">Brathan tostach</string>
<string name="set_nsfw_timeout">Crìoch-ùine na susbaint frionasaich (diogan, is ciall dha 0 gum bi e dheth)</string>
<string name="set_notif_follow_share">Faigh brath nuair bhrosnaicheas cuideigin am post agad</string>
<string name="set_notif_follow_add">Faigh brath nuair as annsa le cuideigin am post agad</string>
<string name="set_notif_follow_mention">Faigh brath nuair bheir cuideigin iomradh ort</string>
<string name="set_notif_follow_poll">Faigh brath nuair a thàinig cunntas-bheachd gu crìoch</string>
<string name="toot_scheduled_date">Feumaidh ceann-latha an sgeideil a bhith nas anmoiche na an uair an-dràsta!</string>
<string name="timed_mute_date_error">Feumaidh ùine a mhùchaidh a bhith nas fhaide na aon mhionaid.</string>
<string name="timed_mute_date">Chaidh %1$s a mhùchadh gu ruige %2$s.
\n S urrainn dhut an cunntas seo a dhì-mhùchadh o dhuilleag na pròifil aca.</string>
<string name="timed_mute_profile">Chaidh %1$s a mùchadh gu ruige %2$s.
\n Thoir gnogag an-seo gus an cunntas a dhì-mhùchadh.</string>
<string name="no_notifications">Chan eil brath ri shealltainn ann</string>
<string name="followers">Luchd-leantainn</string>
<string name="client_error">Cha b urrainn dhuinn ID a chliant fhaighinn!</string>
<string name="toast_block">Chaidh an cunntas a bhacadh!</string>
<string name="toast_reblog">Chaidh an teachdaireachd a bhrosnachadh!</string>
<string name="toast_unreblog">Chan eil an teachdaireachd ga brosnachadh tuilleadh!</string>
<string name="toast_favourite">Chaidh an teachdaireachd a chur ris na h-annsachdan agad!</string>
<string name="toast_unfavourite">Chaidh an teachdaireachd a thoirt air falbh o na h-annsachdan agad!</string>
<string name="toast_bookmark">Chaidh an teachdaireachd a chur ris na comharran-lìn agad!</string>
<string name="toast_unbookmark">Chaidh an teachdaireachd a thoirt air falbh on na comharran-lìn agad!</string>
<string name="toast_code_error">Thachair mearachd! Cha do thill an t-ionstans còd dearbhaidh!</string>
<string name="toast_error_instance">Tha coltas nach eil àrainn an ionstans dligheach!</string>
<string name="toast_error_loading_account">Thachair mearachd a ghearradh leum o chunntas gu cunntas!</string>
<string name="toast_error_search">Thachair mearachd rè an luirg!</string>
<string name="nothing_to_do">Cha ghabh gnìomh a ghabhail</string>
<string name="toast_error_translate">Thachair mearachd rè an eadar-theangachaidh!</string>
<string name="set_notifications_page">Àireamh de bhrathan anns gach luchdadh</string>
<string name="set_notif_follow">Faigh brath nuair a lean cuideigin thu</string>
<string name="set_notif_status">Faigh brath airson postaichean ùra</string>
<string name="set_share_validation">Seall còmhradh dearbhaidh mus dèan thu brosnachadh</string>
<string name="set_share_validation_fav">Seall còmhradh dearbhaidh mus cuir thu rud ris na h-annsachdan</string>
<string name="set_med_desc_timeout">Crìoch-ùine nan tuairisgeulan mheadhnan (diogan, is ciall dha 0 gum bi e dheth)</string>
<string name="settings_title_custom_sharing">Co-roinneadh gnàthaichte</string>
</resources>

View File

@ -66,7 +66,7 @@
<string name="no_status">Nenhuma mensagem para exibir</string>
<string name="favourite_add">Adicionar esta mensagem aos seus favoritos\?</string>
<string name="favourite_remove">Remover esta mensagem dos seus favoritos\?</string>
<string name="reblog_add">Dar boost\?</string>
<string name="reblog_add">Dar boost nesta mensagem\?</string>
<string name="reblog_remove">Desfazer boost\?</string>
<string name="more_action_1">Silenciar</string>
<string name="more_action_2">Bloquear</string>
@ -93,9 +93,9 @@
<item>Excluir este toot?</item>
<item>Excluir &amp; rascunhar este toot?</item>
</string-array>
<string name="bookmarks">Favoritos</string>
<string name="bookmark_add">Adicionar aos favoritos</string>
<string name="bookmark_remove">Remover dos favoritos</string>
<string name="bookmarks">Salvos</string>
<string name="bookmark_add">Salvar</string>
<string name="bookmark_remove">Remover dos Salvos</string>
<string name="status_bookmarked">Toot foi salvo!</string>
<string name="status_unbookmarked">Toot foi removido dos Salvos!</string>
<!-- Date -->
@ -257,7 +257,7 @@
<string name="delete">Remover</string>
<!-- About lists -->
<string name="action_lists">Listas</string>
<string name="action_lists_confirm_delete">Tem certeza de que deseja excluir permanentemente esta lista?</string>
<string name="action_lists_confirm_delete">Você tem certeza que deseja excluir permanentemente esta lista\?</string>
<string name="action_lists_add_to">Adicionar à lista</string>
<string name="action_lists_delete">Excluir lista</string>
<string name="action_lists_title_placeholder">Nome da nova lista</string>
@ -314,9 +314,9 @@
<string name="channel_notif_media">Baixar mídia</string>
<string name="select_sound">Selecionar toque</string>
<string name="set_enable_time_slot">Ativar definição de momento</string>
<string name="block_domain_confirm_message">Tem certeza que deseja bloquear %s\?
<string name="block_domain_confirm_message">Você tem certeza que deseja bloquear %s\?
\n
\nVocê não verá nenhum conteúdo dessa instância em nenhuma linha do tempo pública ou em suas notificações. Seus seguidores dessa instância serão removidos.</string>
\nVocê não verá nenhum conteúdo dessa instância em nenhuma timeline pública ou em suas notificações. Seus seguidores dessa instância serão removidos.</string>
<string name="block_domain">Bloquear instância</string>
<string name="toast_block_domain">Instância bloqueada</string>
<string name="retrieve_remote_status">Obtendo status remoto</string>
@ -528,30 +528,30 @@
<string name="boost_header_color">Alterar a cor do cabeçalho para reblogs</string>
<string name="background_status_title">Publicações</string>
<string name="background_status">Cor de fundo das publicações nas cronologias</string>
<string name="reset_color">Repor cores</string>
<string name="clik_reset">Toque aqui para repor todas as suas cores personalizadas</string>
<string name="reset">Reset</string>
<string name="icons_color_title">Icons</string>
<string name="reset_color">Redefinir cores</string>
<string name="clik_reset">Toque aqui para redefinir todas as suas cores personalizadas</string>
<string name="reset">Redefinir</string>
<string name="icons_color_title">Ícones</string>
<string name="icons_color">Cor dos ícones inferiores nas linhas do tempo</string>
<string name="logo_of_the_instance">Logo da instância</string>
<string name="edit_profile">Editar Perfil</string>
<string name="make_an_action">Faça uma ação</string>
<string name="translation">Tradução</string>
<string name="text_color_title">Text color</string>
<string name="text_color_title">Cor do texto</string>
<string name="text_color">Alterar a cor do texto nas mensagens</string>
<string name="pref_custom_theme">Use um tema personalizado</string>
<string name="theming">Personalização</string>
<string name="data_export_theme">O tema foi exportado</string>
<string name="data_export_theme_success">O tema foi exportado com sucesso em CSV</string>
<string name="import_theme">Import a theme</string>
<string name="import_theme">Importar um tema</string>
<string name="import_theme_title">Toque aqui para importar um tema exportado previamente</string>
<string name="export_theme">Export the theme</string>
<string name="export_theme">Exportar o tema</string>
<string name="export_theme_title">Toque aqui para exportar o tema atual</string>
<string name="theme_file_error">Ocorreu um erro ao selecionar o arquivo do tema</string>
<string name="user_count">Número de usuários</string>
<string name="status_count">Número de status</string>
<string name="instance_count">Número de instâncias</string>
<string name="poll_finish_in">End in %s</string>
<string name="poll_finish_in">Termina em %s</string>
<string name="no_instance_reccord">Esta instância não está disponível em https://instances.social</string>
<string name="display_full_link">Exibir link completo</string>
<string name="share_link">Partilhar link</string>
@ -664,4 +664,56 @@
<string name="channel_notif_report">Nova denúncia</string>
<string name="show_anyway">Mostrar mesmo assim</string>
<string name="pref_customize">Personalizar cores</string>
<string name="action_privacy_policy">Política de Privacidade</string>
<string name="fetch_more_messages">Carregar mais mensagens…</string>
<string name="report_3_title">Quais regras estão sendo violadas\?</string>
<string name="set_live_translate_title">Traduzir Mensagens</string>
<string name="refresh_every">Buscar notificações a cada:</string>
<string name="set_customize_dark_indication">Permite personalizar alguns elementos nas mensagens para o tema escuro.</string>
<string name="report_val4">É outra coisa</string>
<string name="report_1_block_title">Bloquear %1$s</string>
<string name="report_more_additional">Comentários adicionais</string>
<string name="msg_save_image">Você deseja sair sem salvar a imagem\?</string>
<string name="set_display_bookmark_indication">Sempre mostrar o botão de salvar</string>
<string name="message_language">Idioma das mensagens</string>
<string name="report_val2">É spam</string>
<string name="report_val3">Viola as regras do servidor</string>
<string name="report_1_unfollow_title">Deixar de seguir %1$s</string>
<string name="export_settings">Exportar configurações</string>
<string name="report_val_more3">Você está ciente de que isso quebra regras específicas</string>
<string name="type_of_notifications_delay_title">Tempo de busca de notificações</string>
<string name="edit_message">Editar mensagem</string>
<string name="set_unlisted_replies">Respostas não listadas</string>
<string name="clear_cache">Limpar cache</string>
<string name="set_display_translate_indication">Sempre mostrar o botão de traduzir</string>
<string name="poll_type">Tipo de enquete:</string>
<string name="poll_duration">Duração da enquete:</string>
<string name="message_has_been_sent">A mensagem foi enviada!</string>
<string name="tap_here_to_refresh_poll">Toque aqui para atualizar a enquete</string>
<string name="action_announcement_from_to">Anúncio · %1$s - %2$s</string>
<string name="delete_cache">Excluir cache</string>
<string name="default_system_language">Usar o idioma padrão do sistema</string>
<string name="set_remove_left_margin_title">Remover margem esquerda</string>
<string name="set_remove_left_margin">Remova a margem esquerda nas linhas do tempo para tornar as mensagens mais compactas</string>
<string name="set_translator_version">Versão do tradutor</string>
<string name="set_custom_colors">Definir cores personalizadas</string>
<string name="pref_customize_summary">Permite definir cores personalizadas para os temas.</string>
<string name="report_val_more2">Links maliciosos, engajamento falso ou respostas repetitivas</string>
<string name="report_1_title_more">Aqui estão suas opções para controlar o que você vê no Mastodon:</string>
<string name="version">Versão</string>
<string name="set_unlisted_replies_indication">Diz respeito apenas a respostas \"públicas\". Quando ativado, suas respostas terão automaticamente a visibilidade \"não listada\" em vez de \"pública\"</string>
<string name="delete_cache_message">Você tem certeza que deseja excluir o cache\? Se você tiver rascunhos com mídia, a mídia anexada será perdida.</string>
<string name="import_settings">Importar configurações</string>
<string name="about_mastodon">\"O Mastodon não é um site único como o Twitter ou o Facebook, é uma rede de milhares de comunidades operadas por diferentes organizações e indivíduos que fornecem uma experiência de mídia social perfeita.\"</string>
<string name="unpin_timeline">Remover timeline fixada\?</string>
<string name="unblock_domain_confirm">Você tem certeza que deseja desbloquear %1$s\?</string>
<string name="clear_all_notif">Limpar todas as notificações</string>
<string name="invite_join_the_fediverse">OIá! Convidamos você a se juntar ao Fediverso.</string>
<string name="dont_have_an_account">Não possui uma conta\?</string>
<string name="display_all_categories">Exibir todas as categorias</string>
<string name="delete_notification_all_warning">Você tem certeza que deseja excluir todas as notificações\? Essa ação não pode ser desfeita.</string>
<string name="mark_all_as_read">Marcar todas as notificações como lidas</string>
<string name="join_the_fediverse">Junte-se ao Fediverso</string>
<string name="unpin_timeline_description">Você tem certeza que deseja desafixar essa timeline\?</string>
<string name="action_pinned_delete">Excluir as timelines fixadas\?</string>
</resources>

View File

@ -937,4 +937,9 @@
<string name="manage_accounts">Hesapları yönet</string>
<string name="set_remove_left_margin_title">Sol kenar boşluğunu kaldır</string>
<string name="set_remove_left_margin">Mesajları daha sıkı hale getirmek için zaman çizelgelerindeki sol kenar boşluğunu kaldır</string>
<string name="translator">Çevirmen</string>
<string name="set_translator_version">Çevirmen sürümü</string>
<string name="set_translator">Çevirmen</string>
<string name="api_key">Çevirmen API anahtarı</string>
<string name="version">Sürüm</string>
</resources>

View File

@ -761,6 +761,15 @@
<item>BrainCrash</item>
<item>Mastalab</item>
</string-array>
<string-array name="SET_POST_FORMAT" translatable="false">
<item>text/plain</item>
<item>text/html</item>
<item>text/markdown</item>
<item>text/bbcode</item>
<item>text/x.misskeymarkdown</item>
</string-array>
<string-array name="set_load_media_type_value">
<item>Always</item>
<item>Wifi only</item>
@ -1419,7 +1428,12 @@
<string name="SET_FILTER_REGEX_PUBLIC" translatable="false">SET_FILTER_REGEX_PUBLIC</string>
<string name="SET_NOTIF_VALIDATION" translatable="false">SET_NOTIF_VALIDATION</string>
<string name="SET_DISPLAY_BOOKMARK" translatable="false">SET_DISPLAY_BOOKMARK</string>
<string name="SET_DISPLAY_QUOTES" translatable="false">SET_DISPLAY_QUOTES</string>
<string name="SET_DISPLAY_REACTIONS" translatable="false">SET_DISPLAY_REACTIONS</string>
<string name="SET_DISPLAY_TRANSLATE" translatable="false">SET_DISPLAY_TRANSLATE</string>
<string name="SET_POST_FORMAT" translatable="false">SET_POST_FORMAT</string>
<string name="SET_TRANSLATOR" translatable="false">SET_TRANSLATOR</string>
<string name="SET_TRANSLATOR_VERSION" translatable="false">SET_TRANSLATOR_VERSION</string>
@ -1429,6 +1443,7 @@
<string name="SET_NOTIF_VALIDATION_FAV" translatable="false">SET_NOTIF_VALIDATION_FAV</string>
<string name="SET_DISPLAY_COUNTER_FAV_BOOST" translatable="false">SET_DISPLAY_COUNTER_FAV_BOOST</string>
<string name="SET_REMOVE_LEFT_MARGIN" translatable="false">SET_REMOVE_LEFT_MARGIN</string>
<string name="SET_EXTAND_EXTRA_FEATURES" translatable="false">SET_EXTAND_EXTRA_FEATURES</string>
<string name="SET_INNER_MARKER" translatable="false">SET_INNER_MARKER</string>
<string name="SET_NOTIF_SILENT" translatable="false">SET_NOTIF_SILENT</string>
@ -1955,6 +1970,8 @@
<string name="pref_category_key_theming" translatable="false">pref_category_theming</string>
<string name="pref_category_key_administration" translatable="false">pref_category_administration</string>
<string name="pref_category_key_languages" translatable="false">pref_category_languages</string>
<string name="pref_category_key_extra_features" translatable="false">pref_category_key_extra_features</string>
<string name="pref_export_settings" translatable="false">pref_export_settings</string>
<string name="pref_import_settings" translatable="false">pref_import_settings</string>
<string name="export_settings">Export settings</string>
@ -2147,4 +2164,14 @@
<string name="api_key">Translator API key</string>
<string name="version">Version</string>
<string name="set_translator_version">Translator version</string>
<string name="set_extand_extra_features_title">Extra features</string>
<string name="set_extand_extra_features">By enabling that option the app will display extra features. This feature is done for social softwares like Pleroma, Akkoma or Glitch Social</string>
<string name="icons_visibility">Icons visibility</string>
<string name="icons_visibility_summary">You can safely hide these icons at the bottom to have more space. They are also in the submenu.</string>
<string name="post_format">Post format</string>
<string name="set_post_format">Post format</string>
<string name="icons_extra_features">Icons for extra features</string>
<string name="icons_extra_features_visibility_summary">If your instance does not accept some extra features, you can hide these icons</string>
<string name="set_display_quote_indication">Display the \"Quote\" button</string>
<string name="set_display_reaction_indication">Display \"Reactions\" buttons</string>
</resources>

View File

@ -70,6 +70,13 @@
app:key="@string/pref_category_key_languages" />
<Preference
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:title="@string/set_extand_extra_features_title"
app:icon="@drawable/ic_baseline_extension_24"
app:key="@string/pref_category_key_extra_features" />
<Preference
android:layout_width="match_parent"
android:layout_height="wrap_content"

View File

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<SwitchPreferenceCompat
app:defaultValue="false"
app:iconSpaceReserved="false"
app:key="@string/SET_EXTAND_EXTRA_FEATURES"
app:singleLineTitle="false"
app:summary="@string/set_extand_extra_features"
app:title="@string/set_extand_extra_features_title" />
<app.fedilab.android.helper.settings.LongSummaryPreferenceCategory
app:dependency="@string/SET_EXTAND_EXTRA_FEATURES"
app:iconSpaceReserved="false"
app:key="bottom_icon"
app:summary="@string/icons_visibility_summary"
app:title="@string/icons_visibility">
<SwitchPreferenceCompat
android:defaultValue="true"
app:iconSpaceReserved="false"
app:key="@string/SET_DISPLAY_BOOKMARK"
app:singleLineTitle="false"
app:title="@string/set_display_bookmark_indication" />
<SwitchPreferenceCompat
android:defaultValue="false"
app:iconSpaceReserved="false"
app:key="@string/SET_DISPLAY_TRANSLATE"
app:singleLineTitle="false"
app:title="@string/set_display_translate_indication" />
</app.fedilab.android.helper.settings.LongSummaryPreferenceCategory>
<app.fedilab.android.helper.settings.LongSummaryPreferenceCategory
app:dependency="@string/SET_EXTAND_EXTRA_FEATURES"
app:iconSpaceReserved="false"
app:key="bottom_icon"
app:summary="@string/icons_extra_features_visibility_summary"
app:title="@string/icons_extra_features">
<SwitchPreferenceCompat
android:defaultValue="true"
app:iconSpaceReserved="false"
app:key="@string/SET_DISPLAY_QUOTES"
app:singleLineTitle="false"
app:title="@string/set_display_quote_indication" />
<SwitchPreferenceCompat
android:defaultValue="true"
app:iconSpaceReserved="false"
app:key="@string/SET_DISPLAY_REACTIONS"
app:singleLineTitle="false"
app:title="@string/set_display_reaction_indication" />
</app.fedilab.android.helper.settings.LongSummaryPreferenceCategory>
<ListPreference
app:defaultValue="text/plain"
app:dependency="@string/SET_EXTAND_EXTRA_FEATURES"
app:dialogTitle="@string/post_format"
app:entries="@array/SET_POST_FORMAT"
app:entryValues="@array/SET_POST_FORMAT"
app:iconSpaceReserved="false"
app:key="@string/SET_POST_FORMAT"
app:summary="@string/change_logo_description"
app:title="@string/set_post_format"
app:useSimpleSummaryProvider="true" />
</androidx.preference.PreferenceScreen>

View File

@ -28,6 +28,7 @@
app:summary="@string/set_remove_left_margin"
app:title="@string/set_remove_left_margin_title" />
<SwitchPreferenceCompat
app:defaultValue="true"
app:iconSpaceReserved="false"

View File

@ -0,0 +1,14 @@
Added:
- Allow to enable extra features in Settings
- Customizable settings for extra features
- Support quotes, reactions with messages
- Support text format (html, markdown, etc.) when composing
Changed:
- Context menu when long pressing a link
- Display bookmark and translate buttons are now per account
Fixed:
- CW not working with media
- Media not displayed for older instances
- Some crashes

View File

@ -0,0 +1,2 @@
- Corrigidos alguns bugs
- Permite compartilhar com o aplicativo

View File

@ -0,0 +1,13 @@
Adicionado:
- Permite definir um ponto de foco em nas prévias (editor de mídia)
- Respeite o ponto de foco com prévias
- Paginação com o suporte ao botão buscar mais leitura para cima ou para baixo
- Adicionar tendências
Fixo:
- Somente a última notificação por push é exibida (não agrupada)
- Mau comportamento com a rolagem direita/esquerda
- Corrigir perfis longos não totalmente exibidos
- Problemas com algumas enquetes
- Algumas falhas
- Alguns maus comportamentos

View File

@ -0,0 +1 @@
- Corrigidos alguns bugs relatados.