From c395b38110b04460ac56b0865a3e2e1ec183459b Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Fri, 20 Apr 2018 13:40:55 +0200
Subject: [PATCH] Lots of bugfixes

---
 .../ui/chat/messages/MessageAdapter.kt        |   5 +
 .../chat/messages/QuasselMessageRenderer.kt   |   7 +-
 .../chatlist/MinimumActivityAdapter.kt        |   2 +-
 .../coresettings/chatlist/NetworkAdapter.kt   |   2 +-
 .../highlightlist/HighlightListFragment.kt    |   2 +-
 .../highlightlist/HighlightNickTypeAdapter.kt |   2 +-
 .../highlightrule/HighlightRuleActivity.kt    |   2 +-
 .../highlightrule/HighlightRuleFragment.kt    |   2 +-
 .../ignoreitem/IgnoreTypeAdapter.kt           |   2 +-
 .../ignoreitem/ScopeTypeAdapter.kt            |   2 +-
 .../ignoreitem/StrictnessTypeAdapter.kt       |   2 +-
 .../coresettings/network/IdentityAdapter.kt   |   2 +-
 .../networkserver/ProxyTypeAdapter.kt         |   2 +-
 app/src/main/res/drawable-ldrtl/ic_send.xml   |   9 ++
 app/src/main/res/layout-land/layout_main.xml  |   3 +-
 .../res/layout-sw600dp-land/layout_main.xml   |   3 +-
 .../res/layout-sw600dp-land/setup_slide.xml   |   6 +-
 .../main/res/layout-sw600dp/setup_slide.xml   |   6 +-
 .../main/res/layout/fragment_chat_list.xml    |   4 +-
 app/src/main/res/layout/fragment_toolbar.xml  |  15 +--
 app/src/main/res/layout/layout_editor.xml     |   4 +-
 app/src/main/res/layout/layout_history.xml    |  15 ++-
 app/src/main/res/layout/layout_main.xml       |   3 +-
 .../main/res/layout/preference_vertical.xml   |   1 +
 app/src/main/res/layout/preferences_about.xml |  32 +----
 .../res/layout/preferences_about_header.xml   |   4 +-
 .../main/res/layout/preferences_license.xml   |   3 +-
 ...preferences_whitelist_certificate_item.xml |   6 +-
 .../preferences_whitelist_hostname_item.xml   |   6 +-
 .../res/layout/settings_aliaslist_item.xml    |   7 +-
 app/src/main/res/layout/settings_chatlist.xml |  10 +-
 .../res/layout/settings_highlightlist.xml     | 104 ++++-----------
 .../layout/settings_highlightlist_rule.xml    |  12 +-
 .../res/layout/settings_identity_nick.xml     |   3 +
 .../main/res/layout/settings_ignoreitem.xml   |  15 +--
 .../main/res/layout/settings_ignorelist.xml   |   6 +-
 .../res/layout/settings_ignorelist_item.xml   |   6 +-
 app/src/main/res/layout/settings_item.xml     |   6 +-
 app/src/main/res/layout/settings_list.xml     | 119 ++++--------------
 app/src/main/res/layout/settings_network.xml  |   5 +-
 .../res/layout/settings_network_server.xml    |   6 +-
 .../res/layout/settings_networkserver.xml     |   5 +-
 app/src/main/res/layout/setup_slide.xml       |   3 +-
 app/src/main/res/layout/widget_buffer.xml     |  10 +-
 .../res/layout/widget_chatmessage_action.xml  |   1 +
 .../layout/widget_chatmessage_daychange.xml   |   2 +
 .../res/layout/widget_chatmessage_error.xml   |   1 +
 .../res/layout/widget_chatmessage_info.xml    |   1 +
 .../res/layout/widget_chatmessage_notice.xml  |   1 +
 .../res/layout/widget_chatmessage_plain.xml   |  47 +++++--
 .../res/layout/widget_chatmessage_server.xml  |   1 +
 .../main/res/layout/widget_contributor.xml    |   9 +-
 .../main/res/layout/widget_core_account.xml   |   6 +-
 .../res/layout/widget_core_account_add.xml    |   1 +
 app/src/main/res/layout/widget_crash.xml      |  11 +-
 .../res/layout/widget_history_message.xml     |   4 +-
 app/src/main/res/layout/widget_library.xml    |   9 +-
 app/src/main/res/layout/widget_network.xml    |   3 +-
 app/src/main/res/layout/widget_nick.xml       |   8 +-
 app/src/main/res/layout/widget_nick_away.xml  |   8 +-
 .../res/layout/widget_spinner_item_inline.xml |  11 +-
 .../layout/widget_spinner_item_toolbar.xml    |   3 +-
 .../main/res/values-v17/styles_widgets.xml    |  15 ++-
 app/src/main/res/values/styles_widgets.xml    |  41 +++---
 64 files changed, 304 insertions(+), 350 deletions(-)
 create mode 100644 app/src/main/res/drawable-ldrtl/ic_send.xml

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 199aa0ecb..dfc658997 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
@@ -170,6 +170,10 @@ class MessageAdapter @Inject constructor(
     @JvmField
     var name: TextView? = null
 
+    @BindView(R.id.realname)
+    @JvmField
+    var realname: TextView? = null
+
     @BindView(R.id.content)
     @JvmField
     var content: TextView? = null
@@ -230,6 +234,7 @@ class MessageAdapter @Inject constructor(
       timeLeft?.text = message.time
       timeRight?.text = message.time
       name?.text = message.name
+      realname?.text = message.realName
       content?.text = message.content
       combined?.text = message.combined
 
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 530a75e66..1bfd6538d 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
@@ -90,6 +90,7 @@ class QuasselMessageRenderer @Inject constructor(
         viewHolder.timeLeft?.setTextColor(getColor(0, 0))
         viewHolder.timeRight?.setTextColor(getColor(0, 0))
         viewHolder.name?.setTextColor(getColor(0, 0))
+        viewHolder.realname?.setTextColor(getColor(0, 0))
         viewHolder.combined?.setTextColor(getColor(0, 0))
         viewHolder.content?.setTextColor(getColor(0, 0))
         viewHolder.itemView.background = LayerDrawable(
@@ -114,6 +115,7 @@ class QuasselMessageRenderer @Inject constructor(
     avatarPlaceholder?.visibleIf(messageSettings.showAvatars && messageSettings.nicksOnNewLine)
     val separateLine = viewHolder.content != null && viewHolder.name != null && messageSettings.nicksOnNewLine
     viewHolder.name?.visibleIf(separateLine && !isFollowUp)
+    viewHolder.realname?.visibleIf(separateLine && !isFollowUp && messageSettings.showRealNames && messageSettings.nicksOnNewLine)
     viewHolder.content?.visibleIf(separateLine)
     viewHolder.combined?.visibleIf(!separateLine)
 
@@ -124,6 +126,7 @@ class QuasselMessageRenderer @Inject constructor(
     viewHolder.timeLeft?.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize)
     viewHolder.timeRight?.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize * 0.9f)
     viewHolder.name?.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize)
+    viewHolder.realname?.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize)
     val contentSize = if (messageSettings.largerEmoji && isEmoji) textSize * 2f else textSize
     viewHolder.content?.setTextSize(TypedValue.COMPLEX_UNIT_SP, contentSize)
     viewHolder.combined?.setTextSize(TypedValue.COMPLEX_UNIT_SP, contentSize)
@@ -225,10 +228,6 @@ class QuasselMessageRenderer @Inject constructor(
             highlight,
             messageSettings.showHostmaskPlain && messageSettings.nicksOnNewLine
           ))
-          if (messageSettings.showRealNames) {
-            append(" ")
-            append(realName)
-          }
         }
         val content = contentFormatter.format(mircColors, message.content.content, highlight)
         val nickName = HostmaskHelper.nick(message.content.sender)
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/MinimumActivityAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/MinimumActivityAdapter.kt
index f32d01c1e..704051d51 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/MinimumActivityAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/MinimumActivityAdapter.kt
@@ -30,7 +30,7 @@ class MinimumActivityAdapter(val data: List<MinimumActivityItem>) :
       else
         parent.context
     )
