forked from mirrors/Fedilab
Merge branch 'develop'
This commit is contained in:
commit
2a675da7c2
31 changed files with 980 additions and 70 deletions
|
@ -13,8 +13,8 @@ android {
|
|||
defaultConfig {
|
||||
minSdk 21
|
||||
targetSdk 32
|
||||
versionCode 446
|
||||
versionName "3.11.0"
|
||||
versionCode 448
|
||||
versionName "3.11.2"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
flavorDimensions "default"
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
[
|
||||
{
|
||||
"version": "3.11.2",
|
||||
"code": "448",
|
||||
"note": "Added:\n- Mute/Unmute accounts in the Home timeline from their messages or their profiles\n- Add all users from a list to \"Muted home\" in one click\n- Display/Manage users that are muted for home\n\nFixed:\n- Timeline crashes"
|
||||
},
|
||||
{
|
||||
"version": "3.11.0",
|
||||
"code": "446",
|
||||
|
|
|
@ -127,6 +127,7 @@ import app.fedilab.android.client.entities.api.Status;
|
|||
import app.fedilab.android.client.entities.app.Account;
|
||||
import app.fedilab.android.client.entities.app.BaseAccount;
|
||||
import app.fedilab.android.client.entities.app.BottomMenu;
|
||||
import app.fedilab.android.client.entities.app.MutedAccounts;
|
||||
import app.fedilab.android.client.entities.app.Pinned;
|
||||
import app.fedilab.android.client.entities.app.PinnedTimeline;
|
||||
import app.fedilab.android.client.entities.app.StatusCache;
|
||||
|
@ -164,6 +165,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
|
|||
public static status networkAvailable = UNKNOWN;
|
||||
public static Instance instanceInfo;
|
||||
public static List<Filter> mainFilters;
|
||||
public static List<app.fedilab.android.client.entities.api.Account> filteredAccounts;
|
||||
public static boolean filterFetched;
|
||||
public static boolean show_boosts, show_replies, show_art_nsfw;
|
||||
public static String regex_home, regex_local, regex_public;
|
||||
|
@ -302,7 +304,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
|
|||
} else {
|
||||
BaseMainActivity.currentToken = sharedpreferences.getString(Helper.PREF_USER_TOKEN, null);
|
||||
}
|
||||
|
||||
filteredAccounts = new ArrayList<>();
|
||||
mamageNewIntent(getIntent());
|
||||
filterFetched = false;
|
||||
networkStateReceiver = new NetworkStateReceiver();
|
||||
|
@ -565,6 +567,10 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
|
|||
currentAccount = new Account(BaseMainActivity.this).getConnectedAccount();
|
||||
//Delete cache older than 7 days
|
||||
new StatusCache(BaseMainActivity.this).deleteForAllAccountAfter7Days();
|
||||
MutedAccounts mutedAccounts = new MutedAccounts(BaseMainActivity.this).getMutedAccount(currentAccount);
|
||||
if (mutedAccounts != null && mutedAccounts.accounts != null) {
|
||||
filteredAccounts = mutedAccounts.accounts;
|
||||
}
|
||||
} catch (DBException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
|
|
@ -54,11 +54,12 @@ public class ActionActivity extends BaseBarActivity {
|
|||
binding.muted.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.MUTED_TIMELINE));
|
||||
binding.blocked.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.BLOCKED_TIMELINE));
|
||||
binding.domainBlock.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.BLOCKED_DOMAIN_TIMELINE));
|
||||
binding.mutedHome.setOnClickListener(v -> displayTimeline(Timeline.TimeLineEnum.MUTED_TIMELINE_HOME));
|
||||
}
|
||||
|
||||
private void displayTimeline(Timeline.TimeLineEnum type) {
|
||||
canGoBack = true;
|
||||
if (type == Timeline.TimeLineEnum.MUTED_TIMELINE || type == Timeline.TimeLineEnum.BLOCKED_TIMELINE) {
|
||||
if (type == Timeline.TimeLineEnum.MUTED_TIMELINE || type == Timeline.TimeLineEnum.BLOCKED_TIMELINE || type == Timeline.TimeLineEnum.MUTED_TIMELINE_HOME) {
|
||||
|
||||
ThemeHelper.slideViewsToLeft(binding.buttonContainer, binding.fragmentContainer, () -> {
|
||||
fragmentMastodonAccount = new FragmentMastodonAccount();
|
||||
|
@ -114,6 +115,9 @@ public class ActionActivity extends BaseBarActivity {
|
|||
case BLOCKED_DOMAIN_TIMELINE:
|
||||
setTitle(R.string.blocked_domains);
|
||||
break;
|
||||
case MUTED_TIMELINE_HOME:
|
||||
setTitle(R.string.muted_menu_home);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -143,6 +143,22 @@ public class MastodonListActivity extends BaseBarActivity implements MastodonLis
|
|||
if (item.getItemId() == android.R.id.home) {
|
||||
onBackPressed();
|
||||
return true;
|
||||
} else if (item.getItemId() == R.id.action_user_mute_home) {
|
||||
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MastodonListActivity.this, Helper.dialogStyle());
|
||||
dialogBuilder.setTitle(R.string.put_all_accounts_in_home_muted);
|
||||
dialogBuilder.setPositiveButton(R.string.mute_them_all, (dialog, id) -> {
|
||||
timelinesVM.getAccountsInList(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, mastodonList.id, null, null, 0)
|
||||
.observe(MastodonListActivity.this, accounts -> {
|
||||
if (accounts != null && accounts.size() > 0) {
|
||||
for (Account account : accounts) {
|
||||
accountsVM.muteHome(MainActivity.currentAccount, account);
|
||||
}
|
||||
}
|
||||
});
|
||||
dialog.dismiss();
|
||||
});
|
||||
dialogBuilder.setNegativeButton(R.string.cancel, (dialog, id) -> dialog.dismiss());
|
||||
dialogBuilder.show();
|
||||
} else if (item.getItemId() == R.id.action_manage_users) {
|
||||
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MastodonListActivity.this, Helper.dialogStyle());
|
||||
PopupManageAccountsListBinding popupManageAccountsListBinding = PopupManageAccountsListBinding.inflate(getLayoutInflater());
|
||||
|
|
|
@ -117,6 +117,7 @@ public class ProfileActivity extends BaseActivity {
|
|||
private String mention_str;
|
||||
private WellKnownNodeinfo.NodeInfo nodeInfo;
|
||||
private boolean checkRemotely;
|
||||
private boolean homeMuted;
|
||||
|
||||
private final BroadcastReceiver broadcast_data = new BroadcastReceiver() {
|
||||
@Override
|
||||
|
@ -144,6 +145,7 @@ public class ProfileActivity extends BaseActivity {
|
|||
Bundle b = getIntent().getExtras();
|
||||
binding.accountFollow.setEnabled(false);
|
||||
checkRemotely = false;
|
||||
homeMuted = false;
|
||||
if (b != null) {
|
||||
account = (Account) b.getSerializable(Helper.ARG_ACCOUNT);
|
||||
account_id = b.getString(Helper.ARG_USER_ID, null);
|
||||
|
@ -185,6 +187,8 @@ public class ProfileActivity extends BaseActivity {
|
|||
Toasty.error(ProfileActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show();
|
||||
finish();
|
||||
}
|
||||
//Check if account is homeMuted
|
||||
accountsVM.isMuted(currentAccount, account).observe(this, result -> homeMuted = result != null && result);
|
||||
LocalBroadcastManager.getInstance(ProfileActivity.this).registerReceiver(broadcast_data, new IntentFilter(Helper.BROADCAST_DATA));
|
||||
}
|
||||
|
||||
|
@ -685,9 +689,11 @@ public class ProfileActivity extends BaseActivity {
|
|||
menu.findItem(R.id.action_endorse).setVisible(false);
|
||||
menu.findItem(R.id.action_direct_message).setVisible(false);
|
||||
menu.findItem(R.id.action_add_to_list).setVisible(false);
|
||||
menu.findItem(R.id.action_mute_home).setVisible(false);
|
||||
} else {
|
||||
menu.findItem(R.id.action_block).setVisible(true);
|
||||
menu.findItem(R.id.action_mute).setVisible(true);
|
||||
menu.findItem(R.id.action_mute_home).setVisible(true);
|
||||
menu.findItem(R.id.action_timed_mute).setVisible(true);
|
||||
menu.findItem(R.id.action_mention).setVisible(true);
|
||||
}
|
||||
|
@ -696,6 +702,7 @@ public class ProfileActivity extends BaseActivity {
|
|||
if (!relationship.following) {
|
||||
menu.findItem(R.id.action_hide_boost).setVisible(false);
|
||||
menu.findItem(R.id.action_endorse).setVisible(false);
|
||||
menu.findItem(R.id.action_mute_home).setVisible(false);
|
||||
}
|
||||
if (relationship.blocking) {
|
||||
menu.findItem(R.id.action_block).setTitle(R.string.action_unblock);
|
||||
|
@ -713,6 +720,11 @@ public class ProfileActivity extends BaseActivity {
|
|||
} else {
|
||||
menu.findItem(R.id.action_hide_boost).setTitle(getString(R.string.show_boost, account.username));
|
||||
}
|
||||
if (homeMuted) {
|
||||
menu.findItem(R.id.action_mute_home).setTitle(getString(R.string.unmute_home));
|
||||
} else {
|
||||
menu.findItem(R.id.action_mute_home).setTitle(getString(R.string.mute_home));
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -989,6 +1001,28 @@ public class ProfileActivity extends BaseActivity {
|
|||
});
|
||||
builderInner.show();
|
||||
}
|
||||
} else if (itemId == R.id.action_mute_home) {
|
||||
AlertDialog.Builder builderInner = new AlertDialog.Builder(ProfileActivity.this, Helper.dialogStyle());
|
||||
builderInner.setMessage(account.acct);
|
||||
builderInner.setNeutralButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
|
||||
if (homeMuted) {
|
||||
builderInner.setTitle(R.string.unmute_home);
|
||||
builderInner.setPositiveButton(R.string.action_unmute, (dialog, which) -> accountsVM.unmuteHome(currentAccount, account)
|
||||
.observe(ProfileActivity.this, account -> {
|
||||
homeMuted = false;
|
||||
invalidateOptionsMenu();
|
||||
Toasty.info(ProfileActivity.this, getString(R.string.toast_unmute), Toasty.LENGTH_LONG).show();
|
||||
}));
|
||||
} else {
|
||||
builderInner.setTitle(R.string.mute_home);
|
||||
builderInner.setPositiveButton(R.string.action_mute, (dialog, which) -> accountsVM.muteHome(currentAccount, account)
|
||||
.observe(ProfileActivity.this, account -> {
|
||||
homeMuted = true;
|
||||
invalidateOptionsMenu();
|
||||
Toasty.info(ProfileActivity.this, getString(R.string.toast_mute), Toasty.LENGTH_LONG).show();
|
||||
}));
|
||||
}
|
||||
builderInner.show();
|
||||
} else if (itemId == R.id.action_timed_mute) {
|
||||
MastodonHelper.scheduleBoost(ProfileActivity.this, MastodonHelper.ScheduleType.TIMED_MUTED, null, account, rs -> {
|
||||
this.relationship = rs;
|
||||
|
|
|
@ -19,6 +19,8 @@ import android.content.Context;
|
|||
import android.text.Spannable;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
@ -148,4 +150,14 @@ public class Account implements Serializable {
|
|||
public LinkedHashMap<Integer, Field.FieldParams> fields;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean equals(@Nullable Object obj) {
|
||||
boolean same = false;
|
||||
if (obj instanceof Account) {
|
||||
same = this.id.equals(((Account) obj).id);
|
||||
}
|
||||
return same;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,249 @@
|
|||
package app.fedilab.android.client.entities.app;
|
||||
/* 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.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import app.fedilab.android.client.entities.api.Account;
|
||||
import app.fedilab.android.exception.DBException;
|
||||
import app.fedilab.android.sqlite.Sqlite;
|
||||
|
||||
|
||||
public class MutedAccounts implements Serializable {
|
||||
|
||||
|
||||
private transient final SQLiteDatabase db;
|
||||
@SerializedName("id")
|
||||
public long id = -1;
|
||||
@SerializedName("instance")
|
||||
public String instance;
|
||||
@SerializedName("user_id")
|
||||
public String user_id;
|
||||
@SerializedName("type")
|
||||
public Timeline.TimeLineEnum type;
|
||||
@SerializedName("accounts")
|
||||
public List<Account> accounts;
|
||||
|
||||
public MutedAccounts() {
|
||||
db = null;
|
||||
}
|
||||
|
||||
public MutedAccounts(Context context) {
|
||||
//Creation of the DB with tables
|
||||
this.db = Sqlite.getInstance(context.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Serialized a list of BaseAccount class
|
||||
*
|
||||
* @param accounts List of {@link Account} to serialize
|
||||
* @return String serialized emoji list
|
||||
*/
|
||||
public static String accountListToStringStorage(List<Account> accounts) {
|
||||
Gson gson = new Gson();
|
||||
try {
|
||||
return gson.toJson(accounts);
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unserialized a BaseAccount List
|
||||
*
|
||||
* @param serializedAccounts String serialized BaseAccount list
|
||||
* @return List of {@link Account}
|
||||
*/
|
||||
public static List<Account> restoreAccountsFromString(String serializedAccounts) {
|
||||
Gson gson = new Gson();
|
||||
try {
|
||||
return gson.fromJson(serializedAccounts, new TypeToken<List<Account>>() {
|
||||
}.getType());
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void delete() {
|
||||
db.delete(Sqlite.TABLE_MUTED, null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert an Account in muted account in db
|
||||
*
|
||||
* @param forAccount {@link BaseAccount}
|
||||
* @param target {@link Account}
|
||||
* @return long - db id
|
||||
* @throws DBException exception with database
|
||||
*/
|
||||
public long muteAccount(BaseAccount forAccount, Account target) throws DBException {
|
||||
if (db == null) {
|
||||
throw new DBException("db is null. Wrong initialization.");
|
||||
}
|
||||
boolean insert = false;
|
||||
MutedAccounts mutedAccounts = getMutedAccount(forAccount);
|
||||
ContentValues values = new ContentValues();
|
||||
if (mutedAccounts == null) {
|
||||
mutedAccounts = new MutedAccounts();
|
||||
mutedAccounts.accounts = new ArrayList<>();
|
||||
mutedAccounts.type = Timeline.TimeLineEnum.HOME;
|
||||
values.put(Sqlite.COL_INSTANCE, forAccount.instance);
|
||||
values.put(Sqlite.COL_USER_ID, forAccount.user_id);
|
||||
insert = true;
|
||||
values.put(Sqlite.COL_TYPE, mutedAccounts.type.getValue());
|
||||
} else if (mutedAccounts.accounts == null) {
|
||||
mutedAccounts.accounts = new ArrayList<>();
|
||||
}
|
||||
if (!mutedAccounts.accounts.contains(target)) {
|
||||
mutedAccounts.accounts.add(target);
|
||||
}
|
||||
values.put(Sqlite.COL_MUTED_ACCOUNTS, accountListToStringStorage(mutedAccounts.accounts));
|
||||
|
||||
//Inserts or updates
|
||||
try {
|
||||
if (insert) {
|
||||
return db.insertOrThrow(Sqlite.TABLE_MUTED, null, values);
|
||||
} else {
|
||||
return db.update(Sqlite.TABLE_MUTED,
|
||||
values, Sqlite.COL_USER_ID + " = ? AND " + Sqlite.COL_INSTANCE + " = ?",
|
||||
new String[]{forAccount.user_id, forAccount.instance});
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove an Account in muted account in db
|
||||
*
|
||||
* @param forAccount {@link BaseAccount}
|
||||
* @param target {@link Account}
|
||||
* @return long - db id
|
||||
* @throws DBException exception with database
|
||||
*/
|
||||
public long unMuteAccount(BaseAccount forAccount, Account target) throws DBException {
|
||||
if (db == null) {
|
||||
throw new DBException("db is null. Wrong initialization.");
|
||||
}
|
||||
boolean insert = false;
|
||||
MutedAccounts mutedAccounts = getMutedAccount(forAccount);
|
||||
ContentValues values = new ContentValues();
|
||||
if (mutedAccounts == null) {
|
||||
mutedAccounts = new MutedAccounts();
|
||||
mutedAccounts.accounts = new ArrayList<>();
|
||||
mutedAccounts.type = Timeline.TimeLineEnum.HOME;
|
||||
values.put(Sqlite.COL_INSTANCE, forAccount.instance);
|
||||
values.put(Sqlite.COL_USER_ID, forAccount.user_id);
|
||||
insert = true;
|
||||
values.put(Sqlite.COL_TYPE, mutedAccounts.type.getValue());
|
||||
} else if (mutedAccounts.accounts == null) {
|
||||
mutedAccounts.accounts = new ArrayList<>();
|
||||
}
|
||||
mutedAccounts.accounts.remove(target);
|
||||
values.put(Sqlite.COL_MUTED_ACCOUNTS, accountListToStringStorage(mutedAccounts.accounts));
|
||||
|
||||
//Inserts or updates
|
||||
try {
|
||||
if (insert) {
|
||||
return db.insertOrThrow(Sqlite.TABLE_MUTED, null, values);
|
||||
} else {
|
||||
return db.update(Sqlite.TABLE_MUTED,
|
||||
values, Sqlite.COL_USER_ID + " = ? AND " + Sqlite.COL_INSTANCE + " = ?",
|
||||
new String[]{forAccount.user_id, forAccount.instance});
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if an account is muted in db
|
||||
*
|
||||
* @param forAccount {@link BaseAccount}
|
||||
* @param target {@link Account}
|
||||
* @return MutedAccounts - {@link MutedAccounts}
|
||||
*/
|
||||
public boolean isMuted(BaseAccount forAccount, Account target) throws DBException {
|
||||
if (db == null) {
|
||||
throw new DBException("db is null. Wrong initialization.");
|
||||
}
|
||||
MutedAccounts mutedAccounts = getMutedAccount(forAccount);
|
||||
if (mutedAccounts != null && mutedAccounts.accounts != null) {
|
||||
for (Account account : mutedAccounts.accounts) {
|
||||
if (account.id.equals(target.id)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the MutedAccounts for an account
|
||||
*
|
||||
* @param account Account
|
||||
* @return MutedAccounts - {@link MutedAccounts}
|
||||
*/
|
||||
public MutedAccounts getMutedAccount(BaseAccount account) throws DBException {
|
||||
if (db == null) {
|
||||
throw new DBException("db is null. Wrong initialization.");
|
||||
}
|
||||
try {
|
||||
Cursor c = db.query(Sqlite.TABLE_MUTED, null, Sqlite.COL_INSTANCE + " = '" + account.instance + "' AND " + Sqlite.COL_USER_ID + " = '" + account.user_id + "'", null, null, null, null, "1");
|
||||
return convertCursorToMuted(c);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Read cursor and hydrate without closing it
|
||||
*
|
||||
* @param c - Cursor
|
||||
* @return MutedAccounts
|
||||
*/
|
||||
private MutedAccounts convertCursorToMuted(Cursor c) {
|
||||
if (c.getCount() == 0) {
|
||||
c.close();
|
||||
return null;
|
||||
}
|
||||
//Take the first element
|
||||
c.moveToFirst();
|
||||
MutedAccounts mutedAccounts = new MutedAccounts();
|
||||
mutedAccounts.id = c.getInt(c.getColumnIndexOrThrow(Sqlite.COL_ID));
|
||||
mutedAccounts.instance = c.getString(c.getColumnIndexOrThrow(Sqlite.COL_INSTANCE));
|
||||
mutedAccounts.user_id = c.getString(c.getColumnIndexOrThrow(Sqlite.COL_USER_ID));
|
||||
mutedAccounts.accounts = restoreAccountsFromString(c.getString(c.getColumnIndexOrThrow(Sqlite.COL_MUTED_ACCOUNTS)));
|
||||
mutedAccounts.type = Timeline.TimeLineEnum.valueOf(c.getString(c.getColumnIndexOrThrow(Sqlite.COL_TYPE)));
|
||||
c.close();
|
||||
return mutedAccounts;
|
||||
}
|
||||
}
|
|
@ -388,6 +388,8 @@ public class Timeline {
|
|||
ACCOUNT_TIMELINE("ACCOUNT_TIMELINE"),
|
||||
@SerializedName("MUTED_TIMELINE")
|
||||
MUTED_TIMELINE("MUTED_TIMELINE"),
|
||||
@SerializedName("MUTED_TIMELINE_HOME")
|
||||
MUTED_TIMELINE_HOME("MUTED_TIMELINE_HOME"),
|
||||
@SerializedName("BOOKMARK_TIMELINE")
|
||||
BOOKMARK_TIMELINE("BOOKMARK_TIMELINE"),
|
||||
@SerializedName("BLOCKED_DOMAIN_TIMELINE")
|
||||
|
|
|
@ -1953,4 +1953,19 @@ public class Helper {
|
|||
public interface OnAttachmentCopied {
|
||||
void onAttachmentCopied(Attachment attachment);
|
||||
}
|
||||
|
||||
public static void addMutedAccount(app.fedilab.android.client.entities.api.Account target) {
|
||||
if (MainActivity.filteredAccounts == null) {
|
||||
MainActivity.filteredAccounts = new ArrayList<>();
|
||||
}
|
||||
if (!MainActivity.filteredAccounts.contains(target)) {
|
||||
MainActivity.filteredAccounts.add(target);
|
||||
}
|
||||
}
|
||||
|
||||
public static void removeMutedAccount(app.fedilab.android.client.entities.api.Account target) {
|
||||
if (MainActivity.filteredAccounts != null) {
|
||||
MainActivity.filteredAccounts.remove(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -494,7 +494,9 @@ public class SpannableHelper {
|
|||
contentUrl = new SpannableString(Html.fromHtml(value, Html.FROM_HTML_MODE_LEGACY));
|
||||
else
|
||||
contentUrl = new SpannableString(Html.fromHtml(value));
|
||||
|
||||
if (contentUrl.toString().trim().isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
Pattern word = Pattern.compile(Pattern.quote(contentUrl.toString()));
|
||||
Matcher matcherLink = word.matcher(content);
|
||||
while (matcherLink.find()) {
|
||||
|
|
|
@ -14,6 +14,8 @@ package app.fedilab.android.helper;
|
|||
* You should have received a copy of the GNU General Public License along with Fedilab; if not,
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
|
||||
import static app.fedilab.android.BaseMainActivity.filteredAccounts;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
|
@ -35,6 +37,7 @@ import java.util.regex.Pattern;
|
|||
import app.fedilab.android.BaseMainActivity;
|
||||
import app.fedilab.android.activities.MainActivity;
|
||||
import app.fedilab.android.client.endpoints.MastodonFiltersService;
|
||||
import app.fedilab.android.client.entities.api.Account;
|
||||
import app.fedilab.android.client.entities.api.Filter;
|
||||
import app.fedilab.android.client.entities.api.Notification;
|
||||
import app.fedilab.android.client.entities.api.Status;
|
||||
|
@ -90,6 +93,7 @@ public class TimelineHelper {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
//If there are filters:
|
||||
if (BaseMainActivity.mainFilters != null && BaseMainActivity.mainFilters.size() > 0 && statuses != null && statuses.size() > 0) {
|
||||
|
||||
|
@ -143,6 +147,23 @@ public class TimelineHelper {
|
|||
Matcher ms = p.matcher(spoilerText);
|
||||
if (ms.find()) {
|
||||
status.filteredByApp = filter;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (filterTimeLineType == Timeline.TimeLineEnum.HOME) {
|
||||
if (filteredAccounts != null && filteredAccounts.size() > 0) {
|
||||
for (Account account : filteredAccounts) {
|
||||
if (account.acct.equals(status.account.acct) || (status.reblog != null && account.acct.equals(status.reblog.account.acct))) {
|
||||
Filter filterCustom = new Filter();
|
||||
filterCustom.filter_action = "hide";
|
||||
ArrayList<String> contextCustom = new ArrayList<>();
|
||||
contextCustom.add("home");
|
||||
filterCustom.title = "Fedilab";
|
||||
filterCustom.context = contextCustom;
|
||||
status.filteredByApp = filterCustom;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ import android.database.sqlite.SQLiteOpenHelper;
|
|||
public class Sqlite extends SQLiteOpenHelper {
|
||||
|
||||
|
||||
public static final int DB_VERSION = 7;
|
||||
public static final int DB_VERSION = 8;
|
||||
public static final String DB_NAME = "fedilab_db";
|
||||
|
||||
//Table of owned accounts
|
||||
|
@ -84,6 +84,9 @@ public class Sqlite extends SQLiteOpenHelper {
|
|||
//Tracking domains
|
||||
public static final String TABLE_DOMAINS_TRACKING = "TABLE_DOMAINS_TRACKING";
|
||||
public static final String COL_DOMAIN = "DOMAIN";
|
||||
//Muted accounts for home
|
||||
public static final String TABLE_MUTED = "TABLE_MUTED";
|
||||
public static final String COL_MUTED_ACCOUNTS = "MUTED_ACCOUNTS";
|
||||
|
||||
private static final String CREATE_TABLE_USER_ACCOUNT = "CREATE TABLE " + TABLE_USER_ACCOUNT + " ("
|
||||
+ COL_USER_ID + " TEXT NOT NULL, "
|
||||
|
@ -177,6 +180,14 @@ public class Sqlite extends SQLiteOpenHelper {
|
|||
+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
|
||||
+ COL_DOMAIN + " TEXT NOT NULL)";
|
||||
|
||||
|
||||
private static final String CREATE_TABLE_MUTED = "CREATE TABLE IF NOT EXISTS " + TABLE_MUTED + " ("
|
||||
+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
|
||||
+ COL_INSTANCE + " TEXT NOT NULL, "
|
||||
+ COL_USER_ID + " TEXT NOT NULL, "
|
||||
+ COL_TYPE + " TEXT NOT NULL, "
|
||||
+ COL_MUTED_ACCOUNTS + " TEXT)";
|
||||
|
||||
public static SQLiteDatabase db;
|
||||
private static Sqlite sInstance;
|
||||
|
||||
|
@ -205,6 +216,7 @@ public class Sqlite extends SQLiteOpenHelper {
|
|||
db.execSQL(CREATE_TABLE_SCHEDULE_BOOST);
|
||||
db.execSQL(CREATE_TABLE_BOTTOM_MENU);
|
||||
db.execSQL(CREATE_DOMAINS_TRACKING);
|
||||
db.execSQL(CREATE_TABLE_MUTED);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -229,6 +241,8 @@ public class Sqlite extends SQLiteOpenHelper {
|
|||
db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUICK_LOAD);
|
||||
case 6:
|
||||
db.execSQL("DROP TABLE IF EXISTS " + TABLE_DOMAINS_TRACKING);
|
||||
case 7:
|
||||
db.execSQL(CREATE_TABLE_MUTED);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -42,6 +42,7 @@ import java.util.List;
|
|||
|
||||
import app.fedilab.android.BaseMainActivity;
|
||||
import app.fedilab.android.R;
|
||||
import app.fedilab.android.activities.MainActivity;
|
||||
import app.fedilab.android.activities.ProfileActivity;
|
||||
import app.fedilab.android.client.entities.api.Account;
|
||||
import app.fedilab.android.databinding.DrawerAccountBinding;
|
||||
|
@ -56,12 +57,19 @@ public class AccountAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||
|
||||
private final List<Account> accountList;
|
||||
private Context context;
|
||||
private final boolean home_mute;
|
||||
|
||||
public AccountAdapter(List<Account> accountList, boolean home_mute) {
|
||||
this.accountList = accountList;
|
||||
this.home_mute = home_mute;
|
||||
}
|
||||
|
||||
public AccountAdapter(List<Account> accountList) {
|
||||
this.accountList = accountList;
|
||||
this.home_mute = false;
|
||||
}
|
||||
|
||||
public static void accountManagement(Context context, AccountViewHolder accountViewHolder, Account account, int position, RecyclerView.Adapter<RecyclerView.ViewHolder> adapter) {
|
||||
public static void accountManagement(Context context, AccountViewHolder accountViewHolder, Account account, int position, RecyclerView.Adapter<RecyclerView.ViewHolder> adapter, boolean home_mute) {
|
||||
MastodonHelper.loadPPMastodon(accountViewHolder.binding.avatar, account);
|
||||
|
||||
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
|
@ -73,6 +81,21 @@ public class AccountAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||
accountViewHolder.binding.dividerCard.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
if (home_mute) {
|
||||
accountViewHolder.binding.muteHome.setVisibility(View.VISIBLE);
|
||||
boolean muted = MainActivity.filteredAccounts != null && MainActivity.filteredAccounts.contains(account);
|
||||
accountViewHolder.binding.muteHome.setChecked(muted);
|
||||
accountViewHolder.binding.muteHome.setOnClickListener(v -> {
|
||||
if (muted) {
|
||||
accountsVM.unmuteHome(MainActivity.currentAccount, account).observe((LifecycleOwner) context, account1 -> adapter.notifyItemChanged(accountViewHolder.getLayoutPosition()));
|
||||
} else {
|
||||
accountsVM.muteHome(MainActivity.currentAccount, account).observe((LifecycleOwner) context, account1 -> adapter.notifyItemChanged(accountViewHolder.getLayoutPosition()));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
accountViewHolder.binding.muteHome.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
accountViewHolder.binding.avatar.setOnClickListener(v -> {
|
||||
Intent intent = new Intent(context, ProfileActivity.class);
|
||||
Bundle b = new Bundle();
|
||||
|
@ -263,7 +286,7 @@ public class AccountAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
|
||||
Account account = accountList.get(position);
|
||||
AccountViewHolder holder = (AccountViewHolder) viewHolder;
|
||||
accountManagement(context, holder, account, position, this);
|
||||
accountManagement(context, holder, account, position, this, home_mute);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1655,6 +1655,16 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|||
Toasty.info(context, context.getString(R.string.toast_mute), Toasty.LENGTH_LONG).show();
|
||||
}));
|
||||
builderInner.show();
|
||||
} else if (itemId == R.id.action_mute_home) {
|
||||
AlertDialog.Builder builderInner = new AlertDialog.Builder(context, Helper.dialogStyle());
|
||||
builderInner.setTitle(R.string.mute_home);
|
||||
builderInner.setMessage(statusToDeal.account.acct);
|
||||
builderInner.setNeutralButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
|
||||
builderInner.setPositiveButton(R.string.action_mute, (dialog, which) -> accountsVM.muteHome(currentAccount, statusToDeal.account)
|
||||
.observe((LifecycleOwner) context, account -> {
|
||||
Toasty.info(context, context.getString(R.string.toast_mute), Toasty.LENGTH_LONG).show();
|
||||
}));
|
||||
builderInner.show();
|
||||
} else if (itemId == R.id.action_mute_conversation) {
|
||||
if (statusToDeal.muted) {
|
||||
statusesVM.unMute(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, statusToDeal.id).observe((LifecycleOwner) context, status1 -> Toasty.info(context, context.getString(R.string.toast_unmute_conversation)).show());
|
||||
|
|
|
@ -92,7 +92,7 @@ public class FragmentMedia extends Fragment {
|
|||
return;
|
||||
}
|
||||
canSwipe = (binding.mediaPicture.getScale() == 1);
|
||||
if (!canSwipe) {
|
||||
if (!canSwipe && !requireActivity().isFinishing() && isAdded()) {
|
||||
if (!((MediaActivity) requireActivity()).getFullScreen()) {
|
||||
((MediaActivity) requireActivity()).setFullscreen(true);
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@ import java.util.List;
|
|||
|
||||
import app.fedilab.android.BaseMainActivity;
|
||||
import app.fedilab.android.R;
|
||||
import app.fedilab.android.activities.MainActivity;
|
||||
import app.fedilab.android.client.entities.api.Account;
|
||||
import app.fedilab.android.client.entities.api.Accounts;
|
||||
import app.fedilab.android.client.entities.api.Pagination;
|
||||
|
@ -128,6 +129,11 @@ public class FragmentMastodonAccount extends Fragment {
|
|||
accountsVM.getMutes(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, String.valueOf(MastodonHelper.accountsPerCall(requireActivity())), max_id, null)
|
||||
.observe(getViewLifecycleOwner(), this::dealWithPagination);
|
||||
}
|
||||
} else if (timelineType == Timeline.TimeLineEnum.MUTED_TIMELINE_HOME) {
|
||||
if (firstLoad) {
|
||||
accountsVM.getMutedHome(MainActivity.currentAccount)
|
||||
.observe(getViewLifecycleOwner(), this::initializeAccountCommonView);
|
||||
}
|
||||
} else if (timelineType == Timeline.TimeLineEnum.BLOCKED_TIMELINE) {
|
||||
if (firstLoad) {
|
||||
accountsVM.getBlocks(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, String.valueOf(MastodonHelper.accountsPerCall(requireActivity())), null, null)
|
||||
|
@ -197,7 +203,7 @@ public class FragmentMastodonAccount extends Fragment {
|
|||
}
|
||||
|
||||
this.accounts = accounts.accounts;
|
||||
accountAdapter = new AccountAdapter(this.accounts);
|
||||
accountAdapter = new AccountAdapter(this.accounts, timelineType == Timeline.TimeLineEnum.MUTED_TIMELINE_HOME);
|
||||
flagLoading = accounts.pagination.max_id == null;
|
||||
LinearLayoutManager mLayoutManager = new LinearLayoutManager(requireActivity());
|
||||
binding.recyclerView.setLayoutManager(mLayoutManager);
|
||||
|
|
|
@ -14,6 +14,8 @@ package app.fedilab.android.viewmodel.mastodon;
|
|||
* You should have received a copy of the GNU General Public License along with Fedilab; if not,
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
|
||||
import static app.fedilab.android.helper.Helper.addMutedAccount;
|
||||
import static app.fedilab.android.helper.Helper.removeMutedAccount;
|
||||
import static app.fedilab.android.ui.drawer.StatusAdapter.sendAction;
|
||||
|
||||
import android.app.Application;
|
||||
|
@ -52,7 +54,10 @@ import app.fedilab.android.client.entities.api.Suggestion;
|
|||
import app.fedilab.android.client.entities.api.Suggestions;
|
||||
import app.fedilab.android.client.entities.api.Tag;
|
||||
import app.fedilab.android.client.entities.api.Token;
|
||||
import app.fedilab.android.client.entities.app.BaseAccount;
|
||||
import app.fedilab.android.client.entities.app.MutedAccounts;
|
||||
import app.fedilab.android.client.entities.app.StatusCache;
|
||||
import app.fedilab.android.exception.DBException;
|
||||
import app.fedilab.android.helper.Helper;
|
||||
import app.fedilab.android.helper.MastodonHelper;
|
||||
import okhttp3.MultipartBody;
|
||||
|
@ -92,6 +97,8 @@ public class AccountsVM extends AndroidViewModel {
|
|||
private MutableLiveData<Token> tokenMutableLiveData;
|
||||
private MutableLiveData<Domains> domainsMutableLiveData;
|
||||
private MutableLiveData<Report> reportMutableLiveData;
|
||||
private MutableLiveData<Boolean> booleanMutableLiveData;
|
||||
|
||||
|
||||
public AccountsVM(@NonNull Application application) {
|
||||
super(application);
|
||||
|
@ -748,6 +755,100 @@ public class AccountsVM extends AndroidViewModel {
|
|||
return relationShipMutableLiveData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Mute the given account in db
|
||||
*
|
||||
* @return {@link LiveData} containing the {@link Account} to the given account
|
||||
*/
|
||||
public LiveData<Accounts> getMutedHome(@NonNull BaseAccount forAccount) {
|
||||
accountsMutableLiveData = new MutableLiveData<>();
|
||||
new Thread(() -> {
|
||||
Accounts accounts = new Accounts();
|
||||
MutedAccounts mutedAccount;
|
||||
try {
|
||||
mutedAccount = new MutedAccounts(getApplication().getApplicationContext()).getMutedAccount(forAccount);
|
||||
if (mutedAccount != null) {
|
||||
accounts.accounts = mutedAccount.accounts;
|
||||
}
|
||||
accounts.pagination = new Pagination();
|
||||
} catch (DBException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||
Runnable myRunnable = () -> accountsMutableLiveData.setValue(accounts);
|
||||
mainHandler.post(myRunnable);
|
||||
}).start();
|
||||
return accountsMutableLiveData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Mute the given account in db
|
||||
*
|
||||
* @return {@link LiveData} containing the {@link Account} to the given account
|
||||
*/
|
||||
public LiveData<Boolean> isMuted(@NonNull BaseAccount forAccount, @NonNull Account target) {
|
||||
booleanMutableLiveData = new MutableLiveData<>();
|
||||
new Thread(() -> {
|
||||
boolean isMuted = false;
|
||||
try {
|
||||
isMuted = new MutedAccounts(getApplication().getApplicationContext()).isMuted(forAccount, target);
|
||||
} catch (DBException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||
boolean finalIsMuted = isMuted;
|
||||
Runnable myRunnable = () -> booleanMutableLiveData.setValue(finalIsMuted);
|
||||
mainHandler.post(myRunnable);
|
||||
}).start();
|
||||
return booleanMutableLiveData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mute the given account in db
|
||||
*
|
||||
* @return {@link LiveData} containing the {@link Account} to the given account
|
||||
*/
|
||||
public LiveData<Account> muteHome(@NonNull BaseAccount forAccount, @NonNull Account target) {
|
||||
accountMutableLiveData = new MutableLiveData<>();
|
||||
new Thread(() -> {
|
||||
|
||||
try {
|
||||
new MutedAccounts(getApplication().getApplicationContext()).muteAccount(forAccount, target);
|
||||
addMutedAccount(target);
|
||||
} catch (DBException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||
sendAction(getApplication().getApplicationContext(), Helper.ARG_STATUS_ACCOUNT_ID_DELETED, null, target.id);
|
||||
Runnable myRunnable = () -> accountMutableLiveData.setValue(target);
|
||||
mainHandler.post(myRunnable);
|
||||
}).start();
|
||||
return accountMutableLiveData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unmute the given account in db
|
||||
*
|
||||
* @return {@link LiveData} containing the {@link Account} to the given account
|
||||
*/
|
||||
public LiveData<Account> unmuteHome(@NonNull BaseAccount forAccount, @NonNull Account target) {
|
||||
accountMutableLiveData = new MutableLiveData<>();
|
||||
new Thread(() -> {
|
||||
try {
|
||||
new MutedAccounts(getApplication().getApplicationContext()).unMuteAccount(forAccount, target);
|
||||
removeMutedAccount(target);
|
||||
} catch (DBException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||
Runnable myRunnable = () -> accountMutableLiveData.setValue(target);
|
||||
mainHandler.post(myRunnable);
|
||||
}).start();
|
||||
return accountMutableLiveData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unmute the given account.
|
||||
*
|
||||
|
|
|
@ -12,12 +12,27 @@
|
|||
android:orientation="vertical"
|
||||
android:padding="24dp">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/bookmarks"
|
||||
style="@style/Widget.Material3.Button.OutlinedButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingVertical="12dp"
|
||||
android:text="@string/bookmarks"
|
||||
android:textAlignment="textStart"
|
||||
android:textColor="?attr/colorAccent"
|
||||
app:icon="@drawable/ic_baseline_navigate_next_24"
|
||||
app:iconGravity="end"
|
||||
app:iconTint="?attr/colorAccent"
|
||||
app:strokeColor="?attr/colorAccent" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/muted"
|
||||
style="@style/Widget.Material3.Button.OutlinedButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingVertical="12dp"
|
||||
android:layout_marginTop="24dp"
|
||||
android:text="@string/muted_menu"
|
||||
android:textAlignment="textStart"
|
||||
android:textColor="?attr/colorAccent"
|
||||
|
@ -26,6 +41,21 @@
|
|||
app:iconTint="?attr/colorAccent"
|
||||
app:strokeColor="?attr/colorAccent" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/muted_home"
|
||||
style="@style/Widget.Material3.Button.OutlinedButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:paddingVertical="12dp"
|
||||
android:text="@string/muted_menu_home"
|
||||
android:textAlignment="textStart"
|
||||
android:textColor="?attr/colorAccent"
|
||||
app:icon="@drawable/ic_baseline_navigate_next_24"
|
||||
app:iconGravity="end"
|
||||
app:iconTint="?attr/colorAccent"
|
||||
app:strokeColor="?attr/colorAccent" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/blocked"
|
||||
style="@style/Widget.Material3.Button.OutlinedButton"
|
||||
|
@ -41,20 +71,6 @@
|
|||
app:iconTint="?attr/colorAccent"
|
||||
app:strokeColor="?attr/colorAccent" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/bookmarks"
|
||||
style="@style/Widget.Material3.Button.OutlinedButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="24dp"
|
||||
android:paddingVertical="12dp"
|
||||
android:text="@string/bookmarks"
|
||||
android:textAlignment="textStart"
|
||||
android:textColor="?attr/colorAccent"
|
||||
app:icon="@drawable/ic_baseline_navigate_next_24"
|
||||
app:iconGravity="end"
|
||||
app:iconTint="?attr/colorAccent"
|
||||
app:strokeColor="?attr/colorAccent" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/favourites"
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="@dimen/fab_margin">
|
||||
android:layout_marginHorizontal="6dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recycler_view"
|
||||
|
|
|
@ -116,6 +116,18 @@
|
|||
app:iconPadding="0dp"
|
||||
app:strokeWidth="1dp" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/mute_home"
|
||||
style="@style/Widget.Material3.Button.OutlinedButton"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:padding="0dp"
|
||||
android:visibility="gone"
|
||||
app:icon="@drawable/ic_baseline_home_24"
|
||||
app:iconGravity="textStart"
|
||||
app:iconPadding="0dp"
|
||||
app:strokeWidth="1dp" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/mute_timed"
|
||||
style="@style/Widget.Material3.Button.OutlinedButton"
|
||||
|
|
|
@ -16,6 +16,11 @@
|
|||
android:icon="@drawable/ic_baseline_open_with_24"
|
||||
android:title="@string/action_open_in_web"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_mute_home"
|
||||
android:icon="@drawable/ic_baseline_volume_mute_24"
|
||||
android:title="@string/mute_home"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_mute"
|
||||
android:icon="@drawable/ic_baseline_volume_mute_24"
|
||||
|
|
|
@ -11,6 +11,11 @@
|
|||
android:icon="@drawable/ic_baseline_edit_note_24"
|
||||
android:title="@string/action_lists_edit"
|
||||
app:showAsAction="ifRoom" />
|
||||
<item
|
||||
android:id="@+id/action_user_mute_home"
|
||||
android:icon="@drawable/ic_baseline_volume_mute_24"
|
||||
android:title="@string/add_all_users_home_muted"
|
||||
app:showAsAction="ifRoom" />
|
||||
<item
|
||||
android:id="@+id/action_delete"
|
||||
android:icon="@drawable/ic_baseline_delete_24"
|
||||
|
|
|
@ -46,6 +46,10 @@
|
|||
android:id="@+id/action_mute"
|
||||
android:title="@string/more_action_1"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_mute_home"
|
||||
android:title="@string/mute_home"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_timed_mute"
|
||||
android:title="@string/more_action_8"
|
||||
|
|
|
@ -159,9 +159,11 @@
|
|||
<string name="toot_scheduled">Zpráva byla naplánována!</string>
|
||||
<string name="toot_scheduled_date">Plánované datum musí být vyšší než aktuální hodina!</string>
|
||||
<!-- timed mute -->
|
||||
<string name="timed_mute_date_error">Časový interval pro ztlumení musí být vyšší než jedna minuta.</string>
|
||||
<string name="timed_mute_date">%1$s byl ztlumen až do %2$s. \n Ztišení účtu můžete zrušit z jeho/její profilové stránky.</string>
|
||||
<string name="timed_mute_profile">%1$s je ztlumen do %2$s. \n Klikněte zde pro zrušení ztišení.</string>
|
||||
<string name="timed_mute_date_error">Časový interval pro ztlumení musí být delší než jedna minuta.</string>
|
||||
<string name="timed_mute_date">%1$s byl ztlumen až do %2$s.
|
||||
\n Ztlumení účtu můžete zrušit z jeho/její profilové stránky.</string>
|
||||
<string name="timed_mute_profile">%1$s je ztlumen do %2$s.
|
||||
\n Klikněte zde pro zrušení ztlumení.</string>
|
||||
<!-- Notifications -->
|
||||
<string name="no_notifications">Žádné upozornění k zobrazení</string>
|
||||
<string name="notif_mention">vás zmínil(a)</string>
|
||||
|
@ -194,7 +196,7 @@
|
|||
<string name="nothing_to_do">Nelze vykonat akci</string>
|
||||
<string name="toast_error_translate">Při překladu došlo k chybě!</string>
|
||||
<!-- Settings -->
|
||||
<string name="set_toots_page">Počet zpráv pro jedno nahrání</string>
|
||||
<string name="set_toots_page">Počet zpráv pro jedno načtení</string>
|
||||
<string name="set_disable_gif">Zakázat GIF avatary</string>
|
||||
<string name="set_notif_follow">Upozornit, když vás někdo začne sledovat</string>
|
||||
<string name="set_notif_follow_share">Upozornit, když někdo boostne váš status</string>
|
||||
|
@ -314,7 +316,9 @@
|
|||
<string name="channel_notif_media">Stahování médií</string>
|
||||
<string name="select_sound">Vybrat tón</string>
|
||||
<string name="set_enable_time_slot">Zapnout rozvrh oznámení</string>
|
||||
<string name="block_domain_confirm_message">Určitě chcete zablokovat %s?\n\nJiž z této domény neuvidíte ve všech veřejných časových osách ani v oznámeních žádný obsah. Vaši sledující z této domény budou odstraněni.</string>
|
||||
<string name="block_domain_confirm_message">Určitě chcete zablokovat %s\?
|
||||
\n
|
||||
\nJiž z této domény neuvidíte ve všech veřejných časových osách ani v oznámeních žádný obsah. Vaši sledující z této domény budou odstraněni.</string>
|
||||
<string name="block_domain">Zablokovat doménu</string>
|
||||
<string name="toast_block_domain">Doména je blokována</string>
|
||||
<string name="retrieve_remote_status">Načítám vzdálený status</string>
|
||||
|
@ -332,9 +336,9 @@
|
|||
<string name="schedule_boost">Naplánovat boost</string>
|
||||
<string name="boost_scheduled">Boost je naplánován!</string>
|
||||
<string name="no_scheduled_boosts">Žádný naplánovaný boost k zobrazení!</string>
|
||||
<string name="open_menu">Otevřete nabídku</string>
|
||||
<string name="open_menu">Otevřít nabídku</string>
|
||||
<string name="profile_picture">Profilový obrázek</string>
|
||||
<string name="profile_banner">Profilová hlavička</string>
|
||||
<string name="profile_banner">Hlavička profilu</string>
|
||||
<string name="contact_instance_admin">Kontaktovat administrátora instance</string>
|
||||
<string name="mastohost_logo">Logo MastoHost</string>
|
||||
<string name="emoji_picker">Výběr emotikonů</string>
|
||||
|
@ -384,7 +388,7 @@
|
|||
<string name="list_of_blocked_domains">Seznam blokovaných volání</string>
|
||||
<string name="submit">Odeslat</string>
|
||||
<string name="filter_timeline_with_a_tag">Filtrovat časovou osu s hashtagy</string>
|
||||
<string name="no_tags">Žádné hashtagy</string>
|
||||
<string name="no_tags">Žádné tagy</string>
|
||||
<string name="set_retrieve_metadata_share_from_extras">Při sdílení URL připojit obrázek</string>
|
||||
<!-- end languages -->
|
||||
<string name="create_poll">Vytvořit anketu</string>
|
||||
|
@ -415,14 +419,14 @@
|
|||
<string name="label_filter">Filtr</string>
|
||||
<string name="label_brush">Štětec</string>
|
||||
<string name="discard">Zahodit</string>
|
||||
<string name="saving">Ukladáno…</string>
|
||||
<string name="saving">Ukladání…</string>
|
||||
<string name="image_saved">Obrázek byl úspěšně uložen!</string>
|
||||
<string name="save_image_failed">Nepodařilo se uložit obrázek</string>
|
||||
<string name="add_poll_item">Přidat položku ankety</string>
|
||||
<string name="mute_conversation">Ztišit konverzaci</string>
|
||||
<string name="unmute_conversation">Zrušit umlčení konverzace</string>
|
||||
<string name="toast_unmute_conversation">Konverzace už není umlčená!</string>
|
||||
<string name="toast_mute_conversation">Konverzace je umlčená</string>
|
||||
<string name="mute_conversation">Ztlumit konverzaci</string>
|
||||
<string name="unmute_conversation">Zrušit ztlumení konverzace</string>
|
||||
<string name="toast_unmute_conversation">Konverzace už není ztlumená!</string>
|
||||
<string name="toast_mute_conversation">Konverzace je ztlumená</string>
|
||||
<string name="category_general">Základní</string>
|
||||
<string name="category_regional">Regionální</string>
|
||||
<string name="category_art">Umění</string>
|
||||
|
@ -433,7 +437,7 @@
|
|||
<string name="category_food">Jídlo</string>
|
||||
<string name="instance_logo">Logo instance</string>
|
||||
<string name="join_mastodon">Připojte se k Mastodonu</string>
|
||||
<string name="pickup_instance_category">Choose an instance by picking up a category, then tap on a check button.</string>
|
||||
<string name="pickup_instance_category">K získání seznamu instancí vyberte kategorii, potom si klepnutím zvolte instanci, kterou chcete.</string>
|
||||
<string name="users">%1$s uživatelů</string>
|
||||
<string name="password_confirm">Potvrdit heslo</string>
|
||||
<string name="agreement_check">Souhlasím s %1$s a %2$s</string>
|
||||
|
@ -443,7 +447,7 @@
|
|||
<string name="validation_needed">Tato instance funguje na pozvánky. Aby se dal váš účet používat, musí ho ručně schválit administrátor.</string>
|
||||
<string name="password_error">Hesla nesouhlasí!</string>
|
||||
<string name="email_error">E-mail se zdá být neplatný!</string>
|
||||
<string name="email_indicator">Poslali jsme vám potvrzovací e-mail</string>
|
||||
<string name="email_indicator">Instance vám pošle potvrzovací e-mail</string>
|
||||
<string name="password_indicator">Použijte minimálně 8 znaků</string>
|
||||
<string name="password_too_short">Heslo musí mít minimálně 8 znaků</string>
|
||||
<string name="username_error">Uživatelské jméno smí obsahovat jen písmena, číslice a podtržítka</string>
|
||||
|
@ -466,20 +470,20 @@
|
|||
<string name="suspended">Pozastaveno</string>
|
||||
<string name="permissions">Oprávnění</string>
|
||||
<string name="disable">Vypnout</string>
|
||||
<string name="silence">Silence</string>
|
||||
<string name="silence">Ztišit</string>
|
||||
<string name="account">Účet</string>
|
||||
<string name="unsilence">Undo silence</string>
|
||||
<string name="unsilence">Zrušit ztišení</string>
|
||||
<string name="undisable">Zrušit vypnutí</string>
|
||||
<string name="suspend">Pozastavit</string>
|
||||
<string name="unsuspend">Zrušit pozastavení</string>
|
||||
<string name="audio">Zvuk</string>
|
||||
<string name="voice_message">Hlasová zpráva</string>
|
||||
<string name="set_enable_time_slot_indication">During the time slot, the app will send notifications. You can reverse (ie: silent) this time slot with the right spinner.</string>
|
||||
<string name="set_enable_time_slot_indication">Během časového úseku budu aplikace posílat upozornění. Můžete to pro tento úsek změnit (tzn. ztišit) pomocí ovládacího prvku vpravo.</string>
|
||||
<string name="set_fit_preview_indication">Náhledy nebudou v časových osách oříznuty</string>
|
||||
<string name="set_capitalize_indication">Automatically insert a line break after the mention to capitalize the first letter</string>
|
||||
<string name="set_capitalize_indication">Automaticky vkládat zalomení řádku za zmínku, aby bylo první písmeno velké</string>
|
||||
<string name="settings_title_custom_sharing_indication">Umožňuje tvůrcům obsahu sdílet statusy do jejich kanálů RSS</string>
|
||||
<string name="compose">Vytváření</string>
|
||||
<string name="select">Select</string>
|
||||
<string name="select">Vybrat</string>
|
||||
<string name="add_instances">Přidat instanci</string>
|
||||
<string name="set_enable_crash_report">Zapnout hlášení o pádech aplikace</string>
|
||||
<string name="set_enable_crash_report_indication">Pokud je zapnuto, místně se vytvoří hlášení o pádu a pak ho budete moci sdílet.</string>
|
||||
|
@ -525,13 +529,13 @@
|
|||
<string name="link_color_title">Odkazy</string>
|
||||
<string name="link_color">Změnit ve zprávách barvu odkazů (URL, zmínek, tagů apod.)</string>
|
||||
<string name="boost_header_color_title">Hlavička reblogů</string>
|
||||
<string name="displayname_title">Change the color of display name at the top of messages</string>
|
||||
<string name="username_title">Change the color of the user name at the top of messages</string>
|
||||
<string name="displayname_title">Změnit barvu zobrazovaného jména nad zprávami</string>
|
||||
<string name="username_title">Změnit barvu uživatelského jména nad zprávami</string>
|
||||
<string name="boost_header_color">Změnit barvu hlavičky pro reblogy</string>
|
||||
<string name="background_status_title">Příspěvky</string>
|
||||
<string name="background_status">Barva pozadí příspěvků v časových osách</string>
|
||||
<string name="reset_color">Resetovat barvy</string>
|
||||
<string name="clik_reset">Tap here to reset all your custom colors</string>
|
||||
<string name="clik_reset">Klepněte zde k resetu všech vašich vlastních barev</string>
|
||||
<string name="reset">Reset</string>
|
||||
<string name="icons_color_title">Ikony</string>
|
||||
<string name="icons_color">Barva dolních ikon v časových osách</string>
|
||||
|
@ -546,14 +550,14 @@
|
|||
<string name="data_export_theme">Téma bylo exportováno</string>
|
||||
<string name="data_export_theme_success">Téma bylo úspěšně exportováno do CSV</string>
|
||||
<string name="import_theme">Importovat téma</string>
|
||||
<string name="import_theme_title">Tap here to import a theme from a previous export</string>
|
||||
<string name="import_theme_title">Klepněte zde k importu tématu z předchozího exportu</string>
|
||||
<string name="export_theme">Exportovat téma</string>
|
||||
<string name="export_theme_title">Tap here to export the current theme</string>
|
||||
<string name="export_theme_title">Klepněte zde k exportu aktuálního tématu</string>
|
||||
<string name="theme_file_error">Při výběru souboru s tématem došlo k chybě</string>
|
||||
<string name="user_count">Počet uživatelů</string>
|
||||
<string name="status_count">Počet statusů</string>
|
||||
<string name="instance_count">Počet instancí</string>
|
||||
<string name="poll_finish_in">End in %s</string>
|
||||
<string name="poll_finish_in">Konec za %s</string>
|
||||
<string name="no_instance_reccord">Tato instance není k dispozici na https://instances.social</string>
|
||||
<string name="display_full_link">Zobrazit úplný odkaz</string>
|
||||
<string name="share_link">Sdílet odkaz</string>
|
||||
|
@ -605,7 +609,7 @@
|
|||
<string name="filter">Filtr</string>
|
||||
<string name="icon_size">Velikosti ikon</string>
|
||||
<string name="toots_visibility_title">Výchozí viditelnost zpráv:</string>
|
||||
<string name="set_notifications_page">Počet upozornění na jedno nahrání</string>
|
||||
<string name="set_notifications_page">Počet upozornění na jedno načtení</string>
|
||||
<string name="replace_reddit_host">Doména frontendu Redditu</string>
|
||||
<string name="hide_content">Skrýt obsah <</string>
|
||||
<string name="report_val2">Je to spam</string>
|
||||
|
@ -625,7 +629,7 @@
|
|||
<string name="report_3_title">Která pravidla jsou porušována\?</string>
|
||||
<string name="join_the_fediverse">Připojte se k fediverse</string>
|
||||
<string name="delete_field">Smazat pole</string>
|
||||
<string name="fetch_more_messages">Nahrát více zpráv…</string>
|
||||
<string name="fetch_more_messages">Načíst více zpráv…</string>
|
||||
<string name="replace_youtube_description">Použít alternativní frontend pro YouTube</string>
|
||||
<string name="replace_twitter_description">Použít alternativní frontend pro Twitter</string>
|
||||
<string name="replace_youtube">YouTube</string>
|
||||
|
@ -649,7 +653,7 @@
|
|||
<string name="set_display_bookmark_indication">Vždy zobrazovat tlačítko pro záložky</string>
|
||||
<string name="bottom_menu">Spodní nabídka</string>
|
||||
<string name="also_favourite_by">"Oblíbené také u: "</string>
|
||||
<string name="tap_here_to_refresh_poll">Klepněte zde pro aktualizaci hlasování</string>
|
||||
<string name="tap_here_to_refresh_poll">Klepněte zde pro znovunačtení ankety</string>
|
||||
<string name="media_cannot_be_uploaded">Média se nepovedlo nahrát!</string>
|
||||
<string name="load_media_type_title">Načíst náhledy pro média</string>
|
||||
<string name="display_media">Zobrazovat média</string>
|
||||
|
@ -699,7 +703,7 @@
|
|||
<string name="edit_message">Upravit zprávu</string>
|
||||
<string name="toast_bookmark">Zpráva byla přidána do vašich záložek!</string>
|
||||
<string name="toast_unbookmark">Zpráva byla odebrána z vašich záložek!</string>
|
||||
<string name="set_accounts_page">Počet účtů na jedno nahrání</string>
|
||||
<string name="set_accounts_page">Počet účtů na jedno načtení</string>
|
||||
<string name="category_music">Hudba</string>
|
||||
<string name="replace_youtube_host">Doména frontendu YouTube</string>
|
||||
<string name="cannot_be_empty">Toto pole nesmí být prázdné!</string>
|
||||
|
@ -711,7 +715,7 @@
|
|||
<string name="save_changes">Uložit změny</string>
|
||||
<string name="set_bot_content">Účet bota</string>
|
||||
<string name="show_content">Ukázat obsah ></string>
|
||||
<string name="report_1_mute">Neuvidíte jejich příspěvky. Mohou vás stále sledovat a vidět vaše příspěvky a nedozví se, že jste je umlčeli.</string>
|
||||
<string name="report_1_mute">Neuvidíte jejich příspěvky. Mohou vás stále sledovat a vidět vaše příspěvky a nedozví se, že jste je ztlumili.</string>
|
||||
<string name="report_more">Je ještě něco jiného, co si myslíte, že bychom měli vědět\?</string>
|
||||
<string name="profiled_updated">Profil byl aktualizován!</string>
|
||||
<string name="not_valid_list_name">Název seznamu není platný!</string>
|
||||
|
@ -721,7 +725,7 @@
|
|||
<string name="invite_join_the_fediverse">Ahoj! Zveme vás k připojení do Fediverse.</string>
|
||||
<string name="notif_display_mentions">Zmínky</string>
|
||||
<string name="unlocked">Odemčeno</string>
|
||||
<string name="report_1_mute_title">Umlčet %1$s</string>
|
||||
<string name="report_1_mute_title">Ztlumit %1$s</string>
|
||||
<string name="add_field">Přidat pole</string>
|
||||
<string name="report_1_title_more">Zde jsou volby ovládající, co uvidíte na Mastodonu:</string>
|
||||
<string name="report_1_unfollow_title">Nesledovat %1$s</string>
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
<string name="camera">Fotocamera</string>
|
||||
<string name="delete_all">Elimina tutto</string>
|
||||
<string name="schedule">Pianifica</string>
|
||||
<string name="text_size">Dimensioni testo e icona</string>
|
||||
<string name="text_size">Dimensioni testo</string>
|
||||
<string name="next">Successivo</string>
|
||||
<string name="previous">Precedente</string>
|
||||
<string name="open_with">Apri con</string>
|
||||
|
@ -105,18 +105,22 @@
|
|||
<string name="date_day">%d g</string>
|
||||
<plurals name="date_seconds_polls">
|
||||
<item quantity="one">%d secondo</item>
|
||||
<item quantity="many">%d secondi</item>
|
||||
<item quantity="other">%d secondi</item>
|
||||
</plurals>
|
||||
<plurals name="date_minutes_polls">
|
||||
<item quantity="one">%d minuto</item>
|
||||
<item quantity="many">%d minuti</item>
|
||||
<item quantity="other">%d minuti</item>
|
||||
</plurals>
|
||||
<plurals name="date_hours_polls">
|
||||
<item quantity="one">%d ora</item>
|
||||
<item quantity="many">%d ore</item>
|
||||
<item quantity="other">%d ore</item>
|
||||
</plurals>
|
||||
<plurals name="date_day_polls">
|
||||
<item quantity="one">%d giorno</item>
|
||||
<item quantity="many">%d giorni</item>
|
||||
<item quantity="other">%d giorni</item>
|
||||
</plurals>
|
||||
<!-- TOOT -->
|
||||
|
@ -309,7 +313,9 @@
|
|||
<string name="channel_notif_media">Scarica i media</string>
|
||||
<string name="select_sound">Seleziona tono</string>
|
||||
<string name="set_enable_time_slot">Abilita fascia oraria</string>
|
||||
<string name="block_domain_confirm_message">Sei sicuro di voler bloccare %s\?</string>
|
||||
<string name="block_domain_confirm_message">Sei sicuro di voler bloccare %s\?
|
||||
\nNon vedrai i contenuti di quel dominio in nessuna timeline pubblica e nelle notifiche.
|
||||
\nI tuoi followers di quel dominio saranno rimossi.</string>
|
||||
<string name="block_domain">Blocca dominio</string>
|
||||
<string name="toast_block_domain">Il dominio è bloccato</string>
|
||||
<string name="retrieve_remote_status">Recupero dello stato remoto</string>
|
||||
|
@ -350,7 +356,6 @@
|
|||
<string name="languages">Lingue</string>
|
||||
<string name="show_media_only">Solo media</string>
|
||||
<string name="show_media_nsfw">Mostra NSFW</string>
|
||||
<string name="bot">Bot</string>
|
||||
<string name="pixelfed_instance">Istanza Pixelfed</string>
|
||||
<string name="mastodon_instance">Istanza Mastodon</string>
|
||||
<string name="any_tags">Qualsiasi tra queste</string>
|
||||
|
@ -424,7 +429,6 @@
|
|||
<string name="category_activism">Attivismo</string>
|
||||
<string name="category_games">Gioco</string>
|
||||
<string name="category_tech">Tecnologia</string>
|
||||
<string name="category_furry">Furry</string>
|
||||
<string name="category_food">Cibo</string>
|
||||
<string name="instance_logo">Icona dell\'istanza</string>
|
||||
<string name="join_mastodon">Unisciti a Mastodon</string>
|
||||
|
@ -487,6 +491,7 @@
|
|||
<string name="report_account">Segnala account</string>
|
||||
<plurals name="number_of_voters">
|
||||
<item quantity="one">%d votante</item>
|
||||
<item quantity="many">%d Votanti</item>
|
||||
<item quantity="other">%d votanti</item>
|
||||
</plurals>
|
||||
<string-array name="poll_choice_type">
|
||||
|
@ -508,7 +513,7 @@
|
|||
<string name="unfollow_confirm">Vuoi smettere di seguire questo account?</string>
|
||||
<string name="set_unfollow_validation">Mostra finestra di conferma prima di smettere di seguire</string>
|
||||
<string name="replace_medium">Replace Medium links</string>
|
||||
<string name="replace_medium_description">Replace medium.com links with an open source alternative front-end focused on privacy.</string>
|
||||
<string name="replace_medium_description">Usa un frontend alternativo per Medium</string>
|
||||
<string name="replace_medium_host">Default: scribe.rip</string>
|
||||
<string name="set_push_notifications">Usa un sistema di notifiche push per ricevere notifiche in tempo reale.</string>
|
||||
<string name="action_add_notes">Aggiungi note</string>
|
||||
|
@ -534,7 +539,7 @@
|
|||
<string name="make_an_action">Scegli un\'azione</string>
|
||||
<string name="translation">Traduzione</string>
|
||||
<string name="text_color_title">Colore del testo</string>
|
||||
<string name="text_color">Cambia il colore del testo nei riquadri</string>
|
||||
<string name="text_color">Cambia il colore del testo nei messaggi</string>
|
||||
<string name="pref_custom_theme">Usa un tema personalizzato</string>
|
||||
<string name="theming">Temi</string>
|
||||
<string name="data_export_theme">Il tema è stato esportato</string>
|
||||
|
@ -586,4 +591,314 @@
|
|||
<string name="toast_bookmark">Il messaggio è stato aggiunto ai tuoi preferiti!</string>
|
||||
<string name="toast_unbookmark">Il messaggio è stato rimosso dai tuoi preferiti!</string>
|
||||
<string name="set_accounts_page">Numero di account per caricamento</string>
|
||||
<string name="approved">Approvato</string>
|
||||
<string name="replace_twitter">Twitter</string>
|
||||
<string name="is_down">É offline!</string>
|
||||
<string name="instance_health_checkedat">Controllato il: %s</string>
|
||||
<string name="set_single_topbar_title">Barra azione singola</string>
|
||||
<string name="set_single_topbar">Se abilitato, l\'app avrà solo una singola barra per timeline</string>
|
||||
<string name="set_timelines_in_a_list_title">Timeline in lista</string>
|
||||
<string name="channel_notif_update">Nuovo aggiornamento</string>
|
||||
<string name="channel_notif_signup">Nuova iscrizione</string>
|
||||
<string name="channel_notif_report">Nuova segnalazione</string>
|
||||
<string name="notif_update_push">Un messaggio che hai condiviso è stato modificato</string>
|
||||
<string name="show_content">Mostra contenuto ></string>
|
||||
<string name="stop_recording">Ferma registrazione</string>
|
||||
<string name="report_val4">Si tratta di altro</string>
|
||||
<string name="report_1_unfollow">Stai seguendo questo account. Per non vedere più i suoi post sul tuo home feed, smetti di seguirlo.</string>
|
||||
<string name="report_more_remote">L\'account proviene da un altro server. Vuoi inviare una copia anonima del report anche a quel server\?</string>
|
||||
<string name="report_3_title">Quali regole si stanno violando\?</string>
|
||||
<string name="locked">Bloccato</string>
|
||||
<string name="notifications_are">Durante questo intervallo</string>
|
||||
<string name="set_use_cache">Usa la cache</string>
|
||||
<string name="reply">Rispondi</string>
|
||||
<string name="display_options">Mostra opzioni</string>
|
||||
<string name="unconfirmed">Non confermato</string>
|
||||
<string name="action_followed_tag_empty">Non segui alcuna etichetta!</string>
|
||||
<string name="account_silenced">Account silenziato</string>
|
||||
<string name="state">Stato</string>
|
||||
<string name="follow_tag">Segui etichetta</string>
|
||||
<string name="followed_tags">Etichette seguite</string>
|
||||
<string name="notif_update">Modifica messaggio</string>
|
||||
<string name="hide_completely">Nascondi completamente</string>
|
||||
<string name="hide_with_warning_description">Nascondi il contenuto filtrato con un avviso con il titolo del filtro</string>
|
||||
<string name="title">Titolo</string>
|
||||
<string name="context_home_list">Home e liste</string>
|
||||
<string name="unpin_timeline_description">Sei sicuro di non voler fissare quella timeline\?</string>
|
||||
<string name="domains">Domini</string>
|
||||
<string name="set_notif_admin_report">Nuova segnalazione (moderatori)</string>
|
||||
<string name="order_lists">Ordine liste</string>
|
||||
<string name="admin_reject_reports">Rifiuta segnalazioni</string>
|
||||
<string name="type_of_notifications">Tipo di notifiche</string>
|
||||
<string name="mute_tag">Sei sicuro di voler silenziare l\'etichetta %1$s\?</string>
|
||||
<string name="type_of_notifications_title">Scegli il tipo di notifiche</string>
|
||||
<string name="select_a_theme">Seleziona un tema</string>
|
||||
<string name="filter">Filtro</string>
|
||||
<string name="approve">Approva</string>
|
||||
<string name="media_cannot_be_uploaded">I media non possono essere caricati!</string>
|
||||
<string name="set_push_notifications_delay">Imposta il ritardo tra ogni aggiornamento</string>
|
||||
<string name="set_timelines_in_a_list">Quando abilitato, tutte le timeline fissate saranno mostrate in un menú a tendina</string>
|
||||
<string name="view_the_original_message">Apri messaggio originale</string>
|
||||
<string name="full_date_edited">%1$s modificato %2$s</string>
|
||||
<string name="set_display_translate_indication">Mostra sempre il bottone di traduzione</string>
|
||||
<string name="display">Mostra</string>
|
||||
<string name="toast_token">L\'app ha fallito nel ricevere un token</string>
|
||||
<string name="status_history">Cronologia messaggio</string>
|
||||
<string name="edited_message_at">Modificato %1$s</string>
|
||||
<string name="created_message_at">Creato %1$s</string>
|
||||
<string name="notif_display_updates">Aggiornamenti</string>
|
||||
<string name="filtered_by">Filtrato: %1$s</string>
|
||||
<string name="display_remote_profile">Mostra profilo remoto</string>
|
||||
<string name="no_blocked_domains">Non hai domini bloccati</string>
|
||||
<string name="unblock_domain_confirm">Vuoi sbloccare %1$s\?</string>
|
||||
<string name="set_notif_update">Notifica aggiornamenti</string>
|
||||
<string name="set_notif_user_sign_up">Nuova registrazione(moderatori)</string>
|
||||
<string name="open_with_account">Apri con un altro account</string>
|
||||
<string name="icon_size">Dimensioni icona</string>
|
||||
<string name="set_notifications_page">Numero di notifiche per caricamento</string>
|
||||
<string name="category_music">Musica</string>
|
||||
<string name="post_message_text">Inviando messaggio %d/%d</string>
|
||||
<string name="is_up">É online!</string>
|
||||
<string name="notif_display_favourites">Preferiti</string>
|
||||
<string name="hide_content">Nascondi contenuto<</string>
|
||||
<string name="report_1_mute_title">Muta %1$s</string>
|
||||
<string name="report_more_additional">Commenti aggiuntivi</string>
|
||||
<string name="dont_have_an_account">Non hai un account\?</string>
|
||||
<string name="join_the_fediverse">Unisciti al fediverso</string>
|
||||
<string name="add_filter">Aggiungi filtro</string>
|
||||
<string name="my_instance">La mia istanza</string>
|
||||
<string name="my_app">La mia app</string>
|
||||
<string name="Suggestions">Suggerimenti</string>
|
||||
<string name="notif_display_mentions">Menzioni</string>
|
||||
<string name="pref_theme_base_summary">Scegli se la base del tema debba essere scura o chiara</string>
|
||||
<string name="also_boosted_by">Ricondiviso anche da:</string>
|
||||
<string name="label_shape">Forma</string>
|
||||
<string name="cached_messages">Messaggi in cache</string>
|
||||
<string name="release_notes">Note aggiornamento</string>
|
||||
<string name="export_settings">Esporta impostazioni</string>
|
||||
<string name="type_of_theme">Scegli una modalità per il tema</string>
|
||||
<string name="type_default_theme_dark">Tema scuro default</string>
|
||||
<string name="poll_duration">Durata del sondaggio:</string>
|
||||
<string name="domain">Dominio</string>
|
||||
<string name="disable_notifications">Disabilita notifiche</string>
|
||||
<string name="pref_contributor">Temi dai contribuenti</string>
|
||||
<string name="label_eraser_mode">Modalità gomma</string>
|
||||
<string name="refresh_every">Controlla notifiche ogni:</string>
|
||||
<string name="import_settings">Importa impostazioni</string>
|
||||
<string name="notif_sign_up">Un utente si è registrato</string>
|
||||
<string name="notif_report">Un utente ha inviato una segnalazione</string>
|
||||
<string name="cannot_be_empty">Questo campo non può essere vuoto!</string>
|
||||
<string name="sign_ups">Registrazioni</string>
|
||||
<string name="replace_twitter_description">Usa un frontend alternativo per Twitter</string>
|
||||
<string name="data_export_settings_success">Le impostazioni sono state esportate con successo</string>
|
||||
<string name="data_import_settings_success">Le impostazioni sono state importate con successo</string>
|
||||
<string name="keepon">Continua</string>
|
||||
<string name="report_indication_title_status">Dicci cosa non va con questo post</string>
|
||||
<string name="report_val3">Viola le regole del server</string>
|
||||
<string name="report_val_more3">Non sai se violi delle regole specifiche</string>
|
||||
<string name="report_val_more4">Il problema non rientra nelle altre categorie</string>
|
||||
<string name="report_1_title">Non vuoi vederlo\?</string>
|
||||
<string name="report_1_title_more">Qui ci sono le tue opzioni per controllare cosa vedi su Mastodon:</string>
|
||||
<string name="report_1_block_title">Blocca %1$s</string>
|
||||
<string name="report_more">C\'é qualcos\'altro che vorresti aggiungere\?</string>
|
||||
<string name="instance_health_indication">Versione: %s
|
||||
\n%s utenti -%s stati</string>
|
||||
<string name="report_indication_title_status_more">Scegli l\'opzione migliore</string>
|
||||
<string name="report_1_unfollow_title">Non seguire %1$s</string>
|
||||
<string name="invite_join_the_fediverse">Ciao! Ti inviatiamo ad unirti al fediverso.</string>
|
||||
<string name="notif_display_updates_from_people">Aggiornamenti dalle persone</string>
|
||||
<string name="clear_all_notif">Cancella tutte le notifiche</string>
|
||||
<string name="save_changes">Salva modifiche</string>
|
||||
<string name="display_all_categories">Mostra tutte le categorie</string>
|
||||
<string name="interactions">Interazioni</string>
|
||||
<string name="add_field">Aggiungi campo</string>
|
||||
<string name="unlocked">Sbloccato</string>
|
||||
<string name="delete_field_confirm">Sei sicuro di voler eliminare il campo\?</string>
|
||||
<string name="scheduled">Schedulato</string>
|
||||
<string name="not_valid_list_name">Il nome della lista non é valido!</string>
|
||||
<string name="set_display_bookmark_indication">Mostra sempre il pulsante segnalibro</string>
|
||||
<string name="bottom_menu">Menú inferiore</string>
|
||||
<string name="top_menu">Barra del menú superiore</string>
|
||||
<string name="also_favourite_by">"Preferito anche da: "</string>
|
||||
<string name="last_active">Ultima volta attivo</string>
|
||||
<string name="resolved">Risolto</string>
|
||||
<string name="tap_here_to_refresh_poll">Clicca qui per aggiornare il sondaggio</string>
|
||||
<string name="action_announcement_from_to">Annunci %1$s - %2$s</string>
|
||||
<string name="delete_cache">Elimina cache</string>
|
||||
<string name="files_cache_size">Grandezza file cache</string>
|
||||
<string name="default_system_language">Usa la lingua di sistema</string>
|
||||
<string name="open_draft">Apri bozza</string>
|
||||
<string name="type_of_notifications_delay_title">Tempo controllo notifiche</string>
|
||||
<string name="display_media">Mostra i media</string>
|
||||
<string name="display_timelines">Mostra le timeline</string>
|
||||
<string name="remember_position">Ricorda posizione nelle timeline</string>
|
||||
<string name="aggregate_notifications">Aggrega notifiche</string>
|
||||
<string name="display_media_notification">Mostra i media nelle notifiche</string>
|
||||
<string name="change_logo">Cambia logo</string>
|
||||
<string name="change_logo_description">Cambia il logo dell\'app sul dispositivo</string>
|
||||
<string name="action_pin">Fissa messaggio</string>
|
||||
<string name="action_unpin">Non fissare messaggio</string>
|
||||
<string name="edit_message">Modifica messaggio</string>
|
||||
<string name="moderator">Moderatore</string>
|
||||
<string name="assign_to_me">Assegnamelo</string>
|
||||
<string name="unassign">Non assegnare</string>
|
||||
<string name="notification_remove_from_cache">Le notifiche sono state rimosse dalla cache.</string>
|
||||
<string name="report">Segnala</string>
|
||||
<string name="action_unfollow_tag">Non seguire etichetta</string>
|
||||
<string name="action_unfollow_tag_confirm">Smettere di seguire questa etichetta\?</string>
|
||||
<string name="write_the_tag_to_follow">Scrivi l\'etichetta da seguire</string>
|
||||
<string name="profiles">Profili</string>
|
||||
<string name="toast_feature_not_supported">La tua istanza non supporta questa feature!</string>
|
||||
<string name="hide_with_warning">Nascondi avviso</string>
|
||||
<string name="hide_completely_description">Nascondi completamente il contenuto filtrato, come se non esistesse</string>
|
||||
<string name="keyword_or_phrase">Parola chiave o frase</string>
|
||||
<string name="delete_keyword">Elimina parola chiave</string>
|
||||
<string name="add_keyword">Aggiungi parola chiave</string>
|
||||
<string name="toast_fetch_error">L\'app non é riuscita a trovare dati remoti!</string>
|
||||
<string name="notif_reported">Invia una segnalazione</string>
|
||||
<string name="not_interested">Non interessato</string>
|
||||
<string name="action_privacy_policy">Politiche sulla privacy</string>
|
||||
<string name="unpin_timeline">Rimuovere timeline fissate\?</string>
|
||||
<string name="action_pinned_delete">Eliminare le timeline fissate\?</string>
|
||||
<string name="keep_notifications">Mantieni notifiche</string>
|
||||
<string name="reject_media">Rifiuta media</string>
|
||||
<string name="reject_reports">Rifiuta segnalazioni</string>
|
||||
<string name="admin_domainblock_domain">Il blocco di dominio non previene la creazione di account nel database, ma applicherà retroattivamente e automaticamente metodi specifici di moderazione su questi account.</string>
|
||||
<string name="severity">Gravità</string>
|
||||
<string name="admin_domainblock_severity">Il silenziamento renderà i post dell\'account invisibili a tutti quelli che non lo seguono.La sospensione rimuoverà tutti i contenuti dell\'account, media e dati del profilo. Usa nessuno se vuoi solo rifiutare i media.</string>
|
||||
<string name="admin_domainblock_reject_media">Ignora tutte le segnalazioni provenienti da questo dominio.Irrelevante per le sospensioni</string>
|
||||
<string name="set_cardview">Cards in sovraimpressione</string>
|
||||
<string name="set_cardview_indication">Se abilitato, gli oggetti nelle timeline avranno un\'ombra e un elevazione.</string>
|
||||
<string name="set_customize_light">Personalizza tema chiaro</string>
|
||||
<string name="unmute_home">Non silenziare per la home</string>
|
||||
<string name="set_customize_dark">Personalizza tema scuro</string>
|
||||
<string name="set_customize_dark_indication">Permette di personalizzare alcuni elementi nei messaggi per il tema scuro.</string>
|
||||
<string name="mute_them_all">Muta tutti</string>
|
||||
<string name="set_use_cache_indication">Le timeline sarranno mantenute in cache in modo da velocizzare l\'app.</string>
|
||||
<string name="display_media_notification_summary">Mostra i media nelle notifiche di preferiti e condivisioni</string>
|
||||
<string name="pickup_logo">Scegli un logo</string>
|
||||
<string name="set_live_translate_title">Traduci messaggi</string>
|
||||
<string name="set_live_translate">Forza traduzione in una lingua specifica.Scegli la prima opzione per resettarla alle impostazioni del dispositivo</string>
|
||||
<string name="user">Utente</string>
|
||||
<string name="administrator">Amministratore</string>
|
||||
<string name="max_indentation_thread">Indentazioni massime nei threads</string>
|
||||
<string name="set_unlisted_replies">Risposte non in lista</string>
|
||||
<string name="set_unlisted_replies_indication">Riguarda solo le risposte pubbliche.Se abilitato, le tue risposte avranno automaticamente la visibilità \"non in lista\" invece di \"pubblico\"</string>
|
||||
<string name="email_status">Stato email</string>
|
||||
<string name="login_status">Stato login</string>
|
||||
<string name="joined">Unito</string>
|
||||
<string name="recent_ip">IP recente</string>
|
||||
<string name="allow">Permetti</string>
|
||||
<string name="warn">Avvisa</string>
|
||||
<string name="email_user">Notifica user per email</string>
|
||||
<string name="custom_warning">Avviso personalizzato</string>
|
||||
<string name="list_reported_statuses">Status segnalazioni</string>
|
||||
<string name="silenced">Silenziato</string>
|
||||
<string name="set_language_picker">Permette di ridurre la lista della lingua del post quando si compone un messaggio.</string>
|
||||
<string name="restart_the_app">Riavviare l\'app\?</string>
|
||||
<string name="restart">Riavvia</string>
|
||||
<string name="restart_the_app_theme">Devi riavviare l\'app per applicare le modifiche.</string>
|
||||
<string name="category_custom">Personalizzato</string>
|
||||
<string name="instance_not_valid">L\'istanza non sembra essere valida!</string>
|
||||
<string name="followers_only">Solo followers</string>
|
||||
<string name="add_status">Aggiungi status</string>
|
||||
<string name="favourited_by">Preferito da</string>
|
||||
<string name="other">Altro</string>
|
||||
<string name="eg_sensitive_content">Es.: contenuto sensibile</string>
|
||||
<string name="pref_custom_theme_new_summary">Permette di creare il tuo tema personalizzato</string>
|
||||
<string name="notification_sounds">Suoni delle notifiche</string>
|
||||
<string name="action_lists_edit">Modifica lista</string>
|
||||
<string name="remove_status">Rimuovi status</string>
|
||||
<string name="pref_contributor_summary">Scegli un tema creato dai contribuenti</string>
|
||||
<string name="admin_scope">Sono un moderatore</string>
|
||||
<string name="set_bot_content">Account bot</string>
|
||||
<string name="no_account_in_list">Nessun account trovato per questa lista!</string>
|
||||
<string name="pref_theme_base">Base del tema</string>
|
||||
<string name="set_unfollow_validation_title">Conferma unfollow</string>
|
||||
<string name="more_actions">Altre azioni</string>
|
||||
<string name="mute_home">Silenzia per la home</string>
|
||||
<string name="report_val2">È spam</string>
|
||||
<string name="report_title">Segnala %1$s</string>
|
||||
<string name="add_all_users_home_muted">Aggiungi tutti gli utenti nella home silenziata</string>
|
||||
<string name="types_of_notifications_to_display">Tipo di notifiche da mostrare</string>
|
||||
<string name="origin_report">Origine dell\'account segnalato</string>
|
||||
<string name="message_language">Lingua dei messaggi</string>
|
||||
<string name="my_account">Il mio account</string>
|
||||
<string name="fetch_notifications">Controlla notifiche</string>
|
||||
<string name="set_display_counters">Mostra contatori</string>
|
||||
<string name="account_warned">Account avvisato</string>
|
||||
<string name="account_unsuspended">Account non sospeso</string>
|
||||
<string name="account_suspended">Account sospeso</string>
|
||||
<string name="account_undisabled">Account abilitato</string>
|
||||
<string name="account_disabled">Account disabilitato</string>
|
||||
<string name="notif_submitted_report">Invia una segnalazione</string>
|
||||
<string name="notif_signed_up">Iscritto</string>
|
||||
<string name="admin_reject_media">Rifiuta file media</string>
|
||||
<string name="public_comment">Commento pubblico</string>
|
||||
<string name="private_comment">Commento privato</string>
|
||||
<string name="saved_changes">Modifiche salvate!</string>
|
||||
<string name="pref_customize">Personalizza colori</string>
|
||||
<string name="set_dynamic_color">Colore dinamico</string>
|
||||
<string name="set_dynamic_color_indication">Allinea la tonalità con il colore dello sfondo del dispositivo.</string>
|
||||
<string name="put_all_accounts_in_home_muted">Tutti gli account saranno silenziati per la timeline della Home.</string>
|
||||
<string name="replace_instagram_description">Usa un frontend alternativo per Instagram</string>
|
||||
<string name="replace_reddit_description">Usa un fronten alternativo per Reddit</string>
|
||||
<string name="most_recent">Piú recente</string>
|
||||
<string name="clear_cache">Pulisci la cache</string>
|
||||
<string name="delete_cache_message">Sei sicuro di voler pulire la cache\? Se hai bozze con media, andranno persi.</string>
|
||||
<string name="data_export_settings">Le impostazioni sono state esportate</string>
|
||||
<string name="post_message">Invio messaggio…</string>
|
||||
<string name="report_val_more1">Non è qualcosa che vorresti vedere</string>
|
||||
<string name="report_1_block">Non vedrai i suoi post.Non potrà vedere i tuoi post o seguirti.Saprà di essere stato bloccato.</string>
|
||||
<string name="delete_field">Campo eliminato</string>
|
||||
<string name="customize_timelines">Personalizza timelines</string>
|
||||
<string name="muted_menu_home">Server mutati</string>
|
||||
<string name="profiled_updated">Il profilo é stato aggiornato!</string>
|
||||
<string name="label_line">Linea</string>
|
||||
<string name="location">Località</string>
|
||||
<string name="label_oval">Ovale</string>
|
||||
<string name="label_rectangle">Rettangolo</string>
|
||||
<string name="report_1_mute">Non vedrai i suoi post. Potrà ancora seguirti e vedere i tuoi post e non saprà che l\'hai mutato.</string>
|
||||
<string name="report_more_forward">Inviato a %1$s</string>
|
||||
<string name="message_has_been_sent">Il messaggio è stato inviato!</string>
|
||||
<string name="poll_type">Tipo di sondaggio:</string>
|
||||
<string name="report_sent">Il report é stato inviato!</string>
|
||||
<string name="about_mastodon">\"Mastodon non é un singolo sito come Twitter o Facebook, é una rete di migliaia di communità gestite da organizzazioni e individui differenti che forniscono un\'esperienza social integrata.\"</string>
|
||||
<string name="mark_all_as_read">Segna tutte le notifiche come lette</string>
|
||||
<string name="delete_notification_all_warning">Sei sicuro di voler eliminare tutte le notifiche\? L\'azione non puó essere annulata.</string>
|
||||
<string name="notif_display_poll_results">Risultati sondaggio</string>
|
||||
<string name="msg_save_image">Vuoi uscire senza salvare l\'immagine\?</string>
|
||||
<string name="permission_missing">Permessi non abilitati!</string>
|
||||
<string name="set_display_counter">Mostra contatori per i messaggi</string>
|
||||
<string name="load_media_type_title">Mostra anteprime per i media</string>
|
||||
<string name="set_your_max_char_count">Imposta numero massimo di caratteri</string>
|
||||
<string name="load_settings">Carica impostazioni esportate</string>
|
||||
<string name="set_display_counters_description">Mostrerà un contatore nel tab delle timeline per i nuovi messaggi</string>
|
||||
<string name="aggregate_notifications_summary">Se abiliato, l\'app aggregherà le notifiche della stessa tipologia</string>
|
||||
<string name="mark_resolved">Segna come risolto</string>
|
||||
<string name="mark_unresolved">Segna come irrisolto</string>
|
||||
<string name="account_unsilenced">Account non silenziato</string>
|
||||
<string name="confirmed">Confermato</string>
|
||||
<string name="account_rejected">Account rifiutato</string>
|
||||
<string name="account_approved">Account approvato</string>
|
||||
<string name="action_tag_follow">Segui etichetta</string>
|
||||
<string name="not_valid_tag_name">Il nome etichetta non é valido!</string>
|
||||
<string name="watch_trends_for_instance">Quarda i trends di questa istanza</string>
|
||||
<string name="blocked_domains">Domini bloccati</string>
|
||||
<string name="unblock_domain">Domini sbloccati</string>
|
||||
<string name="admin_reject_obfuscate">Nascondi nome dominio</string>
|
||||
<string name="admin_domainblock_reject_reports">Ignora tutte le segnalazioni provenienti da questo dominio.Irrilevante per le sospensioni</string>
|
||||
<string name="create_domain_block">Crea un blocco dominio</string>
|
||||
<string name="admin_domainblock_private_comment">Commento privato riguardo le limitazioni di questo dominio per uso interno dei moderatori.</string>
|
||||
<string name="admin_domainblock_public_comment">Commento pubblico riguardo questo dominio, se é abilitata la lista delle limitazioni del dominio.</string>
|
||||
<string name="pref_customize_summary">Permette di impostare un colore personalizzato per i temi.</string>
|
||||
<string name="type_default_theme_light">Tema chiaro default</string>
|
||||
<string name="set_customize_light_indication">Permette di personalizzare alcuni elementi nei messaggi per il tema chiaro.</string>
|
||||
<string name="toast_unpin">Il messaggio non é piú fissato!</string>
|
||||
<string name="toast_pin">Il messaggio é stato fissato</string>
|
||||
<string name="filter_action">Filtra azione</string>
|
||||
<string name="filter_action_explanations">Scegli quale azione eseguire quando un post corrisponde al filtro</string>
|
||||
<string name="show_anyway">Mostra comunque</string>
|
||||
<string name="toast_error_add_to_list">L\'app non é riuscita ad aggiungere l\'account nella lista!</string>
|
||||
<string name="delete_timeline">Elimina timeline</string>
|
||||
</resources>
|
|
@ -914,4 +914,10 @@
|
|||
<string name="set_customize_light_indication">Permitit de personalizare unos cantos elementos in is messàgios pro su tema craru.</string>
|
||||
<string name="toast_try_later">Torra a proare prus a tardu.</string>
|
||||
<string name="toast_error_fetch_message">S\'aplicatzione no at agatadu su messàgiu remotu.</string>
|
||||
<string name="mute_tag_action">Pone s\'eticheta a sa muda</string>
|
||||
<string name="unpin_tag">Isbloca s\'eticheta</string>
|
||||
<string name="set_display_translate_indication">Ammustra semper su butone de tradutzione</string>
|
||||
<string name="unmute_tag_action">Torra a ativare s\'eticheta</string>
|
||||
<string name="pin_tag">Apica s\'eticheta</string>
|
||||
<string name="unfollow_tag">Non sigas prus s\'eticheta</string>
|
||||
</resources>
|
|
@ -226,7 +226,7 @@
|
|||
<string name="action_follow">Takip Et</string>
|
||||
<string name="action_unblock">Engeli kaldır</string>
|
||||
<string name="action_mute">Sustur</string>
|
||||
<string name="action_unmute">Sesi aç</string>
|
||||
<string name="action_unmute">Susturmaktan vazgeç</string>
|
||||
<string name="request_sent">İstek gönderildi</string>
|
||||
<string name="followed_by">Sizi takip ediyor</string>
|
||||
<string name="set_capitalize">Cevaplarda ilk harf büyük olsun</string>
|
||||
|
@ -647,8 +647,8 @@
|
|||
<string name="report_title">%1$s bildiriliyor</string>
|
||||
<string name="report_val_more2">Kötü amaçlı bağlantılar, sahte etkileşim veya tekrarlayan yanıtlar</string>
|
||||
<string name="report_1_unfollow">Bu hesabı takip ediyorsunuz. Gönderilerini artık ana akışınızda görmemek için onları takip etmeyi bırakın.</string>
|
||||
<string name="report_1_mute_title">%1$s sesini kapat</string>
|
||||
<string name="report_1_mute">Onların gönderilerini görmeyeceksiniz. Yine de sizi takip edebilir ve gönderilerinizi görebilirler ve sessize alındıklarını bilmezler.</string>
|
||||
<string name="report_1_mute_title">%1$s sustur</string>
|
||||
<string name="report_1_mute">Onların gönderilerini görmeyeceksiniz. Yine de sizi takip edebilir ve gönderilerinizi görebilirler ve susturulduklarını bilmezler.</string>
|
||||
<string name="report_1_block_title">%1$s engelle</string>
|
||||
<string name="report_2_title">Bu bildirimi destekleyen herhangi bir gönderi var mı\?</string>
|
||||
<string name="report_more_remote">Hesap başka bir sunucudan. Bildirimin anonimleştirilmiş bir kopyası da oraya gönderilsin mi\?</string>
|
||||
|
@ -899,7 +899,7 @@
|
|||
<string name="admin_domainblock_private_comment">Moderatörler tarafından özel kullanım için bu etki alanı sınırlaması hakkında yorum yapın.</string>
|
||||
<string name="admin_domainblock_reject_obfuscate">Etki alanı sınırlamaları listesinin tanıtılması etkinleştirilmişse listedeki etki alanı adını kısmen gizleyin</string>
|
||||
<string name="admin_domainblock_public_comment">Etki alanı sınırlamaları listesinin tanıtılması etkinleştirilmişse, bu etki alanı sınırlaması hakkında herkese açık yorum yapın.</string>
|
||||
<string name="mute_tag">%1$s etiketini sessize almak istediğinizden emin misiniz\?</string>
|
||||
<string name="mute_tag">%1$s etiketini susturmak istediğinizden emin misiniz\?</string>
|
||||
<string name="pref_customize">Renkleri özelleştir</string>
|
||||
<string name="pref_customize_summary">Temalar için özel renklerinizi ayarlamanıza izin verir.</string>
|
||||
<string name="set_dynamic_color">Değişken Renk</string>
|
||||
|
@ -920,10 +920,16 @@
|
|||
<string name="toast_on_your_instance">Görüşme sizin sunucunuzda başladı!</string>
|
||||
<string name="toast_try_later">Lütfen daha sonra tekrar deneyin.</string>
|
||||
<string name="toast_error_fetch_message">Uygulama uzak mesajı bulamadı.</string>
|
||||
<string name="mute_tag_action">Etiketi sessize al</string>
|
||||
<string name="mute_tag_action">Etiketi sustur</string>
|
||||
<string name="unpin_tag">Etiketin sabitlemesini kaldır</string>
|
||||
<string name="set_display_translate_indication">Her zaman çevir düğmesini göster</string>
|
||||
<string name="unmute_tag_action">Etiketin sesini aç</string>
|
||||
<string name="unmute_tag_action">Etiketi susturmaktan vazgeç</string>
|
||||
<string name="pin_tag">Etiketi sabitle</string>
|
||||
<string name="unfollow_tag">Etiketi takibi bırak</string>
|
||||
<string name="muted_menu_home">Ana sayfada susturulan kullanıcılar</string>
|
||||
<string name="put_all_accounts_in_home_muted">Ana sayfa zaman çizelgesi için tüm hesaplar susturulacaktır.</string>
|
||||
<string name="mute_them_all">Tümünü sustur</string>
|
||||
<string name="unmute_home">Ana sayfa için susturmaktan vazgeç</string>
|
||||
<string name="add_all_users_home_muted">Tüm kullanıcıları ana sayfada susturmaya ekle</string>
|
||||
<string name="mute_home">Ana sayfa için sustur</string>
|
||||
</resources>
|
|
@ -54,6 +54,7 @@
|
|||
<string name="home_menu">Home</string>
|
||||
<string name="local_menu">Local timeline</string>
|
||||
<string name="muted_menu">Muted users</string>
|
||||
<string name="muted_menu_home">Home muted users</string>
|
||||
<string name="blocked_menu">Blocked users</string>
|
||||
<string name="notifications">Notifications</string>
|
||||
<string name="follow_request">Follow requests</string>
|
||||
|
@ -2059,4 +2060,9 @@
|
|||
<string name="pin_tag">Pin tag</string>
|
||||
<string name="unpin_tag">Unpin tag</string>
|
||||
<string name="unfollow_tag">Unfollow tag</string>
|
||||
<string name="mute_home">Mute for home</string>
|
||||
<string name="unmute_home">Unmute for home</string>
|
||||
<string name="add_all_users_home_muted">Add all users in muted home</string>
|
||||
<string name="put_all_accounts_in_home_muted">All accounts will be muted for the Home timeline.</string>
|
||||
<string name="mute_them_all">Mute them all</string>
|
||||
</resources>
|
|
@ -0,0 +1,4 @@
|
|||
Added:
|
||||
- Mute/Unmute accounts in the Home timeline from their messages or their profiles
|
||||
- Add all users from a list to "Muted home" in one click
|
||||
- Display/Manage users that are muted for home
|
|
@ -0,0 +1,7 @@
|
|||
Added:
|
||||
- Mute/Unmute accounts in the Home timeline from their messages or their profiles
|
||||
- Add all users from a list to "Muted home" in one click
|
||||
- Display/Manage users that are muted for home
|
||||
|
||||
Fixed:
|
||||
- Timeline crashes
|
Loading…
Reference in a new issue