From a15ebf693d2535802192c6621e2ff0cee86dd6e6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?M=C3=A9lanie=20Chauvel?= <perso@hack-libre.org>
Date: Wed, 9 Dec 2020 17:58:12 +0000
Subject: [PATCH 01/20] Translated using Weblate (French)

Currently translated at 100.0% (434 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/fr/

Translated using Weblate (Esperanto)

Currently translated at 100.0% (434 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/eo/

Translated using Weblate (French)

Currently translated at 100.0% (434 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/fr/

Translated using Weblate (Esperanto)

Currently translated at 99.7% (433 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/eo/
---
 app/src/main/res/values-eo/strings.xml | 8 ++++++++
 app/src/main/res/values-fr/strings.xml | 8 ++++----
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index 13a06597..82988898 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -474,4 +474,12 @@
     <string name="pref_title_notification_filter_follow_requests">iu petas sekvi min</string>
     <string name="pref_main_nav_position_option_bottom">Malsupro</string>
     <string name="pref_main_nav_position_option_top">Supro</string>
+    <string name="account_note_saved">Konservita!</string>
+    <string name="account_note_hint">Via privata noto pri ĉi tiu konto</string>
+    <string name="pref_title_hide_top_toolbar">Kaŝi la titolon de la supra ilobreto</string>
+    <string name="pref_title_show_cards_in_timelines">Montri antaŭvidojn de ligiloj en tempolinioj</string>
+    <string name="pref_title_confirm_reblogs">Montri konfirman fenestron antaŭ ol diskonigi</string>
+    <string name="no_announcements">Estas neniu anonco.</string>
+    <string name="pref_title_enable_swipe_for_tabs">Ebligi ŝovumadon por ŝanĝi inter la langetoj</string>
+    <string name="warning_scheduling_interval">Mastodon havas minimuman intervalon de planado de 5 minutoj.</string>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index f2554340..732f65a2 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -452,18 +452,18 @@
     <string name="error_audio_upload_size">Les fichiers audio doivent avoir moins de 40 Mo.</string>
     <string name="no_saved_status">Vous n’avez aucun brouillon.</string>
     <string name="no_scheduled_status">Vous n’avez aucun pouet planifié.</string>
-    <string name="warning_scheduling_interval">L’intervalle minimum de planification sur Mastodon est de5 minutes.</string>
+    <string name="warning_scheduling_interval">L’intervalle minimum de planification sur Mastodon est de 5 minutes.</string>
     <string name="notification_follow_request_name">Demandes d\'abonnement</string>
     <string name="dialog_block_warning">Bloquer @%s \?</string>
     <string name="pref_title_confirm_reblogs">Afficher une fenêtre de confirmation avant de partager</string>
-    <string name="pref_title_show_cards_in_timelines">Afficher des aperçus des liens dans les fils</string>
+    <string name="pref_title_show_cards_in_timelines">Afficher les aperçus des liens dans les fils</string>
     <string name="notification_follow_request_format">%s a demandé à vous suivre</string>
     <string name="notification_follow_request_description">Notifications à propos des demandes d’abonnement</string>
     <string name="pref_title_notification_filter_follow_requests">on demande à me suivre</string>
     <string name="dialog_mute_warning">Mettre en sourdine @%s \?</string>
     <string name="action_unmute_conversation">Enlever la sourdine à la conversation</string>
     <string name="action_mute_conversation">Masquer la conversation</string>
-    <string name="pref_title_enable_swipe_for_tabs">Activer les gestes de glissement pour passer d’un onglet à l’autre</string>
+    <string name="pref_title_enable_swipe_for_tabs">Activer le glissement pour changer d’onglet</string>
     <string name="hashtags">Hashtags</string>
     <string name="add_hashtag_title">Ajouter un hashtag</string>
     <string name="pref_title_gradient_for_media">Afficher des dégradés en couleur pour les médias cachés</string>
@@ -486,6 +486,6 @@
     </plurals>
     <string name="account_note_saved">Sauvegardé !</string>
     <string name="account_note_hint">Votre note privée sur ce compte</string>
-    <string name="no_announcements">Il n’y a pas d’annonces.</string>
+    <string name="no_announcements">Il n’y a pas d’annonce.</string>
     <string name="title_announcements">Annonces</string>
 </resources>
\ No newline at end of file

From 370c495b5623fb10b5a00de54c13a14b09a80fab Mon Sep 17 00:00:00 2001
From: Ho Nhat Duy <kantcer@gmail.com>
Date: Wed, 9 Dec 2020 17:58:13 +0000
Subject: [PATCH 02/20] Translated using Weblate (Vietnamese)

Currently translated at 100.0% (434 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (434 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (434 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/

Translated using Weblate (Vietnamese)

Currently translated at 100.0% (434 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/
---
 app/src/main/res/values-vi/strings.xml | 54 +++++++++++++-------------
 1 file changed, 27 insertions(+), 27 deletions(-)

diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index 1730919e..e6a93e82 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -48,7 +48,7 @@
     <string name="action_reset_schedule">Làm tươi</string>
     <string name="action_search">Tìm kiếm</string>
     <string name="action_edit_profile">Trang cá nhân</string>
-    <string name="action_view_account_preferences">Riêng bạn</string>
+    <string name="action_view_account_preferences">Tài khoản</string>
     <string name="action_view_preferences">Cài đặt</string>
     <string name="action_logout">Đăng xuất</string>
     <string name="button_done">Xong</string>
@@ -97,7 +97,7 @@
     <string name="download_media">Tải về</string>
     <string name="action_share_as">Chia sẻ với tư cách …</string>
     <string name="action_open_as">Mở với tư cách %s</string>
-    <string name="action_copy_link">Sao chép URL</string>
+    <string name="action_copy_link">Chép URL</string>
     <string name="download_image">Đang tải %1$s</string>
     <string name="action_open_media_n">Mở tập tin #%d</string>
     <string name="title_links_dialog">Links</string>
@@ -131,7 +131,7 @@
     <string name="action_mute">Ẩn</string>
     <string name="action_share">Chia sẻ</string>
     <string name="action_photo_take">Chụp hình</string>
-    <string name="action_add_poll">Tạo vău</string>
+    <string name="action_add_poll">Tạo bình chọn</string>
     <string name="action_add_media">Thêm tệp</string>
     <string name="action_open_in_web">Mở trong trình duyệt</string>
     <string name="action_view_media">Bộ sưu tập</string>
@@ -221,7 +221,7 @@
     <string name="pref_title_timelines">Bảng tin</string>
     <string name="pref_title_app_theme">Chủ đề</string>
     <string name="pref_title_appearance_settings">Giao diện</string>
-    <string name="pref_title_notification_filter_poll">vău đã kết thúc</string>
+    <string name="pref_title_notification_filter_poll">cuộc bình chọn kết thúc</string>
     <string name="pref_title_notification_filter_favourites">tút được thích</string>
     <string name="pref_title_notification_filter_reblogs">tút được chia sẻ</string>
     <string name="pref_title_notification_filter_follow_requests">yêu cầu theo dõi</string>
@@ -236,7 +236,7 @@
     <string name="pref_title_edit_notification_settings">Thông báo</string>
     <string name="visibility_direct">Nhắn tin: Chỉ người được nhắc tới mới thấy</string>
     <string name="visibility_private">Người theo dõi: Ai đã theo dõi mới xem được</string>
-    <string name="visibility_unlisted">Mở: Công khai, không hiện trên bảng tin</string>
+    <string name="visibility_unlisted">Riêng tư: Không hiện trên bảng tin</string>
     <string name="visibility_public">Công khai: Mọi người đều có thể thấy</string>
     <string name="dialog_mute_warning">Ẩn @%s\?</string>
     <string name="dialog_block_warning">Chặn @%s\?</string>
@@ -253,20 +253,20 @@
     <string name="status_text_size_smallest">Nhỏ</string>
     <string name="pref_status_text_size">Kích thức phông chữ</string>
     <string name="post_privacy_followers_only">Người theo dõi</string>
-    <string name="post_privacy_unlisted">Mở</string>
+    <string name="post_privacy_unlisted">Riêng tư</string>
     <string name="post_privacy_public">Công khai</string>
     <string name="pref_main_nav_position_option_bottom">Dưới màn hình</string>
     <string name="pref_main_nav_position_option_top">Trên màn hình</string>
     <string name="pref_main_nav_position">Vị trí menu</string>
     <string name="pref_failed_to_sync">Đồng bộ hoá thất bại</string>
     <string name="pref_publishing">Đăng (đồng bộ với máy chủ)</string>
-    <string name="pref_default_media_sensitivity">Luôn đánh dấu nội dung là nhạy cảm</string>
+    <string name="pref_default_media_sensitivity">Tài khoản nhạy cảm</string>
     <string name="pref_default_post_privacy">Trạng thái tút mặc định</string>
-    <string name="pref_title_http_proxy_server">HTTP proxy server</string>
-    <string name="pref_title_http_proxy_port">HTTP proxy port</string>
-    <string name="pref_title_http_proxy_enable">Bật HTTP proxy</string>
-    <string name="pref_title_http_proxy_settings">HTTP proxy</string>
-    <string name="pref_title_proxy_settings">Proxy</string>
+    <string name="pref_title_http_proxy_server">Máy chủ proxy</string>
+    <string name="pref_title_http_proxy_port">Cổng</string>
+    <string name="pref_title_http_proxy_enable">Bật proxy</string>
+    <string name="pref_title_http_proxy_settings">Dùng proxy</string>
+    <string name="pref_title_proxy_settings">Vượt tường lửa</string>
     <string name="notification_boost_description">Thông báo khi của bạn được chia sẻ</string>
     <string name="notification_boost_name">Chia sẻ</string>
     <string name="notification_follow_request_description">Thông báo về lượt yêu cầu theo dõi</string>
@@ -278,8 +278,8 @@
     <string name="about_powered_by_tusky">Powered by Tusky</string>
     <string name="about_tusky_version">Tusky %s</string>
     <string name="description_account_locked">Tài khoản bị khóa</string>
-    <string name="notification_poll_description">Thông báo khi những vău kết thúc</string>
-    <string name="notification_poll_name">Vău</string>
+    <string name="notification_poll_description">Thông báo khi một cuộc bình chọn kết thúc</string>
+    <string name="notification_poll_name">Bình chọn</string>
     <string name="notification_favourite_description">Thông báo khi ai đó thích tút của bạn</string>
     <string name="notification_favourite_name">Lượt thích</string>
     <string name="filter_dialog_whole_word">Toàn bộ câu</string>
@@ -315,9 +315,9 @@
     <string name="no_scheduled_status">Bạn không có tút đã lên lịch.</string>
     <string name="no_saved_status">Bạn không có bản nháp nào.</string>
     <string name="edit_poll">Sửa</string>
-    <string name="poll_new_choice_hint">Bình chọn %d</string>
-    <string name="poll_allow_multiple_choices">Cho phép vău nhiều bình chọn</string>
-    <string name="add_poll_choice">Thêm bình chọn</string>
+    <string name="poll_new_choice_hint">Lựa chọn %d</string>
+    <string name="poll_allow_multiple_choices">Cho phép chọn nhiều lựa chọn</string>
+    <string name="add_poll_choice">Thêm lựa chọn</string>
     <string name="poll_duration_7_days">7 ngày</string>
     <string name="poll_duration_3_days">3 ngày</string>
     <string name="poll_duration_1_day">1 ngày</string>
@@ -325,8 +325,8 @@
     <string name="poll_duration_1_hour">1 giờ</string>
     <string name="poll_duration_30_min">30 phút</string>
     <string name="poll_duration_5_min">5 phút</string>
-    <string name="create_poll_title">Vău</string>
-    <string name="pref_title_enable_swipe_for_tabs">Vuốt để chuyển qua lại giữa các tab</string>
+    <string name="create_poll_title">Bình chọn</string>
+    <string name="pref_title_enable_swipe_for_tabs">Vuốt qua lại giữa các tab</string>
     <string name="pref_title_show_notifications_filter">Hiện bộ lọc thông báo</string>
     <string name="failed_search">Không thể tìm thấy</string>
     <string name="title_accounts">Người</string>
@@ -349,18 +349,18 @@
     <plurals name="poll_timespan_days">
         <item quantity="other">%d ngày nữa kết thúc</item>
     </plurals>
-    <string name="poll_ended_created">Vău bạn tạo đã kết thúc</string>
-    <string name="poll_ended_voted">Vău mà bạn tham gia đã kết thúc</string>
-    <string name="poll_vote">Vău</string>
+    <string name="poll_ended_created">Cuộc bình chọn bạn tạo đã kết thúc</string>
+    <string name="poll_ended_voted">Cuộc bình chọn của bạn đã kết thúc</string>
+    <string name="poll_vote">Bình chọn</string>
     <string name="poll_info_closed">Kết thúc</string>
     <string name="poll_info_time_absolute">kết thúc lúc %s</string>
     <plurals name="poll_info_people">
         <item quantity="other">%s người</item>
     </plurals>
     <plurals name="poll_info_votes">
-        <item quantity="other">%s vău</item>
+        <item quantity="other">%s người</item>
     </plurals>
-    <string name="poll_info_format"> <!-- 15 vău • 1 tiếng nữa kết thúc --> %1$s • %2$s</string>
+    <string name="poll_info_format"> <!-- 15 người • 1 tiếng nữa kết thúc --> %1$s • %2$s</string>
     <string name="compose_preview_image_description">Mô tả cho hình %s</string>
     <string name="compose_shortcut_short_label">Viết</string>
     <string name="compose_shortcut_long_label">Viết tút</string>
@@ -376,7 +376,7 @@
     <string name="description_poll">Lượt bình chọn: %1$s, %2$s, %3$s, %4$s; %5$s</string>
     <string name="description_visiblity_direct">Tin nhắn</string>
     <string name="description_visiblity_private">Người theo dõi</string>
-    <string name="description_visiblity_unlisted">Mở</string>
+    <string name="description_visiblity_unlisted">Riêng tư</string>
     <string name="description_visiblity_public">Công khai</string>
     <string name="description_status_bookmarked">Đã lưu</string>
     <string name="description_status_favourited">Đã thích</string>
@@ -456,7 +456,7 @@
     <string name="action_unmute_domain">Bỏ ẩn %s</string>
     <string name="pref_title_hide_top_toolbar">Ẩn tiêu đề tab</string>
     <string name="account_note_saved">Đã lưu!</string>
-    <string name="account_note_hint">Chú thích của bạn về người này</string>
+    <string name="account_note_hint">Ghi chú của bạn</string>
     <string name="no_announcements">Chưa có thông báo.</string>
-    <string name="title_announcements">Thông báo</string>
+    <string name="title_announcements">Tin tức</string>
 </resources>
\ No newline at end of file

From f7beecdcd250dfb30f93d8c9052bc4d5f8d43dc4 Mon Sep 17 00:00:00 2001
From: x <hardwired1.0@protonmail.com>
Date: Wed, 9 Dec 2020 17:58:13 +0000
Subject: [PATCH 03/20] Translated using Weblate (Italian)

Currently translated at 100.0% (434 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/it/
---
 app/src/main/res/values-it/strings.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 2cc0cfb2..a704c110 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -482,4 +482,5 @@
     <string name="action_mute_notifications_desc">Disattiva le notifiche da %s</string>
     <string name="action_unmute_notifications_desc">Riattiva le notifiche da %s</string>
     <string name="title_announcements">Annunci</string>
+    <string name="pref_title_notification_filter_follow_requests">Richieste di seguirti</string>
 </resources>
\ No newline at end of file

From c39c5cb0ba712a5bfc515a99a9d23969fbaa101f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Isak=20Holmstr=C3=B6m?= <iah@ghostly.solutions>
Date: Wed, 9 Dec 2020 17:58:13 +0000
Subject: [PATCH 04/20] Translated using Weblate (Swedish)

Currently translated at 100.0% (434 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/sv/
---
 app/src/main/res/values-sv/strings.xml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index de4b4409..8e3d5fb7 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -480,4 +480,8 @@
     <string name="dialog_mute_hide_notifications">Dölj aviseringar</string>
     <string name="action_mute_notifications_desc">Tysta aviseringar från %s</string>
     <string name="action_unmute_notifications_desc">Aktivera aviseringar från %s</string>
+    <string name="account_note_saved">Sparat!</string>
+    <string name="account_note_hint">Din privata notering om detta kontot</string>
+    <string name="no_announcements">Det finns inga meddelanden.</string>
+    <string name="title_announcements">Meddelanden</string>
 </resources>
\ No newline at end of file

From 8a5ca252f8e0508fef9416e95e2ff54a3b605dd9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Isak=20Holmstr=C3=B6m?= <iah@ghostly.solutions>
Date: Wed, 9 Dec 2020 18:04:21 +0000
Subject: [PATCH 05/20] Translated using Weblate (Swedish)

Currently translated at 90.9% (10 of 11 strings)

Translation: Tusky/Tusky description
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky-app/sv/
---
 fastlane/metadata/android/sv/changelogs/77.txt | 10 ++++++++++
 1 file changed, 10 insertions(+)
 create mode 100644 fastlane/metadata/android/sv/changelogs/77.txt

diff --git a/fastlane/metadata/android/sv/changelogs/77.txt b/fastlane/metadata/android/sv/changelogs/77.txt
new file mode 100644
index 00000000..bb3c9662
--- /dev/null
+++ b/fastlane/metadata/android/sv/changelogs/77.txt
@@ -0,0 +1,10 @@
+Tusky v13.0
+
+- support for profile notes (Mastodon 3.2.0 feature)
+- support for admin announcements (Mastodon 3.1.0 feature)
+
+- the avatar of your selected account will now be shown in the main toolbar
+- clicking the display name in a timeline will now open the profile page of that user
+
+- a lot of bug fixes and small improvements
+- improved translations

From 9cdf486ceb36852e0c07af4678eeab934fc39a98 Mon Sep 17 00:00:00 2001
From: Konrad Pozniak <connyduck@users.noreply.github.com>
Date: Wed, 9 Dec 2020 19:08:16 +0100
Subject: [PATCH 06/20] remove ThemeUtils.getTintedDrawable (#2015)

---
 .../tusky/adapter/ListSelectionAdapter.kt     |  6 +---
 .../adapter/PreviewPollOptionsAdapter.kt      |  5 +--
 .../tusky/adapter/StatusBaseViewHolder.java   |  5 +--
 .../keylesspalace/tusky/adapter/TabAdapter.kt |  8 ++---
 .../components/compose/ComposeActivity.kt     |  3 +-
 .../compose/view/ComposeScheduleView.java     |  4 +--
 .../preference/AccountPreferencesFragment.kt  | 36 ++++++++-----------
 .../preference/PreferencesFragment.kt         |  8 ++---
 .../tusky/util/StatusViewHelper.kt            |  5 +--
 .../keylesspalace/tusky/util/ThemeUtils.java  | 13 -------
 app/src/main/res/layout/activity_compose.xml  | 27 +++++++-------
 .../res/layout/item_autocomplete_hashtag.xml  |  5 ++-
 app/src/main/res/layout/item_conversation.xml |  4 +++
 .../res/layout/item_poll_preview_option.xml   |  4 ++-
 .../main/res/layout/item_report_status.xml    |  5 +--
 app/src/main/res/layout/item_status.xml       |  6 +++-
 .../main/res/layout/item_status_detailed.xml  |  4 +++
 .../main/res/layout/item_tab_preference.xml   |  1 +
 .../res/layout/item_tab_preference_small.xml  | 14 ++++----
 .../main/res/layout/view_compose_schedule.xml |  5 +--
 app/src/main/res/values/styles.xml            |  6 ++++
 21 files changed, 82 insertions(+), 92 deletions(-)

diff --git a/app/src/main/java/com/keylesspalace/tusky/adapter/ListSelectionAdapter.kt b/app/src/main/java/com/keylesspalace/tusky/adapter/ListSelectionAdapter.kt
index e5470df6..f9b19c69 100644
--- a/app/src/main/java/com/keylesspalace/tusky/adapter/ListSelectionAdapter.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/adapter/ListSelectionAdapter.kt
@@ -22,7 +22,6 @@ import android.view.ViewGroup
 import android.widget.ArrayAdapter
 import com.keylesspalace.tusky.R
 import com.keylesspalace.tusky.entity.MastoList
-import com.keylesspalace.tusky.util.ThemeUtils
 import kotlinx.android.synthetic.main.item_picker_list.view.*
 
 class ListSelectionAdapter(context: Context) : ArrayAdapter<MastoList>(context, R.layout.item_autocomplete_hashtag) {
@@ -34,10 +33,7 @@ class ListSelectionAdapter(context: Context) : ArrayAdapter<MastoList>(context,
                 ?: layoutInflater.inflate(R.layout.item_picker_list, parent, false)
 
         getItem(position)?.let { list ->
-            val title = view.title
-            title.text = list.title
-            val icon = ThemeUtils.getTintedDrawable(context, R.drawable.ic_list, R.attr.iconColor)
-            title.setCompoundDrawablesRelativeWithIntrinsicBounds(icon, null, null, null)
+            view.title.text = list.title
         }
 
         return view
diff --git a/app/src/main/java/com/keylesspalace/tusky/adapter/PreviewPollOptionsAdapter.kt b/app/src/main/java/com/keylesspalace/tusky/adapter/PreviewPollOptionsAdapter.kt
index bb77cd27..328e9626 100644
--- a/app/src/main/java/com/keylesspalace/tusky/adapter/PreviewPollOptionsAdapter.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/adapter/PreviewPollOptionsAdapter.kt
@@ -22,7 +22,6 @@ import android.widget.TextView
 import androidx.core.widget.TextViewCompat
 import androidx.recyclerview.widget.RecyclerView
 import com.keylesspalace.tusky.R
-import com.keylesspalace.tusky.util.ThemeUtils
 
 class PreviewPollOptionsAdapter: RecyclerView.Adapter<PreviewViewHolder>() {
 
@@ -55,9 +54,7 @@ class PreviewPollOptionsAdapter: RecyclerView.Adapter<PreviewViewHolder>() {
             R.drawable.ic_radio_button_unchecked_18dp
         }
 
-        val iconDrawable = ThemeUtils.getTintedDrawable(textView.context, iconId, android.R.attr.textColorTertiary)
-
-        TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(textView, iconDrawable, null, null, null)
+        TextViewCompat.setCompoundDrawablesRelativeWithIntrinsicBounds(textView, iconId, 0, 0, 0)
 
         textView.text = options[position]
 
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 3869ca02..046ab9cf 100644
--- a/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java
+++ b/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java
@@ -57,7 +57,6 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
-import java.util.Objects;
 
 import at.connyduck.sparkbutton.SparkButton;
 import at.connyduck.sparkbutton.helpers.Utils;
@@ -566,9 +565,7 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder {
 
                 // Set the icon next to the label.
                 int drawableId = getLabelIcon(attachments.get(0).getType());
-                Drawable drawable = Objects.requireNonNull(context.getDrawable(drawableId));
-                ThemeUtils.setDrawableTint(context, drawable, android.R.attr.textColorTertiary);
-                mediaLabel.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
+                mediaLabel.setCompoundDrawablesWithIntrinsicBounds(drawableId, 0, 0, 0);
 
                 setAttachmentClickListener(mediaLabel, listener, i, attachment, false);
             } else {
diff --git a/app/src/main/java/com/keylesspalace/tusky/adapter/TabAdapter.kt b/app/src/main/java/com/keylesspalace/tusky/adapter/TabAdapter.kt
index cd877a15..b4517dc6 100644
--- a/app/src/main/java/com/keylesspalace/tusky/adapter/TabAdapter.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/adapter/TabAdapter.kt
@@ -15,6 +15,7 @@
 
 package com.keylesspalace.tusky.adapter
 
+import android.content.res.ColorStateList
 import android.view.LayoutInflater
 import android.view.MotionEvent
 import android.view.View
@@ -68,8 +69,7 @@ class TabAdapter(private var data: List<TabData>,
         } else {
             holder.itemView.textView.setText(tab.text)
         }
-        val iconDrawable = ThemeUtils.getTintedDrawable(context, tab.icon, android.R.attr.textColorSecondary)
-        holder.itemView.textView.setCompoundDrawablesRelativeWithIntrinsicBounds(iconDrawable, null, null, null)
+        holder.itemView.textView.setCompoundDrawablesRelativeWithIntrinsicBounds(tab.icon, 0, 0, 0)
         if (small) {
             holder.itemView.textView.setOnClickListener {
                 listener.onTabAdded(tab)
@@ -110,6 +110,7 @@ class TabAdapter(private var data: List<TabData>,
                     val chip = holder.itemView.chipGroup.getChildAt(i).takeUnless { it.id == R.id.actionChip } as Chip?
                             ?: Chip(context).apply {
                                 holder.itemView.chipGroup.addView(this, holder.itemView.chipGroup.size - 1)
+                                chipIconTint = ColorStateList.valueOf(ThemeUtils.getColor(context, android.R.attr.textColorPrimary))
                             }
 
                     chip.text = arg
@@ -118,8 +119,7 @@ class TabAdapter(private var data: List<TabData>,
                         chip.chipIcon = null
                         chip.setOnClickListener(null)
                     } else {
-                        val cancelIcon = ThemeUtils.getTintedDrawable(context, R.drawable.ic_cancel_24dp, android.R.attr.textColorPrimary)
-                        chip.chipIcon = cancelIcon
+                        chip.setChipIconResource(R.drawable.ic_cancel_24dp)
                         chip.setOnClickListener {
                             listener.onChipClicked(tab, holder.adapterPosition, i)
                         }
diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
index 4eba7e32..e9615d33 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
@@ -534,8 +534,7 @@ class ComposeActivity : BaseActivity(),
             Status.Visibility.UNLISTED -> R.drawable.ic_lock_open_24dp
             else -> R.drawable.ic_lock_open_24dp
         }
-        val drawable = ThemeUtils.getTintedDrawable(this, iconRes, android.R.attr.textColorTertiary)
-        composeToggleVisibilityButton.setImageDrawable(drawable)
+        composeToggleVisibilityButton.setImageResource(iconRes)
     }
 
     private fun showComposeOptions() {
diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/view/ComposeScheduleView.java b/app/src/main/java/com/keylesspalace/tusky/components/compose/view/ComposeScheduleView.java
index ca663936..a1a99a7d 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/compose/view/ComposeScheduleView.java
+++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/view/ComposeScheduleView.java
@@ -26,13 +26,13 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.core.content.ContextCompat;
 
 import com.google.android.material.datepicker.CalendarConstraints;
 import com.google.android.material.datepicker.DateValidatorPointForward;
 import com.google.android.material.datepicker.MaterialDatePicker;
 import com.keylesspalace.tusky.R;
 import com.keylesspalace.tusky.fragment.TimePickerFragment;
-import com.keylesspalace.tusky.util.ThemeUtils;
 
 import java.text.DateFormat;
 import java.text.ParseException;
@@ -106,7 +106,7 @@ public class ComposeScheduleView extends ConstraintLayout {
     }
 
     private void setEditIcons() {
-        Drawable icon = ThemeUtils.getTintedDrawable(getContext(), R.drawable.ic_create_24dp, android.R.attr.textColorTertiary);
+        Drawable icon = ContextCompat.getDrawable(getContext(), R.drawable.ic_create_24dp);
         if (icon == null) {
             return;
         }
diff --git a/app/src/main/java/com/keylesspalace/tusky/components/preference/AccountPreferencesFragment.kt b/app/src/main/java/com/keylesspalace/tusky/components/preference/AccountPreferencesFragment.kt
index af882977..286b49b5 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/preference/AccountPreferencesFragment.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/components/preference/AccountPreferencesFragment.kt
@@ -16,10 +16,10 @@
 package com.keylesspalace.tusky.components.preference
 
 import android.content.Intent
-import android.graphics.drawable.Drawable
 import android.os.Build
 import android.os.Bundle
 import android.util.Log
+import androidx.annotation.DrawableRes
 import androidx.preference.PreferenceFragmentCompat
 import com.google.android.material.snackbar.Snackbar
 import com.keylesspalace.tusky.*
@@ -71,7 +71,7 @@ class AccountPreferencesFragment : PreferenceFragmentCompat(), Injectable {
 
             preference {
                 setTitle(R.string.title_tab_preferences)
-                icon = getTintedIcon(R.drawable.ic_tabs)
+                setIcon(R.drawable.ic_tabs)
                 setOnPreferenceClickListener {
                     val intent = Intent(context, TabPreferenceActivity::class.java)
                     activity?.startActivity(intent)
@@ -83,7 +83,7 @@ class AccountPreferencesFragment : PreferenceFragmentCompat(), Injectable {
 
             preference {
                 setTitle(R.string.action_view_mutes)
-                icon = getTintedIcon(R.drawable.ic_mute_24dp)
+                setIcon(R.drawable.ic_mute_24dp)
                 setOnPreferenceClickListener {
                     val intent = Intent(context, AccountListActivity::class.java)
                     intent.putExtra("type", AccountListActivity.Type.MUTES)
@@ -112,7 +112,7 @@ class AccountPreferencesFragment : PreferenceFragmentCompat(), Injectable {
 
             preference {
                 setTitle(R.string.title_domain_mutes)
-                icon = getTintedIcon(R.drawable.ic_mute_24dp)
+                setIcon(R.drawable.ic_mute_24dp)
                 setOnPreferenceClickListener {
                     val intent = Intent(context, InstanceListActivity::class.java)
                     activity?.startActivity(intent)
@@ -132,11 +132,9 @@ class AccountPreferencesFragment : PreferenceFragmentCompat(), Injectable {
                     val visibility = accountManager.activeAccount?.defaultPostPrivacy
                             ?: Status.Visibility.PUBLIC
                     value = visibility.serverString()
-                    icon = getIconForVisibility(visibility)
+                    setIcon(getIconForVisibility(visibility))
                     setOnPreferenceChangeListener { _, newValue ->
-                        icon = getIconForVisibility(
-                                Status.Visibility.byString(newValue as String)
-                        )
+                        setIcon(getIconForVisibility(Status.Visibility.byString(newValue as String)))
                         syncWithServer(visibility = newValue)
                         eventHub.dispatch(PreferenceChangedEvent(key))
                         true
@@ -151,9 +149,9 @@ class AccountPreferencesFragment : PreferenceFragmentCompat(), Injectable {
                     val sensitivity = accountManager.activeAccount?.defaultMediaSensitivity
                             ?: false
                     setDefaultValue(sensitivity)
-                    icon = getIconForSensitivity(sensitivity)
+                    setIcon(getIconForSensitivity(sensitivity))
                     setOnPreferenceChangeListener { _, newValue ->
-                        icon = getIconForSensitivity(newValue as Boolean)
+                        setIcon(getIconForSensitivity(newValue as Boolean))
                         syncWithServer(sensitive = newValue)
                         eventHub.dispatch(PreferenceChangedEvent(key))
                         true
@@ -303,30 +301,24 @@ class AccountPreferencesFragment : PreferenceFragmentCompat(), Injectable {
         }
     }
 
-    private fun getIconForVisibility(visibility: Status.Visibility): Drawable? {
-        val drawableId = when (visibility) {
+    @DrawableRes
+    private fun getIconForVisibility(visibility: Status.Visibility): Int {
+        return when (visibility) {
             Status.Visibility.PRIVATE -> R.drawable.ic_lock_outline_24dp
 
             Status.Visibility.UNLISTED -> R.drawable.ic_lock_open_24dp
 
             else -> R.drawable.ic_public_24dp
         }
-
-        return getTintedIcon(drawableId)
     }
 
-    private fun getIconForSensitivity(sensitive: Boolean): Drawable? {
-        val drawableId = if (sensitive) {
+    @DrawableRes
+    private fun getIconForSensitivity(sensitive: Boolean): Int {
+        return if (sensitive) {
             R.drawable.ic_hide_media_24dp
         } else {
             R.drawable.ic_eye_24dp
         }
-
-        return getTintedIcon(drawableId)
-    }
-
-    private fun getTintedIcon(iconId: Int): Drawable? {
-        return ThemeUtils.getTintedDrawable(requireContext(), iconId, R.attr.iconColor)
     }
 
     private fun launchFilterActivity(filterContext: String, titleResource: Int) {
diff --git a/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt b/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt
index edddffca..5e61e2fa 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt
@@ -39,7 +39,6 @@ class PreferencesFragment : PreferenceFragmentCompat(), Injectable {
     private var httpProxyPref: Preference? = null
 
     override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
-        val context = requireContext()
         makePreferenceScreen {
             preferenceCategory(R.string.pref_title_appearance_settings) {
                 listPreference {
@@ -115,11 +114,8 @@ class PreferencesFragment : PreferenceFragmentCompat(), Injectable {
                     key = PrefKeys.SHOW_BOT_OVERLAY
                     setTitle(R.string.pref_title_bot_overlay)
                     isSingleLineTitle = false
-                    icon = ThemeUtils.getTintedDrawable(
-                            context,
-                            R.drawable.ic_bot_24dp,
-                            R.attr.iconColor
-                    )
+                    setIcon(R.drawable.ic_bot_24dp)
+
                 }
 
                 switchPreference {
diff --git a/app/src/main/java/com/keylesspalace/tusky/util/StatusViewHelper.kt b/app/src/main/java/com/keylesspalace/tusky/util/StatusViewHelper.kt
index cb4651fd..2fb9ad42 100644
--- a/app/src/main/java/com/keylesspalace/tusky/util/StatusViewHelper.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/util/StatusViewHelper.kt
@@ -23,7 +23,6 @@ import android.view.View
 import android.widget.ImageView
 import android.widget.TextView
 import androidx.annotation.DrawableRes
-import androidx.appcompat.content.res.AppCompatResources
 import com.bumptech.glide.Glide
 import com.keylesspalace.tusky.R
 import com.keylesspalace.tusky.entity.Attachment
@@ -220,9 +219,7 @@ class StatusViewHelper(private val itemView: View) {
 
         // Set the icon next to the label.
         val drawableId = getLabelIcon(attachments[0].type)
-        val drawable = AppCompatResources.getDrawable(context, drawableId)
-        ThemeUtils.setDrawableTint(context, drawable!!, android.R.attr.textColorTertiary)
-        mediaLabel.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null)
+        mediaLabel.setCompoundDrawablesWithIntrinsicBounds(drawableId, 0, 0, 0)
 
         mediaLabel.setOnClickListener { listener.onViewMedia(null, 0) }
     }
diff --git a/app/src/main/java/com/keylesspalace/tusky/util/ThemeUtils.java b/app/src/main/java/com/keylesspalace/tusky/util/ThemeUtils.java
index 9f7be621..d01775dd 100644
--- a/app/src/main/java/com/keylesspalace/tusky/util/ThemeUtils.java
+++ b/app/src/main/java/com/keylesspalace/tusky/util/ThemeUtils.java
@@ -22,9 +22,7 @@ import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
 import androidx.annotation.AttrRes;
 import androidx.annotation.ColorInt;
-import androidx.annotation.DrawableRes;
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatDelegate;
 import android.util.TypedValue;
 
@@ -59,17 +57,6 @@ public class ThemeUtils {
         return dimen;
     }
 
-    /** this can be replaced with drawableTint in xml once minSdkVersion >= 23 */
-    @Nullable
-    public static Drawable getTintedDrawable(@NonNull Context context, @DrawableRes int drawableId, @AttrRes int colorAttr) {
-        Drawable drawable = context.getDrawable(drawableId);
-        if(drawable == null) {
-            return null;
-        }
-        setDrawableTint(context, drawable, colorAttr);
-        return drawable;
-    }
-
     public static void setDrawableTint(Context context, Drawable drawable, @AttrRes int attribute) {
         drawable.setColorFilter(getColor(context, attribute), PorterDuff.Mode.SRC_IN);
     }
diff --git a/app/src/main/res/layout/activity_compose.xml b/app/src/main/res/layout/activity_compose.xml
index 5f8d6ffd..4a92ff11 100644
--- a/app/src/main/res/layout/activity_compose.xml
+++ b/app/src/main/res/layout/activity_compose.xml
@@ -136,10 +136,10 @@
 
             <androidx.recyclerview.widget.RecyclerView
                 android:id="@+id/composeMediaPreviewBar"
-                android:visibility="gone"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:scrollbars="none" />
+                android:scrollbars="none"
+                android:visibility="gone" />
 
             <com.keylesspalace.tusky.components.compose.view.PollPreviewView
                 android:id="@+id/pollPreview"
@@ -239,9 +239,9 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_gravity="bottom"
+        android:animateLayoutChanges="true"
         android:background="?attr/colorSurface"
         android:elevation="12dp"
-        android:animateLayoutChanges="true"
         android:gravity="center_vertical"
         android:paddingStart="8dp"
         android:paddingTop="4dp"
@@ -256,8 +256,8 @@
             android:layout_marginEnd="4dp"
             android:contentDescription="@string/action_add_media"
             android:padding="4dp"
-            android:tooltipText="@string/action_add_media"
-            app:srcCompat="@drawable/ic_attach_file_24dp" />
+            app:srcCompat="@drawable/ic_attach_file_24dp"
+            app:tooltipText="@string/action_add_media" />
 
         <ImageButton
             android:id="@+id/composeToggleVisibilityButton"
@@ -267,7 +267,8 @@
             android:layout_marginEnd="4dp"
             android:contentDescription="@string/action_toggle_visibility"
             android:padding="4dp"
-            android:tooltipText="@string/action_toggle_visibility"
+            android:tint="?android:attr/textColorTertiary"
+            app:tooltipText="@string/action_toggle_visibility"
             tools:src="@drawable/ic_public_24dp" />
 
         <ImageButton
@@ -278,7 +279,7 @@
             android:layout_marginEnd="4dp"
             android:contentDescription="@string/action_hide_media"
             android:padding="4dp"
-            android:tooltipText="@string/action_hide_media"
+            app:tooltipText="@string/action_hide_media"
             tools:src="@drawable/ic_eye_24dp" />
 
         <ImageButton
@@ -289,8 +290,8 @@
             android:layout_marginEnd="4dp"
             android:contentDescription="@string/action_content_warning"
             android:padding="4dp"
-            android:tooltipText="@string/action_content_warning"
-            app:srcCompat="@drawable/ic_cw_24dp" />
+            app:srcCompat="@drawable/ic_cw_24dp"
+            app:tooltipText="@string/action_content_warning" />
 
         <ImageButton
             android:id="@+id/composeEmojiButton"
@@ -300,8 +301,8 @@
             android:layout_marginEnd="4dp"
             android:contentDescription="@string/action_emoji_keyboard"
             android:padding="4dp"
-            android:tooltipText="@string/action_emoji_keyboard"
-            app:srcCompat="@drawable/ic_emoji_24dp" />
+            app:srcCompat="@drawable/ic_emoji_24dp"
+            app:tooltipText="@string/action_emoji_keyboard" />
 
         <ImageButton
             android:id="@+id/composeScheduleButton"
@@ -311,8 +312,8 @@
             android:layout_marginEnd="4dp"
             android:contentDescription="@string/action_schedule_toot"
             android:padding="4dp"
-            android:tooltipText="@string/action_schedule_toot"
-            app:srcCompat="@drawable/ic_access_time" />
+            app:srcCompat="@drawable/ic_access_time"
+            app:tooltipText="@string/action_schedule_toot" />
 
         <Space
             android:layout_width="0dp"
diff --git a/app/src/main/res/layout/item_autocomplete_hashtag.xml b/app/src/main/res/layout/item_autocomplete_hashtag.xml
index 33247421..79148d25 100644
--- a/app/src/main/res/layout/item_autocomplete_hashtag.xml
+++ b/app/src/main/res/layout/item_autocomplete_hashtag.xml
@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/hashtag"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:padding="16dp"
     android:textSize="?attr/status_text_medium"
-    android:textStyle="normal|bold" />
+    android:textStyle="normal|bold"
+    app:drawableStartCompat="@drawable/ic_list"
+    app:drawableTint="?attr/iconColor" />
diff --git a/app/src/main/res/layout/item_conversation.xml b/app/src/main/res/layout/item_conversation.xml
index a2dd4e3d..d746f99e 100644
--- a/app/src/main/res/layout/item_conversation.xml
+++ b/app/src/main/res/layout/item_conversation.xml
@@ -340,6 +340,7 @@
             android:importantForAccessibility="no"
             android:textSize="?attr/status_text_medium"
             android:visibility="gone"
+            app:drawableTint="?android:attr/textColorTertiary"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
@@ -353,6 +354,7 @@
             android:importantForAccessibility="no"
             android:textSize="?attr/status_text_medium"
             android:visibility="gone"
+            app:drawableTint="?android:attr/textColorTertiary"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@id/status_media_label_0" />
 
@@ -366,6 +368,7 @@
             android:importantForAccessibility="no"
             android:textSize="?attr/status_text_medium"
             android:visibility="gone"
+            app:drawableTint="?android:attr/textColorTertiary"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@id/status_media_label_1" />
 
@@ -379,6 +382,7 @@
             android:importantForAccessibility="no"
             android:textSize="?attr/status_text_medium"
             android:visibility="gone"
+            app:drawableTint="?android:attr/textColorTertiary"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@id/status_media_label_2" />
 
diff --git a/app/src/main/res/layout/item_poll_preview_option.xml b/app/src/main/res/layout/item_poll_preview_option.xml
index d7f5887a..e8fa9849 100644
--- a/app/src/main/res/layout/item_poll_preview_option.xml
+++ b/app/src/main/res/layout/item_poll_preview_option.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:drawablePadding="4dp"
@@ -7,4 +8,5 @@
     android:focusableInTouchMode="false"
     android:gravity="center_vertical"
     android:lines="1"
-    android:maxEms="20" />
\ No newline at end of file
+    android:maxEms="20"
+    app:drawableTint="?android:attr/textColorTertiary" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_report_status.xml b/app/src/main/res/layout/item_report_status.xml
index b7ed0555..56a2dea9 100644
--- a/app/src/main/res/layout/item_report_status.xml
+++ b/app/src/main/res/layout/item_report_status.xml
@@ -198,8 +198,8 @@
             app:layout_constraintLeft_toLeftOf="@+id/status_media_preview_container"
             app:layout_constraintTop_toTopOf="@+id/status_media_preview_container"
             app:srcCompat="@drawable/ic_eye_24dp"
-            tools:visibility="visible"
-            app:tint="@color/white" />
+            app:tint="@color/white"
+            tools:visibility="visible" />
 
         <TextView
             android:id="@+id/status_sensitive_media_warning"
@@ -231,6 +231,7 @@
             android:gravity="center_vertical"
             android:textSize="?attr/status_text_medium"
             android:visibility="gone"
+            app:drawableTint="?android:attr/textColorTertiary"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
diff --git a/app/src/main/res/layout/item_status.xml b/app/src/main/res/layout/item_status.xml
index 8d831757..b6c59725 100644
--- a/app/src/main/res/layout/item_status.xml
+++ b/app/src/main/res/layout/item_status.xml
@@ -167,9 +167,9 @@
         android:foreground="?attr/selectableItemBackground"
         android:minHeight="80dp"
         android:orientation="vertical"
+        app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="@id/status_display_name"
         app:layout_constraintTop_toBottomOf="@+id/button_toggle_content"
-        app:layout_constraintEnd_toEndOf="parent"
         tools:visibility="gone">
 
         <ImageView
@@ -398,6 +398,7 @@
             android:importantForAccessibility="no"
             android:textSize="?attr/status_text_medium"
             android:visibility="gone"
+            app:drawableTint="?android:attr/textColorTertiary"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
@@ -411,6 +412,7 @@
             android:importantForAccessibility="no"
             android:textSize="?attr/status_text_medium"
             android:visibility="gone"
+            app:drawableTint="?android:attr/textColorTertiary"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@id/status_media_label_0" />
 
@@ -424,6 +426,7 @@
             android:importantForAccessibility="no"
             android:textSize="?attr/status_text_medium"
             android:visibility="gone"
+            app:drawableTint="?android:attr/textColorTertiary"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@id/status_media_label_1" />
 
@@ -437,6 +440,7 @@
             android:importantForAccessibility="no"
             android:textSize="?attr/status_text_medium"
             android:visibility="gone"
+            app:drawableTint="?android:attr/textColorTertiary"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@id/status_media_label_2" />
 
diff --git a/app/src/main/res/layout/item_status_detailed.xml b/app/src/main/res/layout/item_status_detailed.xml
index 019ab8bd..f3ad6ed5 100644
--- a/app/src/main/res/layout/item_status_detailed.xml
+++ b/app/src/main/res/layout/item_status_detailed.xml
@@ -344,6 +344,7 @@
             android:importantForAccessibility="no"
             android:textSize="?attr/status_text_medium"
             android:visibility="gone"
+            app:drawableTint="?android:attr/textColorTertiary"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
@@ -357,6 +358,7 @@
             android:importantForAccessibility="no"
             android:textSize="?attr/status_text_medium"
             android:visibility="gone"
+            app:drawableTint="?android:attr/textColorTertiary"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@id/status_media_label_0" />
 
@@ -370,6 +372,7 @@
             android:importantForAccessibility="no"
             android:textSize="?attr/status_text_medium"
             android:visibility="gone"
+            app:drawableTint="?android:attr/textColorTertiary"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@id/status_media_label_1" />
 
@@ -383,6 +386,7 @@
             android:importantForAccessibility="no"
             android:textSize="?attr/status_text_medium"
             android:visibility="gone"
+            app:drawableTint="?android:attr/textColorTertiary"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@id/status_media_label_2" />
 
diff --git a/app/src/main/res/layout/item_tab_preference.xml b/app/src/main/res/layout/item_tab_preference.xml
index b0926cea..9eb164c3 100644
--- a/app/src/main/res/layout/item_tab_preference.xml
+++ b/app/src/main/res/layout/item_tab_preference.xml
@@ -32,6 +32,7 @@
         android:paddingBottom="8dp"
         android:textColor="?android:attr/textColorSecondary"
         android:textSize="?attr/status_text_large"
+        app:drawableTint="?android:attr/textColorSecondary"
         app:layout_constraintBottom_toTopOf="@id/chipGroup"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toEndOf="@id/imageView"
diff --git a/app/src/main/res/layout/item_tab_preference_small.xml b/app/src/main/res/layout/item_tab_preference_small.xml
index bee49eb2..15daafe0 100644
--- a/app/src/main/res/layout/item_tab_preference_small.xml
+++ b/app/src/main/res/layout/item_tab_preference_small.xml
@@ -1,17 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/textView"
     android:layout_width="match_parent"
-    android:drawableStart="@drawable/ic_home_24dp"
     android:layout_height="48dp"
-    android:gravity="center_vertical"
+    android:background="?attr/selectableItemBackground"
     android:drawablePadding="12dp"
+    android:ellipsize="end"
+    android:gravity="center_vertical"
+    android:lines="1"
     android:paddingStart="8dp"
     android:paddingEnd="8dp"
-    android:lines="1"
-    android:ellipsize="end"
-    android:background="?attr/selectableItemBackground"
     android:textColor="?android:attr/textColorSecondary"
-    android:textSize="?attr/status_text_large" />
+    android:textSize="?attr/status_text_large"
+    app:drawableStartCompat="@drawable/ic_home_24dp"
+    app:drawableTint="?android:attr/textColorSecondary" />
 
 
diff --git a/app/src/main/res/layout/view_compose_schedule.xml b/app/src/main/res/layout/view_compose_schedule.xml
index b07270f6..7ae003c4 100644
--- a/app/src/main/res/layout/view_compose_schedule.xml
+++ b/app/src/main/res/layout/view_compose_schedule.xml
@@ -23,6 +23,7 @@
         android:paddingBottom="16dp"
         android:textColor="?android:textColorTertiary"
         android:textSize="?attr/status_text_medium"
+        app:drawableTint="?android:attr/textColorTertiary"
         app:layout_constraintBottom_toTopOf="@id/invalidScheduleWarning"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="1"
@@ -39,11 +40,11 @@
         android:paddingBottom="16dp"
         android:textColor="?android:textColorTertiary"
         android:textSize="?attr/status_text_medium"
+        android:visibility="gone"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="1"
         app:layout_constraintStart_toStartOf="parent"
-        tools:text="@string/warning_scheduling_interval"
-        android:visibility="gone" />
+        tools:text="@string/warning_scheduling_interval" />
 
 </merge>
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 50da2622..693c8427 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -80,6 +80,8 @@
         <item name="swipeRefreshLayoutProgressSpinnerBackgroundColor">?attr/colorSurface</item>
 
         <item name="chipStyle">@style/Widget.MaterialComponents.Chip.Choice</item>
+
+        <item name="preferenceTheme">@style/TuskyPreferenceTheme</item>
     </style>
 
     <style name="ViewMediaActivity.AppBarLayout" parent="ThemeOverlay.AppCompat">
@@ -103,6 +105,10 @@
         <item name="tabIndicatorHeight">3dp</item>
     </style>
 
+    <style name="TuskyPreferenceTheme" parent="@style/PreferenceThemeOverlay.v14.Material">
+        <item name="android:tint">?iconColor</item>
+    </style>
+
     <style name="TuskyImageButton" parent="@style/Widget.MaterialComponents.Button.UnelevatedButton">
         <item name="android:tint">?android:attr/textColorTertiary</item>
         <item name="android:background">?attr/selectableItemBackgroundBorderless</item>

From 6bba3cb2b4d2652000c8bc53002bf268fdda218c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sveinn=20=C3=AD=20Felli?= <sv1@fellsnet.is>
Date: Fri, 11 Dec 2020 08:56:10 +0000
Subject: [PATCH 07/20] Translated using Weblate (Icelandic)

Currently translated at 81.8% (9 of 11 strings)

Translation: Tusky/Tusky description
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky-app/is/
---
 fastlane/metadata/android/is/changelogs/58.txt |  4 ++--
 fastlane/metadata/android/is/changelogs/68.txt |  2 +-
 fastlane/metadata/android/is/changelogs/70.txt |  2 +-
 fastlane/metadata/android/is/changelogs/77.txt | 10 ++++++++++
 4 files changed, 14 insertions(+), 4 deletions(-)
 create mode 100644 fastlane/metadata/android/is/changelogs/77.txt

diff --git a/fastlane/metadata/android/is/changelogs/58.txt b/fastlane/metadata/android/is/changelogs/58.txt
index b981890a..3eb6e57f 100644
--- a/fastlane/metadata/android/is/changelogs/58.txt
+++ b/fastlane/metadata/android/is/changelogs/58.txt
@@ -1,8 +1,8 @@
-Tusky útg6.0
+Tusky útg. 6
 
 - Tímalínusíur hafa verið færðar í kjörstillingar notandaaðgangs og munu samstillast við vefþjón
 - YNú geturðu haft sérsniðið myllumerki sem flipa í aðalviðmóti
-- Hægt er að breyta listumk
+- Hægt er að breyta listum
 - Öryggi: fjarlægður stuðningur við TLS 1.0 og TLS 1.1, bætt við stuðningi við TLS 1.3 á Android 6+
 - Semja-sýnin stingur núna upp á sérsniðnum tjáningartáknum þegar byrjað er að skrifa
 - Ný stilling á þema "nota þema kerfis"
diff --git a/fastlane/metadata/android/is/changelogs/68.txt b/fastlane/metadata/android/is/changelogs/68.txt
index abadc94a..c182a7f8 100644
--- a/fastlane/metadata/android/is/changelogs/68.txt
+++ b/fastlane/metadata/android/is/changelogs/68.txt
@@ -1,3 +1,3 @@
-Tusky útg9.1
+Tusky útg. 9.1
 
 Þessi útgáfa tryggir samhæfni við Mastodon 3 og bætir afköst og stöðugleika.
diff --git a/fastlane/metadata/android/is/changelogs/70.txt b/fastlane/metadata/android/is/changelogs/70.txt
index 1525eefd..bc025f88 100644
--- a/fastlane/metadata/android/is/changelogs/70.txt
+++ b/fastlane/metadata/android/is/changelogs/70.txt
@@ -1,6 +1,6 @@
 Tusky v10.0
 
-- Þú getur núna bákamerkt stöðufærslur og gert lista með bókamerkjunum þínum í Tusky.
+- Þú getur núna bókamerkt stöðufærslur og gert lista með bókamerkjunum þínum í Tusky.
 - Þú getur núna sett tíst á áætlun í Tusky. Athugaðu að tíminn sem þú velur þarf að vera í það minnsta efti 5 mínútur.
 - Þú getur núna bætt listum á aðalskjáinn.
 - Þú getur núna sent in hljóðskrár sem viðhengi í Tusky.
diff --git a/fastlane/metadata/android/is/changelogs/77.txt b/fastlane/metadata/android/is/changelogs/77.txt
new file mode 100644
index 00000000..4ff49ab7
--- /dev/null
+++ b/fastlane/metadata/android/is/changelogs/77.txt
@@ -0,0 +1,10 @@
+Tusky útg. 13.0
+
+- stuðningur við minnispunkta í sniðum (Mastodon 3.2.0 eiginleiki)
+- stuðningur við tilkynningar frá stjórnendum (Mastodon 3.1.0 eiginleiki)
+
+- auðkennismynd úr völdum aðgangi birist núna í aðalverkfærastikunni
+- smellt á birtingarnafn á tímalínu opnar núna notandasniðssíðu þess notanda
+
+- hellingur að villulagfæringum og minni betrumbótum
+- bættar þýðingar

From 14f981837f739a9fe630c7c94701eb81015a2d6a Mon Sep 17 00:00:00 2001
From: test8421 <test8421@protonmail.com>
Date: Fri, 11 Dec 2020 08:56:10 +0000
Subject: [PATCH 08/20] Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (11 of 11 strings)

Translation: Tusky/Tusky description
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky-app/zh_Hans/
---
 fastlane/metadata/android/zh_Hans/changelogs/77.txt  | 10 ++++++++++
 .../metadata/android/zh_Hans/full_description.txt    | 12 ++++++------
 2 files changed, 16 insertions(+), 6 deletions(-)
 create mode 100644 fastlane/metadata/android/zh_Hans/changelogs/77.txt

diff --git a/fastlane/metadata/android/zh_Hans/changelogs/77.txt b/fastlane/metadata/android/zh_Hans/changelogs/77.txt
new file mode 100644
index 00000000..072a9dc1
--- /dev/null
+++ b/fastlane/metadata/android/zh_Hans/changelogs/77.txt
@@ -0,0 +1,10 @@
+Tusky v13.0
+
+- 支持账号备注(Mastodon 3.2.0 特性)
+- 支持公告栏(Mastodon 3.1.0特性)
+
+- 当前账号的头像将在导航栏显示
+- 在时间线中点击账号名称后打开该用户的资料页
+
+- 其他许多小改进和错误修复
+- 改善翻译
diff --git a/fastlane/metadata/android/zh_Hans/full_description.txt b/fastlane/metadata/android/zh_Hans/full_description.txt
index f55df66b..2fec503c 100644
--- a/fastlane/metadata/android/zh_Hans/full_description.txt
+++ b/fastlane/metadata/android/zh_Hans/full_description.txt
@@ -1,12 +1,12 @@
 Tusky是Mastodon(一个免费的开源社交网络服务器)的轻量级客户端。
 
-•材料设计
-•实施了大多数Mastodon API
+•MD设计
+•支持大多数Mastodon API
 •多帐户支持
-•深色和浅色主题,可以根据一天中的时间自动切换
-•草稿-编写嘟文并将其保存以备后用
-•选择不同的表情符号样式
+•深色和浅色主题,可以根据时间自动切换
+•草稿 - 编写嘟文并将其保存以备后用
+•选择不同的表情样式
 •针对所有屏幕尺寸进行了优化
-•完全开源-没有像Google服务这样的非自由依赖项
+•完全开源 - 没有像Google服务这样的非自由依赖项
 
 要了解有关Mastodon的更多信息,请访问 https://joinmastodon.org/

From e44802c34549e7620ad5d422040667884c4bdcf9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sveinn=20=C3=AD=20Felli?= <sv1@fellsnet.is>
Date: Fri, 11 Dec 2020 08:56:09 +0000
Subject: [PATCH 09/20] Translated using Weblate (Icelandic)

Currently translated at 100.0% (434 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/is/
---
 app/src/main/res/values-is/strings.xml | 33 ++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)

diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml
index 9ce6c6cc..4e27ac52 100644
--- a/app/src/main/res/values-is/strings.xml
+++ b/app/src/main/res/values-is/strings.xml
@@ -415,8 +415,8 @@
     <string name="notification_follow_request_name">Fylgjendabeiðnir</string>
     <string name="hashtags">Myllumerki</string>
     <plurals name="favs">
-        <item quantity="one"><b>%1$s</b> Eftirlæti</item>
-        <item quantity="other"><b>%1$s</b> Eftirlæti</item>
+        <item quantity="one"><b>%1$s</b> eftirlæti</item>
+        <item quantity="other"><b>%1$s</b> eftirlæti</item>
     </plurals>
     <plurals name="reblogs">
         <item quantity="one"><b>%s</b> Endurbirting</item>
@@ -438,4 +438,33 @@
         <item quantity="one">%d dagur eftir</item>
         <item quantity="other">%d dagar eftir</item>
     </plurals>
+    <string name="account_note_saved">Vistað!</string>
+    <string name="account_note_hint">Þí eigin einkaathugasemd um þennan aðgang</string>
+    <string name="pref_title_hide_top_toolbar">Fela titil á verkfærastikunni efst</string>
+    <string name="pref_title_confirm_reblogs">Birta staðfestingarglugga áður en endurbirting fer fram</string>
+    <string name="pref_title_show_cards_in_timelines">Birta forskoðun tengla á tímalínum</string>
+    <string name="no_announcements">Það eru engar tilkynningar.</string>
+    <string name="pref_title_enable_swipe_for_tabs">Virkja strokuhreyfingu til að skipta milli flipa</string>
+    <plurals name="poll_info_people">
+        <item quantity="one">%s aðili</item>
+        <item quantity="other">%s aðilar</item>
+    </plurals>
+    <string name="add_hashtag_title">Bæta við myllumerki</string>
+    <string name="notification_follow_request_description">Tilkynningar um fylgjendabeiðnir</string>
+    <string name="pref_main_nav_position_option_bottom">Neðst</string>
+    <string name="pref_main_nav_position_option_top">Efst</string>
+    <string name="pref_main_nav_position">Aðalstaða leiðsagnar</string>
+    <string name="pref_title_gradient_for_media">Birta litstigla í stað falins myndefnis</string>
+    <string name="pref_title_notification_filter_follow_requests">beiðni um að fylgja</string>
+    <string name="dialog_mute_hide_notifications">Fela tilkynningar</string>
+    <string name="dialog_mute_warning">Þagga niður í @%s\?</string>
+    <string name="dialog_block_warning">Loka á @%s\?</string>
+    <string name="action_unmute_conversation">Hætta að þagga niður í samtölum</string>
+    <string name="action_mute_conversation">Þagga niður í samtölum</string>
+    <string name="action_unmute_domain">Afþagga %s</string>
+    <string name="action_mute_notifications_desc">Þagga tilkynningar frá %s</string>
+    <string name="action_unmute_notifications_desc">Afþagga tilkynningar frá %s</string>
+    <string name="action_unmute_desc">Afþagga %s</string>
+    <string name="notification_follow_request_format">%s bað um að fylgjast með þér</string>
+    <string name="title_announcements">Tilkynningar</string>
 </resources>
\ No newline at end of file

From 2ded8dd6309c0a033f96ef64d4edaae594b61b75 Mon Sep 17 00:00:00 2001
From: Danial Behzadi <dani.behzi@ubuntu.com>
Date: Fri, 11 Dec 2020 08:56:09 +0000
Subject: [PATCH 10/20] Translated using Weblate (Persian)

Currently translated at 100.0% (434 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/fa/
---
 app/src/main/res/values-fa/strings.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index 4d54af2e..a4284406 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -150,8 +150,8 @@
     <string name="pref_title_appearance_settings">ظاهر</string>
     <string name="pref_title_app_theme">زمینهٔ کاره</string>
     <string name="pref_title_timelines">خط‌ زمانی‌ها</string>
-    <string name="app_them_dark">روشن</string>
-    <string name="app_theme_light">سیاه</string>
+    <string name="app_them_dark">تاریک</string>
+    <string name="app_theme_light">روشن</string>
     <string name="app_theme_black">سیاه</string>
     <string name="app_theme_auto">خودکار در غروب</string>
     <string name="pref_title_browser_settings">مرورگر</string>

From b51787f6256376cafd64e50610b5307ceca509b6 Mon Sep 17 00:00:00 2001
From: test8421 <test8421@protonmail.com>
Date: Fri, 11 Dec 2020 08:56:09 +0000
Subject: [PATCH 11/20] Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (434 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/zh_Hans/
---
 app/src/main/res/values-zh-rCN/strings.xml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 8ce9eb19..355db7d7 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -481,4 +481,8 @@
         <item quantity="one">%s 人</item>
         <item quantity="other"/>
     </plurals>
+    <string name="no_announcements">本站暂无公告。</string>
+    <string name="title_announcements">公告</string>
+    <string name="account_note_saved">已保存</string>
+    <string name="account_note_hint">此账号的备注</string>
 </resources>
\ No newline at end of file

From 708b88404c0384d60b9b366982e6829a1934284b Mon Sep 17 00:00:00 2001
From: Konrad Pozniak <k.pozniak@gmx.at>
Date: Fri, 11 Dec 2020 22:17:39 +0100
Subject: [PATCH 12/20] cleanup bad strings - some of these crash the app

---
 app/src/main/res/values-bn-rBD/strings.xml | 2 +-
 app/src/main/res/values-cs/strings.xml     | 6 +-----
 app/src/main/res/values-eu/strings.xml     | 5 +----
 app/src/main/res/values-zh-rCN/strings.xml | 4 ----
 4 files changed, 3 insertions(+), 14 deletions(-)

diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml
index e14d254e..2fb78dd8 100644
--- a/app/src/main/res/values-bn-rBD/strings.xml
+++ b/app/src/main/res/values-bn-rBD/strings.xml
@@ -381,7 +381,7 @@
     <string name="poll_vote">ভোট</string>
     <string name="poll_info_closed">বন্ধ</string>
     <string name="poll_info_time_absolute">\'%s এ শেষ হবে\'</string>
-    <string name="poll_info_format">" &lt;!-- ১৫ ভোট • ১ ঘন্টা বাকি --&gt; %1$s • %2$s"<!-- 15 votes • 1 hour left -->
+    <string name="poll_info_format"><!-- 15 votes • 1 hour left -->
         %1$s • %2$s</string>
     <string name="compose_preview_image_description">ছবি %s এর জন্য ক্রিয়া</string>
     <string name="notification_clear_text">আপনি কি আপনার সমস্ত বিজ্ঞপ্তি স্থায়ীভাবে মুছে ফেলতে চান\?</string>
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index d7a5463e..42c5ce26 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -475,11 +475,7 @@
     <string name="action_unmute_notifications_desc">Odkrýt oznámení od %s</string>
     <string name="action_unmute_desc">Odkrýt %s</string>
     <string name="dialog_mute_warning">Ztišit @%s\?</string>
-    <plurals name="poll_info_people">
-        <item quantity="one"/>
-        <item quantity="few"/>
-        <item quantity="other"/>
-    </plurals>
+
     <string name="notification_follow_request_format">%s požádal/a aby vás mohl/a sledovat</string>
     <string name="pref_title_confirm_reblogs">Zobrazit dialogové okno s potvrzením při boostování</string>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index 511b0957..6dabede9 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -450,10 +450,7 @@
     <string name="hashtags">Traolak</string>
     <string name="dialog_mute_hide_notifications">Ez erakutsi jakinarazpenak</string>
     <string name="action_unmute_desc">Desmututu %s</string>
-    <plurals name="poll_info_people">
-        <item quantity="one">Pertsona %1</item>
-        <item quantity="other">%2 pertsona</item>
-    </plurals>
+
     <string name="pref_title_hide_top_toolbar">Ezkutatu goiko tresna-barraren izenburua</string>
     <string name="pref_title_confirm_reblogs">Erakutsi berrespen-abisua tuta bultzatu aurretik</string>
     <string name="pref_title_show_cards_in_timelines">Erakutsi esteken aurrebista denbora-lerroetan</string>
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 355db7d7..ccd20b0b 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -477,10 +477,6 @@
     <string name="notification_follow_request_format">%s 请求关注你</string>
     <string name="pref_main_nav_position">导航栏位置</string>
     <string name="pref_title_hide_top_toolbar">隐藏顶部工具栏标题</string>
-    <plurals name="poll_info_people">
-        <item quantity="one">%s 人</item>
-        <item quantity="other"/>
-    </plurals>
     <string name="no_announcements">本站暂无公告。</string>
     <string name="title_announcements">公告</string>
     <string name="account_note_saved">已保存</string>

From 5db3bb377934f8e8569c0d0377825df01ff49bac Mon Sep 17 00:00:00 2001
From: Konrad Pozniak <connyduck@users.noreply.github.com>
Date: Sun, 13 Dec 2020 16:31:12 +0100
Subject: [PATCH 13/20] Workaround for old Androids not connecting to new Let's
 Encrypt hosts (#2014)

* Rename .java to .kt

* convert OkHttpUtils to Kotlin

* trust new letsencrypt root cert

* cleanup OkHttpUtils

* add link to lets encrypt cert to OkHttpUtils
---
 app/build.gradle                              |   1 +
 .../keylesspalace/tusky/di/NetworkModule.kt   |   7 +-
 .../keylesspalace/tusky/util/OkHttpUtils.java |  87 -------------
 .../keylesspalace/tusky/util/OkHttpUtils.kt   | 115 ++++++++++++++++++
 4 files changed, 120 insertions(+), 90 deletions(-)
 delete mode 100644 app/src/main/java/com/keylesspalace/tusky/util/OkHttpUtils.java
 create mode 100644 app/src/main/java/com/keylesspalace/tusky/util/OkHttpUtils.kt

diff --git a/app/build.gradle b/app/build.gradle
index 21883df4..018217a7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -139,6 +139,7 @@ dependencies {
 
     implementation "com.squareup.okhttp3:okhttp:$okhttpVersion"
     implementation "com.squareup.okhttp3:logging-interceptor:$okhttpVersion"
+    implementation "com.squareup.okhttp3:okhttp-tls:$okhttpVersion"
 
     implementation "org.conscrypt:conscrypt-android:2.4.0"
 
diff --git a/app/src/main/java/com/keylesspalace/tusky/di/NetworkModule.kt b/app/src/main/java/com/keylesspalace/tusky/di/NetworkModule.kt
index b349d50d..ca60bac8 100644
--- a/app/src/main/java/com/keylesspalace/tusky/di/NetworkModule.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/di/NetworkModule.kt
@@ -24,7 +24,7 @@ import com.keylesspalace.tusky.db.AccountManager
 import com.keylesspalace.tusky.json.SpannedTypeAdapter
 import com.keylesspalace.tusky.network.InstanceSwitchAuthInterceptor
 import com.keylesspalace.tusky.network.MastodonApi
-import com.keylesspalace.tusky.util.OkHttpUtils
+import com.keylesspalace.tusky.util.okhttpClient
 import dagger.Module
 import dagger.Provides
 import okhttp3.OkHttpClient
@@ -32,6 +32,7 @@ import okhttp3.logging.HttpLoggingInterceptor
 import retrofit2.Retrofit
 import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
 import retrofit2.converter.gson.GsonConverterFactory
+import retrofit2.create
 import javax.inject.Singleton
 
 /**
@@ -55,7 +56,7 @@ class NetworkModule {
             accountManager: AccountManager,
             context: Context
     ): OkHttpClient {
-        return OkHttpUtils.getCompatibleClientBuilder(context)
+        return okhttpClient(context)
                 .apply {
                     addInterceptor(InstanceSwitchAuthInterceptor(accountManager))
                     if (BuildConfig.DEBUG) {
@@ -81,5 +82,5 @@ class NetworkModule {
 
     @Provides
     @Singleton
-    fun providesApi(retrofit: Retrofit): MastodonApi = retrofit.create(MastodonApi::class.java)
+    fun providesApi(retrofit: Retrofit): MastodonApi = retrofit.create()
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/keylesspalace/tusky/util/OkHttpUtils.java b/app/src/main/java/com/keylesspalace/tusky/util/OkHttpUtils.java
deleted file mode 100644
index 22e13e5e..00000000
--- a/app/src/main/java/com/keylesspalace/tusky/util/OkHttpUtils.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Copyright 2017 Andrew Dawson
- *
- * This file is part of Tusky.
- *
- * Tusky is free software: you can redistribute it and/or modify it under the terms of the GNU
- * Lesser General Public License as published by the Free Software Foundation, either version 3 of
- * the License, or (at your option) any later version.
- *
- * Tusky 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 Lesser
- * General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License along with Tusky. If
- * not, see <http://www.gnu.org/licenses/>. */
-
-package com.keylesspalace.tusky.util;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.os.Build;
-
-import androidx.annotation.NonNull;
-import androidx.preference.PreferenceManager;
-
-import com.keylesspalace.tusky.BuildConfig;
-
-import java.net.InetSocketAddress;
-import java.net.Proxy;
-import java.util.concurrent.TimeUnit;
-
-import okhttp3.Cache;
-import okhttp3.Interceptor;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-
-public class OkHttpUtils {
-
-    @NonNull
-    public static OkHttpClient.Builder getCompatibleClientBuilder(@NonNull Context context) {
-
-        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
-
-        boolean httpProxyEnabled = preferences.getBoolean("httpProxyEnabled", false);
-        String httpServer = preferences.getString("httpProxyServer", "");
-        int httpPort;
-        try {
-            httpPort = Integer.parseInt(preferences.getString("httpProxyPort", "-1"));
-        } catch (NumberFormatException e) {
-            // user has entered wrong port, fall back to no proxy
-            httpPort = -1;
-        }
-
-        int cacheSize = 25*1024*1024; // 25 MiB
-
-        OkHttpClient.Builder builder = new OkHttpClient.Builder()
-                .addInterceptor(getUserAgentInterceptor())
-                .readTimeout(30, TimeUnit.SECONDS)
-                .writeTimeout(30, TimeUnit.SECONDS)
-                .cache(new Cache(context.getCacheDir(), cacheSize));
-
-        if (httpProxyEnabled && !httpServer.isEmpty() && (httpPort > 0) && (httpPort < 65535)) {
-            InetSocketAddress address = InetSocketAddress.createUnresolved(httpServer, httpPort);
-            builder.proxy(new Proxy(Proxy.Type.HTTP, address));
-        }
-
-        return builder;
-    }
-
-    /**
-     * Add a custom User-Agent that contains Tusky & Android Version to all requests
-     * Example:
-     * User-Agent: Tusky/1.1.2 Android/5.0.2
-     */
-    @NonNull
-    private static Interceptor getUserAgentInterceptor() {
-        return chain -> {
-            Request originalRequest = chain.request();
-            Request requestWithUserAgent = originalRequest.newBuilder()
-                    .header("User-Agent", "Tusky/"+ BuildConfig.VERSION_NAME+" Android/"+Build.VERSION.RELEASE)
-                    .build();
-            return chain.proceed(requestWithUserAgent);
-        };
-    }
-
-}
-
-
diff --git a/app/src/main/java/com/keylesspalace/tusky/util/OkHttpUtils.kt b/app/src/main/java/com/keylesspalace/tusky/util/OkHttpUtils.kt
new file mode 100644
index 00000000..3e1b89c6
--- /dev/null
+++ b/app/src/main/java/com/keylesspalace/tusky/util/OkHttpUtils.kt
@@ -0,0 +1,115 @@
+/* Copyright 2020 Tusky Contributors
+ *
+ * This file is part of Tusky.
+ *
+ * Tusky is free software: you can redistribute it and/or modify it under the terms of the GNU
+ * Lesser General Public License as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * Tusky 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 Lesser
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along with Tusky. If
+ * not, see <http://www.gnu.org/licenses/>. */
+
+package com.keylesspalace.tusky.util
+
+import android.content.Context
+import android.os.Build
+import androidx.preference.PreferenceManager
+import com.keylesspalace.tusky.BuildConfig
+import okhttp3.Cache
+import okhttp3.OkHttp
+import okhttp3.OkHttpClient
+import okhttp3.tls.HandshakeCertificates
+import java.io.ByteArrayInputStream
+import java.net.InetSocketAddress
+import java.net.Proxy
+import java.security.cert.CertificateFactory
+import java.security.cert.X509Certificate
+import java.util.concurrent.TimeUnit
+
+fun okhttpClient(context: Context): OkHttpClient.Builder {
+    val preferences = PreferenceManager.getDefaultSharedPreferences(context)
+
+    val httpProxyEnabled = preferences.getBoolean("httpProxyEnabled", false)
+    val httpServer = preferences.getNonNullString("httpProxyServer", "")
+    val httpPort = preferences.getNonNullString("httpProxyPort", "-1").toIntOrNull() ?: -1
+
+    val cacheSize = 25 * 1024 * 1024 // 25 MiB
+    val builder = OkHttpClient.Builder()
+        .addInterceptor { chain ->
+            /**
+             * Add a custom User-Agent that contains Tusky, Android and Okhttp Version to all requests
+             * Example:
+             * User-Agent: Tusky/1.1.2 Android/5.0.2
+             * */
+            val requestWithUserAgent = chain.request().newBuilder()
+                .header(
+                    "User-Agent",
+                    "Tusky/${BuildConfig.VERSION_NAME} Android/${Build.VERSION.RELEASE} OkHttp/${OkHttp.VERSION}"
+                )
+                .build()
+            chain.proceed(requestWithUserAgent)
+        }
+        .readTimeout(30, TimeUnit.SECONDS)
+        .writeTimeout(30, TimeUnit.SECONDS)
+        .cache(Cache(context.cacheDir, cacheSize.toLong()))
+
+    if (httpProxyEnabled && httpServer.isNotEmpty() && httpPort > 0 && httpPort < 65535) {
+        val address = InetSocketAddress.createUnresolved(httpServer, httpPort)
+        builder.proxy(Proxy(Proxy.Type.HTTP, address))
+    }
+
+    // trust the new Let's Encrypt root certificate that is not available on Android < 7.1.1
+    // new cert https://letsencrypt.org/certs/isrgrootx1.pem
+    // see https://letsencrypt.org/2020/11/06/own-two-feet.html
+    // see https://stackoverflow.com/questions/64844311/certpathvalidatorexception-connecting-to-a-lets-encrypt-host-on-android-m-or-ea
+    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+        val isgCert = """
+        -----BEGIN CERTIFICATE-----
+        MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
+        TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
+        cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
+        WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
+        ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
+        MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
+        h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
+        0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
+        A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
+        T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
+        B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
+        B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
+        KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
+        OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
+        jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
+        qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
+        rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+        HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
+        hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
+        ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
+        3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
+        NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
+        ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
+        TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
+        jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
+        oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
+        4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
+        mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
+        emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
+        -----END CERTIFICATE-----
+         """.trimIndent()
+        val cf = CertificateFactory.getInstance("X.509")
+        val isgCertificate = cf.generateCertificate(ByteArrayInputStream(isgCert.toByteArray(charset("UTF-8"))))
+        val certificates = HandshakeCertificates.Builder()
+            .addTrustedCertificate(isgCertificate as X509Certificate)
+            .addPlatformTrustedCertificates()
+            .build()
+        builder.sslSocketFactory(
+            certificates.sslSocketFactory(),
+            certificates.trustManager
+        )
+    }
+    return builder
+}

From 0708b6a7bb0d5c07975f74c01904caf9a947e431 Mon Sep 17 00:00:00 2001
From: Konrad Pozniak <connyduck@users.noreply.github.com>
Date: Sun, 13 Dec 2020 16:31:32 +0100
Subject: [PATCH 14/20] update dependencies (#2017)

---
 app/build.gradle | 14 +++++++-------
 build.gradle     |  2 +-
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 018217a7..1416975a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -101,8 +101,8 @@ ext.roomVersion = '2.2.5'
 ext.retrofitVersion = '2.9.0'
 ext.okhttpVersion = '4.9.0'
 ext.glideVersion = '4.11.0'
-ext.daggerVersion = '2.29.1'
-ext.materialdrawerVersion = '8.1.8'
+ext.daggerVersion = '2.30.1'
+ext.materialdrawerVersion = '8.2.0'
 
 // if libraries are changed here, they should also be changed in LicenseActivity
 dependencies {
@@ -111,10 +111,10 @@ dependencies {
     implementation "androidx.core:core-ktx:1.3.2"
     implementation "androidx.appcompat:appcompat:1.2.0"
     implementation "androidx.fragment:fragment-ktx:1.2.5"
-    implementation "androidx.browser:browser:1.2.0"
+    implementation "androidx.browser:browser:1.3.0"
     implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
     implementation "androidx.recyclerview:recyclerview:1.1.0"
-    implementation "androidx.exifinterface:exifinterface:1.3.1"
+    implementation "androidx.exifinterface:exifinterface:1.3.2"
     implementation "androidx.cardview:cardview:1.0.0"
     implementation "androidx.preference:preference-ktx:1.1.1"
     implementation "androidx.sharetarget:sharetarget:1.0.0"
@@ -141,7 +141,7 @@ dependencies {
     implementation "com.squareup.okhttp3:logging-interceptor:$okhttpVersion"
     implementation "com.squareup.okhttp3:okhttp-tls:$okhttpVersion"
 
-    implementation "org.conscrypt:conscrypt-android:2.4.0"
+    implementation "org.conscrypt:conscrypt-android:2.5.1"
 
     implementation "com.github.bumptech.glide:glide:$glideVersion"
     implementation "com.github.bumptech.glide:okhttp3-integration:$glideVersion"
@@ -159,7 +159,7 @@ dependencies {
     implementation "com.google.dagger:dagger-android-support:$daggerVersion"
     kapt "com.google.dagger:dagger-android-processor:$daggerVersion"
 
-    implementation "com.github.connyduck:sparkbutton:4.0.0"
+    implementation "com.github.connyduck:sparkbutton:4.1.0"
 
     implementation "com.github.chrisbanes:PhotoView:2.3.0"
 
@@ -173,7 +173,7 @@ dependencies {
 
     testImplementation "androidx.test.ext:junit:1.1.2"
     testImplementation "org.robolectric:robolectric:4.4"
-    testImplementation "org.mockito:mockito-inline:3.6.0"
+    testImplementation "org.mockito:mockito-inline:3.6.28"
     testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"
 
     androidTestImplementation "androidx.test.espresso:espresso-core:3.3.0"
diff --git a/build.gradle b/build.gradle
index 46e5b24b..75d0217a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,5 +1,5 @@
 buildscript {
-    ext.kotlin_version = '1.4.20'
+    ext.kotlin_version = '1.4.21'
     repositories {
         google()
         jcenter()

From 78884089418453b118399b39d0aac5a2d51cfaad Mon Sep 17 00:00:00 2001
From: Konrad Pozniak <connyduck@users.noreply.github.com>
Date: Sun, 13 Dec 2020 16:31:42 +0100
Subject: [PATCH 15/20] set contentDescription for menu toggle (#2020)

---
 app/src/main/res/layout/activity_main.xml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 2890dd5c..76e7a535 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -23,7 +23,8 @@
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 app:contentInsetStartWithNavigation="0dp"
-                app:layout_scrollFlags="scroll|enterAlways" />
+                app:layout_scrollFlags="scroll|enterAlways"
+                app:navigationContentDescription="@string/action_open_drawer" />
 
             <com.google.android.material.tabs.TabLayout
                 android:id="@+id/tabLayout"

From a19411c94708088532f0e5de23683aa6e38bebed Mon Sep 17 00:00:00 2001
From: Konrad Pozniak <connyduck@users.noreply.github.com>
Date: Sun, 13 Dec 2020 16:32:04 +0100
Subject: [PATCH 16/20] cleanup accountManager.activeAccount usages in
 MainActivity (#2021)

---
 .../main/java/com/keylesspalace/tusky/MainActivity.kt  | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt b/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt
index 58cd3a02..31a4e80c 100644
--- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt
@@ -139,11 +139,8 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidInje
                 }
             }
             val accountRequested = accountId != -1L
-            if (accountRequested) {
-                val account = accountManager.activeAccount
-                if (account == null || accountId != account.id) {
-                    accountManager.setActiveAccount(accountId)
-                }
+            if (accountRequested && accountId != activeAccount.id) {
+                accountManager.setActiveAccount(accountId)
             }
             if (canHandleMimeType(intent.type)) {
                 // Sharing to Tusky from an external app
@@ -155,8 +152,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidInje
                     showAccountChooserDialog(getString(R.string.action_share_as), true, object : AccountSelectionListener {
                         override fun onAccountSelected(account: AccountEntity) {
                             val requestedId = account.id
-                            val activeAccount = accountManager.activeAccount
-                            if (activeAccount != null && requestedId == activeAccount.id) {
+                            if (requestedId == activeAccount.id) {
                                 // The correct account is already active
                                 forwardShare(intent)
                             } else {

From e0fab33f483fc57027462dcedf8e6a7928b1521b Mon Sep 17 00:00:00 2001
From: Konrad Pozniak <connyduck@users.noreply.github.com>
Date: Sun, 13 Dec 2020 16:32:22 +0100
Subject: [PATCH 17/20] fix emoji preference thumbnails (#2022)

---
 app/src/main/res/layout/item_emoji_pref.xml | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/app/src/main/res/layout/item_emoji_pref.xml b/app/src/main/res/layout/item_emoji_pref.xml
index 539677f1..d8755a3d 100644
--- a/app/src/main/res/layout/item_emoji_pref.xml
+++ b/app/src/main/res/layout/item_emoji_pref.xml
@@ -6,8 +6,8 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:background="?attr/selectableItemBackground"
-    android:paddingBottom="8dp"
-    android:paddingTop="8dp">
+    android:paddingTop="8dp"
+    android:paddingBottom="8dp">
 
     <!--This is a thumbnail picture-->
     <ImageView
@@ -15,23 +15,25 @@
         android:layout_width="42dp"
         android:layout_height="42dp"
         android:layout_marginStart="16dp"
+        android:importantForAccessibility="no"
         android:padding="4dp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent"
-        app:srcCompat="@drawable/ic_emoji_24dp" />
+        app:srcCompat="@drawable/ic_emoji_24dp"
+        app:tint="#0000" /> <!-- unset the preference theme tint -->
 
     <!--This is the font's name-->
     <TextView
         android:id="@+id/emojicompat_name"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
-        android:layout_marginEnd="72dp"
         android:layout_marginStart="12dp"
+        android:layout_marginEnd="72dp"
         android:textColor="?android:textColorPrimary"
-        app:layout_constraintEnd_toEndOf="parent"
         android:textSize="?attr/status_text_medium"
         app:layout_constraintBottom_toTopOf="@+id/emojicompat_caption"
+        app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toEndOf="@+id/emojicompat_thumb"
         app:layout_constraintTop_toTopOf="parent"
         tools:text="@string/system_default" />
@@ -58,8 +60,8 @@
         style="?android:attr/progressBarStyleHorizontal"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
-        android:layout_marginEnd="72dp"
         android:layout_marginTop="8dp"
+        android:layout_marginEnd="72dp"
         android:indeterminate="false"
         android:visibility="gone"
         app:layout_constraintEnd_toEndOf="parent"

From 597862c82998111aea2c737a5235ebbed13b4151 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bal=C3=A1zs=20Mesk=C3=B3?= <mesko.balazs@fsf.hu>
Date: Fri, 18 Dec 2020 22:06:51 +0000
Subject: [PATCH 18/20] Translated using Weblate (Hungarian)

Currently translated at 100.0% (434 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/hu/
---
 app/src/main/res/values-hu/strings.xml | 34 +++++++++++++-------------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 56081443..53f74c13 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -3,26 +3,26 @@
     <string name="error_generic">Hiba történt.</string>
     <string name="error_network">Hálózati hiba történt! Kérjük, ellenőrizd a kapcsolatot, és próbálja meg újra!</string>
     <string name="error_empty">Ez nem lehet üres.</string>
-    <string name="error_invalid_domain">Helytelen domén</string>
-    <string name="error_failed_app_registration">Sikertelen bejelentkezés ezen a szerveren.</string>
+    <string name="error_invalid_domain">Helytelen domain</string>
+    <string name="error_failed_app_registration">Sikertelen hitelesítés ezen a példányon.</string>
     <string name="error_no_web_browser_found">Nem található használható böngésző.</string>
     <string name="error_authorization_unknown">Azonosítatlan engedélyezési hiba történt.</string>
     <string name="error_authorization_denied">Engedély megtagadva.</string>
     <string name="error_retrieving_oauth_token">Bejelentkezési token megszerzése sikertelen.</string>
     <string name="error_compose_character_limit">Túl hosszú a tülkölés!</string>
-    <string name="error_image_upload_size">A fájlnak kisebbnek kell lennie, mint 8MB.</string>
-    <string name="error_video_upload_size">A video fájlnak kisebbnek kell lennie, mint 40MB.</string>
+    <string name="error_image_upload_size">A fájlnak kisebbnek kell lennie, mint 8 MB.</string>
+    <string name="error_video_upload_size">A videofájloknak kisebbnek kell lenniük, mint 40 MB.</string>
     <string name="error_media_upload_type">Ilyen típusú fájlt nem lehet feltölteni.</string>
     <string name="error_media_upload_opening">Fájl megnyitása sikertelen.</string>
     <string name="error_media_upload_permission">Média olvasási engedély szükséges.</string>
     <string name="error_media_download_permission">Média tárolási engedély szükséges.</string>
     <string name="error_media_upload_image_or_video">Képek és videók egyszerre nem csatolhatók ugyanazon tülköléshez.</string>
     <string name="error_media_upload_sending">Feltöltés sikertelen.</string>
-    <string name="error_sender_account_gone">Nem sikerült elküldeni a tülköt..</string>
+    <string name="error_sender_account_gone">Nem sikerült elküldeni a tülköt.</string>
     <string name="title_home">Kezdőlap</string>
     <string name="title_notifications">Értesítések</string>
     <string name="title_public_local">Helyi</string>
-    <string name="title_public_federated">Föderáció</string>
+    <string name="title_public_federated">Föderációs</string>
     <string name="title_direct_messages">Közvetlen üzenetek</string>
     <string name="title_tab_preferences">Fülek</string>
     <string name="title_view_thread">Tülk</string>
@@ -65,8 +65,8 @@
     <string name="action_logout_confirm">Biztosan ki szeretnél jelentkezni a következőből: %1$s?</string>
     <string name="action_follow">Követés</string>
     <string name="action_unfollow">Követés vége</string>
-    <string name="action_block">Letiltás</string>
-    <string name="action_unblock">Letiltás feloldása</string>
+    <string name="action_block">Blokkolás</string>
+    <string name="action_unblock">Blokkolás feloldása</string>
     <string name="action_hide_reblogs">Megtolások elrejtése</string>
     <string name="action_show_reblogs">Megtolások mutatása</string>
     <string name="action_report">Bejelentés</string>
@@ -80,7 +80,7 @@
     <string name="action_view_account_preferences">Fiókbeállítások</string>
     <string name="action_view_favourites">Kedvencek</string>
     <string name="action_view_mutes">Némított felhasználók</string>
-    <string name="action_view_blocks">Letiltott felhasználók</string>
+    <string name="action_view_blocks">Blokkolt felhasználók</string>
     <string name="action_view_follow_requests">Követési kérelmek</string>
     <string name="action_view_media">Média</string>
     <string name="action_open_in_web">Megnyitás böngészőben</string>
@@ -118,11 +118,11 @@
     <string name="send_status_link_to">Tülk URL megosztása…</string>
     <string name="send_status_content_to">Tülk megosztása…</string>
     <string name="confirmation_reported">Elküldve!</string>
-    <string name="confirmation_unblocked">Felhasználó letiltása feloldva</string>
+    <string name="confirmation_unblocked">Felhasználó blokkolása feloldva</string>
     <string name="confirmation_unmuted">Felhasználó némítása feloldva</string>
     <string name="status_sent">Elküldve!</string>
     <string name="status_sent_long">Válasz sikeresen elküldve.</string>
-    <string name="hint_domain">Melyik szerver\?</string>
+    <string name="hint_domain">Melyik példány\?</string>
     <string name="hint_compose">Mi jár a fejedben\?</string>
     <string name="hint_content_warning">Tartalom figyelmeztetés</string>
     <string name="hint_display_name">Megjelenítési név</string>
@@ -134,11 +134,11 @@
     <string name="label_header">Fejléc</string>
     <string name="link_whats_an_instance">Mi az a szerver\?</string>
     <string name="login_connection">Csatlakozás…</string>
-    <string name="dialog_whats_an_instance">Bármely szerver címét beírhatod ide, mint mastodon.social, icosahedron.website, social.tchncs.de, és <a href="https://instances.social">mások!</a> 
+    <string name="dialog_whats_an_instance">Bármely példány címét vagy domain nevét beírhatod ide, mint a mastodon.social, az icosahedron.website, a social.tchncs.de és <a href="https://instances.social">mások!</a> 
 \n 
-\nHa még nincs fiókod, beírhatod a címét ide annak a szervernek amelyhez csatlakoznál, majd azon létrehozhatsz egy fiókot. 
+\nHa még nincs fiókod, beírhatod annak a példánynak a címét, amelyhez csatlakoznál, majd azon létrehozhatsz egy fiókot. 
 \n 
-\nA szerver az a hely ahol a fiókadataidat tárolják, de ettől még ugyanúgy kommunikálhatsz más szervereken lévő emberekkel, mintha ugyanazon az oldalon lennétek. 
+\nA példány az a hely, ahol a fiókadataidat tárolják, de ettől még ugyanúgy kommunikálhatsz más példányokon lévő emberekkel, mintha ugyanazon az oldalon lennétek. 
 \n 
 \nTöbb információt találhatsz itt: <a href="https://joinmastodon.org">joinmastodon.org</a>. </string>
     <string name="dialog_title_finishing_media_upload">Média feltöltés befejezése</string>
@@ -236,7 +236,7 @@
     <string name="action_lists">Listák</string>
     <string name="title_lists">Listák</string>
     <string name="action_remove">Törlés</string>
-    <string name="lock_account_label">Fiók lezárása</string>
+    <string name="lock_account_label">Fiók zárolása</string>
     <string name="compose_save_draft">Elmented a vázlatot?</string>
     <string name="send_toot_notification_title">Tülk elküldése…</string>
     <string name="send_toot_notification_error_title">A tülk elküldése nem sikerült</string>
@@ -441,7 +441,7 @@
     <string name="description_status_bookmarked">Könyvjelzőzve</string>
     <string name="select_list_title">Lista kiválasztása</string>
     <string name="list">Lista</string>
-    <string name="error_audio_upload_size">A hangfájlok mérete 40MB-nál kisebb kell legyen.</string>
+    <string name="error_audio_upload_size">A hangfájloknak kisebbnek kell lenniük, mint 40 MB.</string>
     <string name="no_saved_status">Nincs egy vázlatod sem.</string>
     <string name="no_scheduled_status">Nincs egy ütemezett tülköd sem.</string>
     <string name="warning_scheduling_interval">A Mastodonban a legrövidebb ütemezhető időintervallum 5 perc.</string>
@@ -462,7 +462,7 @@
     <string name="pref_title_gradient_for_media">Színes homály mutatása rejtett médiánál</string>
     <string name="pref_title_notification_filter_follow_requests">követni szeretnének</string>
     <string name="dialog_mute_hide_notifications">Értesítések elrejtése</string>
-    <string name="dialog_block_warning">Letiltsuk @%s -t\?</string>
+    <string name="dialog_block_warning">Blokkolod: @%s\?</string>
     <string name="dialog_mute_warning">Elnémítsuk @%s fiókot\?</string>
     <string name="action_unmute_conversation">Beszélgetés némításának feloldása</string>
     <string name="action_mute_conversation">Beszélgetés némítása</string>

From f6172cfbbfa262dce0c5eefc24beec62dbca322e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zolt=C3=A1n=20Gera?= <gerazo@caesar.elte.hu>
Date: Fri, 18 Dec 2020 22:06:51 +0000
Subject: [PATCH 19/20] Translated using Weblate (Hungarian)

Currently translated at 100.0% (434 of 434 strings)

Translation: Tusky/Tusky
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/hu/
---
 app/src/main/res/values-hu/strings.xml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 53f74c13..df5cd610 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -26,7 +26,7 @@
     <string name="title_direct_messages">Közvetlen üzenetek</string>
     <string name="title_tab_preferences">Fülek</string>
     <string name="title_view_thread">Tülk</string>
-    <string name="title_statuses">Posztok</string>
+    <string name="title_statuses">Tülkök</string>
     <string name="title_statuses_with_replies">Válaszokkal</string>
     <string name="title_statuses_pinned">Rögzített</string>
     <string name="title_follows">Követett</string>
@@ -198,7 +198,7 @@
     <string name="notification_follow_name">Új követők</string>
     <string name="notification_follow_description">Értesítések új követőkről</string>
     <string name="notification_boost_name">Megtolások</string>
-    <string name="notification_boost_description">Értesítések posztjaid megtolása esetén</string>
+    <string name="notification_boost_description">Értesítések tülkjeid megtolása esetén</string>
     <string name="notification_favourite_name">Kedvencek</string>
     <string name="notification_favourite_description">Értesítések mikor tülkjeidet kedvencnek jelölik</string>
     <string name="notification_mention_format">%s megemlített téged</string>
@@ -433,7 +433,7 @@
     <string name="action_access_scheduled_toot">Időzített tülkök</string>
     <string name="action_schedule_toot">Tülk Időzítése</string>
     <string name="action_reset_schedule">Visszaállítás</string>
-    <string name="post_lookup_error_format">Nem találjuk ezt a posztot %s</string>
+    <string name="post_lookup_error_format">Nem találjuk ezt a tülköt %s</string>
     <string name="title_bookmarks">Könyvjelzők</string>
     <string name="action_bookmark">Könyvjelzőzés</string>
     <string name="action_view_bookmarks">Könyvjelzők</string>

From a917e0dad86a1c067d9bee4c45449bde49bb1fdd Mon Sep 17 00:00:00 2001
From: Konrad Pozniak <k.pozniak@gmx.at>
Date: Sun, 20 Dec 2020 19:00:43 +0100
Subject: [PATCH 20/20] Release 78

---
 app/build.gradle | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 1416975a..a7f566ac 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,8 +20,8 @@ android {
         applicationId APP_ID
         minSdkVersion 21
         targetSdkVersion 29
-        versionCode 77
-        versionName "13.0"
+        versionCode 78
+        versionName "13.1"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         vectorDrawables.useSupportLibrary = true