-    val view = inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false)
+    val view = inflater.inflate(R.layout.widget_spinner_item_inline, parent, false)
     return MinimumActivityViewHolder(
       view
     )
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/NetworkAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/NetworkAdapter.kt
index ec292d7ef..c557b7537 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/NetworkAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/NetworkAdapter.kt
@@ -36,7 +36,7 @@ class NetworkAdapter : RecyclerSpinnerAdapter<NetworkAdapter.NetworkViewHolder>(
       else
         parent.context
     )
-    val view = inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false)
+    val view = inflater.inflate(R.layout.widget_spinner_item_inline, parent, false)
     return NetworkViewHolder(
       view
     )
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 f94e0cf52..ebadca8a1 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
@@ -83,7 +83,7 @@ class HighlightListFragment : SettingsFragment(), SettingsFragment.Savable,
     newHighlightIgnoreRule.setOnClickListener {
       startActivityForResult(
         HighlightRuleActivity.intent(requireContext(), ignore = true),
-        REQUEST_CREATE_RULE
+        REQUEST_CREATE_IGNORE_RULE
       )
     }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightNickTypeAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightNickTypeAdapter.kt
index 8a2802d55..4d7397740 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightNickTypeAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightNickTypeAdapter.kt
@@ -30,7 +30,7 @@ class HighlightNickTypeAdapter(val data: List<HighlightNickTypeItem>) :
       else
         parent.context
     )
-    val view = inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false)
+    val view = inflater.inflate(R.layout.widget_spinner_item_inline, parent, false)
     return HighlightNickTypeViewHolder(
       view
     )
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightrule/HighlightRuleActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightrule/HighlightRuleActivity.kt
index 81cb99315..4d7463b4c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightrule/HighlightRuleActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightrule/HighlightRuleActivity.kt
@@ -21,7 +21,7 @@ class HighlightRuleActivity : ServiceBoundSettingsActivity(HighlightRuleFragment
       if (rule != null) {
         putExtra("item", rule)
       }
-      putExtra("ignore", ignore)
+      putExtra("inverse", ignore)
     }
   }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightrule/HighlightRuleFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightrule/HighlightRuleFragment.kt
index 7b158bb37..9270e528e 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightrule/HighlightRuleFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightrule/HighlightRuleFragment.kt
@@ -62,7 +62,7 @@ class HighlightRuleFragment : SettingsFragment(), SettingsFragment.Savable,
   }
 
   private fun applyChanges() = HighlightRuleManager.HighlightRule(
-    isInverse = rule?.isInverse ?: isInverse ?: false,
+    isInverse = isInverse ?: rule?.isInverse ?: false,
     isEnabled = enabled.isChecked,
     name = name.text.toString(),
     isRegEx = isRegex.isChecked,
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreTypeAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreTypeAdapter.kt
index c8ba877ac..64a966519 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreTypeAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreTypeAdapter.kt
@@ -30,7 +30,7 @@ class IgnoreTypeAdapter(val data: List<IgnoreTypeItem>) :
       else
         parent.context
     )
-    val view = inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false)
+    val view = inflater.inflate(R.layout.widget_spinner_item_inline, parent, false)
     return IgnoreTypeViewHolder(
       view
     )
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/ScopeTypeAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/ScopeTypeAdapter.kt
index 58762ec9d..4fbc95816 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/ScopeTypeAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/ScopeTypeAdapter.kt
@@ -30,7 +30,7 @@ class ScopeTypeAdapter(val data: List<ScopeTypeItem>) :
       else
         parent.context
     )
-    val view = inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false)
+    val view = inflater.inflate(R.layout.widget_spinner_item_inline, parent, false)
     return ScopeTypeViewHolder(
       view
     )
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/StrictnessTypeAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/StrictnessTypeAdapter.kt
index 59712d6a8..ab0d21980 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/StrictnessTypeAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/StrictnessTypeAdapter.kt
@@ -30,7 +30,7 @@ class StrictnessTypeAdapter(val data: List<StrictnessTypeItem>) :
       else
         parent.context
     )
-    val view = inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false)
+    val view = inflater.inflate(R.layout.widget_spinner_item_inline, parent, false)
     return StrictnessTypeViewHolder(
       view
     )
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/IdentityAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/IdentityAdapter.kt
index 385c9e3fd..1154071f1 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/IdentityAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/IdentityAdapter.kt
@@ -33,7 +33,7 @@ class IdentityAdapter : RecyclerSpinnerAdapter<IdentityAdapter.NetworkViewHolder
     val inflater = LayoutInflater.from(
       if (dropDown) ContextThemeWrapper(parent.context, dropDownViewTheme) else parent.context
     )
-    return NetworkViewHolder(inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false))
+    return NetworkViewHolder(inflater.inflate(R.layout.widget_spinner_item_inline, parent, false))
   }
 
   fun indexOf(id: NetworkId): Int? {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkserver/ProxyTypeAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkserver/ProxyTypeAdapter.kt
index adb22bf5d..b28718233 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkserver/ProxyTypeAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkserver/ProxyTypeAdapter.kt
@@ -28,7 +28,7 @@ class ProxyTypeAdapter(val data: List<ProxyTypeItem>) :
       else parent.context
     )
     return ProxyTypeViewHolder(
-      inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false)
+      inflater.inflate(R.layout.widget_spinner_item_inline, parent, false)
     )
   }
 
diff --git a/app/src/main/res/drawable-ldrtl/ic_send.xml b/app/src/main/res/drawable-ldrtl/ic_send.xml
new file mode 100644
index 000000000..ae9f4b703
--- /dev/null
+++ b/app/src/main/res/drawable-ldrtl/ic_send.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+  android:width="24dp"
+  android:height="24dp"
+  android:viewportHeight="24"
+  android:viewportWidth="24">
+  <path
+    android:fillColor="#000"
+    android:pathData="M22,21L1,12L22,3V10L7,12L22,14V21Z" />
+</vector>
diff --git a/app/src/main/res/layout-land/layout_main.xml b/app/src/main/res/layout-land/layout_main.xml
index 9c4f28b83..866fc7793 100644
--- a/app/src/main/res/layout-land/layout_main.xml
+++ b/app/src/main/res/layout-land/layout_main.xml
@@ -31,7 +31,8 @@
       android:id="@+id/autocomplete_list"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:background="?colorBackgroundCard" />
+      android:background="?colorBackgroundCard"
+      tools:listitem="@layout/widget_nick" />
   </LinearLayout>
 
   <fragment
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 c88d225cd..0bc7b1c06 100644
--- a/app/src/main/res/layout-sw600dp-land/layout_main.xml
+++ b/app/src/main/res/layout-sw600dp-land/layout_main.xml
@@ -36,7 +36,8 @@
         android:id="@+id/autocomplete_list"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:background="?colorBackgroundCard" />
+        android:background="?colorBackgroundCard"
+        tools:listitem="@layout/widget_nick" />
 
     </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 7a87d1c4f..8f5ea5b42 100644
--- a/app/src/main/res/layout-sw600dp-land/setup_slide.xml
+++ b/app/src/main/res/layout-sw600dp-land/setup_slide.xml
@@ -17,7 +17,8 @@
 
     <TextView
       android:id="@+id/title"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="end"
       android:gravity="end"
@@ -32,7 +33,8 @@
 
     <TextView
       android:id="@+id/description"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="end"
       android:gravity="end"
diff --git a/app/src/main/res/layout-sw600dp/setup_slide.xml b/app/src/main/res/layout-sw600dp/setup_slide.xml
index 391f91a05..a4790d005 100644
--- a/app/src/main/res/layout-sw600dp/setup_slide.xml
+++ b/app/src/main/res/layout-sw600dp/setup_slide.xml
@@ -21,7 +21,8 @@
 
       <TextView
         android:id="@+id/title"
-        android:layout_width="match_parent"
+        style="@style/Widget.RtlConformTextView"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginBottom="8dp"
         android:textColor="?android:attr/textColorPrimaryInverse"
@@ -30,7 +31,8 @@
 
       <TextView
         android:id="@+id/description"
-        android:layout_width="match_parent"
+        style="@style/Widget.RtlConformTextView"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:textColor="?android:attr/textColorSecondaryInverse"
         android:textSize="16sp"
