mirror of
				https://codeberg.org/tom79/Fedilab.git
				synced 2025-10-20 11:20:16 +03:00 
			
		
		
		
	Merge branch 'develop'
This commit is contained in:
		
						commit
						c3006080ba
					
				
					 44 changed files with 927 additions and 199 deletions
				
			
		|  | @ -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" | ||||
|  |  | |||
|  | @ -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", | ||||
|  |  | |||
|  | @ -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); | ||||
|  |  | |||
|  | @ -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); | ||||
|  |  | |||
|  | @ -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") | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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"; | ||||
|  |  | |||
|  | @ -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) { | ||||
|  |  | |||
|  | @ -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 + "…"; | ||||
|  |  | |||
|  | @ -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(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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); | ||||
|         } | ||||
|  |  | |||
|  | @ -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); | ||||
|  |  | |||
|  | @ -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); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  | @ -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) { | ||||
|  |  | |||
|  | @ -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 { | ||||
|  |  | |||
|  | @ -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(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -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 { | ||||
|  |  | |||
							
								
								
									
										10
									
								
								app/src/main/res/drawable/ic_baseline_extension_24.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								app/src/main/res/drawable/ic_baseline_extension_24.xml
									
									
									
									
									
										Normal 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> | ||||
							
								
								
									
										10
									
								
								app/src/main/res/drawable/ic_baseline_format_quote_24.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								app/src/main/res/drawable/ic_baseline_format_quote_24.xml
									
									
									
									
									
										Normal 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> | ||||
							
								
								
									
										10
									
								
								app/src/main/res/drawable/ic_baseline_format_size_24.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								app/src/main/res/drawable/ic_baseline_format_size_24.xml
									
									
									
									
									
										Normal 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> | ||||
							
								
								
									
										9
									
								
								app/src/main/res/drawable/ic_check_redirect.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								app/src/main/res/drawable/ic_check_redirect.xml
									
									
									
									
									
										Normal 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> | ||||
							
								
								
									
										9
									
								
								app/src/main/res/drawable/ic_copy_link.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								app/src/main/res/drawable/ic_copy_link.xml
									
									
									
									
									
										Normal 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> | ||||
							
								
								
									
										9
									
								
								app/src/main/res/drawable/ic_full_link.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								app/src/main/res/drawable/ic_full_link.xml
									
									
									
									
									
										Normal 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> | ||||
							
								
								
									
										10
									
								
								app/src/main/res/drawable/ic_open_external.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								app/src/main/res/drawable/ic_open_external.xml
									
									
									
									
									
										Normal 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> | ||||
							
								
								
									
										9
									
								
								app/src/main/res/drawable/ic_share_link.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								app/src/main/res/drawable/ic_share_link.xml
									
									
									
									
									
										Normal 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> | ||||
|  | @ -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" | ||||
|  |  | |||
|  | @ -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" | ||||
|  |  | |||
|  | @ -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" | ||||
|  |  | |||
|  | @ -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> | ||||
|  |  | |||
|  | @ -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" | ||||
|  |  | |||
|  | @ -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> | ||||
|  | @ -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 & 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 <</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">Fü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> | ||||
|  | @ -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> | ||||
|  | @ -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 & 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> | ||||
|  | @ -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> | ||||
|  | @ -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> | ||||
|  | @ -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" | ||||
|  |  | |||
							
								
								
									
										64
									
								
								app/src/main/res/xml/pref_extra_features.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								app/src/main/res/xml/pref_extra_features.xml
									
									
									
									
									
										Normal 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> | ||||
|  | @ -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" | ||||
|  |  | |||
							
								
								
									
										14
									
								
								src/fdroid/fastlane/metadata/android/en/changelogs/457.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/fdroid/fastlane/metadata/android/en/changelogs/457.txt
									
									
									
									
									
										Normal 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 | ||||
|  | @ -0,0 +1,2 @@ | |||
| - Corrigidos alguns bugs | ||||
| - Permite compartilhar com o aplicativo | ||||
							
								
								
									
										13
									
								
								src/fdroid/fastlane/metadata/android/pt/changelogs/396.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/fdroid/fastlane/metadata/android/pt/changelogs/396.txt
									
									
									
									
									
										Normal 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 | ||||
|  | @ -0,0 +1 @@ | |||
| - Corrigidos alguns bugs relatados. | ||||
		Loading…
	
		Reference in a new issue