From 0d465d3bee6a97b425b13bdd9bea5907dbc05475 Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Mon, 23 Sep 2019 17:09:13 +0200 Subject: [PATCH 01/21] remove duplicate request when timeline is empty (#1491) --- .../tusky/fragment/TimelineFragment.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java b/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java index 3bf38f691..a4dc23b8e 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java @@ -68,7 +68,6 @@ import com.keylesspalace.tusky.view.EndlessOnScrollListener; import com.keylesspalace.tusky.viewdata.StatusViewData; import java.io.IOException; -import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -286,12 +285,12 @@ public class TimelineFragment extends SFragment implements } private void updateCurrent() { - String topId; if (this.statuses.isEmpty()) { - topId = null; - } else { - topId = CollectionsKt.first(this.statuses, Either::isRight).asRight().getId(); + return; } + + String topId = CollectionsKt.first(this.statuses, Either::isRight).asRight().getId(); + this.timelineRepo.getStatuses(topId, null, null, LOAD_AT_ONCE, TimelineRequestMode.NETWORK) .observeOn(AndroidSchedulers.mainThread()) @@ -303,7 +302,7 @@ public class TimelineFragment extends SFragment implements if (!statuses.isEmpty()) { filterStatuses(statuses); - if (!this.statuses.isEmpty() && topId != null) { + if (!this.statuses.isEmpty()) { // clear old cached statuses Iterator> iterator = this.statuses.iterator(); while (iterator.hasNext()) { From ca3ce63c8065165ec234b1e6f7bce776372c9e83 Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Tue, 24 Sep 2019 20:33:05 +0200 Subject: [PATCH 02/21] fix content warning edittext not losing focus when its hidden (#1498) --- app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java b/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java index a9ed60e47..e34802e3f 100644 --- a/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java @@ -1718,6 +1718,7 @@ public final class ComposeActivity color = ContextCompat.getColor(this, R.color.tusky_blue); } else { contentWarningBar.setVisibility(View.GONE); + textEditor.requestFocus(); color = ThemeUtils.getColor(this, android.R.attr.textColorTertiary); } contentWarningButton.getDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN); From a9440ea2ab27c25380c62ccc73b58f7e527ead64 Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Tue, 24 Sep 2019 20:33:29 +0200 Subject: [PATCH 03/21] filter polls (#1496) --- .../tusky/fragment/SFragment.java | 19 +- .../tusky/fragment/TimelineFragment.java | 2 +- .../tusky/fragment/ViewThreadFragment.java | 2 +- .../com/keylesspalace/tusky/FilterTest.kt | 238 ++++++++++++++++++ 4 files changed, 256 insertions(+), 5 deletions(-) create mode 100644 app/src/test/java/com/keylesspalace/tusky/FilterTest.kt diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.java b/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.java index 9dd5706d6..81fa8a8d5 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.java @@ -33,6 +33,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.PopupMenu; import androidx.core.app.ActivityOptionsCompat; @@ -52,6 +53,7 @@ import com.keylesspalace.tusky.db.AccountManager; import com.keylesspalace.tusky.di.Injectable; import com.keylesspalace.tusky.entity.Attachment; import com.keylesspalace.tusky.entity.Filter; +import com.keylesspalace.tusky.entity.PollOption; import com.keylesspalace.tusky.entity.Status; import com.keylesspalace.tusky.network.MastodonApi; import com.keylesspalace.tusky.network.TimelineCases; @@ -445,7 +447,8 @@ public abstract class SFragment extends BaseFragment implements Injectable { }); } - void reloadFilters(boolean forceRefresh) { + @VisibleForTesting + public void reloadFilters(boolean forceRefresh) { if (filters != null && !forceRefresh) { applyFilters(forceRefresh); return; @@ -469,7 +472,7 @@ public abstract class SFragment extends BaseFragment implements Injectable { }); } - protected boolean filterIsRelevant(Filter filter) { + protected boolean filterIsRelevant(@NonNull Filter filter) { // Called when building local filter expression // Override to select relevant filters for your fragment return false; @@ -480,7 +483,17 @@ public abstract class SFragment extends BaseFragment implements Injectable { // Override to refresh your fragment } - boolean shouldFilterStatus(Status status) { + @VisibleForTesting + public boolean shouldFilterStatus(Status status) { + + if(filterRemoveRegex && status.getPoll() != null) { + for(PollOption option: status.getPoll().getOptions()) { + if(filterRemoveRegexMatcher.reset(option.getTitle()).find()) { + return true; + } + } + } + return (filterRemoveRegex && (filterRemoveRegexMatcher.reset(status.getActionableStatus().getContent()).find() || (!status.getSpoilerText().isEmpty() && filterRemoveRegexMatcher.reset(status.getActionableStatus().getSpoilerText()).find()))); } diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java b/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java index a4dc23b8e..44937d150 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java @@ -376,7 +376,7 @@ public class TimelineFragment extends SFragment implements } @Override - protected boolean filterIsRelevant(Filter filter) { + protected boolean filterIsRelevant(@NonNull Filter filter) { return filterContextMatchesKind(kind, filter.getContext()); } diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/ViewThreadFragment.java b/app/src/main/java/com/keylesspalace/tusky/fragment/ViewThreadFragment.java index 00464311d..825cd23ce 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/ViewThreadFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/ViewThreadFragment.java @@ -686,7 +686,7 @@ public final class ViewThreadFragment extends SFragment implements } @Override - protected boolean filterIsRelevant(Filter filter) { + protected boolean filterIsRelevant(@NonNull Filter filter) { return filter.getContext().contains(Filter.THREAD); } diff --git a/app/src/test/java/com/keylesspalace/tusky/FilterTest.kt b/app/src/test/java/com/keylesspalace/tusky/FilterTest.kt new file mode 100644 index 000000000..704586442 --- /dev/null +++ b/app/src/test/java/com/keylesspalace/tusky/FilterTest.kt @@ -0,0 +1,238 @@ +package com.keylesspalace.tusky + +import android.os.Bundle +import android.text.SpannedString +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.keylesspalace.tusky.entity.Filter +import com.keylesspalace.tusky.entity.Poll +import com.keylesspalace.tusky.entity.PollOption +import com.keylesspalace.tusky.entity.Status +import com.keylesspalace.tusky.fragment.SFragment +import com.keylesspalace.tusky.network.MastodonApi +import com.nhaarman.mockitokotlin2.mock +import okhttp3.Request +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito +import org.robolectric.Robolectric +import org.robolectric.annotation.Config +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response +import java.util.* + +@Config(application = FakeTuskyApplication::class) +@RunWith(AndroidJUnit4::class) +class FilterTest { + + private val fragment = FakeFragment() + + @Before + fun setup() { + + val controller = Robolectric.buildActivity(FakeActivity::class.java) + val activity = controller.get() + + activity.accountManager = mock() + activity.themeUtils = mock() + val apiMock = Mockito.mock(MastodonApi::class.java) + Mockito.`when`(apiMock.getFilters()).thenReturn(object: Call> { + override fun isExecuted(): Boolean { + return false + } + override fun clone(): Call> { + throw Error("not implemented") + } + override fun isCanceled(): Boolean { + throw Error("not implemented") + } + override fun cancel() { + throw Error("not implemented") + } + override fun execute(): Response> { + throw Error("not implemented") + } + override fun request(): Request { + throw Error("not implemented") + } + + override fun enqueue(callback: Callback>) { + callback.onResponse( + this, + Response.success( + listOf( + Filter( + id = "123", + phrase = "badWord", + context = listOf(Filter.HOME), + expiresAt = null, + irreversible = false, + wholeWord = false + ), + Filter( + id = "123", + phrase = "badWholeWord", + context = listOf(Filter.HOME, Filter.PUBLIC), + expiresAt = null, + irreversible = false, + wholeWord = true + ), + Filter( + id = "123", + phrase = "wrongContext", + context = listOf(Filter.PUBLIC), + expiresAt = null, + irreversible = false, + wholeWord = true + ) + ) + ) + ) + } + }) + + activity.mastodonApi = apiMock + + + controller.create().start() + + fragment.mastodonApi = apiMock + + + activity.supportFragmentManager.beginTransaction() + .replace(R.id.activity_main, fragment, "fragment") + .commit() + + fragment.reloadFilters(false) + + } + + @Test + fun shouldNotFilter() { + assertFalse(fragment.shouldFilterStatus( + mockStatus(content = "should not be filtered") + )) + } + + @Test + fun shouldNotFilter_whenContextDoesNotMatch() { + assertFalse(fragment.shouldFilterStatus( + mockStatus(content = "one two wrongContext three") + )) + } + + @Test + fun shouldFilter_whenContentMatchesBadWord() { + assertTrue(fragment.shouldFilterStatus( + mockStatus(content = "one two badWord three") + )) + } + + @Test + fun shouldFilter_whenContentMatchesBadWordPart() { + assertTrue(fragment.shouldFilterStatus( + mockStatus(content = "one two badWordPart three") + )) + } + + @Test + fun shouldFilter_whenContentMatchesBadWholeWord() { + assertTrue(fragment.shouldFilterStatus( + mockStatus(content = "one two badWholeWord three") + )) + } + + @Test + fun shouldNotFilter_whenContentDoesNotMAtchWholeWord() { + assertFalse(fragment.shouldFilterStatus( + mockStatus(content = "one two badWholeWordTest three") + )) + } + + @Test + fun shouldFilter_whenSpoilerTextDoesMatch() { + assertTrue(fragment.shouldFilterStatus( + mockStatus( + content = "should not be filtered", + spoilerText = "badWord should be filtered" + ) + )) + } + + @Test + fun shouldFilter_whenPollTextDoesMatch() { + assertTrue(fragment.shouldFilterStatus( + mockStatus( + content = "should not be filtered", + spoilerText = "should not be filtered", + pollOptions = listOf("should not be filtered", "badWord") + ) + )) + } + + private fun mockStatus( + content: String = "", + spoilerText: String = "", + pollOptions: List? = null + ): Status { + return Status( + id = "123", + url = "https://mastodon.social/@Tusky/100571663297225812", + account = mock(), + inReplyToId = null, + inReplyToAccountId = null, + reblog = null, + content = SpannedString(content), + createdAt = Date(), + emojis = emptyList(), + reblogsCount = 0, + favouritesCount = 0, + reblogged = false, + favourited = false, + sensitive = false, + spoilerText = spoilerText, + visibility = Status.Visibility.PUBLIC, + attachments = arrayListOf(), + mentions = emptyArray(), + application = null, + pinned = false, + poll = if (pollOptions != null) { + Poll( + id = "1234", + expiresAt = null, + expired = false, + multiple = false, + votesCount = 0, + options = pollOptions.map { + PollOption(it, 0) + }, + voted = false + ) + } else null, + card = null + ) + } + +} + +class FakeActivity: BottomSheetActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + } +} + +class FakeFragment: SFragment() { + override fun removeItem(position: Int) { + } + + override fun onReblog(reblog: Boolean, position: Int) { + } + + override fun filterIsRelevant(filter: Filter): Boolean { + return filter.context.contains(Filter.HOME) + } +} \ No newline at end of file From 33a78a59a02beef5e1dbc98ac75fd115e4b2b890 Mon Sep 17 00:00:00 2001 From: Ivan Kupalov Date: Tue, 24 Sep 2019 20:33:41 +0200 Subject: [PATCH 04/21] Fix screen reader not announcing post content in some cases (#1495) --- .../com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java b/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java index 4f95f6cfb..6cbdc7d08 100644 --- a/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java +++ b/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java @@ -682,7 +682,7 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder { String description = context.getString(R.string.description_status, status.getUserFullName(), getContentWarningDescription(context, status), - (!status.isSensitive() || status.isExpanded() ? status.getContent() : ""), + (TextUtils.isEmpty(status.getSpoilerText()) || !status.isSensitive() || status.isExpanded() ? status.getContent() : ""), getCreatedAtDescription(status.getCreatedAt()), getReblogDescription(context, status), status.getNickname(), From 5be7e31eaac7458a2097c57b2d1b93641f32b06a Mon Sep 17 00:00:00 2001 From: Weblate <42475313+nailyk-weblate@users.noreply.github.com> Date: Thu, 26 Sep 2019 19:46:13 +0200 Subject: [PATCH 05/21] Translated using Weblate (Hungarian) (#1499) Currently translated at 83.3% (5 of 6 strings) Translation: Tusky/Tusky-app Translate-URL: https://weblate.tusky.app/projects/tusky/tusky-app/hu/ --- fastlane/metadata/android/hu/changelogs/67.txt | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 fastlane/metadata/android/hu/changelogs/67.txt diff --git a/fastlane/metadata/android/hu/changelogs/67.txt b/fastlane/metadata/android/hu/changelogs/67.txt new file mode 100644 index 000000000..e2e0aafe7 --- /dev/null +++ b/fastlane/metadata/android/hu/changelogs/67.txt @@ -0,0 +1,9 @@ +Tusky v9.0 + +- Indíthatsz szavazást Tusky-ból +- Fejlettebb keresés +- Új opció a fiók beállításainál a tartalom-figyelmeztetések alapértelmezett mutatására +- A navigációs fióknál az avataroknak lekerekített négyzet alakja van +- Be lehet jelenteni olyan fiókokat is, akik még sosem posztoltak +- A Tusky nem fog csatlakozni titkosítatlan kapcsolaton Android 6+-on +- Egy rakás kisebb fejlesztés és bugfix From 0c8407657ed411d98ecf8a26875e0188c37fea25 Mon Sep 17 00:00:00 2001 From: Anonymous Date: Wed, 25 Sep 2019 15:40:26 +0000 Subject: [PATCH 06/21] Translated using Weblate (Hungarian) Currently translated at 100.0% (395 of 395 strings) Translation: Tusky/Tusky Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/hu/ Translated using Weblate (Catalan) Currently translated at 100.0% (395 of 395 strings) Translation: Tusky/Tusky Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/ca/ --- app/src/main/res/values-ca/strings.xml | 12 +++++++++++- app/src/main/res/values-hu/strings.xml | 5 +++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 6ad2f69e1..da6720c72 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -510,4 +510,14 @@ 6 hores Modificar - +Afegeix una enquesta + Enquesta + 5 minuts + 30 minuts + 1 dia + 3 dies + 7 dies + Afegeix una tria + Múltiples tries + Tria %d + diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 997d7da38..d700c1176 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -453,4 +453,9 @@ Fiókok Sikertelen keresés + Szavazás hozzáadása + Szavazás + 5 perc + 30 perc + 1 óra From 37ba892b18a42da7b690989743b2c8d2f43e3a79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20Gera?= Date: Wed, 25 Sep 2019 15:40:26 +0000 Subject: [PATCH 07/21] Translated using Weblate (Hungarian) Currently translated at 100.0% (395 of 395 strings) Translation: Tusky/Tusky Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/hu/ --- app/src/main/res/values-hu/strings.xml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index d700c1176..bb036b679 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -50,7 +50,7 @@ Összecsukás Nincs itt semmi. Üres tartalom. Húzd le a frissítéshez! - %s megolta a tülködet + %s megtolta a tülködet %s kedvencnek jelölte tülködet %s követ \@%s bejelentése @@ -458,4 +458,13 @@ 5 perc 30 perc 1 óra - + 6 óra + 1 nap + 3 nap + 7 nap + Válasz hozzáadása + Több lehetőség + Válasz %d + Szerkesztés + + From a38c2a284b30d990d4cf4f36030ff5b50cb2d568 Mon Sep 17 00:00:00 2001 From: Daniele Lira Mereb Date: Thu, 26 Sep 2019 03:57:50 +0000 Subject: [PATCH 08/21] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (6 of 6 strings) Translation: Tusky/Tusky-app Translate-URL: https://weblate.tusky.app/projects/tusky/tusky-app/pt_BR/ --- fastlane/metadata/android/pt_BR/changelogs/67.txt | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 fastlane/metadata/android/pt_BR/changelogs/67.txt diff --git a/fastlane/metadata/android/pt_BR/changelogs/67.txt b/fastlane/metadata/android/pt_BR/changelogs/67.txt new file mode 100644 index 000000000..acd2075b2 --- /dev/null +++ b/fastlane/metadata/android/pt_BR/changelogs/67.txt @@ -0,0 +1,9 @@ +Tusky v9.0 + +- Agora você pode criar enquetes no Tusky +- Pesquisa melhorada +- Nova opção nas preferências da conta: "Sempre expandir toots com Aviso de Conteúdo" +- Avatares em formato quadrado arredondado +- Agora é possível denunciar usuários mesmo sem toots +- Tusky se recusará a se conectar através de conexões de texto claro em Android 6+ +- Muitas outras pequenas melhorias e correções de bugs From 1fd6a7cd72b7a2483fc90a1cfc7e54c229e00034 Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Sat, 28 Sep 2019 12:52:10 +0200 Subject: [PATCH 09/21] Fix crash in AccountListFragment (#1502) --- .../tusky/fragment/AccountListFragment.kt | 39 +++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/AccountListFragment.kt b/app/src/main/java/com/keylesspalace/tusky/fragment/AccountListFragment.kt index eb5960b03..62ba853ef 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/AccountListFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/AccountListFragment.kt @@ -57,7 +57,8 @@ class AccountListFragment : BaseFragment(), AccountActionListener, Injectable { lateinit var api: MastodonApi private lateinit var type: Type - private lateinit var id: String + private var id: String? = null + private lateinit var scrollListener: EndlessOnScrollListener private lateinit var adapter: AccountAdapter private var fetching = false @@ -66,7 +67,7 @@ class AccountListFragment : BaseFragment(), AccountActionListener, Injectable { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) type = arguments?.getSerializable(ARG_TYPE) as Type - id = arguments?.getString(ARG_ID)!! + id = arguments?.getString(ARG_ID) } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { @@ -251,36 +252,52 @@ class AccountListFragment : BaseFragment(), AccountActionListener, Injectable { Log.e(TAG, "Failed to $verb account id $accountId.") } - private fun getFetchCallByListType(type: Type, fromId: String?): Single>> { + private fun getFetchCallByListType(fromId: String?): Single>> { return when (type) { - Type.FOLLOWS -> api.accountFollowing(id, fromId) - Type.FOLLOWERS -> api.accountFollowers(id, fromId) + Type.FOLLOWS -> { + val accountId = requireId(type, id) + api.accountFollowing(accountId, fromId) + } + Type.FOLLOWERS -> { + val accountId = requireId(type, id) + api.accountFollowers(accountId, fromId) + } Type.BLOCKS -> api.blocks(fromId) Type.MUTES -> api.mutes(fromId) Type.FOLLOW_REQUESTS -> api.followRequests(fromId) - Type.REBLOGGED -> api.statusRebloggedBy(id, fromId) - Type.FAVOURITED -> api.statusFavouritedBy(id, fromId) + Type.REBLOGGED -> { + val statusId = requireId(type, id) + api.statusRebloggedBy(statusId, fromId) + } + Type.FAVOURITED -> { + val statusId = requireId(type, id) + api.statusFavouritedBy(statusId, fromId) + } } } - private fun fetchAccounts(id: String? = null) { + private fun requireId(type: Type, id: String?): String { + return requireNotNull(id) { "id must not be null for type "+type.name } + } + + private fun fetchAccounts(fromId: String? = null) { if (fetching) { return } fetching = true - if (id != null) { + if (fromId != null) { recyclerView.post { adapter.setBottomLoading(true) } } - getFetchCallByListType(type, id) + getFetchCallByListType(fromId) .observeOn(AndroidSchedulers.mainThread()) .autoDispose(from(this, Lifecycle.Event.ON_DESTROY)) .subscribe({ response -> val accountList = response.body() if (response.isSuccessful && accountList != null) { - val linkHeader = response.headers().get("Link") + val linkHeader = response.headers()["Link"] onFetchAccountsSuccess(accountList, linkHeader) } else { onFetchAccountsFailure(Exception(response.message())) From a84fd6e83437603b7e58f258496e4f81a6e388f6 Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Sat, 28 Sep 2019 13:21:47 +0200 Subject: [PATCH 10/21] prepare changelog for Tusky 9.1 --- fastlane/metadata/android/en-US/changelogs/68.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/68.txt diff --git a/fastlane/metadata/android/en-US/changelogs/68.txt b/fastlane/metadata/android/en-US/changelogs/68.txt new file mode 100644 index 000000000..61b9e7522 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/68.txt @@ -0,0 +1,3 @@ +Tusky v9.1 + +This release ensures compatibility with Mastodon 3 and improves performance and stability. From 8f92274e0bc26c865c382ace16e7822f02797763 Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Sat, 28 Sep 2019 16:29:40 +0200 Subject: [PATCH 11/21] remove callList from BaseActivity (#1503) * remove callList from BaseActivity * remove callList from BaseActivity --- .../java/com/keylesspalace/tusky/BaseActivity.java | 13 ------------- .../keylesspalace/tusky/BottomSheetActivityTest.kt | 1 - 2 files changed, 14 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java b/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java index 2c96c83df..389a745e6 100644 --- a/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/BaseActivity.java @@ -50,12 +50,8 @@ import java.util.List; import javax.inject.Inject; -import retrofit2.Call; - public abstract class BaseActivity extends AppCompatActivity implements Injectable { - protected List callList; - @Inject public ThemeUtils themeUtils; @Inject @@ -95,7 +91,6 @@ public abstract class BaseActivity extends AppCompatActivity implements Injectab redirectIfNotLoggedIn(); } - callList = new ArrayList<>(); requesters = new HashMap<>(); } @@ -164,14 +159,6 @@ public abstract class BaseActivity extends AppCompatActivity implements Injectab } } - @Override - protected void onDestroy() { - for (Call call : callList) { - call.cancel(); - } - super.onDestroy(); - } - public void showAccountChooserDialog(CharSequence dialogTitle, boolean showActiveAccount, AccountSelectionListener listener) { List accounts = accountManager.getAllAccountsOrderedByActive(); AccountEntity activeAccount = accountManager.getActiveAccount(); diff --git a/app/src/test/java/com/keylesspalace/tusky/BottomSheetActivityTest.kt b/app/src/test/java/com/keylesspalace/tusky/BottomSheetActivityTest.kt index 79d81a23d..2db1cd0d7 100644 --- a/app/src/test/java/com/keylesspalace/tusky/BottomSheetActivityTest.kt +++ b/app/src/test/java/com/keylesspalace/tusky/BottomSheetActivityTest.kt @@ -268,7 +268,6 @@ class BottomSheetActivityTest { mastodonApi = api @Suppress("UNCHECKED_CAST") bottomSheet = mock(BottomSheetBehavior::class.java) as BottomSheetBehavior - callList = arrayListOf() } override fun openLink(url: String) { From c35f744a179631d73804b892fa03b1fca658e800 Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Tue, 1 Oct 2019 08:08:21 +0200 Subject: [PATCH 12/21] fix requestLayout() improperly called warning in AccountActivity (#1507) --- .../main/java/com/keylesspalace/tusky/AccountActivity.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/java/com/keylesspalace/tusky/AccountActivity.kt b/app/src/main/java/com/keylesspalace/tusky/AccountActivity.kt index 39c75c53a..f207bb207 100644 --- a/app/src/main/java/com/keylesspalace/tusky/AccountActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/AccountActivity.kt @@ -236,11 +236,18 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI // Add a listener to change the toolbar icon color when it enters/exits its collapsed state. accountAppBarLayout.addOnOffsetChangedListener(object : AppBarLayout.OnOffsetChangedListener { + var priorOffset = 0 + @AttrRes var priorAttribute = R.attr.account_toolbar_icon_tint_uncollapsed override fun onOffsetChanged(appBarLayout: AppBarLayout, verticalOffset: Int) { + if(verticalOffset == priorOffset) { + return + } + priorOffset = verticalOffset + @AttrRes val attribute = if (titleVisibleHeight + verticalOffset < 0) { supportActionBar?.setDisplayShowTitleEnabled(true) From 8a3fa79cd6b5092b4b6967c4f7b20c5adb896aa0 Mon Sep 17 00:00:00 2001 From: Vegard Skjefstad Date: Sun, 29 Sep 2019 04:08:23 +0000 Subject: [PATCH 13/21] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegian?= =?UTF-8?q?=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (7 of 7 strings) Translation: Tusky/Tusky-app Translate-URL: https://weblate.tusky.app/projects/tusky/tusky-app/nb_NO/ --- fastlane/metadata/android/nb_NO/changelogs/68.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 fastlane/metadata/android/nb_NO/changelogs/68.txt diff --git a/fastlane/metadata/android/nb_NO/changelogs/68.txt b/fastlane/metadata/android/nb_NO/changelogs/68.txt new file mode 100644 index 000000000..5cfca4aca --- /dev/null +++ b/fastlane/metadata/android/nb_NO/changelogs/68.txt @@ -0,0 +1,3 @@ +Tusky v9.1 + +Denne versjonen sørger for kompatibilitet med Mastodon 3, og forbedrer ytelse og stabilitet. From 095326f9c8c481c12d61271cedcc3cd505839cea Mon Sep 17 00:00:00 2001 From: Mostafa Ahangarha Date: Mon, 30 Sep 2019 18:54:41 +0000 Subject: [PATCH 14/21] Translated using Weblate (Persian) Currently translated at 85.7% (6 of 7 strings) Translation: Tusky/Tusky-app Translate-URL: https://weblate.tusky.app/projects/tusky/tusky-app/fa/ --- fastlane/metadata/android/fa/changelogs/58.txt | 11 +++++++++++ fastlane/metadata/android/fa/changelogs/61.txt | 7 +++++++ fastlane/metadata/android/fa/changelogs/67.txt | 9 +++++++++ fastlane/metadata/android/fa/changelogs/68.txt | 3 +++ fastlane/metadata/android/fa/full_description.txt | 12 ++++++++++++ fastlane/metadata/android/fa/short_description.txt | 1 + fastlane/metadata/android/fa/title.txt | 1 + 7 files changed, 44 insertions(+) create mode 100644 fastlane/metadata/android/fa/changelogs/58.txt create mode 100644 fastlane/metadata/android/fa/changelogs/61.txt create mode 100644 fastlane/metadata/android/fa/changelogs/67.txt create mode 100644 fastlane/metadata/android/fa/changelogs/68.txt create mode 100644 fastlane/metadata/android/fa/full_description.txt create mode 100644 fastlane/metadata/android/fa/short_description.txt create mode 100644 fastlane/metadata/android/fa/title.txt diff --git a/fastlane/metadata/android/fa/changelogs/58.txt b/fastlane/metadata/android/fa/changelogs/58.txt new file mode 100644 index 000000000..9eda8dd95 --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/58.txt @@ -0,0 +1,11 @@ +تاسکی نسخه ۶٫۰ + +- صافی‌های خط‌زمانی به ترجیحات حساب منتقل شده و با کارساز همگام خواهد شد +- اکنون می‌توانید هشتگ سفارشی را به عنوان یک زبانه در رابط اصلی داشته باشید +- سیاهه‌ها می‌توانند ویرایش شوند +- امنیتی: حذف پشتیبانی برای TLS 1.0 و TLS 1.1، و افزودن پیشتیبانی برای TLS 1.3 روی اندروید ۶ به بالا +- نمای ایجاد با شروع نگارش، شکلک‌های سفارشی پیشنهاد می‌دهد +- سبک جدید «پیروی از سبک سیستم» در تنظیمات +- بهبود دسترس‌پذییری خط‌زمانی +- تاسکی اکنون اعلان‌های ناشناس را نادیده می‌گید و دیگر فرونمی‌پاشد +- diff --git a/fastlane/metadata/android/fa/changelogs/61.txt b/fastlane/metadata/android/fa/changelogs/61.txt new file mode 100644 index 000000000..e666ddc28 --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/61.txt @@ -0,0 +1,7 @@ +تاسکی نسخه ۷٫۰ + +- پشتیبانی از نمایش نظرسنجی‌ها، رای‌ها و اعلان‌های مربوط به نظرسنجی +- دکمه جدید برای از صافی گذراندن زبانه اعلان و برای پاک کردن همه اعلان‌ها +- امکان پاک کردن و بازنویسی بوق‌تان +- علامت جدید روی تصویر نمایه که نشان می‌دهد یک حساب، بات است یا نه (قابل غیرفعال‌سازی در ترجیحات) +- ترجمه‌های جدید: زبان‌های نروژی و اسلونیایی. diff --git a/fastlane/metadata/android/fa/changelogs/67.txt b/fastlane/metadata/android/fa/changelogs/67.txt new file mode 100644 index 000000000..41d522e10 --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/67.txt @@ -0,0 +1,9 @@ +تاسکی نسخه ۹٫۰ + +- می‌توانید داخل تاسکی، نظرسنجی ایجاد کنید +- بهبود جستجو +- گزینه جدید در ترجیحات حساب برای اینکه همواره بوق‌های دارای محتوای حساس کامل نمایش داده شوند +- آواتارها در کشوی ناوبری اکنون به صورت مربع دارای لبه‌های گرد دیده می‌شوند +- اکنون امکان گزارش کاربرانی که هیچ بوقی ندارند فراهم شده است +- تاسکی اکنون از اتصال غیر ایمن در اندروید ۶ سربازمی‌زند +- به همراه بسیاری بهبودها و رفع اشکالات diff --git a/fastlane/metadata/android/fa/changelogs/68.txt b/fastlane/metadata/android/fa/changelogs/68.txt new file mode 100644 index 000000000..56c36c0d1 --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/68.txt @@ -0,0 +1,3 @@ +تاسکی نسخه ۹٫۱ + +این نسخه، سازگاری با ماستودون ۳ را تامین کرده و دارای بهبود عملکرد و پایداری است. diff --git a/fastlane/metadata/android/fa/full_description.txt b/fastlane/metadata/android/fa/full_description.txt new file mode 100644 index 000000000..ca5520bda --- /dev/null +++ b/fastlane/metadata/android/fa/full_description.txt @@ -0,0 +1,12 @@ +تاسکی یک کارخواه سبک برای ماستودون (کارساز شبکه احتماعی آزاد و متن‌باز) است. + +• دارای طراحی متریال +• اکثر APIهای ماستودون پیاده‌سازی شده است +• پشتیبانی از چند حساب +• پشتیبانی از سبک تیره و روشن با امکان تنظیم تغییر خودکار بر اساس ساعت روز +• پشتیبانی از پیش‌نویس - امکان نوشتن بوق‌ها و ذخیره‌شان برای بعد +• امکان انتخاب از بین انواع شکلک +• بهینه‌سازی‌شده برای صفحه‌هایی با اندازه‌های مختلف +• کاملا آزاد و متن‌باز - بدون وابستگی‌های غیرآزاد به خدمات گوگل + +برای دریافت اطلاعات بیشتر درباره ماستودون https://joinmastodon.org را ببینید diff --git a/fastlane/metadata/android/fa/short_description.txt b/fastlane/metadata/android/fa/short_description.txt new file mode 100644 index 000000000..37ab16ac1 --- /dev/null +++ b/fastlane/metadata/android/fa/short_description.txt @@ -0,0 +1 @@ +یک کارخواه چندحسابی برای شبکه اجتماعی ماستودون diff --git a/fastlane/metadata/android/fa/title.txt b/fastlane/metadata/android/fa/title.txt new file mode 100644 index 000000000..57a4e8902 --- /dev/null +++ b/fastlane/metadata/android/fa/title.txt @@ -0,0 +1 @@ +تاسکی From 5e29c06fd4eb5ba824cfd527361ccba3abca5c4d Mon Sep 17 00:00:00 2001 From: Mostafa Ahangarha Date: Tue, 1 Oct 2019 06:08:27 +0000 Subject: [PATCH 15/21] Translated using Weblate (Persian) Currently translated at 98.2% (388 of 395 strings) Translation: Tusky/Tusky Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/fa/ --- app/src/main/res/values-fa/strings.xml | 314 ++++++++++++++++++++----- 1 file changed, 251 insertions(+), 63 deletions(-) diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 4d1756163..74ac692bc 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -1,23 +1,23 @@ - + - خطایی رخ داد + خطایی رخ داد. این نمی‌تواند خالی باشد. دامنه وارد شده نامعتبر است - احراز هویت با سرور ناموفق بود - مرورگری برای استفاده یافت نشد + احراز هویت با این نمونه ناموفق بود. + مرورگری برای استفاده یافت نشد. خطای احراز هویت ناشناس رخ داده است. - هویت احراز نشد - دریافت توکن ورود ناموفق بود + هویت احراز نشد. + دریافت توکن ورود ناموفق بود. وضعیت خیلی طولانی است! - پرونده باید کمتر از ۸ مگابایت باشد - پرونده ویدئویی باید کمتر از ۴۰ مگابایت باشد - این نوع از پرونده نمی‌تواند بارگذاری شود - پرونده باز نشد - مجوز برای خواندن رسانه نیاز است - اجازه ذخیره رسانه نیاز است + پرونده باید کمتر از ۸ مگابایت باشد. + پرونده‌های ویدئویی باید کمتر از ۴۰ مگابایت باشد. + این نوع از پرونده نمی‌تواند بارگذاری شود. + پرونده باز نشد. + مجوز برای خواندن رسانه نیاز است. + اجازه ذخیره رسانه نیاز است. تصاویر و فیلم‌ها هر دو نمی‌توانند به یک وضعیت ضمیمه شوند. - بارگذاری ناموفق بود - خطا در ارسال بوق + بارگذاری ناموفق بود. + خطا در ارسال بوق. خانه اعلان‌ها محلی @@ -25,9 +25,9 @@ بوق پست‌ها با پاسخ‌ - دنبال شونده‌ها - دنبال کننده‌ها - علاقه‌مندی‌ها + دنبال‌شونده‌ها + دنبال‌کننده‌ها + پسندها کاربرهای بی‌صدا کاربرهای مسدود شده درخواست‌های دنبال کردن @@ -40,21 +40,21 @@ برای نمایش کلیک کن نمایش بیشتر نمایش کمتر - بازکردن + گسترش دادن بستن - چیزی اینجا نیست.برای تازه سازی، به پایین بکشید + چیزی اینجا نیست. برای تازه‌سازی، به پایین بکشید! %s بوق شما را تقویت کرد %s بوق شما را پسندید %s شما را دنبال می‌کند گزارش @%s - پیام‌های اضافی + پیام‌های اضافی؟ پاسخ سریع پاسخ تقویت - مورد علاقه + پسند بیشتر ایجاد - با mastodon وارد شو + با ماستودون وارد شو خروج آیا از خارج شدن از این حساب %1s اطمینان دارید؟ دنبال کن @@ -68,11 +68,11 @@ بوق بوق! تلاش مجدد - بستن + بببند نمایه ترجیحات ترجیحات حساب - علاقه‌مندی‌ها + پسندها کاربران بی‌صدا کاربران مسدود شده درخواست‌های دنبال کردن @@ -89,18 +89,18 @@ ذخیره ویرایش نمایه ویرایش - بازگشت + بازگرداندن پذیرش رد جستجو پیش‌نویس نمایش بوق - هشدار محتوی + هشدار محتوا صفحه کلیک شکلک درحال دریافت %1$s - کپی لینک - هم‌رسانی نشانی بوق با - هم‌رسانی بوق با + رونوشت پیوند + هم‌رسانی نشانی بوق با… + هم‌رسانی بوق با… هم‌رسانی رسانه با… فرستاده شد! کاربر رفع انسداد شد @@ -109,23 +109,29 @@ پاسخ با موفق فرستاده شد‌. کدام نمونه؟ چه خبر؟ - هشدار محتوی + هشدار محتوا نام نمایشی بیوگرافی - جستجو + جستجو… نتیجه‌ای نیست پاسخ … آواتار - سرتیتر + سرایند یک نمونه چیست؟ در حال اتصال … - آدرس یا دامنه هر نمونه را می‌توانید وارد کنید، مثلا mastodon.social, icosahedron.website, social.tchncs.de, و <a href=\"https://instances.social\" >بیشتر!\n\n اگر شما هنوز حساب کاربری ندارید، می‌توانید نام نمونه مورد نظر را وارد کنید از اینجا بپیوندید و حساب کاربری ایجاد کنید\n\n نمونه جایی است که حساب کاربری شما میزبان آن است اما شما به راحتی می‌توانید با افراد دیگر در نمونه‌های دیگر ارتباط برقرار کنید و آنها را دنبال کنید شما درست مثل اینکه در یکجا باشید.\n\n برای اطلاعات بیشتر به اینجا مراجعه کنید joinmastodon.org. + آدرس یا دامنه هر نمونه را می‌توانید وارد کنید، مثلا mastodon.social، icosahedron.website، social.tchncs.de، و بیشتر! +\n +\n اگر شما هنوز حساب کاربری ندارید، می‌توانید نام نمونه مورد نظر را وارد کنید از اینجا بپیوندید و حساب کاربری ایجاد کنید. +\n +\n نمونه جایی است که حساب کاربری شما میزبان آن است اما شما به راحتی می‌توانید با افراد دیگر در نمونه‌های دیگر ارتباط برقرار کنید و آنها را دنبال کنید شما درست مثل اینکه در یکجا باشید. +\n +\n برای اطلاعات بیشتر به اینجا مراجعه کنید joinmastodon.org. پایان بارگذاری رسانه - در حال بارگذاری + در حال بارگذاری… بارگیری درخواست دنبال کردن را لغو می‌کنید؟ - لغو دنبال کردن این حساب - حذف این بوق + لغو دنبال کردن این حساب؟ + حذف این بوق؟ عمومی:پست به خط زمانی عمومی خارج از لیست: در خط زمانی عمومی نشان نده تنها دنبال‌کنندگان:پست فقط به دنبال‌کنندگان @@ -140,13 +146,13 @@ صدازده‌ها دنبال‌شده پست‌های تقویت شده من - پست‌های مورد علاقه من + پست‌های پسندیده شدهٔ من ظاهر تم برنامه خط‌های زمانی - روشن - سیاه - تیره + تاریک + روشن + سیاه خودکار برحسب غروب خورشید مرورگر استفاده از زبانه‌های سفارشی کروم @@ -163,25 +169,25 @@ درگاه پراکسی HTTP حریم خصوصی پیش‌فرض پست همواره رسانه را به عنوان حساس نشانه‌گذاری کن - انتشار + انتشار (همگادم با کارساز) ناتوانی در هم‌گام‌سازی تنظیمات عمومی - لیست‌نشده + فهرست نشده فقط دنبال‌کنندگان اندازه متن وضعیت - کوچک‌ترین + بسیار کوچک کوچک متوسط بزرگ - بزرگ‌ترین - صدا زدن جدید - هشدار در مورد صدازدن جدید + بسیار بزرگ + اشاره‌های جدید + اعلان در مورد اشاره‌های جدید دنبال‌کننده‌های جدید - هشدارها درمورد دنبال‌کنندگان جدید - تقویت - وقتی بوق‌های شما تقویت شد هشدار بده - مورد علاقه‌ها - هشدارها، زمانی که بوق‌های شما مورد علاقه قرار گرفت + اعلان درمورد دنبال‌کنندگان جدید + تقویت‌ها + وقتی بوق‌های شما تقویت شد اعلان بده + پسندها + اعلان‌ها وقتی که بوق‌های شما پسندیده شوند %s شما را صدا زد %1$s, %2$s, %3$s و %4$d دیگر %1$s, %2$s, و %3$s @@ -212,20 +218,20 @@ ‌درخواست دنبال‌کردن فرستاده شد بدون محتوی - در %dy - در %dd - در % dh - در %dm - در %ds + در %dسال + در %dر + در % dس + در %dد + در %dث شما را دنبال می‌کند - همیشه مطالب حساس را نشان بده + همیشه مطلب حساس را نشان بده رسانه پاسخ دادن به @%s بارگیری بیشتر افزودن حساب افزودن حساب ماستدون جدید - لیست‌ها - لیست‌ها + سیاهه‌ها + سیاهه‌ها لیست خط زمانی پست با حساب %1$s ناتوان در تنظیم عنوان @@ -234,8 +240,8 @@ حذف قفل حساب به شما امکان می‌دهد بصورت دستی دنبال‌کنندگان را تایید کنید - ذخیره به عنوان پیش‌نویس - فرستادن بوق + ذخیره به عنوان پیش‌نویس؟ + فرستادن بوق… خطای فرستادن بوق در حال فرستادن بوق‌ها فرستادن لغو شد @@ -246,8 +252,8 @@ قالب شکلک پیشفرض سیستم شما ابتدا باید این شکلک‌ها را دریافت کنید - اجرای جستجو - باز/بستن همه وضعیت‌ها + اجرای جستجو… + گستردن/بستن همه وضعیت‌ها بوق را باز کن برنامه به شروع مجدد نیاز دارد شما برای اعمال این تغییرات به شروع مجدد برنامه نیاز دارید @@ -271,4 +277,186 @@ اطلاعات زیر ممکن است به طور ناقص نمایه کاربر را نشان دهد. برای دیدن نمایه کامل در مرورگر، لمس کنید. برداشتن سنجاق سنجاق کردن +یک خطای شبکه رخ داد! لطفا اتصال خود را بررسی و دوباره تلاش کنید! + پیام‌های مستقیم + زبانه‌ها + #%ث + سنجاق‌شده‌ها + دامنه‌های پنهان + \@%s + چیزی اینجا نیست. + حذف بازبوق + حذف پسند + پاک کردن و بازنویسی + دامنه‌های پنهان + افزودن نظرسنجی + بی‌صدا کردن %s + افزوده زبانه + پیوندها + اشاره‌ها + هشتگ‌ها + بازکردن حساب بازبوق کننده + نمایش بازبوق‌ها + نمایش پسندیده‌ها + + هشتگ‌ها + اشاره‌ها + پیوندها + بازکردن رسانه #%d + + باز کردن به عنوان %s + هم‌رسانی به عنوان … + بارگیری رسانه + در حال بارگیری رسانه + + %s ناپنهان + + می‌خواهید این بوق را پاک و بازنویسی کنید؟ + پنهان کردن تمام دامنه + + نظرسنجی‌های پایان یافته + صافی‌ها + + استفاده از طرح سیستم + + زبان + نمایش نشان برای بات‌ها + پویانمایی آواتار gif + + نظرسنجی‌ها + اعلان‌ها درباره نظرسنجی‌هایی که پایان یافته‌اند + + + Tusky (تاسکی) %s + %dسال + %dر + %dس + %dد + %dث + + همواره بوق‌هایی که دارای محتوای حساس هستند را گسترش بده + خط زمانی عمومی + گفتگوها + افزودن صافی + ویرایش صافی + پاک کردن + به‌روزرسانی + تمام کلمه + ناتوانی در ایجاد سیاهه + ناتوانی در تغییر نام سیاهه + ناتوانی در حذف سیاهه + ایجاد یک سیاهه + تغییر نام سیاهه + حذف سیاهه + ویرایش سیاهه + جستجو بین افرادی که دنبال می‌کنید + افزودن حساب به سیاهه + حذف حساب از سیاهه + + مجموعه شکلک‌های جاری گوگل + + CC-BY 4.0 + CC-BY-SA 4.0 + + + %1$s پسند + %1$s پسند + + + + %s بازبوق + %s بازبوق + + + بازبوق شده توسط + پسننده‌شده توسط + + %1$s + %1$s و %2$s + %1$s، %2$s و %3$d بیشتر + به بیشینه %1$d زبانه رسید + + + رسانه: %s + هشدار محتوا: %s + بدون توضیحات + بازبوقیده + پسندیده + عمومی + فهرست‌نشده + دنبال‌کنندگان + مستقیم + نظرسنجی با انتخاب‌ها: %1$s، %2$s، %3$s، %4$s؛ %5$s + + نام سیاهه + + ویرایش هشتگ + هشتگ بدون # + هشتگ + پاک کردن + صافی + اعمال + + ایجاد بوق + ایجاد + + مطمئنید که به طور دائمی می‌خواهید اعلان‌ها را پاک کنید؟ + کنش‌ها برای تصاویر %s + + + %s رای + %s رای + + %s باقی مانده + پایان یافته در %s + بسته شده + رای + + یک نظرسنجی که در آن رای داده‌اید پایان یافته است + یک نظرسنجی ساخته‌اید پایان یافته است + + + %d روز + %d روز + + + %d ساعت + %d ساعت + + + %d دقیقه + %d دقیقه + + + %d ثانیه + %d ثانیه + + + ادامه + قبل + اتمام + با موفقیت گزارش شد @%s + نظرات بیشتر + هدایت به %s + ناتوانی در گزارش + ناتوانی در دریافت وضعیت‌ها + حساب‌ها + ناتوانی در جستجو + + نمایش فیلتر اعلانات + + + نظرسنجی + ۵ دقیقه + ۳۰ دقیقه + ۱ ساعت + ۶ ساعت + ۱ روز + ۳ روز + ۷ روز + افزودن گزینه + گزینه‌های چندگانه + گزینه %d + ویرایش + From ba91182b3008fcde8114972dfe779ff9513c4147 Mon Sep 17 00:00:00 2001 From: Vegard Skjefstad Date: Sun, 29 Sep 2019 04:08:23 +0000 Subject: [PATCH 16/21] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegian?= =?UTF-8?q?=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (7 of 7 strings) Translation: Tusky/Tusky-app Translate-URL: https://weblate.tusky.app/projects/tusky/tusky-app/nb_NO/ --- fastlane/metadata/android/nb_NO/changelogs/68.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 fastlane/metadata/android/nb_NO/changelogs/68.txt diff --git a/fastlane/metadata/android/nb_NO/changelogs/68.txt b/fastlane/metadata/android/nb_NO/changelogs/68.txt new file mode 100644 index 000000000..5cfca4aca --- /dev/null +++ b/fastlane/metadata/android/nb_NO/changelogs/68.txt @@ -0,0 +1,3 @@ +Tusky v9.1 + +Denne versjonen sørger for kompatibilitet med Mastodon 3, og forbedrer ytelse og stabilitet. From 5d68f4e7370f78e7375e96b1ec60b2da90fe7dc5 Mon Sep 17 00:00:00 2001 From: Mostafa Ahangarha Date: Mon, 30 Sep 2019 18:54:41 +0000 Subject: [PATCH 17/21] Translated using Weblate (Persian) Currently translated at 85.7% (6 of 7 strings) Translation: Tusky/Tusky-app Translate-URL: https://weblate.tusky.app/projects/tusky/tusky-app/fa/ --- fastlane/metadata/android/fa/changelogs/58.txt | 11 +++++++++++ fastlane/metadata/android/fa/changelogs/61.txt | 7 +++++++ fastlane/metadata/android/fa/changelogs/67.txt | 9 +++++++++ fastlane/metadata/android/fa/changelogs/68.txt | 3 +++ fastlane/metadata/android/fa/full_description.txt | 12 ++++++++++++ fastlane/metadata/android/fa/short_description.txt | 1 + fastlane/metadata/android/fa/title.txt | 1 + 7 files changed, 44 insertions(+) create mode 100644 fastlane/metadata/android/fa/changelogs/58.txt create mode 100644 fastlane/metadata/android/fa/changelogs/61.txt create mode 100644 fastlane/metadata/android/fa/changelogs/67.txt create mode 100644 fastlane/metadata/android/fa/changelogs/68.txt create mode 100644 fastlane/metadata/android/fa/full_description.txt create mode 100644 fastlane/metadata/android/fa/short_description.txt create mode 100644 fastlane/metadata/android/fa/title.txt diff --git a/fastlane/metadata/android/fa/changelogs/58.txt b/fastlane/metadata/android/fa/changelogs/58.txt new file mode 100644 index 000000000..9eda8dd95 --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/58.txt @@ -0,0 +1,11 @@ +تاسکی نسخه ۶٫۰ + +- صافی‌های خط‌زمانی به ترجیحات حساب منتقل شده و با کارساز همگام خواهد شد +- اکنون می‌توانید هشتگ سفارشی را به عنوان یک زبانه در رابط اصلی داشته باشید +- سیاهه‌ها می‌توانند ویرایش شوند +- امنیتی: حذف پشتیبانی برای TLS 1.0 و TLS 1.1، و افزودن پیشتیبانی برای TLS 1.3 روی اندروید ۶ به بالا +- نمای ایجاد با شروع نگارش، شکلک‌های سفارشی پیشنهاد می‌دهد +- سبک جدید «پیروی از سبک سیستم» در تنظیمات +- بهبود دسترس‌پذییری خط‌زمانی +- تاسکی اکنون اعلان‌های ناشناس را نادیده می‌گید و دیگر فرونمی‌پاشد +- diff --git a/fastlane/metadata/android/fa/changelogs/61.txt b/fastlane/metadata/android/fa/changelogs/61.txt new file mode 100644 index 000000000..e666ddc28 --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/61.txt @@ -0,0 +1,7 @@ +تاسکی نسخه ۷٫۰ + +- پشتیبانی از نمایش نظرسنجی‌ها، رای‌ها و اعلان‌های مربوط به نظرسنجی +- دکمه جدید برای از صافی گذراندن زبانه اعلان و برای پاک کردن همه اعلان‌ها +- امکان پاک کردن و بازنویسی بوق‌تان +- علامت جدید روی تصویر نمایه که نشان می‌دهد یک حساب، بات است یا نه (قابل غیرفعال‌سازی در ترجیحات) +- ترجمه‌های جدید: زبان‌های نروژی و اسلونیایی. diff --git a/fastlane/metadata/android/fa/changelogs/67.txt b/fastlane/metadata/android/fa/changelogs/67.txt new file mode 100644 index 000000000..41d522e10 --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/67.txt @@ -0,0 +1,9 @@ +تاسکی نسخه ۹٫۰ + +- می‌توانید داخل تاسکی، نظرسنجی ایجاد کنید +- بهبود جستجو +- گزینه جدید در ترجیحات حساب برای اینکه همواره بوق‌های دارای محتوای حساس کامل نمایش داده شوند +- آواتارها در کشوی ناوبری اکنون به صورت مربع دارای لبه‌های گرد دیده می‌شوند +- اکنون امکان گزارش کاربرانی که هیچ بوقی ندارند فراهم شده است +- تاسکی اکنون از اتصال غیر ایمن در اندروید ۶ سربازمی‌زند +- به همراه بسیاری بهبودها و رفع اشکالات diff --git a/fastlane/metadata/android/fa/changelogs/68.txt b/fastlane/metadata/android/fa/changelogs/68.txt new file mode 100644 index 000000000..56c36c0d1 --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/68.txt @@ -0,0 +1,3 @@ +تاسکی نسخه ۹٫۱ + +این نسخه، سازگاری با ماستودون ۳ را تامین کرده و دارای بهبود عملکرد و پایداری است. diff --git a/fastlane/metadata/android/fa/full_description.txt b/fastlane/metadata/android/fa/full_description.txt new file mode 100644 index 000000000..ca5520bda --- /dev/null +++ b/fastlane/metadata/android/fa/full_description.txt @@ -0,0 +1,12 @@ +تاسکی یک کارخواه سبک برای ماستودون (کارساز شبکه احتماعی آزاد و متن‌باز) است. + +• دارای طراحی متریال +• اکثر APIهای ماستودون پیاده‌سازی شده است +• پشتیبانی از چند حساب +• پشتیبانی از سبک تیره و روشن با امکان تنظیم تغییر خودکار بر اساس ساعت روز +• پشتیبانی از پیش‌نویس - امکان نوشتن بوق‌ها و ذخیره‌شان برای بعد +• امکان انتخاب از بین انواع شکلک +• بهینه‌سازی‌شده برای صفحه‌هایی با اندازه‌های مختلف +• کاملا آزاد و متن‌باز - بدون وابستگی‌های غیرآزاد به خدمات گوگل + +برای دریافت اطلاعات بیشتر درباره ماستودون https://joinmastodon.org را ببینید diff --git a/fastlane/metadata/android/fa/short_description.txt b/fastlane/metadata/android/fa/short_description.txt new file mode 100644 index 000000000..37ab16ac1 --- /dev/null +++ b/fastlane/metadata/android/fa/short_description.txt @@ -0,0 +1 @@ +یک کارخواه چندحسابی برای شبکه اجتماعی ماستودون diff --git a/fastlane/metadata/android/fa/title.txt b/fastlane/metadata/android/fa/title.txt new file mode 100644 index 000000000..57a4e8902 --- /dev/null +++ b/fastlane/metadata/android/fa/title.txt @@ -0,0 +1 @@ +تاسکی From fe304b4e83f7a70c78ec2e628ca8a11074d56b10 Mon Sep 17 00:00:00 2001 From: Konrad Pozniak Date: Tue, 1 Oct 2019 18:24:09 +0200 Subject: [PATCH 18/21] fix videos not always keeping aspect ratio (#1508) --- app/src/main/AndroidManifest.xml | 1 - .../tusky/fragment/ViewVideoFragment.kt | 27 +++++++++++----- .../main/res/layout/fragment_view_video.xml | 31 +++++++++---------- 3 files changed, 34 insertions(+), 25 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 16bbd3bae..0dd19c4c4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -103,7 +103,6 @@