diff --git a/app/src/main/res/layout/fragment_chat_list.xml b/app/src/main/res/layout/fragment_chat_list.xml
index eaf8628d8..a03034ff3 100644
--- a/app/src/main/res/layout/fragment_chat_list.xml
+++ b/app/src/main/res/layout/fragment_chat_list.xml
@@ -19,9 +19,11 @@
 
       <android.support.v7.widget.AppCompatSpinner
         android:id="@+id/chatListSpinner"
+        style="@style/Widget.FullWidthSpinner"
         android:layout_width="fill_parent"
         android:layout_height="match_parent"
-        app:popupTheme="?attr/actionBarPopupTheme" />
+        app:popupTheme="?attr/actionBarPopupTheme"
+        tools:listitem="@layout/widget_spinner_item_toolbar" />
 
     </android.support.v7.widget.Toolbar>
 
diff --git a/app/src/main/res/layout/fragment_toolbar.xml b/app/src/main/res/layout/fragment_toolbar.xml
index ee13a2287..14efddece 100644
--- a/app/src/main/res/layout/fragment_toolbar.xml
+++ b/app/src/main/res/layout/fragment_toolbar.xml
@@ -17,32 +17,33 @@
   <LinearLayout
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:layout_gravity="center_vertical"
+    android:layout_gravity="center_vertical|start"
     android:layout_marginTop="-2dp"
-    android:baselineAligned="false"
-    android:gravity="center_vertical">
+    android:baselineAligned="false">
 
     <TextView
       android:id="@+id/key"
-      style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
+      style="@style/Widget.RtlConformTextView"
       android:layout_width="16dp"
       android:layout_height="16dp"
       android:layout_marginEnd="2dp"
       android:layout_marginRight="2dp"
       android:layout_marginTop="2dp"
       android:gravity="center"
+      android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
       android:textSize="16sp"
       android:visibility="gone" />
 
     <TextView
       android:id="@+id/toolbar_title"
-      style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
+      style="@style/Widget.RtlConformTextView"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:ellipsize="end"
       android:gravity="center_vertical"
       android:singleLine="true"
-      android:text="@string/app_name" />
+      android:text="@string/app_name"
+      android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" />
 
   </LinearLayout>
 
@@ -55,4 +56,4 @@
     android:ellipsize="end"
     android:singleLine="true"
     android:visibility="gone" />
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/app/src/main/res/layout/layout_editor.xml b/app/src/main/res/layout/layout_editor.xml
index 3bd7eb0ef..1a9c02a62 100644
--- a/app/src/main/res/layout/layout_editor.xml
+++ b/app/src/main/res/layout/layout_editor.xml
@@ -30,6 +30,7 @@
 
     <de.kuschku.quasseldroid.ui.chat.input.RichEditText
       android:id="@+id/chatline"
+      style="@style/Widget.RtlConformTextView"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:background="@android:color/transparent"
@@ -65,7 +66,8 @@
     android:id="@+id/autocomplete_list"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    app:layout_constraintBottom_toTopOf="@+id/formatting_toolbar_container" />
+    app:layout_constraintBottom_toTopOf="@+id/formatting_toolbar_container"
+    tools:listitem="@layout/widget_nick" />
 
   <android.support.design.widget.AppBarLayout
     android:id="@+id/formatting_toolbar_container"
diff --git a/app/src/main/res/layout/layout_history.xml b/app/src/main/res/layout/layout_history.xml
index 2a35012d5..fe443edc8 100644
--- a/app/src/main/res/layout/layout_history.xml
+++ b/app/src/main/res/layout/layout_history.xml
@@ -27,21 +27,26 @@
         android:orientation="horizontal">
 
         <TextView
-          android:layout_width="0dip"
+          style="@style/Widget.RtlConformTextView"
+          android:layout_width="wrap_content"
           android:layout_height="match_parent"
-          android:layout_weight="1"
-          android:gravity="center_vertical|fill_horizontal"
+          android:gravity="center_vertical|start"
           android:paddingLeft="16dp"
           android:paddingRight="16dp"
           android:text="@string/label_input_history"
           android:textAppearance="@style/TextAppearance.AppCompat.Body2"
           android:textColor="?attr/colorForegroundSecondary" />
 
+        <Space
+          android:layout_width="0dip"
+          android:layout_height="match_parent"
+          android:layout_weight="1" />
+
         <android.support.v7.widget.AppCompatImageView
           android:id="@+id/send"
           android:layout_width="48dp"
           android:layout_height="48dp"
-          android:layout_gravity="top"
+          android:layout_gravity="top|end"
           android:background="?attr/selectableItemBackgroundBorderless"
           android:padding="12dp"
           android:scaleType="fitXY"
@@ -56,4 +61,4 @@
         tools:listitem="@layout/widget_history_message" />
     </LinearLayout>
   </android.support.v7.widget.CardView>
-</FrameLayout>
\ No newline at end of file
+</FrameLayout>
diff --git a/app/src/main/res/layout/layout_main.xml b/app/src/main/res/layout/layout_main.xml
index b57db18f8..1296b5dbd 100644
--- a/app/src/main/res/layout/layout_main.xml
+++ b/app/src/main/res/layout/layout_main.xml
@@ -36,7 +36,8 @@
         android:id="@+id/autocomplete_list"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:background="?colorBackgroundCard" />
+        android:background="?colorBackgroundCard"
+        tools:listitem="@layout/widget_nick" />
     </LinearLayout>
 
     <fragment
diff --git a/app/src/main/res/layout/preference_vertical.xml b/app/src/main/res/layout/preference_vertical.xml
index 7842d33ef..9bdb63768 100644
--- a/app/src/main/res/layout/preference_vertical.xml
+++ b/app/src/main/res/layout/preference_vertical.xml
@@ -59,6 +59,7 @@
 
     <TextView
       android:id="@android:id/summary"
+      style="@style/Widget.RtlConformTextView"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:maxLines="10"
diff --git a/app/src/main/res/layout/preferences_about.xml b/app/src/main/res/layout/preferences_about.xml
index 5e2048142..482f47b31 100644
--- a/app/src/main/res/layout/preferences_about.xml
+++ b/app/src/main/res/layout/preferences_about.xml
@@ -19,20 +19,8 @@
       android:orientation="vertical">
 
       <TextView
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:gravity="center_vertical"
-        android:minHeight="?android:attr/listPreferredItemHeightSmall"
-        android:paddingBottom="8dp"
-        android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
-        android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
-        android:paddingRight="?android:attr/listPreferredItemPaddingRight"
-        android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
-        android:paddingTop="8dp"
-        android:text="@string/label_contributors"
-        android:textColor="?colorAccent"
-        android:textSize="16sp"
-        android:textStyle="bold" />
+        style="@style/Widget.Subhead"
+        android:text="@string/label_contributors" />
 
       <android.support.v7.widget.RecyclerView
         android:id="@+id/contributors"
@@ -50,20 +38,8 @@
       android:orientation="vertical">
 
       <TextView
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:gravity="center_vertical"
-        android:minHeight="?android:attr/listPreferredItemHeightSmall"
-        android:paddingBottom="8dp"
-        android:paddingEnd="?android:attr/listPreferredItemPaddingRight"
-        android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
-        android:paddingRight="?android:attr/listPreferredItemPaddingRight"
-        android:paddingStart="?android:attr/listPreferredItemPaddingLeft"
-        android:paddingTop="8dp"
-        android:text="@string/label_libraries"
-        android:textColor="?colorAccent"
-        android:textSize="16sp"
-        android:textStyle="bold" />
+        style="@style/Widget.Subhead"
+        android:text="@string/label_libraries" />
 
       <android.support.v7.widget.RecyclerView
         android:id="@+id/libraries"
diff --git a/app/src/main/res/layout/preferences_about_header.xml b/app/src/main/res/layout/preferences_about_header.xml
index 7b8c62b9f..dd93262dd 100644
--- a/app/src/main/res/layout/preferences_about_header.xml
+++ b/app/src/main/res/layout/preferences_about_header.xml
@@ -76,10 +76,12 @@
   </android.support.v7.widget.ButtonBarLayout>
 
   <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:text="@string/app_description_long"
+    android:textAlignment="gravity" />
 
 </LinearLayout>
