From 137a6446b744c7a21b31cfc20f814fb8a99ad5fd Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Sat, 30 Sep 2017 02:01:29 +0200
Subject: [PATCH] Fixed Lint issues

---
 app/build.gradle.kts                          |   3 -
 .../persistence/PersistentSession.kt          |   3 +-
 .../persistence/QuasselDatabase.kt            |   2 +-
 .../quasseldroid_ng/ui/chat/ChatActivity.kt   |   6 +-
 .../ui/setup/accounts/AccountAdapter.kt       |   4 +-
 .../setup/accounts/AccountSelectionSlide.kt   |   8 +-
 .../kuschku/quasseldroid_ng/util/Patterns.kt  |  61 +++--
 .../util/helper/LiveDataHelper.kt             |   7 +-
 .../util/helper/ObservableHelper.kt           |   7 +-
 .../util/helper/SharedPreferencesHelper.kt    |   2 +
 .../layout-sw600dp-land/activity_setup.xml    |   4 +-
 .../res/layout-sw600dp-land/setup_slide.xml   |   4 +-
 .../res/layout-sw600dp/activity_setup.xml     |   4 +-
 .../main/res/layout-sw600dp/setup_slide.xml   |   4 +-
 app/src/main/res/layout/activity_main.xml     |   4 +-
 app/src/main/res/layout/activity_setup.xml    |   4 +-
 ...ent_chatlist.xml => content_chat_list.xml} |   0
 ...ent_nicklist.xml => content_nick_list.xml} |   0
 .../main/res/layout/setup_account_edit.xml    | 255 +++++++++---------
 .../res/layout/widget_core_account_add.xml    |  47 ++--
 .../kuschku/libquassel/annotations/Slot.java  |   1 +
 .../libquassel/annotations/Syncable.java      |   1 +
 .../annotations/InvokerProcessor.java         |  12 +-
 .../kuschku/libquassel/protocol/QVariant.kt   |   4 +-
 .../quassel/syncables/AliasManager.kt         |   2 +-
 .../libquassel/quassel/syncables/Network.kt   |  10 +-
 .../libquassel/session/CoreConnection.kt      |   3 +-
 .../libquassel/session/ProtocolHandler.kt     |   1 +
 .../libquassel/session/SessionManager.kt      |   4 +-
 29 files changed, 234 insertions(+), 233 deletions(-)
 rename app/src/main/res/layout/{content_chatlist.xml => content_chat_list.xml} (100%)
 rename app/src/main/res/layout/{content_nicklist.xml => content_nick_list.xml} (100%)

diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 213a32a31..7f60f209e 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -117,9 +117,6 @@ dependencies {
 
   implementation(project(":lib"))
 
-  implementation(project(":invokerannotations"))
-  kapt(project(":invokergenerator"))
-
   testImplementation("android.arch.persistence.room:testing:1.0.0-alpha9")
   testImplementation("junit:junit:4.12")
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/PersistentSession.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/PersistentSession.kt
index 24b824652..8942ef9fe 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/PersistentSession.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/PersistentSession.kt
@@ -22,5 +22,6 @@ class PersistentSession : ISession {
   override val networkConfig: NetworkConfig? = null
 
   override fun close() = Unit
-  override val state = BehaviorSubject.createDefault(ConnectionState.DISCONNECTED)
+  override val state: BehaviorSubject<ConnectionState>
+    = BehaviorSubject.createDefault(ConnectionState.DISCONNECTED)
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselDatabase.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselDatabase.kt
index 3b07cd915..f3a7a825a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselDatabase.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/persistence/QuasselDatabase.kt
@@ -38,7 +38,7 @@ abstract class QuasselDatabase : RoomDatabase() {
   ) {
     class MessageTypeConverters {
       @TypeConverter
-      fun convertInstant(value: Long) = Instant.ofEpochMilli(value)
+      fun convertInstant(value: Long): Instant = Instant.ofEpochMilli(value)
 
       @TypeConverter
       fun convertInstant(value: Instant) = value.toEpochMilli()
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
index b77956e67..1357f85f2 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
@@ -1,6 +1,7 @@
 package de.kuschku.quasseldroid_ng.ui.chat
 
 import android.app.Activity
+import android.arch.lifecycle.LiveData
 import android.arch.lifecycle.Observer
 import android.content.Context
 import android.os.Bundle
@@ -13,6 +14,7 @@ import android.widget.Button
 import android.widget.TextView
 import butterknife.BindView
 import butterknife.ButterKnife
+import de.kuschku.libquassel.quassel.syncables.BufferViewManager
 import de.kuschku.libquassel.session.*
 import de.kuschku.libquassel.util.compatibility.LoggingHandler
 import de.kuschku.libquassel.util.compatibility.LoggingHandler.LogLevel.INFO
@@ -41,10 +43,10 @@ class ChatActivity : ServiceBoundActivity() {
 
   private val handler = AndroidHandlerThread("Chat")
 
-  private val sessionManager = backend.map(Backend::sessionManager)
+  private val sessionManager: LiveData<SessionManager?> = backend.map(Backend::sessionManager)
   private val state = sessionManager.switchMapRx(SessionManager::state)
 
-  private val bufferViewManager
+  private val bufferViewManager: LiveData<BufferViewManager?>
     = sessionManager.switchMapRx(SessionManager::session).map(ISession::bufferViewManager)
   private val bufferViewConfigs = bufferViewManager.switchMapRx { manager ->
     manager.bufferViewConfigIds.map { ids ->
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountAdapter.kt
index dc2a18205..ce4bdbb4e 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountAdapter.kt
@@ -1,5 +1,6 @@
 package de.kuschku.quasseldroid_ng.ui.setup.accounts
 
+import android.annotation.SuppressLint
 import android.arch.paging.PagedListAdapter
 import android.support.v7.recyclerview.extensions.DiffCallback
 import android.support.v7.widget.AppCompatImageButton
@@ -76,7 +77,8 @@ class AccountAdapter :
     selectionListeners.remove(f)
   }
 
-  override fun onBindViewHolder(holder: AccountViewHolder, position: Int) {
+  override fun onBindViewHolder(holder: AccountViewHolder, @SuppressLint(
+    "RecyclerView") position: Int) {
     when (holder) {
       is AccountViewHolder.Item -> {
         val account = getItem(position)
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionSlide.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionSlide.kt
index 7e5718e59..a0198fb1a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionSlide.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/accounts/AccountSelectionSlide.kt
@@ -43,18 +43,18 @@ class AccountSelectionSlide : SlideFragment() {
                                savedInstanceState: Bundle?): View {
     val view = inflater.inflate(R.layout.setup_select_account, container, false)
     ButterKnife.bind(this, view)
-    val accountViewmodel = ViewModelProviders.of(this).get(
+    val accountViewModel = ViewModelProviders.of(this).get(
       AccountViewModel::class.java)
     val firstObserver = object : Observer<PagedList<AccountDatabase.Account>?> {
       override fun onChanged(t: PagedList<AccountDatabase.Account>?) {
         if (t?.isEmpty() != false)
           startActivityForResult(Intent(context, AccountSetupActivity::class.java),
                                  REQUEST_CREATE_FIRST)
-        accountViewmodel.accounts.removeObserver(this)
+        accountViewModel.accounts.removeObserver(this)
       }
     }
-    accountViewmodel.accounts.observe(this, firstObserver)
-    accountViewmodel.accounts.observe(this, Observer(adapter::setList))
+    accountViewModel.accounts.observe(this, firstObserver)
+    accountViewModel.accounts.observe(this, Observer(adapter::setList))
     accountList.layoutManager = LinearLayoutManager(context)
     accountList.itemAnimator = DefaultItemAnimator()
     accountList.adapter = adapter
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/Patterns.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/Patterns.kt
index c4e55304c..4ae713468 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/Patterns.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/Patterns.kt
@@ -1,64 +1,63 @@
 package de.kuschku.quasseldroid_ng.util
 
+import org.intellij.lang.annotations.Language
 import java.util.regex.Pattern
 
 @SuppressWarnings("Access")
 object Patterns {
+  @Language("RegExp")
   const val IPv4
     = "(?:(?:[0-1]?[0-9]?[0-9]|2[0-5][0-5])\\.){3}(?:[0-1]?[0-9]?[0-9]|2[0-5][0-5])"
 
+  @Language("RegExp")
   const val IPv6
-    = "(?:(?:(?:[0-9a-fA-F]{1,4}:){7}(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:[0-9a-fA-F]{1,4}:){1,7}|:):(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:[0-9a-fA-F]{1,4}:){1,6}|:):(?:[0-9a-fA-F]{1,4}:){0,1}(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:[0-9a-fA-F]{1,4}:){1,5}|:):(?:[0-9a-fA-F]{1,4}:){0,2}(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:[0-9a-fA-F]{1,4}:){1,4}|:):(?:[0-9a-fA-F]{1,4}:){0,3}(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:[0-9a-fA-F]{1,4}:){1,3}|:):(?:[0-9a-fA-F]{1,4}:){1,4}(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:[0-9a-fA-F]{1,4}:){1,2}|:):(?:[0-9a-fA-F]{1,4}:){0,5}(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:[0-9a-fA-F]{1,4}:)|:):(?:[0-9a-fA-F]{1,4}:){0,6}(?:[0-9a-fA-F]{1,4})))"
+    = "(?:(?:(?:[0-9a-fA-F]{1,4}:){7}(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:[0-9a-fA-F]{1,4}:){1,7}|:):(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:[0-9a-fA-F]{1,4}:){1,6}|:):(?:[0-9a-fA-F]{1,4}:)?(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:[0-9a-fA-F]{1,4}:){1,5}|:):(?:[0-9a-fA-F]{1,4}:){0,2}(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:[0-9a-fA-F]{1,4}:){1,4}|:):(?:[0-9a-fA-F]{1,4}:){0,3}(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:[0-9a-fA-F]{1,4}:){1,3}|:):(?:[0-9a-fA-F]{1,4}:){1,4}(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:[0-9a-fA-F]{1,4}:){1,2}|:):(?:[0-9a-fA-F]{1,4}:){0,5}(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:[0-9a-fA-F]{1,4}:)|:):(?:[0-9a-fA-F]{1,4}:){0,6}(?:[0-9a-fA-F]{1,4})))"
 
-  const val IP_ADDRESS_STRING = "(?:" + IPv4 + "|" + IPv6 + ")"
+  @Language("RegExp")
+  const val IP_ADDRESS_STRING = """(?:$IPv4|$IPv6)"""
 
-  const val UCS_CHAR = "[" +
-    "\u00A0-\uD7FF" +
-    "\uF900-\uFDCF" +
-    "\uFDF0-\uFFEF" +
-    "\uD800\uDC00-\uD83F\uDFFD" +
-    "\uD840\uDC00-\uD87F\uDFFD" +
-    "\uD880\uDC00-\uD8BF\uDFFD" +
-    "\uD8C0\uDC00-\uD8FF\uDFFD" +
-    "\uD900\uDC00-\uD93F\uDFFD" +
-    "\uD940\uDC00-\uD97F\uDFFD" +
-    "\uD980\uDC00-\uD9BF\uDFFD" +
-    "\uD9C0\uDC00-\uD9FF\uDFFD" +
-    "\uDA00\uDC00-\uDA3F\uDFFD" +
-    "\uDA40\uDC00-\uDA7F\uDFFD" +
-    "\uDA80\uDC00-\uDABF\uDFFD" +
-    "\uDAC0\uDC00-\uDAFF\uDFFD" +
-    "\uDB00\uDC00-\uDB3F\uDFFD" +
-    "\uDB44\uDC00-\uDB7F\uDFFD" +
-    "&&[^\u00A0[\u2000-\u200A]\u2028\u2029\u202F\u3000]" +
-    "]"
+  @Language("RegExp")
+  const val UCS_CHAR
+    = "[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\uD800\uDC00-\uD83F\uDFFD\uD840\uDC00-\uD87F\uDFFD\uD880\uDC00-\uD8BF\uDFFD\uD8C0\uDC00-\uD8FF\uDFFD\uD900\uDC00-\uD93F\uDFFD\uD940\uDC00-\uD97F\uDFFD\uD980\uDC00-\uD9BF\uDFFD\uD9C0\uDC00-\uD9FF\uDFFD\uDA00\uDC00-\uDA3F\uDFFD\uDA40\uDC00-\uDA7F\uDFFD\uDA80\uDC00-\uDABF\uDFFD\uDAC0\uDC00-\uDAFF\uDFFD\uDB00\uDC00-\uDB3F\uDFFD\uDB44\uDC00-\uDB7F\uDFFD&&[^\u00A0[\u2000-\u200A]\u2028\u2029\u202F\u3000]]"
   /**
    * Valid characters for IRI label defined in RFC 3987.
    */
+  @Language("RegExp")
   const val LABEL_CHAR
-    = "a-zA-Z0-9" + UCS_CHAR
+    = """a-zA-Z0-9$UCS_CHAR"""
   /**
    * Valid characters for IRI TLD defined in RFC 3987.
    */
+  @Language("RegExp")
   const val TLD_CHAR
-    = "a-zA-Z" + UCS_CHAR
+    = """a-zA-Z$UCS_CHAR"""
   /**
    * RFC 1035 Section 2.3.4 limits the labels to a maximum 63 octets.
    */
+  @Language("RegExp")
   const val IRI_LABEL
-    = "[" + LABEL_CHAR + "](?:[" + LABEL_CHAR + "_\\-]{0,61}[" + LABEL_CHAR + "]){0,1}"
+    = """[$LABEL_CHAR](?:[${LABEL_CHAR}_\-]{0,61}[$LABEL_CHAR])?"""
   /**
    * RFC 3492 references RFC 1034 and limits Punycode algorithm output to 63 characters.
    */
+  @Language("RegExp")
   const val PUNYCODE_TLD
-    = "xn\\-\\-[\\w\\-]{0,58}\\w"
+    = """xn--[\w\-]{0,58}\w"""
+
+  @Language("RegExp")
   const val TLD
-    = "(?:" + PUNYCODE_TLD + "|" + "[" + TLD_CHAR + "]{2,63}" + ")"
+    = """(?:$PUNYCODE_TLD|[$TLD_CHAR]{2,63})"""
+
+  @Language("RegExp")
   const val HOST_NAME
-    = "(?:" + IRI_LABEL + "\\.)+" + TLD + ".?"
+    = """(?:$IRI_LABEL\.)+$TLD.?"""
+
+  @Language("RegExp")
   const val LOCAL_HOST_NAME
-    = "(?:" + IRI_LABEL + "\\.)*" + IRI_LABEL
+    = """(?:$IRI_LABEL\.)*$IRI_LABEL"""
+
+  @Language("RegExp")
   const val DOMAIN_NAME_STR
-    = "(?:" + LOCAL_HOST_NAME + "|" + HOST_NAME + "|" + IP_ADDRESS_STRING + ")"
-  val DOMAIN_NAME = Pattern.compile(DOMAIN_NAME_STR)
+    = """(?:$LOCAL_HOST_NAME|$HOST_NAME|$IP_ADDRESS_STRING)"""
+  val DOMAIN_NAME: Pattern = Pattern.compile(DOMAIN_NAME_STR)
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/LiveDataHelper.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/LiveDataHelper.kt
index aa95e41c5..ddfdb7875 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/LiveDataHelper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/LiveDataHelper.kt
@@ -2,7 +2,6 @@ package de.kuschku.quasseldroid_ng.util.helper
 
 import android.arch.lifecycle.*
 import android.support.annotation.MainThread
-import de.kuschku.libquassel.util.helpers.toLiveData
 import io.reactivex.BackpressureStrategy
 import io.reactivex.Observable
 
@@ -37,7 +36,7 @@ inline fun <X, Y> LiveData<X?>.switchMap(
 inline fun <X, Y> LiveData<X?>.switchMapRx(
   strategy: BackpressureStrategy,
   noinline func: (X) -> Observable<Y>?
-): LiveData<Y> {
+): LiveData<Y?> {
   val result = MediatorLiveData<Y>()
   result.addSource(this, object : Observer<X?> {
     internal var mSource: LiveData<Y>? = null
@@ -64,7 +63,7 @@ inline fun <X, Y> LiveData<X?>.switchMapRx(
 @MainThread
 inline fun <X, Y> LiveData<X?>.switchMapRx(
   noinline func: (X) -> Observable<Y>?
-): LiveData<Y> = switchMapRx(BackpressureStrategy.LATEST, func)
+): LiveData<Y?> = switchMapRx(BackpressureStrategy.LATEST, func)
 
 @MainThread
 inline fun <X, Y> LiveData<X?>.map(
@@ -113,5 +112,5 @@ inline fun <T> LiveData<T>.observeForeverSticky(observer: Observer<T>) {
   observer.onChanged(value)
 }
 
-inline fun <T> LiveData<T>.toObservable(lifecycleOwner: LifecycleOwner)
+inline fun <T> LiveData<T>.toObservable(lifecycleOwner: LifecycleOwner): Observable<T>
   = Observable.fromPublisher(LiveDataReactiveStreams.toPublisher(lifecycleOwner, this))
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/ObservableHelper.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/ObservableHelper.kt
index 3bb0e08be..839ada07c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/ObservableHelper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/ObservableHelper.kt
@@ -1,9 +1,10 @@
-package de.kuschku.libquassel.util.helpers
+package de.kuschku.quasseldroid_ng.util.helper
 
+import android.arch.lifecycle.LiveData
 import android.arch.lifecycle.LiveDataReactiveStreams
 import io.reactivex.BackpressureStrategy
 import io.reactivex.Observable
 
 inline fun <T> Observable<T>.toLiveData(
-  strategy: BackpressureStrategy = BackpressureStrategy.LATEST)
-  = LiveDataReactiveStreams.fromPublisher(toFlowable(strategy))
+  strategy: BackpressureStrategy = BackpressureStrategy.LATEST
+): LiveData<T> = LiveDataReactiveStreams.fromPublisher(toFlowable(strategy))
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/SharedPreferencesHelper.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/SharedPreferencesHelper.kt
index 86d2c513f..517648920 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/SharedPreferencesHelper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/helper/SharedPreferencesHelper.kt
@@ -1,5 +1,6 @@
 package de.kuschku.quasseldroid_ng.util.helper
 
+import android.annotation.SuppressLint
 import android.content.SharedPreferences
 
 fun SharedPreferences.editApply(f: SharedPreferences.Editor.() -> Unit) {
@@ -8,6 +9,7 @@ fun SharedPreferences.editApply(f: SharedPreferences.Editor.() -> Unit) {
   editor.apply()
 }
 
+@SuppressLint("ApplySharedPref")
 fun SharedPreferences.editCommit(f: SharedPreferences.Editor.() -> Unit) {
   val editor = this.edit()
   editor.f()
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 e9ce90f36..c7fa866b4 100644
--- a/app/src/main/res/layout-sw600dp-land/activity_setup.xml
+++ b/app/src/main/res/layout-sw600dp-land/activity_setup.xml
@@ -1,5 +1,6 @@
 <merge xmlns:android="http://schemas.android.com/apk/res/android"
   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">
 
@@ -19,6 +20,7 @@
     app:backgroundTint="#8A000000"
     app:elevation="0dip"
     app:fabSize="normal"
-    app:pressedTranslationZ="0dip" />
+    app:pressedTranslationZ="0dip"
+    tools:ignore="RtlHardcoded" />
 
 </merge>
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 ec944d207..6e956bb4b 100644
--- a/app/src/main/res/layout-sw600dp-land/setup_slide.xml
+++ b/app/src/main/res/layout-sw600dp-land/setup_slide.xml
@@ -6,7 +6,7 @@
   android:layout_width="match_parent"
   android:layout_height="match_parent">
 
-  <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+  <TextView
     android:id="@+id/title"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
@@ -28,7 +28,7 @@
     android:layout_toLeftOf="@+id/scrollView"
     android:layout_toStartOf="@+id/scrollView" />
 
-  <TextView xmlns:android="http://schemas.android.com/apk/res/android"
+  <TextView
     android:id="@+id/description"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout-sw600dp/activity_setup.xml b/app/src/main/res/layout-sw600dp/activity_setup.xml
index 503ebf7bc..b8b719a14 100644
--- a/app/src/main/res/layout-sw600dp/activity_setup.xml
+++ b/app/src/main/res/layout-sw600dp/activity_setup.xml
@@ -1,5 +1,6 @@
 <merge xmlns:android="http://schemas.android.com/apk/res/android"
   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">
 
@@ -24,7 +25,8 @@
       app:backgroundTint="#8A000000"
       app:elevation="0dip"
       app:fabSize="normal"
-      app:pressedTranslationZ="0dip" />
+      app:pressedTranslationZ="0dip"
+      tools:ignore="RtlHardcoded" />
 
   </FrameLayout>
 
diff --git a/app/src/main/res/layout-sw600dp/setup_slide.xml b/app/src/main/res/layout-sw600dp/setup_slide.xml
index ca3201604..91ec31d81 100644
--- a/app/src/main/res/layout-sw600dp/setup_slide.xml
+++ b/app/src/main/res/layout-sw600dp/setup_slide.xml
@@ -24,9 +24,9 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginBottom="8dp"
-        android:text="Connection"
         android:textSize="28sp"
-        android:theme="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse" />
+        android:theme="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"
+        tools:text="Connection" />
 
       <TextView
         android:id="@+id/description"
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 75511f596..f81b88965 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -87,7 +87,7 @@
 
   </LinearLayout>
 
-  <include layout="@layout/content_nicklist" />
+  <include layout="@layout/content_nick_list" />
 
-  <include layout="@layout/content_chatlist" />
+  <include layout="@layout/content_chat_list" />
 </android.support.v4.widget.DrawerLayout>
diff --git a/app/src/main/res/layout/activity_setup.xml b/app/src/main/res/layout/activity_setup.xml
index 4ded7a441..a0a74dc86 100644
--- a/app/src/main/res/layout/activity_setup.xml
+++ b/app/src/main/res/layout/activity_setup.xml
@@ -1,5 +1,6 @@
 <merge xmlns:android="http://schemas.android.com/apk/res/android"
   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">
 
@@ -16,6 +17,7 @@
     android:layout_marginBottom="16dp"
     android:layout_marginRight="16dp"
     android:tint="#ffffff"
-    app:fabSize="normal" />
+    app:fabSize="normal"
+    tools:ignore="RtlHardcoded" />
 
 </merge>
diff --git a/app/src/main/res/layout/content_chatlist.xml b/app/src/main/res/layout/content_chat_list.xml
similarity index 100%
rename from app/src/main/res/layout/content_chatlist.xml
rename to app/src/main/res/layout/content_chat_list.xml
diff --git a/app/src/main/res/layout/content_nicklist.xml b/app/src/main/res/layout/content_nick_list.xml
similarity index 100%
rename from app/src/main/res/layout/content_nicklist.xml
rename to app/src/main/res/layout/content_nick_list.xml
diff --git a/app/src/main/res/layout/setup_account_edit.xml b/app/src/main/res/layout/setup_account_edit.xml
index c00a9e81d..715e30623 100644
--- a/app/src/main/res/layout/setup_account_edit.xml
+++ b/app/src/main/res/layout/setup_account_edit.xml
@@ -1,178 +1,177 @@
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
   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.support.v4.widget.NestedScrollView
+  <LinearLayout
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <android.support.v4.widget.Space
+      android:layout_width="match_parent"
+      android:layout_height="16dp" />
 
     <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:orientation="vertical">
-
-      <android.support.v4.widget.Space
+      android:paddingLeft="16dp"
+      android:paddingRight="16dp">
+
+      <FrameLayout
+        android:layout_width="56dp"
+        android:layout_height="68dp">
+
+        <ImageView
+          android:layout_width="24dp"
+          android:layout_height="24dp"
+          android:layout_gravity="center_vertical"
+          android:tint="#757575"
+          app:srcCompat="@drawable/ic_pencil"
+          tools:ignore="ContentDescription" />
+      </FrameLayout>
+
+      <android.support.design.widget.TextInputLayout
+        android:id="@+id/nameWrapper"
         android:layout_width="match_parent"
-        android:layout_height="16dp" />
+        android:layout_height="wrap_content"
+        android:hint="@string/labelAccountName"
+        app:errorEnabled="true">
+
+        <android.support.design.widget.TextInputEditText
+          android:id="@+id/name"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          android:inputType="text" />
+      </android.support.design.widget.TextInputLayout>
+    </LinearLayout>
+
+    <android.support.v4.widget.Space
+      android:layout_width="match_parent"
+      android:layout_height="16dp" />
+
+    <LinearLayout
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:paddingLeft="16dp"
+      android:paddingRight="16dp">
+
+      <FrameLayout
+        android:layout_width="56dp"
+        android:layout_height="68dp">
+
+        <ImageView
+          android:layout_width="24dp"
+          android:layout_height="24dp"
+          android:layout_gravity="center_vertical"
+          android:tint="#757575"
+          app:srcCompat="@drawable/ic_server_network"
+          tools:ignore="ContentDescription" />
+      </FrameLayout>
 
       <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:paddingLeft="16dp"
-        android:paddingRight="16dp">
-
-        <FrameLayout
-          android:layout_width="56dp"
-          android:layout_height="68dp">
-
-          <ImageView
-            android:layout_width="24dp"
-            android:layout_height="24dp"
-            android:layout_gravity="center_vertical"
-            android:tint="#757575"
-            app:srcCompat="@drawable/ic_pencil" />
-        </FrameLayout>
+        android:orientation="vertical">
 
         <android.support.design.widget.TextInputLayout
-          android:id="@+id/nameWrapper"
+          android:id="@+id/hostWrapper"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
-          android:hint="@string/labelAccountName"
+          android:hint="@string/labelConnectionHost"
           app:errorEnabled="true">
 
           <android.support.design.widget.TextInputEditText
-            android:id="@+id/name"
+            android:id="@+id/host"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:inputType="text" />
+            android:inputType="textUri" />
         </android.support.design.widget.TextInputLayout>
-      </LinearLayout>
-
-      <android.support.v4.widget.Space
-        android:layout_width="match_parent"
-        android:layout_height="16dp" />
-
-      <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:paddingLeft="16dp"
-        android:paddingRight="16dp">
 
-        <FrameLayout
+        <android.support.v4.widget.Space
           android:layout_width="56dp"
-          android:layout_height="68dp">
-
-          <ImageView
-            android:layout_width="24dp"
-            android:layout_height="24dp"
-            android:layout_gravity="center_vertical"
-            android:tint="#757575"
-            app:srcCompat="@drawable/ic_server_network" />
-        </FrameLayout>
+          android:layout_height="match_parent" />
 
-        <LinearLayout
+        <android.support.design.widget.TextInputLayout
+          android:id="@+id/portWrapper"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
-          android:orientation="vertical">
+          android:hint="@string/labelConnectionPort"
+          app:errorEnabled="true">
 
-          <android.support.design.widget.TextInputLayout
-            android:id="@+id/hostWrapper"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:hint="@string/labelConnectionHost"
-            app:errorEnabled="true">
-
-            <android.support.design.widget.TextInputEditText
-              android:id="@+id/host"
-              android:layout_width="match_parent"
-              android:layout_height="wrap_content"
-              android:inputType="textUri" />
-          </android.support.design.widget.TextInputLayout>
-
-          <android.support.v4.widget.Space
-            android:layout_width="56dp"
-            android:layout_height="match_parent" />
-
-          <android.support.design.widget.TextInputLayout
-            android:id="@+id/portWrapper"
+          <android.support.design.widget.TextInputEditText
+            android:id="@+id/port"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:hint="@string/labelConnectionPort"
-            app:errorEnabled="true">
-
-            <android.support.design.widget.TextInputEditText
-              android:id="@+id/port"
-              android:layout_width="match_parent"
-              android:layout_height="wrap_content"
-              android:inputType="number"
-              android:text="@string/defaultConnectionPort" />
-          </android.support.design.widget.TextInputLayout>
-        </LinearLayout>
+            android:inputType="number"
+            android:text="@string/defaultConnectionPort" />
+        </android.support.design.widget.TextInputLayout>
       </LinearLayout>
+    </LinearLayout>
+
+    <android.support.v4.widget.Space
+      android:layout_width="match_parent"
+      android:layout_height="16dp" />
 
-      <android.support.v4.widget.Space
-        android:layout_width="match_parent"
-        android:layout_height="16dp" />
 
+    <LinearLayout
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:paddingLeft="16dp"
+      android:paddingRight="16dp">
+
+      <FrameLayout
+        android:layout_width="56dp"
+        android:layout_height="68dp">
+
+        <ImageView
+          android:layout_width="24dp"
+          android:layout_height="24dp"
+          android:layout_gravity="center_vertical"
+          android:tint="#757575"
+          app:srcCompat="@drawable/ic_account"
+          tools:ignore="ContentDescription" />
+      </FrameLayout>
 
       <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:paddingLeft="16dp"
-        android:paddingRight="16dp">
+        android:orientation="vertical">
 
-        <FrameLayout
-          android:layout_width="56dp"
-          android:layout_height="68dp">
-
-          <ImageView
-            android:layout_width="24dp"
-            android:layout_height="24dp"
-            android:layout_gravity="center_vertical"
-            android:tint="#757575"
-            app:srcCompat="@drawable/ic_account" />
-        </FrameLayout>
-
-        <LinearLayout
+        <android.support.design.widget.TextInputLayout
+          android:id="@+id/userWrapper"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
-          android:orientation="vertical">
+          android:hint="@string/labelAccountUser">
 
-          <android.support.design.widget.TextInputLayout
-            android:id="@+id/userWrapper"
+          <android.support.design.widget.TextInputEditText
+            android:id="@+id/user"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:hint="@string/labelAccountUser">
-
-            <android.support.design.widget.TextInputEditText
-              android:id="@+id/user"
-              android:layout_width="match_parent"
-              android:layout_height="wrap_content"
-              android:inputType="textVisiblePassword|textNoSuggestions"
-              app:errorEnabled="true" />
-          </android.support.design.widget.TextInputLayout>
-
-          <android.support.design.widget.TextInputLayout
-            android:id="@+id/passWrapper"
+            android:inputType="textVisiblePassword|textNoSuggestions"
+            app:errorEnabled="true" />
+        </android.support.design.widget.TextInputLayout>
+
+        <android.support.design.widget.TextInputLayout
+          android:id="@+id/passWrapper"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          android:hint="@string/labelAccountPass">
+
+          <android.support.design.widget.TextInputEditText
+            android:id="@+id/pass"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:hint="@string/labelAccountPass">
-
-            <android.support.design.widget.TextInputEditText
-              android:id="@+id/pass"
-              android:layout_width="match_parent"
-              android:layout_height="wrap_content"
-              android:inputType="textPassword"
-              app:errorEnabled="true" />
-          </android.support.design.widget.TextInputLayout>
+            android:inputType="textPassword"
+            app:errorEnabled="true" />
+        </android.support.design.widget.TextInputLayout>
 
-        </LinearLayout>
       </LinearLayout>
-
-      <android.support.v4.widget.Space
-        android:layout_width="match_parent"
-        android:layout_height="16dp" />
     </LinearLayout>
-  </android.support.v4.widget.NestedScrollView>
-</FrameLayout>
+
+    <android.support.v4.widget.Space
+      android:layout_width="match_parent"
+      android:layout_height="16dp" />
+  </LinearLayout>
+</android.support.v4.widget.NestedScrollView>
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 5f8054a21..f6c839109 100644
--- a/app/src/main/res/layout/widget_core_account_add.xml
+++ b/app/src/main/res/layout/widget_core_account_add.xml
@@ -1,5 +1,6 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
+  xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="72dp"
   android:background="?attr/selectableItemBackground"
@@ -10,36 +11,26 @@
   android:paddingLeft="16dp"
   android:paddingRight="16dp">
 
-  <LinearLayout
-    android:layout_width="48dp"
-    android:layout_height="match_parent">
+  <ImageView
+    android:layout_width="32dp"
+    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" />
 
-    <ImageView
-      android:layout_width="32dp"
-      android:layout_height="32dp"
-      android:layout_gravity="center_vertical"
-      android:tint="#727272"
-      app:srcCompat="@drawable/ic_add" />
-
-  </LinearLayout>
-
-  <LinearLayout
+  <TextView
+    android:id="@+id/account_name"
     android:layout_width="0dip"
-    android:layout_height="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center_vertical|start"
     android:layout_margin="8dp"
     android:layout_weight="1"
-    android:gravity="center_vertical|start"
-    android:orientation="vertical">
-
-    <TextView
-      android:id="@+id/account_name"
-      android:layout_width="match_parent"
-      android:layout_height="wrap_content"
-      android:fontFamily="sans-serif-medium"
-      android:gravity="center_vertical|start"
-      android:lines="1"
-      android:singleLine="true"
-      android:text="New Account"
-      android:textSize="14sp" />
-  </LinearLayout>
+    android:fontFamily="sans-serif-medium"
+    android:lines="1"
+    android:singleLine="true"
+    android:text="New Account"
+    android:textSize="14sp" />
 </LinearLayout>
diff --git a/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Slot.java b/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Slot.java
index 93cdaf5d3..e09a0bc39 100644
--- a/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Slot.java
+++ b/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Slot.java
@@ -5,6 +5,7 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+@SuppressWarnings("WeakerAccess")
 @Retention(RetentionPolicy.SOURCE)
 @Target(value = ElementType.METHOD)
 public @interface Slot {
diff --git a/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Syncable.java b/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Syncable.java
index 46a4dd822..77367a296 100644
--- a/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Syncable.java
+++ b/invokerannotations/src/main/java/de/kuschku/libquassel/annotations/Syncable.java
@@ -5,6 +5,7 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+@SuppressWarnings("WeakerAccess")
 @Retention(RetentionPolicy.RUNTIME)
 @Target(value = ElementType.TYPE)
 public @interface Syncable {
diff --git a/invokergenerator/src/main/java/de/kuschku/libquassel/annotations/InvokerProcessor.java b/invokergenerator/src/main/java/de/kuschku/libquassel/annotations/InvokerProcessor.java
index 2bcff1b55..133a67143 100644
--- a/invokergenerator/src/main/java/de/kuschku/libquassel/annotations/InvokerProcessor.java
+++ b/invokergenerator/src/main/java/de/kuschku/libquassel/annotations/InvokerProcessor.java
@@ -17,7 +17,6 @@ import java.util.Set;
 
 import javax.annotation.processing.AbstractProcessor;
 import javax.annotation.processing.Filer;
-import javax.annotation.processing.Messager;
 import javax.annotation.processing.ProcessingEnvironment;
 import javax.annotation.processing.Processor;
 import javax.annotation.processing.RoundEnvironment;
@@ -33,18 +32,17 @@ import javax.lang.model.element.TypeElement;
 import javax.lang.model.type.ExecutableType;
 import javax.lang.model.type.TypeMirror;
 
+@SuppressWarnings("WeakerAccess")
 @AutoService(Processor.class)
 @SupportedAnnotationTypes("de.kuschku.libquassel.annotations.Syncable")
 @SupportedSourceVersion(SourceVersion.RELEASE_8)
 public class InvokerProcessor extends AbstractProcessor {
 
     private Filer filer;
-    private Messager messager;
 
     @Override
     public synchronized void init(ProcessingEnvironment processingEnv) {
         filer = processingEnv.getFiler();
-        messager = processingEnv.getMessager();
     }
 
     @Override
@@ -224,12 +222,12 @@ public class InvokerProcessor extends AbstractProcessor {
     }
 
     private class SyncableElement {
-        PackageElement packageElement;
-        TypeElement typeElement;
+        final PackageElement packageElement;
+        final TypeElement typeElement;
 
-        Syncable annotation;
+        final Syncable annotation;
 
-        List<SlotElement> slots;
+        final List<SlotElement> slots;
 
         public SyncableElement(PackageElement packageElement, TypeElement typeElement, Syncable annotation, List<SlotElement> slots) {
             this.packageElement = packageElement;
diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/QVariant.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/QVariant.kt
index 4294fff6f..db7dbdca9 100644
--- a/lib/src/main/java/de/kuschku/libquassel/protocol/QVariant.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/protocol/QVariant.kt
@@ -36,10 +36,10 @@ fun <U> QVariant_?.value(): U?
   = this?._value<U?>(null)
 
 fun <U> QVariant_?.value(defValue: U): U
-  = this?._value<U>(defValue) ?: defValue
+  = this?._value(defValue) ?: defValue
 
 fun <U> QVariant_?.valueOr(f: () -> U): U
-  = this?._valueOr<U>(f) ?: f()
+  = this?._valueOr(f) ?: f()
 
 fun <U> QVariant_?.valueOrThrow(e: Throwable = NullPointerException()): U
   = this?._valueOrThrow<U>(e) ?: throw e
diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt
index ab0b657ef..1ee3e1616 100644
--- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt
@@ -54,7 +54,7 @@ class AliasManager constructor(
 
   fun contains(name: String) = _aliases.map(Alias::name).contains(name)
 
-  fun defaults() = listOf<Alias>(
+  fun defaults() = listOf(
     Alias("j", "/join $0"),
     Alias("ns", "/msg nickserv $0"),
     Alias("nickserv", "/msg nickserv $0"),
diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt
index dbd5d8bca..ae5584314 100644
--- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt
@@ -68,13 +68,13 @@ class Network constructor(
     = prefixModes().elementAtOrNull(prefixes().indexOf(prefix))
 
   fun prefixesToModes(prefixes: String): String
-    = prefixes.toCharArray().map(this::prefixToMode).filterNotNull().joinToString()
+    = prefixes.mapNotNull(this::prefixToMode).joinToString()
 
   fun modeToPrefix(mode: Char): Char?
     = prefixes().elementAtOrNull(prefixModes().indexOf(mode))
 
   fun modesToPrefixes(modes: String): String
-    = modes.toCharArray().map(this::modeToPrefix).filterNotNull().joinToString()
+    = modes.mapNotNull(this::modeToPrefix).joinToString()
 
   fun channelModeType(mode: Char): ChannelModeType {
     if (_channelModes == null)
@@ -357,9 +357,9 @@ class Network constructor(
   fun ircChannel(channelName: String) = _ircChannels[channelName]
   fun ircChannels() = _ircChannels.values.toList()
   fun ircChanenlCount(): UInt = _ircChannels.size
-  fun codecForServer() = _codecForServer.name()
-  fun codecForEncoding() = _codecForEncoding.name()
-  fun codecForDecoding() = _codecForDecoding.name()
+  fun codecForServer(): String = _codecForServer.name()
+  fun codecForEncoding(): String = _codecForEncoding.name()
+  fun codecForDecoding(): String = _codecForDecoding.name()
   fun setCodecForDecoding(codec: Charset) {
     _codecForDecoding = codec
     super.setCodecForDecoding(Charsets.ISO_8859_1.encode(codecForDecoding()))
diff --git a/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt b/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt
index 6ca61a867..968896ea4 100644
--- a/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt
@@ -43,7 +43,8 @@ class CoreConnection(
   private val sizeBuffer = ByteBuffer.allocateDirect(4)
   private val chainedBuffer = ChainedByteBuffer(direct = true)
 
-  val state = BehaviorSubject.createDefault(ConnectionState.DISCONNECTED)
+  val state: BehaviorSubject<ConnectionState> = BehaviorSubject.createDefault(
+    ConnectionState.DISCONNECTED)
 
   private var channel: WrappedChannel? = null
 
diff --git a/lib/src/main/java/de/kuschku/libquassel/session/ProtocolHandler.kt b/lib/src/main/java/de/kuschku/libquassel/session/ProtocolHandler.kt
index d86c73a3b..c3fe644c6 100644
--- a/lib/src/main/java/de/kuschku/libquassel/session/ProtocolHandler.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/session/ProtocolHandler.kt
@@ -13,6 +13,7 @@ import de.kuschku.libquassel.util.compatibility.log
 import org.threeten.bp.Instant
 import java.io.Closeable
 
+@Suppress("LeakingThis")
 abstract class ProtocolHandler : SignalProxy, AuthHandler, Closeable {
   private val objectStorage: ObjectStorage = ObjectStorage(this)
   private val rpcHandler: RpcHandler = RpcHandler(this)
diff --git a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt
index 935c503d7..5f56985d3 100644
--- a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt
@@ -73,8 +73,8 @@ class SessionManager(
   }
 
   private var inProgressSession = BehaviorSubject.createDefault(offlineSession)
-  override val state = inProgressSession.switchMap { it.state }
-  val session = state.map { connectionState ->
+  override val state: Observable<ConnectionState> = inProgressSession.switchMap { it.state }
+  val session: Observable<ISession> = state.map { connectionState ->
     if (connectionState == ConnectionState.CONNECTED)
       inProgressSession.value
     else
-- 
GitLab