From 692f3775478b0c3efa21bc0f447a4970eefa0b3d Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Thu, 26 Mar 2020 18:47:52 +0100
Subject: [PATCH] Improve tests, update dependencies, and fix build

---
 .editorconfig                                 |  42 +--
 .gitlab-ci.yml                                |  56 ++--
 app/build.gradle.kts                          |   7 +-
 app/src/main/AndroidManifest.xml              |  85 +++---
 .../app/QuasseldroidReleaseDelegate.kt        |  34 +--
 .../quasseldroid/ui/chat/ChatActivity.kt      |   3 +-
 .../quasseldroid/ui/chat/ToolbarFragment.kt   |   6 +-
 .../chat/add/create/ChannelCreateFragment.kt  |   6 +-
 .../ui/chat/add/join/ChannelJoinFragment.kt   |   6 +-
 .../ui/chat/add/query/QueryCreateFragment.kt  |   8 +-
 .../ui/chat/archive/ArchiveListAdapter.kt     |   6 +-
 .../ui/chat/buffers/BufferListAdapter.kt      |   6 +-
 .../chat/buffers/BufferViewConfigFragment.kt  |  24 +-
 .../ui/chat/input/AutoCompleteAdapter.kt      |   4 +-
 .../ui/chat/input/ChatlineFragment.kt         |   6 +-
 .../ui/chat/messages/MessageAdapter.kt        |   2 +-
 .../ui/chat/messages/MessageListFragment.kt   |  15 +-
 .../chat/messages/QuasselMessageRenderer.kt   |  13 +-
 .../ui/chat/nicks/NickListFragment.kt         |   6 +-
 .../ui/chat/topic/TopicFragment.kt            |   6 +-
 .../ui/clientsettings/about/AboutFragment.kt  |   3 +-
 .../ui/coresettings/CoreSettingsFragment.kt   |  23 +-
 .../aliaslist/AliasListAdapter.kt             |   2 +
 .../aliaslist/AliasListFragment.kt            |   6 +-
 .../highlightlist/HighlightListFragment.kt    |  20 +-
 .../highlightlist/HighlightRuleAdapter.kt     |   2 +
 .../identity/IdentityBaseFragment.kt          |   8 +-
 .../identity/IdentityNicksAdapter.kt          |   2 +
 .../ignorelist/IgnoreListAdapter.kt           |   2 +
 .../ignorelist/IgnoreListFragment.kt          |   6 +-
 .../network/NetworkBaseFragment.kt            |  12 +-
 .../network/NetworkServerAdapter.kt           |   2 +
 .../networkconfig/NetworkConfigFragment.kt    |   6 +-
 .../passwordchange/PasswordChangeFragment.kt  |   2 +-
 .../certificate/CertificateInfoFragment.kt    |   6 +-
 .../ui/info/channel/ChannelInfoFragment.kt    |   6 +-
 .../ui/info/channellist/ChannelListAdapter.kt |   4 +-
 .../info/channellist/ChannelListFragment.kt   |  71 ++---
 .../ui/info/core/CoreInfoFragment.kt          |  10 +-
 .../ui/info/user/UserInfoFragment.kt          |  10 +-
 .../selection/AccountSelectionSlide.kt        |   4 +-
 .../setup/network/NetworkSetupNetworkSlide.kt |   8 +-
 .../util/avatars/MatrixDataFetcher.kt         |   8 +-
 .../AndroidCompatibilityUtils.kt              |  10 +-
 .../util/irc/format/spans/ChannelLinkSpan.kt  |  12 +-
 .../format/spans/IrcForegroundColorSpan.kt    |  20 +-
 .../util/irc/format/spans/QuasselURLSpan.kt   |  12 +-
 .../util/service/BackendServiceConnection.kt  |   6 +-
 .../util/ui/ContextThemeWrapper.kt            |  14 +-
 .../util/ui/LinkLongClickMenuHelper.kt        |   7 +-
 .../quasseldroid/util/ui/LocaleHelper.kt      |  18 +-
 .../util/ui/fastscroll/utils/Utils.java       |   6 +-
 .../util/ui/view/InlineSnackBar.kt            |   6 +-
 .../drawable-v21/bg_menuitem_rounded_dark.xml |   8 +-
 .../bg_menuitem_rounded_light.xml             |   8 +-
 app/src/main/res/drawable/bg_badge.xml        |   8 +-
 .../res/drawable/bg_menuitem_rounded_dark.xml |   8 +-
 .../drawable/bg_menuitem_rounded_light.xml    |   8 +-
 app/src/main/res/layout-land/layout_main.xml  |  46 ++--
 .../layout-sw600dp-land/activity_setup.xml    |  14 +-
 .../res/layout-sw600dp-land/layout_main.xml   |  46 ++--
 .../res/layout-sw600dp-land/setup_slide.xml   |  14 +-
 .../res/layout-sw600dp/activity_setup.xml     |  14 +-
 .../res/layout-sw720dp-land/activity_main.xml |  32 +--
 app/src/main/res/layout/activity_drawable.xml |  18 +-
 app/src/main/res/layout/activity_main.xml     |  12 +-
 app/src/main/res/layout/activity_settings.xml |  14 +-
 app/src/main/res/layout/activity_setup.xml    |  14 +-
 app/src/main/res/layout/add_create.xml        |  56 ++--
 app/src/main/res/layout/add_join.xml          |  28 +-
 app/src/main/res/layout/add_query.xml         |  28 +-
 app/src/main/res/layout/chat_channel_join.xml |  42 +--
 app/src/main/res/layout/chat_chatlist.xml     |  52 ++--
 app/src/main/res/layout/chat_messages.xml     |   5 +-
 app/src/main/res/layout/chat_toolbar.xml      |  25 +-
 .../res/layout/dialog_colorchooser_custom.xml | 147 +++++-----
 .../res/layout/dialog_missing_features.xml    |   6 +-
 app/src/main/res/layout/info_certificate.xml  |  68 +++--
 app/src/main/res/layout/info_channel.xml      |  48 ++--
 app/src/main/res/layout/info_channellist.xml  |  18 +-
 app/src/main/res/layout/info_core.xml         |  57 ++--
 app/src/main/res/layout/info_user.xml         | 143 +++++-----
 app/src/main/res/layout/layout_editor.xml     |  38 +--
 app/src/main/res/layout/layout_history.xml    |  14 +-
 app/src/main/res/layout/layout_main.xml       |  46 ++--
 app/src/main/res/layout/layout_toolbar.xml    |   6 +-
 .../main/res/layout/preference_seekbar.xml    |  16 +-
 .../main/res/layout/preference_vertical.xml   |  35 ++-
 app/src/main/res/layout/preferences_about.xml |   8 +-
 .../res/layout/preferences_about_header.xml   |  59 ++--
 app/src/main/res/layout/preferences_crash.xml |  20 +-
 .../main/res/layout/preferences_whitelist.xml |  26 +-
 ...preferences_whitelist_certificate_item.xml |   8 +-
 .../preferences_whitelist_hostname_item.xml   |   8 +-
 .../res/layout/settings_aliaslist_item.xml    |  28 +-
 app/src/main/res/layout/settings_chatlist.xml |  92 +++----
 .../res/layout/settings_highlightlist.xml     |  82 +++---
 .../layout/settings_highlightlist_rule.xml    | 107 ++++----
 .../res/layout/settings_highlightrule.xml     |  24 +-
 app/src/main/res/layout/settings_identity.xml |  76 +++---
 .../res/layout/settings_identity_nick.xml     |   8 +-
 .../main/res/layout/settings_ignoreitem.xml   |  22 +-
 .../res/layout/settings_ignorelist_item.xml   |  30 +--
 app/src/main/res/layout/settings_item.xml     |   6 +-
 app/src/main/res/layout/settings_list.xml     | 137 +++++-----
 app/src/main/res/layout/settings_network.xml  | 132 ++++-----
 .../res/layout/settings_network_server.xml    |  28 +-
 .../res/layout/settings_networkconfig.xml     |  44 +--
 .../res/layout/settings_networkserver.xml     |  60 ++---
 .../res/layout/settings_passwordchange.xml    | 120 ++++-----
 .../res/layout/setup_account_connection.xml   |  36 +--
 .../main/res/layout/setup_account_edit.xml    |  62 ++---
 .../layout/setup_core_backend_configure.xml   |  16 +-
 .../main/res/layout/setup_network_network.xml |  94 +++----
 app/src/main/res/layout/setup_slide.xml       |  28 +-
 .../main/res/layout/setup_user_network.xml    |  66 ++---
 .../res/layout/widget_archive_placeholder.xml |   6 +-
 app/src/main/res/layout/widget_banner.xml     |   9 +-
 app/src/main/res/layout/widget_buffer.xml     |  24 +-
 .../main/res/layout/widget_buffer_away.xml    |  25 +-
 .../main/res/layout/widget_channel_search.xml |   6 +-
 .../res/layout/widget_chatmessage_action.xml  |  33 ++-
 .../layout/widget_chatmessage_daychange.xml   |  18 +-
 .../res/layout/widget_chatmessage_error.xml   |  43 ++-
 .../res/layout/widget_chatmessage_info.xml    |  45 ++--
 .../res/layout/widget_chatmessage_notice.xml  |  43 ++-
 .../res/layout/widget_chatmessage_plain.xml   |  41 ++-
 .../res/layout/widget_chatmessage_server.xml  |  43 ++-
 app/src/main/res/layout/widget_client.xml     |   5 +-
 .../main/res/layout/widget_contributor.xml    |   6 +-
 .../res/layout/widget_core_account_add.xml    |   5 +-
 app/src/main/res/layout/widget_crash.xml      |   8 +-
 app/src/main/res/layout/widget_emoji.xml      |   5 +-
 app/src/main/res/layout/widget_formatting.xml | 154 +++++------
 app/src/main/res/layout/widget_header.xml     |  14 +-
 .../res/layout/widget_inline_snackbar.xml     |   5 +-
 app/src/main/res/layout/widget_library.xml    |   6 +-
 .../res/layout/widget_missing_feature.xml     |   6 +-
 app/src/main/res/layout/widget_network.xml    |  14 +-
 app/src/main/res/layout/widget_nick.xml       |   5 +-
 app/src/main/res/layout/widget_nick_away.xml  |   6 +-
 app/src/main/res/layout/widget_translator.xml |   6 +-
 .../main/res/layout/widget_warning_bar.xml    |  19 +-
 app/src/main/res/values-de/strings.xml        |  18 +-
 .../main/res/values-de/strings_messages.xml   |  22 +-
 .../res/values-fr-rCA/strings_messages.xml    |  22 +-
 app/src/main/res/values-it/strings.xml        |  18 +-
 .../main/res/values-it/strings_messages.xml   |  22 +-
 app/src/main/res/values-lt/strings.xml        |  22 +-
 .../main/res/values-lt/strings_messages.xml   |  32 +--
 app/src/main/res/values-pt/strings.xml        |  18 +-
 .../main/res/values-pt/strings_messages.xml   |  22 +-
 .../main/res/values-sr/strings_messages.xml   |  26 +-
 .../main/res/values-v17/styles_widgets.xml    | 172 ------------
 app/src/main/res/values/strings.xml           |  18 +-
 app/src/main/res/values/strings_messages.xml  |  40 +--
 .../main/res/values/strings_preferences.xml   | 254 +++++++++---------
 app/src/main/res/values/styles_widgets.xml    |  41 ++-
 app/src/main/res/values/themes_amoled.xml     |   7 +-
 app/src/main/res/values/themes_dracula.xml    |   8 +-
 app/src/main/res/values/themes_gruvbox.xml    |  12 +-
 app/src/main/res/values/themes_material.xml   |  12 +-
 app/src/main/res/values/themes_quassel.xml    |  12 +-
 app/src/main/res/values/themes_solarized.xml  |  12 +-
 .../main/res/xml/network_security_config.xml  |  12 +-
 app/src/main/res/xml/preferences.xml          | 130 ++++-----
 .../quasseldroid/testutil/StringEscaper.kt    |  52 ----
 .../compatibility/AndroidCrashFixerTest.kt    |  28 +-
 .../quasseldroid/util/emoji/EmojiDataTest.kt  |   7 +-
 .../irc/format/IrcFormatDeserializerTest.kt   |   7 +-
 app/src/test/resources/crashing_text.txt      |   1 +
 app/src/test/resources/valid_text.txt         |   1 +
 gradle.properties                             |   3 -
 invokergenerator/build.gradle.kts             |   1 -
 .../util/compatibility/CompatibilityUtils.kt  |  11 +-
 ...BackportedSyncFlushDeflaterOutputStream.kt |  55 ----
 malheur/build.gradle.kts                      |   4 +-
 .../java/de/kuschku/malheur/CrashHandler.kt   |   9 +-
 .../malheur/collectors/DisplayCollector.kt    |  10 +-
 persistence/build.gradle.kts                  |   4 +-
 ui_spinner/build.gradle.kts                   |   4 +-
 .../src/main/res/values/shape_attrs.xml       |  24 +-
 viewmodel/build.gradle.kts                    |   4 +-
 183 files changed, 2308 insertions(+), 2713 deletions(-)
 delete mode 100644 app/src/main/res/values-v17/styles_widgets.xml
 delete mode 100644 app/src/test/java/de/kuschku/quasseldroid/testutil/StringEscaper.kt
 create mode 100644 app/src/test/resources/crashing_text.txt
 create mode 100644 app/src/test/resources/valid_text.txt
 delete mode 100644 lib/src/main/java/de/kuschku/libquassel/util/compatibility/backport/BackportedSyncFlushDeflaterOutputStream.kt

diff --git a/.editorconfig b/.editorconfig
index 8370c6e46..d9f5985b3 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -1,30 +1,30 @@
 [*]
-charset=utf-8
-end_of_line=lf
-insert_final_newline=true
-indent_style=space
-indent_size=4
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+indent_style = space
+indent_size = 4
 
-[{*.mod,*.dtd,*.ent,*.elt}]
-indent_style=space
-indent_size=2
+[{*.mod, *.dtd, *.ent, *.elt}]
+indent_style = space
+indent_size = 2
 
-[{*.jhm,*.rng,*.wsdl,*.fxml,*.xslt,*.jrxml,*.ant,*.xul,*.xsl,*.xsd,*.tld,*.jnlp,*.xml}]
-indent_style=space
-indent_size=2
+[{*.jhm, *.rng, *.wsdl, *.fxml, *.xslt, *.jrxml, *.ant, *.xul, *.xsl, *.xsd, *.tld, *.jnlp, *.xml}]
+indent_style = space
+indent_size = 2
 
 [*.json]
-indent_style=space
-indent_size=2
+indent_style = space
+indent_size = 2
 
 [*.java]
-indent_style=space
-indent_size=2
+indent_style = space
+indent_size = 2
 
-[{*.kts,*.kt}]
-indent_style=space
-indent_size=2
+[{*.kts, *.kt}]
+indent_style = space
+indent_size = 2
 
-[{*.yml,*.yaml}]
-indent_style=space
-indent_size=2
+[{*.yml, *.yaml}]
+indent_style = space
+indent_size = 2
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 40cbf80c4..62036a3e0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-image: "k8r.eu/justjanne/android-sdk:28-28.0.3"
+image: "k8r.eu/justjanne/android-sdk:29-29.0.3"
 
 variables:
   GRADLE_OPTS: "-Dorg.gradle.daemon=false"
@@ -6,31 +6,31 @@ variables:
 cache:
   key: "$CI_PROJECT_NAME"
   paths:
-  - ".gradle/wrapper"
-  - ".gradle/caches"
+    - ".gradle/wrapper"
+    - ".gradle/caches"
 
 before_script:
-- "export GRADLE_USER_HOME=$(pwd)/.gradle"
-- "export ANDROID_HOME=/android-sdk-linux"
-- "export PATH=$PATH:/android-sdk-linux/platform-tools/"
-- "chmod +x ./gradlew"
+  - "export GRADLE_USER_HOME=$(pwd)/.gradle"
+  - "export ANDROID_HOME=/android-sdk-linux"
+  - "export PATH=$PATH:/android-sdk-linux/platform-tools/"
+  - "chmod +x ./gradlew"
 
-- "echo $SIGNING_KEYSTORE | base64 -d > /root/signing.keystore"
-- "echo $SIGNING_PROPERTIES | base64 -d > signing.properties"
+  - "echo $SIGNING_KEYSTORE | base64 -d > /root/signing.keystore"
+  - "echo $SIGNING_PROPERTIES | base64 -d > signing.properties"
 
 stages:
-- "build"
-- "test"
-- "deploy"
+  - "build"
+  - "test"
+  - "deploy"
 
 build:
   stage: "build"
   script:
-  - "./gradlew assembleRelease -x lintRelease -x lintVitalRelease"
-  - "cp app/build/outputs/apk/release/*.apk ."
+    - "./gradlew assembleRelease -x lintRelease -x lintVitalRelease"
+    - "cp app/build/outputs/apk/release/*.apk ."
   artifacts:
     paths:
-    - "*.apk"
+      - "*.apk"
 
 test:
   stage: "test"
@@ -46,16 +46,16 @@ deploy-local:
   cache: {}
   only:
     refs:
-    - "master"
+      - "master"
     variables:
-    - "$S3_CONFIG"
+      - "$S3_CONFIG"
   dependencies:
-  - "build"
+    - "build"
   script:
-  - "echo $S3_CONFIG | base64 -d > $HOME/.s3cfg"
-  - "export VERSION=$(ls *.apk)"
-  - "s3cmd put $VERSION s3://releases/quasseldroid-ng/$VERSION"
-  - "s3cmd cp s3://releases/quasseldroid-ng/$VERSION s3://releases/quasseldroid-ng/Quasseldroid-latest.apk"
+    - "echo $S3_CONFIG | base64 -d > $HOME/.s3cfg"
+    - "export VERSION=$(ls *.apk)"
+    - "s3cmd put $VERSION s3://releases/quasseldroid-ng/$VERSION"
+    - "s3cmd cp s3://releases/quasseldroid-ng/$VERSION s3://releases/quasseldroid-ng/Quasseldroid-latest.apk"
 
 deploy-beta:
   stage: "deploy"
@@ -63,12 +63,12 @@ deploy-beta:
   cache: {}
   only:
     refs:
-    - "master"
+      - "master"
     variables:
-    - "$FASTLANE_CONFIG"
+      - "$FASTLANE_CONFIG"
   dependencies:
-  - "build"
+    - "build"
   script:
-  - "echo $FASTLANE_CONFIG | base64 -d > $HOME/key.json"
-  - "export VERSION=$(ls *.apk)"
-  - "fastlane supply --apk $VERSION --track beta --json_key $HOME/key.json --package_name com.iskrembilen.quasseldroid --skip_upload_metadata=true --skip_upload_images=true --skip_upload_screenshots=true"
+    - "echo $FASTLANE_CONFIG | base64 -d > $HOME/key.json"
+    - "export VERSION=$(ls *.apk)"
+    - "fastlane supply --apk $VERSION --track beta --json_key $HOME/key.json --package_name com.iskrembilen.quasseldroid --skip_upload_metadata=true --skip_upload_images=true --skip_upload_screenshots=true"
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index aab8c846f..e7bdcdb7b 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -24,7 +24,7 @@ plugins {
 }
 
 android {
-  compileSdkVersion(28)
+  compileSdkVersion(29)
 
   signingConfigs {
     SigningData.of(project.rootProject.properties("signing.properties"))?.let {
@@ -39,7 +39,7 @@ android {
 
   defaultConfig {
     minSdkVersion(20)
-    targetSdkVersion(28)
+    targetSdkVersion(29)
 
     applicationId = "com.iskrembilen.quasseldroid"
     versionCode = cmd("git", "rev-list", "--count", "HEAD")?.toIntOrNull() ?: 1
@@ -193,8 +193,9 @@ dependencies {
   }
 
   testImplementation("junit", "junit", "4.12")
-  testImplementation("org.robolectric", "robolectric", "4.3") {
+  testImplementation("org.robolectric", "robolectric", "4.3.1") {
     exclude(group = "org.threeten", module = "threetenbp")
+    exclude(group = "com.google.auto.service", module = "auto-service")
   }
 
   androidTestImplementation("junit", "junit", "4.12")
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ec75aaa6d..7958afecf 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -20,17 +20,6 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="de.kuschku.quasseldroid">
 
-  <uses-permission android:name="android.permission.INTERNET" />
-  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-  <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
-
-  <uses-feature
-    android:name="android.hardware.touchscreen"
-    android:required="false" />
-  <uses-feature
-    android:name="android.hardware.type.pc"
-    android:required="false" />
-
   <application
     android:name=".Quasseldroid"
     android:allowBackup="true"
@@ -41,14 +30,6 @@
     android:supportsRtl="true"
     android:theme="@style/Theme.SplashTheme">
 
-    <meta-data
-      android:name="WindowManagerPreference:FreeformWindowSize"
-      android:value="tablet" />
-    <meta-data
-      android:name="WindowManagerPreference:FreeformWindowOrientation"
-      android:value="landscape" />
-
-    <!-- Normal Chat -->
     <activity
       android:name=".ui.chat.ChatActivity"
       android:exported="true"
@@ -76,20 +57,22 @@
         <data android:scheme="ircs" />
       </intent-filter>
     </activity>
-
-    <!-- Info -->
     <activity
       android:name="de.kuschku.quasseldroid.ui.info.user.UserInfoActivity"
       android:exported="false"
       android:label="@string/label_info_user"
       android:parentActivityName=".ui.chat.ChatActivity"
       android:windowSoftInputMode="adjustResize" />
+
+    <!-- Normal Chat -->
     <activity
       android:name="de.kuschku.quasseldroid.ui.info.channel.ChannelInfoActivity"
       android:exported="false"
       android:label="@string/label_info_channel"
       android:parentActivityName=".ui.chat.ChatActivity"
       android:windowSoftInputMode="adjustResize" />
+
+    <!-- Info -->
     <activity
       android:name="de.kuschku.quasseldroid.ui.info.core.CoreInfoActivity"
       android:exported="false"
@@ -111,32 +94,30 @@
       android:exported="false"
       android:label="@string/label_info_certificate"
       android:windowSoftInputMode="adjustResize" />
-
-    <!-- Archive -->
     <activity
       android:name="de.kuschku.quasseldroid.ui.chat.archive.ArchiveActivity"
       android:exported="false"
       android:label="@string/label_archived_chats"
       android:windowSoftInputMode="adjustResize" />
-
-    <!-- Add -->
     <activity
       android:name="de.kuschku.quasseldroid.ui.chat.add.create.ChannelCreateActivity"
       android:exported="false"
       android:label="@string/label_create_channel"
       android:windowSoftInputMode="adjustResize" />
+
+    <!-- Archive -->
     <activity
       android:name="de.kuschku.quasseldroid.ui.chat.add.join.ChannelJoinActivity"
       android:exported="false"
       android:label="@string/label_join_long"
       android:windowSoftInputMode="adjustResize" />
+
+    <!-- Add -->
     <activity
       android:name="de.kuschku.quasseldroid.ui.chat.add.query.QueryCreateActivity"
       android:exported="false"
       android:label="@string/label_query_medium"
       android:windowSoftInputMode="adjustResize" />
-
-    <!-- Core Settings -->
     <activity
       android:name=".ui.coresettings.CoreSettingsActivity"
       android:exported="false"
@@ -149,6 +130,8 @@
       android:label="@string/settings_network_title"
       android:parentActivityName=".ui.coresettings.CoreSettingsActivity"
       android:windowSoftInputMode="adjustResize" />
+
+    <!-- Core Settings -->
     <activity
       android:name=".ui.coresettings.network.NetworkEditActivity"
       android:exported="false"
@@ -231,8 +214,6 @@
       android:exported="false"
       android:label="@string/label_password_change"
       android:windowSoftInputMode="adjustResize" />
-
-    <!-- Client Settings -->
     <activity
       android:name=".ui.clientsettings.client.ClientSettingsActivity"
       android:exported="false"
@@ -243,6 +224,8 @@
       android:exported="false"
       android:label="@string/label_crashes"
       android:windowSoftInputMode="adjustResize" />
+
+    <!-- Client Settings -->
     <activity
       android:name=".ui.clientsettings.whitelist.WhitelistActivity"
       android:exported="false"
@@ -259,8 +242,6 @@
       android:label="@string/label_license"
       android:parentActivityName=".ui.clientsettings.about.AboutActivity"
       android:windowSoftInputMode="adjustResize" />
-
-    <!-- Client Setup Flow -->
     <activity
       android:name=".ui.setup.accounts.selection.AccountSelectionActivity"
       android:exported="false"
@@ -273,22 +254,20 @@
       android:label="@string/app_name"
       android:parentActivityName=".ui.setup.accounts.selection.AccountSelectionActivity"
       android:windowSoftInputMode="adjustResize" />
+
+    <!-- Client Setup Flow -->
     <activity
       android:name=".ui.setup.accounts.edit.AccountEditActivity"
       android:exported="false"
       android:label="@string/app_name"
       android:parentActivityName=".ui.setup.accounts.selection.AccountSelectionActivity"
       android:windowSoftInputMode="adjustResize" />
-
-    <!-- Core Setup Flow -->
     <activity
       android:name=".ui.setup.core.CoreSetupActivity"
       android:exported="false"
       android:label="@string/setup_core_title"
       android:parentActivityName=".ui.chat.ChatActivity"
       android:windowSoftInputMode="adjustResize" />
-
-    <!-- Core User Setup Flow -->
     <activity
       android:name=".ui.setup.user.UserSetupActivity"
       android:exported="false"
@@ -296,7 +275,7 @@
       android:parentActivityName=".ui.chat.ChatActivity"
       android:windowSoftInputMode="adjustResize" />
 
-    <!-- Network Setup Flow -->
+    <!-- Core Setup Flow -->
     <activity
       android:name=".ui.setup.network.NetworkSetupActivity"
       android:exported="false"
@@ -304,13 +283,17 @@
       android:parentActivityName=".ui.chat.ChatActivity"
       android:windowSoftInputMode="adjustResize" />
 
-    <!-- Services -->
-    <service
-      android:name=".service.QuasselService"
-      android:description="@string/connection_service_description"
-      android:exported="false"
-      android:label="@string/connection_service_title" />
+    <!-- Core User Setup Flow -->
+    <meta-data
+      android:name="WindowManagerPreference:FreeformWindowSize"
+      android:value="tablet" />
+
+    <!-- Network Setup Flow -->
+    <meta-data
+      android:name="WindowManagerPreference:FreeformWindowOrientation"
+      android:value="landscape" />
 
+    <!-- Services -->
     <provider
       android:name="androidx.core.content.FileProvider"
       android:authorities="${applicationId}.fileprovider"
@@ -320,6 +303,24 @@
         android:name="android.support.FILE_PROVIDER_PATHS"
         android:resource="@xml/filepaths" />
     </provider>
+
+    <service
+      android:name=".service.QuasselService"
+      android:description="@string/connection_service_description"
+      android:exported="false"
+      android:label="@string/connection_service_title" />
   </application>
 
+  <uses-feature
+    android:name="android.hardware.type.pc"
+    android:required="false" />
+  <uses-feature
+    android:name="android.hardware.touchscreen"
+    android:required="false" />
+
+  <uses-permission android:name="android.permission.INTERNET" />
+  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+
+  <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
+
 </manifest>
diff --git a/app/src/main/java/de/kuschku/quasseldroid/app/QuasseldroidReleaseDelegate.kt b/app/src/main/java/de/kuschku/quasseldroid/app/QuasseldroidReleaseDelegate.kt
index 612a8e22a..ef97f538c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/app/QuasseldroidReleaseDelegate.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/app/QuasseldroidReleaseDelegate.kt
@@ -19,6 +19,7 @@
 
 package de.kuschku.quasseldroid.app
 
+import android.annotation.SuppressLint
 import android.os.Build
 import android.os.StrictMode
 import com.squareup.leakcanary.LeakCanary
@@ -34,6 +35,7 @@ import de.kuschku.quasseldroid.persistence.util.AccountId
 import de.kuschku.quasseldroid.settings.AppearanceSettings
 import de.kuschku.quasseldroid.settings.SettingsMigration
 import de.kuschku.quasseldroid.settings.SettingsMigrationManager
+import de.kuschku.quasseldroid.util.helper.letIf
 
 class QuasseldroidReleaseDelegate(private val app: Quasseldroid) : QuasseldroidBaseDelegate(app) {
   override fun shouldInit() = !LeakCanary.isInAnalyzerProcess(app)
@@ -43,6 +45,7 @@ class QuasseldroidReleaseDelegate(private val app: Quasseldroid) : QuasseldroidB
     CrashHandler.init<BuildConfig>(application = app)
   }
 
+  @SuppressLint("NewApi")
   override fun onPostInit() {
     // Migrate preferences
     SettingsMigrationManager(
@@ -146,18 +149,10 @@ class QuasseldroidReleaseDelegate(private val app: Quasseldroid) : QuasseldroidB
         StrictMode.ThreadPolicy.Builder()
           .detectNetwork()
           .detectCustomSlowCalls()
-          .let {
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-              it.detectResourceMismatches()
-            } else {
-              it
-            }
-          }.let {
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-              it.detectUnbufferedIo()
-            } else {
-              it
-            }
+          .letIf(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            it.detectResourceMismatches()
+          }.letIf(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            it.detectUnbufferedIo()
           }
           .penaltyLog()
           .build()
@@ -168,18 +163,9 @@ class QuasseldroidReleaseDelegate(private val app: Quasseldroid) : QuasseldroidB
           .detectActivityLeaks()
           .detectLeakedClosableObjects()
           .detectLeakedRegistrationObjects()
-          .let {
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
-              it.detectFileUriExposure()
-            } else {
-              it
-            }
-          }.let {
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-              it.detectContentUriWithoutPermission()
-            } else {
-              it
-            }
+          .detectFileUriExposure()
+          .letIf(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            it.detectContentUriWithoutPermission()
           }
           .penaltyLog()
           .build()
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
index 5ee29db9a..9d9dec1f2 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
@@ -703,9 +703,10 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
                                  Toast.LENGTH_LONG).show()
                 }
                 it is ProtocolVersionException     -> {
+                  val protocolVersion: Int = it.protocol.version.toInt()
                   Toast.makeText(this,
                                  getString(R.string.label_error_invalid_protocol_version,
-                                           it.protocol.version.toInt()),
+                                           protocolVersion),
                                  Toast.LENGTH_LONG).show()
                 }
                 it is ConnectException &&
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt
index 2dfe1990a..ef3e778f0 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -127,7 +127,7 @@ class ToolbarFragment : ServiceBoundFragment() {
 
       Triple(it.first, it.second, avatarInfo)
     }.toLiveData()
-      .observe(this, Observer {
+      .observe(viewLifecycleOwner, Observer {
         if (it != null) {
           val (data, lag, avatarInfo) = it
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/create/ChannelCreateFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/create/ChannelCreateFragment.kt
index 06f8557de..edb24889b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/create/ChannelCreateFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/create/ChannelCreateFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -114,7 +114,7 @@ class ChannelCreateFragment : ServiceBoundSettingsFragment() {
           NetworkItem(it.networkId, it.networkName)
         }.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, NetworkItem::name))
       }
-    }.toLiveData().observe(this, Observer {
+    }.toLiveData().observe(viewLifecycleOwner, Observer {
       if (it != null) {
         networkAdapter.submitList(it)
         if (!hasSetNetwork && networkId.isValidId() && it.isNotEmpty()) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/join/ChannelJoinFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/join/ChannelJoinFragment.kt
index 187d0e4f6..f5b5e3c5c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/join/ChannelJoinFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/join/ChannelJoinFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -92,7 +92,7 @@ class ChannelJoinFragment : ServiceBoundFragment() {
           NetworkItem(it.networkId, it.networkName)
         }.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, NetworkItem::name))
       }
-    }.toLiveData().observe(this, Observer {
+    }.toLiveData().observe(viewLifecycleOwner, Observer {
       if (it != null) {
         networkAdapter.submitList(it)
         if (!hasSetNetwork && networkId.isValidId() && it.isNotEmpty()) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/query/QueryCreateFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/query/QueryCreateFragment.kt
index 559c2af0d..a86699061 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/query/QueryCreateFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/query/QueryCreateFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -136,7 +136,7 @@ class QueryCreateFragment : ServiceBoundFragment() {
           NetworkItem(it.networkId, it.networkName)
         }.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, NetworkItem::name))
       }
-    }.toLiveData().observe(this, Observer {
+    }.toLiveData().observe(viewLifecycleOwner, Observer {
       if (it != null) {
         networkAdapter.submitList(it)
         if (!hasSetNetwork && networkId.isValidId() && it.isNotEmpty()) {
@@ -286,7 +286,7 @@ class QueryCreateFragment : ServiceBoundFragment() {
       }.sortedBy {
         it.lowestMode
       }.toList()
-    }.toLiveData().observe(this, Observer {
+    }.toLiveData().observe(viewLifecycleOwner, Observer {
       nickListAdapter.submitList(it)
     })
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/archive/ArchiveListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/archive/ArchiveListAdapter.kt
index eba0b698e..4402eb0fe 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/archive/ArchiveListAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/archive/ArchiveListAdapter.kt
@@ -19,6 +19,7 @@
 
 package de.kuschku.quasseldroid.ui.chat.archive
 
+import android.annotation.SuppressLint
 import android.graphics.drawable.Drawable
 import android.view.LayoutInflater
 import android.view.MotionEvent
@@ -43,6 +44,7 @@ import de.kuschku.quasseldroid.viewmodel.data.BufferListItem
 import de.kuschku.quasseldroid.viewmodel.data.BufferStatus
 import io.reactivex.subjects.BehaviorSubject
 
+@SuppressLint("ClickableViewAccessibility", "ResourceType")
 class ArchiveListAdapter(
   private val messageSettings: MessageSettings,
   private val selectedBuffer: BehaviorSubject<BufferId>,
@@ -517,8 +519,8 @@ class ArchiveListAdapter(
           binding.description.visibleIf(item.props.description.isNotBlank())
 
           binding.status.loadAvatars(item.props.avatarUrls,
-                             item.props.fallbackDrawable,
-                             crop = !messageSettings.squareAvatars)
+                                     item.props.fallbackDrawable,
+                                     crop = !messageSettings.squareAvatars)
         }
       }
     }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt
index f799c2342..c068ffe27 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt
@@ -19,6 +19,7 @@
 
 package de.kuschku.quasseldroid.ui.chat.buffers
 
+import android.annotation.SuppressLint
 import android.graphics.drawable.Drawable
 import android.view.LayoutInflater
 import android.view.MotionEvent
@@ -42,6 +43,7 @@ import de.kuschku.quasseldroid.viewmodel.data.BufferListItem
 import de.kuschku.quasseldroid.viewmodel.data.BufferStatus
 import io.reactivex.subjects.BehaviorSubject
 
+@SuppressLint("ClickableViewAccessibility", "ResourceType")
 class BufferListAdapter(
   private val messageSettings: MessageSettings,
   private val selectedBuffer: BehaviorSubject<BufferId>,
@@ -546,8 +548,8 @@ class BufferListAdapter(
         binding.description.visibleIf(item.props.description.isNotBlank())
 
         binding.status.loadAvatars(item.props.avatarUrls,
-                           item.props.fallbackDrawable,
-                           crop = !messageSettings.squareAvatars)
+                                   item.props.fallbackDrawable,
+                                   crop = !messageSettings.squareAvatars)
       }
     }
   }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt
index cb9b27d4a..258134408 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt
@@ -178,7 +178,7 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
     val adapter = BufferViewConfigAdapter()
     modelHelper.bufferViewConfigs.safeSwitchMap {
       combineLatest(it.map(BufferViewConfig::liveUpdates))
-    }.toLiveData().observe(this, Observer {
+    }.toLiveData().observe(viewLifecycleOwner, Observer {
       if (it != null) {
         adapter.submitList(it)
       }
@@ -226,12 +226,14 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
       }
     }
 
-    modelHelper.negotiatedFeatures.toLiveData().observe(this, Observer { (connected, features) ->
-      featureContextBufferActivitySync.setMode(
-        if (!connected || features.hasFeature(ExtendedFeature.BufferActivitySync)) WarningBarView.MODE_NONE
-        else WarningBarView.MODE_ICON
-      )
-    })
+    modelHelper.negotiatedFeatures.toLiveData().observe(viewLifecycleOwner,
+                                                        Observer { (connected, features) ->
+                                                          featureContextBufferActivitySync.setMode(
+                                                            if (!connected || features.hasFeature(
+                                                                ExtendedFeature.BufferActivitySync)) WarningBarView.MODE_NONE
+                                                            else WarningBarView.MODE_ICON
+                                                          )
+                                                        })
 
     val filtered = combineLatest(
       database.filtered().listenRx(accountId).toObservable().map {
@@ -242,7 +244,7 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
 
     modelHelper.processChatBufferList(filtered).map { buffers ->
       bufferPresenter.render(buffers)
-    }.toLiveData().observe(this, Observer { processedList ->
+    }.toLiveData().observe(viewLifecycleOwner, Observer { processedList ->
       if (hasRestoredChatListState) {
         chatListState = chatList.layoutManager?.onSaveInstanceState()
         hasRestoredChatListState = false
@@ -254,7 +256,7 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
     listAdapter.setOnLongClickListener(this@BufferViewConfigFragment::longClickListener)
     chatList.adapter = listAdapter
 
-    modelHelper.selectedBuffer.toLiveData().observe(this, Observer { buffer ->
+    modelHelper.selectedBuffer.toLiveData().observe(viewLifecycleOwner, Observer { buffer ->
       actionMode?.let {
         BufferContextPresenter.present(it, buffer)
       }
@@ -288,7 +290,7 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
     chatList.itemAnimator = DefaultItemAnimator()
     chatList.setItemViewCacheSize(10)
 
-    modelHelper.chat.stateReset.toLiveData().observe(this, Observer {
+    modelHelper.chat.stateReset.toLiveData().observe(viewLifecycleOwner, Observer {
       listAdapter.submitList(emptyList())
       hasSetBufferViewConfigId = false
     })
@@ -299,7 +301,7 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
 
     combineLatest(modelHelper.chat.bufferSearchTemporarilyVisible.distinctUntilChanged(),
                   bufferSearchPermanentlyVisible)
-      .toLiveData().observe(this, Observer { (temporarily, permanently) ->
+      .toLiveData().observe(viewLifecycleOwner, Observer { (temporarily, permanently) ->
         val visible = temporarily || permanently
 
         val menuItem = chatListToolbar.menu.findItem(R.id.action_search)
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt
index 2cd66d65d..4d2f75428 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt
@@ -151,8 +151,8 @@ class AutoCompleteAdapter @Inject constructor(
 
         binding.avatar.visibleIf(messageSettings.showAvatars)
         binding.avatar.loadAvatars(data.avatarUrls,
-                           data.fallbackDrawable,
-                           crop = !messageSettings.squareAvatars)
+                                   data.fallbackDrawable,
+                                   crop = !messageSettings.squareAvatars)
       }
     }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt
index ca93d13b1..26fb83a0b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -169,7 +169,7 @@ class ChatlineFragment : ServiceBoundFragment() {
     }
     messageHistory.adapter = messageHistoryAdapter
     modelHelper.chat.recentlySentMessages.toLiveData()
-      .observe(this, Observer(messageHistoryAdapter::submitList))
+      .observe(viewLifecycleOwner, Observer(messageHistoryAdapter::submitList))
     messageHistoryAdapter.setOnUpdateFinishedListener {
       messageHistory.scrollToPosition(0)
     }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt
index 6c682499f..2c3110071 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt
@@ -44,7 +44,7 @@ import de.kuschku.quasseldroid.viewmodel.data.FormattedMessage
 import javax.inject.Inject
 
 class MessageAdapter @Inject constructor(
-  private val messageRenderer: QuasselMessageRenderer
+  private val messageRenderer: MessageRenderer
 ) : PagedListAdapter<DisplayMessage, MessageAdapter.QuasselMessageViewHolder>(
   object : DiffUtil.ItemCallback<DisplayMessage>() {
     override fun areItemsTheSame(oldItem: DisplayMessage, newItem: DisplayMessage) =
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
index 479f9db35..99fe0be42 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -170,8 +170,7 @@ class MessageListFragment : ServiceBoundFragment() {
           builder
 
         val clipboard = requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
-        val clip = ClipData.newPlainText(null, data)
-        clipboard.primaryClip = clip
+        clipboard.setPrimaryClip(ClipData.newPlainText(null, data))
         actionMode?.finish()
         true
       }
@@ -407,13 +406,13 @@ class MessageListFragment : ServiceBoundFragment() {
       database.message().lastMsgId(it)
     }
 
-    modelHelper.chat.bufferId.toLiveData().observe(this, Observer { bufferId ->
+    modelHelper.chat.bufferId.toLiveData().observe(viewLifecycleOwner, Observer { bufferId ->
       swipeRefreshLayout.isEnabled = (bufferId != null || bufferId?.isValidId() == true)
     })
 
     combineLatest(modelHelper.bufferSyncer,
                   modelHelper.sessionManager.mapSwitchMap(SessionManager::state).distinctUntilChanged())
-      .toLiveData().observe(this, Observer { (bufferSyncer, state) ->
+      .toLiveData().observe(viewLifecycleOwner, Observer { (bufferSyncer, state) ->
         if (state?.orNull() == ConnectionState.CONNECTED) {
           runInBackgroundDelayed(16) {
             modelHelper.chat.bufferId { bufferId ->
@@ -447,7 +446,7 @@ class MessageListFragment : ServiceBoundFragment() {
       })
 
     modelHelper.connectedSession.toLiveData().zip(lastMessageId).observe(
-      this, Observer {
+      viewLifecycleOwner, Observer {
       runInBackground {
         val session = it?.first?.orNull()
         val message = it?.second
@@ -517,7 +516,7 @@ class MessageListFragment : ServiceBoundFragment() {
       lastBuffer = BufferId(getInt(KEY_STATE_BUFFER)).nullIf { !it.isValidId() }
     }
 
-    data.observe(this, Observer { list ->
+    data.observe(viewLifecycleOwner, Observer { list ->
       previousLoadKey = list?.lastKey as? Int
       val firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition()
       val firstVisibleMessageId = adapter[firstVisibleItemPosition]?.content?.messageId
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt
index b57c6cda5..d81999035 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -23,7 +23,6 @@ import android.content.Context
 import android.graphics.Typeface
 import android.graphics.drawable.ColorDrawable
 import android.graphics.drawable.LayerDrawable
-import android.os.Build
 import android.text.SpannableStringBuilder
 import android.util.TypedValue
 import android.view.Gravity
@@ -205,17 +204,13 @@ class QuasselMessageRenderer @Inject constructor(
       LinearLayout.LayoutParams(avatarContainerSize, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
         val margin = viewHolder.itemView.context.resources.getDimensionPixelSize(R.dimen.message_horizontal)
         setMargins(0, 0, margin, 0)
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
-          marginEnd = margin
-        }
+        marginEnd = margin
       }
     avatarPlaceholder?.layoutParams =
       LinearLayout.LayoutParams(avatarContainerSize, LinearLayout.LayoutParams.MATCH_PARENT).apply {
         val margin = viewHolder.itemView.context.resources.getDimensionPixelSize(R.dimen.message_horizontal)
         setMargins(0, 0, margin, 0)
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
-          marginEnd = margin
-        }
+        marginEnd = margin
       }
 
     viewHolder.messageContainer?.apply {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt
index fa596d38c..af05005d9 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -106,7 +106,7 @@ class NickListFragment : ServiceBoundFragment() {
     val colorContext = ColorContext(requireContext(), messageSettings)
 
     val avatarSize = resources.getDimensionPixelSize(R.dimen.avatar_size)
-    modelHelper.nickDataThrottled.toLiveData().observe(this, Observer {
+    modelHelper.nickDataThrottled.toLiveData().observe(viewLifecycleOwner, Observer {
       runInBackground {
         it?.asSequence()?.map {
           val nickName = it.nick
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt
index 6451c31e4..0aece28be 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -125,7 +125,7 @@ class TopicFragment : ServiceBoundSettingsFragment(), Savable {
     modelHelper.chat.bufferId.onNext(bufferId)
     modelHelper.bufferData.filter {
       it.info != null
-    }.firstElement().toLiveData().observe(this, Observer {
+    }.firstElement().toLiveData().observe(viewLifecycleOwner, Observer {
       chatline.setText(formatDeserializer.formatString(it?.description, true))
     })
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/about/AboutFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/about/AboutFragment.kt
index 239348782..1af58ebf8 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/about/AboutFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/about/AboutFragment.kt
@@ -82,8 +82,7 @@ class AboutFragment : DaggerFragment() {
 
     versionContainer.setOnClickListener {
       val clipboard = requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
-      val clip = ClipData.newPlainText(null, BuildConfig.VERSION_NAME)
-      clipboard.primaryClip = clip
+      clipboard.setPrimaryClip(ClipData.newPlainText(null, BuildConfig.VERSION_NAME))
       Toast.makeText(requireContext(), R.string.info_copied_version, Toast.LENGTH_LONG).show()
     }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsFragment.kt
index 7b934204f..274ca3feb 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -147,7 +147,7 @@ class CoreSettingsFragment : ServiceBoundFragment() {
           }.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, SettingsItem<NetworkId>::name))
         }
       }
-    }.toLiveData().observe(this, Observer {
+    }.toLiveData().observe(viewLifecycleOwner, Observer {
       networkAdapter.submitList(it.orEmpty())
     })
 
@@ -166,7 +166,7 @@ class CoreSettingsFragment : ServiceBoundFragment() {
           }.sortedBy(SettingsItem<IdentityId>::name)
         }
       }
-    }.toLiveData().observe(this, Observer {
+    }.toLiveData().observe(viewLifecycleOwner, Observer {
       identityAdapter.submitList(it.orEmpty())
     })
 
@@ -181,17 +181,18 @@ class CoreSettingsFragment : ServiceBoundFragment() {
           SettingsItem(it.bufferViewId(), it.bufferViewName())
         }.sortedBy(SettingsItem<Int>::name)
       }
-    }.toLiveData().observe(this, Observer {
+    }.toLiveData().observe(viewLifecycleOwner, Observer {
       chatListAdapter.submitList(it.orEmpty())
     })
 
     var missingFeatureList: List<MissingFeature> = emptyList()
-    modelHelper.negotiatedFeatures.toLiveData().observe(this, Observer { (connected, features) ->
-      missingFeatureList = RequiredFeatures.features.filter {
-        it.feature !in features.enabledFeatures
-      }
-      featureContextMissing.visibleIf(connected && missingFeatureList.isNotEmpty())
-    })
+    modelHelper.negotiatedFeatures.toLiveData().observe(viewLifecycleOwner,
+                                                        Observer { (connected, features) ->
+                                                          missingFeatureList = RequiredFeatures.features.filter {
+                                                            it.feature !in features.enabledFeatures
+                                                          }
+                                                          featureContextMissing.visibleIf(connected && missingFeatureList.isNotEmpty())
+                                                        })
 
     featureContextMissing.setOnClickListener {
       MissingFeaturesDialog.Builder(requireActivity())
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliaslist/AliasListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliaslist/AliasListAdapter.kt
index 0421df006..4c885fbaa 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliaslist/AliasListAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliaslist/AliasListAdapter.kt
@@ -19,6 +19,7 @@
 
 package de.kuschku.quasseldroid.ui.coresettings.aliaslist
 
+import android.annotation.SuppressLint
 import android.view.LayoutInflater
 import android.view.MotionEvent
 import android.view.ViewGroup
@@ -90,6 +91,7 @@ class AliasListAdapter @Inject constructor(
     holder.bind(data[position])
   }
 
+  @SuppressLint("ClickableViewAccessibility")
   class AliasItemViewHolder(
     private val binding: SettingsAliaslistItemBinding,
     private val formatDeserializer: IrcFormatDeserializer,
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliaslist/AliasListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliaslist/AliasListFragment.kt
index 41e2517c4..650e7fe26 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliaslist/AliasListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliaslist/AliasListFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -83,7 +83,7 @@ class AliasListFragment : ServiceBoundSettingsFragment(), Savable, Changeable {
     modelHelper.aliasManager
       .filter(Optional<AliasManager>::isPresent)
       .map(Optional<AliasManager>::get)
-      .toLiveData().observe(this, Observer {
+      .toLiveData().observe(viewLifecycleOwner, Observer {
         if (it != null) {
           if (this.aliasManager == null) {
             this.aliasManager = Pair(it, it.copy())
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightListFragment.kt
index eecdee4e4..4458a826f 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightListFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -136,7 +136,7 @@ class HighlightListFragment : ServiceBoundSettingsFragment(), Savable, Changeabl
     modelHelper.highlightRuleManager
       .filter(Optional<HighlightRuleManager>::isPresent)
       .map(Optional<HighlightRuleManager>::get)
-      .toLiveData().observe(this, Observer {
+      .toLiveData().observe(viewLifecycleOwner, Observer {
         if (it != null) {
           if (this.ruleManager == null) {
             this.ruleManager = Pair(it, it.copy())
@@ -151,12 +151,14 @@ class HighlightListFragment : ServiceBoundSettingsFragment(), Savable, Changeabl
         }
       })
 
-    modelHelper.negotiatedFeatures.toLiveData().observe(this, Observer { (connected, features) ->
-      featureContextCoreSideHighlights.setMode(
-        if (!connected || features.hasFeature(ExtendedFeature.CoreSideHighlights)) WarningBarView.MODE_NONE
-        else WarningBarView.MODE_ICON
-      )
-    })
+    modelHelper.negotiatedFeatures.toLiveData().observe(viewLifecycleOwner,
+                                                        Observer { (connected, features) ->
+                                                          featureContextCoreSideHighlights.setMode(
+                                                            if (!connected || features.hasFeature(
+                                                                ExtendedFeature.CoreSideHighlights)) WarningBarView.MODE_NONE
+                                                            else WarningBarView.MODE_ICON
+                                                          )
+                                                        })
 
     return view
   }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightRuleAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightRuleAdapter.kt
index 6617cd348..4ccadb7d9 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightRuleAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightRuleAdapter.kt
@@ -19,6 +19,7 @@
 
 package de.kuschku.quasseldroid.ui.coresettings.highlightlist
 
+import android.annotation.SuppressLint
 import android.view.LayoutInflater
 import android.view.MotionEvent
 import android.view.ViewGroup
@@ -28,6 +29,7 @@ import de.kuschku.quasseldroid.databinding.SettingsHighlightlistRuleBinding
 import de.kuschku.quasseldroid.util.helper.visibleIf
 import java.util.*
 
+@SuppressLint("ClickableViewAccessibility")
 class HighlightRuleAdapter(
   private val clickListener: (HighlightRuleManager.HighlightRule) -> Unit,
   private val dragListener: (HighlightRuleViewHolder) -> Unit
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityBaseFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityBaseFragment.kt
index 776cdfcf2..e9daf44c8 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityBaseFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityBaseFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -131,7 +131,7 @@ abstract class IdentityBaseFragment(private val initDefault: Boolean) :
         .filter(Optional<ISession>::isPresent)
         .map(Optional<ISession>::get)
         .firstElement()
-        .toLiveData().observe(this, Observer {
+        .toLiveData().observe(viewLifecycleOwner, Observer {
           it?.let {
             update(Defaults.identity(requireContext(), it.proxy))
           }
@@ -141,7 +141,7 @@ abstract class IdentityBaseFragment(private val initDefault: Boolean) :
         .filter(Optional<Identity>::isPresent)
         .map(Optional<Identity>::get)
         .firstElement()
-        .toLiveData().observe(this, Observer {
+        .toLiveData().observe(viewLifecycleOwner, Observer {
           it?.let {
             update(it)
           }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityNicksAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityNicksAdapter.kt
index 9c93b6ed6..4bffa58ef 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityNicksAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityNicksAdapter.kt
@@ -19,6 +19,7 @@
 
 package de.kuschku.quasseldroid.ui.coresettings.identity
 
+import android.annotation.SuppressLint
 import android.view.LayoutInflater
 import android.view.MotionEvent
 import android.view.ViewGroup
@@ -26,6 +27,7 @@ import androidx.recyclerview.widget.RecyclerView
 import de.kuschku.quasseldroid.databinding.SettingsIdentityNickBinding
 import java.util.*
 
+@SuppressLint("ClickableViewAccessibility")
 class IdentityNicksAdapter(
   private val clickListener: (Int, String) -> Unit,
   private val dragListener: (IdentityNickViewHolder) -> Unit
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListAdapter.kt
index 962ffd1bd..f6242d94c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListAdapter.kt
@@ -19,6 +19,7 @@
 
 package de.kuschku.quasseldroid.ui.coresettings.ignorelist
 
+import android.annotation.SuppressLint
 import android.view.LayoutInflater
 import android.view.MotionEvent
 import android.view.ViewGroup
@@ -28,6 +29,7 @@ import de.kuschku.quasseldroid.databinding.SettingsIgnorelistItemBinding
 import de.kuschku.quasseldroid.util.helper.visibleIf
 import java.util.*
 
+@SuppressLint("ClickableViewAccessibility")
 class IgnoreListAdapter(
   private val clickListener: (IgnoreListManager.IgnoreListItem) -> Unit,
   private val dragListener: (IgnoreItemViewHolder) -> Unit
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt
index d9cd707bc..bb4b03ba5 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -90,7 +90,7 @@ class IgnoreListFragment : ServiceBoundSettingsFragment(), Savable,
     modelHelper.ignoreListManager
       .filter(Optional<IgnoreListManager>::isPresent)
       .map(Optional<IgnoreListManager>::get)
-      .toLiveData().observe(this, Observer {
+      .toLiveData().observe(viewLifecycleOwner, Observer {
         if (it != null) {
           if (this.ignoreListManager == null) {
             this.ignoreListManager = Pair(it, it.copy())
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkBaseFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkBaseFragment.kt
index 6d4bfe039..2da6c9f38 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkBaseFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkBaseFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -176,7 +176,7 @@ abstract class NetworkBaseFragment(private val initDefault: Boolean) :
       combineLatest(it.values.map(Identity::liveUpdates)).map {
         it.sortedBy(Identity::identityName)
       }
-    }.toLiveData().observe(this, Observer {
+    }.toLiveData().observe(viewLifecycleOwner, Observer {
       if (it != null) {
         val selectOriginal = identity.selectedItemId == Spinner.INVALID_ROW_ID
         identityAdapter.submitList(it)
@@ -193,7 +193,7 @@ abstract class NetworkBaseFragment(private val initDefault: Boolean) :
         .filter(Optional<ISession>::isPresent)
         .map(Optional<ISession>::get)
         .firstElement()
-        .toLiveData().observe(this, Observer {
+        .toLiveData().observe(viewLifecycleOwner, Observer {
           it?.let {
             update(Defaults.network(requireContext(), it.proxy), identityAdapter)
           }
@@ -204,7 +204,7 @@ abstract class NetworkBaseFragment(private val initDefault: Boolean) :
         .map(Optional<Network>::get)
         .firstElement()
         .toLiveData()
-        .observe(this, Observer {
+        .observe(viewLifecycleOwner, Observer {
           it?.let {
             update(it, identityAdapter)
           }
@@ -214,7 +214,7 @@ abstract class NetworkBaseFragment(private val initDefault: Boolean) :
         .map(Optional<Network>::get)
         .safeSwitchMap(Network::liveCaps)
         .toLiveData()
-        .observe(this, Observer {
+        .observe(viewLifecycleOwner, Observer {
           autoidentifyWarning.visibleIf(it.contains("sasl"))
         })
     }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkServerAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkServerAdapter.kt
index 30a2d4ff9..a414edf21 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkServerAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkServerAdapter.kt
@@ -19,6 +19,7 @@
 
 package de.kuschku.quasseldroid.ui.coresettings.network
 
+import android.annotation.SuppressLint
 import android.graphics.drawable.Drawable
 import android.view.LayoutInflater
 import android.view.MotionEvent
@@ -32,6 +33,7 @@ import de.kuschku.quasseldroid.util.helper.styledAttributes
 import de.kuschku.quasseldroid.util.helper.tint
 import java.util.*
 
+@SuppressLint("ClickableViewAccessibility", "ResourceType")
 class NetworkServerAdapter(
   private val clickListener: (INetwork.Server) -> Unit,
   private val dragListener: (NetworkServerViewHolder) -> Unit
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkconfig/NetworkConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkconfig/NetworkConfigFragment.kt
index d91aada6e..28805a4ea 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkconfig/NetworkConfigFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkconfig/NetworkConfigFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -85,7 +85,7 @@ class NetworkConfigFragment : ServiceBoundSettingsFragment(), Savable,
       .filter(Optional<NetworkConfig>::isPresent)
       .map(Optional<NetworkConfig>::get)
       .firstElement()
-      .toLiveData().observe(this, Observer {
+      .toLiveData().observe(viewLifecycleOwner, Observer {
         it?.let {
           if (this.networkConfig == null) {
             this.networkConfig = Pair(it, it.copy())
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/passwordchange/PasswordChangeFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/passwordchange/PasswordChangeFragment.kt
index 1f6c77c5e..e7c39575b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/passwordchange/PasswordChangeFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/passwordchange/PasswordChangeFragment.kt
@@ -98,7 +98,7 @@ class PasswordChangeFragment : ServiceBoundFragment() {
       .mapSwitchMap(RpcHandler::passwordChanged)
       .filter(Optional<Boolean>::isPresent)
       .map(Optional<Boolean>::get)
-      .toLiveData().observe(this, Observer {
+      .toLiveData().observe(viewLifecycleOwner, Observer {
         val waiting = this.waiting
         if (waiting != null) {
           if (it) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/info/certificate/CertificateInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/info/certificate/CertificateInfoFragment.kt
index 8e5eea990..78670aaa9 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/info/certificate/CertificateInfoFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/info/certificate/CertificateInfoFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -107,7 +107,7 @@ class CertificateInfoFragment : ServiceBoundSettingsFragment() {
 
     val dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
 
-    modelHelper.peerCertificateChain.toLiveData().observe(this, Observer {
+    modelHelper.peerCertificateChain.toLiveData().observe(viewLifecycleOwner, Observer {
       val leafCertificate = it.firstOrNull()
       if (leafCertificate != null) {
         content.visibility = View.VISIBLE
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/info/channel/ChannelInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/info/channel/ChannelInfoFragment.kt
index 6d856bbca..071de92ca 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/info/channel/ChannelInfoFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/info/channel/ChannelInfoFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -114,7 +114,7 @@ class ChannelInfoFragment : ServiceBoundFragment() {
       channel.updates().map {
         Pair(info, it)
       }
-    }.toLiveData().observe(this, Observer { (info, channel) ->
+    }.toLiveData().observe(viewLifecycleOwner, Observer { (info, channel) ->
       name.text = channel.name()
       val (content, hasSpoilers) = contentFormatter.formatContent(
         channel.topic(),
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/info/channellist/ChannelListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/info/channellist/ChannelListAdapter.kt
index d79a732d9..c6bb63cd1 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/info/channellist/ChannelListAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/info/channellist/ChannelListAdapter.kt
@@ -97,8 +97,8 @@ class ChannelListAdapter @Inject constructor(
       )
       binding.topic.text = content
       binding.users.text = itemView.context.resources.getQuantityString(R.plurals.label_user_count,
-                                                                data.userCount.toInt(),
-                                                                data.userCount.toInt())
+                                                                        data.userCount.toInt(),
+                                                                        data.userCount.toInt())
 
       this.data = data
     }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/info/channellist/ChannelListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/info/channellist/ChannelListFragment.kt
index 42e50ed15..01555f395 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/info/channellist/ChannelListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/info/channellist/ChannelListFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -44,6 +44,7 @@ import de.kuschku.quasseldroid.util.ui.settings.fragment.ServiceBoundSettingsFra
 import de.kuschku.quasseldroid.util.ui.view.MaterialContentLoadingProgressBar
 import de.kuschku.quasseldroid.util.ui.view.WarningBarView
 import de.kuschku.quasseldroid.viewmodel.helper.EditorViewModelHelper
+import io.reactivex.BackpressureStrategy
 import io.reactivex.subjects.BehaviorSubject
 import javax.inject.Inject
 
@@ -119,42 +120,46 @@ class ChannelListFragment : ServiceBoundSettingsFragment() {
     searchResults.layoutManager = LinearLayoutManager(view.context)
     searchResults.itemAnimator = DefaultItemAnimator()
 
-    combineLatest(results, sort).toLiveData().observe(this, Observer { (results, sort) ->
-      adapter.submitList(results.let {
-        when (sort.field) {
-          Sort.Field.CHANNEL_NAME -> {
-            when (sort.direction) {
-              Sort.Direction.ASC  ->
-                it.sortedBy(IrcListHelper.ChannelDescription::channelName)
-              Sort.Direction.DESC ->
-                it.sortedByDescending(IrcListHelper.ChannelDescription::channelName)
-            }
-          }
-          Sort.Field.USER_COUNT   -> {
-            when (sort.direction) {
-              Sort.Direction.ASC  ->
-                it.sortedBy(IrcListHelper.ChannelDescription::userCount)
-              Sort.Direction.DESC ->
-                it.sortedByDescending(IrcListHelper.ChannelDescription::userCount)
-            }
-          }
-          Sort.Field.TOPIC        -> {
-            when (sort.direction) {
-              Sort.Direction.ASC  ->
-                it.sortedBy(IrcListHelper.ChannelDescription::topic)
-              Sort.Direction.DESC ->
-                it.sortedByDescending(IrcListHelper.ChannelDescription::topic)
-            }
-          }
-        }
-      })
-    })
+    combineLatest(results, sort).toLiveData().observe(viewLifecycleOwner,
+                                                      Observer { (results, sort) ->
+                                                        adapter.submitList(results.let {
+                                                          when (sort.field) {
+                                                            Sort.Field.CHANNEL_NAME -> {
+                                                              when (sort.direction) {
+                                                                Sort.Direction.ASC  ->
+                                                                  it.sortedBy(IrcListHelper.ChannelDescription::channelName)
+                                                                Sort.Direction.DESC ->
+                                                                  it.sortedByDescending(
+                                                                    IrcListHelper.ChannelDescription::channelName)
+                                                              }
+                                                            }
+                                                            Sort.Field.USER_COUNT   -> {
+                                                              when (sort.direction) {
+                                                                Sort.Direction.ASC  ->
+                                                                  it.sortedBy(IrcListHelper.ChannelDescription::userCount)
+                                                                Sort.Direction.DESC ->
+                                                                  it.sortedByDescending(
+                                                                    IrcListHelper.ChannelDescription::userCount)
+                                                              }
+                                                            }
+                                                            Sort.Field.TOPIC        -> {
+                                                              when (sort.direction) {
+                                                                Sort.Direction.ASC  ->
+                                                                  it.sortedBy(IrcListHelper.ChannelDescription::topic)
+                                                                Sort.Direction.DESC ->
+                                                                  it.sortedByDescending(
+                                                                    IrcListHelper.ChannelDescription::topic)
+                                                              }
+                                                            }
+                                                          }
+                                                        })
+                                                      })
 
     modelHelper.ircListHelper
       .mapSwitchMap(IrcListHelper::observable)
       .filter(Optional<IrcListHelper.Event>::isPresent)
       .map(Optional<IrcListHelper.Event>::get)
-      .toLiveData().observe(this, Observer {
+      .toLiveData(BackpressureStrategy.BUFFER).observe(viewLifecycleOwner, Observer {
         when (it) {
           is IrcListHelper.Event.ChannelList -> {
             if (it.netId == query?.networkId) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/info/core/CoreInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/info/core/CoreInfoFragment.kt
index 6215546c3..ce5dc9f95 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/info/core/CoreInfoFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/info/core/CoreInfoFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -113,7 +113,7 @@ class CoreInfoFragment : ServiceBoundFragment() {
 
     var missingFeatureList: List<MissingFeature> = emptyList()
     combineLatest(modelHelper.coreInfo, modelHelper.coreFeatures).toLiveData()
-      .observe(this, Observer {
+      .observe(viewLifecycleOwner, Observer {
         val data = it?.first?.orNull()
         val connected = it?.second?.first
                         ?: false
@@ -163,7 +163,7 @@ class CoreInfoFragment : ServiceBoundFragment() {
       CertificateInfoActivity.launch(it.context)
     }
 
-    modelHelper.sslSession.toLiveData().observe(this, Observer {
+    modelHelper.sslSession.toLiveData().observe(viewLifecycleOwner, Observer {
       val peerCertificateChain = try {
         it?.orNull()?.peerCertificateChain
       } catch (ignored: SSLPeerUnverifiedException) {
@@ -218,7 +218,7 @@ class CoreInfoFragment : ServiceBoundFragment() {
       rpcHandler?.requestKickClient(it)
     }
     clients.adapter = adapter
-    modelHelper.coreInfoClients.toLiveData().observe(this, Observer {
+    modelHelper.coreInfoClients.toLiveData().observe(viewLifecycleOwner, Observer {
       clientsTitle.visibleIf(it?.isNotEmpty() == true)
       adapter.submitList(it)
     })
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt
index 10f728033..766524dd5 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -286,7 +286,7 @@ class UserInfoFragment : ServiceBoundFragment() {
                         ignoreItems = ignoreItems)
           }
       } ?: Observable.just(IrcUser.NULL).safeSwitchMap { user -> processUser(user, null, null) }
-    }.toLiveData().observe(this, Observer {
+    }.toLiveData().observe(viewLifecycleOwner, Observer {
       val user = it.orNull()
       if (user != null) {
         currentBufferInfo = user.info
@@ -312,7 +312,7 @@ class UserInfoFragment : ServiceBoundFragment() {
                       val avatarInfo = MatrixAvatarInfo(it, model.size)
                       val url = Uri.parse(avatarInfo.avatarUrl)
 
-                      val imageUrl = matrixApi.avatarImage(server = url.host,
+                      val imageUrl = matrixApi.avatarImage(server = url.host ?: "",
                                                            id = url.pathSegments.first()).request().url()
                       actualUrl = imageUrl.toString()
                     }
@@ -376,7 +376,7 @@ class UserInfoFragment : ServiceBoundFragment() {
                 })
               }.filter {
                 it.isNotEmpty()
-              }.firstElement().toLiveData().observe(this, Observer {
+              }.firstElement().toLiveData().observe(viewLifecycleOwner, Observer {
                 it?.firstOrNull()?.let { info ->
                   ChatActivity.launch(view.context, bufferId = info.bufferId)
                 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionSlide.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionSlide.kt
index 91dac04be..a7b9ead5a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionSlide.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionSlide.kt
@@ -83,7 +83,7 @@ class AccountSelectionSlide : SlideFragment() {
         accountViewModel.accounts.removeObserver(this)
       }
     }
-    accountViewModel.accounts.observe(this, firstObserver)
+    accountViewModel.accounts.observe(viewLifecycleOwner, firstObserver)
     accountList.layoutManager = LinearLayoutManager(context)
     accountList.itemAnimator = DefaultItemAnimator()
     accountList.adapter = adapter
@@ -100,7 +100,7 @@ class AccountSelectionSlide : SlideFragment() {
 
     accountViewModel.accounts.zip(accountViewModel.selectedItem).map { (accounts, selected) ->
       accounts.map { Pair(it, it.id == selected) }
-    }.observe(this, Observer {
+    }.observe(viewLifecycleOwner, Observer {
       adapter.submitList((it ?: emptyList()) + Pair(null, false))
     })
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/network/NetworkSetupNetworkSlide.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/network/NetworkSetupNetworkSlide.kt
index 836b7ee6a..c64653395 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/network/NetworkSetupNetworkSlide.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/network/NetworkSetupNetworkSlide.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -192,7 +192,7 @@ class NetworkSetupNetworkSlide : ServiceBoundSlideFragment() {
       combineLatest(it.values.map(Identity::liveUpdates)).map {
         it.sortedBy(Identity::identityName)
       }
-    }.toLiveData().observe(this, Observer {
+    }.toLiveData().observe(viewLifecycleOwner, Observer {
       if (it != null) {
         identityAdapter.submitList(it)
       }
@@ -202,7 +202,7 @@ class NetworkSetupNetworkSlide : ServiceBoundSlideFragment() {
       combineLatest(it.values.map(Network::liveNetworkInfo)).map {
         it.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, INetwork.NetworkInfo::networkName))
       }
-    }.toLiveData().observe(this, Observer {
+    }.toLiveData().observe(viewLifecycleOwner, Observer {
       if (it != null) {
         this.networks = it
         update()
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/avatars/MatrixDataFetcher.kt b/app/src/main/java/de/kuschku/quasseldroid/util/avatars/MatrixDataFetcher.kt
index 562c9a930..092fb03a1 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/avatars/MatrixDataFetcher.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/avatars/MatrixDataFetcher.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -59,13 +59,13 @@ class MatrixDataFetcher(
   private fun inputStreamFromAvatarInfo(info: MatrixAvatarInfo): InputStream? {
     val url = Uri.parse(info.avatarUrl)
     return if (info.size != null && info.size < 512) {
-      api.avatarThumbnail(server = url.host,
+      api.avatarThumbnail(server = url.host ?: "",
                           id = url.pathSegments.first(),
                           width = info.size,
                           height = info.size,
                           method = if (info.size > 96) "scale" else "crop")
     } else {
-      api.avatarImage(server = url.host, id = url.pathSegments.first())
+      api.avatarImage(server = url.host ?: "", id = url.pathSegments.first())
     }.execute().body()?.byteStream()
   }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/compatibility/AndroidCompatibilityUtils.kt b/app/src/main/java/de/kuschku/quasseldroid/util/compatibility/AndroidCompatibilityUtils.kt
index 53be5faf5..75fc33d18 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/compatibility/AndroidCompatibilityUtils.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/compatibility/AndroidCompatibilityUtils.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -32,12 +32,6 @@ object AndroidCompatibilityUtils {
      * @return Does the current device support KeepAlive sockets?
      */
     CompatibilityUtils.supportsKeepAlive = !isChromeBook()
-
-    /**
-     * This is used to check if the device supports SyncFlush
-     * As that feature was only added in KitKat, we just check for the device version.
-     */
-    CompatibilityUtils.supportsCompression = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
   }
 
   private fun isChromeBook(): Boolean {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/spans/ChannelLinkSpan.kt b/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/spans/ChannelLinkSpan.kt
index e9f74f26e..81f23cc15 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/spans/ChannelLinkSpan.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/spans/ChannelLinkSpan.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -30,11 +30,9 @@ class ChannelLinkSpan(
   private val text: String,
   private val highlight: Boolean
 ) : ClickableSpan() {
-  override fun updateDrawState(ds: TextPaint?) {
-    if (ds != null) {
-      if (!highlight) ds.color = ds.linkColor
-      ds.isUnderlineText = true
-    }
+  override fun updateDrawState(ds: TextPaint) {
+    if (!highlight) ds.color = ds.linkColor
+    ds.isUnderlineText = true
   }
 
   override fun onClick(widget: View) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/spans/IrcForegroundColorSpan.kt b/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/spans/IrcForegroundColorSpan.kt
index 41e20e44f..8e07dea50 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/spans/IrcForegroundColorSpan.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/spans/IrcForegroundColorSpan.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -26,11 +26,9 @@ import androidx.annotation.ColorInt
 sealed class IrcForegroundColorSpan<T : IrcForegroundColorSpan<T>>(@ColorInt color: Int) :
   ForegroundColorSpan(color), Copyable<T> {
 
-  override fun updateDrawState(ds: TextPaint?) {
-    if (ds != null) {
-      ds.color = foregroundColor
-      ds.linkColor = foregroundColor
-    }
+  override fun updateDrawState(ds: TextPaint) {
+    ds.color = foregroundColor
+    ds.linkColor = foregroundColor
   }
 
   class MIRC(private val mircColor: Int, @ColorInt color: Int) :
@@ -45,6 +43,10 @@ sealed class IrcForegroundColorSpan<T : IrcForegroundColorSpan<T>>(@ColorInt col
       is MIRC -> other.mircColor == mircColor
       else    -> false
     }
+
+    override fun hashCode(): Int {
+      return mircColor
+    }
   }
 
   class HEX(@ColorInt color: Int) :
@@ -58,5 +60,9 @@ sealed class IrcForegroundColorSpan<T : IrcForegroundColorSpan<T>>(@ColorInt col
       is HEX -> other.foregroundColor == foregroundColor
       else   -> false
     }
+
+    override fun hashCode(): Int {
+      return foregroundColor
+    }
   }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/spans/QuasselURLSpan.kt b/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/spans/QuasselURLSpan.kt
index cb16a9a88..d13cffac9 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/spans/QuasselURLSpan.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/spans/QuasselURLSpan.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -28,11 +28,9 @@ import android.util.Log
 import android.view.View
 
 class QuasselURLSpan(text: String, private val highlight: Boolean) : URLSpan(text) {
-  override fun updateDrawState(ds: TextPaint?) {
-    if (ds != null) {
-      if (!highlight) ds.color = ds.linkColor
-      ds.isUnderlineText = true
-    }
+  override fun updateDrawState(ds: TextPaint) {
+    if (!highlight) ds.color = ds.linkColor
+    ds.isUnderlineText = true
   }
 
   override fun onClick(widget: View) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/service/BackendServiceConnection.kt b/app/src/main/java/de/kuschku/quasseldroid/util/service/BackendServiceConnection.kt
index e0750736f..4bcaa70ee 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/service/BackendServiceConnection.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/service/BackendServiceConnection.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -55,7 +55,7 @@ class BackendServiceConnection : ServiceConnection, DefaultLifecycleObserver {
 
   override fun onServiceConnected(component: ComponentName?, binder: IBinder?) {
     when (component) {
-      ComponentName(context, QuasselService::class.java) ->
+      ComponentName(context!!, QuasselService::class.java) ->
         if (binder is QuasselBinder) {
           synchronized(this@BackendServiceConnection) {
             state = State.BOUND
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/ContextThemeWrapper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/ContextThemeWrapper.kt
index eb1828dd2..98713df9d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/ContextThemeWrapper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/ContextThemeWrapper.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -24,7 +24,6 @@ import android.content.ContextWrapper
 import android.content.res.AssetManager
 import android.content.res.Configuration
 import android.content.res.Resources
-import android.os.Build
 import android.view.LayoutInflater
 import androidx.annotation.StyleRes
 import de.kuschku.quasseldroid.R
@@ -119,12 +118,9 @@ open class ContextThemeWrapper : ContextWrapper {
   private val resourcesInternal: Resources?
     get() {
       if (mResources == null) {
-        if (overrideConfiguration == null) {
-          mResources = super.getResources()
-        } else if (Build.VERSION.SDK_INT >= 17) {
-          val resContext = createConfigurationContext(overrideConfiguration)
-          mResources = resContext.resources
-        }
+        mResources = overrideConfiguration?.let {
+          createConfigurationContext(it).resources
+        } ?: super.getResources()
       }
       return mResources
     }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/LinkLongClickMenuHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/LinkLongClickMenuHelper.kt
index a39f2cf14..8e4dfb835 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/LinkLongClickMenuHelper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/LinkLongClickMenuHelper.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -42,8 +42,7 @@ class LinkLongClickMenuHelper :
           when (it.itemId) {
             R.id.action_copy  -> {
               val clipboard = anchor.context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
-              val clip = ClipData.newPlainText(null, url)
-              clipboard.primaryClip = clip
+              clipboard.setPrimaryClip(ClipData.newPlainText(null, url))
               menu.dismiss()
               linkMenu = null
               true
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/LocaleHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/LocaleHelper.kt
index 8d8b221e1..216e9ca16 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/LocaleHelper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/LocaleHelper.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -21,7 +21,6 @@ package de.kuschku.quasseldroid.util.ui
 
 import android.content.Context
 import android.content.res.Configuration
-import android.os.Build
 import de.kuschku.quasseldroid.settings.Settings
 import java.util.*
 
@@ -43,15 +42,8 @@ object LocaleHelper {
   private fun updateResources(context: Context, language: String) = if (language.isNotEmpty()) {
     val locale = parseLanguageCode(language)
     Locale.setDefault(locale)
-
-    val config = Configuration(context.resources.configuration)
-    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
-      config.setLocale(locale)
-      context.createConfigurationContext(config)
-    } else {
-      config.locale = locale
-      context.resources.updateConfiguration(config, context.resources.displayMetrics)
-      context
-    }
+    context.createConfigurationContext(Configuration(context.resources.configuration).apply {
+      setLocale(locale)
+    })
   } else context
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/fastscroll/utils/Utils.java b/app/src/main/java/de/kuschku/quasseldroid/util/ui/fastscroll/utils/Utils.java
index d1c548b41..fe3557af6 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/fastscroll/utils/Utils.java
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/fastscroll/utils/Utils.java
@@ -16,9 +16,7 @@
 
 package de.kuschku.quasseldroid.util.ui.fastscroll.utils;
 
-import android.annotation.TargetApi;
 import android.content.res.Resources;
-import android.os.Build;
 import android.util.TypedValue;
 import android.view.View;
 
@@ -46,9 +44,7 @@ public class Utils {
     return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, res.getDisplayMetrics());
   }
 
-  @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
   public static boolean isRtl(Resources res) {
-    return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) &&
-      (res.getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL);
+    return res.getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
   }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/InlineSnackBar.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/InlineSnackBar.kt
index 3634df9dd..d2dbc3151 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/InlineSnackBar.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/InlineSnackBar.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -80,7 +80,7 @@ class InlineSnackBar : FrameLayout {
     button.setOnClickListener(listener)
   }
 
-  override fun setOnClickListener(listener: View.OnClickListener) {
+  override fun setOnClickListener(listener: OnClickListener?) {
     button.setOnClickListener(listener)
   }
 }
diff --git a/app/src/main/res/drawable-v21/bg_menuitem_rounded_dark.xml b/app/src/main/res/drawable-v21/bg_menuitem_rounded_dark.xml
index 95f876f57..fa3e24dfe 100644
--- a/app/src/main/res/drawable-v21/bg_menuitem_rounded_dark.xml
+++ b/app/src/main/res/drawable-v21/bg_menuitem_rounded_dark.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -20,16 +20,16 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_selected="true">
     <shape android:shape="rectangle">
-      <solid android:color="@color/ripple_dark" />
       <corners android:radius="@dimen/button_corner_radius" />
+      <solid android:color="@color/ripple_dark" />
     </shape>
   </item>
   <item>
     <ripple android:color="@color/ripple_dark">
       <item android:id="@android:id/mask">
         <shape>
-          <solid android:color="#fff" />
           <corners android:radius="@dimen/button_corner_radius" />
+          <solid android:color="#fff" />
         </shape>
       </item>
     </ripple>
diff --git a/app/src/main/res/drawable-v21/bg_menuitem_rounded_light.xml b/app/src/main/res/drawable-v21/bg_menuitem_rounded_light.xml
index 8131c5530..fdc934f88 100644
--- a/app/src/main/res/drawable-v21/bg_menuitem_rounded_light.xml
+++ b/app/src/main/res/drawable-v21/bg_menuitem_rounded_light.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -20,16 +20,16 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_selected="true">
     <shape>
-      <solid android:color="@color/ripple_light" />
       <corners android:radius="@dimen/button_corner_radius" />
+      <solid android:color="@color/ripple_light" />
     </shape>
   </item>
   <item>
     <ripple android:color="@color/ripple_light">
       <item android:id="@android:id/mask">
         <shape>
-          <solid android:color="#fff" />
           <corners android:radius="@dimen/button_corner_radius" />
+          <solid android:color="#fff" />
         </shape>
       </item>
     </ripple>
diff --git a/app/src/main/res/drawable/bg_badge.xml b/app/src/main/res/drawable/bg_badge.xml
index 001b34bc2..2ccf20f53 100644
--- a/app/src/main/res/drawable/bg_badge.xml
+++ b/app/src/main/res/drawable/bg_badge.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -18,11 +18,11 @@
   -->
 
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
-  <solid />
+  <corners android:radius="16dp" />
   <padding
     android:bottom="4dp"
     android:left="8dp"
     android:right="8dp"
     android:top="4dp" />
-  <corners android:radius="16dp" />
+  <solid />
 </shape>
diff --git a/app/src/main/res/drawable/bg_menuitem_rounded_dark.xml b/app/src/main/res/drawable/bg_menuitem_rounded_dark.xml
index a68dff2d0..d632e1afb 100644
--- a/app/src/main/res/drawable/bg_menuitem_rounded_dark.xml
+++ b/app/src/main/res/drawable/bg_menuitem_rounded_dark.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -20,14 +20,14 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_selected="true">
     <shape android:shape="rectangle">
-      <solid android:color="@color/ripple_dark" />
       <corners android:radius="@dimen/button_corner_radius" />
+      <solid android:color="@color/ripple_dark" />
     </shape>
   </item>
   <item android:state_pressed="true">
     <shape android:shape="rectangle">
-      <solid android:color="@color/ripple_dark" />
       <corners android:radius="@dimen/button_corner_radius" />
+      <solid android:color="@color/ripple_dark" />
     </shape>
   </item>
 </selector>
diff --git a/app/src/main/res/drawable/bg_menuitem_rounded_light.xml b/app/src/main/res/drawable/bg_menuitem_rounded_light.xml
index 8a4b8f227..cc57283dd 100644
--- a/app/src/main/res/drawable/bg_menuitem_rounded_light.xml
+++ b/app/src/main/res/drawable/bg_menuitem_rounded_light.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -20,14 +20,14 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_selected="true">
     <shape android:shape="rectangle">
-      <solid android:color="@color/ripple_light" />
       <corners android:radius="@dimen/button_corner_radius" />
+      <solid android:color="@color/ripple_light" />
     </shape>
   </item>
   <item android:state_pressed="true">
     <shape android:shape="rectangle">
-      <solid android:color="@color/ripple_light" />
       <corners android:radius="@dimen/button_corner_radius" />
+      <solid android:color="@color/ripple_light" />
     </shape>
   </item>
 </selector>
diff --git a/app/src/main/res/layout-land/layout_main.xml b/app/src/main/res/layout-land/layout_main.xml
index 0b0b96f4d..d06b68b31 100644
--- a/app/src/main/res/layout-land/layout_main.xml
+++ b/app/src/main/res/layout-land/layout_main.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -24,20 +24,35 @@
   android:layout_height="match_parent"
   android:gravity="bottom">
 
+  <LinearLayout
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    app:layout_anchor="@id/fragment_chatline"
+    app:layout_anchorGravity="top">
+
+    <Space
+      android:layout_width="match_parent"
+      android:layout_height="@dimen/shadow_height" />
+
+    <de.kuschku.quasseldroid.util.ui.view.ShadowView
+      android:layout_width="match_parent"
+      android:layout_height="@dimen/shadow_height"
+      android:gravity="bottom" />
+  </LinearLayout>
+
   <androidx.coordinatorlayout.widget.CoordinatorLayout
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_marginBottom="?actionBarSize"
     android:orientation="vertical">
 
-    <include layout="@layout/layout_toolbar" />
-
     <FrameLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
-      <fragment
+      <androidx.fragment.app.FragmentContainerView
         android:id="@+id/fragment_messages"
         android:name="de.kuschku.quasseldroid.ui.chat.messages.MessageListFragment"
         android:layout_width="match_parent"
@@ -61,26 +76,11 @@
       app:behavior_peekHeight="92dp"
       app:layout_behavior="@string/bottom_sheet_behavior"
       tools:listitem="@layout/widget_nick" />
-  </androidx.coordinatorlayout.widget.CoordinatorLayout>
-
-  <LinearLayout
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical"
-    app:layout_anchor="@id/fragment_chatline"
-    app:layout_anchorGravity="top">
 
-    <de.kuschku.quasseldroid.util.ui.view.ShadowView
-      android:layout_width="match_parent"
-      android:layout_height="@dimen/shadow_height"
-      android:gravity="bottom" />
-
-    <Space
-      android:layout_width="match_parent"
-      android:layout_height="@dimen/shadow_height" />
-  </LinearLayout>
+    <include layout="@layout/layout_toolbar" />
+  </androidx.coordinatorlayout.widget.CoordinatorLayout>
 
-  <fragment
+  <androidx.fragment.app.FragmentContainerView
     android:id="@+id/fragment_chatline"
     android:name="de.kuschku.quasseldroid.ui.chat.input.ChatlineFragment"
     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout-sw600dp-land/activity_setup.xml b/app/src/main/res/layout-sw600dp-land/activity_setup.xml
index fa9648b72..11b005eea 100644
--- a/app/src/main/res/layout-sw600dp-land/activity_setup.xml
+++ b/app/src/main/res/layout-sw600dp-land/activity_setup.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -23,11 +23,6 @@
   android:layout_width="match_parent"
   android:layout_height="match_parent">
 
-  <androidx.viewpager.widget.ViewPager
-    android:id="@+id/view_pager"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent" />
-
   <androidx.appcompat.widget.ActionMenuView
     android:id="@+id/menu_view"
     android:layout_width="56dp"
@@ -35,6 +30,11 @@
     android:layout_gravity="end|top"
     android:theme="?attr/actionBarPopupTheme" />
 
+  <androidx.viewpager.widget.ViewPager
+    android:id="@+id/view_pager"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" />
+
   <com.google.android.material.floatingactionbutton.FloatingActionButton
     android:id="@+id/next_button"
     style="@style/Widget.MaterialComponents.FloatingActionButton"
diff --git a/app/src/main/res/layout-sw600dp-land/layout_main.xml b/app/src/main/res/layout-sw600dp-land/layout_main.xml
index 57fabed1a..636281d14 100644
--- a/app/src/main/res/layout-sw600dp-land/layout_main.xml
+++ b/app/src/main/res/layout-sw600dp-land/layout_main.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -25,13 +25,28 @@
   android:fitsSystemWindows="true"
   android:orientation="vertical">
 
-  <include layout="@layout/layout_toolbar" />
-
   <androidx.coordinatorlayout.widget.CoordinatorLayout
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:gravity="bottom">
 
+    <LinearLayout
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:orientation="vertical"
+      app:layout_anchor="@id/fragment_chatline"
+      app:layout_anchorGravity="top">
+
+      <Space
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/shadow_height" />
+
+      <de.kuschku.quasseldroid.util.ui.view.ShadowView
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/shadow_height"
+        android:gravity="bottom" />
+    </LinearLayout>
+
     <androidx.coordinatorlayout.widget.CoordinatorLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
@@ -43,7 +58,7 @@
         android:layout_height="match_parent"
         app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
-        <fragment
+        <androidx.fragment.app.FragmentContainerView
           android:id="@+id/fragment_messages"
           android:name="de.kuschku.quasseldroid.ui.chat.messages.MessageListFragment"
           android:layout_width="match_parent"
@@ -69,24 +84,7 @@
         tools:listitem="@layout/widget_nick" />
     </androidx.coordinatorlayout.widget.CoordinatorLayout>
 
-    <LinearLayout
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:orientation="vertical"
-      app:layout_anchor="@id/fragment_chatline"
-      app:layout_anchorGravity="top">
-
-      <de.kuschku.quasseldroid.util.ui.view.ShadowView
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/shadow_height"
-        android:gravity="bottom" />
-
-      <Space
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/shadow_height" />
-    </LinearLayout>
-
-    <fragment
+    <androidx.fragment.app.FragmentContainerView
       android:id="@+id/fragment_chatline"
       android:name="de.kuschku.quasseldroid.ui.chat.input.ChatlineFragment"
       android:layout_width="match_parent"
@@ -98,4 +96,6 @@
 
   </androidx.coordinatorlayout.widget.CoordinatorLayout>
 
+  <include layout="@layout/layout_toolbar" />
+
 </LinearLayout>
diff --git a/app/src/main/res/layout-sw600dp-land/setup_slide.xml b/app/src/main/res/layout-sw600dp-land/setup_slide.xml
index 323ea47c2..b75aa4476 100644
--- a/app/src/main/res/layout-sw600dp-land/setup_slide.xml
+++ b/app/src/main/res/layout-sw600dp-land/setup_slide.xml
@@ -3,8 +3,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -35,6 +35,11 @@
     android:layout_weight="1"
     android:orientation="vertical">
 
+    <Space
+      android:layout_width="match_parent"
+      android:layout_height="8dp"
+      android:layout_gravity="end" />
+
     <TextView
       android:id="@+id/title"
       style="@style/Widget.RtlConformTextView"
@@ -46,11 +51,6 @@
       android:textSize="28sp"
       tools:text="Connection" />
 
-    <Space
-      android:layout_width="match_parent"
-      android:layout_height="8dp"
-      android:layout_gravity="end" />
-
     <TextView
       android:id="@+id/description"
       style="@style/Widget.RtlConformTextView"
diff --git a/app/src/main/res/layout-sw600dp/activity_setup.xml b/app/src/main/res/layout-sw600dp/activity_setup.xml
index fa9648b72..11b005eea 100644
--- a/app/src/main/res/layout-sw600dp/activity_setup.xml
+++ b/app/src/main/res/layout-sw600dp/activity_setup.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -23,11 +23,6 @@
   android:layout_width="match_parent"
   android:layout_height="match_parent">
 
-  <androidx.viewpager.widget.ViewPager
-    android:id="@+id/view_pager"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent" />
-
   <androidx.appcompat.widget.ActionMenuView
     android:id="@+id/menu_view"
     android:layout_width="56dp"
@@ -35,6 +30,11 @@
     android:layout_gravity="end|top"
     android:theme="?attr/actionBarPopupTheme" />
 
+  <androidx.viewpager.widget.ViewPager
+    android:id="@+id/view_pager"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" />
+
   <com.google.android.material.floatingactionbutton.FloatingActionButton
     android:id="@+id/next_button"
     style="@style/Widget.MaterialComponents.FloatingActionButton"
diff --git a/app/src/main/res/layout-sw720dp-land/activity_main.xml b/app/src/main/res/layout-sw720dp-land/activity_main.xml
index c67a18280..023c8a0d0 100644
--- a/app/src/main/res/layout-sw720dp-land/activity_main.xml
+++ b/app/src/main/res/layout-sw720dp-land/activity_main.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -30,18 +30,17 @@
     android:layout_height="match_parent"
     android:orientation="horizontal">
 
-    <fragment
-      android:id="@+id/fragment_chat_list"
-      android:name="de.kuschku.quasseldroid.ui.chat.buffers.BufferViewConfigFragment"
-      android:layout_width="320dp"
-      android:layout_height="match_parent"
-      tools:layout="@layout/chat_chatlist" />
-
     <LinearLayout
       android:layout_width="1dp"
       android:layout_height="match_parent"
       android:orientation="vertical">
 
+      <View
+        android:layout_width="1dp"
+        android:layout_height="0dip"
+        android:layout_weight="1"
+        android:background="?colorDivider" />
+
       <com.google.android.material.appbar.AppBarLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -54,18 +53,19 @@
           app:popupTheme="?attr/actionBarPopupTheme" />
 
       </com.google.android.material.appbar.AppBarLayout>
-
-      <View
-        android:layout_width="1dp"
-        android:layout_height="0dip"
-        android:layout_weight="1"
-        android:background="?colorDivider" />
     </LinearLayout>
 
+    <androidx.fragment.app.FragmentContainerView
+      android:id="@+id/fragment_chat_list"
+      android:name="de.kuschku.quasseldroid.ui.chat.buffers.BufferViewConfigFragment"
+      android:layout_width="320dp"
+      android:layout_height="match_parent"
+      tools:layout="@layout/chat_chatlist" />
+
     <include layout="@layout/layout_main" />
   </LinearLayout>
 
-  <fragment
+  <androidx.fragment.app.FragmentContainerView
     android:id="@+id/fragment_nick_list"
     android:name="de.kuschku.quasseldroid.ui.chat.nicks.NickListFragment"
     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/activity_drawable.xml b/app/src/main/res/layout/activity_drawable.xml
index bc2aed944..9a6db6a5a 100644
--- a/app/src/main/res/layout/activity_drawable.xml
+++ b/app/src/main/res/layout/activity_drawable.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -31,6 +31,13 @@
     android:fitsSystemWindows="true"
     android:orientation="vertical">
 
+    <androidx.appcompat.widget.AppCompatImageView
+      android:id="@+id/imageView"
+      android:layout_width="match_parent"
+      android:layout_height="match_parent"
+      android:layout_gravity="center"
+      android:scaleType="fitCenter" />
+
     <com.google.android.material.appbar.AppBarLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
@@ -44,13 +51,6 @@
         app:popupTheme="?attr/actionBarPopupTheme" />
 
     </com.google.android.material.appbar.AppBarLayout>
-
-    <androidx.appcompat.widget.AppCompatImageView
-      android:id="@+id/imageView"
-      android:layout_width="match_parent"
-      android:layout_height="match_parent"
-      android:layout_gravity="center"
-      android:scaleType="fitCenter" />
   </LinearLayout>
 
   <de.kuschku.quasseldroid.util.ui.view.NavigationDrawerLayout
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 3c337b60a..e0fd20629 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -25,9 +25,7 @@
   android:layout_height="match_parent"
   android:fitsSystemWindows="true">
 
-  <include layout="@layout/layout_main" />
-
-  <fragment
+  <androidx.fragment.app.FragmentContainerView
     android:id="@+id/fragment_nick_list"
     android:name="de.kuschku.quasseldroid.ui.chat.nicks.NickListFragment"
     android:layout_width="match_parent"
@@ -43,11 +41,13 @@
     android:fitsSystemWindows="true"
     app:insetBackground="?attr/colorPrimaryDark">
 
-    <fragment
+    <androidx.fragment.app.FragmentContainerView
       android:id="@+id/fragment_chat_list"
       android:name="de.kuschku.quasseldroid.ui.chat.buffers.BufferViewConfigFragment"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       tools:layout="@layout/chat_chatlist" />
   </de.kuschku.quasseldroid.util.ui.view.NavigationDrawerLayout>
+
+  <include layout="@layout/layout_main" />
 </androidx.drawerlayout.widget.DrawerLayout>
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index 0b296746f..448c8b4ee 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -29,6 +29,11 @@
     android:fitsSystemWindows="true"
     android:orientation="vertical">
 
+    <FrameLayout
+      android:id="@+id/fragment_container"
+      android:layout_width="match_parent"
+      android:layout_height="match_parent" />
+
     <com.google.android.material.appbar.AppBarLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
@@ -42,11 +47,6 @@
         app:popupTheme="?attr/actionBarPopupTheme" />
 
     </com.google.android.material.appbar.AppBarLayout>
-
-    <FrameLayout
-      android:id="@+id/fragment_container"
-      android:layout_width="match_parent"
-      android:layout_height="match_parent" />
   </LinearLayout>
 
 </androidx.drawerlayout.widget.DrawerLayout>
diff --git a/app/src/main/res/layout/activity_setup.xml b/app/src/main/res/layout/activity_setup.xml
index dffcab092..c73c20cbb 100644
--- a/app/src/main/res/layout/activity_setup.xml
+++ b/app/src/main/res/layout/activity_setup.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -23,11 +23,6 @@
   android:layout_width="match_parent"
   android:layout_height="match_parent">
 
-  <androidx.viewpager.widget.ViewPager
-    android:id="@+id/view_pager"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent" />
-
   <androidx.appcompat.widget.ActionMenuView
     android:id="@+id/menu_view"
     android:layout_width="56dp"
@@ -35,6 +30,11 @@
     android:layout_gravity="end|top"
     android:theme="?attr/actionBarPopupTheme" />
 
+  <androidx.viewpager.widget.ViewPager
+    android:id="@+id/view_pager"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" />
+
   <com.google.android.material.floatingactionbutton.FloatingActionButton
     android:id="@+id/next_button"
     style="@style/Widget.MaterialComponents.FloatingActionButton"
diff --git a/app/src/main/res/layout/add_create.xml b/app/src/main/res/layout/add_create.xml
index a144dd89a..0d7fb60cd 100644
--- a/app/src/main/res/layout/add_create.xml
+++ b/app/src/main/res/layout/add_create.xml
@@ -3,8 +3,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -37,32 +37,6 @@
 
       <LinearLayout style="@style/Widget.CoreSettings.Wrapper">
 
-        <de.kuschku.ui.spinner.MaterialSpinnerLayout
-          style="@style/Widget.CustomSpinnerLayout"
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:hint="@string/label_network">
-
-          <androidx.appcompat.widget.AppCompatSpinner
-            android:id="@+id/network"
-            style="@style/Widget.MaterialSpinner"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            tools:listitem="@layout/widget_spinner_item_material" />
-        </de.kuschku.ui.spinner.MaterialSpinnerLayout>
-
-        <com.google.android.material.textfield.TextInputLayout
-          style="@style/Widget.CustomTextInput"
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:hint="@string/label_channel_name">
-
-          <com.google.android.material.textfield.TextInputEditText
-            android:id="@+id/name"
-            style="@style/Widget.CoreSettings.EditText"
-            tools:text="#trees" />
-        </com.google.android.material.textfield.TextInputLayout>
-
         <LinearLayout
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
@@ -127,6 +101,32 @@
               tools:text="NickServ" />
           </com.google.android.material.textfield.TextInputLayout>
         </LinearLayout>
+
+        <com.google.android.material.textfield.TextInputLayout
+          style="@style/Widget.CustomTextInput"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          android:hint="@string/label_channel_name">
+
+          <com.google.android.material.textfield.TextInputEditText
+            android:id="@+id/name"
+            style="@style/Widget.CoreSettings.EditText"
+            tools:text="#trees" />
+        </com.google.android.material.textfield.TextInputLayout>
+
+        <de.kuschku.ui.spinner.MaterialSpinnerLayout
+          style="@style/Widget.CustomSpinnerLayout"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          android:hint="@string/label_network">
+
+          <androidx.appcompat.widget.AppCompatSpinner
+            android:id="@+id/network"
+            style="@style/Widget.MaterialSpinner"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            tools:listitem="@layout/widget_spinner_item_material" />
+        </de.kuschku.ui.spinner.MaterialSpinnerLayout>
       </LinearLayout>
     </androidx.core.widget.NestedScrollView>
 
diff --git a/app/src/main/res/layout/add_join.xml b/app/src/main/res/layout/add_join.xml
index 718051091..d2b475c60 100644
--- a/app/src/main/res/layout/add_join.xml
+++ b/app/src/main/res/layout/add_join.xml
@@ -3,8 +3,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -32,6 +32,18 @@
 
     <LinearLayout style="@style/Widget.CoreSettings.Wrapper">
 
+      <com.google.android.material.textfield.TextInputLayout
+        style="@style/Widget.CustomTextInput"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:hint="@string/label_channel_name">
+
+        <com.google.android.material.textfield.TextInputEditText
+          android:id="@+id/name"
+          style="@style/Widget.CoreSettings.EditText"
+          tools:text="#trees" />
+      </com.google.android.material.textfield.TextInputLayout>
+
       <de.kuschku.ui.spinner.MaterialSpinnerLayout
         style="@style/Widget.CustomSpinnerLayout"
         android:layout_width="match_parent"
@@ -45,18 +57,6 @@
           android:layout_height="wrap_content"
           tools:listitem="@layout/widget_spinner_item_material" />
       </de.kuschku.ui.spinner.MaterialSpinnerLayout>
-
-      <com.google.android.material.textfield.TextInputLayout
-        style="@style/Widget.CustomTextInput"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:hint="@string/label_channel_name">
-
-        <com.google.android.material.textfield.TextInputEditText
-          android:id="@+id/name"
-          style="@style/Widget.CoreSettings.EditText"
-          tools:text="#trees" />
-      </com.google.android.material.textfield.TextInputLayout>
     </LinearLayout>
 
     <de.kuschku.quasseldroid.util.ui.view.ShadowView
diff --git a/app/src/main/res/layout/add_query.xml b/app/src/main/res/layout/add_query.xml
index 5b0e620bf..8023ff206 100644
--- a/app/src/main/res/layout/add_query.xml
+++ b/app/src/main/res/layout/add_query.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -35,6 +35,18 @@
 
       <LinearLayout style="@style/Widget.CoreSettings.Wrapper">
 
+        <com.google.android.material.textfield.TextInputLayout
+          style="@style/Widget.CustomTextInput"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          android:hint="@string/label_nick">
+
+          <com.google.android.material.textfield.TextInputEditText
+            android:id="@+id/name"
+            style="@style/Widget.CoreSettings.EditText"
+            tools:text="justJanne" />
+        </com.google.android.material.textfield.TextInputLayout>
+
         <de.kuschku.ui.spinner.MaterialSpinnerLayout
           style="@style/Widget.CustomSpinnerLayout"
           android:layout_width="match_parent"
@@ -48,18 +60,6 @@
             android:layout_height="wrap_content"
             tools:listitem="@layout/widget_spinner_item_material" />
         </de.kuschku.ui.spinner.MaterialSpinnerLayout>
-
-        <com.google.android.material.textfield.TextInputLayout
-          style="@style/Widget.CustomTextInput"
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:hint="@string/label_nick">
-
-          <com.google.android.material.textfield.TextInputEditText
-            android:id="@+id/name"
-            style="@style/Widget.CoreSettings.EditText"
-            tools:text="justJanne" />
-        </com.google.android.material.textfield.TextInputLayout>
       </LinearLayout>
 
       <de.kuschku.quasseldroid.util.ui.fastscroll.views.FastScrollRecyclerView
diff --git a/app/src/main/res/layout/chat_channel_join.xml b/app/src/main/res/layout/chat_channel_join.xml
index c4b8e98c0..d545b333b 100644
--- a/app/src/main/res/layout/chat_channel_join.xml
+++ b/app/src/main/res/layout/chat_channel_join.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -24,20 +24,6 @@
   android:layout_height="match_parent"
   android:orientation="vertical">
 
-  <de.kuschku.ui.spinner.MaterialSpinnerLayout
-    style="@style/Widget.CustomSpinnerLayout"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:hint="@string/label_network">
-
-    <androidx.appcompat.widget.AppCompatSpinner
-      android:id="@+id/network"
-      style="@style/Widget.MaterialSpinner"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      tools:listitem="@layout/widget_spinner_item_material" />
-  </de.kuschku.ui.spinner.MaterialSpinnerLayout>
-
   <androidx.cardview.widget.CardView
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
@@ -100,6 +86,13 @@
 
   </androidx.cardview.widget.CardView>
 
+  <de.kuschku.quasseldroid.util.ui.fastscroll.views.FastScrollRecyclerView
+    android:id="@+id/search_results"
+    style="@style/Widget.FastScroller"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:listitem="@layout/widget_channel_search" />
+
   <de.kuschku.quasseldroid.util.ui.view.WarningBarView
     android:id="@+id/error"
     android:layout_width="match_parent"
@@ -107,11 +100,18 @@
     app:icon="@drawable/ic_alert"
     app:mode="none" />
 
-  <de.kuschku.quasseldroid.util.ui.fastscroll.views.FastScrollRecyclerView
-    android:id="@+id/search_results"
-    style="@style/Widget.FastScroller"
+  <de.kuschku.ui.spinner.MaterialSpinnerLayout
+    style="@style/Widget.CustomSpinnerLayout"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:listitem="@layout/widget_channel_search" />
+    android:layout_height="wrap_content"
+    android:hint="@string/label_network">
+
+    <androidx.appcompat.widget.AppCompatSpinner
+      android:id="@+id/network"
+      style="@style/Widget.MaterialSpinner"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      tools:listitem="@layout/widget_spinner_item_material" />
+  </de.kuschku.ui.spinner.MaterialSpinnerLayout>
 
 </LinearLayout>
diff --git a/app/src/main/res/layout/chat_chatlist.xml b/app/src/main/res/layout/chat_chatlist.xml
index 4627ab8a1..05b835739 100644
--- a/app/src/main/res/layout/chat_chatlist.xml
+++ b/app/src/main/res/layout/chat_chatlist.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -28,6 +28,22 @@
     android:layout_height="wrap_content"
     android:theme="?attr/actionBarTheme">
 
+    <LinearLayout
+      android:layout_width="match_parent"
+      android:layout_height="match_parent"
+      android:orientation="vertical"
+      app:layout_behavior="@string/appbar_scrolling_view_behavior">
+
+      <de.kuschku.quasseldroid.util.ui.view.WarningBarView
+        android:id="@+id/feature_context_bufferactivitysync"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:icon="@drawable/ic_alert"
+        app:text="@string/label_feature_context_bufferactivitysync" />
+
+      <include layout="@layout/widget_search" />
+    </LinearLayout>
+
     <androidx.appcompat.widget.Toolbar
       android:id="@+id/chatListToolbar"
       android:layout_width="match_parent"
@@ -47,32 +63,8 @@
 
     </androidx.appcompat.widget.Toolbar>
 
-    <LinearLayout
-      android:layout_width="match_parent"
-      android:layout_height="match_parent"
-      android:orientation="vertical"
-      app:layout_behavior="@string/appbar_scrolling_view_behavior">
-
-      <include layout="@layout/widget_search" />
-
-      <de.kuschku.quasseldroid.util.ui.view.WarningBarView
-        android:id="@+id/feature_context_bufferactivitysync"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        app:icon="@drawable/ic_alert"
-        app:text="@string/label_feature_context_bufferactivitysync" />
-    </LinearLayout>
-
   </com.google.android.material.appbar.AppBarLayout>
 
-  <de.kuschku.quasseldroid.util.ui.fastscroll.views.FastScrollRecyclerView
-    android:id="@+id/chatList"
-    style="@style/Widget.FastScroller"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    app:layout_behavior="@string/appbar_scrolling_view_behavior"
-    tools:listitem="@layout/widget_buffer" />
-
   <com.leinardi.android.speeddial.SpeedDialOverlayLayout
     android:id="@+id/fab_chatlist_overlay"
     android:layout_width="match_parent"
@@ -89,4 +81,12 @@
     app:sdMainFabClosedSrc="@drawable/ic_add"
     app:sdOverlayLayout="@id/fab_chatlist_overlay" />
 
+  <de.kuschku.quasseldroid.util.ui.fastscroll.views.FastScrollRecyclerView
+    android:id="@+id/chatList"
+    style="@style/Widget.FastScroller"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    app:layout_behavior="@string/appbar_scrolling_view_behavior"
+    tools:listitem="@layout/widget_buffer" />
+
 </androidx.coordinatorlayout.widget.CoordinatorLayout>
diff --git a/app/src/main/res/layout/chat_messages.xml b/app/src/main/res/layout/chat_messages.xml
index ff8a713fe..3ee860ba4 100644
--- a/app/src/main/res/layout/chat_messages.xml
+++ b/app/src/main/res/layout/chat_messages.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -46,7 +46,6 @@
     android:layout_height="wrap_content"
     android:layout_gravity="end|bottom"
     android:layout_marginEnd="12dp"
-    android:layout_marginRight="12dp"
     android:layout_marginBottom="12dp"
     android:tint="@color/colorFillDark"
     android:visibility="gone"
diff --git a/app/src/main/res/layout/chat_toolbar.xml b/app/src/main/res/layout/chat_toolbar.xml
index 202fdaa43..81187243f 100644
--- a/app/src/main/res/layout/chat_toolbar.xml
+++ b/app/src/main/res/layout/chat_toolbar.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -32,17 +32,6 @@
   android:theme="?attr/actionBarTheme"
   tools:showIn="@layout/activity_main">
 
-  <androidx.appcompat.widget.AppCompatImageView
-    android:id="@+id/toolbar_icon"
-    android:layout_width="@dimen/avatar_size_buffer"
-    android:layout_height="@dimen/avatar_size_buffer"
-    android:layout_gravity="center_vertical"
-    android:layout_marginEnd="8dp"
-    android:layout_marginRight="8dp"
-    android:visibility="gone"
-    tools:src="@tools:sample/avatars"
-    tools:visibility="visible" />
-
   <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -82,4 +71,14 @@
       android:visibility="gone" />
 
   </LinearLayout>
+
+  <androidx.appcompat.widget.AppCompatImageView
+    android:id="@+id/toolbar_icon"
+    android:layout_width="@dimen/avatar_size_buffer"
+    android:layout_height="@dimen/avatar_size_buffer"
+    android:layout_gravity="center_vertical"
+    android:layout_marginEnd="8dp"
+    android:visibility="gone"
+    tools:src="@tools:sample/avatars"
+    tools:visibility="visible" />
 </LinearLayout>
diff --git a/app/src/main/res/layout/dialog_colorchooser_custom.xml b/app/src/main/res/layout/dialog_colorchooser_custom.xml
index 657fc7331..87eb234b1 100644
--- a/app/src/main/res/layout/dialog_colorchooser_custom.xml
+++ b/app/src/main/res/layout/dialog_colorchooser_custom.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -27,12 +27,6 @@
   android:paddingBottom="@dimen/md_title_frame_margin_bottom"
   tools:ignore="PrivateResource">
 
-  <View
-    android:id="@+id/md_colorIndicator"
-    android:layout_width="match_parent"
-    android:layout_height="120dp"
-    tools:background="@color/md_material_blue_600" />
-
   <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
@@ -40,17 +34,6 @@
     android:layout_marginTop="@dimen/md_title_frame_margin_bottom"
     android:gravity="center">
 
-    <TextView
-      android:layout_width="wrap_content"
-      android:layout_height="wrap_content"
-      android:layout_marginEnd="2dp"
-      android:layout_marginRight="2dp"
-      android:digits="0123456789abcdefABCDEF"
-      android:text="#"
-      android:textColor="?colorTextPrimary"
-      android:textSize="@dimen/md_title_textsize"
-      tools:ignore="HardcodedText,TextViewEdits" />
-
     <EditText
       android:id="@+id/md_hexInput"
       android:layout_width="wrap_content"
@@ -64,6 +47,16 @@
       android:textSize="@dimen/md_title_textsize"
       tools:ignore="HardcodedText" />
 
+    <TextView
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_marginEnd="2dp"
+      android:digits="0123456789abcdefABCDEF"
+      android:text="#"
+      android:textColor="?colorTextPrimary"
+      android:textSize="@dimen/md_title_textsize"
+      tools:ignore="HardcodedText,TextViewEdits" />
+
   </LinearLayout>
 
   <RelativeLayout
@@ -75,6 +68,39 @@
 
     <!-- Alpha -->
 
+    <SeekBar
+      android:id="@+id/md_colorA"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:layout_marginTop="@dimen/md_title_frame_margin_bottom"
+      android:layout_toStartOf="@+id/md_colorAValue"
+      android:layout_toEndOf="@+id/md_colorALabel"
+      android:focusable="true"
+      android:max="255" />
+
+    <SeekBar
+      android:id="@+id/md_colorG"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:layout_below="@+id/md_colorR"
+      android:layout_marginTop="@dimen/md_title_frame_margin_bottom"
+      android:layout_toStartOf="@+id/md_colorGValue"
+      android:layout_toEndOf="@+id/md_colorGLabel"
+      android:focusable="true"
+      android:max="255" />
+
+    <SeekBar
+      android:id="@+id/md_colorB"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:layout_below="@+id/md_colorG"
+      android:layout_marginTop="@dimen/md_title_frame_margin_bottom"
+      android:layout_toStartOf="@+id/md_colorBValue"
+      android:layout_toEndOf="@+id/md_colorBLabel"
+      android:max="255" />
+
+    <!-- Red -->
+
     <TextView
       android:id="@+id/md_colorALabel"
       android:layout_width="wrap_content"
@@ -82,24 +108,11 @@
       android:layout_alignTop="@+id/md_colorA"
       android:layout_alignBottom="@+id/md_colorA"
       android:layout_marginEnd="4dp"
-      android:layout_marginRight="4dp"
       android:text="A"
       android:textColor="?colorTextPrimary"
       android:textSize="@dimen/md_content_textsize"
       tools:ignore="HardcodedText" />
 
-    <SeekBar
-      android:id="@+id/md_colorA"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:layout_marginTop="@dimen/md_title_frame_margin_bottom"
-      android:layout_toStartOf="@+id/md_colorAValue"
-      android:layout_toLeftOf="@+id/md_colorAValue"
-      android:layout_toEndOf="@+id/md_colorALabel"
-      android:layout_toRightOf="@+id/md_colorALabel"
-      android:focusable="true"
-      android:max="255" />
-
     <TextView
       android:id="@+id/md_colorAValue"
       android:layout_width="wrap_content"
@@ -107,9 +120,7 @@
       android:layout_alignTop="@+id/md_colorA"
       android:layout_alignBottom="@+id/md_colorA"
       android:layout_alignParentEnd="true"
-      android:layout_alignParentRight="true"
       android:layout_marginStart="4dp"
-      android:layout_marginLeft="4dp"
       android:gravity="center"
       android:minWidth="24dp"
       android:text="0"
@@ -117,8 +128,6 @@
       android:textSize="@dimen/md_content_textsize"
       tools:ignore="HardcodedText" />
 
-    <!-- Red -->
-
     <TextView
       android:id="@+id/md_colorRLabel"
       android:layout_width="wrap_content"
@@ -126,24 +135,12 @@
       android:layout_alignTop="@+id/md_colorR"
       android:layout_alignBottom="@+id/md_colorR"
       android:layout_marginEnd="4dp"
-      android:layout_marginRight="4dp"
       android:text="R"
       android:textColor="?colorTextPrimary"
       android:textSize="@dimen/md_content_textsize"
       tools:ignore="HardcodedText" />
 
-    <androidx.appcompat.widget.AppCompatSeekBar
-      android:id="@+id/md_colorR"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:layout_below="@+id/md_colorA"
-      android:layout_marginTop="@dimen/md_title_frame_margin_bottom"
-      android:layout_toStartOf="@+id/md_colorRValue"
-      android:layout_toLeftOf="@+id/md_colorRValue"
-      android:layout_toEndOf="@+id/md_colorRLabel"
-      android:layout_toRightOf="@+id/md_colorRLabel"
-      android:focusable="true"
-      android:max="255" />
+    <!-- Green -->
 
     <TextView
       android:id="@+id/md_colorRValue"
@@ -152,9 +149,7 @@
       android:layout_alignTop="@+id/md_colorR"
       android:layout_alignBottom="@+id/md_colorR"
       android:layout_alignParentEnd="true"
-      android:layout_alignParentRight="true"
       android:layout_marginStart="4dp"
-      android:layout_marginLeft="4dp"
       android:gravity="center"
       android:minWidth="24dp"
       android:text="0"
@@ -162,8 +157,6 @@
       android:textSize="@dimen/md_content_textsize"
       tools:ignore="HardcodedText" />
 
-    <!-- Green -->
-
     <TextView
       android:id="@+id/md_colorGLabel"
       android:layout_width="wrap_content"
@@ -171,25 +164,11 @@
       android:layout_alignTop="@+id/md_colorG"
       android:layout_alignBottom="@+id/md_colorG"
       android:layout_marginEnd="4dp"
-      android:layout_marginRight="4dp"
       android:text="G"
       android:textColor="?colorTextPrimary"
       android:textSize="@dimen/md_content_textsize"
       tools:ignore="HardcodedText" />
 
-    <SeekBar
-      android:id="@+id/md_colorG"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:layout_below="@+id/md_colorR"
-      android:layout_marginTop="@dimen/md_title_frame_margin_bottom"
-      android:layout_toStartOf="@+id/md_colorGValue"
-      android:layout_toLeftOf="@+id/md_colorGValue"
-      android:layout_toEndOf="@+id/md_colorGLabel"
-      android:layout_toRightOf="@+id/md_colorGLabel"
-      android:focusable="true"
-      android:max="255" />
-
     <TextView
       android:id="@+id/md_colorGValue"
       android:layout_width="wrap_content"
@@ -197,9 +176,7 @@
       android:layout_alignTop="@+id/md_colorG"
       android:layout_alignBottom="@+id/md_colorG"
       android:layout_alignParentEnd="true"
-      android:layout_alignParentRight="true"
       android:layout_marginStart="4dp"
-      android:layout_marginLeft="4dp"
       android:gravity="center"
       android:minWidth="24dp"
       android:text="0"
@@ -216,24 +193,11 @@
       android:layout_alignTop="@+id/md_colorB"
       android:layout_alignBottom="@+id/md_colorB"
       android:layout_marginEnd="4dp"
-      android:layout_marginRight="4dp"
       android:text="B"
       android:textColor="?colorTextPrimary"
       android:textSize="@dimen/md_content_textsize"
       tools:ignore="HardcodedText" />
 
-    <SeekBar
-      android:id="@+id/md_colorB"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:layout_below="@+id/md_colorG"
-      android:layout_marginTop="@dimen/md_title_frame_margin_bottom"
-      android:layout_toStartOf="@+id/md_colorBValue"
-      android:layout_toLeftOf="@+id/md_colorBValue"
-      android:layout_toEndOf="@+id/md_colorBLabel"
-      android:layout_toRightOf="@+id/md_colorBLabel"
-      android:max="255" />
-
     <TextView
       android:id="@+id/md_colorBValue"
       android:layout_width="wrap_content"
@@ -241,9 +205,7 @@
       android:layout_alignTop="@+id/md_colorB"
       android:layout_alignBottom="@+id/md_colorB"
       android:layout_alignParentEnd="true"
-      android:layout_alignParentRight="true"
       android:layout_marginStart="4dp"
-      android:layout_marginLeft="4dp"
       android:gravity="center"
       android:minWidth="24dp"
       android:text="0"
@@ -251,6 +213,23 @@
       android:textSize="@dimen/md_content_textsize"
       tools:ignore="HardcodedText" />
 
+    <androidx.appcompat.widget.AppCompatSeekBar
+      android:id="@+id/md_colorR"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:layout_below="@+id/md_colorA"
+      android:layout_marginTop="@dimen/md_title_frame_margin_bottom"
+      android:layout_toStartOf="@+id/md_colorRValue"
+      android:layout_toEndOf="@+id/md_colorRLabel"
+      android:focusable="true"
+      android:max="255" />
+
   </RelativeLayout>
 
+  <View
+    android:id="@+id/md_colorIndicator"
+    android:layout_width="match_parent"
+    android:layout_height="120dp"
+    tools:background="@color/md_material_blue_600" />
+
 </LinearLayout>
diff --git a/app/src/main/res/layout/dialog_missing_features.xml b/app/src/main/res/layout/dialog_missing_features.xml
index 5723f6bc6..fc8988e99 100644
--- a/app/src/main/res/layout/dialog_missing_features.xml
+++ b/app/src/main/res/layout/dialog_missing_features.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -36,10 +36,8 @@
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:paddingStart="?listPreferredItemPaddingLeft"
-      android:paddingLeft="?listPreferredItemPaddingLeft"
       android:paddingTop="8dp"
       android:paddingEnd="?listPreferredItemPaddingRight"
-      android:paddingRight="?listPreferredItemPaddingRight"
       android:paddingBottom="8dp"
       android:textColor="?colorTextPrimary"
       android:textSize="16sp" />
diff --git a/app/src/main/res/layout/info_certificate.xml b/app/src/main/res/layout/info_certificate.xml
index 7a65e992c..033850119 100644
--- a/app/src/main/res/layout/info_certificate.xml
+++ b/app/src/main/res/layout/info_certificate.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -24,6 +24,21 @@
   android:layout_width="match_parent"
   android:layout_height="match_parent">
 
+  <TextView
+    android:id="@+id/error"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center"
+    android:gravity="center"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:paddingStart="?listPreferredItemPaddingLeft"
+    android:paddingEnd="?listPreferredItemPaddingRight"
+    android:text="@string/label_error_certificate_no_certificate"
+    android:textColor="?colorTextSecondary"
+    android:textStyle="italic"
+    android:visibility="gone"
+    tools:visibility="visible" />
+
   <androidx.core.widget.NestedScrollView
     android:id="@+id/content"
     android:layout_width="match_parent"
@@ -37,13 +52,13 @@
 
       <LinearLayout style="@style/Widget.CoreSettings.PrimaryItemGroupHeader">
 
-        <androidx.appcompat.widget.AppCompatImageView
-          style="@style/Widget.CoreSettings.PrimaryItemIcon"
-          app:srcCompat="@drawable/ic_account" />
-
         <TextView
           style="@style/Widget.CoreSettings.PrimaryItemSwitch"
           android:text="@string/certificate_subject" />
+
+        <androidx.appcompat.widget.AppCompatImageView
+          style="@style/Widget.CoreSettings.PrimaryItemIcon"
+          app:srcCompat="@drawable/ic_account" />
       </LinearLayout>
 
       <LinearLayout
@@ -104,13 +119,13 @@
 
       <LinearLayout style="@style/Widget.CoreSettings.PrimaryItemGroupHeader">
 
-        <androidx.appcompat.widget.AppCompatImageView
-          style="@style/Widget.CoreSettings.PrimaryItemIcon"
-          app:srcCompat="@drawable/ic_domain" />
-
         <TextView
           style="@style/Widget.CoreSettings.PrimaryItemSwitch"
           android:text="@string/certificate_issuer" />
+
+        <androidx.appcompat.widget.AppCompatImageView
+          style="@style/Widget.CoreSettings.PrimaryItemIcon"
+          app:srcCompat="@drawable/ic_domain" />
       </LinearLayout>
 
       <LinearLayout
@@ -157,13 +172,13 @@
 
       <LinearLayout style="@style/Widget.CoreSettings.PrimaryItemGroupHeader">
 
-        <androidx.appcompat.widget.AppCompatImageView
-          style="@style/Widget.CoreSettings.PrimaryItemIcon"
-          app:srcCompat="@drawable/ic_clock" />
-
         <TextView
           style="@style/Widget.CoreSettings.PrimaryItemSwitch"
           android:text="@string/certificate_validity" />
+
+        <androidx.appcompat.widget.AppCompatImageView
+          style="@style/Widget.CoreSettings.PrimaryItemIcon"
+          app:srcCompat="@drawable/ic_clock" />
       </LinearLayout>
 
       <LinearLayout style="@style/Widget.CoreSettings.PrimaryItemGroup">
@@ -192,13 +207,13 @@
 
       <LinearLayout style="@style/Widget.CoreSettings.PrimaryItemGroupHeader">
 
-        <androidx.appcompat.widget.AppCompatImageView
-          style="@style/Widget.CoreSettings.PrimaryItemIcon"
-          app:srcCompat="@drawable/ic_fingerprint" />
-
         <TextView
           style="@style/Widget.CoreSettings.PrimaryItemSwitch"
           android:text="@string/certificate_fingerprints" />
+
+        <androidx.appcompat.widget.AppCompatImageView
+          style="@style/Widget.CoreSettings.PrimaryItemIcon"
+          app:srcCompat="@drawable/ic_fingerprint" />
       </LinearLayout>
 
       <LinearLayout style="@style/Widget.CoreSettings.PrimaryItemGroup">
@@ -230,21 +245,4 @@
         android:layout_height="16dp" />
     </LinearLayout>
   </androidx.core.widget.NestedScrollView>
-
-  <TextView
-    android:id="@+id/error"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:layout_gravity="center"
-    android:gravity="center"
-    android:minHeight="?android:attr/listPreferredItemHeightSmall"
-    android:paddingStart="?listPreferredItemPaddingLeft"
-    android:paddingLeft="?listPreferredItemPaddingLeft"
-    android:paddingEnd="?listPreferredItemPaddingRight"
-    android:paddingRight="?listPreferredItemPaddingRight"
-    android:text="@string/label_error_certificate_no_certificate"
-    android:textColor="?colorTextSecondary"
-    android:textStyle="italic"
-    android:visibility="gone"
-    tools:visibility="visible" />
 </FrameLayout>
diff --git a/app/src/main/res/layout/info_channel.xml b/app/src/main/res/layout/info_channel.xml
index eb212ddff..1a9b1cd88 100644
--- a/app/src/main/res/layout/info_channel.xml
+++ b/app/src/main/res/layout/info_channel.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -29,26 +29,6 @@
     android:animateLayoutChanges="true"
     android:orientation="vertical">
 
-    <LinearLayout style="@style/Widget.Info.Header">
-
-      <TextView
-        android:id="@+id/name"
-        style="@style/Widget.Info.Header.Name"
-        android:textIsSelectable="true"
-        tools:text="#quassel" />
-
-      <TextView
-        android:id="@+id/topic"
-        style="@style/Widget.Info.Header.Description"
-        android:textIsSelectable="true"
-        tools:text="Quassel IRC - https://quassel-irc.org || Latest: 0.12.4 || Mailing Lists: https://lists.quassel-irc.org || Tracker: https://bugs.quassel-irc.org || Activity RSS: #quassel-announce || German: #quassel.de || Quassel on Android: #quasseldroid; on iOS: #woboquassel || Server migration complete; new IPs may still need some time to propagate" />
-    </LinearLayout>
-
-    <View
-      android:layout_width="match_parent"
-      android:layout_height="1dp"
-      android:background="?colorDivider" />
-
     <HorizontalScrollView
       android:layout_width="match_parent"
       android:layout_height="wrap_content">
@@ -57,9 +37,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
-        android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
-        android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
-        android:paddingRight="?android:attr/listPreferredItemPaddingRight">
+        android:paddingEnd="?android:attr/listPreferredItemPaddingRight">
 
         <androidx.appcompat.widget.AppCompatButton
           android:id="@+id/action_edit_topic"
@@ -105,6 +83,26 @@
       </LinearLayout>
     </HorizontalScrollView>
 
+    <LinearLayout style="@style/Widget.Info.Header">
+
+      <TextView
+        android:id="@+id/name"
+        style="@style/Widget.Info.Header.Name"
+        android:textIsSelectable="true"
+        tools:text="#quassel" />
+
+      <TextView
+        android:id="@+id/topic"
+        style="@style/Widget.Info.Header.Description"
+        android:textIsSelectable="true"
+        tools:text="Quassel IRC - https://quassel-irc.org || Latest: 0.12.4 || Mailing Lists: https://lists.quassel-irc.org || Tracker: https://bugs.quassel-irc.org || Activity RSS: #quassel-announce || German: #quassel.de || Quassel on Android: #quasseldroid; on iOS: #woboquassel || Server migration complete; new IPs may still need some time to propagate" />
+    </LinearLayout>
+
+    <View
+      android:layout_width="match_parent"
+      android:layout_height="1dp"
+      android:background="?colorDivider" />
+
     <View
       android:layout_width="match_parent"
       android:layout_height="1dp"
diff --git a/app/src/main/res/layout/info_channellist.xml b/app/src/main/res/layout/info_channellist.xml
index 729984627..8152430a5 100644
--- a/app/src/main/res/layout/info_channellist.xml
+++ b/app/src/main/res/layout/info_channellist.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -86,13 +86,6 @@
 
   </androidx.cardview.widget.CardView>
 
-  <de.kuschku.quasseldroid.util.ui.view.WarningBarView
-    android:id="@+id/error"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    app:icon="@drawable/ic_alert"
-    app:mode="none" />
-
   <de.kuschku.quasseldroid.util.ui.fastscroll.views.FastScrollRecyclerView
     android:id="@+id/search_results"
     style="@style/Widget.FastScroller"
@@ -100,4 +93,11 @@
     android:layout_height="match_parent"
     tools:listitem="@layout/widget_channel_search" />
 
+  <de.kuschku.quasseldroid.util.ui.view.WarningBarView
+    android:id="@+id/error"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    app:icon="@drawable/ic_alert"
+    app:mode="none" />
+
 </LinearLayout>
diff --git a/app/src/main/res/layout/info_core.xml b/app/src/main/res/layout/info_core.xml
index 66cd5feae..1601dcaac 100644
--- a/app/src/main/res/layout/info_core.xml
+++ b/app/src/main/res/layout/info_core.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -30,10 +30,6 @@
     android:animateLayoutChanges="true"
     android:orientation="vertical">
 
-    <TextView
-      style="@style/Widget.Info.Section"
-      android:text="@string/label_core_version" />
-
     <LinearLayout style="@style/Widget.Info.Item">
 
       <TextView
@@ -56,15 +52,6 @@
         android:text="@string/label_missing_features" />
     </LinearLayout>
 
-    <View
-      android:layout_width="match_parent"
-      android:layout_height="1dp"
-      android:background="?colorDivider" />
-
-    <TextView
-      style="@style/Widget.Info.Section"
-      android:text="@string/label_core_uptime" />
-
     <LinearLayout
       android:id="@+id/uptime_container"
       style="@style/Widget.Info.Item"
@@ -77,15 +64,6 @@
         tools:text="30 minutes" />
     </LinearLayout>
 
-    <View
-      android:layout_width="match_parent"
-      android:layout_height="1dp"
-      android:background="?colorDivider" />
-
-    <TextView
-      style="@style/Widget.Info.Section"
-      android:text="@string/label_core_security" />
-
     <LinearLayout
       style="@style/Widget.Info.Item"
       android:orientation="vertical">
@@ -108,7 +86,6 @@
           android:layout_height="24dp"
           android:layout_gravity="center"
           android:layout_marginStart="16dp"
-          android:layout_marginLeft="16dp"
           app:srcCompat="@drawable/ic_lock" />
 
       </LinearLayout>
@@ -132,10 +109,17 @@
         android:text="@string/label_info" />
     </LinearLayout>
 
-    <View
-      android:layout_width="match_parent"
-      android:layout_height="1dp"
-      android:background="?colorDivider" />
+    <TextView
+      style="@style/Widget.Info.Section"
+      android:text="@string/label_core_version" />
+
+    <TextView
+      style="@style/Widget.Info.Section"
+      android:text="@string/label_core_uptime" />
+
+    <TextView
+      style="@style/Widget.Info.Section"
+      android:text="@string/label_core_security" />
 
     <TextView
       android:id="@+id/clients_title"
@@ -144,6 +128,21 @@
       android:visibility="gone"
       tools:visibility="visible" />
 
+    <View
+      android:layout_width="match_parent"
+      android:layout_height="1dp"
+      android:background="?colorDivider" />
+
+    <View
+      android:layout_width="match_parent"
+      android:layout_height="1dp"
+      android:background="?colorDivider" />
+
+    <View
+      android:layout_width="match_parent"
+      android:layout_height="1dp"
+      android:background="?colorDivider" />
+
     <androidx.recyclerview.widget.RecyclerView
       android:id="@+id/clients"
       android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/info_user.xml b/app/src/main/res/layout/info_user.xml
index 546e62612..d5dd6c57e 100644
--- a/app/src/main/res/layout/info_user.xml
+++ b/app/src/main/res/layout/info_user.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -23,40 +23,6 @@
   android:layout_width="match_parent"
   android:layout_height="match_parent">
 
-  <com.google.android.material.appbar.AppBarLayout
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:background="#40000000"
-    app:elevation="0dip">
-
-    <com.google.android.material.appbar.CollapsingToolbarLayout
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      app:layout_scrollFlags="scroll">
-
-      <androidx.constraintlayout.widget.ConstraintLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        app:layout_collapseMode="parallax">
-
-        <ImageView
-          android:id="@+id/avatar"
-          android:layout_width="0dp"
-          android:layout_height="0dp"
-          android:adjustViewBounds="true"
-          android:contentDescription="@string/label_avatar"
-          android:scaleType="centerCrop"
-          app:layout_constraintDimensionRatio="1:1"
-          app:layout_constraintEnd_toEndOf="parent"
-          app:layout_constraintStart_toStartOf="parent"
-          app:layout_constraintTop_toTopOf="parent"
-          tools:src="@tools:sample/avatars" />
-
-      </androidx.constraintlayout.widget.ConstraintLayout>
-
-    </com.google.android.material.appbar.CollapsingToolbarLayout>
-  </com.google.android.material.appbar.AppBarLayout>
-
   <androidx.core.widget.NestedScrollView
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -68,27 +34,8 @@
       android:layout_height="match_parent"
       android:animateLayoutChanges="true"
       android:elevation="4dp"
-      android:orientation="vertical">
-
-      <LinearLayout style="@style/Widget.Info.Header">
-
-        <TextView
-          android:id="@+id/nick"
-          style="@style/Widget.Info.Header.Name"
-          android:textIsSelectable="true"
-          tools:text="justJanne" />
-
-        <TextView
-          android:id="@+id/real_name"
-          style="@style/Widget.Info.Header.Description"
-          android:textIsSelectable="true"
-          tools:text="Janne Mareike Koschinski https://kuschku.de/" />
-      </LinearLayout>
-
-      <View
-        android:layout_width="match_parent"
-        android:layout_height="1dp"
-        android:background="?colorDivider" />
+      android:orientation="vertical"
+      tools:ignore="UnusedAttribute">
 
       <HorizontalScrollView
         android:layout_width="match_parent"
@@ -98,9 +45,7 @@
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
-          android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
-          android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
-          android:paddingRight="?android:attr/listPreferredItemPaddingRight">
+          android:paddingEnd="?android:attr/listPreferredItemPaddingRight">
 
           <androidx.appcompat.widget.AppCompatButton
             android:id="@+id/action_query"
@@ -144,10 +89,20 @@
         </LinearLayout>
       </HorizontalScrollView>
 
-      <View
-        android:layout_width="match_parent"
-        android:layout_height="1dp"
-        android:background="?colorDivider" />
+      <LinearLayout style="@style/Widget.Info.Header">
+
+        <TextView
+          android:id="@+id/nick"
+          style="@style/Widget.Info.Header.Name"
+          android:textIsSelectable="true"
+          tools:text="justJanne" />
+
+        <TextView
+          android:id="@+id/real_name"
+          style="@style/Widget.Info.Header.Description"
+          android:textIsSelectable="true"
+          tools:text="Janne Mareike Koschinski https://kuschku.de/" />
+      </LinearLayout>
 
       <LinearLayout
         android:id="@+id/away_container"
@@ -157,10 +112,6 @@
         android:visibility="gone"
         tools:visibility="visible">
 
-        <TextView
-          style="@style/Widget.Info.Section"
-          android:text="@string/label_user_away" />
-
         <LinearLayout style="@style/Widget.Info.Item">
 
           <TextView
@@ -174,16 +125,16 @@
             android:text="@string/label_user_away_reason" />
         </LinearLayout>
 
+        <TextView
+          style="@style/Widget.Info.Section"
+          android:text="@string/label_user_away" />
+
         <View
           android:layout_width="match_parent"
           android:layout_height="1dp"
           android:background="?colorDivider" />
       </LinearLayout>
 
-      <TextView
-        style="@style/Widget.Info.Section"
-        android:text="@string/label_user_identity" />
-
       <LinearLayout
         android:id="@+id/account_container"
         style="@style/Widget.Info.Item"
@@ -252,14 +203,62 @@
           android:text="@string/label_user_server" />
       </LinearLayout>
 
+      <TextView
+        style="@style/Widget.Info.Section"
+        android:text="@string/label_user_identity" />
+
       <TextView
         style="@style/Widget.Info.Section"
         android:text="@string/label_user_common_channels" />
 
+      <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="?colorDivider" />
+
+      <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="?colorDivider" />
+
       <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/common_channels"
         android:layout_width="match_parent"
         android:layout_height="wrap_content" />
     </LinearLayout>
   </androidx.core.widget.NestedScrollView>
+
+  <com.google.android.material.appbar.AppBarLayout
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="#40000000"
+    app:elevation="0dip">
+
+    <com.google.android.material.appbar.CollapsingToolbarLayout
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      app:layout_scrollFlags="scroll">
+
+      <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:layout_collapseMode="parallax">
+
+        <ImageView
+          android:id="@+id/avatar"
+          android:layout_width="0dp"
+          android:layout_height="0dp"
+          android:adjustViewBounds="true"
+          android:contentDescription="@string/label_avatar"
+          android:scaleType="centerCrop"
+          app:layout_constraintDimensionRatio="1:1"
+          app:layout_constraintEnd_toEndOf="parent"
+          app:layout_constraintStart_toStartOf="parent"
+          app:layout_constraintTop_toTopOf="parent"
+          tools:src="@tools:sample/avatars" />
+
+      </androidx.constraintlayout.widget.ConstraintLayout>
+
+    </com.google.android.material.appbar.CollapsingToolbarLayout>
+  </com.google.android.material.appbar.AppBarLayout>
 </androidx.coordinatorlayout.widget.CoordinatorLayout>
diff --git a/app/src/main/res/layout/layout_editor.xml b/app/src/main/res/layout/layout_editor.xml
index 39910170a..a4a85dc52 100644
--- a/app/src/main/res/layout/layout_editor.xml
+++ b/app/src/main/res/layout/layout_editor.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -51,6 +51,23 @@
         app:srcCompat="@drawable/ic_tab"
         app:tint="?attr/colorTextSecondary" />
 
+      <androidx.appcompat.widget.AppCompatImageButton
+        android:id="@+id/send"
+        style="?attr/buttonStyleSmall"
+        android:layout_width="?attr/actionBarSize"
+        android:layout_height="?attr/actionBarSize"
+        android:layout_gravity="top"
+        android:autoMirrored="true"
+        android:background="?attr/selectableItemBackgroundBorderless"
+        android:contentDescription="@string/label_send"
+        android:padding="12dp"
+        android:scaleType="fitXY"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/ic_send"
+        app:tint="?attr/colorAccent"
+        tools:ignore="UnusedAttribute" />
+
       <de.kuschku.quasseldroid.util.ui.FixedNestingScrollView
         android:id="@+id/chatline_scroller"
         android:layout_width="0dip"
@@ -75,23 +92,6 @@
           android:textColor="?attr/colorForeground"
           android:textSize="16sp" />
       </de.kuschku.quasseldroid.util.ui.FixedNestingScrollView>
-
-      <androidx.appcompat.widget.AppCompatImageButton
-        android:id="@+id/send"
-        style="?attr/buttonStyleSmall"
-        android:layout_width="?attr/actionBarSize"
-        android:layout_height="?attr/actionBarSize"
-        android:layout_gravity="top"
-        android:autoMirrored="true"
-        android:background="?attr/selectableItemBackgroundBorderless"
-        android:contentDescription="@string/label_send"
-        android:padding="12dp"
-        android:scaleType="fitXY"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
-        app:srcCompat="@drawable/ic_send"
-        app:tint="?attr/colorAccent"
-        tools:ignore="UnusedAttribute" />
     </LinearLayout>
 
     <androidx.recyclerview.widget.RecyclerView
diff --git a/app/src/main/res/layout/layout_history.xml b/app/src/main/res/layout/layout_history.xml
index 51aad6722..88b196732 100644
--- a/app/src/main/res/layout/layout_history.xml
+++ b/app/src/main/res/layout/layout_history.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -48,6 +48,11 @@
         android:layout_height="48dp"
         android:orientation="horizontal">
 
+        <Space
+          android:layout_width="0dip"
+          android:layout_height="match_parent"
+          android:layout_weight="1" />
+
         <TextView
           style="@style/Widget.RtlConformTextView"
           android:layout_width="wrap_content"
@@ -59,11 +64,6 @@
           android:textAppearance="@style/TextAppearance.AppCompat.Body2"
           android:textColor="?attr/colorForegroundSecondary" />
 
-        <Space
-          android:layout_width="0dip"
-          android:layout_height="match_parent"
-          android:layout_weight="1" />
-
         <androidx.appcompat.widget.AppCompatImageButton
           android:id="@+id/close"
           android:layout_width="48dp"
diff --git a/app/src/main/res/layout/layout_main.xml b/app/src/main/res/layout/layout_main.xml
index eb90da74a..109bb17b3 100644
--- a/app/src/main/res/layout/layout_main.xml
+++ b/app/src/main/res/layout/layout_main.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -25,13 +25,28 @@
   android:fitsSystemWindows="true"
   android:orientation="vertical">
 
-  <include layout="@layout/layout_toolbar" />
-
   <androidx.coordinatorlayout.widget.CoordinatorLayout
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:gravity="bottom">
 
+    <LinearLayout
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:orientation="vertical"
+      app:layout_anchor="@id/fragment_chatline"
+      app:layout_anchorGravity="top">
+
+      <Space
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/shadow_height" />
+
+      <de.kuschku.quasseldroid.util.ui.view.ShadowView
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/shadow_height"
+        android:gravity="bottom" />
+    </LinearLayout>
+
     <androidx.coordinatorlayout.widget.CoordinatorLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
@@ -43,7 +58,7 @@
         android:layout_height="match_parent"
         app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
-        <fragment
+        <androidx.fragment.app.FragmentContainerView
           android:id="@+id/fragment_messages"
           android:name="de.kuschku.quasseldroid.ui.chat.messages.MessageListFragment"
           android:layout_width="match_parent"
@@ -70,24 +85,7 @@
         tools:listitem="@layout/widget_nick" />
     </androidx.coordinatorlayout.widget.CoordinatorLayout>
 
-    <LinearLayout
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:orientation="vertical"
-      app:layout_anchor="@id/fragment_chatline"
-      app:layout_anchorGravity="top">
-
-      <de.kuschku.quasseldroid.util.ui.view.ShadowView
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/shadow_height"
-        android:gravity="bottom" />
-
-      <Space
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/shadow_height" />
-    </LinearLayout>
-
-    <fragment
+    <androidx.fragment.app.FragmentContainerView
       android:id="@+id/fragment_chatline"
       android:name="de.kuschku.quasseldroid.ui.chat.input.ChatlineFragment"
       android:layout_width="match_parent"
@@ -99,4 +97,6 @@
 
   </androidx.coordinatorlayout.widget.CoordinatorLayout>
 
+  <include layout="@layout/layout_toolbar" />
+
 </LinearLayout>
diff --git a/app/src/main/res/layout/layout_toolbar.xml b/app/src/main/res/layout/layout_toolbar.xml
index d03bd6765..e256cc20f 100644
--- a/app/src/main/res/layout/layout_toolbar.xml
+++ b/app/src/main/res/layout/layout_toolbar.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -36,7 +36,7 @@
       app:contentInsetStartWithNavigation="0dp"
       app:popupTheme="?attr/actionBarPopupTheme">
 
-      <fragment
+      <androidx.fragment.app.FragmentContainerView
         android:id="@+id/fragment_toolbar"
         android:name="de.kuschku.quasseldroid.ui.chat.ToolbarFragment"
         android:layout_width="fill_parent"
diff --git a/app/src/main/res/layout/preference_seekbar.xml b/app/src/main/res/layout/preference_seekbar.xml
index ab04415bf..e29a6d01e 100644
--- a/app/src/main/res/layout/preference_seekbar.xml
+++ b/app/src/main/res/layout/preference_seekbar.xml
@@ -21,19 +21,10 @@
   android:gravity="center_vertical"
   android:orientation="horizontal"
   android:paddingStart="15dp"
-  android:paddingLeft="15dp"
   android:paddingTop="5dp"
   android:paddingEnd="10dp"
-  android:paddingRight="10dp"
   android:paddingBottom="5dp">
 
-  <androidx.appcompat.widget.AppCompatSeekBar
-    android:id="@+id/seekBarPrefSeekBar"
-    android:layout_width="0dip"
-    android:layout_height="wrap_content"
-    android:layout_gravity="bottom"
-    android:layout_weight="1" />
-
   <TextView
     android:id="@+id/seekBarPrefUnitsRight"
     android:layout_width="wrap_content"
@@ -51,4 +42,11 @@
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     tools:text="$" />
+
+  <androidx.appcompat.widget.AppCompatSeekBar
+    android:id="@+id/seekBarPrefSeekBar"
+    android:layout_width="0dip"
+    android:layout_height="wrap_content"
+    android:layout_gravity="bottom"
+    android:layout_weight="1" />
 </LinearLayout>
diff --git a/app/src/main/res/layout/preference_vertical.xml b/app/src/main/res/layout/preference_vertical.xml
index f18ce94e7..92a25068c 100644
--- a/app/src/main/res/layout/preference_vertical.xml
+++ b/app/src/main/res/layout/preference_vertical.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -29,24 +29,19 @@
   android:gravity="center_vertical"
   android:minHeight="?android:attr/listPreferredItemHeightSmall"
   android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
-  android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
-  android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
-  android:paddingRight="?android:attr/listPreferredItemPaddingRight">
+  android:paddingEnd="?android:attr/listPreferredItemPaddingRight">
 
   <FrameLayout
     android:id="@+id/icon_frame"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_marginStart="-4dp"
-    android:layout_marginLeft="-4dp"
     android:gravity="start|center_vertical"
     android:minWidth="60dp"
     android:orientation="horizontal"
     android:paddingStart="0dp"
-    android:paddingLeft="0dp"
     android:paddingTop="4dp"
     android:paddingEnd="12dp"
-    android:paddingRight="12dp"
     android:paddingBottom="4dp">
 
     <androidx.appcompat.widget.AppCompatImageView
@@ -67,15 +62,11 @@
     android:paddingTop="16dp"
     android:paddingBottom="16dp">
 
-    <TextView
-      android:id="@android:id/title"
-      android:layout_width="wrap_content"
+    <LinearLayout
+      android:id="@android:id/widget_frame"
+      android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:ellipsize="marquee"
-      android:singleLine="true"
-      android:textColor="?colorTextPrimary"
-      android:textSize="16sp"
-      tools:text="Font Size" />
+      android:orientation="vertical" />
 
     <TextView
       android:id="@android:id/summary"
@@ -86,10 +77,14 @@
       android:textAppearance="?android:attr/textAppearanceSmall"
       android:textColor="?colorTextSecondary" />
 
-    <LinearLayout
-      android:id="@android:id/widget_frame"
-      android:layout_width="match_parent"
+    <TextView
+      android:id="@android:id/title"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
-      android:orientation="vertical" />
+      android:ellipsize="marquee"
+      android:singleLine="true"
+      android:textColor="?colorTextPrimary"
+      android:textSize="16sp"
+      tools:text="Font Size" />
   </LinearLayout>
 </LinearLayout>
diff --git a/app/src/main/res/layout/preferences_about.xml b/app/src/main/res/layout/preferences_about.xml
index 1ef2388d8..0a987b5b4 100644
--- a/app/src/main/res/layout/preferences_about.xml
+++ b/app/src/main/res/layout/preferences_about.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -28,8 +28,6 @@
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    <include layout="@layout/preferences_about_header" />
-
     <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
@@ -104,5 +102,7 @@
 
     </LinearLayout>
 
+    <include layout="@layout/preferences_about_header" />
+
   </LinearLayout>
 </androidx.core.widget.NestedScrollView>
diff --git a/app/src/main/res/layout/preferences_about_header.xml b/app/src/main/res/layout/preferences_about_header.xml
index a5f7fd2e9..c1fcc812e 100644
--- a/app/src/main/res/layout/preferences_about_header.xml
+++ b/app/src/main/res/layout/preferences_about_header.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -24,10 +24,8 @@
   android:layout_height="wrap_content"
   android:orientation="vertical"
   android:paddingStart="?listPreferredItemPaddingLeft"
-  android:paddingLeft="?listPreferredItemPaddingLeft"
   android:paddingTop="?listPreferredItemHeight"
-  android:paddingEnd="?listPreferredItemPaddingRight"
-  android:paddingRight="?listPreferredItemPaddingRight">
+  android:paddingEnd="?listPreferredItemPaddingRight">
 
   <LinearLayout
     android:id="@+id/version_container"
@@ -38,14 +36,6 @@
     android:focusable="true"
     android:orientation="horizontal">
 
-    <androidx.appcompat.widget.AppCompatImageView
-      android:layout_width="?actionBarSize"
-      android:layout_height="?actionBarSize"
-      android:layout_gravity="center"
-      android:layout_marginEnd="?listPreferredItemPaddingRight"
-      android:layout_marginRight="?listPreferredItemPaddingRight"
-      app:srcCompat="@mipmap/ic_launcher_legacy" />
-
     <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
@@ -65,8 +55,24 @@
         android:textAppearance="@style/TextAppearance.AppCompat.Small"
         tools:text="v0.3.0-310-ge2d1d05" />
     </LinearLayout>
+
+    <androidx.appcompat.widget.AppCompatImageView
+      android:layout_width="?actionBarSize"
+      android:layout_height="?actionBarSize"
+      android:layout_gravity="center"
+      android:layout_marginEnd="?listPreferredItemPaddingRight"
+      app:srcCompat="@mipmap/ic_launcher_legacy" />
   </LinearLayout>
 
+  <TextView
+    style="@style/Widget.RtlConformTextView"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginLeft="4dp"
+    android:layout_marginRight="4dp"
+    android:text="@string/app_description_long"
+    android:textAlignment="gravity" />
+
   <com.google.android.flexbox.FlexboxLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
@@ -77,12 +83,9 @@
     app:alignItems="flex_start"
     app:flexWrap="wrap">
 
-    <com.google.android.material.button.MaterialButton
-      android:id="@+id/action_website"
-      style="@style/Widget.Button.Colored"
-      android:layout_width="wrap_content"
-      android:layout_height="wrap_content"
-      android:text="@string/label_website" />
+    <Space
+      android:layout_width="8dp"
+      android:layout_height="wrap_content" />
 
     <Space
       android:layout_width="8dp"
@@ -95,9 +98,12 @@
       android:layout_height="wrap_content"
       android:text="@string/label_source" />
 
-    <Space
-      android:layout_width="8dp"
-      android:layout_height="wrap_content" />
+    <com.google.android.material.button.MaterialButton
+      android:id="@+id/action_website"
+      style="@style/Widget.Button.Colored"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:text="@string/label_website" />
 
     <com.google.android.material.button.MaterialButton
       android:id="@+id/action_donate"
@@ -108,15 +114,6 @@
 
   </com.google.android.flexbox.FlexboxLayout>
 
-  <TextView
-    style="@style/Widget.RtlConformTextView"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:layout_marginLeft="4dp"
-    android:layout_marginRight="4dp"
-    android:text="@string/app_description_long"
-    android:textAlignment="gravity" />
-
   <com.google.android.material.button.MaterialButton
     android:id="@+id/action_privacy_policy"
     style="@style/Widget.Button.Borderless.Colored"
diff --git a/app/src/main/res/layout/preferences_crash.xml b/app/src/main/res/layout/preferences_crash.xml
index 818a6b02c..8cf7c0730 100644
--- a/app/src/main/res/layout/preferences_crash.xml
+++ b/app/src/main/res/layout/preferences_crash.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -22,13 +22,6 @@
   android:layout_width="match_parent"
   android:layout_height="match_parent">
 
-  <androidx.recyclerview.widget.RecyclerView
-    android:id="@+id/list"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:scrollbars="vertical"
-    tools:listitem="@layout/widget_crash" />
-
   <TextView
     android:id="@+id/crashes_empty"
     android:layout_width="match_parent"
@@ -37,12 +30,17 @@
     android:gravity="center"
     android:minHeight="?android:attr/listPreferredItemHeightSmall"
     android:paddingStart="?listPreferredItemPaddingLeft"
-    android:paddingLeft="?listPreferredItemPaddingLeft"
     android:paddingEnd="?listPreferredItemPaddingRight"
-    android:paddingRight="?listPreferredItemPaddingRight"
     android:text="@string/label_crashes_empty"
     android:textColor="?colorTextSecondary"
     android:textStyle="italic"
     android:visibility="gone"
     tools:visibility="visible" />
+
+  <androidx.recyclerview.widget.RecyclerView
+    android:id="@+id/list"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:scrollbars="vertical"
+    tools:listitem="@layout/widget_crash" />
 </FrameLayout>
diff --git a/app/src/main/res/layout/preferences_whitelist.xml b/app/src/main/res/layout/preferences_whitelist.xml
index 79862b227..bbc99f6fe 100644
--- a/app/src/main/res/layout/preferences_whitelist.xml
+++ b/app/src/main/res/layout/preferences_whitelist.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -39,23 +39,12 @@
       android:gravity="center_vertical"
       android:minHeight="?android:attr/listPreferredItemHeightSmall"
       android:paddingStart="?listPreferredItemPaddingLeft"
-      android:paddingLeft="?listPreferredItemPaddingLeft"
       android:paddingEnd="?listPreferredItemPaddingRight"
-      android:paddingRight="?listPreferredItemPaddingRight"
       android:text="@string/label_whitelist_certificates_empty"
       android:textColor="?colorTextSecondary"
       android:textStyle="italic"
       android:visibility="gone" />
 
-    <androidx.recyclerview.widget.RecyclerView
-      android:id="@+id/certificate_whitelist"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:paddingLeft="2dp"
-      android:paddingRight="2dp"
-      tools:itemCount="2"
-      tools:listitem="@layout/preferences_whitelist_certificate_item" />
-
     <TextView
       style="@style/Widget.Subhead"
       android:text="@string/label_whitelist_hostnames" />
@@ -67,14 +56,21 @@
       android:gravity="center_vertical"
       android:minHeight="?android:attr/listPreferredItemHeightSmall"
       android:paddingStart="?listPreferredItemPaddingLeft"
-      android:paddingLeft="?listPreferredItemPaddingLeft"
       android:paddingEnd="?listPreferredItemPaddingRight"
-      android:paddingRight="?listPreferredItemPaddingRight"
       android:text="@string/label_whitelist_hostnames_empty"
       android:textColor="?colorTextSecondary"
       android:textStyle="italic"
       android:visibility="gone" />
 
+    <androidx.recyclerview.widget.RecyclerView
+      android:id="@+id/certificate_whitelist"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:paddingLeft="2dp"
+      android:paddingRight="2dp"
+      tools:itemCount="2"
+      tools:listitem="@layout/preferences_whitelist_certificate_item" />
+
     <androidx.recyclerview.widget.RecyclerView
       android:id="@+id/hostname_whitelist"
       android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/preferences_whitelist_certificate_item.xml b/app/src/main/res/layout/preferences_whitelist_certificate_item.xml
index 0eed12550..8084ad0ca 100644
--- a/app/src/main/res/layout/preferences_whitelist_certificate_item.xml
+++ b/app/src/main/res/layout/preferences_whitelist_certificate_item.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -33,10 +33,8 @@
     android:layout_weight="1"
     android:orientation="vertical"
     android:paddingStart="?listPreferredItemPaddingLeft"
-    android:paddingLeft="?listPreferredItemPaddingLeft"
     android:paddingTop="16dp"
     android:paddingEnd="0dip"
-    android:paddingRight="0dip"
     android:paddingBottom="16dp">
 
     <TextView
@@ -68,9 +66,7 @@
     android:background="?selectableItemBackgroundBorderless"
     android:contentDescription="@string/label_delete"
     android:paddingStart="32dp"
-    android:paddingLeft="32dp"
     android:paddingEnd="?listPreferredItemPaddingRight"
-    android:paddingRight="?listPreferredItemPaddingRight"
     app:srcCompat="@drawable/ic_delete"
     app:tint="?colorTextSecondary" />
 </LinearLayout>
diff --git a/app/src/main/res/layout/preferences_whitelist_hostname_item.xml b/app/src/main/res/layout/preferences_whitelist_hostname_item.xml
index b007c9dc0..483a73630 100644
--- a/app/src/main/res/layout/preferences_whitelist_hostname_item.xml
+++ b/app/src/main/res/layout/preferences_whitelist_hostname_item.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -33,10 +33,8 @@
     android:layout_weight="1"
     android:orientation="vertical"
     android:paddingStart="?listPreferredItemPaddingLeft"
-    android:paddingLeft="?listPreferredItemPaddingLeft"
     android:paddingTop="16dp"
     android:paddingEnd="0dip"
-    android:paddingRight="0dip"
     android:paddingBottom="16dp">
 
     <TextView
@@ -68,9 +66,7 @@
     android:background="?selectableItemBackgroundBorderless"
     android:contentDescription="@string/label_delete"
     android:paddingStart="32dp"
-    android:paddingLeft="32dp"
     android:paddingEnd="?listPreferredItemPaddingRight"
-    android:paddingRight="?listPreferredItemPaddingRight"
     app:srcCompat="@drawable/ic_delete"
     app:tint="?colorTextSecondary" />
 </LinearLayout>
diff --git a/app/src/main/res/layout/settings_aliaslist_item.xml b/app/src/main/res/layout/settings_aliaslist_item.xml
index b79559693..b92581af1 100644
--- a/app/src/main/res/layout/settings_aliaslist_item.xml
+++ b/app/src/main/res/layout/settings_aliaslist_item.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -26,28 +26,14 @@
   android:orientation="horizontal"
   tools:showIn="@layout/settings_aliaslist">
 
-  <androidx.appcompat.widget.AppCompatImageView
-    android:id="@+id/handle"
-    android:layout_width="wrap_content"
-    android:layout_height="match_parent"
-    android:layout_gravity="center_vertical"
-    android:paddingStart="?listPreferredItemPaddingLeft"
-    android:paddingLeft="?listPreferredItemPaddingLeft"
-    android:paddingEnd="32dp"
-    android:paddingRight="32dp"
-    app:srcCompat="@drawable/ic_reorder"
-    app:tint="?colorTextSecondary" />
-
   <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_gravity="center_vertical"
     android:orientation="vertical"
     android:paddingStart="0dip"
-    android:paddingLeft="0dip"
     android:paddingTop="16dp"
     android:paddingEnd="?listPreferredItemPaddingRight"
-    android:paddingRight="?listPreferredItemPaddingRight"
     android:paddingBottom="16dp">
 
     <TextView
@@ -72,4 +58,14 @@
       tools:text="/quote away" />
 
   </LinearLayout>
+
+  <androidx.appcompat.widget.AppCompatImageView
+    android:id="@+id/handle"
+    android:layout_width="wrap_content"
+    android:layout_height="match_parent"
+    android:layout_gravity="center_vertical"
+    android:paddingStart="?listPreferredItemPaddingLeft"
+    android:paddingEnd="32dp"
+    app:srcCompat="@drawable/ic_reorder"
+    app:tint="?colorTextSecondary" />
 </LinearLayout>
diff --git a/app/src/main/res/layout/settings_chatlist.xml b/app/src/main/res/layout/settings_chatlist.xml
index dbd456c82..594e2c090 100644
--- a/app/src/main/res/layout/settings_chatlist.xml
+++ b/app/src/main/res/layout/settings_chatlist.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -31,31 +31,19 @@
       android:layout_height="wrap_content"
       android:minHeight="48dp">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_eye" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_chatlist_ui" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_eye" />
     </LinearLayout>
 
     <LinearLayout
       style="@style/Widget.CoreSettings.DependentGroup"
       android:visibility="visible">
 
-      <com.google.android.material.textfield.TextInputLayout
-        style="@style/Widget.CustomTextInput"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:hint="@string/settings_chatlist_buffer_view_name">
-
-        <com.google.android.material.textfield.TextInputEditText
-          android:id="@+id/buffer_view_name"
-          style="@style/Widget.CoreSettings.EditText"
-          tools:text="All Chats" />
-      </com.google.android.material.textfield.TextInputLayout>
-
       <androidx.appcompat.widget.SwitchCompat
         android:id="@+id/show_search"
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
@@ -73,6 +61,18 @@
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:checked="true"
         android:text="@string/settings_chatlist_add_new_buffers_automatically" />
+
+      <com.google.android.material.textfield.TextInputLayout
+        style="@style/Widget.CustomTextInput"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:hint="@string/settings_chatlist_buffer_view_name">
+
+        <com.google.android.material.textfield.TextInputEditText
+          android:id="@+id/buffer_view_name"
+          style="@style/Widget.CoreSettings.EditText"
+          tools:text="All Chats" />
+      </com.google.android.material.textfield.TextInputLayout>
     </LinearLayout>
 
     <LinearLayout
@@ -80,19 +80,25 @@
       android:layout_height="wrap_content"
       android:minHeight="48dp">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_server_network" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_chatlist_network" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_server_network" />
     </LinearLayout>
 
     <LinearLayout
       style="@style/Widget.CoreSettings.DependentGroup"
       android:visibility="visible">
 
+      <androidx.appcompat.widget.SwitchCompat
+        android:id="@+id/show_status_buffer"
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:checked="true"
+        android:text="@string/settings_chatlist_show_status_buffer" />
+
       <de.kuschku.ui.spinner.MaterialSpinnerLayout
         style="@style/Widget.CustomSpinnerLayout"
         android:layout_width="match_parent"
@@ -106,12 +112,6 @@
           android:layout_height="wrap_content"
           tools:listitem="@layout/widget_spinner_item_material" />
       </de.kuschku.ui.spinner.MaterialSpinnerLayout>
-
-      <androidx.appcompat.widget.SwitchCompat
-        android:id="@+id/show_status_buffer"
-        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-        android:checked="true"
-        android:text="@string/settings_chatlist_show_status_buffer" />
     </LinearLayout>
 
     <LinearLayout
@@ -119,13 +119,13 @@
       android:layout_height="wrap_content"
       android:minHeight="48dp">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_tag_text" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_chatlist_types" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_tag_text" />
     </LinearLayout>
 
     <LinearLayout
@@ -150,19 +150,29 @@
       android:layout_height="wrap_content"
       android:minHeight="48dp">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_clock" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_chatlist_activity" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_clock" />
     </LinearLayout>
 
     <LinearLayout
       style="@style/Widget.CoreSettings.DependentGroup"
       android:visibility="visible">
 
+      <androidx.appcompat.widget.SwitchCompat
+        android:id="@+id/hide_inactive_buffers"
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_chatlist_hide_inactive_buffers" />
+
+      <androidx.appcompat.widget.SwitchCompat
+        android:id="@+id/hide_inactive_networks"
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_chatlist_hide_inactive_networks" />
+
       <de.kuschku.ui.spinner.MaterialSpinnerLayout
         style="@style/Widget.CustomSpinnerLayout"
         android:layout_width="match_parent"
@@ -176,16 +186,6 @@
           android:layout_height="wrap_content"
           tools:listitem="@layout/widget_spinner_item_material" />
       </de.kuschku.ui.spinner.MaterialSpinnerLayout>
-
-      <androidx.appcompat.widget.SwitchCompat
-        android:id="@+id/hide_inactive_buffers"
-        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-        android:text="@string/settings_chatlist_hide_inactive_buffers" />
-
-      <androidx.appcompat.widget.SwitchCompat
-        android:id="@+id/hide_inactive_networks"
-        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-        android:text="@string/settings_chatlist_hide_inactive_networks" />
     </LinearLayout>
   </LinearLayout>
 </androidx.core.widget.NestedScrollView>
diff --git a/app/src/main/res/layout/settings_highlightlist.xml b/app/src/main/res/layout/settings_highlightlist.xml
index 1e0112871..0349be1f5 100644
--- a/app/src/main/res/layout/settings_highlightlist.xml
+++ b/app/src/main/res/layout/settings_highlightlist.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -29,14 +29,6 @@
     android:layout_height="wrap_content"
     android:orientation="vertical">
 
-    <de.kuschku.quasseldroid.util.ui.view.WarningBarView
-      android:id="@+id/feature_context_coresidehighlights"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      app:icon="@drawable/ic_alert"
-      app:mode="none"
-      app:text="@string/label_feature_context_coresidehighlights" />
-
     <LinearLayout style="@style/Widget.CoreSettings.Wrapper">
 
       <LinearLayout
@@ -44,19 +36,24 @@
         android:layout_height="wrap_content"
         android:minHeight="48dp">
 
-        <androidx.appcompat.widget.AppCompatImageView
-          style="@style/Widget.CoreSettings.PrimaryItemIcon"
-          app:srcCompat="@drawable/ic_server_network" />
-
         <TextView
           style="@style/Widget.CoreSettings.PrimaryItemSwitch"
           android:text="@string/settings_highlightlist_highlight_nick" />
+
+        <androidx.appcompat.widget.AppCompatImageView
+          style="@style/Widget.CoreSettings.PrimaryItemIcon"
+          app:srcCompat="@drawable/ic_server_network" />
       </LinearLayout>
 
       <LinearLayout
         style="@style/Widget.CoreSettings.DependentGroup"
         android:visibility="visible">
 
+        <androidx.appcompat.widget.SwitchCompat
+          android:id="@+id/is_case_sensitive"
+          style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+          android:text="@string/settings_highlightlist_nicks_case_sensitive" />
+
         <de.kuschku.ui.spinner.MaterialSpinnerLayout
           style="@style/Widget.CustomSpinnerLayout"
           android:layout_width="match_parent"
@@ -70,11 +67,6 @@
             android:layout_height="wrap_content"
             tools:listitem="@layout/widget_spinner_item_material" />
         </de.kuschku.ui.spinner.MaterialSpinnerLayout>
-
-        <androidx.appcompat.widget.SwitchCompat
-          android:id="@+id/is_case_sensitive"
-          style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-          android:text="@string/settings_highlightlist_nicks_case_sensitive" />
       </LinearLayout>
 
       <LinearLayout
@@ -82,26 +74,19 @@
         android:layout_height="wrap_content"
         android:minHeight="48dp">
 
-        <androidx.appcompat.widget.AppCompatImageView
-          style="@style/Widget.CoreSettings.PrimaryItemIcon"
-          app:srcCompat="@drawable/ic_server_network" />
-
         <TextView
           style="@style/Widget.CoreSettings.PrimaryItemSwitch"
           android:text="@string/settings_highlightlist_rules" />
+
+        <androidx.appcompat.widget.AppCompatImageView
+          style="@style/Widget.CoreSettings.PrimaryItemIcon"
+          app:srcCompat="@drawable/ic_server_network" />
       </LinearLayout>
 
       <LinearLayout
         style="@style/Widget.CoreSettings.DependentGroup"
         android:visibility="visible">
 
-        <androidx.recyclerview.widget.RecyclerView
-          android:id="@+id/highlight_rules"
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          tools:itemCount="2"
-          tools:listitem="@layout/settings_highlightlist_rule" />
-
         <LinearLayout
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
@@ -114,6 +99,13 @@
             android:layout_height="wrap_content"
             android:text="@string/label_new_highlight_rule" />
         </LinearLayout>
+
+        <androidx.recyclerview.widget.RecyclerView
+          android:id="@+id/highlight_rules"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          tools:itemCount="2"
+          tools:listitem="@layout/settings_highlightlist_rule" />
       </LinearLayout>
 
       <LinearLayout
@@ -121,26 +113,19 @@
         android:layout_height="wrap_content"
         android:minHeight="48dp">
 
-        <androidx.appcompat.widget.AppCompatImageView
-          style="@style/Widget.CoreSettings.PrimaryItemIcon"
-          app:srcCompat="@drawable/ic_server_network" />
-
         <TextView
           style="@style/Widget.CoreSettings.PrimaryItemSwitch"
           android:text="@string/settings_highlightlist_ignore_rules" />
+
+        <androidx.appcompat.widget.AppCompatImageView
+          style="@style/Widget.CoreSettings.PrimaryItemIcon"
+          app:srcCompat="@drawable/ic_server_network" />
       </LinearLayout>
 
       <LinearLayout
         style="@style/Widget.CoreSettings.DependentGroup"
         android:visibility="visible">
 
-        <androidx.recyclerview.widget.RecyclerView
-          android:id="@+id/highlight_ignore_rules"
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          tools:itemCount="2"
-          tools:listitem="@layout/settings_highlightlist_rule" />
-
         <LinearLayout
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
@@ -153,7 +138,22 @@
             android:layout_height="wrap_content"
             android:text="@string/label_new_highlight_ignore_rule" />
         </LinearLayout>
+
+        <androidx.recyclerview.widget.RecyclerView
+          android:id="@+id/highlight_ignore_rules"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          tools:itemCount="2"
+          tools:listitem="@layout/settings_highlightlist_rule" />
       </LinearLayout>
     </LinearLayout>
+
+    <de.kuschku.quasseldroid.util.ui.view.WarningBarView
+      android:id="@+id/feature_context_coresidehighlights"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      app:icon="@drawable/ic_alert"
+      app:mode="none"
+      app:text="@string/label_feature_context_coresidehighlights" />
   </LinearLayout>
 </androidx.core.widget.NestedScrollView>
diff --git a/app/src/main/res/layout/settings_highlightlist_rule.xml b/app/src/main/res/layout/settings_highlightlist_rule.xml
index 32def896e..c85157da2 100644
--- a/app/src/main/res/layout/settings_highlightlist_rule.xml
+++ b/app/src/main/res/layout/settings_highlightlist_rule.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -34,18 +34,6 @@
     android:gravity="center_vertical"
     android:minHeight="?listPreferredItemHeightSmall">
 
-    <androidx.appcompat.widget.AppCompatImageView
-      android:id="@+id/handle"
-      android:layout_width="wrap_content"
-      android:layout_height="match_parent"
-      android:layout_gravity="center_vertical"
-      android:paddingStart="?listPreferredItemPaddingRight"
-      android:paddingLeft="?listPreferredItemPaddingRight"
-      android:paddingEnd="32dp"
-      android:paddingRight="32dp"
-      app:srcCompat="@drawable/ic_reorder"
-      app:tint="?colorTextSecondary" />
-
     <LinearLayout
       android:layout_width="0dip"
       android:layout_height="wrap_content"
@@ -54,37 +42,12 @@
       android:paddingTop="16dp"
       android:paddingBottom="16dp">
 
-      <TextView
-        android:id="@+id/match_all"
-        style="@style/Widget.RtlConformTextView"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical"
-        android:ellipsize="marquee"
-        android:orientation="vertical"
-        android:singleLine="true"
-        android:text="@string/label_match_all"
-        android:textAppearance="?android:textAppearanceMedium"
-        android:textColor="?colorTextPrimary"
-        android:textSize="16sp"
-        android:textStyle="italic"
-        android:visibility="gone"
-        tools:visibility="visible" />
-
       <LinearLayout
         android:id="@+id/name_row"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="horizontal">
 
-        <androidx.appcompat.widget.AppCompatImageView
-          android:layout_width="wrap_content"
-          android:layout_height="wrap_content"
-          android:layout_marginEnd="8dp"
-          android:layout_marginRight="8dp"
-          app:srcCompat="@drawable/ic_message_bulleted"
-          app:tint="?colorTextSecondary" />
-
         <TextView
           android:id="@+id/name"
           style="@style/Widget.RtlConformTextView"
@@ -99,6 +62,13 @@
           android:textSize="16sp"
           tools:text="(janne): " />
 
+        <androidx.appcompat.widget.AppCompatImageView
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_marginEnd="8dp"
+          app:srcCompat="@drawable/ic_message_bulleted"
+          app:tint="?colorTextSecondary" />
+
       </LinearLayout>
 
       <LinearLayout
@@ -107,14 +77,6 @@
         android:layout_height="wrap_content"
         android:orientation="horizontal">
 
-        <androidx.appcompat.widget.AppCompatImageView
-          android:layout_width="wrap_content"
-          android:layout_height="wrap_content"
-          android:layout_marginEnd="8dp"
-          android:layout_marginRight="8dp"
-          app:srcCompat="@drawable/ic_account"
-          app:tint="?colorTextSecondary" />
-
         <TextView
           android:id="@+id/sender"
           style="@style/Widget.RtlConformTextView"
@@ -126,6 +88,13 @@
           android:textAppearance="?textAppearanceListItemSecondary"
           android:textColor="?colorTextSecondary"
           tools:text="TARS" />
+
+        <androidx.appcompat.widget.AppCompatImageView
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_marginEnd="8dp"
+          app:srcCompat="@drawable/ic_account"
+          app:tint="?colorTextSecondary" />
       </LinearLayout>
 
       <LinearLayout
@@ -134,14 +103,6 @@
         android:layout_height="wrap_content"
         android:orientation="horizontal">
 
-        <androidx.appcompat.widget.AppCompatImageView
-          android:layout_width="wrap_content"
-          android:layout_height="wrap_content"
-          android:layout_marginEnd="8dp"
-          android:layout_marginRight="8dp"
-          app:srcCompat="@drawable/ic_channel"
-          app:tint="?colorTextSecondary" />
-
         <TextView
           android:id="@+id/channel"
           style="@style/Widget.RtlConformTextView"
@@ -153,18 +114,50 @@
           android:textAppearance="?textAppearanceListItemSecondary"
           android:textColor="?colorTextSecondary"
           tools:text="#yepityha" />
+
+        <androidx.appcompat.widget.AppCompatImageView
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_marginEnd="8dp"
+          app:srcCompat="@drawable/ic_channel"
+          app:tint="?colorTextSecondary" />
       </LinearLayout>
 
+      <TextView
+        android:id="@+id/match_all"
+        style="@style/Widget.RtlConformTextView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:ellipsize="marquee"
+        android:orientation="vertical"
+        android:singleLine="true"
+        android:text="@string/label_match_all"
+        android:textAppearance="?android:textAppearanceMedium"
+        android:textColor="?colorTextPrimary"
+        android:textSize="16sp"
+        android:textStyle="italic"
+        android:visibility="gone"
+        tools:visibility="visible" />
+
     </LinearLayout>
 
+    <androidx.appcompat.widget.AppCompatImageView
+      android:id="@+id/handle"
+      android:layout_width="wrap_content"
+      android:layout_height="match_parent"
+      android:layout_gravity="center_vertical"
+      android:paddingStart="?listPreferredItemPaddingRight"
+      android:paddingEnd="32dp"
+      app:srcCompat="@drawable/ic_reorder"
+      app:tint="?colorTextSecondary" />
+
     <androidx.appcompat.widget.SwitchCompat
       android:id="@+id/toggle"
       android:layout_width="wrap_content"
       android:layout_height="match_parent"
       android:paddingStart="?listPreferredItemPaddingLeft"
-      android:paddingLeft="?listPreferredItemPaddingLeft"
       android:paddingEnd="?listPreferredItemPaddingRight"
-      android:paddingRight="?listPreferredItemPaddingRight"
       android:text="" />
   </LinearLayout>
 </com.google.android.material.card.MaterialCardView>
diff --git a/app/src/main/res/layout/settings_highlightrule.xml b/app/src/main/res/layout/settings_highlightrule.xml
index 8f3bb1621..8fb2c3c14 100644
--- a/app/src/main/res/layout/settings_highlightrule.xml
+++ b/app/src/main/res/layout/settings_highlightrule.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -46,6 +46,16 @@
       style="@style/Widget.CoreSettings.DependentGroup"
       android:visibility="visible">
 
+      <androidx.appcompat.widget.SwitchCompat
+        android:id="@+id/is_regex"
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_highlightrule_regular_expression" />
+
+      <androidx.appcompat.widget.SwitchCompat
+        android:id="@+id/is_case_sensitive"
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_highlightrule_case_sensitive" />
+
       <com.google.android.material.textfield.TextInputLayout
         style="@style/Widget.CustomTextInput"
         android:layout_width="match_parent"
@@ -58,16 +68,6 @@
           tools:text="https://clbin.com/*.jpg*" />
       </com.google.android.material.textfield.TextInputLayout>
 
-      <androidx.appcompat.widget.SwitchCompat
-        android:id="@+id/is_regex"
-        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-        android:text="@string/settings_highlightrule_regular_expression" />
-
-      <androidx.appcompat.widget.SwitchCompat
-        android:id="@+id/is_case_sensitive"
-        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-        android:text="@string/settings_highlightrule_case_sensitive" />
-
       <com.google.android.material.textfield.TextInputLayout
         style="@style/Widget.CustomTextInput"
         android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/settings_identity.xml b/app/src/main/res/layout/settings_identity.xml
index f122e24db..c731b448a 100644
--- a/app/src/main/res/layout/settings_identity.xml
+++ b/app/src/main/res/layout/settings_identity.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -31,13 +31,13 @@
       android:layout_height="wrap_content"
       android:minHeight="48dp">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_account_card" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_identity_names" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_account_card" />
     </LinearLayout>
 
     <LinearLayout
@@ -98,13 +98,6 @@
       android:orientation="vertical"
       android:visibility="visible">
 
-      <androidx.recyclerview.widget.RecyclerView
-        android:id="@+id/nicks"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        tools:itemCount="4"
-        tools:listitem="@layout/settings_identity_nick" />
-
       <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -117,6 +110,13 @@
           android:layout_height="wrap_content"
           android:text="@string/label_new_nick" />
       </LinearLayout>
+
+      <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/nicks"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        tools:itemCount="4"
+        tools:listitem="@layout/settings_identity_nick" />
     </LinearLayout>
 
     <LinearLayout
@@ -124,13 +124,13 @@
       android:layout_height="wrap_content"
       android:minHeight="48dp">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_message_bulleted" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_identity_messages" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_message_bulleted" />
     </LinearLayout>
 
     <LinearLayout
@@ -179,36 +179,19 @@
       android:layout_height="wrap_content"
       android:minHeight="48dp">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_clock" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_identity_away" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_clock" />
     </LinearLayout>
 
     <LinearLayout
       style="@style/Widget.CoreSettings.DependentGroup"
       android:visibility="visible">
 
-      <com.google.android.material.textfield.TextInputLayout
-        style="@style/Widget.CustomTextInput"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:hint="@string/settings_identity_away_reason">
-
-        <com.google.android.material.textfield.TextInputEditText
-          android:id="@+id/away_reason"
-          style="@style/Widget.CoreSettings.EditText"
-          tools:text="Gone Fishing." />
-      </com.google.android.material.textfield.TextInputLayout>
-
-      <androidx.appcompat.widget.SwitchCompat
-        android:id="@+id/detach_away"
-        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-        android:text="@string/settings_identity_detach_away" />
-
       <LinearLayout
         android:id="@+id/detach_away_group"
         android:layout_width="match_parent"
@@ -226,6 +209,23 @@
             tools:text="Gone Fishing." />
         </com.google.android.material.textfield.TextInputLayout>
       </LinearLayout>
+
+      <androidx.appcompat.widget.SwitchCompat
+        android:id="@+id/detach_away"
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_identity_detach_away" />
+
+      <com.google.android.material.textfield.TextInputLayout
+        style="@style/Widget.CustomTextInput"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:hint="@string/settings_identity_away_reason">
+
+        <com.google.android.material.textfield.TextInputEditText
+          android:id="@+id/away_reason"
+          style="@style/Widget.CoreSettings.EditText"
+          tools:text="Gone Fishing." />
+      </com.google.android.material.textfield.TextInputLayout>
     </LinearLayout>
   </LinearLayout>
 </androidx.core.widget.NestedScrollView>
diff --git a/app/src/main/res/layout/settings_identity_nick.xml b/app/src/main/res/layout/settings_identity_nick.xml
index ff94e38fa..88732fb10 100644
--- a/app/src/main/res/layout/settings_identity_nick.xml
+++ b/app/src/main/res/layout/settings_identity_nick.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -41,9 +41,7 @@
       android:layout_gravity="center_vertical"
       android:layout_weight="1"
       android:paddingStart="?listPreferredItemPaddingLeft"
-      android:paddingLeft="?listPreferredItemPaddingLeft"
       android:paddingEnd="0dip"
-      android:paddingRight="0dip"
       android:textAppearance="?android:attr/textAppearanceListItemSmall"
       tools:text="@sample/messages.json/data/sender" />
 
@@ -53,9 +51,7 @@
       android:layout_height="match_parent"
       android:layout_gravity="center_vertical"
       android:paddingStart="32dp"
-      android:paddingLeft="32dp"
       android:paddingEnd="?listPreferredItemPaddingRight"
-      android:paddingRight="?listPreferredItemPaddingRight"
       app:srcCompat="@drawable/ic_reorder"
       app:tint="?colorTextSecondary" />
   </LinearLayout>
diff --git a/app/src/main/res/layout/settings_ignoreitem.xml b/app/src/main/res/layout/settings_ignoreitem.xml
index 737bdcb08..1f51813a4 100644
--- a/app/src/main/res/layout/settings_ignoreitem.xml
+++ b/app/src/main/res/layout/settings_ignoreitem.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -46,6 +46,11 @@
       style="@style/Widget.CoreSettings.DependentGroup"
       android:visibility="visible">
 
+      <androidx.appcompat.widget.SwitchCompat
+        android:id="@+id/isregex"
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_ignoreitem_isregex" />
+
       <com.google.android.material.textfield.TextInputLayout
         style="@style/Widget.CustomTextInput"
         android:layout_width="match_parent"
@@ -58,11 +63,6 @@
           tools:text="https://clbin.com/*.jpg*" />
       </com.google.android.material.textfield.TextInputLayout>
 
-      <androidx.appcompat.widget.SwitchCompat
-        android:id="@+id/isregex"
-        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-        android:text="@string/settings_ignoreitem_isregex" />
-
       <de.kuschku.ui.spinner.MaterialSpinnerLayout
         style="@style/Widget.CustomSpinnerLayout"
         android:layout_width="match_parent"
@@ -97,13 +97,13 @@
       android:layout_height="wrap_content"
       android:minHeight="48dp">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_tag_text" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_ignoreitem_scope" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_tag_text" />
     </LinearLayout>
 
     <LinearLayout
diff --git a/app/src/main/res/layout/settings_ignorelist_item.xml b/app/src/main/res/layout/settings_ignorelist_item.xml
index 1604bdc0b..ef88a2ae3 100644
--- a/app/src/main/res/layout/settings_ignorelist_item.xml
+++ b/app/src/main/res/layout/settings_ignorelist_item.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -28,18 +28,6 @@
   android:minHeight="?listPreferredItemHeightSmall"
   tools:showIn="@layout/settings_ignorelist">
 
-  <androidx.appcompat.widget.AppCompatImageView
-    android:id="@+id/handle"
-    android:layout_width="wrap_content"
-    android:layout_height="match_parent"
-    android:layout_gravity="center_vertical"
-    android:paddingStart="?listPreferredItemPaddingRight"
-    android:paddingLeft="?listPreferredItemPaddingRight"
-    android:paddingEnd="32dp"
-    android:paddingRight="32dp"
-    app:srcCompat="@drawable/ic_reorder"
-    app:tint="?colorTextSecondary" />
-
   <LinearLayout
     android:layout_width="0dip"
     android:layout_height="wrap_content"
@@ -74,12 +62,20 @@
 
   </LinearLayout>
 
+  <androidx.appcompat.widget.AppCompatImageView
+    android:id="@+id/handle"
+    android:layout_width="wrap_content"
+    android:layout_height="match_parent"
+    android:layout_gravity="center_vertical"
+    android:paddingStart="?listPreferredItemPaddingRight"
+    android:paddingEnd="32dp"
+    app:srcCompat="@drawable/ic_reorder"
+    app:tint="?colorTextSecondary" />
+
   <androidx.appcompat.widget.SwitchCompat
     android:id="@+id/toggle"
     android:layout_width="wrap_content"
     android:layout_height="match_parent"
     android:paddingStart="?listPreferredItemPaddingLeft"
-    android:paddingLeft="?listPreferredItemPaddingLeft"
-    android:paddingEnd="?listPreferredItemPaddingRight"
-    android:paddingRight="?listPreferredItemPaddingRight" />
+    android:paddingEnd="?listPreferredItemPaddingRight" />
 </LinearLayout>
diff --git a/app/src/main/res/layout/settings_item.xml b/app/src/main/res/layout/settings_item.xml
index 51e4d22d5..081c9ce7d 100644
--- a/app/src/main/res/layout/settings_item.xml
+++ b/app/src/main/res/layout/settings_item.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -26,9 +26,7 @@
   android:gravity="center_vertical"
   android:minHeight="?listPreferredItemHeightSmall"
   android:paddingStart="8dp"
-  android:paddingLeft="8dp"
   android:paddingEnd="?listPreferredItemPaddingRight"
-  android:paddingRight="?listPreferredItemPaddingRight"
   tools:showIn="@layout/settings_list">
 
   <LinearLayout
diff --git a/app/src/main/res/layout/settings_list.xml b/app/src/main/res/layout/settings_list.xml
index ef4c27db1..e683890cd 100644
--- a/app/src/main/res/layout/settings_list.xml
+++ b/app/src/main/res/layout/settings_list.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -29,35 +29,19 @@
     android:layout_height="wrap_content"
     android:orientation="vertical">
 
-    <de.kuschku.quasseldroid.util.ui.view.BannerView
-      android:id="@+id/feature_context_missing"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:layout_marginBottom="8dp"
-      app:buttonText="@string/label_feature_context_missing_button"
-      app:icon="@drawable/ic_alert"
-      app:text="@string/label_feature_context_missing" />
-
     <LinearLayout style="@style/Widget.CoreSettings.PrimaryItemGroupHeader">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_server_network" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_networks_title" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_server_network" />
     </LinearLayout>
 
     <LinearLayout style="@style/Widget.CoreSettings.PrimaryItemGroup">
 
-      <androidx.recyclerview.widget.RecyclerView
-        android:id="@+id/networks"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        tools:itemCount="2"
-        tools:listitem="@layout/settings_item" />
-
       <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -70,33 +54,32 @@
           android:layout_height="wrap_content"
           android:text="@string/label_new_network" />
       </LinearLayout>
+
+      <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/networks"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        tools:itemCount="2"
+        tools:listitem="@layout/settings_item" />
     </LinearLayout>
 
     <LinearLayout style="@style/Widget.CoreSettings.PrimaryItemGroupHeader">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_account_card" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_identities_title" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_account_card" />
     </LinearLayout>
 
     <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_marginStart="72dp"
-      android:layout_marginLeft="72dp"
       android:orientation="vertical">
 
-      <androidx.recyclerview.widget.RecyclerView
-        android:id="@+id/identities"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        tools:itemCount="1"
-        tools:listitem="@layout/settings_item" />
-
       <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -109,28 +92,28 @@
           android:layout_height="wrap_content"
           android:text="@string/label_new_identity" />
       </LinearLayout>
+
+      <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/identities"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        tools:itemCount="1"
+        tools:listitem="@layout/settings_item" />
     </LinearLayout>
 
     <LinearLayout style="@style/Widget.CoreSettings.PrimaryItemGroupHeader">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_list_bulleted" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_chatlists_title" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_list_bulleted" />
     </LinearLayout>
 
     <LinearLayout style="@style/Widget.CoreSettings.PrimaryItemGroup">
 
-      <androidx.recyclerview.widget.RecyclerView
-        android:id="@+id/chatlists"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        tools:itemCount="2"
-        tools:listitem="@layout/settings_item" />
-
       <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -143,6 +126,13 @@
           android:layout_height="wrap_content"
           android:text="@string/label_new_chatlist" />
       </LinearLayout>
+
+      <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/chatlists"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        tools:itemCount="2"
+        tools:listitem="@layout/settings_item" />
     </LinearLayout>
 
     <LinearLayout
@@ -150,13 +140,13 @@
       style="@style/Widget.CoreSettings.PrimaryItemGroupHeader"
       android:focusable="true">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_filter" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_ignorelist_title" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_filter" />
     </LinearLayout>
 
     <LinearLayout
@@ -164,13 +154,13 @@
       style="@style/Widget.CoreSettings.PrimaryItemGroupHeader"
       android:focusable="true">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_bell" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_highlightlist_title" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_bell" />
     </LinearLayout>
 
     <LinearLayout
@@ -178,13 +168,13 @@
       style="@style/Widget.CoreSettings.PrimaryItemGroupHeader"
       android:focusable="true">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_message_bulleted" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_aliaslist_title" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_message_bulleted" />
     </LinearLayout>
 
     <LinearLayout
@@ -192,13 +182,13 @@
       style="@style/Widget.CoreSettings.PrimaryItemGroupHeader"
       android:focusable="true">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_settings" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_networkconfig_title" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_settings" />
     </LinearLayout>
 
     <LinearLayout
@@ -206,13 +196,13 @@
       style="@style/Widget.CoreSettings.PrimaryItemGroupHeader"
       android:focusable="true">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_info" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/label_info_core" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_info" />
     </LinearLayout>
 
     <LinearLayout
@@ -220,13 +210,22 @@
       style="@style/Widget.CoreSettings.PrimaryItemGroupHeader"
       android:focusable="true">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_key_variant" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/label_password_change" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_key_variant" />
     </LinearLayout>
+
+    <de.kuschku.quasseldroid.util.ui.view.BannerView
+      android:id="@+id/feature_context_missing"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:layout_marginBottom="8dp"
+      app:buttonText="@string/label_feature_context_missing_button"
+      app:icon="@drawable/ic_alert"
+      app:text="@string/label_feature_context_missing" />
   </LinearLayout>
 </androidx.core.widget.NestedScrollView>
diff --git a/app/src/main/res/layout/settings_network.xml b/app/src/main/res/layout/settings_network.xml
index f6df4ac10..828ecec58 100644
--- a/app/src/main/res/layout/settings_network.xml
+++ b/app/src/main/res/layout/settings_network.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -32,13 +32,13 @@
       android:layout_height="wrap_content"
       android:minHeight="48dp">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_message_bulleted" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_network_title" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_message_bulleted" />
     </LinearLayout>
 
     <LinearLayout
@@ -63,14 +63,6 @@
       android:orientation="vertical"
       android:visibility="visible">
 
-      <androidx.recyclerview.widget.RecyclerView
-        android:id="@+id/servers"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="8dp"
-        tools:itemCount="4"
-        tools:listitem="@layout/settings_network_server" />
-
       <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -83,6 +75,14 @@
           android:layout_height="wrap_content"
           android:text="@string/label_new_server" />
       </LinearLayout>
+
+      <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/servers"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="8dp"
+        tools:itemCount="4"
+        tools:listitem="@layout/settings_network_server" />
     </LinearLayout>
 
     <LinearLayout
@@ -90,13 +90,13 @@
       android:layout_height="wrap_content"
       android:minHeight="48dp">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_account_card" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_network_identity" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_account_card" />
     </LinearLayout>
 
     <LinearLayout
@@ -191,15 +191,6 @@
       style="@style/Widget.CoreSettings.DependentGroup"
       tools:visibility="visible">
 
-      <de.kuschku.quasseldroid.util.ui.view.InlineSnackBar
-        android:id="@+id/autoidentify_warning"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="8dp"
-        android:layout_marginBottom="8dp"
-        app:buttonText="@string/settings_network_sasl_upgrade"
-        app:text="@string/settings_network_sasl_supported" />
-
       <com.google.android.material.textfield.TextInputLayout
         style="@style/Widget.CustomTextInput"
         android:layout_width="match_parent"
@@ -227,6 +218,15 @@
           android:inputType="textPassword"
           tools:text="thisisasecurepassword" />
       </com.google.android.material.textfield.TextInputLayout>
+
+      <de.kuschku.quasseldroid.util.ui.view.InlineSnackBar
+        android:id="@+id/autoidentify_warning"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="8dp"
+        android:layout_marginBottom="8dp"
+        app:buttonText="@string/settings_network_sasl_upgrade"
+        app:text="@string/settings_network_sasl_supported" />
     </LinearLayout>
 
     <LinearLayout
@@ -234,19 +234,24 @@
       android:layout_height="wrap_content"
       android:minHeight="48dp">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_server_network" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_network_connection" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_server_network" />
     </LinearLayout>
 
     <LinearLayout
       style="@style/Widget.CoreSettings.DependentGroup"
       android:visibility="visible">
 
+      <androidx.appcompat.widget.SwitchCompat
+        android:id="@+id/rejoin_channels"
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_network_rejoin_channels" />
+
       <com.google.android.material.textfield.TextInputLayout
         style="@style/Widget.CustomTextInput"
         android:layout_width="match_parent"
@@ -259,11 +264,6 @@
           android:inputType="textMultiLine"
           tools:text="/mode -x" />
       </com.google.android.material.textfield.TextInputLayout>
-
-      <androidx.appcompat.widget.SwitchCompat
-        android:id="@+id/rejoin_channels"
-        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-        android:text="@string/settings_network_rejoin_channels" />
     </LinearLayout>
 
     <LinearLayout
@@ -290,6 +290,10 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
+        <TextView
+          style="@style/Widget.CoreSettings.EditTextSuffix"
+          android:text="@string/settings_network_autoreconnect_interval_unit" />
+
         <com.google.android.material.textfield.TextInputLayout
           style="@style/Widget.CustomTextInput"
           android:layout_width="match_parent"
@@ -301,12 +305,13 @@
             style="@style/Widget.CoreSettings.EditText"
             tools:text="60" />
         </com.google.android.material.textfield.TextInputLayout>
-
-        <TextView
-          style="@style/Widget.CoreSettings.EditTextSuffix"
-          android:text="@string/settings_network_autoreconnect_interval_unit" />
       </FrameLayout>
 
+      <androidx.appcompat.widget.SwitchCompat
+        android:id="@+id/autoreconnect_unlimited"
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_network_autoreconnect_unlimited" />
+
       <com.google.android.material.textfield.TextInputLayout
         style="@style/Widget.CustomTextInput"
         android:layout_width="match_parent"
@@ -318,11 +323,6 @@
           style="@style/Widget.CoreSettings.EditText"
           tools:text="20" />
       </com.google.android.material.textfield.TextInputLayout>
-
-      <androidx.appcompat.widget.SwitchCompat
-        android:id="@+id/autoreconnect_unlimited"
-        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-        android:text="@string/settings_network_autoreconnect_unlimited" />
     </LinearLayout>
 
     <LinearLayout
@@ -345,27 +345,14 @@
       style="@style/Widget.CoreSettings.DependentGroup"
       tools:visibility="visible">
 
-      <androidx.appcompat.widget.SwitchCompat
-        android:id="@+id/customratelimits_unlimited"
-        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-        android:text="@string/settings_network_customratelimits_unlimited" />
-
-      <com.google.android.material.textfield.TextInputLayout
-        style="@style/Widget.CustomTextInput"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:hint="@string/settings_network_customratelimits_burstsize">
-
-        <com.google.android.material.textfield.TextInputEditText
-          android:id="@+id/customratelimits_burstsize"
-          style="@style/Widget.CoreSettings.EditText"
-          tools:text="5" />
-      </com.google.android.material.textfield.TextInputLayout>
-
       <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
+        <TextView
+          style="@style/Widget.CoreSettings.EditTextSuffix"
+          android:text="@string/settings_network_customratelimits_interval_unit" />
+
         <com.google.android.material.textfield.TextInputLayout
           style="@style/Widget.CustomTextInput"
           android:layout_width="match_parent"
@@ -377,11 +364,24 @@
             style="@style/Widget.CoreSettings.EditText"
             tools:text="2.20" />
         </com.google.android.material.textfield.TextInputLayout>
-
-        <TextView
-          style="@style/Widget.CoreSettings.EditTextSuffix"
-          android:text="@string/settings_network_customratelimits_interval_unit" />
       </FrameLayout>
+
+      <androidx.appcompat.widget.SwitchCompat
+        android:id="@+id/customratelimits_unlimited"
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_network_customratelimits_unlimited" />
+
+      <com.google.android.material.textfield.TextInputLayout
+        style="@style/Widget.CustomTextInput"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:hint="@string/settings_network_customratelimits_burstsize">
+
+        <com.google.android.material.textfield.TextInputEditText
+          android:id="@+id/customratelimits_burstsize"
+          style="@style/Widget.CoreSettings.EditText"
+          tools:text="5" />
+      </com.google.android.material.textfield.TextInputLayout>
     </LinearLayout>
   </LinearLayout>
 </androidx.core.widget.NestedScrollView>
diff --git a/app/src/main/res/layout/settings_network_server.xml b/app/src/main/res/layout/settings_network_server.xml
index 30ce5ad3a..12865a66c 100644
--- a/app/src/main/res/layout/settings_network_server.xml
+++ b/app/src/main/res/layout/settings_network_server.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -35,18 +35,6 @@
     android:paddingTop="10dp"
     android:paddingBottom="10dp">
 
-    <androidx.appcompat.widget.AppCompatImageView
-      android:id="@+id/ssl_enabled"
-      android:layout_width="wrap_content"
-      android:layout_height="match_parent"
-      android:layout_gravity="center_vertical"
-      android:paddingStart="?listPreferredItemPaddingLeft"
-      android:paddingLeft="?listPreferredItemPaddingLeft"
-      android:paddingEnd="32dp"
-      android:paddingRight="32dp"
-      tools:srcCompat="@drawable/ic_lock"
-      tools:tint="?colorTintSecure" />
-
     <LinearLayout
       android:layout_width="0dip"
       android:layout_height="wrap_content"
@@ -76,15 +64,23 @@
         tools:text="@sample/networks.json/data/port" />
     </LinearLayout>
 
+    <androidx.appcompat.widget.AppCompatImageView
+      android:id="@+id/ssl_enabled"
+      android:layout_width="wrap_content"
+      android:layout_height="match_parent"
+      android:layout_gravity="center_vertical"
+      android:paddingStart="?listPreferredItemPaddingLeft"
+      android:paddingEnd="32dp"
+      tools:srcCompat="@drawable/ic_lock"
+      tools:tint="?colorTintSecure" />
+
     <androidx.appcompat.widget.AppCompatImageView
       android:id="@+id/handle"
       android:layout_width="wrap_content"
       android:layout_height="match_parent"
       android:layout_gravity="center_vertical"
       android:paddingStart="32dp"
-      android:paddingLeft="32dp"
       android:paddingEnd="?listPreferredItemPaddingRight"
-      android:paddingRight="?listPreferredItemPaddingRight"
       app:srcCompat="@drawable/ic_reorder"
       app:tint="?colorTextSecondary" />
   </LinearLayout>
diff --git a/app/src/main/res/layout/settings_networkconfig.xml b/app/src/main/res/layout/settings_networkconfig.xml
index 2e288b5a6..b37ad3a11 100644
--- a/app/src/main/res/layout/settings_networkconfig.xml
+++ b/app/src/main/res/layout/settings_networkconfig.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -50,6 +50,10 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
+        <TextView
+          style="@style/Widget.CoreSettings.EditTextSuffix"
+          android:text="@string/settings_networkconfig_ping_interval_unit" />
+
         <com.google.android.material.textfield.TextInputLayout
           style="@style/Widget.CustomTextInput"
           android:layout_width="match_parent"
@@ -62,16 +66,16 @@
             android:inputType="number"
             tools:text="30" />
         </com.google.android.material.textfield.TextInputLayout>
-
-        <TextView
-          style="@style/Widget.CoreSettings.EditTextSuffix"
-          android:text="@string/settings_networkconfig_ping_interval_unit" />
       </FrameLayout>
 
       <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
+        <TextView
+          style="@style/Widget.CoreSettings.EditTextSuffix"
+          android:text="@string/settings_networkconfig_max_ping_count_unit" />
+
         <com.google.android.material.textfield.TextInputLayout
           style="@style/Widget.CustomTextInput"
           android:layout_width="match_parent"
@@ -84,10 +88,6 @@
             android:inputType="number"
             tools:text="10" />
         </com.google.android.material.textfield.TextInputLayout>
-
-        <TextView
-          style="@style/Widget.CoreSettings.EditTextSuffix"
-          android:text="@string/settings_networkconfig_max_ping_count_unit" />
       </FrameLayout>
     </LinearLayout>
 
@@ -115,6 +115,10 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
+        <TextView
+          style="@style/Widget.CoreSettings.EditTextSuffix"
+          android:text="@string/settings_networkconfig_auto_who_interval_unit" />
+
         <com.google.android.material.textfield.TextInputLayout
           style="@style/Widget.CustomTextInput"
           android:layout_width="match_parent"
@@ -127,16 +131,16 @@
             android:inputType="number"
             tools:text="90" />
         </com.google.android.material.textfield.TextInputLayout>
-
-        <TextView
-          style="@style/Widget.CoreSettings.EditTextSuffix"
-          android:text="@string/settings_networkconfig_auto_who_interval_unit" />
       </FrameLayout>
 
       <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
+        <TextView
+          style="@style/Widget.CoreSettings.EditTextSuffix"
+          android:text="@string/settings_networkconfig_auto_who_nick_limit_unit" />
+
         <com.google.android.material.textfield.TextInputLayout
           style="@style/Widget.CustomTextInput"
           android:layout_width="match_parent"
@@ -149,16 +153,16 @@
             android:inputType="number"
             tools:text="100" />
         </com.google.android.material.textfield.TextInputLayout>
-
-        <TextView
-          style="@style/Widget.CoreSettings.EditTextSuffix"
-          android:text="@string/settings_networkconfig_auto_who_nick_limit_unit" />
       </FrameLayout>
 
       <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
+        <TextView
+          style="@style/Widget.CoreSettings.EditTextSuffix"
+          android:text="@string/settings_networkconfig_auto_who_delay_unit" />
+
         <com.google.android.material.textfield.TextInputLayout
           style="@style/Widget.CustomTextInput"
           android:layout_width="match_parent"
@@ -171,10 +175,6 @@
             android:inputType="number"
             tools:text="5" />
         </com.google.android.material.textfield.TextInputLayout>
-
-        <TextView
-          style="@style/Widget.CoreSettings.EditTextSuffix"
-          android:text="@string/settings_networkconfig_auto_who_delay_unit" />
       </FrameLayout>
     </LinearLayout>
 
diff --git a/app/src/main/res/layout/settings_networkserver.xml b/app/src/main/res/layout/settings_networkserver.xml
index 91d0ec8ea..ced991320 100644
--- a/app/src/main/res/layout/settings_networkserver.xml
+++ b/app/src/main/res/layout/settings_networkserver.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -31,19 +31,29 @@
       android:layout_height="wrap_content"
       android:minHeight="48dp">
 
-      <androidx.appcompat.widget.AppCompatImageView
-        style="@style/Widget.CoreSettings.PrimaryItemIcon"
-        app:srcCompat="@drawable/ic_server_network" />
-
       <TextView
         style="@style/Widget.CoreSettings.PrimaryItemSwitch"
         android:text="@string/settings_networkserver_connection" />
+
+      <androidx.appcompat.widget.AppCompatImageView
+        style="@style/Widget.CoreSettings.PrimaryItemIcon"
+        app:srcCompat="@drawable/ic_server_network" />
     </LinearLayout>
 
     <LinearLayout
       style="@style/Widget.CoreSettings.DependentGroup"
       android:visibility="visible">
 
+      <androidx.appcompat.widget.SwitchCompat
+        android:id="@+id/ssl_enabled"
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_networkserver_ssl_enabled" />
+
+      <androidx.appcompat.widget.SwitchCompat
+        android:id="@+id/ssl_verify"
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_networkserver_ssl_verify" />
+
       <com.google.android.material.textfield.TextInputLayout
         style="@style/Widget.CustomTextInput"
         android:layout_width="match_parent"
@@ -69,16 +79,6 @@
           tools:text="6667" />
       </com.google.android.material.textfield.TextInputLayout>
 
-      <androidx.appcompat.widget.SwitchCompat
-        android:id="@+id/ssl_enabled"
-        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-        android:text="@string/settings_networkserver_ssl_enabled" />
-
-      <androidx.appcompat.widget.SwitchCompat
-        android:id="@+id/ssl_verify"
-        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-        android:text="@string/settings_networkserver_ssl_verify" />
-
       <com.google.android.material.textfield.TextInputLayout
         style="@style/Widget.CustomTextInput"
         android:layout_width="match_parent"
@@ -114,20 +114,6 @@
       style="@style/Widget.CoreSettings.DependentGroup"
       tools:visibility="visible">
 
-      <de.kuschku.ui.spinner.MaterialSpinnerLayout
-        style="@style/Widget.CustomSpinnerLayout"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:hint="@string/settings_networkserver_proxy_type">
-
-        <androidx.appcompat.widget.AppCompatSpinner
-          android:id="@+id/proxy_type"
-          style="@style/Widget.MaterialSpinner"
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          tools:listitem="@layout/widget_spinner_item_material" />
-      </de.kuschku.ui.spinner.MaterialSpinnerLayout>
-
       <com.google.android.material.textfield.TextInputLayout
         style="@style/Widget.CustomTextInput"
         android:layout_width="match_parent"
@@ -178,6 +164,20 @@
           android:inputType="textPassword"
           tools:text="thisisasecurepassword" />
       </com.google.android.material.textfield.TextInputLayout>
+
+      <de.kuschku.ui.spinner.MaterialSpinnerLayout
+        style="@style/Widget.CustomSpinnerLayout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:hint="@string/settings_networkserver_proxy_type">
+
+        <androidx.appcompat.widget.AppCompatSpinner
+          android:id="@+id/proxy_type"
+          style="@style/Widget.MaterialSpinner"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          tools:listitem="@layout/widget_spinner_item_material" />
+      </de.kuschku.ui.spinner.MaterialSpinnerLayout>
     </LinearLayout>
   </LinearLayout>
 </androidx.core.widget.NestedScrollView>
diff --git a/app/src/main/res/layout/settings_passwordchange.xml b/app/src/main/res/layout/settings_passwordchange.xml
index 99518fec8..26c1ed462 100644
--- a/app/src/main/res/layout/settings_passwordchange.xml
+++ b/app/src/main/res/layout/settings_passwordchange.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -30,42 +30,44 @@
     android:orientation="vertical"
     android:padding="32dp">
 
-    <com.google.android.material.textfield.TextInputLayout
-      android:id="@+id/userWrapper"
-      style="@style/Widget.CustomTextInput"
+    <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:layout_marginBottom="16dp"
-      android:hint="@string/label_account_user"
-      tools:ignore="LabelFor">
+      android:orientation="horizontal">
 
-      <com.google.android.material.textfield.TextInputEditText
-        android:id="@+id/user"
-        android:layout_width="match_parent"
+      <Space
+        android:layout_width="0dip"
+        android:layout_height="match_parent"
+        android:layout_weight="1" />
+
+      <com.google.android.material.button.MaterialButton
+        android:id="@+id/save"
+        style="@style/Widget.Button.Colored"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:enabled="false"
-        android:inputType="textVisiblePassword|textNoSuggestions"
-        app:errorEnabled="true"
-        tools:text="kuschku" />
-    </com.google.android.material.textfield.TextInputLayout>
+        android:text="@string/label_save" />
 
-    <com.google.android.material.textfield.TextInputLayout
-      android:id="@+id/password_old_wrapper"
-      style="@style/Widget.CustomTextInput"
+      <me.zhanghai.android.materialprogressbar.MaterialProgressBar
+        android:id="@+id/progress"
+        android:layout_width="32dp"
+        android:layout_height="32dp"
+        android:layout_gravity="center_vertical"
+        android:visibility="gone"
+        tools:visibility="visible" />
+
+    </LinearLayout>
+
+    <TextView
+      android:id="@+id/error"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
+      android:layout_marginLeft="4dp"
+      android:layout_marginRight="4dp"
       android:layout_marginBottom="16dp"
-      android:hint="@string/label_password_old"
-      app:passwordToggleEnabled="true"
-      tools:ignore="LabelFor">
-
-      <com.google.android.material.textfield.TextInputEditText
-        android:id="@+id/password_old"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:inputType="textPassword"
-        app:errorEnabled="true" />
-    </com.google.android.material.textfield.TextInputLayout>
+      android:textColor="?colorForegroundError"
+      android:visibility="gone"
+      tools:text="Error occured: Passwords do not match"
+      tools:visibility="visible" />
 
     <com.google.android.material.textfield.TextInputLayout
       style="@style/Widget.CustomTextInput"
@@ -102,44 +104,42 @@
     </com.google.android.material.textfield.TextInputLayout>
 
 
-    <TextView
-      android:id="@+id/error"
+    <com.google.android.material.textfield.TextInputLayout
+      android:id="@+id/userWrapper"
+      style="@style/Widget.CustomTextInput"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:layout_marginLeft="4dp"
-      android:layout_marginRight="4dp"
       android:layout_marginBottom="16dp"
-      android:textColor="?colorForegroundError"
-      android:visibility="gone"
-      tools:text="Error occured: Passwords do not match"
-      tools:visibility="visible" />
+      android:hint="@string/label_account_user"
+      tools:ignore="LabelFor">
 
-    <LinearLayout
+      <com.google.android.material.textfield.TextInputEditText
+        android:id="@+id/user"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:enabled="false"
+        android:inputType="textVisiblePassword|textNoSuggestions"
+        app:errorEnabled="true"
+        tools:text="kuschku" />
+    </com.google.android.material.textfield.TextInputLayout>
+
+    <com.google.android.material.textfield.TextInputLayout
+      android:id="@+id/password_old_wrapper"
+      style="@style/Widget.CustomTextInput"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:orientation="horizontal">
+      android:layout_marginBottom="16dp"
+      android:hint="@string/label_password_old"
+      app:passwordToggleEnabled="true"
+      tools:ignore="LabelFor">
 
-      <com.google.android.material.button.MaterialButton
-        android:id="@+id/save"
-        style="@style/Widget.Button.Colored"
-        android:layout_width="wrap_content"
+      <com.google.android.material.textfield.TextInputEditText
+        android:id="@+id/password_old"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:text="@string/label_save" />
-
-      <Space
-        android:layout_width="0dip"
-        android:layout_height="match_parent"
-        android:layout_weight="1" />
-
-      <me.zhanghai.android.materialprogressbar.MaterialProgressBar
-        android:id="@+id/progress"
-        android:layout_width="32dp"
-        android:layout_height="32dp"
-        android:layout_gravity="center_vertical"
-        android:visibility="gone"
-        tools:visibility="visible" />
-
-    </LinearLayout>
+        android:inputType="textPassword"
+        app:errorEnabled="true" />
+    </com.google.android.material.textfield.TextInputLayout>
 
   </LinearLayout>
 
diff --git a/app/src/main/res/layout/setup_account_connection.xml b/app/src/main/res/layout/setup_account_connection.xml
index 819286c43..bbd8e9eff 100644
--- a/app/src/main/res/layout/setup_account_connection.xml
+++ b/app/src/main/res/layout/setup_account_connection.xml
@@ -3,8 +3,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -27,44 +27,44 @@
   android:orientation="vertical"
   android:padding="32dp">
 
+  <androidx.appcompat.widget.SwitchCompat
+    android:id="@+id/require_ssl"
+    style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:text="@string/label_connection_ssl" />
+
   <com.google.android.material.textfield.TextInputLayout
-    android:id="@+id/hostWrapper"
+    android:id="@+id/portWrapper"
     style="@style/Widget.CustomTextInput"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:hint="@string/label_connection_host"
+    android:hint="@string/label_connection_port"
     app:errorEnabled="true"
     tools:ignore="LabelFor">
 
     <com.google.android.material.textfield.TextInputEditText
-      android:id="@+id/host"
+      android:id="@+id/port"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:inputType="textUri" />
+      android:inputType="number"
+      android:text="@string/defaultConnectionPort" />
   </com.google.android.material.textfield.TextInputLayout>
 
   <com.google.android.material.textfield.TextInputLayout
-    android:id="@+id/portWrapper"
+    android:id="@+id/hostWrapper"
     style="@style/Widget.CustomTextInput"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:hint="@string/label_connection_port"
+    android:hint="@string/label_connection_host"
     app:errorEnabled="true"
     tools:ignore="LabelFor">
 
     <com.google.android.material.textfield.TextInputEditText
-      android:id="@+id/port"
+      android:id="@+id/host"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:inputType="number"
-      android:text="@string/defaultConnectionPort" />
+      android:inputType="textUri" />
   </com.google.android.material.textfield.TextInputLayout>
 
-  <androidx.appcompat.widget.SwitchCompat
-    android:id="@+id/require_ssl"
-    style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:text="@string/label_connection_ssl" />
-
 </LinearLayout>
diff --git a/app/src/main/res/layout/setup_account_edit.xml b/app/src/main/res/layout/setup_account_edit.xml
index 03acd4459..6d5b0556f 100644
--- a/app/src/main/res/layout/setup_account_edit.xml
+++ b/app/src/main/res/layout/setup_account_edit.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -28,10 +28,6 @@
     android:layout_height="wrap_content"
     android:orientation="vertical">
 
-    <Space
-      android:layout_width="match_parent"
-      android:layout_height="16dp" />
-
     <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
@@ -68,10 +64,6 @@
       </com.google.android.material.textfield.TextInputLayout>
     </LinearLayout>
 
-    <Space
-      android:layout_width="match_parent"
-      android:layout_height="16dp" />
-
     <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
@@ -96,53 +88,48 @@
         android:layout_height="wrap_content"
         android:orientation="vertical">
 
+        <androidx.appcompat.widget.SwitchCompat
+          android:id="@+id/require_ssl"
+          style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          android:text="@string/label_connection_ssl" />
+
         <com.google.android.material.textfield.TextInputLayout
-          android:id="@+id/hostWrapper"
+          android:id="@+id/portWrapper"
           style="@style/Widget.CustomTextInput"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
-          android:hint="@string/label_connection_host"
+          android:hint="@string/label_connection_port"
           tools:ignore="LabelFor">
 
           <com.google.android.material.textfield.TextInputEditText
-            android:id="@+id/host"
+            android:id="@+id/port"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:inputType="textUri"
+            android:inputType="number"
+            android:text="@string/defaultConnectionPort"
             app:errorEnabled="true" />
         </com.google.android.material.textfield.TextInputLayout>
 
         <com.google.android.material.textfield.TextInputLayout
-          android:id="@+id/portWrapper"
+          android:id="@+id/hostWrapper"
           style="@style/Widget.CustomTextInput"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
-          android:hint="@string/label_connection_port"
+          android:hint="@string/label_connection_host"
           tools:ignore="LabelFor">
 
           <com.google.android.material.textfield.TextInputEditText
-            android:id="@+id/port"
+            android:id="@+id/host"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:inputType="number"
-            android:text="@string/defaultConnectionPort"
+            android:inputType="textUri"
             app:errorEnabled="true" />
         </com.google.android.material.textfield.TextInputLayout>
-
-        <androidx.appcompat.widget.SwitchCompat
-          android:id="@+id/require_ssl"
-          style="@style/Widget.CoreSettings.PrimaryItemSwitch"
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:text="@string/label_connection_ssl" />
       </LinearLayout>
     </LinearLayout>
 
-    <Space
-      android:layout_width="match_parent"
-      android:layout_height="16dp" />
-
-
     <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
@@ -206,5 +193,18 @@
     <Space
       android:layout_width="match_parent"
       android:layout_height="16dp" />
+
+    <Space
+      android:layout_width="match_parent"
+      android:layout_height="16dp" />
+
+
+    <Space
+      android:layout_width="match_parent"
+      android:layout_height="16dp" />
+
+    <Space
+      android:layout_width="match_parent"
+      android:layout_height="16dp" />
   </LinearLayout>
 </androidx.core.widget.NestedScrollView>
diff --git a/app/src/main/res/layout/setup_core_backend_configure.xml b/app/src/main/res/layout/setup_core_backend_configure.xml
index fb80a6b8c..1fef8606a 100644
--- a/app/src/main/res/layout/setup_core_backend_configure.xml
+++ b/app/src/main/res/layout/setup_core_backend_configure.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -23,15 +23,15 @@
   android:orientation="vertical"
   android:padding="32dp">
 
-  <TextView
-    android:id="@+id/no_options_info"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:text="@string/setup_core_backend_no_options" />
-
   <LinearLayout
     android:id="@+id/frame"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical" />
+
+  <TextView
+    android:id="@+id/no_options_info"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:text="@string/setup_core_backend_no_options" />
 </LinearLayout>
diff --git a/app/src/main/res/layout/setup_network_network.xml b/app/src/main/res/layout/setup_network_network.xml
index 714fd4955..e0367c46a 100644
--- a/app/src/main/res/layout/setup_network_network.xml
+++ b/app/src/main/res/layout/setup_network_network.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -25,55 +25,18 @@
   android:orientation="vertical"
   android:padding="32dp">
 
-  <de.kuschku.ui.spinner.MaterialSpinnerLayout
-    style="@style/Widget.CustomSpinnerLayout"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:hint="@string/settings_network_title">
-
-    <androidx.appcompat.widget.AppCompatSpinner
-      android:id="@+id/network"
-      style="@style/Widget.MaterialSpinner"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      tools:listitem="@layout/widget_spinner_item_material" />
-  </de.kuschku.ui.spinner.MaterialSpinnerLayout>
-
   <LinearLayout
     android:id="@+id/network_group"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">
 
-    <de.kuschku.ui.spinner.MaterialSpinnerLayout
-      style="@style/Widget.CustomSpinnerLayout"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:hint="@string/settings_identity_title">
-
-      <androidx.appcompat.widget.AppCompatSpinner
-        android:id="@+id/identity"
-        style="@style/Widget.MaterialSpinner"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        tools:listitem="@layout/widget_spinner_item_material" />
-    </de.kuschku.ui.spinner.MaterialSpinnerLayout>
-
-    <com.google.android.material.textfield.TextInputLayout
-      android:id="@+id/nameWrapper"
-      style="@style/Widget.CustomTextInput"
+    <androidx.appcompat.widget.SwitchCompat
+      android:id="@+id/ssl_enabled"
+      style="@style/Widget.CoreSettings.PrimaryItemSwitch"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:hint="@string/settings_network_network_name"
-      tools:ignore="LabelFor">
-
-      <com.google.android.material.textfield.TextInputEditText
-        android:id="@+id/name"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:inputType="textUri|textNoSuggestions"
-        app:errorEnabled="true" />
-    </com.google.android.material.textfield.TextInputLayout>
+      android:text="@string/settings_networkserver_ssl_enabled" />
 
     <com.google.android.material.textfield.TextInputLayout
       android:id="@+id/hostWrapper"
@@ -110,12 +73,49 @@
         tools:ignore="HardcodedText" />
     </com.google.android.material.textfield.TextInputLayout>
 
-    <androidx.appcompat.widget.SwitchCompat
-      android:id="@+id/ssl_enabled"
-      style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+    <com.google.android.material.textfield.TextInputLayout
+      android:id="@+id/nameWrapper"
+      style="@style/Widget.CustomTextInput"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:text="@string/settings_networkserver_ssl_enabled" />
+      android:hint="@string/settings_network_network_name"
+      tools:ignore="LabelFor">
+
+      <com.google.android.material.textfield.TextInputEditText
+        android:id="@+id/name"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:inputType="textUri|textNoSuggestions"
+        app:errorEnabled="true" />
+    </com.google.android.material.textfield.TextInputLayout>
+
+    <de.kuschku.ui.spinner.MaterialSpinnerLayout
+      style="@style/Widget.CustomSpinnerLayout"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:hint="@string/settings_identity_title">
+
+      <androidx.appcompat.widget.AppCompatSpinner
+        android:id="@+id/identity"
+        style="@style/Widget.MaterialSpinner"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        tools:listitem="@layout/widget_spinner_item_material" />
+    </de.kuschku.ui.spinner.MaterialSpinnerLayout>
   </LinearLayout>
 
+  <de.kuschku.ui.spinner.MaterialSpinnerLayout
+    style="@style/Widget.CustomSpinnerLayout"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:hint="@string/settings_network_title">
+
+    <androidx.appcompat.widget.AppCompatSpinner
+      android:id="@+id/network"
+      style="@style/Widget.MaterialSpinner"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      tools:listitem="@layout/widget_spinner_item_material" />
+  </de.kuschku.ui.spinner.MaterialSpinnerLayout>
+
 </LinearLayout>
diff --git a/app/src/main/res/layout/setup_slide.xml b/app/src/main/res/layout/setup_slide.xml
index 3eabf0871..3388f659a 100644
--- a/app/src/main/res/layout/setup_slide.xml
+++ b/app/src/main/res/layout/setup_slide.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -24,6 +24,17 @@
   android:layout_height="match_parent"
   tools:ignore="InconsistentLayout">
 
+  <androidx.core.widget.NestedScrollView
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    app:layout_behavior="@string/appbar_scrolling_view_behavior">
+
+    <FrameLayout
+      android:id="@+id/content_host"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content" />
+  </androidx.core.widget.NestedScrollView>
+
   <com.google.android.material.appbar.AppBarLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content">
@@ -60,10 +71,8 @@
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_marginStart="32dp"
-          android:layout_marginLeft="32dp"
           android:layout_marginTop="8dp"
           android:layout_marginEnd="48dp"
-          android:layout_marginRight="48dp"
           android:layout_marginBottom="24dp"
           android:textColor="?android:attr/textColorSecondaryInverse"
           android:textSize="16sp"
@@ -78,15 +87,4 @@
         app:titleMarginStart="16dp" />
     </com.google.android.material.appbar.CollapsingToolbarLayout>
   </com.google.android.material.appbar.AppBarLayout>
-
-  <androidx.core.widget.NestedScrollView
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    app:layout_behavior="@string/appbar_scrolling_view_behavior">
-
-    <FrameLayout
-      android:id="@+id/content_host"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content" />
-  </androidx.core.widget.NestedScrollView>
 </androidx.coordinatorlayout.widget.CoordinatorLayout>
diff --git a/app/src/main/res/layout/setup_user_network.xml b/app/src/main/res/layout/setup_user_network.xml
index e91a293e3..140f4ebc5 100644
--- a/app/src/main/res/layout/setup_user_network.xml
+++ b/app/src/main/res/layout/setup_user_network.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -25,41 +25,18 @@
   android:orientation="vertical"
   android:padding="32dp">
 
-  <de.kuschku.ui.spinner.MaterialSpinnerLayout
-    style="@style/Widget.CustomSpinnerLayout"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:hint="@string/settings_network_title">
-
-    <androidx.appcompat.widget.AppCompatSpinner
-      android:id="@+id/network"
-      style="@style/Widget.MaterialSpinner"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      tools:listitem="@layout/widget_spinner_item_material" />
-  </de.kuschku.ui.spinner.MaterialSpinnerLayout>
-
   <LinearLayout
     android:id="@+id/network_group"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">
 
-    <com.google.android.material.textfield.TextInputLayout
-      android:id="@+id/nameWrapper"
-      style="@style/Widget.CustomTextInput"
+    <androidx.appcompat.widget.SwitchCompat
+      android:id="@+id/ssl_enabled"
+      style="@style/Widget.CoreSettings.PrimaryItemSwitch"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:hint="@string/settings_network_network_name"
-      tools:ignore="LabelFor">
-
-      <com.google.android.material.textfield.TextInputEditText
-        android:id="@+id/name"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:inputType="textUri|textNoSuggestions"
-        app:errorEnabled="true" />
-    </com.google.android.material.textfield.TextInputLayout>
+      android:text="@string/settings_networkserver_ssl_enabled" />
 
     <com.google.android.material.textfield.TextInputLayout
       android:id="@+id/hostWrapper"
@@ -96,12 +73,35 @@
         tools:ignore="HardcodedText" />
     </com.google.android.material.textfield.TextInputLayout>
 
-    <androidx.appcompat.widget.SwitchCompat
-      android:id="@+id/ssl_enabled"
-      style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+    <com.google.android.material.textfield.TextInputLayout
+      android:id="@+id/nameWrapper"
+      style="@style/Widget.CustomTextInput"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:text="@string/settings_networkserver_ssl_enabled" />
+      android:hint="@string/settings_network_network_name"
+      tools:ignore="LabelFor">
+
+      <com.google.android.material.textfield.TextInputEditText
+        android:id="@+id/name"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:inputType="textUri|textNoSuggestions"
+        app:errorEnabled="true" />
+    </com.google.android.material.textfield.TextInputLayout>
   </LinearLayout>
 
+  <de.kuschku.ui.spinner.MaterialSpinnerLayout
+    style="@style/Widget.CustomSpinnerLayout"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:hint="@string/settings_network_title">
+
+    <androidx.appcompat.widget.AppCompatSpinner
+      android:id="@+id/network"
+      style="@style/Widget.MaterialSpinner"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      tools:listitem="@layout/widget_spinner_item_material" />
+  </de.kuschku.ui.spinner.MaterialSpinnerLayout>
+
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_archive_placeholder.xml b/app/src/main/res/layout/widget_archive_placeholder.xml
index b16ad2939..23bb9cea7 100644
--- a/app/src/main/res/layout/widget_archive_placeholder.xml
+++ b/app/src/main/res/layout/widget_archive_placeholder.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -22,8 +22,6 @@
   android:id="@+id/content"
   style="@style/Widget.CoreSettings.TextView"
   android:paddingStart="72dp"
-  android:paddingLeft="72dp"
   android:paddingEnd="16dp"
-  android:paddingRight="16dp"
   android:textStyle="italic"
   tools:text="@string/label_temporarily_archived_empty" />
diff --git a/app/src/main/res/layout/widget_banner.xml b/app/src/main/res/layout/widget_banner.xml
index 8069bb84e..10321649e 100644
--- a/app/src/main/res/layout/widget_banner.xml
+++ b/app/src/main/res/layout/widget_banner.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -28,16 +28,13 @@
   android:focusable="true"
   android:orientation="vertical"
   android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
-  android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
   android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
-  android:paddingRight="?android:attr/listPreferredItemPaddingRight"
   android:theme="?attr/actionBarTheme">
 
   <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginStart="-4dp"
-    android:layout_marginLeft="-4dp"
     android:baselineAligned="false"
     android:gravity="center_vertical"
     android:minHeight="?android:attr/listPreferredItemHeightSmall"
@@ -50,10 +47,8 @@
       android:minWidth="60dp"
       android:orientation="horizontal"
       android:paddingStart="0dp"
-      android:paddingLeft="0dp"
       android:paddingTop="4dp"
       android:paddingEnd="12dp"
-      android:paddingRight="12dp"
       android:paddingBottom="4dp">
 
       <androidx.appcompat.widget.AppCompatImageView
diff --git a/app/src/main/res/layout/widget_buffer.xml b/app/src/main/res/layout/widget_buffer.xml
index d4675ff1f..b5aaa515f 100644
--- a/app/src/main/res/layout/widget_buffer.xml
+++ b/app/src/main/res/layout/widget_buffer.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -31,16 +31,6 @@
   android:paddingBottom="4dp"
   android:textAppearance="?android:attr/textAppearanceListItemSmall">
 
-  <androidx.appcompat.widget.AppCompatImageView
-    android:id="@+id/status"
-    android:layout_width="@dimen/avatar_size_buffer"
-    android:layout_height="@dimen/avatar_size_buffer"
-    android:layout_gravity="center_vertical"
-    android:layout_marginEnd="16dp"
-    android:layout_marginRight="16dp"
-    android:contentDescription="@string/label_avatar"
-    tools:src="@tools:sample/avatars" />
-
   <LinearLayout
     android:layout_width="0dip"
     android:layout_height="wrap_content"
@@ -74,13 +64,21 @@
       tools:visibility="visible" />
   </LinearLayout>
 
+  <androidx.appcompat.widget.AppCompatImageView
+    android:id="@+id/status"
+    android:layout_width="@dimen/avatar_size_buffer"
+    android:layout_height="@dimen/avatar_size_buffer"
+    android:layout_gravity="center_vertical"
+    android:layout_marginEnd="16dp"
+    android:contentDescription="@string/label_avatar"
+    tools:src="@tools:sample/avatars" />
+
   <androidx.appcompat.widget.AppCompatImageView
     android:id="@+id/handle"
     android:layout_width="24dp"
     android:layout_height="24dp"
     android:layout_gravity="center_vertical"
     android:layout_marginStart="16dp"
-    android:layout_marginLeft="16dp"
     android:contentDescription="@string/label_reorder"
     android:visibility="gone"
     app:srcCompat="@drawable/ic_reorder"
diff --git a/app/src/main/res/layout/widget_buffer_away.xml b/app/src/main/res/layout/widget_buffer_away.xml
index 3e4a9c043..5e274fae8 100644
--- a/app/src/main/res/layout/widget_buffer_away.xml
+++ b/app/src/main/res/layout/widget_buffer_away.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -31,16 +31,6 @@
   android:paddingBottom="4dp"
   android:textAppearance="?android:attr/textAppearanceListItemSmall">
 
-  <androidx.appcompat.widget.AppCompatImageView
-    android:id="@+id/status"
-    android:layout_width="@dimen/avatar_size_buffer"
-    android:layout_height="@dimen/avatar_size_buffer"
-    android:layout_gravity="center_vertical"
-    android:layout_marginEnd="16dp"
-    android:layout_marginRight="16dp"
-    android:contentDescription="@string/label_avatar"
-    tools:src="@tools:sample/avatars" />
-
   <LinearLayout
     android:layout_width="0dip"
     android:layout_height="wrap_content"
@@ -76,12 +66,20 @@
       tools:visibility="visible" />
   </LinearLayout>
 
+  <androidx.appcompat.widget.AppCompatImageView
+    android:id="@+id/status"
+    android:layout_width="@dimen/avatar_size_buffer"
+    android:layout_height="@dimen/avatar_size_buffer"
+    android:layout_gravity="center_vertical"
+    android:layout_marginEnd="16dp"
+    android:contentDescription="@string/label_avatar"
+    tools:src="@tools:sample/avatars" />
+
   <androidx.appcompat.widget.AppCompatImageView
     android:layout_width="24dp"
     android:layout_height="24dp"
     android:layout_gravity="center_vertical"
     android:layout_marginStart="16dp"
-    android:layout_marginLeft="16dp"
     android:contentDescription="@string/label_user_away"
     app:srcCompat="@drawable/ic_clock"
     app:tint="?colorTextSecondary" />
@@ -92,7 +90,6 @@
     android:layout_height="24dp"
     android:layout_gravity="center_vertical"
     android:layout_marginStart="16dp"
-    android:layout_marginLeft="16dp"
     android:contentDescription="@string/label_reorder"
     app:srcCompat="@drawable/ic_reorder"
     app:tint="?colorTextSecondary" />
diff --git a/app/src/main/res/layout/widget_channel_search.xml b/app/src/main/res/layout/widget_channel_search.xml
index 0227a0f9f..6030d6eb9 100644
--- a/app/src/main/res/layout/widget_channel_search.xml
+++ b/app/src/main/res/layout/widget_channel_search.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -36,7 +36,6 @@
     android:layout_height="@dimen/avatar_size_buffer"
     android:layout_gravity="center_vertical"
     android:layout_marginEnd="16dp"
-    android:layout_marginRight="16dp"
     android:contentDescription="@string/label_avatar"
     tools:src="@tools:sample/avatars" />
 
@@ -72,7 +71,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="8dp"
-        android:layout_marginLeft="8dp"
         android:ellipsize="marquee"
         android:singleLine="true"
         android:textColor="?attr/colorTextSecondary"
diff --git a/app/src/main/res/layout/widget_chatmessage_action.xml b/app/src/main/res/layout/widget_chatmessage_action.xml
index b52536e5c..ea1c9d0b6 100644
--- a/app/src/main/res/layout/widget_chatmessage_action.xml
+++ b/app/src/main/res/layout/widget_chatmessage_action.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -23,8 +23,6 @@
   android:layout_height="wrap_content"
   android:orientation="vertical">
 
-  <include layout="@layout/widget_chatmessage_daychange" />
-
   <LinearLayout
     android:id="@+id/message_container"
     android:layout_width="match_parent"
@@ -39,24 +37,11 @@
     android:paddingBottom="@dimen/message_vertical"
     android:textAppearance="?android:attr/textAppearanceListItemSmall">
 
-    <TextView
-      android:id="@+id/time_left"
-      android:layout_width="wrap_content"
-      android:layout_height="wrap_content"
-      android:layout_gravity="top"
-      android:layout_marginEnd="@dimen/message_horizontal"
-      android:layout_marginRight="@dimen/message_horizontal"
-      android:textColor="?attr/colorForegroundSecondary"
-      android:typeface="monospace"
-      tools:text="@sample/messages.json/data/time"
-      tools:visibility="gone" />
-
     <FrameLayout
       android:id="@+id/avatar_container"
       android:layout_width="@dimen/avatar_size"
       android:layout_height="@dimen/avatar_size"
       android:layout_marginEnd="@dimen/message_horizontal"
-      android:layout_marginRight="@dimen/message_horizontal"
       android:visibility="gone"
       tools:ignore="UselessParent"
       tools:visibility="visible">
@@ -99,7 +84,6 @@
         android:layout_height="wrap_content"
         android:layout_gravity="top"
         android:layout_marginStart="@dimen/message_horizontal"
-        android:layout_marginLeft="@dimen/message_horizontal"
         android:textColor="?attr/colorForegroundSecondary"
         android:textStyle="italic"
         android:visibility="gone"
@@ -108,6 +92,19 @@
         tools:textSize="11.9sp"
         tools:visibility="visible" />
     </LinearLayout>
+
+    <TextView
+      android:id="@+id/time_left"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_gravity="top"
+      android:layout_marginEnd="@dimen/message_horizontal"
+      android:textColor="?attr/colorForegroundSecondary"
+      android:typeface="monospace"
+      tools:text="@sample/messages.json/data/time"
+      tools:visibility="gone" />
   </LinearLayout>
 
+  <include layout="@layout/widget_chatmessage_daychange" />
+
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_chatmessage_daychange.xml b/app/src/main/res/layout/widget_chatmessage_daychange.xml
index 44793380a..ed644e4bb 100644
--- a/app/src/main/res/layout/widget_chatmessage_daychange.xml
+++ b/app/src/main/res/layout/widget_chatmessage_daychange.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -37,6 +37,13 @@
     android:paddingRight="@dimen/message_horizontal"
     android:paddingBottom="@dimen/message_vertical_daychange">
 
+    <View
+      android:layout_width="0dip"
+      android:layout_height="1dp"
+      android:layout_gravity="center_vertical"
+      android:layout_weight="1"
+      android:background="?colorDivider" />
+
     <View
       android:layout_width="0dip"
       android:layout_height="1dp"
@@ -58,12 +65,5 @@
       android:textColor="?attr/colorForeground"
       android:textStyle="bold"
       tools:text="27.03.2018" />
-
-    <View
-      android:layout_width="0dip"
-      android:layout_height="1dp"
-      android:layout_gravity="center_vertical"
-      android:layout_weight="1"
-      android:background="?colorDivider" />
   </LinearLayout>
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_chatmessage_error.xml b/app/src/main/res/layout/widget_chatmessage_error.xml
index 1a3242481..9a66e6e85 100644
--- a/app/src/main/res/layout/widget_chatmessage_error.xml
+++ b/app/src/main/res/layout/widget_chatmessage_error.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -24,8 +24,6 @@
   android:orientation="vertical"
   tools:showIn="@layout/chat_messages">
 
-  <include layout="@layout/widget_chatmessage_daychange" />
-
   <LinearLayout
     android:id="@+id/message_container"
     android:layout_width="match_parent"
@@ -40,41 +38,29 @@
     android:paddingBottom="@dimen/message_vertical"
     android:textAppearance="?android:attr/textAppearanceListItemSmall">
 
+    <Space
+      android:id="@+id/avatar_placeholder"
+      android:layout_width="@dimen/avatar_size"
+      android:layout_height="match_parent"
+      android:layout_marginEnd="@dimen/message_horizontal"
+      android:visibility="gone" />
+
     <TextView
       android:id="@+id/time_left"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="top"
       android:layout_marginEnd="@dimen/message_horizontal"
-      android:layout_marginRight="@dimen/message_horizontal"
       android:textColor="?attr/colorForegroundSecondary"
       android:typeface="monospace"
       tools:text="@sample/messages.json/data/time" />
 
-    <Space
-      android:id="@+id/avatar_placeholder"
-      android:layout_width="@dimen/avatar_size"
-      android:layout_height="match_parent"
-      android:layout_marginEnd="@dimen/message_horizontal"
-      android:layout_marginRight="@dimen/message_horizontal"
-      android:visibility="gone" />
-
-    <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
-      android:id="@+id/combined"
-      style="@style/Widget.RtlConformTextView"
-      android:layout_width="0dip"
-      android:layout_height="wrap_content"
-      android:layout_weight="1"
-      android:textColor="?attr/colorForegroundError"
-      tools:text="@sample/messages.json/data/message" />
-
     <TextView
       android:id="@+id/time_right"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="top"
       android:layout_marginStart="@dimen/message_horizontal"
-      android:layout_marginLeft="@dimen/message_horizontal"
       android:textColor="?attr/colorForegroundSecondary"
       android:textStyle="italic"
       android:visibility="gone"
@@ -82,5 +68,16 @@
       tools:text="@sample/messages.json/data/time"
       tools:textSize="11.9sp"
       tools:visibility="visible" />
+
+    <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
+      android:id="@+id/combined"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="0dip"
+      android:layout_height="wrap_content"
+      android:layout_weight="1"
+      android:textColor="?attr/colorForegroundError"
+      tools:text="@sample/messages.json/data/message" />
   </LinearLayout>
+
+  <include layout="@layout/widget_chatmessage_daychange" />
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_chatmessage_info.xml b/app/src/main/res/layout/widget_chatmessage_info.xml
index eb61303f9..c10ab801e 100644
--- a/app/src/main/res/layout/widget_chatmessage_info.xml
+++ b/app/src/main/res/layout/widget_chatmessage_info.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -24,8 +24,6 @@
   android:orientation="vertical"
   tools:showIn="@layout/chat_messages">
 
-  <include layout="@layout/widget_chatmessage_daychange" />
-
   <LinearLayout
     android:id="@+id/message_container"
     android:layout_width="match_parent"
@@ -40,34 +38,22 @@
     android:paddingBottom="@dimen/message_vertical"
     android:textAppearance="?android:attr/textAppearanceListItemSmall">
 
-    <TextView
-      android:id="@+id/time_left"
-      android:layout_width="wrap_content"
-      android:layout_height="wrap_content"
-      android:layout_gravity="top"
-      android:layout_marginEnd="@dimen/message_horizontal"
-      android:layout_marginRight="@dimen/message_horizontal"
-      android:textColor="?attr/colorForegroundSecondary"
-      android:typeface="monospace"
-      tools:text="@sample/messages.json/data/time" />
-
     <Space
       android:id="@+id/avatar_placeholder"
       android:layout_width="@dimen/avatar_size"
       android:layout_height="match_parent"
       android:layout_marginEnd="@dimen/message_horizontal"
-      android:layout_marginRight="@dimen/message_horizontal"
       android:visibility="gone" />
 
-    <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
-      android:id="@+id/combined"
-      style="@style/Widget.RtlConformTextView"
-      android:layout_width="0dip"
+    <TextView
+      android:id="@+id/time_left"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
-      android:layout_weight="1"
+      android:layout_gravity="top"
+      android:layout_marginEnd="@dimen/message_horizontal"
       android:textColor="?attr/colorForegroundSecondary"
-      android:textStyle="italic"
-      tools:text="@sample/messages.json/data/message" />
+      android:typeface="monospace"
+      tools:text="@sample/messages.json/data/time" />
 
     <TextView
       android:id="@+id/time_right"
@@ -75,7 +61,6 @@
       android:layout_height="wrap_content"
       android:layout_gravity="top"
       android:layout_marginStart="@dimen/message_horizontal"
-      android:layout_marginLeft="@dimen/message_horizontal"
       android:textColor="?attr/colorForegroundSecondary"
       android:textStyle="italic"
       android:visibility="gone"
@@ -83,5 +68,17 @@
       tools:text="@sample/messages.json/data/time"
       tools:textSize="11.9sp"
       tools:visibility="visible" />
+
+    <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
+      android:id="@+id/combined"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="0dip"
+      android:layout_height="wrap_content"
+      android:layout_weight="1"
+      android:textColor="?attr/colorForegroundSecondary"
+      android:textStyle="italic"
+      tools:text="@sample/messages.json/data/message" />
   </LinearLayout>
+
+  <include layout="@layout/widget_chatmessage_daychange" />
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_chatmessage_notice.xml b/app/src/main/res/layout/widget_chatmessage_notice.xml
index 5d69f7ee2..c1a3043fa 100644
--- a/app/src/main/res/layout/widget_chatmessage_notice.xml
+++ b/app/src/main/res/layout/widget_chatmessage_notice.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -24,8 +24,6 @@
   android:orientation="vertical"
   tools:showIn="@layout/chat_messages">
 
-  <include layout="@layout/widget_chatmessage_daychange" />
-
   <LinearLayout
     android:id="@+id/message_container"
     android:layout_width="match_parent"
@@ -40,41 +38,29 @@
     android:paddingBottom="@dimen/message_vertical"
     android:textAppearance="?android:attr/textAppearanceListItemSmall">
 
+    <Space
+      android:id="@+id/avatar_placeholder"
+      android:layout_width="@dimen/avatar_size"
+      android:layout_height="match_parent"
+      android:layout_marginEnd="@dimen/message_horizontal"
+      android:visibility="gone" />
+
     <TextView
       android:id="@+id/time_left"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="top"
       android:layout_marginEnd="@dimen/message_horizontal"
-      android:layout_marginRight="@dimen/message_horizontal"
       android:textColor="?attr/colorForegroundSecondary"
       android:typeface="monospace"
       tools:text="@sample/messages.json/data/time" />
 
-    <Space
-      android:id="@+id/avatar_placeholder"
-      android:layout_width="@dimen/avatar_size"
-      android:layout_height="match_parent"
-      android:layout_marginEnd="@dimen/message_horizontal"
-      android:layout_marginRight="@dimen/message_horizontal"
-      android:visibility="gone" />
-
-    <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
-      android:id="@+id/combined"
-      style="@style/Widget.RtlConformTextView"
-      android:layout_width="0dip"
-      android:layout_height="wrap_content"
-      android:layout_weight="1"
-      android:textColor="?attr/colorForegroundNotice"
-      tools:text="@sample/messages.json/data/message" />
-
     <TextView
       android:id="@+id/time_right"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="top"
       android:layout_marginStart="@dimen/message_horizontal"
-      android:layout_marginLeft="@dimen/message_horizontal"
       android:textColor="?attr/colorForegroundSecondary"
       android:textStyle="italic"
       android:visibility="gone"
@@ -82,5 +68,16 @@
       tools:text="@sample/messages.json/data/time"
       tools:textSize="11.9sp"
       tools:visibility="visible" />
+
+    <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
+      android:id="@+id/combined"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="0dip"
+      android:layout_height="wrap_content"
+      android:layout_weight="1"
+      android:textColor="?attr/colorForegroundNotice"
+      tools:text="@sample/messages.json/data/message" />
   </LinearLayout>
+
+  <include layout="@layout/widget_chatmessage_daychange" />
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_chatmessage_plain.xml b/app/src/main/res/layout/widget_chatmessage_plain.xml
index 7016bc4ba..7ae5ca5b4 100644
--- a/app/src/main/res/layout/widget_chatmessage_plain.xml
+++ b/app/src/main/res/layout/widget_chatmessage_plain.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -24,8 +24,6 @@
   android:orientation="vertical"
   tools:showIn="@layout/chat_messages">
 
-  <include layout="@layout/widget_chatmessage_daychange" />
-
   <LinearLayout
     android:id="@+id/message_container"
     android:layout_width="match_parent"
@@ -38,24 +36,11 @@
     android:paddingBottom="@dimen/message_vertical"
     android:textAppearance="?android:attr/textAppearanceListItemSmall">
 
-    <TextView
-      android:id="@+id/time_left"
-      android:layout_width="wrap_content"
-      android:layout_height="wrap_content"
-      android:layout_gravity="top"
-      android:layout_marginEnd="@dimen/message_horizontal"
-      android:layout_marginRight="@dimen/message_horizontal"
-      android:textColor="?attr/colorForegroundSecondary"
-      android:typeface="monospace"
-      tools:text="@sample/messages.json/data/time"
-      tools:visibility="gone" />
-
     <FrameLayout
       android:id="@+id/avatar_container"
       android:layout_width="@dimen/avatar_size"
       android:layout_height="@dimen/avatar_size"
       android:layout_marginEnd="@dimen/message_horizontal"
-      android:layout_marginRight="@dimen/message_horizontal"
       android:visibility="gone"
       tools:visibility="visible">
 
@@ -77,6 +62,10 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
+        <Space
+          android:layout_width="4dp"
+          android:layout_height="0dip" />
+
         <TextView
           android:id="@+id/name"
           style="@style/Widget.RtlConformTextView"
@@ -90,10 +79,6 @@
           tools:text="@sample/messages.json/data/sender"
           tools:visibility="visible" />
 
-        <Space
-          android:layout_width="4dp"
-          android:layout_height="0dip" />
-
         <TextView
           android:id="@+id/realname"
           style="@style/Widget.RtlConformTextView"
@@ -147,7 +132,6 @@
           android:layout_height="wrap_content"
           android:layout_gravity="top"
           android:layout_marginStart="@dimen/message_horizontal"
-          android:layout_marginLeft="@dimen/message_horizontal"
           android:textColor="?attr/colorForegroundSecondary"
           android:textStyle="italic"
           android:visibility="gone"
@@ -157,6 +141,19 @@
           tools:visibility="visible" />
       </LinearLayout>
     </LinearLayout>
+
+    <TextView
+      android:id="@+id/time_left"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_gravity="top"
+      android:layout_marginEnd="@dimen/message_horizontal"
+      android:textColor="?attr/colorForegroundSecondary"
+      android:typeface="monospace"
+      tools:text="@sample/messages.json/data/time"
+      tools:visibility="gone" />
   </LinearLayout>
 
+  <include layout="@layout/widget_chatmessage_daychange" />
+
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_chatmessage_server.xml b/app/src/main/res/layout/widget_chatmessage_server.xml
index 7d339b8b2..3c9bc0630 100644
--- a/app/src/main/res/layout/widget_chatmessage_server.xml
+++ b/app/src/main/res/layout/widget_chatmessage_server.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -24,8 +24,6 @@
   android:orientation="vertical"
   tools:showIn="@layout/chat_messages">
 
-  <include layout="@layout/widget_chatmessage_daychange" />
-
   <LinearLayout
     android:id="@+id/message_container"
     android:layout_width="match_parent"
@@ -40,33 +38,22 @@
     android:paddingBottom="@dimen/message_vertical"
     android:textAppearance="?android:attr/textAppearanceListItemSmall">
 
-    <TextView
-      android:id="@+id/time_left"
-      android:layout_width="wrap_content"
-      android:layout_height="wrap_content"
-      android:layout_gravity="top"
-      android:layout_marginEnd="@dimen/message_horizontal"
-      android:layout_marginRight="@dimen/message_horizontal"
-      android:textColor="?attr/colorForegroundSecondary"
-      android:typeface="monospace"
-      tools:text="@sample/messages.json/data/time" />
-
     <Space
       android:id="@+id/avatar_placeholder"
       android:layout_width="@dimen/avatar_size"
       android:layout_height="match_parent"
       android:layout_marginEnd="@dimen/message_horizontal"
-      android:layout_marginRight="@dimen/message_horizontal"
       android:visibility="gone" />
 
-    <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
-      android:id="@+id/combined"
-      style="@style/Widget.RtlConformTextView"
-      android:layout_width="0dip"
+    <TextView
+      android:id="@+id/time_left"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
-      android:layout_weight="1"
+      android:layout_gravity="top"
+      android:layout_marginEnd="@dimen/message_horizontal"
       android:textColor="?attr/colorForegroundSecondary"
-      tools:text="@sample/messages.json/data/message" />
+      android:typeface="monospace"
+      tools:text="@sample/messages.json/data/time" />
 
     <TextView
       android:id="@+id/time_right"
@@ -74,7 +61,6 @@
       android:layout_height="wrap_content"
       android:layout_gravity="top"
       android:layout_marginStart="@dimen/message_horizontal"
-      android:layout_marginLeft="@dimen/message_horizontal"
       android:textColor="?attr/colorForegroundSecondary"
       android:textStyle="italic"
       android:visibility="gone"
@@ -82,5 +68,16 @@
       tools:text="@sample/messages.json/data/time"
       tools:textSize="11.9sp"
       tools:visibility="visible" />
+
+    <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
+      android:id="@+id/combined"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="0dip"
+      android:layout_height="wrap_content"
+      android:layout_weight="1"
+      android:textColor="?attr/colorForegroundSecondary"
+      tools:text="@sample/messages.json/data/message" />
   </LinearLayout>
+
+  <include layout="@layout/widget_chatmessage_daychange" />
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_client.xml b/app/src/main/res/layout/widget_client.xml
index 40691d86b..f28eda5a5 100644
--- a/app/src/main/res/layout/widget_client.xml
+++ b/app/src/main/res/layout/widget_client.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -67,6 +67,5 @@
     android:layout_height="24dp"
     android:layout_gravity="top"
     android:layout_marginStart="16dp"
-    android:layout_marginLeft="16dp"
     app:srcCompat="@drawable/ic_lock" />
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_contributor.xml b/app/src/main/res/layout/widget_contributor.xml
index 95ba56859..8e21bca26 100644
--- a/app/src/main/res/layout/widget_contributor.xml
+++ b/app/src/main/res/layout/widget_contributor.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -25,9 +25,7 @@
   android:gravity="center_vertical"
   android:minHeight="?android:attr/listPreferredItemHeightSmall"
   android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
-  android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
   android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
-  android:paddingRight="?android:attr/listPreferredItemPaddingRight"
   tools:showIn="@layout/preferences_about">
 
   <LinearLayout
diff --git a/app/src/main/res/layout/widget_core_account_add.xml b/app/src/main/res/layout/widget_core_account_add.xml
index ef1f06e38..4762aab26 100644
--- a/app/src/main/res/layout/widget_core_account_add.xml
+++ b/app/src/main/res/layout/widget_core_account_add.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -35,7 +35,6 @@
     android:layout_height="32dp"
     android:layout_gravity="center_vertical"
     android:layout_marginEnd="16dp"
-    android:layout_marginRight="16dp"
     android:tint="#727272"
     app:srcCompat="@drawable/ic_add"
     tools:ignore="ContentDescription" />
diff --git a/app/src/main/res/layout/widget_crash.xml b/app/src/main/res/layout/widget_crash.xml
index 2c92ac872..e6b502158 100644
--- a/app/src/main/res/layout/widget_crash.xml
+++ b/app/src/main/res/layout/widget_crash.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -25,9 +25,7 @@
   android:gravity="center_vertical"
   android:minHeight="?android:attr/listPreferredItemHeightSmall"
   android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
-  android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
-  android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
-  android:paddingRight="?android:attr/listPreferredItemPaddingRight">
+  android:paddingEnd="?android:attr/listPreferredItemPaddingRight">
 
   <LinearLayout
     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/widget_emoji.xml b/app/src/main/res/layout/widget_emoji.xml
index 41e2c57a5..8b261e4eb 100644
--- a/app/src/main/res/layout/widget_emoji.xml
+++ b/app/src/main/res/layout/widget_emoji.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -34,7 +34,6 @@
     android:layout_height="32dp"
     android:layout_gravity="center_vertical|start"
     android:layout_marginEnd="16dp"
-    android:layout_marginRight="16dp"
     android:fontFamily="sans-serif-medium"
     android:gravity="center_vertical|start"
     android:singleLine="true"
diff --git a/app/src/main/res/layout/widget_formatting.xml b/app/src/main/res/layout/widget_formatting.xml
index 5444af863..bc5fdb3d3 100644
--- a/app/src/main/res/layout/widget_formatting.xml
+++ b/app/src/main/res/layout/widget_formatting.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -27,66 +27,19 @@
     android:layout_height="match_parent"
     android:padding="2dp">
 
-    <androidx.appcompat.widget.AppCompatImageButton
-      android:id="@+id/action_format_bold"
-      style="@style/Widget.Button.Format"
-      android:contentDescription="@string/label_bold"
-      app:srcCompat="@drawable/ic_format_bold"
-      app:tint="?colorControlNormal" />
-
-    <Space
-      android:layout_width="2dp"
-      android:layout_height="match_parent" />
-
-    <androidx.appcompat.widget.AppCompatImageButton
-      android:id="@+id/action_format_italic"
-      style="@style/Widget.Button.Format"
-      android:contentDescription="@string/label_italic"
-      app:srcCompat="@drawable/ic_format_italic"
-      app:tint="?colorControlNormal" />
-
-    <Space
-      android:layout_width="2dp"
-      android:layout_height="match_parent" />
-
-    <androidx.appcompat.widget.AppCompatImageButton
-      android:id="@+id/action_format_underline"
-      style="@style/Widget.Button.Format"
-      android:contentDescription="@string/label_underline"
-      app:srcCompat="@drawable/ic_format_underline"
-      app:tint="?colorControlNormal" />
-
-    <Space
-      android:layout_width="2dp"
-      android:layout_height="match_parent" />
-
-    <androidx.appcompat.widget.AppCompatImageButton
-      android:id="@+id/action_format_strikethrough"
-      style="@style/Widget.Button.Format"
-      android:contentDescription="@string/label_strikethrough"
-      app:srcCompat="@drawable/ic_format_strikethrough"
-      app:tint="?colorControlNormal" />
-
-    <Space
-      android:layout_width="2dp"
-      android:layout_height="match_parent" />
-
-    <androidx.appcompat.widget.AppCompatImageButton
-      android:id="@+id/action_format_monospace"
-      style="@style/Widget.Button.Format"
-      android:contentDescription="@string/label_monospace"
-      app:srcCompat="@drawable/ic_format_monospace"
-      app:tint="?colorControlNormal" />
-
-    <Space
-      android:layout_width="2dp"
-      android:layout_height="match_parent" />
-
     <FrameLayout
       android:layout_width="48dp"
       android:layout_height="48dp"
       android:layout_gravity="center">
 
+      <View
+        android:id="@+id/action_format_foreground_preview"
+        android:layout_width="match_parent"
+        android:layout_height="4dp"
+        android:layout_gravity="center_horizontal|bottom"
+        android:layout_margin="8dp"
+        android:background="?colorForeground" />
+
       <androidx.appcompat.widget.AppCompatImageButton
         android:id="@+id/action_format_foreground"
         style="@style/Widget.Button.Format"
@@ -96,25 +49,21 @@
         android:paddingBottom="4dp"
         app:srcCompat="@drawable/ic_format_foreground"
         app:tint="?colorControlNormal" />
-
-      <View
-        android:id="@+id/action_format_foreground_preview"
-        android:layout_width="match_parent"
-        android:layout_height="4dp"
-        android:layout_gravity="center_horizontal|bottom"
-        android:layout_margin="8dp"
-        android:background="?colorForeground" />
     </FrameLayout>
 
-    <Space
-      android:layout_width="2dp"
-      android:layout_height="match_parent" />
-
     <FrameLayout
       android:layout_width="48dp"
       android:layout_height="48dp"
       android:layout_gravity="center">
 
+      <View
+        android:id="@+id/action_format_background_preview"
+        android:layout_width="match_parent"
+        android:layout_height="4dp"
+        android:layout_gravity="center_horizontal|bottom"
+        android:layout_margin="8dp"
+        android:background="?colorBackground" />
+
       <androidx.appcompat.widget.AppCompatImageButton
         android:id="@+id/action_format_background"
         style="@style/Widget.Button.Format"
@@ -124,20 +73,71 @@
         android:paddingBottom="4dp"
         app:srcCompat="@drawable/ic_format_background"
         app:tint="?colorControlNormal" />
-
-      <View
-        android:id="@+id/action_format_background_preview"
-        android:layout_width="match_parent"
-        android:layout_height="4dp"
-        android:layout_gravity="center_horizontal|bottom"
-        android:layout_margin="8dp"
-        android:background="?colorBackground" />
     </FrameLayout>
 
     <Space
       android:layout_width="2dp"
       android:layout_height="match_parent" />
 
+    <Space
+      android:layout_width="2dp"
+      android:layout_height="match_parent" />
+
+    <Space
+      android:layout_width="2dp"
+      android:layout_height="match_parent" />
+
+    <Space
+      android:layout_width="2dp"
+      android:layout_height="match_parent" />
+
+    <Space
+      android:layout_width="2dp"
+      android:layout_height="match_parent" />
+
+    <Space
+      android:layout_width="2dp"
+      android:layout_height="match_parent" />
+
+    <Space
+      android:layout_width="2dp"
+      android:layout_height="match_parent" />
+
+    <androidx.appcompat.widget.AppCompatImageButton
+      android:id="@+id/action_format_bold"
+      style="@style/Widget.Button.Format"
+      android:contentDescription="@string/label_bold"
+      app:srcCompat="@drawable/ic_format_bold"
+      app:tint="?colorControlNormal" />
+
+    <androidx.appcompat.widget.AppCompatImageButton
+      android:id="@+id/action_format_italic"
+      style="@style/Widget.Button.Format"
+      android:contentDescription="@string/label_italic"
+      app:srcCompat="@drawable/ic_format_italic"
+      app:tint="?colorControlNormal" />
+
+    <androidx.appcompat.widget.AppCompatImageButton
+      android:id="@+id/action_format_underline"
+      style="@style/Widget.Button.Format"
+      android:contentDescription="@string/label_underline"
+      app:srcCompat="@drawable/ic_format_underline"
+      app:tint="?colorControlNormal" />
+
+    <androidx.appcompat.widget.AppCompatImageButton
+      android:id="@+id/action_format_strikethrough"
+      style="@style/Widget.Button.Format"
+      android:contentDescription="@string/label_strikethrough"
+      app:srcCompat="@drawable/ic_format_strikethrough"
+      app:tint="?colorControlNormal" />
+
+    <androidx.appcompat.widget.AppCompatImageButton
+      android:id="@+id/action_format_monospace"
+      style="@style/Widget.Button.Format"
+      android:contentDescription="@string/label_monospace"
+      app:srcCompat="@drawable/ic_format_monospace"
+      app:tint="?colorControlNormal" />
+
     <androidx.appcompat.widget.AppCompatImageButton
       android:id="@+id/action_format_clear"
       style="@style/Widget.Button.Format"
diff --git a/app/src/main/res/layout/widget_header.xml b/app/src/main/res/layout/widget_header.xml
index 654625426..b8530f991 100644
--- a/app/src/main/res/layout/widget_header.xml
+++ b/app/src/main/res/layout/widget_header.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -26,23 +26,21 @@
 
   <LinearLayout style="@style/Widget.CoreSettings.PrimaryItemGroupHeader">
 
-    <androidx.appcompat.widget.AppCompatImageView
-      style="@style/Widget.CoreSettings.PrimaryItemIcon"
-      app:srcCompat="@drawable/ic_clock" />
-
     <TextView
       android:id="@+id/title"
       style="@style/Widget.CoreSettings.PrimaryItemSwitch"
       tools:text="@string/label_temporarily_archived" />
+
+    <androidx.appcompat.widget.AppCompatImageView
+      style="@style/Widget.CoreSettings.PrimaryItemIcon"
+      app:srcCompat="@drawable/ic_clock" />
   </LinearLayout>
 
   <TextView
     android:id="@+id/content"
     style="@style/Widget.CoreSettings.TextView"
     android:layout_marginStart="72dp"
-    android:layout_marginLeft="72dp"
     android:layout_marginEnd="16dp"
-    android:layout_marginRight="16dp"
     tools:text="@string/label_temporarily_archived_long" />
 
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_inline_snackbar.xml b/app/src/main/res/layout/widget_inline_snackbar.xml
index 3513ef481..64776b65b 100644
--- a/app/src/main/res/layout/widget_inline_snackbar.xml
+++ b/app/src/main/res/layout/widget_inline_snackbar.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -36,7 +36,6 @@
       android:layout_height="wrap_content"
       android:layout_gravity="center_vertical"
       android:layout_marginStart="16dp"
-      android:layout_marginLeft="16dp"
       android:layout_weight="1"
       android:textColor="?colorOnPrimary"
       tools:text="This server supports SASL" />
diff --git a/app/src/main/res/layout/widget_library.xml b/app/src/main/res/layout/widget_library.xml
index 071b1b8b8..b2ee94ae4 100644
--- a/app/src/main/res/layout/widget_library.xml
+++ b/app/src/main/res/layout/widget_library.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -26,9 +26,7 @@
   android:gravity="center_vertical"
   android:minHeight="?android:attr/listPreferredItemHeightSmall"
   android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
-  android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
   android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
-  android:paddingRight="?android:attr/listPreferredItemPaddingRight"
   tools:showIn="@layout/preferences_about">
 
   <LinearLayout
diff --git a/app/src/main/res/layout/widget_missing_feature.xml b/app/src/main/res/layout/widget_missing_feature.xml
index 389b19fe4..d56b3e7ee 100644
--- a/app/src/main/res/layout/widget_missing_feature.xml
+++ b/app/src/main/res/layout/widget_missing_feature.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -26,9 +26,7 @@
   android:gravity="center_vertical"
   android:minHeight="?android:attr/listPreferredItemHeightSmall"
   android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
-  android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
   android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
-  android:paddingRight="?android:attr/listPreferredItemPaddingRight"
   tools:showIn="@layout/dialog_missing_features">
 
   <LinearLayout
diff --git a/app/src/main/res/layout/widget_network.xml b/app/src/main/res/layout/widget_network.xml
index e052974c0..291703b6f 100644
--- a/app/src/main/res/layout/widget_network.xml
+++ b/app/src/main/res/layout/widget_network.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -25,11 +25,6 @@
   android:background="?attr/backgroundMenuItem"
   android:orientation="vertical">
 
-  <View
-    android:layout_width="match_parent"
-    android:layout_height="1dp"
-    android:background="?attr/colorDivider" />
-
   <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
@@ -68,4 +63,9 @@
       app:srcCompat="@drawable/ic_chevron_down"
       app:tint="?attr/colorTextSecondary" />
   </LinearLayout>
+
+  <View
+    android:layout_width="match_parent"
+    android:layout_height="1dp"
+    android:background="?attr/colorDivider" />
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_nick.xml b/app/src/main/res/layout/widget_nick.xml
index f80f0ba04..e9fb18946 100644
--- a/app/src/main/res/layout/widget_nick.xml
+++ b/app/src/main/res/layout/widget_nick.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -36,7 +36,6 @@
     android:layout_height="@dimen/avatar_size"
     android:layout_gravity="center_vertical"
     android:layout_marginEnd="16dp"
-    android:layout_marginRight="16dp"
     android:contentDescription="@string/label_avatar"
     tools:src="@tools:sample/avatars" />
 
diff --git a/app/src/main/res/layout/widget_nick_away.xml b/app/src/main/res/layout/widget_nick_away.xml
index 1fae09e59..b03ec2064 100644
--- a/app/src/main/res/layout/widget_nick_away.xml
+++ b/app/src/main/res/layout/widget_nick_away.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -36,7 +36,6 @@
     android:layout_height="@dimen/avatar_size"
     android:layout_gravity="center_vertical"
     android:layout_marginEnd="16dp"
-    android:layout_marginRight="16dp"
     android:contentDescription="@string/label_avatar"
     tools:src="@tools:sample/avatars" />
 
@@ -78,7 +77,6 @@
     android:layout_height="24dp"
     android:layout_gravity="center_vertical"
     android:layout_marginStart="16dp"
-    android:layout_marginLeft="16dp"
     android:contentDescription="@string/label_user_away"
     app:srcCompat="@drawable/ic_clock"
     app:tint="?colorTextSecondary" />
diff --git a/app/src/main/res/layout/widget_translator.xml b/app/src/main/res/layout/widget_translator.xml
index d94d08739..7fdc18a82 100644
--- a/app/src/main/res/layout/widget_translator.xml
+++ b/app/src/main/res/layout/widget_translator.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -25,9 +25,7 @@
   android:gravity="center_vertical"
   android:minHeight="?android:attr/listPreferredItemHeightSmall"
   android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
-  android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
   android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
-  android:paddingRight="?android:attr/listPreferredItemPaddingRight"
   tools:showIn="@layout/preferences_about">
 
   <LinearLayout
diff --git a/app/src/main/res/layout/widget_warning_bar.xml b/app/src/main/res/layout/widget_warning_bar.xml
index 2c94f1746..b0df357ab 100644
--- a/app/src/main/res/layout/widget_warning_bar.xml
+++ b/app/src/main/res/layout/widget_warning_bar.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -29,6 +29,13 @@
   android:paddingBottom="6dp"
   android:theme="?attr/actionBarTheme">
 
+  <TextView
+    android:id="@+id/text"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_marginStart="16dp"
+    android:textColor="?android:textColorPrimary" />
+
   <androidx.appcompat.widget.AppCompatImageView
     android:id="@+id/icon"
     android:layout_width="20dp"
@@ -46,12 +53,4 @@
     android:visibility="gone"
     app:mpb_indeterminateTint="?android:textColorPrimary" />
 
-  <TextView
-    android:id="@+id/text"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:layout_marginStart="16dp"
-    android:layout_marginLeft="16dp"
-    android:textColor="?android:textColorPrimary" />
-
 </LinearLayout>
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 78644456f..a66f3f457 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -18,13 +18,17 @@
   -->
 
 <resources xmlns:tools="http://schemas.android.com/tools">
+  <plurals name="label_user_count">
+    <item quantity="one">%1$d Benutzer</item>
+    <item quantity="other">%1$d Benutzer</item>
+  </plurals>
   <string name="app_name">Quasseldroid</string>
   <string name="app_description">Ein Android-Client für das dezentralen Quassel IRC Client.</string>
-  <string name="app_description_long">Quassel ist ein dezentraler IRC client, entwickelt in C++ mit Qt. Quasseldroid ist ein Kotlin-basierter Client für den Quassel Core, der es ermöglicht, Quassel auch auf Android™-Telefonen zu nutzen.</string>
 
+  <string name="app_description_long">Quassel ist ein dezentraler IRC client, entwickelt in C++ mit Qt. Quasseldroid ist ein Kotlin-basierter Client für den Quassel Core, der es ermöglicht, Quassel auch auf Android™-Telefonen zu nutzen.</string>
   <string name="connection_service_title">Verbindungsdienst</string>
-  <string name="connection_service_description">Hält eine Verbindung zum Core, um Benachrichtigungen und die Übertragung von Nachrichten zu ermöglichen</string>
 
+  <string name="connection_service_description">Hält eine Verbindung zum Core, um Benachrichtigungen und die Übertragung von Nachrichten zu ermöglichen</string>
   <string name="label_about">Über</string>
   <string name="label_accept">Akzeptieren</string>
   <string name="label_acknowledgements">Danksagungen</string>
@@ -155,12 +159,8 @@
   <string name="label_who_long">Informationen aller Nutzer aktualisieren</string>
   <string name="label_whois">Whois</string>
   <string name="label_whois_long">Nutzerinformationen aktualisieren</string>
-  <string name="label_yes">Ja</string>
 
-  <plurals name="label_user_count">
-    <item quantity="one">%1$d Benutzer</item>
-    <item quantity="other">%1$d Benutzer</item>
-  </plurals>
+  <string name="label_yes">Ja</string>
 
   <string name="label_feature_synchronizedmarkerline">Benötigt um die vorherige Position in Chats zu synchronisieren</string>
   <string name="label_feature_saslauthentication">Benötigt für SASL</string>
diff --git a/app/src/main/res/values-de/strings_messages.xml b/app/src/main/res/values-de/strings_messages.xml
index 3ad2b476c..7cb1f08af 100644
--- a/app/src/main/res/values-de/strings_messages.xml
+++ b/app/src/main/res/values-de/strings_messages.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -18,15 +18,23 @@
   -->
 
 <resources>
+  <plurals name="message_netsplit_join">
+    <item quantity="one">Netsplit zwischen %1$s und %2$s beendet: %3$d Nutzer war betroffen: %4$s</item>
+    <item quantity="other">Netsplit zwischen %1$s und %2$s beendet: %3$d Nutzer waren betroffen: %4$s</item>
+  </plurals>
+  <plurals name="message_netsplit_quit">
+    <item quantity="one">Netsplit zwischen %1$s und %2$s: %3$d Nutzer ist betroffen: %4$s</item>
+    <item quantity="other">Netsplit zwischen %1$s und %2$s: %3$d Nutzer sind betroffen: %4$s</item>
+  </plurals>
   <string name="message_type_join">Join-Meldungen</string>
   <string name="message_type_part">Part-Meldungen</string>
   <string name="message_type_quit">Quit-Meldungen</string>
   <string name="message_type_nick">Benutzernamensänderungen</string>
   <string name="message_type_mode">Modiänderungen</string>
   <string name="message_type_topic">Themenänderungen</string>
+
   <string name="message_format_copy">[%1$s] %2$s</string>
   <string name="message_format_copy_complex">[%1$s] &lt;%2$s&gt; %3$s</string>
-
   <string name="message_format_action">— %1$s%2$s %3$s</string>
   <string name="message_format_notice">[%1$s%2$s] %3$s</string>
   <string name="message_format_nick">%1$s%2$s heißt jetzt %3$s%4$s</string>
@@ -41,12 +49,4 @@
   <string name="message_format_kick_2">%1$s wurde von %2$s%3$s aus dem Chat geworfen (%4$s)</string>
   <string name="message_format_kill_1">%1$s wurde von %2$s%3$s aus dem Netzwerk geworfen</string>
   <string name="message_format_kill_2">%1$s wurde von %2$s%3$s aus dem Netzwerk geworfen (%4$s)</string>
-  <plurals name="message_netsplit_join">
-    <item quantity="one">Netsplit zwischen %1$s und %2$s beendet: %3$d Nutzer war betroffen: %4$s</item>
-    <item quantity="other">Netsplit zwischen %1$s und %2$s beendet: %3$d Nutzer waren betroffen: %4$s</item>
-  </plurals>
-  <plurals name="message_netsplit_quit">
-    <item quantity="one">Netsplit zwischen %1$s und %2$s: %3$d Nutzer ist betroffen: %4$s</item>
-    <item quantity="other">Netsplit zwischen %1$s und %2$s: %3$d Nutzer sind betroffen: %4$s</item>
-  </plurals>
 </resources>
diff --git a/app/src/main/res/values-fr-rCA/strings_messages.xml b/app/src/main/res/values-fr-rCA/strings_messages.xml
index 2e0598e89..a7419f730 100644
--- a/app/src/main/res/values-fr-rCA/strings_messages.xml
+++ b/app/src/main/res/values-fr-rCA/strings_messages.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -18,15 +18,23 @@
   -->
 
 <resources>
+  <plurals name="message_netsplit_join">
+    <item quantity="one">Netsplit entre %1$s et %2$s est terminé: %3$d nouvel utilisateur: %4$s</item>
+    <item quantity="other">Netsplit entre %1$s et %2$s est terminé: %3$d nouveaux utilisateurs: %4$s</item>
+  </plurals>
+  <plurals name="message_netsplit_quit">
+    <item quantity="one">Netsplit entre %1$s et %2$s: %3$d utilisateur a quitté: %4$s</item>
+    <item quantity="other">Netsplit entre %1$s et %2$s: %3$d utilisateurs ont quittés: %4$s</item>
+  </plurals>
   <string name="message_type_join">Joindre</string>
   <string name="message_type_part">Partir</string>
   <string name="message_type_quit">Quitter</string>
   <string name="message_type_nick">Nom</string>
   <string name="message_type_mode">Mode</string>
   <string name="message_type_topic">Topique</string>
+
   <string name="message_format_copy">[%1$s] %2$s</string>
   <string name="message_format_copy_complex">[%1$s] &lt; %2$s&gt; %3$s</string>
-
   <string name="message_format_action">— %1$s%2$s %3$s</string>
   <string name="message_format_notice">[%1$s%2$s] %3$s</string>
   <string name="message_format_nick">%1$s%2$s est maintenant connu selon: %3$s%4$s</string>
@@ -41,12 +49,4 @@
   <string name="message_format_kick_2">%1$s a été expulsé par %2$s%3$s (%4$s)</string>
   <string name="message_format_kill_1">%1$s a été supprimé %2$s%3$s</string>
   <string name="message_format_kill_2">%1$s a été supprimé par %2$s%3$s (%4$s)</string>
-  <plurals name="message_netsplit_join">
-    <item quantity="one">Netsplit entre %1$s et %2$s est terminé: %3$d nouvel utilisateur: %4$s</item>
-    <item quantity="other">Netsplit entre %1$s et %2$s est terminé: %3$d nouveaux utilisateurs: %4$s</item>
-  </plurals>
-  <plurals name="message_netsplit_quit">
-    <item quantity="one">Netsplit entre %1$s et %2$s: %3$d utilisateur a quitté: %4$s</item>
-    <item quantity="other">Netsplit entre %1$s et %2$s: %3$d utilisateurs ont quittés: %4$s</item>
-  </plurals>
 </resources>
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 8b830ffaf..d9dfed1ea 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -18,13 +18,17 @@
   -->
 
 <resources xmlns:tools="http://schemas.android.com/tools">
+  <plurals name="label_user_count">
+    <item quantity="one">%1$d utente</item>
+    <item quantity="other">%1$d utenti</item>
+  </plurals>
   <string name="app_name">Quasseldroid</string>
   <string name="app_description">Un client Android per utilizzare IRC in modo decentralizzato con Quassel.</string>
-  <string name="app_description_long">Quassel è un client IRC distribuito e decentralizzato, scritto in C++ e Qt. Quasseldroid è un client per il core Quassel scritto interamente in Kotlin che ti offre la possibilità di connetterti ad un core Quassel con il tuo telefono Android™.</string>
 
+  <string name="app_description_long">Quassel è un client IRC distribuito e decentralizzato, scritto in C++ e Qt. Quasseldroid è un client per il core Quassel scritto interamente in Kotlin che ti offre la possibilità di connetterti ad un core Quassel con il tuo telefono Android™.</string>
   <string name="connection_service_title">Servizio di connessione</string>
-  <string name="connection_service_description">Mantiene la connessione al core per ricevere notifiche e trasmettere messaggi.</string>
 
+  <string name="connection_service_description">Mantiene la connessione al core per ricevere notifiche e trasmettere messaggi.</string>
   <string name="label_about">Informazioni</string>
   <string name="label_accept">Accetta</string>
   <string name="label_acknowledgements">Ringraziamenti</string>
@@ -155,12 +159,8 @@
   <string name="label_who_long">Aggiorna le informazioni per tutti gli utenti</string>
   <string name="label_whois">Whois</string>
   <string name="label_whois_long">Aggiorna le informazioni dell’utente</string>
-  <string name="label_yes">Sì</string>
 
-  <plurals name="label_user_count">
-    <item quantity="one">%1$d utente</item>
-    <item quantity="other">%1$d utenti</item>
-  </plurals>
+  <string name="label_yes">Sì</string>
 
   <string name="label_feature_synchronizedmarkerline">Necessario per sincronizzare l’ultima posizione nei canali</string>
   <string name="label_feature_saslauthentication">Necessario per SASL</string>
diff --git a/app/src/main/res/values-it/strings_messages.xml b/app/src/main/res/values-it/strings_messages.xml
index a6db684e0..5a6daa9ff 100644
--- a/app/src/main/res/values-it/strings_messages.xml
+++ b/app/src/main/res/values-it/strings_messages.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -18,15 +18,23 @@
   -->
 
 <resources>
+  <plurals name="message_netsplit_join">
+    <item quantity="one">Netsplit tra %1$s e %2$s terminato: %3$d utente entrato: %4$s</item>
+    <item quantity="other">Netsplit tra %1$s e %2$s terminato: %3$d utenti entrati: %4$s</item>
+  </plurals>
+  <plurals name="message_netsplit_quit">
+    <item quantity="one">Netsplit tra %1$s e %2$s: %3$d utente disconnesso: %4$s</item>
+    <item quantity="other">Netsplit tra %1$s e %2$s: %3$d utenti disconnessi: %4$s</item>
+  </plurals>
   <string name="message_type_join">Entrato</string>
   <string name="message_type_part">Uscito</string>
   <string name="message_type_quit">Disconnesso</string>
   <string name="message_type_nick">Nick</string>
   <string name="message_type_mode">Modo</string>
   <string name="message_type_topic">Argomento</string>
+
   <string name="message_format_copy">[%1$s] %2$s</string>
   <string name="message_format_copy_complex">[%1$s] &lt;%2$s&gt; %3$s</string>
-
   <string name="message_format_action">— %1$s%2$s %3$s</string>
   <string name="message_format_notice">[%1$s%2$s] %3$s</string>
   <string name="message_format_nick">%1$s%2$s è ora conosciuto come %3$s%4$s</string>
@@ -41,12 +49,4 @@
   <string name="message_format_kick_2">%1$s è stato espulso da %2$s%3$s (%4$s)</string>
   <string name="message_format_kill_1">%1$s è stato disconnesso forzatamente da %2$s%3$s</string>
   <string name="message_format_kill_2">%1$s è stato disconnesso forzatamente da %2$s%3$s (%4$s)</string>
-  <plurals name="message_netsplit_join">
-    <item quantity="one">Netsplit tra %1$s e %2$s terminato: %3$d utente entrato: %4$s</item>
-    <item quantity="other">Netsplit tra %1$s e %2$s terminato: %3$d utenti entrati: %4$s</item>
-  </plurals>
-  <plurals name="message_netsplit_quit">
-    <item quantity="one">Netsplit tra %1$s e %2$s: %3$d utente disconnesso: %4$s</item>
-    <item quantity="other">Netsplit tra %1$s e %2$s: %3$d utenti disconnessi: %4$s</item>
-  </plurals>
 </resources>
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index 21803b8b4..06a98b5d0 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -18,13 +18,19 @@
   -->
 
 <resources xmlns:tools="http://schemas.android.com/tools">
+  <plurals name="label_user_count" tools:ignore="UnusedQuantity">
+    <item quantity="one">%1$d vartotojas</item>
+    <item quantity="few">%1$d vartotojai</item>
+    <item quantity="many">%1$d vartotojų</item>
+    <item quantity="other">%1$d vartotojų</item>
+  </plurals>
   <string name="app_name">Quasseldroid</string>
   <string name="app_description">Android klientas decentralizuotam Quassel IRC klientui.</string>
-  <string name="app_description_long">Quassel yra išskirstytas, decentralizuotas IRC klientas, parašytas C++ ir Qt kalbomis. Quasseldroid yra klientas Quassel branduoliui, leidžiantis jums prisijungti prie Quassel branduolio naudojantis jūsų Android™ įrenginiu.</string>
 
+  <string name="app_description_long">Quassel yra išskirstytas, decentralizuotas IRC klientas, parašytas C++ ir Qt kalbomis. Quasseldroid yra klientas Quassel branduoliui, leidžiantis jums prisijungti prie Quassel branduolio naudojantis jūsų Android™ įrenginiu.</string>
   <string name="connection_service_title">Ryšio tarnyba</string>
-  <string name="connection_service_description">Palaiko ryšį su jūsų branduoliu, jog būtų galima siųsti žinutes ir gauti pranešimus.</string>
 
+  <string name="connection_service_description">Palaiko ryšį su jūsų branduoliu, jog būtų galima siųsti žinutes ir gauti pranešimus.</string>
   <string name="label_about">Apie</string>
   <string name="label_accept">Priimti</string>
   <string name="label_acknowledgements">Padėkos</string>
@@ -153,14 +159,8 @@
   <string name="label_who_long">Atnaujinti visų vartotojų informaciją</string>
   <string name="label_whois">Whois</string>
   <string name="label_whois_long">Atnaujinti vartotojo informaciją</string>
-  <string name="label_yes">Taip</string>
 
-  <plurals name="label_user_count" tools:ignore="UnusedQuantity">
-    <item quantity="one">%1$d vartotojas</item>
-    <item quantity="few">%1$d vartotojai</item>
-    <item quantity="many">%1$d vartotojų</item>
-    <item quantity="other">%1$d vartotojų</item>
-  </plurals>
+  <string name="label_yes">Taip</string>
 
   <string name="label_feature_synchronizedmarkerline">Reikalinga norint sinchronizuoti poziciją kanaluose</string>
   <string name="label_feature_saslauthentication">Reikalinga SASL</string>
diff --git a/app/src/main/res/values-lt/strings_messages.xml b/app/src/main/res/values-lt/strings_messages.xml
index 28874a39a..fc749d470 100644
--- a/app/src/main/res/values-lt/strings_messages.xml
+++ b/app/src/main/res/values-lt/strings_messages.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -18,15 +18,27 @@
   -->
 
 <resources xmlns:tools="http://schemas.android.com/tools">
+  <plurals name="message_netsplit_join" tools:ignore="UnusedQuantity">
+    <item quantity="one">Netsplit tarp %1$s ir %2$s baigėsi: %3$d vartotojas prisijungė: %4$s</item>
+    <item quantity="few">Netsplit tarp %1$s ir %2$s baigėsi: %3$d vartotojai prisijungė: %4$s</item>
+    <item quantity="many">Netsplit tarp %1$s ir %2$s baigėsi: %3$d vartotojų prisijungė: %4$s</item>
+    <item quantity="other">Netsplit tarp %1$s ir %2$s baigėsi: %3$d vartotojų prisijungė: %4$s</item>
+  </plurals>
+  <plurals name="message_netsplit_quit" tools:ignore="UnusedQuantity">
+    <item quantity="one">Netsplit tarp %1$s ir %2$s: %3$d vartotojas išėjo: %4$s</item>
+    <item quantity="few">Netsplit tarp %1$s ir %2$s: %3$d vartotojai išėjo: %4$s</item>
+    <item quantity="many">Netsplit tarp %1$s ir %2$s: %3$d vartotojų išėjo: %4$s</item>
+    <item quantity="other">Netsplit tarp %1$s ir %2$s: %3$d vartotojų išėjo: %4$s</item>
+  </plurals>
   <string name="message_type_join">Prisijungimas</string>
   <string name="message_type_part">Atsijungimas</string>
   <string name="message_type_quit">Išėjimas</string>
   <string name="message_type_nick">Slapyvardis</string>
   <string name="message_type_mode">Rėžimas</string>
   <string name="message_type_topic">Tema</string>
+
   <string name="message_format_copy">[%1$s] %2$s</string>
   <string name="message_format_copy_complex">[%1$s] &lt;%2$s&gt; %3$s</string>
-
   <string name="message_format_action">— %1$s%2$s %3$s</string>
   <string name="message_format_notice">[%1$s%2$s] %3$s</string>
   <string name="message_format_nick">%1$s%2$s dabar žinomas kaip %3$s%4$s</string>
@@ -39,19 +51,7 @@
   <string name="message_format_quit_2">%1$s%2$s išėjo (%3$s)</string>
   <string name="message_format_kick_1">%1$s buvo išspirtas %2$s%3$s</string>
   <string name="message_format_kick_2">%1$s buvo išspirtas %2$s%3$s (%4$s)</string>
+  <!-- Transifex’ quantity handling is different from Android’s. Issue opened on 2018-05-18 -->
   <string name="message_format_kill_1">%1$s buvo nužudytas %2$s%3$s</string>
   <string name="message_format_kill_2">%1$s buvo nužudytas %2$s%3$s (%4$s)</string>
-  <!-- Transifex’ quantity handling is different from Android’s. Issue opened on 2018-05-18 -->
-  <plurals name="message_netsplit_join" tools:ignore="UnusedQuantity">
-    <item quantity="one">Netsplit tarp %1$s ir %2$s baigėsi: %3$d vartotojas prisijungė: %4$s</item>
-    <item quantity="few">Netsplit tarp %1$s ir %2$s baigėsi: %3$d vartotojai prisijungė: %4$s</item>
-    <item quantity="many">Netsplit tarp %1$s ir %2$s baigėsi: %3$d vartotojų prisijungė: %4$s</item>
-    <item quantity="other">Netsplit tarp %1$s ir %2$s baigėsi: %3$d vartotojų prisijungė: %4$s</item>
-  </plurals>
-  <plurals name="message_netsplit_quit" tools:ignore="UnusedQuantity">
-    <item quantity="one">Netsplit tarp %1$s ir %2$s: %3$d vartotojas išėjo: %4$s</item>
-    <item quantity="few">Netsplit tarp %1$s ir %2$s: %3$d vartotojai išėjo: %4$s</item>
-    <item quantity="many">Netsplit tarp %1$s ir %2$s: %3$d vartotojų išėjo: %4$s</item>
-    <item quantity="other">Netsplit tarp %1$s ir %2$s: %3$d vartotojų išėjo: %4$s</item>
-  </plurals>
 </resources>
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 08770c933..a20109170 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -18,13 +18,17 @@
   -->
 
 <resources xmlns:tools="http://schemas.android.com/tools">
+  <plurals name="label_user_count">
+    <item quantity="one">%1$d utilizadores</item>
+    <item quantity="other">%1$d utilizadores</item>
+  </plurals>
   <string name="app_name">Quasseldroid</string>
   <string name="app_description">Um cliente baseado no Android para o cliente de IRC Quassel descentralizado.</string>
-  <string name="app_description_long">Quassel é um cliente IRC distribuído e descentralizado, escrito usando C++ e Qt. O Quasseldroid é um cliente escrito puramente em kotlin para o núcleo Quassel, permitindo que você se ligue ao seu núcleo Quassel usando o seu telemóvel Android™.</string>
 
+  <string name="app_description_long">Quassel é um cliente IRC distribuído e descentralizado, escrito usando C++ e Qt. O Quasseldroid é um cliente escrito puramente em kotlin para o núcleo Quassel, permitindo que você se ligue ao seu núcleo Quassel usando o seu telemóvel Android™.</string>
   <string name="connection_service_title">Serviço de Ligação</string>
-  <string name="connection_service_description">Mantém uma ligação com o seu núcleo para permitir notificações e transmissão de mensagens.</string>
 
+  <string name="connection_service_description">Mantém uma ligação com o seu núcleo para permitir notificações e transmissão de mensagens.</string>
   <string name="label_about">Sobre</string>
   <string name="label_accept">Aceitar</string>
   <string name="label_acknowledgements">Agradecimentos</string>
@@ -153,12 +157,8 @@
   <string name="label_who_long">Atualizar as informações de utilizador de todos os utilizadores</string>
   <string name="label_whois">Whois</string>
   <string name="label_whois_long">Atualizar informações de utilizador</string>
-  <string name="label_yes">Sim</string>
 
-  <plurals name="label_user_count">
-    <item quantity="one">%1$d utilizadores</item>
-    <item quantity="other">%1$d utilizadores</item>
-  </plurals>
+  <string name="label_yes">Sim</string>
 
   <string name="label_feature_synchronizedmarkerline">Necessário para sincronizar a última posição nos canais</string>
   <string name="label_feature_saslauthentication">Necessario para SASL</string>
diff --git a/app/src/main/res/values-pt/strings_messages.xml b/app/src/main/res/values-pt/strings_messages.xml
index 7bec4264b..8ed0c3164 100644
--- a/app/src/main/res/values-pt/strings_messages.xml
+++ b/app/src/main/res/values-pt/strings_messages.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -18,15 +18,23 @@
   -->
 
 <resources>
+  <plurals name="message_netsplit_join">
+    <item quantity="one">Netsplit entre %1$s e %2$s terminou: %3$d utilizadores entraram: %4$s</item>
+    <item quantity="other">Netsplit entre %1$s e %2$s terminou: %3$d utilizadores entraram: %4$s</item>
+  </plurals>
+  <plurals name="message_netsplit_quit">
+    <item quantity="one">Netsplit entre %1$s and %2$s: %3$d user qui: %4$s</item>
+    <item quantity="other">Netsplit entre %1$s e %2$s: %3$d utilizadores saíram: %4$s</item>
+  </plurals>
   <string name="message_type_join">Entrar</string>
   <string name="message_type_part">Sair</string>
   <string name="message_type_quit">Desligar</string>
   <string name="message_type_nick">Nick</string>
   <string name="message_type_mode">Modo</string>
   <string name="message_type_topic">Tópico</string>
+
   <string name="message_format_copy">[%1$s] %2$s</string>
   <string name="message_format_copy_complex">[%1$s] &lt;%2$s&gt; %3$s</string>
-
   <string name="message_format_action">— %1$s%2$s %3$s</string>
   <string name="message_format_notice">[%1$s%2$s] %3$s</string>
   <string name="message_format_nick">%1$s%2$s é agora conhecido/a como %3$s%4$s</string>
@@ -41,12 +49,4 @@
   <string name="message_format_kick_2">%1$s foi kickado por %2$s%3$s (%4$s)</string>
   <string name="message_format_kill_1">%1$s foi killado por %2$s%3$s</string>
   <string name="message_format_kill_2">%1$s foi killado por %2$s%3$s (%4$s)</string>
-  <plurals name="message_netsplit_join">
-    <item quantity="one">Netsplit entre %1$s e %2$s terminou: %3$d utilizadores entraram: %4$s</item>
-    <item quantity="other">Netsplit entre %1$s e %2$s terminou: %3$d utilizadores entraram: %4$s</item>
-  </plurals>
-  <plurals name="message_netsplit_quit">
-    <item quantity="one">Netsplit entre %1$s and %2$s: %3$d user qui: %4$s</item>
-    <item quantity="other">Netsplit entre %1$s e %2$s: %3$d utilizadores saíram: %4$s</item>
-  </plurals>
 </resources>
diff --git a/app/src/main/res/values-sr/strings_messages.xml b/app/src/main/res/values-sr/strings_messages.xml
index 2b8c67752..e72e3182e 100644
--- a/app/src/main/res/values-sr/strings_messages.xml
+++ b/app/src/main/res/values-sr/strings_messages.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -18,15 +18,25 @@
   -->
 
 <resources>
+  <plurals name="message_netsplit_join">
+    <item quantity="one">Netsplit između %1$s i %2$s se završio: %3$d se pridružio/la: %4$s</item>
+    <item quantity="few">Netsplit između %1$s i %2$s se završio: %3$d su se pridružili: %4$s</item>
+    <item quantity="other">Netsplit između %1$s i %2$s se završio: %3$d korisnika se pridružilo: %4$s</item>
+  </plurals>
+  <plurals name="message_netsplit_quit">
+    <item quantity="one">Netsplit između %1$s i %2$s: %3$d je napustio/la: %4$s</item>
+    <item quantity="few">Netsplit između %1$s i %2$s: %3$d su napustili: %4$s</item>
+    <item quantity="other">Netsplit između %1$s i %2$s: %3$d korisnika je prekinulo vezu: %4$s</item>
+  </plurals>
   <string name="message_type_join">Pridruži se</string>
   <string name="message_type_part">Napusti</string>
   <string name="message_type_quit">Izađi</string>
   <string name="message_type_nick">Nadimak</string>
   <string name="message_type_mode">Mod</string>
   <string name="message_type_topic">Tema</string>
+
   <string name="message_format_copy">[%1$s] %2$s</string>
   <string name="message_format_copy_complex">[%1$s] &lt;%2$s&gt; %3$s</string>
-
   <string name="message_format_action">— %1$s%2$s %3$s</string>
   <string name="message_format_notice">[%1$s%2$s] %3$s</string>
   <string name="message_format_nick">%1$s%2$s je sada poznat/a kao %3$s%4$s</string>
@@ -41,14 +51,4 @@
   <string name="message_format_kick_2">%1$s je izbačen od %2$s%3$s (%4$s)</string>
   <string name="message_format_kill_1">%1$s je ubijen/na od %2$s%3$s</string>
   <string name="message_format_kill_2">%1$s je ubijen/na od %2$s%3$s (%4$s)</string>
-  <plurals name="message_netsplit_join">
-    <item quantity="one">Netsplit između %1$s i %2$s se završio: %3$d se pridružio/la: %4$s</item>
-    <item quantity="few">Netsplit između %1$s i %2$s se završio: %3$d su se pridružili: %4$s</item>
-    <item quantity="other">Netsplit između %1$s i %2$s se završio: %3$d korisnika se pridružilo: %4$s</item>
-  </plurals>
-  <plurals name="message_netsplit_quit">
-    <item quantity="one">Netsplit između %1$s i %2$s: %3$d je napustio/la: %4$s</item>
-    <item quantity="few">Netsplit između %1$s i %2$s: %3$d su napustili: %4$s</item>
-    <item quantity="other">Netsplit između %1$s i %2$s: %3$d korisnika je prekinulo vezu: %4$s</item>
-  </plurals>
 </resources>
diff --git a/app/src/main/res/values-v17/styles_widgets.xml b/app/src/main/res/values-v17/styles_widgets.xml
deleted file mode 100644
index c975c6f82..000000000
--- a/app/src/main/res/values-v17/styles_widgets.xml
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!--
-  Quasseldroid - Quassel client for Android
-
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
-
-  This program is free software: you can redistribute it and/or modify it
-  under the terms of the GNU General Public License version 3 as published
-  by the Free Software Foundation.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License along
-  with this program. If not, see <http://www.gnu.org/licenses/>.
-  -->
-
-<resources>
-
-  <style name="Widget.RtlConformTextView" parent="">
-    <item name="android:textAlignment">gravity</item>
-    <item name="android:textDirection">locale</item>
-  </style>
-
-  <style name="Widget.CoreSettings.Wrapper" parent="">
-    <item name="android:layout_width">match_parent</item>
-    <item name="android:layout_height">wrap_content</item>
-    <item name="android:orientation">vertical</item>
-    <item name="android:paddingStart">?listPreferredItemPaddingLeft</item>
-    <item name="android:paddingLeft">?listPreferredItemPaddingLeft</item>
-    <item name="android:paddingEnd">?listPreferredItemPaddingRight</item>
-    <item name="android:paddingRight">?listPreferredItemPaddingRight</item>
-    <item name="android:paddingTop">8dp</item>
-    <item name="android:paddingBottom">8dp</item>
-  </style>
-
-  <style name="Widget.CoreSettings.PrimaryItemGroupHeader" parent="">
-    <item name="android:layout_width">match_parent</item>
-    <item name="android:layout_height">wrap_content</item>
-    <item name="android:background">?selectableItemBackground</item>
-    <item name="android:gravity">center_vertical</item>
-    <item name="android:minHeight">?listPreferredItemHeightSmall</item>
-    <item name="android:paddingEnd">?listPreferredItemPaddingRight</item>
-    <item name="android:paddingLeft">?listPreferredItemPaddingLeft</item>
-    <item name="android:paddingRight">?listPreferredItemPaddingRight</item>
-    <item name="android:paddingStart">?listPreferredItemPaddingLeft</item>
-  </style>
-
-  <style name="Widget.CoreSettings.PrimaryItemGroup" parent="">
-    <item name="android:layout_width">match_parent</item>
-    <item name="android:layout_height">wrap_content</item>
-    <item name="android:layout_marginLeft">72dp</item>
-    <item name="android:layout_marginStart">72dp</item>
-    <item name="android:orientation">vertical</item>
-  </style>
-
-  <style name="Widget.CoreSettings.PrimaryItemIcon" parent="">
-    <item name="android:layout_width">24dp</item>
-    <item name="android:layout_height">24dp</item>
-    <item name="android:layout_gravity">center_vertical</item>
-    <item name="android:layout_marginRight">32dp</item>
-    <item name="android:layout_marginEnd">32dp</item>
-    <item name="tint">?colorTextSecondary</item>
-  </style>
-
-  <style name="Widget.CoreSettings.DependentGroup" parent="">
-    <item name="android:layout_width">match_parent</item>
-    <item name="android:layout_height">wrap_content</item>
-    <item name="android:orientation">vertical</item>
-    <item name="android:visibility">gone</item>
-    <item name="android:layout_marginLeft">56dp</item>
-    <item name="android:layout_marginStart">56dp</item>
-  </style>
-
-  <style name="Widget.CoreSettings.EditTextSuffix" parent="Widget.RtlConformTextView">
-    <item name="android:layout_width">wrap_content</item>
-    <item name="android:layout_height">wrap_content</item>
-    <item name="android:layout_gravity">bottom|end</item>
-    <item name="android:layout_marginBottom">12dp</item>
-    <item name="android:layout_marginEnd">8dp</item>
-    <item name="android:layout_marginRight">8dp</item>
-    <item name="android:textColor">?colorTextSecondary</item>
-  </style>
-
-  <style name="Widget.CoreSettings.SubHeader" parent="Widget.RtlConformTextView">
-    <item name="android:layout_width">match_parent</item>
-    <item name="android:layout_height">wrap_content</item>
-    <item name="android:layout_gravity">center_vertical</item>
-    <item name="android:paddingTop">10dp</item>
-    <item name="android:paddingBottom">10dp</item>
-    <item name="android:paddingRight">16dp</item>
-    <item name="android:paddingEnd">16dp</item>
-    <item name="android:gravity">center_vertical</item>
-    <item name="android:textAppearance">?android:textAppearanceMedium</item>
-    <item name="android:textSize">14sp</item>
-    <item name="android:textColor">?colorTextPrimary</item>
-    <item name="android:textStyle">bold</item>
-  </style>
-
-  <style name="Widget.CoreSettings.TextView" parent="Widget.RtlConformTextView">
-    <item name="android:layout_width">match_parent</item>
-    <item name="android:layout_height">wrap_content</item>
-    <item name="android:layout_gravity">center_vertical</item>
-    <item name="android:paddingTop">10dp</item>
-    <item name="android:paddingBottom">10dp</item>
-    <item name="android:paddingRight">16dp</item>
-    <item name="android:paddingEnd">16dp</item>
-    <item name="android:gravity">center_vertical</item>
-    <item name="android:textAppearance">?android:textAppearanceMedium</item>
-    <item name="android:textSize">14sp</item>
-    <item name="android:textColor">?colorTextSecondary</item>
-  </style>
-
-  <style name="Widget.Info.Header" parent="">
-    <item name="android:layout_width">match_parent</item>
-    <item name="android:layout_height">wrap_content</item>
-    <item name="android:gravity">center_vertical</item>
-    <item name="android:minHeight">?listPreferredItemHeight</item>
-    <item name="android:orientation">vertical</item>
-    <item name="android:paddingBottom">8dp</item>
-    <item name="android:paddingEnd">?android:attr/listPreferredItemPaddingRight</item>
-    <item name="android:paddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
-    <item name="android:paddingRight">?android:attr/listPreferredItemPaddingRight</item>
-    <item name="android:paddingStart">?android:attr/listPreferredItemPaddingLeft</item>
-    <item name="android:paddingTop">8dp</item>
-  </style>
-
-  <style name="Widget.Info.Section" parent="Widget.RtlConformTextView">
-    <item name="android:layout_width">wrap_content</item>
-    <item name="android:layout_height">wrap_content</item>
-    <item name="android:gravity">center_vertical</item>
-    <item name="android:minHeight">48dp</item>
-    <item name="android:paddingBottom">8dp</item>
-    <item name="android:paddingEnd">?android:attr/listPreferredItemPaddingRight</item>
-    <item name="android:paddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
-    <item name="android:paddingRight">?android:attr/listPreferredItemPaddingRight</item>
-    <item name="android:paddingStart">?android:attr/listPreferredItemPaddingLeft</item>
-    <item name="android:paddingTop">8dp</item>
-    <item name="android:textColor">?colorTextPrimary</item>
-    <item name="android:textStyle">bold</item>
-  </style>
-
-  <style name="Widget.Info.Item" parent="">
-    <item name="android:layout_width">match_parent</item>
-    <item name="android:layout_height">wrap_content</item>
-    <item name="android:gravity">center_vertical</item>
-    <item name="android:minHeight">?android:attr/listPreferredItemHeightSmall</item>
-    <item name="android:orientation">vertical</item>
-    <item name="android:paddingBottom">16dp</item>
-    <item name="android:paddingEnd">?android:attr/listPreferredItemPaddingRight</item>
-    <item name="android:paddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
-    <item name="android:paddingRight">?android:attr/listPreferredItemPaddingRight</item>
-    <item name="android:paddingStart">?android:attr/listPreferredItemPaddingLeft</item>
-    <item name="android:paddingTop">16dp</item>
-  </style>
-
-  <style name="Widget.Subhead" parent="Widget.RtlConformTextView">
-    <item name="android:layout_width">match_parent</item>
-    <item name="android:layout_height">wrap_content</item>
-    <item name="android:gravity">center_vertical</item>
-    <item name="android:minHeight">?listPreferredItemHeightSmall</item>
-    <item name="android:paddingEnd">?listPreferredItemPaddingRight</item>
-    <item name="android:paddingLeft">?listPreferredItemPaddingLeft</item>
-    <item name="android:paddingRight">?listPreferredItemPaddingRight</item>
-    <item name="android:paddingStart">?listPreferredItemPaddingLeft</item>
-    <item name="android:textColor">?colorAccent</item>
-    <item name="android:textSize">14sp</item>
-    <item name="android:textStyle">bold</item>
-  </style>
-</resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 560cce6ab..cbde82b7e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -18,13 +18,17 @@
   -->
 
 <resources xmlns:tools="http://schemas.android.com/tools">
+  <plurals name="label_user_count">
+    <item quantity="one">%1$d user</item>
+    <item quantity="other">%1$d users</item>
+  </plurals>
   <string name="app_name">Quasseldroid</string>
   <string name="app_description">An Android-based client for the decentralized Quassel IRC client.</string>
-  <string name="app_description_long">Quassel is a distributed, decentralized IRC client, written using C++ and Qt. Quasseldroid is a pure-kotlin client for the Quassel core, allowing you to connect to your Quassel core using your Android™ phone.</string>
 
+  <string name="app_description_long">Quassel is a distributed, decentralized IRC client, written using C++ and Qt. Quasseldroid is a pure-kotlin client for the Quassel core, allowing you to connect to your Quassel core using your Android™ phone.</string>
   <string name="connection_service_title">Connection Service</string>
-  <string name="connection_service_description">Keeps a connection to your core to allow for notifications, and to transmit messages.</string>
 
+  <string name="connection_service_description">Keeps a connection to your core to allow for notifications, and to transmit messages.</string>
   <string name="label_about">About</string>
   <string name="label_accept">Accept</string>
   <string name="label_acknowledgements">Acknowledgements</string>
@@ -155,12 +159,8 @@
   <string name="label_who_long">Update user information of all users</string>
   <string name="label_whois">Whois</string>
   <string name="label_whois_long">Update user information</string>
-  <string name="label_yes">Yes</string>
 
-  <plurals name="label_user_count">
-    <item quantity="one">%1$d user</item>
-    <item quantity="other">%1$d users</item>
-  </plurals>
+  <string name="label_yes">Yes</string>
 
   <string name="label_feature_synchronizedmarkerline">Required for synchronizing the last position in channels</string>
   <string name="label_feature_saslauthentication">Required for SASL</string>
diff --git a/app/src/main/res/values/strings_messages.xml b/app/src/main/res/values/strings_messages.xml
index 9e246e174..6153889e7 100644
--- a/app/src/main/res/values/strings_messages.xml
+++ b/app/src/main/res/values/strings_messages.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -18,24 +18,24 @@
   -->
 
 <resources>
+  <plurals name="message_netsplit_join">
+    <item quantity="one">Netsplit between %1$s and %2$s ended: %3$d user joined: %4$s</item>
+    <item quantity="other">Netsplit between %1$s and %2$s ended: %3$d users joined: %4$s</item>
+  </plurals>
+  <plurals name="message_netsplit_quit">
+    <item quantity="one">Netsplit between %1$s and %2$s: %3$d user quit: %4$s</item>
+    <item quantity="other">Netsplit between %1$s and %2$s: %3$d users quit: %4$s</item>
+  </plurals>
   <string name="message_type_join">Join</string>
   <string name="message_type_part">Part</string>
   <string name="message_type_quit">Quit</string>
   <string name="message_type_nick">Nick</string>
   <string name="message_type_mode">Mode</string>
-  <string name="message_type_topic">Topic</string>
-  <string-array name="message_filter_types" translatable="false">
-    <item>@string/message_type_join</item>
-    <item>@string/message_type_part</item>
-    <item>@string/message_type_quit</item>
-    <item>@string/message_type_nick</item>
-    <item>@string/message_type_mode</item>
-    <item>@string/message_type_topic</item>
-  </string-array>
 
+  <string name="message_type_topic">Topic</string>
   <string name="message_format_copy">[%1$s] %2$s</string>
-  <string name="message_format_copy_complex">[%1$s] &lt;%2$s&gt; %3$s</string>
 
+  <string name="message_format_copy_complex">[%1$s] &lt;%2$s&gt; %3$s</string>
   <string name="message_format_action">— %1$s%2$s %3$s</string>
   <string name="message_format_notice">[%1$s%2$s] %3$s</string>
   <string name="message_format_nick">%1$s%2$s is now known as %3$s%4$s</string>
@@ -50,12 +50,12 @@
   <string name="message_format_kick_2">%1$s was kicked by %2$s%3$s (%4$s)</string>
   <string name="message_format_kill_1">%1$s was killed by %2$s%3$s</string>
   <string name="message_format_kill_2">%1$s was killed by %2$s%3$s (%4$s)</string>
-  <plurals name="message_netsplit_join">
-    <item quantity="one">Netsplit between %1$s and %2$s ended: %3$d user joined: %4$s</item>
-    <item quantity="other">Netsplit between %1$s and %2$s ended: %3$d users joined: %4$s</item>
-  </plurals>
-  <plurals name="message_netsplit_quit">
-    <item quantity="one">Netsplit between %1$s and %2$s: %3$d user quit: %4$s</item>
-    <item quantity="other">Netsplit between %1$s and %2$s: %3$d users quit: %4$s</item>
-  </plurals>
+  <string-array name="message_filter_types" translatable="false">
+    <item>@string/message_type_join</item>
+    <item>@string/message_type_part</item>
+    <item>@string/message_type_quit</item>
+    <item>@string/message_type_nick</item>
+    <item>@string/message_type_mode</item>
+    <item>@string/message_type_topic</item>
+  </string-array>
 </resources>
diff --git a/app/src/main/res/values/strings_preferences.xml b/app/src/main/res/values/strings_preferences.xml
index c1d7384e5..110584314 100644
--- a/app/src/main/res/values/strings_preferences.xml
+++ b/app/src/main/res/values/strings_preferences.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -36,59 +36,25 @@
   <string name="preference_theme_entry_gruvbox_light">Gruvbox (Light)</string>
   <string name="preference_theme_entry_gruvbox_dark">Gruvbox (Dark)</string>
   <string name="preference_theme_entry_dracula">Dracula</string>
-  <string-array name="preference_theme_entries" translatable="false">
-    <item>@string/preference_theme_entry_material_light</item>
-    <item>@string/preference_theme_entry_material_dark</item>
-    <item>@string/preference_theme_entry_quassel_light</item>
-    <item>@string/preference_theme_entry_quassel_dark</item>
-    <item>@string/preference_theme_entry_amoled</item>
-    <item>@string/preference_theme_entry_solarized_light</item>
-    <item>@string/preference_theme_entry_solarized_dark</item>
-    <item>@string/preference_theme_entry_gruvbox_light</item>
-    <item>@string/preference_theme_entry_gruvbox_dark</item>
-    <item>@string/preference_theme_entry_dracula</item>
-  </string-array>
-  <string-array name="preference_theme_entryvalues" translatable="false">
-    <item>MATERIAL_LIGHT</item>
-    <item>MATERIAL_DARK</item>
-    <item>QUASSEL_LIGHT</item>
-    <item>QUASSEL_DARK</item>
-    <item>AMOLED</item>
-    <item>SOLARIZED_LIGHT</item>
-    <item>SOLARIZED_DARK</item>
-    <item>GRUVBOX_LIGHT</item>
-    <item>GRUVBOX_DARK</item>
-    <item>DRACULA</item>
-  </string-array>
-
   <string name="preference_input_enter_key" translatable="false">input_enter</string>
   <string name="preference_input_enter_title">Enter key on keyboard</string>
+
   <string name="preference_input_enter_entry_emoji">Emoji</string>
   <string name="preference_input_enter_entry_send">Send</string>
   <string name="preference_input_enter_entry_newline">New Line</string>
-  <string-array name="preference_input_enter_entries" translatable="false">
-    <item>@string/preference_input_enter_entry_emoji</item>
-    <item>@string/preference_input_enter_entry_send</item>
-    <item>@string/preference_input_enter_entry_newline</item>
-  </string-array>
-  <string-array name="preference_input_enter_entryvalues" translatable="false">
-    <item>EMOJI</item>
-    <item>SEND</item>
-    <item>NEWLINE</item>
-  </string-array>
-
   <string name="preference_show_lag_key" translatable="false">show_lag</string>
   <string name="preference_show_lag_title">Show Lag</string>
   <string name="preference_show_lag_summary">Displays the lag between client and core in the action bar</string>
-
   <string name="preference_keep_screen_on_key" translatable="false">keep_screen_on</string>
+
   <string name="preference_keep_screen_on_title">Keep Screen Active</string>
   <string name="preference_keep_screen_on_summary">Prevents the device from going to sleep while the app is in foreground</string>
-
   <string name="preference_language_key" translatable="false">language</string>
+
   <string name="preference_language_title">Language</string>
   <string name="preference_language_entry_auto">System Default</string>
   <string name="preference_language_entry_en" translatable="false">English</string>
+
   <string name="preference_language_entry_en_gb" translatable="false">English (Great Britain)</string>
   <string name="preference_language_entry_de" translatable="false">Deutsch</string>
   <string name="preference_language_entry_fr" translatable="false">Français</string>
@@ -98,56 +64,29 @@
   <string name="preference_language_entry_nl" translatable="false">Nederlands</string>
   <string name="preference_language_entry_pt" translatable="false">Português</string>
   <string name="preference_language_entry_sr" translatable="false">Srpski (latinica)</string>
-  <string-array name="preference_language_entries" translatable="false">
-    <item>@string/preference_language_entry_auto</item>
-    <item>@string/preference_language_entry_en</item>
-    <item>@string/preference_language_entry_en_gb</item>
-    <item>@string/preference_language_entry_de</item>
-    <item>@string/preference_language_entry_fr</item>
-    <item>@string/preference_language_entry_fr_ca</item>
-    <item>@string/preference_language_entry_it</item>
-    <item>@string/preference_language_entry_lt</item>
-    <item>@string/preference_language_entry_pt</item>
-    <item>@string/preference_language_entry_sr</item>
-  </string-array>
-  <string-array name="preference_language_entryvalues" translatable="false">
-    <item />
-    <item>en</item>
-    <item>en_gb</item>
-    <item>de</item>
-    <item>fr</item>
-    <item>fr-CA</item>
-    <item>it</item>
-    <item>lt</item>
-    <item>pt</item>
-    <item>sr</item>
-  </string-array>
-
-
   <string name="preference_redirection_title">Message Redirection</string>
-
   <string name="preference_redirection_user_notices_key" translatable="false">redirection_user_notices</string>
   <string name="preference_redirection_user_notices_title">Redirect User Notices</string>
   <string name="preference_redirection_user_notices_summary">Displays user notices in the currently open channel</string>
-
   <string name="preference_redirection_server_notices_key" translatable="false">redirection_user_notices</string>
   <string name="preference_redirection_server_notices_title">Redirect Server Notices</string>
+
+
   <string name="preference_redirection_server_notices_summary">Displays server notices in the currently open channel</string>
 
   <string name="preference_redirection_errors_key" translatable="false">redirection_errors</string>
   <string name="preference_redirection_errors_title">Redirect Errors</string>
   <string name="preference_redirection_errors_summary">Displays errors in the currently open channel</string>
 
-
   <string name="preference_notifications_title">Notifications</string>
-
   <string name="preference_notification_query_key" translatable="false">notification_query</string>
   <string name="preference_notification_query_title">Direct Messages</string>
 
   <string name="preference_notification_channel_key" translatable="false">notification_channel</string>
   <string name="preference_notification_channel_title">Channel Messages</string>
-
   <string name="preference_notification_other_key" translatable="false">notification_other</string>
+
+
   <string name="preference_notification_other_title">Other Messages</string>
 
   <string name="preference_notification_sound_key" translatable="false">notification_sound</string>
@@ -161,33 +100,22 @@
 
   <string name="preference_notification_mark_read_on_swipe_key" translatable="false">mark_read_on_swipe</string>
   <string name="preference_notification_mark_read_on_swipe_title">Mark channel read when swiping notifications</string>
-  <string name="preference_notification_mark_read_on_swipe_summary">Marks all messages in a channel as read when a notification for the channel is swiped away</string>
 
+  <string name="preference_notification_mark_read_on_swipe_summary">Marks all messages in a channel as read when a notification for the channel is swiped away</string>
   <string name="preference_notification_network_name_in_notification_title_key" translatable="false">network_name_in_notification_title</string>
-  <string name="preference_notification_network_name_in_notification_title_title">Show network name in notifications title</string>
 
+  <string name="preference_notification_network_name_in_notification_title_title">Show network name in notifications title</string>
   <string name="preference_notification_show_all_activities_in_toolbar_key" translatable="false">show_all_activities_in_toolbar</string>
+
   <string name="preference_notification_show_all_activities_in_toolbar_title">Mark all activities in toolbar</string>
   <string name="preference_notification_show_all_activities_in_toolbar_summary">Displays a colored bubble in the toolbar for all chat activities</string>
-
   <string name="preference_notification_configure_key" translatable="false">notification_configure</string>
-  <string name="preference_notification_configure_title">Configure Notifications</string>
 
+  <string name="preference_notification_configure_title">Configure Notifications</string>
   <string name="preference_notifications_level_all">All Messages</string>
+
   <string name="preference_notifications_level_highlight">Mentions</string>
   <string name="preference_notifications_level_none">Never</string>
-  <string-array name="preference_notifications_level_entries" translatable="false">
-    <item>@string/preference_notifications_level_all</item>
-    <item>@string/preference_notifications_level_highlight</item>
-    <item>@string/preference_notifications_level_none</item>
-  </string-array>
-  <string-array name="preference_notifications_level_entryvalues" translatable="false">
-    <item>ALL</item>
-    <item>HIGHLIGHT</item>
-    <item>NONE</item>
-  </string-array>
-
-
   <string name="preference_messages_title">Messages</string>
 
   <string name="preference_monospace_key" translatable="false">monospace</string>
@@ -195,64 +123,43 @@
 
   <string name="preference_textsize_key" translatable="false">fontsize</string>
   <string name="preference_textsize_title">Text Size</string>
-
   <string name="preference_show_seconds_key" translatable="false">show_seconds</string>
   <string name="preference_show_seconds_title">Show Seconds</string>
-
   <string name="preference_use_24h_clock_key" translatable="false">use_24h_clock</string>
+
+
   <string name="preference_use_24h_clock_title">Use 24h Clock</string>
 
   <string name="preference_colorize_mirc_key" translatable="false">colorize_mirc</string>
   <string name="preference_colorize_mirc_title">Use mIRC Colors</string>
+
   <string name="preference_colorize_mirc_summaryon">Show mIRC colors in messages</string>
   <string name="preference_colorize_mirc_summaryoff">Strip mIRC colors from messages</string>
 
   <string name="preference_colorize_nicknames_key" translatable="false">colorize_nicknames</string>
   <string name="preference_colorize_nicknames_title">Colorize nicknames</string>
+
   <string name="preference_colorize_nicknames_entry_all">All nicks</string>
   <string name="preference_colorize_nicknames_entry_all_but_mine">All but own nick</string>
-  <string name="preference_colorize_nicknames_entry_none">No nicks</string>
-  <string-array name="preference_colorize_nicknames_entries" translatable="false">
-    <item>@string/preference_colorize_nicknames_entry_all</item>
-    <item>@string/preference_colorize_nicknames_entry_all_but_mine</item>
-    <item>@string/preference_colorize_nicknames_entry_none</item>
-  </string-array>
-  <string-array name="preference_colorize_nicknames_entryvalues" translatable="false">
-    <item>ALL</item>
-    <item>ALL_BUT_MINE</item>
-    <item>NONE</item>
-  </string-array>
 
+  <string name="preference_colorize_nicknames_entry_none">No nicks</string>
   <string name="preference_show_prefix_key" translatable="false">show_prefix</string>
   <string name="preference_show_prefix_title">Show sendermodes</string>
   <string name="preference_show_prefix_entry_all">All modes</string>
+
   <string name="preference_show_prefix_entry_highest">Highest mode</string>
   <string name="preference_show_prefix_entry_none">No modes</string>
-  <string-array name="preference_show_prefix_entries" translatable="false">
-    <item>@string/preference_show_prefix_entry_all</item>
-    <item>@string/preference_show_prefix_entry_highest</item>
-    <item>@string/preference_show_prefix_entry_none</item>
-  </string-array>
-  <string-array name="preference_show_prefix_entryvalues" translatable="false">
-    <item>ALL</item>
-    <item>HIGHEST</item>
-    <item>NONE</item>
-  </string-array>
-
   <string name="preference_hostmask_actions_key" translatable="false">hostmask_actions</string>
   <string name="preference_hostmask_actions_title">Show Hostmask in actions</string>
   <string name="preference_hostmask_actions_summary">Display the full nick!ident@host in join/part/quit messages</string>
-
   <string name="preference_nicks_on_new_line_key" translatable="false">nicks_on_new_line</string>
   <string name="preference_nicks_on_new_line_title">Separate Nicknames</string>
-  <string name="preference_nicks_on_new_line_summary">Shows nicknames on a separate line</string>
 
+  <string name="preference_nicks_on_new_line_summary">Shows nicknames on a separate line</string>
   <string name="preference_show_realnames_key" translatable="false">show_realnames</string>
   <string name="preference_show_realnames_title">Show Realnames</string>
-
   <string name="preference_show_avatars_key" translatable="false">show_avatars</string>
   <string name="preference_show_avatars_title">Show Avatars</string>
-
   <string name="preference_square_avatars_key" translatable="false">square_avatars</string>
   <string name="preference_square_avatars_title">Square Avatars</string>
 
@@ -266,9 +173,10 @@
 
   <string name="preference_show_matrix_avatars_key" translatable="false">show_matrix_avatars</string>
   <string name="preference_show_matrix_avatars_title">Show Matrix Avatars</string>
-  <string name="preference_show_matrix_avatars_summary">Shows for users without avatar their Matrix fallback, if available</string>
 
+  <string name="preference_show_matrix_avatars_summary">Shows for users without avatar their Matrix fallback, if available</string>
   <string name="preference_time_at_end_key" translatable="false">time_at_end</string>
+
   <string name="preference_time_at_end_title">Right-Aligned Timestamps</string>
   <string name="preference_time_at_end_summary">Aligns timestamps at the end of each message</string>
 
@@ -284,23 +192,23 @@
   <string name="preference_replace_emoji_title">Replace Emoji Shortcodes</string>
   <string name="preference_replace_emoji_summary">Automatically replaces shortcodes such as :+1: or :like: with emoji</string>
 
-
   <string name="preference_autocomplete_title">Autocomplete</string>
-
   <string name="preference_autocomplete_sender_doubleclick_key" translatable="false">autocomplete_sender_doubleclick</string>
   <string name="preference_autocomplete_sender_doubleclick_title">Sender Autocomplete</string>
-  <string name="preference_autocomplete_sender_doubleclick_summary">Doubleclick on a message to autocomplete its sender</string>
 
+  <string name="preference_autocomplete_sender_doubleclick_summary">Doubleclick on a message to autocomplete its sender</string>
   <string name="preference_autocomplete_button_key" translatable="false">autocomplete_button</string>
   <string name="preference_autocomplete_button_title">Autocomplete Button</string>
-  <string name="preference_autocomplete_button_summary">Shows a button on the left of the input line that triggers tabcomplete</string>
 
+  <string name="preference_autocomplete_button_summary">Shows a button on the left of the input line that triggers tabcomplete</string>
   <string name="preference_autocomplete_doubletap_key" translatable="false">autocomplete_doubletap</string>
   <string name="preference_autocomplete_doubletap_title">Double tap to autocomplete</string>
-  <string name="preference_autocomplete_doubletap_summary">Suggest nicks and channels after doubleclicking on the input field</string>
 
+  <string name="preference_autocomplete_doubletap_summary">Suggest nicks and channels after doubleclicking on the input field</string>
   <string name="preference_autocomplete_auto_key" translatable="false">autocomplete_auto</string>
   <string name="preference_autocomplete_auto_title">Show automatically</string>
+
+
   <string name="preference_autocomplete_auto_summary">Suggest nicks and channels after entering the first 3 characters</string>
 
   <string name="preference_autocomplete_prefix_key" translatable="false">autocomplete_prefix</string>
@@ -309,17 +217,14 @@
 
   <string name="preference_autocomplete_nicks_key" translatable="false">autocomplete_nicks</string>
   <string name="preference_autocomplete_nicks_title">Autocomplete Nicknames</string>
-
   <string name="preference_autocomplete_buffers_key" translatable="false">autocomplete_buffers</string>
-  <string name="preference_autocomplete_buffers_title">Autocomplete Chats</string>
 
+  <string name="preference_autocomplete_buffers_title">Autocomplete Chats</string>
   <string name="preference_autocomplete_aliases_key" translatable="false">autocomplete_aliases</string>
   <string name="preference_autocomplete_aliases_title">Autocomplete Commands</string>
 
   <string name="preference_autocomplete_emoji_key" translatable="false">autocomplete_emoji</string>
   <string name="preference_autocomplete_emoji_title">Autocomplete Emoji</string>
-
-
   <string name="preference_backlog_title">Backlog</string>
 
   <string name="preference_page_size_key" translatable="false">page_size</string>
@@ -328,15 +233,17 @@
 
   <string name="preference_initial_amount_key" translatable="false">initial_amount</string>
   <string name="preference_initial_amount_title">Initial Amount</string>
-  <string name="preference_initial_amount_summary">Number of messages to load when opening a buffer for the first time</string>
 
+  <string name="preference_initial_amount_summary">Number of messages to load when opening a buffer for the first time</string>
   <string name="preference_clear_cache_key" translatable="false">clear_cache_key</string>
-  <string name="preference_clear_cache_title">Clear Backlog Cache</string>
 
+  <string name="preference_clear_cache_title">Clear Backlog Cache</string>
   <string name="preference_connection_title">Connection</string>
 
   <string name="preference_show_notification_key" translatable="false">show_notification</string>
   <string name="preference_show_notification_title">Show notification</string>
+
+
   <string name="preference_show_notification_summary">Keeps Quasseldroid always connected by showing a persistent notification</string>
 
   <string name="preference_ignore_network_changes_key" translatable="false">ignore_network_changes</string>
@@ -344,4 +251,97 @@
   <string name="preference_ignore_network_changes_summary">Stops Quasseldroid from reconnecting automatically if the network changes</string>
 
   <string name="preference_notification_id_key" translatable="false">notification_id</string>
+  <string-array name="preference_theme_entries" translatable="false">
+    <item>@string/preference_theme_entry_material_light</item>
+    <item>@string/preference_theme_entry_material_dark</item>
+    <item>@string/preference_theme_entry_quassel_light</item>
+    <item>@string/preference_theme_entry_quassel_dark</item>
+    <item>@string/preference_theme_entry_amoled</item>
+    <item>@string/preference_theme_entry_solarized_light</item>
+    <item>@string/preference_theme_entry_solarized_dark</item>
+    <item>@string/preference_theme_entry_gruvbox_light</item>
+    <item>@string/preference_theme_entry_gruvbox_dark</item>
+    <item>@string/preference_theme_entry_dracula</item>
+  </string-array>
+  <string-array name="preference_theme_entryvalues" translatable="false">
+    <item>MATERIAL_LIGHT</item>
+    <item>MATERIAL_DARK</item>
+    <item>QUASSEL_LIGHT</item>
+    <item>QUASSEL_DARK</item>
+    <item>AMOLED</item>
+    <item>SOLARIZED_LIGHT</item>
+    <item>SOLARIZED_DARK</item>
+    <item>GRUVBOX_LIGHT</item>
+    <item>GRUVBOX_DARK</item>
+    <item>DRACULA</item>
+  </string-array>
+
+  <string-array name="preference_input_enter_entries" translatable="false">
+    <item>@string/preference_input_enter_entry_emoji</item>
+    <item>@string/preference_input_enter_entry_send</item>
+    <item>@string/preference_input_enter_entry_newline</item>
+  </string-array>
+  <string-array name="preference_input_enter_entryvalues" translatable="false">
+    <item>EMOJI</item>
+    <item>SEND</item>
+    <item>NEWLINE</item>
+  </string-array>
+
+  <string-array name="preference_language_entries" translatable="false">
+    <item>@string/preference_language_entry_auto</item>
+    <item>@string/preference_language_entry_en</item>
+    <item>@string/preference_language_entry_en_gb</item>
+    <item>@string/preference_language_entry_de</item>
+    <item>@string/preference_language_entry_fr</item>
+    <item>@string/preference_language_entry_fr_ca</item>
+    <item>@string/preference_language_entry_it</item>
+    <item>@string/preference_language_entry_lt</item>
+    <item>@string/preference_language_entry_pt</item>
+    <item>@string/preference_language_entry_sr</item>
+  </string-array>
+
+  <string-array name="preference_language_entryvalues" translatable="false">
+    <item />
+    <item>en</item>
+    <item>en_gb</item>
+    <item>de</item>
+    <item>fr</item>
+    <item>fr-CA</item>
+    <item>it</item>
+    <item>lt</item>
+    <item>pt</item>
+    <item>sr</item>
+  </string-array>
+  <string-array name="preference_notifications_level_entries" translatable="false">
+    <item>@string/preference_notifications_level_all</item>
+    <item>@string/preference_notifications_level_highlight</item>
+    <item>@string/preference_notifications_level_none</item>
+  </string-array>
+  <string-array name="preference_notifications_level_entryvalues" translatable="false">
+    <item>ALL</item>
+    <item>HIGHLIGHT</item>
+    <item>NONE</item>
+  </string-array>
+
+  <string-array name="preference_colorize_nicknames_entries" translatable="false">
+    <item>@string/preference_colorize_nicknames_entry_all</item>
+    <item>@string/preference_colorize_nicknames_entry_all_but_mine</item>
+    <item>@string/preference_colorize_nicknames_entry_none</item>
+  </string-array>
+  <string-array name="preference_colorize_nicknames_entryvalues" translatable="false">
+    <item>ALL</item>
+    <item>ALL_BUT_MINE</item>
+    <item>NONE</item>
+  </string-array>
+  <string-array name="preference_show_prefix_entries" translatable="false">
+    <item>@string/preference_show_prefix_entry_all</item>
+    <item>@string/preference_show_prefix_entry_highest</item>
+    <item>@string/preference_show_prefix_entry_none</item>
+  </string-array>
+
+  <string-array name="preference_show_prefix_entryvalues" translatable="false">
+    <item>ALL</item>
+    <item>HIGHEST</item>
+    <item>NONE</item>
+  </string-array>
 </resources>
diff --git a/app/src/main/res/values/styles_widgets.xml b/app/src/main/res/values/styles_widgets.xml
index 91b625487..93db80380 100644
--- a/app/src/main/res/values/styles_widgets.xml
+++ b/app/src/main/res/values/styles_widgets.xml
@@ -1,8 +1,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -21,7 +21,10 @@
 
   <style name="Widget" />
 
-  <style name="Widget.RtlConformTextView" parent="" />
+  <style name="Widget.RtlConformTextView" parent="">
+    <item name="android:textAlignment">gravity</item>
+    <item name="android:textDirection">locale</item>
+  </style>
 
   <style name="Widget.Button.Borderless" parent="Widget.MaterialComponents.Button.TextButton">
     <item name="android:textColor">?attr/colorTextPrimary</item>
@@ -142,7 +145,9 @@
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:orientation">vertical</item>
+    <item name="android:paddingStart">?listPreferredItemPaddingLeft</item>
     <item name="android:paddingLeft">?listPreferredItemPaddingLeft</item>
+    <item name="android:paddingEnd">?listPreferredItemPaddingRight</item>
     <item name="android:paddingRight">?listPreferredItemPaddingRight</item>
     <item name="android:paddingTop">8dp</item>
     <item name="android:paddingBottom">8dp</item>
@@ -154,14 +159,17 @@
     <item name="android:background">?selectableItemBackground</item>
     <item name="android:gravity">center_vertical</item>
     <item name="android:minHeight">?listPreferredItemHeightSmall</item>
+    <item name="android:paddingEnd">?listPreferredItemPaddingRight</item>
     <item name="android:paddingLeft">?listPreferredItemPaddingLeft</item>
     <item name="android:paddingRight">?listPreferredItemPaddingRight</item>
+    <item name="android:paddingStart">?listPreferredItemPaddingLeft</item>
   </style>
 
   <style name="Widget.CoreSettings.PrimaryItemGroup" parent="">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:layout_marginLeft">72dp</item>
+    <item name="android:layout_marginStart">72dp</item>
     <item name="android:orientation">vertical</item>
   </style>
 
@@ -190,6 +198,7 @@
     <item name="android:layout_height">24dp</item>
     <item name="android:layout_gravity">center_vertical</item>
     <item name="android:layout_marginRight">32dp</item>
+    <item name="android:layout_marginEnd">32dp</item>
     <item name="tint">?colorTextSecondary</item>
   </style>
 
@@ -199,6 +208,7 @@
     <item name="android:orientation">vertical</item>
     <item name="android:visibility">gone</item>
     <item name="android:layout_marginLeft">56dp</item>
+    <item name="android:layout_marginStart">56dp</item>
   </style>
 
   <style name="Widget.CoreSettings.EditText" parent="Widget.RtlConformTextView">
@@ -207,11 +217,12 @@
     <item name="android:textColor">?colorTextPrimary</item>
   </style>
 
-  <style name="Widget.CoreSettings.EditTextSuffix" parent="">
+  <style name="Widget.CoreSettings.EditTextSuffix" parent="Widget.RtlConformTextView">
     <item name="android:layout_width">wrap_content</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:layout_gravity">bottom|end</item>
     <item name="android:layout_marginBottom">12dp</item>
+    <item name="android:layout_marginEnd">8dp</item>
     <item name="android:layout_marginRight">8dp</item>
     <item name="android:textColor">?colorTextSecondary</item>
   </style>
@@ -232,6 +243,7 @@
     <item name="android:paddingTop">10dp</item>
     <item name="android:paddingBottom">10dp</item>
     <item name="android:paddingRight">16dp</item>
+    <item name="android:paddingEnd">16dp</item>
     <item name="android:gravity">center_vertical</item>
     <item name="android:textAppearance">?android:textAppearanceMedium</item>
     <item name="android:textSize">14sp</item>
@@ -246,6 +258,7 @@
     <item name="android:paddingTop">10dp</item>
     <item name="android:paddingBottom">10dp</item>
     <item name="android:paddingRight">16dp</item>
+    <item name="android:paddingEnd">16dp</item>
     <item name="android:gravity">center_vertical</item>
     <item name="android:textAppearance">?android:textAppearanceMedium</item>
     <item name="android:textSize">14sp</item>
@@ -263,10 +276,11 @@
     <item name="android:minHeight">?listPreferredItemHeight</item>
     <item name="android:orientation">vertical</item>
     <item name="android:paddingBottom">8dp</item>
+    <item name="android:paddingEnd">?android:attr/listPreferredItemPaddingRight</item>
     <item name="android:paddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
     <item name="android:paddingRight">?android:attr/listPreferredItemPaddingRight</item>
+    <item name="android:paddingStart">?android:attr/listPreferredItemPaddingLeft</item>
     <item name="android:paddingTop">8dp</item>
-    <item name="android:animateLayoutChanges">true</item>
   </style>
 
   <style name="Widget.Info.Header.Name" parent="Widget.RtlConformTextView">
@@ -305,8 +319,10 @@
     <item name="android:gravity">center_vertical</item>
     <item name="android:minHeight">48dp</item>
     <item name="android:paddingBottom">8dp</item>
+    <item name="android:paddingEnd">?android:attr/listPreferredItemPaddingRight</item>
     <item name="android:paddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
     <item name="android:paddingRight">?android:attr/listPreferredItemPaddingRight</item>
+    <item name="android:paddingStart">?android:attr/listPreferredItemPaddingLeft</item>
     <item name="android:paddingTop">8dp</item>
     <item name="android:textColor">?colorTextPrimary</item>
     <item name="android:textStyle">bold</item>
@@ -319,10 +335,11 @@
     <item name="android:minHeight">?android:attr/listPreferredItemHeightSmall</item>
     <item name="android:orientation">vertical</item>
     <item name="android:paddingBottom">16dp</item>
+    <item name="android:paddingEnd">?android:attr/listPreferredItemPaddingRight</item>
     <item name="android:paddingLeft">?android:attr/listPreferredItemPaddingLeft</item>
     <item name="android:paddingRight">?android:attr/listPreferredItemPaddingRight</item>
+    <item name="android:paddingStart">?android:attr/listPreferredItemPaddingLeft</item>
     <item name="android:paddingTop">16dp</item>
-    <item name="android:animateLayoutChanges">true</item>
   </style>
 
   <style name="Widget.Info.Item.Content" parent="Widget.RtlConformTextView">
@@ -348,12 +365,14 @@
   </style>
 
   <style name="Widget.Subhead" parent="Widget.RtlConformTextView">
-    <item name="android:layout_width">wrap_content</item>
+    <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:gravity">center_vertical</item>
     <item name="android:minHeight">?listPreferredItemHeightSmall</item>
+    <item name="android:paddingEnd">?listPreferredItemPaddingRight</item>
     <item name="android:paddingLeft">?listPreferredItemPaddingLeft</item>
     <item name="android:paddingRight">?listPreferredItemPaddingRight</item>
+    <item name="android:paddingStart">?listPreferredItemPaddingLeft</item>
     <item name="android:textColor">?colorAccent</item>
     <item name="android:textSize">14sp</item>
     <item name="android:textStyle">bold</item>
@@ -374,15 +393,12 @@
   </style>
 
   <!-- NavigationDrawerLayout -->
-  <declare-styleable name="NavigationDrawerLayout">
-    <attr name="insetBackground" />
-  </declare-styleable>
-
   <style name="Widget.NavigationDrawerLayout" parent="">
     <item name="insetBackground">#4000</item>
   </style>
 
   <attr name="icon" format="reference" />
+
   <attr name="text" format="string" />
   <attr name="mode">
     <enum name="none" value="0" />
@@ -391,6 +407,9 @@
     <enum name="progress" value="3" />
   </attr>
   <attr name="buttonText" format="string" />
+  <declare-styleable name="NavigationDrawerLayout">
+    <attr name="insetBackground" />
+  </declare-styleable>
 
   <!-- WarningBarView -->
   <declare-styleable name="WarningBarView">
diff --git a/app/src/main/res/values/themes_amoled.xml b/app/src/main/res/values/themes_amoled.xml
index d84a10414..5c3b2adc6 100644
--- a/app/src/main/res/values/themes_amoled.xml
+++ b/app/src/main/res/values/themes_amoled.xml
@@ -3,8 +3,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -20,7 +20,6 @@
   -->
 
 <resources>
-  <color name="amoled_background">#000000</color>
 
   <style name="Theme.ChatTheme.Amoled" parent="Theme.ChatTheme.Auto">
     <item name="colorPrimary">#000</item>
@@ -81,4 +80,6 @@
     <item name="colorTintPartiallySecure">#ffaf3b</item>
     <item name="colorTintInsecure">#BB2222</item>
   </style>
+
+  <color name="amoled_background">#000000</color>
 </resources>
diff --git a/app/src/main/res/values/themes_dracula.xml b/app/src/main/res/values/themes_dracula.xml
index e1afaed47..3d8c2f175 100644
--- a/app/src/main/res/values/themes_dracula.xml
+++ b/app/src/main/res/values/themes_dracula.xml
@@ -3,8 +3,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -20,8 +20,6 @@
   -->
 
 <resources>
-  <color name="dracula_dark_background">#282a36</color>
-
   <style name="Theme.ChatTheme.Dracula" parent="Theme.ChatTheme.Auto">
     <item name="colorPrimary">?attr/colorBackgroundCard</item>
     <item name="colorPrimaryDark">?attr/colorBackground</item>
@@ -85,4 +83,6 @@
     <item name="colorTintPartiallySecure">#ffb86c</item>
     <item name="colorTintInsecure">#ff5555</item>
   </style>
+
+  <color name="dracula_dark_background">#282a36</color>
 </resources>
diff --git a/app/src/main/res/values/themes_gruvbox.xml b/app/src/main/res/values/themes_gruvbox.xml
index d9ee8ebd5..638b89c0b 100644
--- a/app/src/main/res/values/themes_gruvbox.xml
+++ b/app/src/main/res/values/themes_gruvbox.xml
@@ -3,8 +3,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -20,8 +20,6 @@
   -->
 
 <resources>
-  <color name="gruvbox_light_background">#fbf1c7</color>
-
   <style name="Theme.ChatTheme.Gruvbox_Light" parent="Theme.ChatTheme.Light.Auto">
     <item name="colorPrimary">?attr/colorBackgroundCard</item>
     <item name="colorPrimaryDark">#b6ae91</item>
@@ -85,8 +83,6 @@
     <item name="colorTintInsecure">#9d0006</item>
   </style>
 
-  <color name="gruvbox_dark_background">#282828</color>
-
   <style name="Theme.ChatTheme.Gruvbox_Dark" parent="Theme.ChatTheme.Auto">
     <item name="colorPrimary">?attr/colorBackgroundCard</item>
     <item name="colorPrimaryDark">#3c3734</item>
@@ -149,4 +145,8 @@
     <item name="colorTintPartiallySecure">#d79921</item>
     <item name="colorTintInsecure">#cc241d</item>
   </style>
+
+  <color name="gruvbox_light_background">#fbf1c7</color>
+
+  <color name="gruvbox_dark_background">#282828</color>
 </resources>
diff --git a/app/src/main/res/values/themes_material.xml b/app/src/main/res/values/themes_material.xml
index 82ce901e9..7207cf717 100644
--- a/app/src/main/res/values/themes_material.xml
+++ b/app/src/main/res/values/themes_material.xml
@@ -3,8 +3,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -20,8 +20,6 @@
   -->
 
 <resources>
-  <color name="material_light_background">#fafafa</color>
-
   <style name="Theme.ChatTheme.Material_Light" parent="Theme.ChatTheme.Light.DarkHead">
     <item name="senderColor0">#F44336</item>
     <item name="senderColor1">#2196F3</item>
@@ -76,8 +74,6 @@
     <item name="colorTintInsecure">#D32F2F</item>
   </style>
 
-  <color name="material_dark_background">#303030</color>
-
   <style name="Theme.ChatTheme.Material_Dark" parent="Theme.ChatTheme.Auto">
     <item name="senderColor0">#F44336</item>
     <item name="senderColor1">#2196F3</item>
@@ -132,4 +128,8 @@
     <item name="colorTintPartiallySecure">#FFC107</item>
     <item name="colorTintInsecure">#D32F2F</item>
   </style>
+
+  <color name="material_light_background">#fafafa</color>
+
+  <color name="material_dark_background">#303030</color>
 </resources>
diff --git a/app/src/main/res/values/themes_quassel.xml b/app/src/main/res/values/themes_quassel.xml
index 20ba64eda..38a9e4163 100644
--- a/app/src/main/res/values/themes_quassel.xml
+++ b/app/src/main/res/values/themes_quassel.xml
@@ -3,8 +3,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -20,8 +20,6 @@
   -->
 
 <resources>
-  <color name="quassel_light_background">#fafafa</color>
-
   <style name="Theme.ChatTheme.Quassel_Light" parent="Theme.ChatTheme.Light.DarkHead">
     <item name="senderColor0">#cc0000</item>
     <item name="senderColor1">#006cad</item>
@@ -78,8 +76,6 @@
     <item name="colorTintInsecure">#BB2222</item>
   </style>
 
-  <color name="quassel_dark_background">#303030</color>
-
   <style name="Theme.ChatTheme.Quassel_Dark" parent="Theme.ChatTheme.Auto">
     <item name="senderColor0">#cc0000</item>
     <item name="senderColor1">#006cad</item>
@@ -136,4 +132,8 @@
     <item name="colorTintPartiallySecure">#ffaf3b</item>
     <item name="colorTintInsecure">#BB2222</item>
   </style>
+
+  <color name="quassel_light_background">#fafafa</color>
+
+  <color name="quassel_dark_background">#303030</color>
 </resources>
diff --git a/app/src/main/res/values/themes_solarized.xml b/app/src/main/res/values/themes_solarized.xml
index 3afa65194..4a4f38bcc 100644
--- a/app/src/main/res/values/themes_solarized.xml
+++ b/app/src/main/res/values/themes_solarized.xml
@@ -3,8 +3,8 @@
 <!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -20,8 +20,6 @@
   -->
 
 <resources>
-  <color name="solarized_light_background">#FDF6E3</color>
-
   <style name="Theme.ChatTheme.Solarized_Light" parent="Theme.ChatTheme.Light.Auto">
     <item name="colorPrimary">?attr/colorBackgroundCard</item>
     <item name="colorPrimaryDark">#b0ac9e</item>
@@ -85,8 +83,6 @@
     <item name="colorTintInsecure">#CB4B16</item>
   </style>
 
-  <color name="solarized_dark_background">#002B36</color>
-
   <style name="Theme.ChatTheme.Solarized_Dark" parent="Theme.ChatTheme.Auto">
     <item name="colorPrimary">?attr/colorBackgroundCard</item>
     <item name="colorPrimaryDark">?attr/colorBackground</item>
@@ -150,4 +146,8 @@
     <item name="colorTintPartiallySecure">#B58900</item>
     <item name="colorTintInsecure">#CB4B16</item>
   </style>
+
+  <color name="solarized_light_background">#FDF6E3</color>
+
+  <color name="solarized_dark_background">#002B36</color>
 </resources>
diff --git a/app/src/main/res/xml/network_security_config.xml b/app/src/main/res/xml/network_security_config.xml
index 1f0994416..ea464f8b2 100644
--- a/app/src/main/res/xml/network_security_config.xml
+++ b/app/src/main/res/xml/network_security_config.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -17,13 +17,15 @@
   with this program. If not, see <http://www.gnu.org/licenses/>.
   -->
 
-<network-security-config>
-  <base-config cleartextTrafficPermitted="true">
+<network-security-config xmlns:tools="http://schemas.android.com/tools">
+  <base-config>
     <trust-anchors>
       <!-- Trust preinstalled CAs -->
       <certificates src="system" />
       <!-- Additionally trust user added CAs -->
-      <certificates src="user" />
+      <certificates
+        src="user"
+        tools:ignore="AcceptsUserCertificates" />
     </trust-anchors>
   </base-config>
 </network-security-config>
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index f886cb38e..b5ad607b6 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?><!--
   Quasseldroid - Quassel client for Android
 
-  Copyright (c) 2019 Janne Mareike Koschinski
-  Copyright (c) 2019 The Quassel Project
+  Copyright (c) 2020 Janne Mareike Koschinski
+  Copyright (c) 2020 The Quassel Project
 
   This program is free software: you can redistribute it and/or modify it
   under the terms of the GNU General Public License version 3 as published
@@ -21,20 +21,7 @@
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:robobunny="http://robobunny.com">
 
-  <PreferenceScreen android:layout="@layout/widget_advertisement_support_patreon">
-    <intent
-      android:action="android.intent.action.VIEW"
-      android:data="https://www.patreon.com/justjanne" />
-  </PreferenceScreen>
-
   <PreferenceCategory android:title="@string/preference_appearance_title">
-    <ListPreference
-      android:defaultValue="MATERIAL_LIGHT"
-      android:entries="@array/preference_theme_entries"
-      android:entryValues="@array/preference_theme_entryvalues"
-      android:key="@string/preference_theme_key"
-      android:title="@string/preference_theme_title" />
-
     <DropDownPreference
       android:defaultValue="NEWLINE"
       android:entries="@array/preference_input_enter_entries"
@@ -42,17 +29,12 @@
       android:key="@string/preference_input_enter_key"
       android:title="@string/preference_input_enter_title" />
 
-    <SwitchPreference
-      android:defaultValue="false"
-      android:key="@string/preference_show_lag_key"
-      android:summary="@string/preference_show_lag_summary"
-      android:title="@string/preference_show_lag_title" />
-
-    <SwitchPreference
-      android:defaultValue="false"
-      android:key="@string/preference_keep_screen_on_key"
-      android:summary="@string/preference_keep_screen_on_summary"
-      android:title="@string/preference_keep_screen_on_title" />
+    <ListPreference
+      android:defaultValue="MATERIAL_LIGHT"
+      android:entries="@array/preference_theme_entries"
+      android:entryValues="@array/preference_theme_entryvalues"
+      android:key="@string/preference_theme_key"
+      android:title="@string/preference_theme_title" />
 
     <ListPreference
       android:defaultValue=""
@@ -60,9 +42,22 @@
       android:entryValues="@array/preference_language_entryvalues"
       android:key="@string/preference_language_key"
       android:title="@string/preference_language_title" />
+
+    <SwitchPreference
+      android:defaultValue="false"
+      android:key="@string/preference_keep_screen_on_key"
+      android:summary="@string/preference_keep_screen_on_summary"
+      android:title="@string/preference_keep_screen_on_title" />
+
+    <SwitchPreference
+      android:defaultValue="false"
+      android:key="@string/preference_show_lag_key"
+      android:summary="@string/preference_show_lag_summary"
+      android:title="@string/preference_show_lag_title" />
   </PreferenceCategory>
 
   <PreferenceCategory android:layout="@layout/widget_preference_divider" />
+
   <PreferenceCategory android:title="@string/preference_redirection_title">
     <SwitchPreference
       android:defaultValue="true"
@@ -80,7 +75,6 @@
       android:summary="@string/preference_redirection_errors_summary"
       android:title="@string/preference_redirection_errors_title" />
   </PreferenceCategory>
-
   <PreferenceCategory android:layout="@layout/widget_preference_divider" />
 
   <PreferenceCategory android:title="@string/preference_notifications_title">
@@ -103,6 +97,16 @@
       android:key="@string/preference_notification_other_key"
       android:title="@string/preference_notification_other_title" />
 
+    <PreferenceScreen
+      android:key="@string/preference_notification_configure_key"
+      android:title="@string/preference_notification_configure_title">
+      <intent android:action="android.settings.APP_NOTIFICATION_SETTINGS">
+        <extra
+          android:name="android.provider.extra.APP_PACKAGE"
+          android:value="@string/package_name" />
+      </intent>
+    </PreferenceScreen>
+
     <SwitchPreference
       android:defaultValue="false"
       android:key="@string/preference_notification_mark_read_on_swipe_key"
@@ -120,14 +124,6 @@
       android:summary="@string/preference_notification_show_all_activities_in_toolbar_summary"
       android:title="@string/preference_notification_show_all_activities_in_toolbar_title" />
 
-    <de.kuschku.quasseldroid.util.ui.settings.RingtonePreference
-      android:defaultValue="content://settings/system/notification_sound"
-      android:key="@string/preference_notification_sound_key"
-      android:title="@string/preference_notification_sound_title"
-      app:ringtoneType="notification"
-      app:showDefault="true"
-      app:showSilent="true" />
-
     <SwitchPreference
       android:defaultValue="true"
       android:key="@string/preference_notification_vibration_key"
@@ -138,33 +134,38 @@
       android:key="@string/preference_notification_light_key"
       android:title="@string/preference_notification_light_title" />
 
-    <PreferenceScreen
-      android:key="@string/preference_notification_configure_key"
-      android:title="@string/preference_notification_configure_title">
-      <intent android:action="android.settings.APP_NOTIFICATION_SETTINGS">
-        <extra
-          android:name="android.provider.extra.APP_PACKAGE"
-          android:value="@string/package_name" />
-      </intent>
-    </PreferenceScreen>
+    <de.kuschku.quasseldroid.util.ui.settings.RingtonePreference
+      android:defaultValue="content://settings/system/notification_sound"
+      android:key="@string/preference_notification_sound_key"
+      android:title="@string/preference_notification_sound_title"
+      app:ringtoneType="notification"
+      app:showDefault="true"
+      app:showSilent="true" />
   </PreferenceCategory>
 
   <PreferenceCategory android:layout="@layout/widget_preference_divider" />
 
   <PreferenceCategory android:title="@string/preference_messages_title">
 
+    <DropDownPreference
+      android:defaultValue="ALL_BUT_MINE"
+      android:entries="@array/preference_colorize_nicknames_entries"
+      android:entryValues="@array/preference_colorize_nicknames_entryvalues"
+      android:key="@string/preference_colorize_nicknames_key"
+      android:title="@string/preference_colorize_nicknames_title" />
+
+    <DropDownPreference
+      android:defaultValue="HIGHEST"
+      android:entries="@array/preference_show_prefix_entries"
+      android:entryValues="@array/preference_show_prefix_entryvalues"
+      android:key="@string/preference_show_prefix_key"
+      android:title="@string/preference_show_prefix_title" />
+
     <SwitchPreference
       android:defaultValue="false"
       android:key="@string/preference_monospace_key"
       android:title="@string/preference_monospace_title" />
 
-    <de.kuschku.quasseldroid.util.ui.settings.SeekBarPreference
-      android:defaultValue="14"
-      android:key="@string/preference_textsize_key"
-      android:max="24"
-      android:title="@string/preference_textsize_title"
-      robobunny:min="6" />
-
     <SwitchPreference
       android:defaultValue="false"
       android:key="@string/preference_show_seconds_key"
@@ -182,20 +183,6 @@
       android:summaryOn="@string/preference_colorize_mirc_summaryon"
       android:title="@string/preference_colorize_mirc_title" />
 
-    <DropDownPreference
-      android:defaultValue="ALL_BUT_MINE"
-      android:entries="@array/preference_colorize_nicknames_entries"
-      android:entryValues="@array/preference_colorize_nicknames_entryvalues"
-      android:key="@string/preference_colorize_nicknames_key"
-      android:title="@string/preference_colorize_nicknames_title" />
-
-    <DropDownPreference
-      android:defaultValue="HIGHEST"
-      android:entries="@array/preference_show_prefix_entries"
-      android:entryValues="@array/preference_show_prefix_entryvalues"
-      android:key="@string/preference_show_prefix_key"
-      android:title="@string/preference_show_prefix_title" />
-
     <SwitchPreference
       android:defaultValue="true"
       android:key="@string/preference_square_avatars_key"
@@ -247,6 +234,7 @@
       android:key="@string/preference_time_at_end_key"
       android:summary="@string/preference_time_at_end_summary"
       android:title="@string/preference_time_at_end_title" />
+
     <SwitchPreference
       android:defaultValue="false"
       android:dependency="@string/preference_nicks_on_new_line_key"
@@ -263,6 +251,12 @@
       android:key="@string/preference_replace_emoji_key"
       android:summary="@string/preference_replace_emoji_summary"
       android:title="@string/preference_replace_emoji_title" />
+    <de.kuschku.quasseldroid.util.ui.settings.SeekBarPreference
+      android:defaultValue="14"
+      android:key="@string/preference_textsize_key"
+      android:max="24"
+      android:title="@string/preference_textsize_title"
+      robobunny:min="6" />
   </PreferenceCategory>
 
   <PreferenceCategory android:layout="@layout/widget_preference_divider" />
@@ -354,4 +348,10 @@
       android:summary="@string/preference_ignore_network_changes_summary"
       android:title="@string/preference_ignore_network_changes_title" />
   </PreferenceCategory>
+
+  <PreferenceScreen android:layout="@layout/widget_advertisement_support_patreon">
+    <intent
+      android:action="android.intent.action.VIEW"
+      android:data="https://www.patreon.com/justjanne" />
+  </PreferenceScreen>
 </PreferenceScreen>
diff --git a/app/src/test/java/de/kuschku/quasseldroid/testutil/StringEscaper.kt b/app/src/test/java/de/kuschku/quasseldroid/testutil/StringEscaper.kt
deleted file mode 100644
index a5663ff39..000000000
--- a/app/src/test/java/de/kuschku/quasseldroid/testutil/StringEscaper.kt
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Quasseldroid - Quassel client for Android
- *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 3 as published
- * by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package de.kuschku.quasseldroid.testutil
-
-object StringEscaper {
-  private fun escape(text: String): String {
-    val stringBuilder = StringBuilder()
-    escape(stringBuilder, text)
-    return stringBuilder.toString()
-  }
-
-  private fun escape(stringBuilder: StringBuilder, text: String) {
-    for (char in text) {
-      escape(stringBuilder, char)
-    }
-  }
-
-  private fun escape(stringBuilder: StringBuilder, text: Char) {
-    if (text > '\u007f') {
-      // write \udddd
-      stringBuilder.append("\\u")
-      val hex = StringBuffer(Integer.toHexString(text.toInt()))
-      hex.reverse()
-      val length = 4 - hex.length
-      for (j in 0 until length) {
-        hex.append('0')
-      }
-      for (j in 0..3) {
-        stringBuilder.append(hex[3 - j])
-      }
-    } else {
-      stringBuilder.append(Character.toString(text))
-    }
-  }
-}
diff --git a/app/src/test/java/de/kuschku/quasseldroid/util/compatibility/AndroidCrashFixerTest.kt b/app/src/test/java/de/kuschku/quasseldroid/util/compatibility/AndroidCrashFixerTest.kt
index 1b5203255..30e44f11a 100644
--- a/app/src/test/java/de/kuschku/quasseldroid/util/compatibility/AndroidCrashFixerTest.kt
+++ b/app/src/test/java/de/kuschku/quasseldroid/util/compatibility/AndroidCrashFixerTest.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -19,23 +19,37 @@
 
 package de.kuschku.quasseldroid.util.compatibility
 
-import org.junit.Assert.assertEquals
-import org.junit.Assert.assertFalse
+import org.junit.Assert.*
+import org.junit.BeforeClass
 import org.junit.Test
 
 class AndroidCrashFixerTest {
-  private val crashingText = "<⚫> \uD83D\uDC48\uD83C\uDFFB \u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E \u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E \u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E \u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E \u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E \u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E \u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E \u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E \u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F \u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u200E\u200F\u2067\u202E"
-  private val nonCrashingText = "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸŹŻŽƁƂƄƆƇƉƊƋƎƏƐƑƓƔƖƗƘƜƝƟƠƢƤƦƧƩƬƮƯƱƲƳƵƷƸƼDŽDžLJLjNJNjǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZDzǴǶǷǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺȻȽȾɁɃɄɅɆɈɊɌɎͰͲͶ\u037FΆΈΉΊΌΎΏΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫϏϒϓϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹϺϽϾϿЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦ\u0528\u052A\u052C\u052EԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅჇჍᎠᎡᎢᎣᎤᎥᎦᎧᎨᎩᎪᎫᎬᎭᎮᎯᎰᎱᎲᎳᎴᎵᎶᎷᎸᎹᎺᎻᎼᎽᎾᎿᏀᏁᏂᏃᏄᏅᏆᏇᏈᏉᏊᏋᏌᏍᏎᏏᏐᏑᏒᏓᏔᏕᏖᏗᏘᏙᏚᏛᏜᏝᏞᏟᏠᏡᏢᏣᏤᏥᏦᏧᏨᏩᏪᏫᏬᏭᏮᏯᏰᏱᏲᏳᏴ\u13F5ḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈἉἊἋἌἍἎἏἘἙἚἛἜἝἨἩἪἫἬἭἮἯἸἹἺἻἼἽἾἿὈὉὊὋὌὍὙὛὝὟὨὩὪὫὬὭὮὯᾈᾉᾊᾋᾌᾍᾎᾏᾘᾙᾚᾛᾜᾝᾞᾟᾨᾩᾪᾫᾬᾭᾮᾯᾸᾹᾺΆᾼῈΈῊΉῌῘῙῚΊῨῩῪΎῬῸΌῺΏῼℂℇℋℌℍℐℑℒℕℙℚℛℜℝℤΩℨKÅℬℭℰℱℲℳℾℿⅅⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯↃⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏⰐⰑⰒⰓⰔⰕⰖⰗⰘⰙⰚⰛⰜⰝⰞⰟⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬⰭⰮⱠⱢⱣⱤⱧⱩⱫⱭⱮⱯⱰⱲⱵⱾⱿⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖ\uA698\uA69AꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽꝾꞀꞂꞄꞆꞋꞍꞐꞒ\uA796\uA798\uA79A\uA79C\uA79EꞠꞢꞤꞦꞨꞪ\uA7AB\uA7AC\uA7AD\uA7AE\uA7B0\uA7B1\uA7B2\uA7B3\uA7B4\uA7B6\uD801\uDC00\uD801\uDC01\uD801\uDC02\uD801\uDC03\uD801\uDC04\uD801\uDC05\uD801\uDC06\uD801\uDC07\uD801\uDC08\uD801\uDC09\uD801\uDC0A\uD801\uDC0B\uD801\uDC0C\uD801\uDC0D\uD801\uDC0E\uD801\uDC0F\uD801\uDC10\uD801\uDC11\uD801\uDC12\uD801\uDC13\uD801\uDC14\uD801\uDC15\uD801\uDC16\uD801\uDC17\uD801\uDC18\uD801\uDC19\uD801\uDC1A\uD801\uDC1B\uD801\uDC1C\uD801\uDC1D\uD801\uDC1E\uD801\uDC1F\uD801\uDC20\uD801\uDC21\uD801\uDC22\uD801\uDC23\uD801\uDC24\uD801\uDC25\uD801\uDC26\uD801\uDC27\uD801\uDCB0\uD801\uDCB1\uD801\uDCB2\uD801\uDCB3\uD801\uDCB4\uD801\uDCB5\uD801\uDCB6\uD801\uDCB7\uD801\uDCB8\uD801\uDCB9\uD801\uDCBA\uD801\uDCBB\uD801\uDCBC\uD801\uDCBD\uD801\uDCBE\uD801\uDCBF\uD801\uDCC0\uD801\uDCC1\uD801\uDCC2\uD801\uDCC3\uD801\uDCC4\uD801\uDCC5\uD801\uDCC6\uD801\uDCC7\uD801\uDCC8\uD801\uDCC9\uD801\uDCCA\uD801\uDCCB\uD801\uDCCC\uD801\uDCCD\uD801\uDCCE\uD801\uDCCF\uD801\uDCD0\uD801\uDCD1\uD801\uDCD2\uD801\uDCD3\uD803\uDC80\uD803\uDC81\uD803\uDC82\uD803\uDC83\uD803\uDC84\uD803\uDC85\uD803\uDC86\uD803\uDC87\uD803\uDC88\uD803\uDC89\uD803\uDC8A\uD803\uDC8B\uD803\uDC8C\uD803\uDC8D\uD803\uDC8E\uD803\uDC8F\uD803\uDC90\uD803\uDC91\uD803\uDC92\uD803\uDC93\uD803\uDC94\uD803\uDC95\uD803\uDC96\uD803\uDC97\uD803\uDC98\uD803\uDC99\uD803\uDC9A\uD803\uDC9B\uD803\uDC9C\uD803\uDC9D\uD803\uDC9E\uD803\uDC9F\uD803\uDCA0\uD803\uDCA1\uD803\uDCA2\uD803\uDCA3\uD803\uDCA4\uD803\uDCA5\uD803\uDCA6\uD803\uDCA7\uD803\uDCA8\uD803\uDCA9\uD803\uDCAA\uD803\uDCAB\uD803\uDCAC\uD803\uDCAD\uD803\uDCAE\uD803\uDCAF\uD803\uDCB0\uD803\uDCB1\uD803\uDCB2\uD806\uDCA0\uD806\uDCA1\uD806\uDCA2\uD806\uDCA3\uD806\uDCA4\uD806\uDCA5\uD806\uDCA6\uD806\uDCA7\uD806\uDCA8\uD806\uDCA9\uD806\uDCAA\uD806\uDCAB\uD806\uDCAC\uD806\uDCAD\uD806\uDCAE\uD806\uDCAF\uD806\uDCB0\uD806\uDCB1\uD806\uDCB2\uD806\uDCB3\uD806\uDCB4\uD806\uDCB5\uD806\uDCB6\uD806\uDCB7\uD806\uDCB8\uD806\uDCB9\uD806\uDCBA\uD806\uDCBB\uD806\uDCBC\uD806\uDCBD\uD806\uDCBE\uD806\uDCBF\uD835\uDC00\uD835\uDC01\uD835\uDC02\uD835\uDC03\uD835\uDC04\uD835\uDC05\uD835\uDC06\uD835\uDC07\uD835\uDC08\uD835\uDC09\uD835\uDC0A\uD835\uDC0B\uD835\uDC0C\uD835\uDC0D\uD835\uDC0E\uD835\uDC0F\uD835\uDC10\uD835\uDC11\uD835\uDC12\uD835\uDC13\uD835\uDC14\uD835\uDC15\uD835\uDC16\uD835\uDC17\uD835\uDC18\uD835\uDC19\uD835\uDC34\uD835\uDC35\uD835\uDC36\uD835\uDC37\uD835\uDC38\uD835\uDC39\uD835\uDC3A\uD835\uDC3B\uD835\uDC3C\uD835\uDC3D\uD835\uDC3E\uD835\uDC3F\uD835\uDC40\uD835\uDC41\uD835\uDC42\uD835\uDC43\uD835\uDC44\uD835\uDC45\uD835\uDC46\uD835\uDC47\uD835\uDC48\uD835\uDC49\uD835\uDC4A\uD835\uDC4B\uD835\uDC4C\uD835\uDC4D\uD835\uDC68\uD835\uDC69\uD835\uDC6A\uD835\uDC6B\uD835\uDC6C\uD835\uDC6D\uD835\uDC6E\uD835\uDC6F\uD835\uDC70\uD835\uDC71\uD835\uDC72\uD835\uDC73\uD835\uDC74\uD835\uDC75\uD835\uDC76\uD835\uDC77\uD835\uDC78\uD835\uDC79\uD835\uDC7A\uD835\uDC7B\uD835\uDC7C\uD835\uDC7D\uD835\uDC7E\uD835\uDC7F\uD835\uDC80\uD835\uDC81\uD835\uDC9C\uD835\uDC9E\uD835\uDC9F\uD835\uDCA2\uD835\uDCA5\uD835\uDCA6\uD835\uDCA9\uD835\uDCAA\uD835\uDCAB\uD835\uDCAC\uD835\uDCAE\uD835\uDCAF\uD835\uDCB0\uD835\uDCB1\uD835\uDCB2\uD835\uDCB3\uD835\uDCB4\uD835\uDCB5\uD835\uDCD0\uD835\uDCD1\uD835\uDCD2\uD835\uDCD3\uD835\uDCD4\uD835\uDCD5\uD835\uDCD6\uD835\uDCD7\uD835\uDCD8\uD835\uDCD9\uD835\uDCDA\uD835\uDCDB\uD835\uDCDC\uD835\uDCDD\uD835\uDCDE\uD835\uDCDF\uD835\uDCE0\uD835\uDCE1\uD835\uDCE2\uD835\uDCE3\uD835\uDCE4\uD835\uDCE5\uD835\uDCE6\uD835\uDCE7\uD835\uDCE8\uD835\uDCE9\uD835\uDD04\uD835\uDD05\uD835\uDD07\uD835\uDD08\uD835\uDD09\uD835\uDD0A\uD835\uDD0D\uD835\uDD0E\uD835\uDD0F\uD835\uDD10\uD835\uDD11\uD835\uDD12\uD835\uDD13\uD835\uDD14\uD835\uDD16\uD835\uDD17\uD835\uDD18\uD835\uDD19\uD835\uDD1A\uD835\uDD1B\uD835\uDD1C\uD835\uDD38\uD835\uDD39\uD835\uDD3B\uD835\uDD3C\uD835\uDD3D\uD835\uDD3E\uD835\uDD40\uD835\uDD41\uD835\uDD42\uD835\uDD43\uD835\uDD44\uD835\uDD46\uD835\uDD4A\uD835\uDD4B\uD835\uDD4C\uD835\uDD4D\uD835\uDD4E\uD835\uDD4F\uD835\uDD50\uD835\uDD6C\uD835\uDD6D\uD835\uDD6E\uD835\uDD6F\uD835\uDD70\uD835\uDD71\uD835\uDD72\uD835\uDD73\uD835\uDD74\uD835\uDD75\uD835\uDD76\uD835\uDD77\uD835\uDD78\uD835\uDD79\uD835\uDD7A\uD835\uDD7B\uD835\uDD7C\uD835\uDD7D\uD835\uDD7E\uD835\uDD7F\uD835\uDD80\uD835\uDD81\uD835\uDD82\uD835\uDD83\uD835\uDD84\uD835\uDD85\uD835\uDDA0\uD835\uDDA1\uD835\uDDA2\uD835\uDDA3\uD835\uDDA4\uD835\uDDA5\uD835\uDDA6\uD835\uDDA7\uD835\uDDA8\uD835\uDDA9\uD835\uDDAA\uD835\uDDAB\uD835\uDDAC\uD835\uDDAD\uD835\uDDAE\uD835\uDDAF\uD835\uDDB0\uD835\uDDB1\uD835\uDDB2\uD835\uDDB3\uD835\uDDB4\uD835\uDDB5\uD835\uDDB6\uD835\uDDB7\uD835\uDDB8\uD835\uDDB9\uD835\uDDD4\uD835\uDDD5\uD835\uDDD6\uD835\uDDD7\uD835\uDDD8\uD835\uDDD9\uD835\uDDDA\uD835\uDDDB\uD835\uDDDC\uD835\uDDDD\uD835\uDDDE\uD835\uDDDF\uD835\uDDE0\uD835\uDDE1\uD835\uDDE2\uD835\uDDE3\uD835\uDDE4\uD835\uDDE5\uD835\uDDE6\uD835\uDDE7\uD835\uDDE8\uD835\uDDE9\uD835\uDDEA\uD835\uDDEB\uD835\uDDEC\uD835\uDDED\uD835\uDE08\uD835\uDE09\uD835\uDE0A\uD835\uDE0B\uD835\uDE0C\uD835\uDE0D\uD835\uDE0E\uD835\uDE0F\uD835\uDE10\uD835\uDE11\uD835\uDE12\uD835\uDE13\uD835\uDE14\uD835\uDE15\uD835\uDE16\uD835\uDE17\uD835\uDE18\uD835\uDE19\uD835\uDE1A\uD835\uDE1B\uD835\uDE1C\uD835\uDE1D\uD835\uDE1E\uD835\uDE1F\uD835\uDE20\uD835\uDE21\uD835\uDE3C\uD835\uDE3D\uD835\uDE3E\uD835\uDE3F\uD835\uDE40\uD835\uDE41\uD835\uDE42\uD835\uDE43\uD835\uDE44\uD835\uDE45\uD835\uDE46\uD835\uDE47\uD835\uDE48\uD835\uDE49\uD835\uDE4A\uD835\uDE4B\uD835\uDE4C\uD835\uDE4D\uD835\uDE4E\uD835\uDE4F\uD835\uDE50\uD835\uDE51\uD835\uDE52\uD835\uDE53\uD835\uDE54\uD835\uDE55\uD835\uDE70\uD835\uDE71\uD835\uDE72\uD835\uDE73\uD835\uDE74\uD835\uDE75\uD835\uDE76\uD835\uDE77\uD835\uDE78\uD835\uDE79\uD835\uDE7A\uD835\uDE7B\uD835\uDE7C\uD835\uDE7D\uD835\uDE7E\uD835\uDE7F\uD835\uDE80\uD835\uDE81\uD835\uDE82\uD835\uDE83\uD835\uDE84\uD835\uDE85\uD835\uDE86\uD835\uDE87\uD835\uDE88\uD835\uDE89\uD835\uDEA8\uD835\uDEA9\uD835\uDEAA\uD835\uDEAB\uD835\uDEAC\uD835\uDEAD\uD835\uDEAE\uD835\uDEAF\uD835\uDEB0\uD835\uDEB1\uD835\uDEB2\uD835\uDEB3\uD835\uDEB4\uD835\uDEB5\uD835\uDEB6\uD835\uDEB7\uD835\uDEB8\uD835\uDEB9\uD835\uDEBA\uD835\uDEBB\uD835\uDEBC\uD835\uDEBD\uD835\uDEBE\uD835\uDEBF\uD835\uDEC0\uD835\uDEE2\uD835\uDEE3\uD835\uDEE4\uD835\uDEE5\uD835\uDEE6\uD835\uDEE7\uD835\uDEE8\uD835\uDEE9\uD835\uDEEA\uD835\uDEEB\uD835\uDEEC\uD835\uDEED\uD835\uDEEE\uD835\uDEEF\uD835\uDEF0\uD835\uDEF1\uD835\uDEF2\uD835\uDEF3\uD835\uDEF4\uD835\uDEF5\uD835\uDEF6\uD835\uDEF7\uD835\uDEF8\uD835\uDEF9\uD835\uDEFA\uD835\uDF1C\uD835\uDF1D\uD835\uDF1E\uD835\uDF1F\uD835\uDF20\uD835\uDF21\uD835\uDF22\uD835\uDF23\uD835\uDF24\uD835\uDF25\uD835\uDF26\uD835\uDF27\uD835\uDF28\uD835\uDF29\uD835\uDF2A\uD835\uDF2B\uD835\uDF2C\uD835\uDF2D\uD835\uDF2E\uD835\uDF2F\uD835\uDF30\uD835\uDF31\uD835\uDF32\uD835\uDF33\uD835\uDF34\uD835\uDF56\uD835\uDF57\uD835\uDF58\uD835\uDF59\uD835\uDF5A\uD835\uDF5B\uD835\uDF5C\uD835\uDF5D\uD835\uDF5E\uD835\uDF5F\uD835\uDF60\uD835\uDF61\uD835\uDF62\uD835\uDF63\uD835\uDF64\uD835\uDF65\uD835\uDF66\uD835\uDF67\uD835\uDF68\uD835\uDF69\uD835\uDF6A\uD835\uDF6B\uD835\uDF6C\uD835\uDF6D\uD835\uDF6E\uD835\uDF90\uD835\uDF91\uD835\uDF92\uD835\uDF93\uD835\uDF94\uD835\uDF95\uD835\uDF96\uD835\uDF97\uD835\uDF98\uD835\uDF99\uD835\uDF9A\uD835\uDF9B\uD835\uDF9C\uD835\uDF9D\uD835\uDF9E\uD835\uDF9F\uD835\uDFA0\uD835\uDFA1\uD835\uDFA2\uD835\uDFA3\uD835\uDFA4\uD835\uDFA5\uD835\uDFA6\uD835\uDFA7\uD835\uDFA8\uD835\uDFCA\uD83A\uDD00\uD83A\uDD01\uD83A\uDD02\uD83A\uDD03\uD83A\uDD04\uD83A\uDD05\uD83A\uDD06\uD83A\uDD07\uD83A\uDD08\uD83A\uDD09\uD83A\uDD0A\uD83A\uDD0B\uD83A\uDD0C\uD83A\uDD0D\uD83A\uDD0E\uD83A\uDD0F\uD83A\uDD10\uD83A\uDD11\uD83A\uDD12\uD83A\uDD13\uD83A\uDD14\uD83A\uDD15\uD83A\uDD16\uD83A\uDD17\uD83A\uDD18\uD83A\uDD19\uD83A\uDD1A\uD83A\uDD1B\uD83A\uDD1C\uD83A\uDD1D\uD83A\uDD1E\uD83A\uDD1F\uD83A\uDD20\uD83A\uDD21\uD83C\uDD30\uD83C\uDD31\uD83C\uDD32\uD83C\uDD33\uD83C\uDD34\uD83C\uDD35\uD83C\uDD36\uD83C\uDD37\uD83C\uDD38\uD83C\uDD39\uD83C\uDD3A\uD83C\uDD3B\uD83C\uDD3C\uD83C\uDD3D\uD83C\uDD3E\uD83C\uDD3F\uD83C\uDD40\uD83C\uDD41\uD83C\uDD42\uD83C\uDD43\uD83C\uDD44\uD83C\uDD45\uD83C\uDD46\uD83C\uDD47\uD83C\uDD48\uD83C\uDD49\uD83C\uDD50\uD83C\uDD51\uD83C\uDD52\uD83C\uDD53\uD83C\uDD54\uD83C\uDD55\uD83C\uDD56\uD83C\uDD57\uD83C\uDD58\uD83C\uDD59\uD83C\uDD5A\uD83C\uDD5B\uD83C\uDD5C\uD83C\uDD5D\uD83C\uDD5E\uD83C\uDD5F\uD83C\uDD60\uD83C\uDD61\uD83C\uDD62\uD83C\uDD63\uD83C\uDD64\uD83C\uDD65\uD83C\uDD66\uD83C\uDD67\uD83C\uDD68\uD83C\uDD69\uD83C\uDD70\uD83C\uDD71\uD83C\uDD72\uD83C\uDD73\uD83C\uDD74\uD83C\uDD75\uD83C\uDD76\uD83C\uDD77\uD83C\uDD78\uD83C\uDD79\uD83C\uDD7A\uD83C\uDD7B\uD83C\uDD7C\uD83C\uDD7D\uD83C\uDD7E\uD83C\uDD7F\uD83C\uDD80\uD83C\uDD81\uD83C\uDD82\uD83C\uDD83\uD83C\uDD84\uD83C\uDD85\uD83C\uDD86\uD83C\uDD87\uD83C\uDD88\uD83C\uDD89ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+  companion object {
+    lateinit var crashingText: String
+    lateinit var validText: String
+
+    @JvmStatic
+    @BeforeClass
+    fun setUp() {
+      crashingText = AndroidCrashFixerTest::class.java.getResourceAsStream("/crashing_text.txt")?.bufferedReader()?.readText()
+                     ?: ""
+      validText = AndroidCrashFixerTest::class.java.getResourceAsStream("/valid_text.txt")?.bufferedReader()?.readText()
+                  ?: ""
+    }
+  }
+
 
   @Test
   fun testRemovesCrashableCharacters() {
     val result = AndroidCrashFixer.removeCrashableCharacters(crashingText)
+    assertTrue(Regex("\u200F\\s*\u200E").containsMatchIn(crashingText))
+    assertTrue(Regex("\u200E\\s*\u200F").containsMatchIn(crashingText))
     assertFalse(Regex("\u200F\\s*\u200E").containsMatchIn(result))
     assertFalse(Regex("\u200E\\s*\u200F").containsMatchIn(result))
   }
 
   @Test
   fun testRetainsContent() {
-    assertEquals(nonCrashingText, AndroidCrashFixer.removeCrashableCharacters(nonCrashingText))
+    assertEquals(validText, AndroidCrashFixer.removeCrashableCharacters(validText))
   }
 }
diff --git a/app/src/test/java/de/kuschku/quasseldroid/util/emoji/EmojiDataTest.kt b/app/src/test/java/de/kuschku/quasseldroid/util/emoji/EmojiDataTest.kt
index 3615a8d44..014cda500 100644
--- a/app/src/test/java/de/kuschku/quasseldroid/util/emoji/EmojiDataTest.kt
+++ b/app/src/test/java/de/kuschku/quasseldroid/util/emoji/EmojiDataTest.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -19,6 +19,7 @@
 
 package de.kuschku.quasseldroid.util.emoji
 
+import android.os.Build
 import android.text.SpannableStringBuilder
 import de.kuschku.quasseldroid.QuasseldroidTest
 import org.junit.Assert.assertEquals
@@ -27,7 +28,7 @@ import org.junit.runner.RunWith
 import org.robolectric.RobolectricTestRunner
 import org.robolectric.annotation.Config
 
-@Config(application = QuasseldroidTest::class)
+@Config(application = QuasseldroidTest::class, sdk = [Build.VERSION_CODES.P])
 @RunWith(RobolectricTestRunner::class)
 class EmojiDataTest {
   @Test
diff --git a/app/src/test/java/de/kuschku/quasseldroid/util/irc/format/IrcFormatDeserializerTest.kt b/app/src/test/java/de/kuschku/quasseldroid/util/irc/format/IrcFormatDeserializerTest.kt
index c0edb8197..63c0ee68f 100644
--- a/app/src/test/java/de/kuschku/quasseldroid/util/irc/format/IrcFormatDeserializerTest.kt
+++ b/app/src/test/java/de/kuschku/quasseldroid/util/irc/format/IrcFormatDeserializerTest.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -19,6 +19,7 @@
 
 package de.kuschku.quasseldroid.util.irc.format
 
+import android.os.Build
 import de.kuschku.quasseldroid.QuasseldroidTest
 import de.kuschku.quasseldroid.util.irc.format.model.FormatInfo
 import de.kuschku.quasseldroid.util.irc.format.model.IrcFormat
@@ -29,7 +30,7 @@ import org.junit.runner.RunWith
 import org.robolectric.RobolectricTestRunner
 import org.robolectric.annotation.Config
 
-@Config(application = QuasseldroidTest::class)
+@Config(application = QuasseldroidTest::class, sdk = [Build.VERSION_CODES.P])
 @RunWith(RobolectricTestRunner::class)
 class IrcFormatDeserializerTest {
   private lateinit var deserializer: IrcFormatDeserializer
diff --git a/app/src/test/resources/crashing_text.txt b/app/src/test/resources/crashing_text.txt
new file mode 100644
index 000000000..c37fc0960
--- /dev/null
+++ b/app/src/test/resources/crashing_text.txt
@@ -0,0 +1 @@
+<⚫> 👈🏻 ‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎ ‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎ ‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎ ‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎ ‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎ ‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎ ‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎ ‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎ ‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏ ‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏⁧‮ 
diff --git a/app/src/test/resources/valid_text.txt b/app/src/test/resources/valid_text.txt
new file mode 100644
index 000000000..d35637bcb
--- /dev/null
+++ b/app/src/test/resources/valid_text.txt
@@ -0,0 +1 @@
+ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸŹŻŽƁƂƄƆƇƉƊƋƎƏƐƑƓƔƖƗƘƜƝƟƠƢƤƦƧƩƬƮƯƱƲƳƵƷƸƼDŽDžLJLjNJNjǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZDzǴǶǷǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺȻȽȾɁɃɄɅɆɈɊɌɎͰͲͶͿΆΈΉΊΌΎΏΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫϏϒϓϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹϺϽϾϿЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԨԪԬԮԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅჇჍᎠᎡᎢᎣᎤᎥᎦᎧᎨᎩᎪᎫᎬᎭᎮᎯᎰᎱᎲᎳᎴᎵᎶᎷᎸᎹᎺᎻᎼᎽᎾᎿᏀᏁᏂᏃᏄᏅᏆᏇᏈᏉᏊᏋᏌᏍᏎᏏᏐᏑᏒᏓᏔᏕᏖᏗᏘᏙᏚᏛᏜᏝᏞᏟᏠᏡᏢᏣᏤᏥᏦᏧᏨᏩᏪᏫᏬᏭᏮᏯᏰᏱᏲᏳᏴᏵḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈἉἊἋἌἍἎἏἘἙἚἛἜἝἨἩἪἫἬἭἮἯἸἹἺἻἼἽἾἿὈὉὊὋὌὍὙὛὝὟὨὩὪὫὬὭὮὯᾈᾉᾊᾋᾌᾍᾎᾏᾘᾙᾚᾛᾜᾝᾞᾟᾨᾩᾪᾫᾬᾭᾮᾯᾸᾹᾺΆᾼῈΈῊΉῌῘῙῚΊῨῩῪΎῬῸΌῺΏῼℂℇℋℌℍℐℑℒℕℙℚℛℜℝℤΩℨKÅℬℭℰℱℲℳℾℿⅅⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯↃⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏⰐⰑⰒⰓⰔⰕⰖⰗⰘⰙⰚⰛⰜⰝⰞⰟⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬⰭⰮⱠⱢⱣⱤⱧⱩⱫⱭⱮⱯⱰⱲⱵⱾⱿⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꚘꚚꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽꝾꞀꞂꞄꞆꞋꞍꞐꞒꞖꞘꞚꞜꞞꞠꞢꞤꞦꞨꞪꞫꞬꞭꞮꞰꞱꞲꞳꞴꞶ𐐀𐐁𐐂𐐃𐐄𐐅𐐆𐐇𐐈𐐉𐐊𐐋𐐌𐐍𐐎𐐏𐐐𐐑𐐒𐐓𐐔𐐕𐐖𐐗𐐘𐐙𐐚𐐛𐐜𐐝𐐞𐐟𐐠𐐡𐐢𐐣𐐤𐐥𐐦𐐧𐒰𐒱𐒲𐒳𐒴𐒵𐒶𐒷𐒸𐒹𐒺𐒻𐒼𐒽𐒾𐒿𐓀𐓁𐓂𐓃𐓄𐓅𐓆𐓇𐓈𐓉𐓊𐓋𐓌𐓍𐓎𐓏𐓐𐓑𐓒𐓓𐲀𐲁𐲂𐲃𐲄𐲅𐲆𐲇𐲈𐲉𐲊𐲋𐲌𐲍𐲎𐲏𐲐𐲑𐲒𐲓𐲔𐲕𐲖𐲗𐲘𐲙𐲚𐲛𐲜𐲝𐲞𐲟𐲠𐲡𐲢𐲣𐲤𐲥𐲦𐲧𐲨𐲩𐲪𐲫𐲬𐲭𐲮𐲯𐲰𐲱𐲲𑢠𑢡𑢢𑢣𑢤𑢥𑢦𑢧𑢨𑢩𑢪𑢫𑢬𑢭𑢮𑢯𑢰𑢱𑢲𑢳𑢴𑢵𑢶𑢷𑢸𑢹𑢺𑢻𑢼𑢽𑢾𑢿𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙𝐴𝐵𝐶𝐷𝐸𝐹𝐺𝐻𝐼𝐽𝐾𝐿𝑀𝑁𝑂𝑃𝑄𝑅𝑆𝑇𝑈𝑉𝑊𝑋𝑌𝑍𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁𝒜𝒞𝒟𝒢𝒥𝒦𝒩𝒪𝒫𝒬𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩𝔄𝔅𝔇𝔈𝔉𝔊𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔𝔖𝔗𝔘𝔙𝔚𝔛𝔜𝔸𝔹𝔻𝔼𝔽𝔾𝕀𝕁𝕂𝕃𝕄𝕆𝕊𝕋𝕌𝕍𝕎𝕏𝕐𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅𝖠𝖡𝖢𝖣𝖤𝖥𝖦𝖧𝖨𝖩𝖪𝖫𝖬𝖭𝖮𝖯𝖰𝖱𝖲𝖳𝖴𝖵𝖶𝖷𝖸𝖹𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉𝚨𝚩𝚪𝚫𝚬𝚭𝚮𝚯𝚰𝚱𝚲𝚳𝚴𝚵𝚶𝚷𝚸𝚹𝚺𝚻𝚼𝚽𝚾𝚿𝛀𝛢𝛣𝛤𝛥𝛦𝛧𝛨𝛩𝛪𝛫𝛬𝛭𝛮𝛯𝛰𝛱𝛲𝛳𝛴𝛵𝛶𝛷𝛸𝛹𝛺𝜜𝜝𝜞𝜟𝜠𝜡𝜢𝜣𝜤𝜥𝜦𝜧𝜨𝜩𝜪𝜫𝜬𝜭𝜮𝜯𝜰𝜱𝜲𝜳𝜴𝝖𝝗𝝘𝝙𝝚𝝛𝝜𝝝𝝞𝝟𝝠𝝡𝝢𝝣𝝤𝝥𝝦𝝧𝝨𝝩𝝪𝝫𝝬𝝭𝝮𝞐𝞑𝞒𝞓𝞔𝞕𝞖𝞗𝞘𝞙𝞚𝞛𝞜𝞝𝞞𝞟𝞠𝞡𝞢𝞣𝞤𝞥𝞦𝞧𝞨𝟊𞤀𞤁𞤂𞤃𞤄𞤅𞤆𞤇𞤈𞤉𞤊𞤋𞤌𞤍𞤎𞤏𞤐𞤑𞤒𞤓𞤔𞤕𞤖𞤗𞤘𞤙𞤚𞤛𞤜𞤝𞤞𞤟𞤠𞤡🄰🄱🄲🄳🄴🄵🄶🄷🄸🄹🄺🄻🄼🄽🄾🄿🅀🅁🅂🅃🅄🅅🅆🅇🅈🅉🅐🅑🅒🅓🅔🅕🅖🅗🅘🅙🅚🅛🅜🅝🅞🅟🅠🅡🅢🅣🅤🅥🅦🅧🅨🅩🅰🅱🅲🅳🅴🅵🅶🅷🅸🅹🅺🅻🅼🅽🅾🅿🆀🆁🆂🆃🆄🆅🆆🆇🆈🆉ABCDEFGHIJKLMNOPQRSTUVWXYZ 
diff --git a/gradle.properties b/gradle.properties
index bea178eb4..db3189ac7 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -14,7 +14,6 @@
 #
 # You should have received a copy of the GNU General Public License along
 # with this program. If not, see <http://www.gnu.org/licenses/>.
-
 # Project-wide Gradle settings.
 # IDE (e.g. Android Studio) users:
 # Gradle settings configured through the IDE *will override*
@@ -30,8 +29,6 @@ org.gradle.jvmargs=-Xmx2048m
 org.gradle.parallel=true
 # Enable new Android D8 Dexer
 android.enableD8=true
-# Enable new Android R8 Optimizer
-android.enableR8=true
 # Enable gradle build cache
 org.gradle.caching=true
 # Enable android build cache
diff --git a/invokergenerator/build.gradle.kts b/invokergenerator/build.gradle.kts
index f261b90d3..dd24a0629 100644
--- a/invokergenerator/build.gradle.kts
+++ b/invokergenerator/build.gradle.kts
@@ -33,6 +33,5 @@ dependencies {
   implementation(project(":invokerannotations"))
   implementation("org.jetbrains.kotlin", "kotlin-compiler-embeddable", "1.3.61")
   implementation("com.squareup", "kotlinpoet", "1.3.0")
-  implementation("com.google.auto.service:auto-service:1.0-rc6")
   kapt("com.google.auto.service:auto-service:1.0-rc6")
 }
diff --git a/lib/src/main/java/de/kuschku/libquassel/util/compatibility/CompatibilityUtils.kt b/lib/src/main/java/de/kuschku/libquassel/util/compatibility/CompatibilityUtils.kt
index 65fd28d29..d02507a4c 100644
--- a/lib/src/main/java/de/kuschku/libquassel/util/compatibility/CompatibilityUtils.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/util/compatibility/CompatibilityUtils.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -19,7 +19,6 @@
 
 package de.kuschku.libquassel.util.compatibility
 
-import de.kuschku.libquassel.util.compatibility.backport.BackportedSyncFlushDeflaterOutputStream
 import de.kuschku.libquassel.util.compatibility.backport.ProperlyClosingSyncFlushDeflaterOutputStream
 import java.io.OutputStream
 import java.util.zip.DeflaterOutputStream
@@ -36,10 +35,6 @@ object CompatibilityUtils {
    * @return The wrapping output stream
    */
   fun createDeflaterOutputStream(rawOut: OutputStream?): DeflaterOutputStream {
-    return if (supportsCompression) {
-      ProperlyClosingSyncFlushDeflaterOutputStream(rawOut)
-    } else {
-      BackportedSyncFlushDeflaterOutputStream(rawOut)
-    }
+    return ProperlyClosingSyncFlushDeflaterOutputStream(rawOut)
   }
 }
diff --git a/lib/src/main/java/de/kuschku/libquassel/util/compatibility/backport/BackportedSyncFlushDeflaterOutputStream.kt b/lib/src/main/java/de/kuschku/libquassel/util/compatibility/backport/BackportedSyncFlushDeflaterOutputStream.kt
deleted file mode 100644
index 8dd110d0c..000000000
--- a/lib/src/main/java/de/kuschku/libquassel/util/compatibility/backport/BackportedSyncFlushDeflaterOutputStream.kt
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Quasseldroid - Quassel client for Android
- *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 3 as published
- * by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package de.kuschku.libquassel.util.compatibility.backport
-
-import java.io.OutputStream
-import java.util.zip.Deflater
-import java.util.zip.DeflaterOutputStream
-
-class BackportedSyncFlushDeflaterOutputStream(
-  rawOut: OutputStream?,
-  private val deflater: Deflater? = createSyncFlushDeflater()
-) : DeflaterOutputStream(rawOut, deflater) {
-  override fun close() {
-    deflater?.end()
-    super.close()
-  }
-
-  companion object {
-    /**
-     * Creates a SyncFlush Deflater for use on pre-KitKat Android
-     *
-     * @return The modified Deflater, or null if the creation failed
-     */
-    private fun createSyncFlushDeflater(): Deflater? {
-      val def = Deflater()
-      try {
-        def.javaClass.getDeclaredField("flushParm").apply {
-          isAccessible = true
-          setInt(def, 2) // Z_SYNC_FLUSH
-        }
-      } catch (e: Exception) {
-        return null
-      }
-
-      return def
-    }
-  }
-}
diff --git a/malheur/build.gradle.kts b/malheur/build.gradle.kts
index 70914cadc..f023e3fce 100644
--- a/malheur/build.gradle.kts
+++ b/malheur/build.gradle.kts
@@ -23,11 +23,11 @@ plugins {
 }
 
 android {
-  compileSdkVersion(28)
+  compileSdkVersion(29)
 
   defaultConfig {
     minSdkVersion(20)
-    targetSdkVersion(28)
+    targetSdkVersion(29)
 
     consumerProguardFiles("proguard-rules.pro")
 
diff --git a/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt b/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt
index 3fa85119d..a6f5f21d3 100644
--- a/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -20,7 +20,6 @@
 package de.kuschku.malheur
 
 import android.app.Application
-import android.os.Build
 import android.os.Handler
 import android.os.HandlerThread
 import android.util.Log
@@ -90,9 +89,7 @@ object CrashHandler {
         }
       } catch (e: Throwable) {
         e.printStackTrace()
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
-          throwable.addSuppressed(e)
-        }
+        throwable.addSuppressed(e)
       }
     }
 
diff --git a/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt b/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt
index a16f92c99..7eb37e44c 100644
--- a/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt
+++ b/malheur/src/main/java/de/kuschku/malheur/collectors/DisplayCollector.kt
@@ -1,8 +1,8 @@
 /*
  * Quasseldroid - Quassel client for Android
  *
- * Copyright (c) 2019 Janne Mareike Koschinski
- * Copyright (c) 2019 The Quassel Project
+ * Copyright (c) 2020 Janne Mareike Koschinski
+ * Copyright (c) 2020 The Quassel Project
  *
  * This program is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 3 as published
@@ -49,11 +49,7 @@ class DisplayCollector(application: Application) :
     }
 
     val size = Point().also {
-      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
-        display.getRealSize(it)
-      } else {
-        display.getSize(it)
-      }
+      display.getRealSize(it)
     }
 
     return DisplayInfo(
diff --git a/persistence/build.gradle.kts b/persistence/build.gradle.kts
index 43dd728e2..35a830c72 100644
--- a/persistence/build.gradle.kts
+++ b/persistence/build.gradle.kts
@@ -24,11 +24,11 @@ plugins {
 }
 
 android {
-  compileSdkVersion(28)
+  compileSdkVersion(29)
 
   defaultConfig {
     minSdkVersion(20)
-    targetSdkVersion(28)
+    targetSdkVersion(29)
 
     consumerProguardFiles("proguard-rules.pro")
 
diff --git a/ui_spinner/build.gradle.kts b/ui_spinner/build.gradle.kts
index d44f61b85..c1603b3f8 100644
--- a/ui_spinner/build.gradle.kts
+++ b/ui_spinner/build.gradle.kts
@@ -23,11 +23,11 @@ plugins {
 }
 
 android {
-  compileSdkVersion(28)
+  compileSdkVersion(29)
 
   defaultConfig {
     minSdkVersion(20)
-    targetSdkVersion(28)
+    targetSdkVersion(29)
 
     consumerProguardFiles("proguard-rules.pro")
 
diff --git a/ui_spinner/src/main/res/values/shape_attrs.xml b/ui_spinner/src/main/res/values/shape_attrs.xml
index d503d5fe8..a9719a2ad 100644
--- a/ui_spinner/src/main/res/values/shape_attrs.xml
+++ b/ui_spinner/src/main/res/values/shape_attrs.xml
@@ -16,13 +16,13 @@
 
 <resources>
 
-  <declare-styleable name="MaterialShape">
-    <!-- Shape appearance style reference to be used to construct a ShapeAppearanceModel. -->
-    <attr name="md_shapeAppearance" format="reference" />
-    <!-- Shape appearance overlay style reference to be used to modify the shapeAppearance. -->
-    <attr name="md_shapeAppearanceOverlay" format="reference" />
-  </declare-styleable>
+  <attr name="md_shapeAppearanceSmallComponent" format="reference" />
+
+  <attr name="md_shapeAppearanceMediumComponent" format="reference" />
 
+  <!-- Shape appearance style reference for small components. -->
+  <attr name="md_shapeAppearanceLargeComponent" format="reference" />
+  <!-- Shape appearance style reference for medium components. -->
   <declare-styleable name="ShapeAppearance">
     <!-- Corner size to be used in the ShapeAppearance. All corners default to this value -->
     <attr name="md_cornerSize" format="dimension" />
@@ -61,12 +61,12 @@
       <enum name="md_cut" value="1" />
     </attr>
   </declare-styleable>
-
-  <!-- Shape appearance style reference for small components. -->
-  <attr name="md_shapeAppearanceSmallComponent" format="reference" />
-  <!-- Shape appearance style reference for medium components. -->
-  <attr name="md_shapeAppearanceMediumComponent" format="reference" />
   <!-- Shape appearance style reference for large components. -->
-  <attr name="md_shapeAppearanceLargeComponent" format="reference" />
+  <declare-styleable name="MaterialShape">
+    <!-- Shape appearance style reference to be used to construct a ShapeAppearanceModel. -->
+    <attr name="md_shapeAppearance" format="reference" />
+    <!-- Shape appearance overlay style reference to be used to modify the shapeAppearance. -->
+    <attr name="md_shapeAppearanceOverlay" format="reference" />
+  </declare-styleable>
 
 </resources>
diff --git a/viewmodel/build.gradle.kts b/viewmodel/build.gradle.kts
index 7ae12ace9..eb9a7db46 100644
--- a/viewmodel/build.gradle.kts
+++ b/viewmodel/build.gradle.kts
@@ -23,11 +23,11 @@ plugins {
 }
 
 android {
-  compileSdkVersion(28)
+  compileSdkVersion(29)
 
   defaultConfig {
     minSdkVersion(20)
-    targetSdkVersion(28)
+    targetSdkVersion(29)
 
     consumerProguardFiles("proguard-rules.pro")
 
-- 
GitLab