diff --git a/app/src/main/res/layout/preferences_license.xml b/app/src/main/res/layout/preferences_license.xml
index e6ec8ca96..3d96cb28b 100644
--- a/app/src/main/res/layout/preferences_license.xml
+++ b/app/src/main/res/layout/preferences_license.xml
@@ -7,8 +7,9 @@
 
   <TextView
     android:id="@+id/text"
+    style="@style/Widget.RtlConformTextView"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:padding="16dp"
     tools:text="@string/license_apache_2" />
-</android.support.v4.widget.NestedScrollView>
\ No newline at end of file
+</android.support.v4.widget.NestedScrollView>
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 d4ea0d821..9e788ef8b 100644
--- a/app/src/main/res/layout/preferences_whitelist_certificate_item.xml
+++ b/app/src/main/res/layout/preferences_whitelist_certificate_item.xml
@@ -23,7 +23,8 @@
 
     <TextView
       android:id="@+id/fingerprint"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textAppearance="?android:textAppearanceMedium"
       android:textColor="?colorTextPrimary"
@@ -32,7 +33,8 @@
 
     <TextView
       android:id="@+id/ignore_date"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/label_whitelist_ignore_date"
       android:textAppearance="?textAppearanceListItemSecondary"
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 f6ffa942d..a20b9c44e 100644
--- a/app/src/main/res/layout/preferences_whitelist_hostname_item.xml
+++ b/app/src/main/res/layout/preferences_whitelist_hostname_item.xml
@@ -23,7 +23,8 @@
 
     <TextView
       android:id="@+id/hostname"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textAppearance="?android:textAppearanceMedium"
       android:textColor="?colorTextPrimary"
@@ -32,7 +33,8 @@
 
     <TextView
       android:id="@+id/fingerprint"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textAppearance="?textAppearanceListItemSecondary"
       android:textColor="?colorTextSecondary"
diff --git a/app/src/main/res/layout/settings_aliaslist_item.xml b/app/src/main/res/layout/settings_aliaslist_item.xml
index 147ec9e94..c62d0aa6a 100644
--- a/app/src/main/res/layout/settings_aliaslist_item.xml
+++ b/app/src/main/res/layout/settings_aliaslist_item.xml
@@ -34,7 +34,7 @@
 
     <TextView
       android:id="@+id/name"
-      android:layout_width="match_parent"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:ellipsize="marquee"
       android:orientation="vertical"
@@ -46,10 +46,9 @@
 
     <TextView
       android:id="@+id/expansion"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
-      android:ellipsize="marquee"
-      android:singleLine="true"
       android:textAppearance="?textAppearanceListItemSecondary"
       android:textColor="?colorTextSecondary"
       tools:text="/quote away" />
diff --git a/app/src/main/res/layout/settings_chatlist.xml b/app/src/main/res/layout/settings_chatlist.xml
index 96d3cf5b9..f6ef355e5 100644
--- a/app/src/main/res/layout/settings_chatlist.xml
+++ b/app/src/main/res/layout/settings_chatlist.xml
@@ -72,9 +72,8 @@
 
       <Spinner
         android:id="@+id/network_id"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        tools:listitem="@layout/widget_spinner_item_toolbar" />
+        style="@style/Widget.FullWidthSpinner"
+        tools:listitem="@layout/widget_spinner_item_inline" />
 
       <android.support.v7.widget.SwitchCompat
         android:id="@+id/show_status_buffer"
@@ -131,9 +130,8 @@
 
       <Spinner
         android:id="@+id/minimum_activity"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        tools:listitem="@layout/widget_spinner_item_toolbar" />
+        style="@style/Widget.FullWidthSpinner"
+        tools:listitem="@layout/widget_spinner_item_inline" />
 
       <android.support.v7.widget.SwitchCompat
         android:id="@+id/hide_inactive_buffers"
diff --git a/app/src/main/res/layout/settings_highlightlist.xml b/app/src/main/res/layout/settings_highlightlist.xml
index 0a5096f6a..4f5cbc007 100644
--- a/app/src/main/res/layout/settings_highlightlist.xml
+++ b/app/src/main/res/layout/settings_highlightlist.xml
@@ -6,54 +6,30 @@
   android:layout_height="match_parent"
   android:scrollbars="vertical">
 
-  <LinearLayout
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical">
+  <LinearLayout style="@style/Widget.CoreSettings.Wrapper">
 
     <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:gravity="center_vertical"
-      android:minHeight="?listPreferredItemHeightSmall"
-      android:paddingEnd="?listPreferredItemPaddingRight"
-      android:paddingLeft="?listPreferredItemPaddingLeft"
-      android:paddingRight="?listPreferredItemPaddingRight"
-      android:paddingStart="?listPreferredItemPaddingLeft">
+      android:minHeight="48dp">
 
       <android.support.v7.widget.AppCompatImageView
         style="@style/Widget.CoreSettings.PrimaryItemIcon"
         app:srcCompat="@drawable/ic_server_network" />
 
-      <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        android:paddingBottom="16dp"
-        android:paddingTop="16dp">
-
-        <TextView
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:text="@string/settings_highlightlist_highlight_nick"
-          android:textColor="?colorTextPrimary"
-          android:textSize="16sp" />
-      </LinearLayout>
+      <TextView
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_highlightlist_highlight_nick" />
     </LinearLayout>
 
-
     <LinearLayout
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:layout_marginLeft="72dp"
-      android:layout_marginStart="72dp"
-      android:orientation="vertical">
+      style="@style/Widget.CoreSettings.DependentGroup"
+      android:visibility="visible">
 
       <Spinner
         android:id="@+id/highlight_nick_type"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        tools:listitem="@layout/widget_spinner_item_toolbar" />
+        style="@style/Widget.FullWidthSpinner"
+        tools:listitem="@layout/widget_spinner_item_inline" />
 
       <android.support.v7.widget.SwitchCompat
         android:id="@+id/is_case_sensitive"
@@ -64,39 +40,20 @@
     <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:gravity="center_vertical"
-      android:minHeight="?listPreferredItemHeightSmall"
-      android:paddingEnd="?listPreferredItemPaddingRight"
-      android:paddingLeft="?listPreferredItemPaddingLeft"
-      android:paddingRight="?listPreferredItemPaddingRight"
-      android:paddingStart="?listPreferredItemPaddingLeft">
+      android:minHeight="48dp">
 
       <android.support.v7.widget.AppCompatImageView
         style="@style/Widget.CoreSettings.PrimaryItemIcon"
         app:srcCompat="@drawable/ic_server_network" />
 
-      <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        android:paddingBottom="16dp"
-        android:paddingTop="16dp">
-
-        <TextView
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:text="@string/settings_highlightlist_rules"
-          android:textColor="?colorTextPrimary"
-          android:textSize="16sp" />
-      </LinearLayout>
+      <TextView
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_highlightlist_rules" />
     </LinearLayout>
 
     <LinearLayout
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:layout_marginLeft="72dp"
-      android:layout_marginStart="72dp"
-      android:orientation="vertical">
+      style="@style/Widget.CoreSettings.DependentGroup"
+      android:visibility="visible">
 
       <android.support.v7.widget.RecyclerView
         android:id="@+id/highlight_rules"
@@ -121,39 +78,20 @@
     <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:gravity="center_vertical"
-      android:minHeight="?listPreferredItemHeightSmall"
-      android:paddingEnd="?listPreferredItemPaddingRight"
-      android:paddingLeft="?listPreferredItemPaddingLeft"
-      android:paddingRight="?listPreferredItemPaddingRight"
-      android:paddingStart="?listPreferredItemPaddingLeft">
+      android:minHeight="48dp">
 
       <android.support.v7.widget.AppCompatImageView
         style="@style/Widget.CoreSettings.PrimaryItemIcon"
         app:srcCompat="@drawable/ic_server_network" />
 
-      <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        android:paddingBottom="16dp"
-        android:paddingTop="16dp">
-
-        <TextView
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:text="@string/settings_highlightlist_ignore_rules"
-          android:textColor="?colorTextPrimary"
-          android:textSize="16sp" />
-      </LinearLayout>
+      <TextView
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_highlightlist_ignore_rules" />
     </LinearLayout>
 
     <LinearLayout
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:layout_marginLeft="72dp"
-      android:layout_marginStart="72dp"
-      android:orientation="vertical">
+      style="@style/Widget.CoreSettings.DependentGroup"
+      android:visibility="visible">
 
       <android.support.v7.widget.RecyclerView
         android:id="@+id/highlight_ignore_rules"
diff --git a/app/src/main/res/layout/settings_highlightlist_rule.xml b/app/src/main/res/layout/settings_highlightlist_rule.xml
index 9bf0ae7f5..76cca2dc6 100644
--- a/app/src/main/res/layout/settings_highlightlist_rule.xml
+++ b/app/src/main/res/layout/settings_highlightlist_rule.xml
@@ -38,7 +38,8 @@
 
       <TextView
         android:id="@+id/name"
-        android:layout_width="match_parent"
+        style="@style/Widget.RtlConformTextView"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:ellipsize="marquee"
         android:orientation="vertical"
@@ -50,7 +51,8 @@
 
       <TextView
         android:id="@+id/sender"
-        android:layout_width="match_parent"
+        style="@style/Widget.RtlConformTextView"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:ellipsize="marquee"
         android:singleLine="true"
@@ -60,7 +62,8 @@
 
       <TextView
         android:id="@+id/channel"
-        android:layout_width="match_parent"
+        style="@style/Widget.RtlConformTextView"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:ellipsize="marquee"
         android:singleLine="true"
@@ -77,6 +80,7 @@
       android:paddingEnd="?listPreferredItemPaddingRight"
       android:paddingLeft="?listPreferredItemPaddingLeft"
       android:paddingRight="?listPreferredItemPaddingRight"
-      android:paddingStart="?listPreferredItemPaddingLeft" />
+      android:paddingStart="?listPreferredItemPaddingLeft"
+      android:text="" />
   </LinearLayout>
 </android.support.v7.widget.CardView>
diff --git a/app/src/main/res/layout/settings_identity_nick.xml b/app/src/main/res/layout/settings_identity_nick.xml
index 1a017a4de..55d6b36a5 100644
--- a/app/src/main/res/layout/settings_identity_nick.xml
+++ b/app/src/main/res/layout/settings_identity_nick.xml
@@ -17,11 +17,14 @@
 
     <TextView
       android:id="@+id/nick"
+      style="@style/Widget.RtlConformTextView"
       android:layout_width="0dip"
       android:layout_height="wrap_content"
       android:layout_gravity="center_vertical"
       android:layout_weight="1"
+      android:paddingEnd="0dip"
       android:paddingLeft="?listPreferredItemPaddingLeft"
+      android:paddingRight="0dip"
       android:paddingStart="?listPreferredItemPaddingLeft"
       android:textAppearance="?android:attr/textAppearanceListItemSmall"
       tools:text="@sample/messages.json/data/sender" />
diff --git a/app/src/main/res/layout/settings_ignoreitem.xml b/app/src/main/res/layout/settings_ignoreitem.xml
index 49e81f1dd..ec35b7011 100644
--- a/app/src/main/res/layout/settings_ignoreitem.xml
+++ b/app/src/main/res/layout/settings_ignoreitem.xml
@@ -48,9 +48,8 @@
 
       <Spinner
         android:id="@+id/type"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        tools:listitem="@layout/settings_item" />
+        style="@style/Widget.FullWidthSpinner"
+        tools:listitem="@layout/widget_spinner_item_inline" />
 
       <TextView
         style="@style/Widget.CoreSettings.EditTextHeader"
@@ -58,9 +57,8 @@
 
       <Spinner
         android:id="@+id/strictness"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        tools:listitem="@layout/settings_item" />
+        style="@style/Widget.FullWidthSpinner"
+        tools:listitem="@layout/widget_spinner_item_inline" />
     </LinearLayout>
 
     <LinearLayout
@@ -83,9 +81,8 @@
 
       <Spinner
         android:id="@+id/scope"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        tools:listitem="@layout/settings_item" />
+        style="@style/Widget.FullWidthSpinner"
+        tools:listitem="@layout/widget_spinner_item_inline" />
     </LinearLayout>
 
     <LinearLayout
diff --git a/app/src/main/res/layout/settings_ignorelist.xml b/app/src/main/res/layout/settings_ignorelist.xml
index 988af7b5c..18dde6d18 100644
--- a/app/src/main/res/layout/settings_ignorelist.xml
+++ b/app/src/main/res/layout/settings_ignorelist.xml
@@ -3,7 +3,11 @@
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
-  android:layout_height="match_parent">
+  android:layout_height="match_parent"
+  android:layout_marginEnd="16dp"
+  android:layout_marginLeft="16dp"
+  android:layout_marginRight="16dp"
+  android:layout_marginStart="16dp">
 
   <android.support.v7.widget.RecyclerView
     android:id="@+id/list"
diff --git a/app/src/main/res/layout/settings_ignorelist_item.xml b/app/src/main/res/layout/settings_ignorelist_item.xml
index b7e24b75a..eb6394710 100644
--- a/app/src/main/res/layout/settings_ignorelist_item.xml
+++ b/app/src/main/res/layout/settings_ignorelist_item.xml
@@ -39,7 +39,8 @@
 
       <TextView
         android:id="@+id/ignore_rule"
-        android:layout_width="match_parent"
+        style="@style/Widget.RtlConformTextView"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:ellipsize="marquee"
         android:orientation="vertical"
@@ -51,7 +52,8 @@
 
       <TextView
         android:id="@+id/scope_rule"
-        android:layout_width="match_parent"
+        style="@style/Widget.RtlConformTextView"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:ellipsize="marquee"
         android:singleLine="true"
diff --git a/app/src/main/res/layout/settings_item.xml b/app/src/main/res/layout/settings_item.xml
index 5b4f851ad..49c8cd260 100644
--- a/app/src/main/res/layout/settings_item.xml
+++ b/app/src/main/res/layout/settings_item.xml
@@ -22,7 +22,8 @@
 
     <TextView
       android:id="@+id/title"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:ellipsize="marquee"
       android:singleLine="true"
@@ -33,7 +34,8 @@
 
     <TextView
       android:id="@+id/summary"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textAppearance="?android:textAppearanceSmall"
       android:textColor="?colorTextPrimary"
diff --git a/app/src/main/res/layout/settings_list.xml b/app/src/main/res/layout/settings_list.xml
index 65715bcfc..0c9edcba9 100644
--- a/app/src/main/res/layout/settings_list.xml
+++ b/app/src/main/res/layout/settings_list.xml
@@ -25,20 +25,9 @@
         style="@style/Widget.CoreSettings.PrimaryItemIcon"
         app:srcCompat="@drawable/ic_server_network" />
 
-      <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        android:paddingBottom="16dp"
-        android:paddingTop="16dp">
-
-        <TextView
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:text="@string/settings_networks_title"
-          android:textColor="?colorTextPrimary"
-          android:textSize="16sp" />
-      </LinearLayout>
+      <TextView
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_networks_title" />
     </LinearLayout>
 
     <LinearLayout
@@ -82,20 +71,9 @@
         style="@style/Widget.CoreSettings.PrimaryItemIcon"
         app:srcCompat="@drawable/ic_account_card" />
 
-      <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        android:paddingBottom="16dp"
-        android:paddingTop="16dp">
-
-        <TextView
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:text="@string/settings_identities_title"
-          android:textColor="?colorTextPrimary"
-          android:textSize="16sp" />
-      </LinearLayout>
+      <TextView
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_identities_title" />
     </LinearLayout>
 
     <LinearLayout
@@ -139,20 +117,9 @@
         style="@style/Widget.CoreSettings.PrimaryItemIcon"
         app:srcCompat="@drawable/ic_list_bulleted" />
 
-      <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        android:paddingBottom="16dp"
-        android:paddingTop="16dp">
-
-        <TextView
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:text="@string/settings_chatlists_title"
-          android:textColor="?colorTextPrimary"
-          android:textSize="16sp" />
-      </LinearLayout>
+      <TextView
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_chatlists_title" />
     </LinearLayout>
 
     <LinearLayout
@@ -199,20 +166,9 @@
         style="@style/Widget.CoreSettings.PrimaryItemIcon"
         app:srcCompat="@drawable/ic_filter" />
 
-      <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        android:paddingBottom="16dp"
-        android:paddingTop="16dp">
-
-        <TextView
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:text="@string/settings_ignorelist_title"
-          android:textColor="?colorTextPrimary"
-          android:textSize="16sp" />
-      </LinearLayout>
+      <TextView
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_ignorelist_title" />
     </LinearLayout>
 
     <LinearLayout
@@ -232,20 +188,9 @@
         style="@style/Widget.CoreSettings.PrimaryItemIcon"
         app:srcCompat="@drawable/ic_bell" />
 
-      <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        android:paddingBottom="16dp"
-        android:paddingTop="16dp">
-
-        <TextView
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:text="@string/settings_highlightlist_title"
-          android:textColor="?colorTextPrimary"
-          android:textSize="16sp" />
-      </LinearLayout>
+      <TextView
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_highlightlist_title" />
     </LinearLayout>
 
     <LinearLayout
@@ -265,20 +210,9 @@
         style="@style/Widget.CoreSettings.PrimaryItemIcon"
         app:srcCompat="@drawable/ic_message_bulleted" />
 
-      <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        android:paddingBottom="16dp"
-        android:paddingTop="16dp">
-
-        <TextView
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:text="@string/settings_aliaslist_title"
-          android:textColor="?colorTextPrimary"
-          android:textSize="16sp" />
-      </LinearLayout>
+      <TextView
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_aliaslist_title" />
     </LinearLayout>
 
     <LinearLayout
@@ -298,20 +232,9 @@
         style="@style/Widget.CoreSettings.PrimaryItemIcon"
         app:srcCompat="@drawable/ic_settings" />
 
-      <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        android:paddingBottom="16dp"
-        android:paddingTop="16dp">
-
-        <TextView
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:text="@string/settings_networkconfig_title"
-          android:textColor="?colorTextPrimary"
-          android:textSize="16sp" />
-      </LinearLayout>
+      <TextView
+        style="@style/Widget.CoreSettings.PrimaryItemSwitch"
+        android:text="@string/settings_networkconfig_title" />
     </LinearLayout>
   </LinearLayout>
 </android.support.v4.widget.NestedScrollView>
diff --git a/app/src/main/res/layout/settings_network.xml b/app/src/main/res/layout/settings_network.xml
index ff2f3b624..97587ff9d 100644
--- a/app/src/main/res/layout/settings_network.xml
+++ b/app/src/main/res/layout/settings_network.xml
@@ -82,9 +82,8 @@
 
       <Spinner
         android:id="@+id/identity"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        tools:listitem="@layout/widget_spinner_item_toolbar" />
+        style="@style/Widget.FullWidthSpinner"
+        tools:listitem="@layout/widget_spinner_item_inline" />
     </LinearLayout>
 
     <LinearLayout
diff --git a/app/src/main/res/layout/settings_network_server.xml b/app/src/main/res/layout/settings_network_server.xml
index aec7f169d..4a10a4578 100644
--- a/app/src/main/res/layout/settings_network_server.xml
+++ b/app/src/main/res/layout/settings_network_server.xml
@@ -38,7 +38,8 @@
 
       <TextView
         android:id="@+id/host"
-        android:layout_width="match_parent"
+        style="@style/Widget.RtlConformTextView"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:ellipsize="marquee"
         android:singleLine="true"
@@ -47,7 +48,8 @@
 
       <TextView
         android:id="@+id/port"
-        android:layout_width="match_parent"
+        style="@style/Widget.RtlConformTextView"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:ellipsize="marquee"
         android:singleLine="true"
diff --git a/app/src/main/res/layout/settings_networkserver.xml b/app/src/main/res/layout/settings_networkserver.xml
index 40fae5168..faaddcb99 100644
--- a/app/src/main/res/layout/settings_networkserver.xml
+++ b/app/src/main/res/layout/settings_networkserver.xml
@@ -96,9 +96,8 @@
 
       <Spinner
         android:id="@+id/proxy_type"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        tools:listitem="@layout/widget_spinner_item_toolbar" />
+        style="@style/Widget.FullWidthSpinner"
+        tools:listitem="@layout/widget_spinner_item_inline" />
 
       <android.support.design.widget.TextInputLayout
         style="@style/Widget.CoreSettings.EditTextLayout"
diff --git a/app/src/main/res/layout/setup_slide.xml b/app/src/main/res/layout/setup_slide.xml
index 54045a751..b1a991c09 100644
--- a/app/src/main/res/layout/setup_slide.xml
+++ b/app/src/main/res/layout/setup_slide.xml
@@ -36,7 +36,8 @@
 
         <TextView
           android:id="@+id/description"
-          android:layout_width="match_parent"
+          style="@style/Widget.RtlConformTextView"
+          android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_marginBottom="24dp"
           android:layout_marginEnd="48dp"
diff --git a/app/src/main/res/layout/widget_buffer.xml b/app/src/main/res/layout/widget_buffer.xml
index 3fa99fd34..d0aff53ca 100644
--- a/app/src/main/res/layout/widget_buffer.xml
+++ b/app/src/main/res/layout/widget_buffer.xml
@@ -29,9 +29,9 @@
 
     <TextView
       android:id="@+id/name"
-      android:layout_width="match_parent"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
-      android:layout_gravity="center"
+      android:layout_gravity="center_vertical|start"
       android:fontFamily="sans-serif-medium"
       android:singleLine="true"
       android:textColor="?attr/colorTextPrimary"
@@ -40,12 +40,12 @@
 
     <TextView
       android:id="@+id/description"
-      android:layout_width="match_parent"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
-      android:layout_gravity="center"
+      android:layout_gravity="center_vertical|start"
       android:singleLine="true"
       android:textColor="?attr/colorTextSecondary"
       android:textSize="12sp"
       tools:text="QuasselDroid is an Android client for #quassel ♥ justJanne's much improved version: https://dl.kuschku.de/releases/quasseldroid/ ♥ http://github.com/sandsmark/QuasselDroid ♥ Quasseldroid  on play  https://market.android.com/details?id=com.iskrembilen.quasseldroid ♥ Sign up for beta: https://plus.google.com/communities/104094956084217666662" />
   </LinearLayout>
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/app/src/main/res/layout/widget_chatmessage_action.xml b/app/src/main/res/layout/widget_chatmessage_action.xml
index bc5a3db82..bfaf9668b 100644
--- a/app/src/main/res/layout/widget_chatmessage_action.xml
+++ b/app/src/main/res/layout/widget_chatmessage_action.xml
@@ -34,6 +34,7 @@
 
   <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
     android:id="@+id/combined"
+    style="@style/Widget.RtlConformTextView"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
     android:layout_weight="1"
diff --git a/app/src/main/res/layout/widget_chatmessage_daychange.xml b/app/src/main/res/layout/widget_chatmessage_daychange.xml
index 2fd710fd3..ca7c67fa2 100644
--- a/app/src/main/res/layout/widget_chatmessage_daychange.xml
+++ b/app/src/main/res/layout/widget_chatmessage_daychange.xml
@@ -25,9 +25,11 @@
 
     <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
       android:id="@+id/combined"
+      style="@style/Widget.RtlConformTextView"
       android:layout_width="0dip"
       android:layout_height="wrap_content"
       android:layout_weight="1"
+
       android:gravity="center"
       android:textColor="?attr/colorForeground"
       android:textStyle="bold"
diff --git a/app/src/main/res/layout/widget_chatmessage_error.xml b/app/src/main/res/layout/widget_chatmessage_error.xml
index 57221c0b7..c8e377c06 100644
--- a/app/src/main/res/layout/widget_chatmessage_error.xml
+++ b/app/src/main/res/layout/widget_chatmessage_error.xml
@@ -34,6 +34,7 @@
 
   <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
     android:id="@+id/combined"
+    style="@style/Widget.RtlConformTextView"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
     android:layout_weight="1"
diff --git a/app/src/main/res/layout/widget_chatmessage_info.xml b/app/src/main/res/layout/widget_chatmessage_info.xml
index 74062d298..66264bd19 100644
--- a/app/src/main/res/layout/widget_chatmessage_info.xml
+++ b/app/src/main/res/layout/widget_chatmessage_info.xml
@@ -34,6 +34,7 @@
 
   <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
     android:id="@+id/combined"
+    style="@style/Widget.RtlConformTextView"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
     android:layout_weight="1"
diff --git a/app/src/main/res/layout/widget_chatmessage_notice.xml b/app/src/main/res/layout/widget_chatmessage_notice.xml
index 2b830570b..0c2ff5832 100644
--- a/app/src/main/res/layout/widget_chatmessage_notice.xml
+++ b/app/src/main/res/layout/widget_chatmessage_notice.xml
@@ -34,6 +34,7 @@
 
   <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
     android:id="@+id/combined"
+    style="@style/Widget.RtlConformTextView"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
     android:layout_weight="1"
diff --git a/app/src/main/res/layout/widget_chatmessage_plain.xml b/app/src/main/res/layout/widget_chatmessage_plain.xml
index e92c0e0b5..d1cd18074 100644
--- a/app/src/main/res/layout/widget_chatmessage_plain.xml
+++ b/app/src/main/res/layout/widget_chatmessage_plain.xml
@@ -49,17 +49,40 @@
     android:layout_gravity="fill_vertical"
     android:orientation="vertical">
 
-    <TextView
-      android:id="@+id/name"
-      android:layout_width="wrap_content"
-      android:layout_height="wrap_content"
-      android:layout_gravity="center_vertical"
-      android:ellipsize="marquee"
-      android:singleLine="true"
-      android:textColor="?attr/colorForegroundSecondary"
-      android:visibility="gone"
-      tools:text="@sample/messages.json/data/sender"
-      tools:visibility="visible" />
+    <LinearLayout
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content">
+
+      <TextView
+        android:id="@+id/name"
+        style="@style/Widget.RtlConformTextView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:ellipsize="marquee"
+        android:singleLine="true"
+        android:textColor="?attr/colorForeground"
+        android:visibility="gone"
+        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"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:ellipsize="marquee"
+        android:singleLine="true"
+        android:textColor="?attr/colorForegroundSecondary"
+        android:visibility="gone"
+        tools:text="@sample/messages.json/data/sender"
+        tools:visibility="visible" />
+    </LinearLayout>
 
     <LinearLayout
       android:layout_width="match_parent"
@@ -75,6 +98,7 @@
 
         <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
           android:id="@+id/content"
+          style="@style/Widget.RtlConformTextView"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:textColor="?attr/colorForeground"
@@ -84,6 +108,7 @@
 
         <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
           android:id="@+id/combined"
+          style="@style/Widget.RtlConformTextView"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:textColor="?attr/colorForeground"
diff --git a/app/src/main/res/layout/widget_chatmessage_server.xml b/app/src/main/res/layout/widget_chatmessage_server.xml
index 3b136eb8d..0dd227ac0 100644
--- a/app/src/main/res/layout/widget_chatmessage_server.xml
+++ b/app/src/main/res/layout/widget_chatmessage_server.xml
@@ -34,6 +34,7 @@
 
   <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
     android:id="@+id/combined"
+    style="@style/Widget.RtlConformTextView"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
     android:layout_weight="1"
diff --git a/app/src/main/res/layout/widget_contributor.xml b/app/src/main/res/layout/widget_contributor.xml
index de699de65..6f9dc7064 100644
--- a/app/src/main/res/layout/widget_contributor.xml
+++ b/app/src/main/res/layout/widget_contributor.xml
@@ -22,7 +22,8 @@
 
     <TextView
       android:id="@+id/name"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textColor="?colorTextPrimary"
       android:textSize="16sp"
@@ -30,7 +31,8 @@
 
     <TextView
       android:id="@+id/nickname"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textAppearance="?android:attr/textAppearanceSmall"
       android:textColor="?colorTextSecondary"
@@ -38,7 +40,8 @@
 
     <TextView
       android:id="@+id/description"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textAppearance="?android:attr/textAppearanceSmall"
       android:textColor="?colorTextSecondary"
diff --git a/app/src/main/res/layout/widget_core_account.xml b/app/src/main/res/layout/widget_core_account.xml
index 0a8e02ba0..b091d5208 100644
--- a/app/src/main/res/layout/widget_core_account.xml
+++ b/app/src/main/res/layout/widget_core_account.xml
@@ -35,7 +35,8 @@
 
     <TextView
       android:id="@+id/account_name"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:fontFamily="sans-serif-medium"
       android:gravity="center_vertical|start"
@@ -46,7 +47,8 @@
 
     <TextView
       android:id="@+id/account_description"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:fontFamily="sans-serif"
       android:gravity="center_vertical|start"
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 295b1679c..38e890916 100644
--- a/app/src/main/res/layout/widget_core_account_add.xml
+++ b/app/src/main/res/layout/widget_core_account_add.xml
@@ -23,6 +23,7 @@
 
   <TextView
     android:id="@+id/account_name"
+    style="@style/Widget.RtlConformTextView"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
     android:layout_gravity="center_vertical|start"
diff --git a/app/src/main/res/layout/widget_crash.xml b/app/src/main/res/layout/widget_crash.xml
index 3bc5b9d83..3e3cb6fad 100644
--- a/app/src/main/res/layout/widget_crash.xml
+++ b/app/src/main/res/layout/widget_crash.xml
@@ -20,7 +20,8 @@
 
     <TextView
       android:id="@+id/crash_time"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:ellipsize="marquee"
       android:singleLine="true"
@@ -29,16 +30,18 @@
 
     <TextView
       android:id="@+id/version_name"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textAppearance="?android:attr/textAppearanceSmall"
       android:textColor="?colorTextPrimary" />
 
     <TextView
       android:id="@+id/error"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textAppearance="?android:attr/textAppearanceSmall"
       android:textColor="?colorTextSecondary" />
   </LinearLayout>
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/app/src/main/res/layout/widget_history_message.xml b/app/src/main/res/layout/widget_history_message.xml
index e71572756..2024345cd 100644
--- a/app/src/main/res/layout/widget_history_message.xml
+++ b/app/src/main/res/layout/widget_history_message.xml
@@ -2,6 +2,7 @@
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/content"
+  style="@style/Widget.RtlConformTextView"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_gravity="center"
@@ -13,7 +14,6 @@
   android:paddingLeft="16dp"
   android:paddingRight="16dp"
   android:paddingTop="8dp"
-  android:singleLine="true"
   android:textColor="?attr/colorTextPrimary"
   android:textSize="13sp"
-  tools:text="@sample/recent_messages.json/data/message" />
\ No newline at end of file
+  tools:text="@sample/recent_messages.json/data/message" />
diff --git a/app/src/main/res/layout/widget_library.xml b/app/src/main/res/layout/widget_library.xml
index 7ad732fc8..b32b7f9ea 100644
--- a/app/src/main/res/layout/widget_library.xml
+++ b/app/src/main/res/layout/widget_library.xml
@@ -22,7 +22,8 @@
 
     <TextView
       android:id="@+id/name"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textColor="?colorTextPrimary"
       android:textSize="16sp"
@@ -30,7 +31,8 @@
 
     <TextView
       android:id="@+id/version"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textAppearance="?android:attr/textAppearanceSmall"
       android:textColor="?colorTextSecondary"
@@ -38,7 +40,8 @@
 
     <TextView
       android:id="@+id/license"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textAppearance="?android:attr/textAppearanceSmall"
       android:textColor="?colorTextSecondary"
diff --git a/app/src/main/res/layout/widget_network.xml b/app/src/main/res/layout/widget_network.xml
index 42128db09..fed3df93b 100644
--- a/app/src/main/res/layout/widget_network.xml
+++ b/app/src/main/res/layout/widget_network.xml
@@ -19,6 +19,7 @@
 
     <TextView
       android:id="@+id/name"
+      style="@style/Widget.RtlConformTextView"
       android:layout_width="0dip"
       android:layout_height="wrap_content"
       android:layout_gravity="center"
@@ -49,4 +50,4 @@
       android:tint="?attr/colorTextSecondary"
       app:srcCompat="@drawable/ic_chevron_down" />
   </LinearLayout>
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/app/src/main/res/layout/widget_nick.xml b/app/src/main/res/layout/widget_nick.xml
index 054915a7e..a08e7b5c4 100644
--- a/app/src/main/res/layout/widget_nick.xml
+++ b/app/src/main/res/layout/widget_nick.xml
@@ -30,7 +30,8 @@
 
     <TextView
       android:id="@+id/nick"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textColor="?attr/colorTextPrimary"
       android:textSize="13sp"
@@ -38,11 +39,12 @@
 
     <TextView
       android:id="@+id/realname"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textColor="?attr/colorTextSecondary"
       android:textSize="12sp"
       tools:text="@sample/messages.json/data/sender"
       tools:visibility="visible" />
   </LinearLayout>
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/app/src/main/res/layout/widget_nick_away.xml b/app/src/main/res/layout/widget_nick_away.xml
index 8d4c1a90f..31f291f6a 100644
--- a/app/src/main/res/layout/widget_nick_away.xml
+++ b/app/src/main/res/layout/widget_nick_away.xml
@@ -30,7 +30,8 @@
 
     <TextView
       android:id="@+id/nick"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textColor="?attr/colorTextSecondary"
       android:textSize="13sp"
@@ -39,7 +40,8 @@
 
     <TextView
       android:id="@+id/realname"
-      android:layout_width="match_parent"
+      style="@style/Widget.RtlConformTextView"
+      android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textColor="?attr/colorTextSecondary"
       android:textSize="12sp"
@@ -47,4 +49,4 @@
       tools:text="@sample/messages.json/data/sender"
       tools:visibility="visible" />
   </LinearLayout>
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/app/src/main/res/layout/widget_spinner_item_inline.xml b/app/src/main/res/layout/widget_spinner_item_inline.xml
index b21fc8158..12b041f58 100644
--- a/app/src/main/res/layout/widget_spinner_item_inline.xml
+++ b/app/src/main/res/layout/widget_spinner_item_inline.xml
@@ -1,7 +1,12 @@
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+  xmlns:tools="http://schemas.android.com/tools"
   android:id="@android:id/text1"
+  style="@style/Widget.RtlConformTextView"
+  android:gravity="center_vertical"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
-  android:gravity="center_vertical"
-  android:minHeight="48dp"
-  android:textAppearance="?android:attr/textAppearanceListItemSmall" />
+  android:minHeight="?listPreferredItemHeightSmall"
+  android:paddingLeft="16dp"
+  android:paddingRight="16dp"
+  android:textAppearance="?android:attr/textAppearanceListItemSmall"
+  tools:text="All Chats" />
diff --git a/app/src/main/res/layout/widget_spinner_item_toolbar.xml b/app/src/main/res/layout/widget_spinner_item_toolbar.xml
index fa2ad16dc..1ee4e670a 100644
--- a/app/src/main/res/layout/widget_spinner_item_toolbar.xml
+++ b/app/src/main/res/layout/widget_spinner_item_toolbar.xml
@@ -1,9 +1,10 @@
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@android:id/text1"
+  style="@style/Widget.RtlConformTextView"
+  android:gravity="center_vertical"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
-  android:gravity="center_vertical"
   android:minHeight="?attr/actionBarSize"
   android:paddingLeft="16dp"
   android:paddingRight="16dp"
diff --git a/app/src/main/res/values-v17/styles_widgets.xml b/app/src/main/res/values-v17/styles_widgets.xml
index eac3b62a0..e6740cc2c 100644
--- a/app/src/main/res/values-v17/styles_widgets.xml
+++ b/app/src/main/res/values-v17/styles_widgets.xml
@@ -1,6 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <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>
@@ -29,14 +34,14 @@
     <item name="android:layout_marginStart">56dp</item>
   </style>
 
-  <style name="Widget.CoreSettings.EditTextLayout" parent="">
+  <style name="Widget.CoreSettings.EditTextLayout" parent="Widget.RtlConformTextView">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:layout_marginLeft">-4dp</item>
     <item name="android:layout_marginStart">-4dp</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>
@@ -60,8 +65,8 @@
     <item name="android:paddingTop">8dp</item>
   </style>
 
-  <style name="Widget.Info.Section" parent="">
-    <item name="android:layout_width">match_parent</item>
+  <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>
@@ -89,7 +94,7 @@
     <item name="android:paddingTop">16dp</item>
   </style>
 
-  <style name="Widget.Subhead" parent="">
+  <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>
diff --git a/app/src/main/res/values/styles_widgets.xml b/app/src/main/res/values/styles_widgets.xml
index 6c51192ce..64c83761a 100644
--- a/app/src/main/res/values/styles_widgets.xml
+++ b/app/src/main/res/values/styles_widgets.xml
@@ -2,6 +2,8 @@
 
   <style name="Widget" />
 
+  <style name="Widget.RtlConformTextView" parent=""></style>
+
   <style name="Widget.Button.Borderless" parent="Widget.AppCompat.Button.Borderless">
     <item name="android:textColor">?attr/colorTextPrimary</item>
   </style>
@@ -78,6 +80,13 @@
     <item name="android:background">?backgroundMenuItemRounded</item>
   </style>
 
+  <style name="Widget.FullWidthSpinner" parent="">
+    <item name="android:layout_width">match_parent</item>
+    <item name="android:layout_height">wrap_content</item>
+    <item name="android:paddingLeft">0dip</item>
+    <item name="android:paddingRight">0dip</item>
+  </style>
+
   <style name="Widget.CoreSettings.Wrapper" parent="">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
@@ -94,7 +103,7 @@
     <item name="android:layout_marginLeft">56dp</item>
   </style>
 
-  <style name="Widget.CoreSettings.PrimaryItemSwitch" parent="">
+  <style name="Widget.CoreSettings.PrimaryItemSwitch" 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>
@@ -122,13 +131,13 @@
     <item name="android:layout_marginLeft">56dp</item>
   </style>
 
-  <style name="Widget.CoreSettings.EditTextLayout" parent="">
+  <style name="Widget.CoreSettings.EditTextLayout" parent="Widget.RtlConformTextView">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:layout_marginLeft">-4dp</item>
   </style>
 
-  <style name="Widget.CoreSettings.EditText" parent="">
+  <style name="Widget.CoreSettings.EditText" parent="Widget.RtlConformTextView">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:textColor">?colorTextPrimary</item>
@@ -143,7 +152,7 @@
     <item name="android:textColor">?colorTextSecondary</item>
   </style>
 
-  <style name="Widget.CoreSettings.EditTextHeader" parent="">
+  <style name="Widget.CoreSettings.EditTextHeader" parent="Widget.RtlConformTextView">
     <item name="android:layout_width">match_parent</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:paddingBottom">8dp</item>
@@ -165,15 +174,15 @@
     <item name="android:animateLayoutChanges">true</item>
   </style>
 
-  <style name="Widget.Info.Header.Name" parent="">
-    <item name="android:layout_width">match_parent</item>
+  <style name="Widget.Info.Header.Name" parent="Widget.RtlConformTextView">
+    <item name="android:layout_width">wrap_content</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:textAppearance">@style/TextAppearance.AppCompat.Headline</item>
     <item name="android:animateLayoutChanges">true</item>
   </style>
 
-  <style name="Widget.Info.Header.Description" parent="">
-    <item name="android:layout_width">match_parent</item>
+  <style name="Widget.Info.Header.Description" parent="Widget.RtlConformTextView">
+    <item name="android:layout_width">wrap_content</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:textAppearance">@style/TextAppearance.AppCompat.Medium</item>
     <item name="android:animateLayoutChanges">true</item>
@@ -195,8 +204,8 @@
     <item name="android:textStyle">normal</item>
   </style>
 
-  <style name="Widget.Info.Section" parent="">
-    <item name="android:layout_width">match_parent</item>
+  <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>
@@ -221,22 +230,22 @@
     <item name="android:animateLayoutChanges">true</item>
   </style>
 
-  <style name="Widget.Info.Item.Content" parent="">
-    <item name="android:layout_width">match_parent</item>
+  <style name="Widget.Info.Item.Content" parent="Widget.RtlConformTextView">
+    <item name="android:layout_width">wrap_content</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:textColor">?colorTextPrimary</item>
     <item name="android:textSize">16sp</item>
   </style>
 
-  <style name="Widget.Info.Item.Description" parent="">
-    <item name="android:layout_width">match_parent</item>
+  <style name="Widget.Info.Item.Description" parent="Widget.RtlConformTextView">
+    <item name="android:layout_width">wrap_content</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
     <item name="android:textColor">?colorTextSecondary</item>
   </style>
 
-  <style name="Widget.Subhead" parent="">
-    <item name="android:layout_width">match_parent</item>
+  <style name="Widget.Subhead" 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">?listPreferredItemHeightSmall</item>
-- 
GitLab