From fe5b929c20bf7158d3a1bbb8e68ae57953409d4c Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Sun, 15 Apr 2018 18:03:26 +0200
Subject: [PATCH] Further cleaned up code

---
 .../quasseldroid/service/AsyncBackend.kt      | 47 ++++++++++++++++
 .../quasseldroid/service/QuasselBinder.kt     |  6 ++
 .../quasseldroid/service/QuasselService.kt    | 55 ++++++-------------
 .../quasseldroid/ui/chat/ChatActivity.kt      | 26 ++++++++-
 .../quasseldroid/ui/chat/ToolbarFragment.kt   | 13 ++---
 .../chat/info/channel/ChannelInfoActivity.kt  | 22 +++++++-
 .../chat/info/channel/ChannelInfoFragment.kt  |  5 +-
 .../ui/chat/info/user/UserInfoActivity.kt     | 35 +++++++++++-
 .../ui/chat/info/user/UserInfoFragment.kt     | 13 +----
 .../ui/chat/messages/MessageListFragment.kt   |  5 +-
 .../ui/chat/nicks/NickListFragment.kt         | 24 ++++----
 .../ui/chat/topic/TopicActivity.kt            | 19 ++++++-
 .../about/AboutSettingsActivity.kt            |  9 ++-
 .../ui/clientsettings/about/LibraryAdapter.kt | 10 ++--
 .../clientsettings/app/AppSettingsActivity.kt | 12 +++-
 .../crash/CrashSettingsActivity.kt            |  9 ++-
 .../license/LicenseSettingsActivity.kt        | 22 +++++++-
 .../ui/coresettings/CoreSettingsActivity.kt   |  9 ++-
 .../ui/coresettings/CoreSettingsFragment.kt   | 13 ++---
 .../coresettings/chatlist/ChatListActivity.kt | 18 +++++-
 .../coresettings/identity/IdentityActivity.kt | 19 ++++++-
 .../ignoreitem/IgnoreItemActivity.kt          | 21 ++++++-
 .../ignorelist/IgnoreListActivity.kt          |  9 ++-
 .../ignorelist/IgnoreListFragment.kt          |  7 +--
 .../networkconfig/NetworkConfigActivity.kt    |  9 ++-
 .../accounts/edit/AccountEditActivity.kt      | 15 +++++
 .../selection/AccountSelectionActivity.kt     |  4 ++
 .../selection/AccountSelectionSlide.kt        |  8 +--
 .../accounts/setup/AccountSetupActivity.kt    |  7 +++
 .../util/QuasseldroidNotificationManager.kt   | 20 ++++---
 .../util/service/BackendServiceConnection.kt  | 11 ++--
 .../util/service/ServiceBoundActivity.kt      |  4 +-
 32 files changed, 370 insertions(+), 136 deletions(-)
 create mode 100644 app/src/main/java/de/kuschku/quasseldroid/service/AsyncBackend.kt
 create mode 100644 app/src/main/java/de/kuschku/quasseldroid/service/QuasselBinder.kt

diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/AsyncBackend.kt b/app/src/main/java/de/kuschku/quasseldroid/service/AsyncBackend.kt
new file mode 100644
index 000000000..c14d45288
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/AsyncBackend.kt
@@ -0,0 +1,47 @@
+package de.kuschku.quasseldroid.service
+
+import de.kuschku.libquassel.session.Backend
+import de.kuschku.libquassel.session.SocketAddress
+import de.kuschku.libquassel.util.compatibility.HandlerService
+
+class AsyncBackend(
+  private val handler: HandlerService,
+  private val backend: Backend,
+  private val disconnectCallback: () -> Unit
+) : Backend {
+  override fun updateUserDataAndLogin(user: String, pass: String) {
+    handler.backend {
+      backend.updateUserDataAndLogin(user, pass)
+    }
+  }
+
+  override fun connectUnlessConnected(address: SocketAddress, user: String, pass: String,
+                                      reconnect: Boolean) {
+    handler.backend {
+      backend.connectUnlessConnected(address, user, pass, reconnect)
+    }
+  }
+
+  override fun connect(address: SocketAddress, user: String, pass: String, reconnect: Boolean) {
+    handler.backend {
+      backend.connect(address, user, pass, reconnect)
+    }
+  }
+
+  override fun reconnect() {
+    handler.backend {
+      backend.reconnect()
+    }
+  }
+
+  override fun disconnect(forever: Boolean) {
+    handler.backend {
+      backend.disconnect(forever)
+      if (forever) {
+        disconnectCallback
+      }
+    }
+  }
+
+  override fun sessionManager() = backend.sessionManager()
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselBinder.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselBinder.kt
new file mode 100644
index 000000000..ce82ee702
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselBinder.kt
@@ -0,0 +1,6 @@
+package de.kuschku.quasseldroid.service
+
+import android.os.Binder
+import de.kuschku.libquassel.session.Backend
+
+class QuasselBinder(val backend: Backend) : Binder()
diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
index a85ad2860..f309458b0 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt
@@ -4,7 +4,6 @@ import android.annotation.SuppressLint
 import android.arch.lifecycle.Observer
 import android.content.*
 import android.net.ConnectivityManager
-import android.os.Binder
 import de.kuschku.libquassel.protocol.ClientData
 import de.kuschku.libquassel.protocol.Protocol
 import de.kuschku.libquassel.protocol.Protocol_Feature
@@ -206,43 +205,7 @@ class QuasselService : DaggerLifecycleService(),
 
   private val handlerService = AndroidHandlerService()
 
-  private val asyncBackend = object : Backend {
-    override fun updateUserDataAndLogin(user: String, pass: String) {
-      handlerService.backend {
-        backendImplementation.updateUserDataAndLogin(user, pass)
-      }
-    }
-
-    override fun connectUnlessConnected(address: SocketAddress, user: String, pass: String,
-                                        reconnect: Boolean) {
-      handlerService.backend {
-        backendImplementation.connectUnlessConnected(address, user, pass, reconnect)
-      }
-    }
-
-    override fun connect(address: SocketAddress, user: String, pass: String, reconnect: Boolean) {
-      handlerService.backend {
-        backendImplementation.connect(address, user, pass, reconnect)
-      }
-    }
-
-    override fun reconnect() {
-      handlerService.backend {
-        backendImplementation.reconnect()
-      }
-    }
-
-    override fun disconnect(forever: Boolean) {
-      handlerService.backend {
-        backendImplementation.disconnect(forever)
-        if (forever) {
-          stopSelf()
-        }
-      }
-    }
-
-    override fun sessionManager() = backendImplementation.sessionManager()
-  }
+  private val asyncBackend = AsyncBackend(handlerService, backendImplementation, ::stopSelf)
 
   @Inject
   lateinit var database: QuasselDatabase
@@ -350,5 +313,19 @@ class QuasselService : DaggerLifecycleService(),
     return QuasselBinder(asyncBackend)
   }
 
-  class QuasselBinder(val backend: Backend) : Binder()
+  companion object {
+    fun launch(
+      context: Context,
+      disconnect: Boolean? = null
+    ) = context.startService(intent(context, disconnect))
+
+    fun intent(
+      context: Context,
+      disconnect: Boolean? = null
+    ) = Intent(context, QuasselService::class.java).apply {
+      if (disconnect != null) {
+        putExtra("disconnect", disconnect)
+      }
+    }
+  }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
index 67b2adf82..d6ca32c1c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
@@ -406,11 +406,11 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       true
     }
     R.id.action_core_settings   -> {
-      startActivity(Intent(this, CoreSettingsActivity::class.java))
+      CoreSettingsActivity.launch(this)
       true
     }
     R.id.action_client_settings -> {
-      startActivity(Intent(this, AppSettingsActivity::class.java))
+      AppSettingsActivity.launch(this)
       true
     }
     R.id.action_disconnect      -> {
@@ -439,4 +439,26 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       putBoolean(Keys.Status.reconnect, false)
     }
   }
+
+  companion object {
+    fun launch(
+      context: Context,
+      sharedText: CharSequence? = null,
+      bufferId: Int? = null
+    ) = context.startActivity(intent(context, sharedText, bufferId))
+
+    fun intent(
+      context: Context,
+      sharedText: CharSequence? = null,
+      bufferId: Int? = null
+    ) = Intent(context, ChatActivity::class.java).apply {
+      if (sharedText != null) {
+        type = "text/plain"
+        putExtra(Intent.EXTRA_TEXT, sharedText)
+      }
+      if (bufferId != null) {
+        putExtra("bufferId", bufferId)
+      }
+    }
+  }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt
index 68e1d88b3..845049650 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt
@@ -1,7 +1,6 @@
 package de.kuschku.quasseldroid.ui.chat
 
 import android.arch.lifecycle.Observer
-import android.content.Intent
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
@@ -100,16 +99,12 @@ class ToolbarFragment : ServiceBoundFragment() {
       viewModel.bufferData.value?.info?.let { info ->
         when (info.type.toInt()) {
           BufferInfo.Type.QueryBuffer.toInt()   -> {
-            val intent = Intent(requireContext(), UserInfoActivity::class.java)
-            intent.putExtra("bufferId", info.bufferId)
-            intent.putExtra("openBuffer", true)
-            startActivity(intent)
+            UserInfoActivity.launch(requireContext(), bufferId = info.bufferId, openBuffer = true)
           }
           BufferInfo.Type.ChannelBuffer.toInt() -> {
-            val intent = Intent(requireContext(), ChannelInfoActivity::class.java)
-            intent.putExtra("bufferId", info.bufferId)
-            intent.putExtra("openBuffer", true)
-            startActivity(intent)
+            ChannelInfoActivity.launch(requireContext(),
+                                       bufferId = info.bufferId,
+                                       openBuffer = true)
           }
           else                                  -> null
         }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoActivity.kt
index c64c7f762..8904d4ae1 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoActivity.kt
@@ -1,5 +1,25 @@
 package de.kuschku.quasseldroid.ui.chat.info.channel
 
+import android.content.Context
+import android.content.Intent
 import de.kuschku.quasseldroid.util.ui.SettingsActivity
 
-class ChannelInfoActivity : SettingsActivity(ChannelInfoFragment())
+class ChannelInfoActivity : SettingsActivity(ChannelInfoFragment()) {
+  companion object {
+    fun launch(
+      context: Context,
+      openBuffer: Boolean,
+      bufferId: Int
+    ) = context.startActivity(intent(context, openBuffer, bufferId))
+
+    fun intent(
+      context: Context,
+      openBuffer: Boolean,
+      bufferId: Int
+    ) = Intent(context, ChannelInfoActivity::class.java).apply {
+      putExtra("bufferId", bufferId)
+      putExtra("openBuffer", openBuffer)
+    }
+  }
+}
+
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt
index 26c968fe7..87b4a5f35 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt
@@ -1,7 +1,6 @@
 package de.kuschku.quasseldroid.ui.chat.info.channel
 
 import android.arch.lifecycle.Observer
-import android.content.Intent
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
@@ -74,9 +73,7 @@ class ChannelInfoFragment : ServiceBoundFragment() {
         topic.text = contentFormatter.format(requireContext(), channel.topic())
 
         actionEditTopic.setOnClickListener {
-          val intent = Intent(requireContext(), TopicActivity::class.java)
-          intent.putExtra("buffer", arguments?.getInt("bufferId") ?: -1)
-          startActivity(intent)
+          TopicActivity.launch(requireContext(), buffer = arguments?.getInt("bufferId") ?: -1)
         }
 
         actionPart.setOnClickListener {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoActivity.kt
index 3cc0d54c0..d26e2b3c9 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoActivity.kt
@@ -1,5 +1,38 @@
 package de.kuschku.quasseldroid.ui.chat.info.user
 
+import android.content.Context
+import android.content.Intent
+import de.kuschku.libquassel.protocol.BufferId
+import de.kuschku.libquassel.protocol.NetworkId
 import de.kuschku.quasseldroid.util.ui.SettingsActivity
 
-class UserInfoActivity : SettingsActivity(UserInfoFragment())
+class UserInfoActivity : SettingsActivity(UserInfoFragment()) {
+  companion object {
+    fun launch(
+      context: Context,
+      openBuffer: Boolean,
+      bufferId: BufferId? = null,
+      nick: String? = null,
+      networkId: NetworkId? = null
+    ) = context.startActivity(intent(context, openBuffer, bufferId, nick, networkId))
+
+    fun intent(
+      context: Context,
+      openBuffer: Boolean,
+      bufferId: BufferId? = null,
+      nick: String? = null,
+      networkId: NetworkId? = null
+    ) = Intent(context, UserInfoActivity::class.java).apply {
+      putExtra("openBuffer", openBuffer)
+      if (bufferId != null) {
+        putExtra("bufferId", bufferId)
+      }
+      if (nick != null) {
+        putExtra("nick", nick)
+      }
+      if (networkId != null) {
+        putExtra("networkId", networkId)
+      }
+    }
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt
index 72622dfac..9bc92d710 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt
@@ -1,7 +1,6 @@
 package de.kuschku.quasseldroid.ui.chat.info.user
 
 import android.arch.lifecycle.Observer
-import android.content.Intent
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
@@ -162,10 +161,8 @@ class UserInfoFragment : ServiceBoundFragment() {
                 type = Buffer_Type.of(Buffer_Type.QueryBuffer)
               )
 
-              val intent = Intent(requireContext(), ChatActivity::class.java)
               if (info != null) {
-                intent.putExtra("bufferId", info.bufferId)
-                startActivity(intent)
+                ChatActivity.launch(requireContext(), bufferId = info.bufferId)
               } else {
                 viewModel.allBuffers.map {
                   listOfNotNull(it.find {
@@ -175,8 +172,7 @@ class UserInfoFragment : ServiceBoundFragment() {
                   it.isNotEmpty()
                 }.firstElement().toLiveData().observe(this, Observer {
                   it?.firstOrNull()?.let { info ->
-                    intent.putExtra("bufferId", info.bufferId)
-                    startActivity(intent)
+                    ChatActivity.launch(requireContext(), bufferId = info.bufferId)
                   }
                 })
 
@@ -209,10 +205,7 @@ class UserInfoFragment : ServiceBoundFragment() {
         }
 
         actionMention.setOnClickListener {
-          val intent = Intent(requireContext(), ChatActivity::class.java)
-          intent.type = "text/plain"
-          intent.putExtra(Intent.EXTRA_TEXT, "${user.nick()}: ")
-          startActivity(intent)
+          ChatActivity.launch(requireContext(), sharedText = "${user.nick()}: ")
         }
         actionMention.visibleIf(arguments?.getBoolean("openBuffer") == false)
       }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
index c30714fa1..f4c95212b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
@@ -200,10 +200,7 @@ class MessageListFragment : ServiceBoundFragment() {
     }
     if (autoCompleteSettings.senderDoubleClick)
       adapter.setOnDoubleClickListener { msg ->
-        val intent = Intent(requireContext(), ChatActivity::class.java)
-        intent.type = "text/plain"
-        intent.putExtra(Intent.EXTRA_TEXT, "${HostmaskHelper.nick(msg.sender)}: ")
-        startActivity(intent)
+        ChatActivity.launch(requireContext(), sharedText = "${HostmaskHelper.nick(msg.sender)}: ")
       }
     adapter.setOnUrlLongClickListener(LinkLongClickMenuHelper())
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt
index 7c9511592..3bfae2fa0 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt
@@ -1,7 +1,6 @@
 package de.kuschku.quasseldroid.ui.chat.nicks
 
 import android.arch.lifecycle.Observer
-import android.content.Intent
 import android.graphics.Typeface
 import android.os.Bundle
 import android.support.v7.widget.DefaultItemAnimator
@@ -157,18 +156,17 @@ class NickListFragment : ServiceBoundFragment() {
   private val clickListener: ((String) -> Unit)? = { nick ->
     viewModel.session.value?.orNull()?.bufferSyncer?.let { bufferSyncer ->
       viewModel.bufferData.value?.info?.let(BufferInfo::networkId)?.let { networkId ->
-        val intent = Intent(requireContext(), UserInfoActivity::class.java)
-        bufferSyncer.find(
-          bufferName = nick,
-          networkId = networkId,
-          type = Buffer_Type.of(Buffer_Type.QueryBuffer)
-        )?.let {
-          intent.putExtra("bufferId", it.bufferId)
-        }
-        intent.putExtra("nick", nick)
-        intent.putExtra("networkId", networkId)
-        intent.putExtra("openBuffer", false)
-        startActivity(intent)
+        UserInfoActivity.launch(
+          requireContext(),
+          openBuffer = false,
+          bufferId = bufferSyncer.find(
+            bufferName = nick,
+            networkId = networkId,
+            type = Buffer_Type.of(Buffer_Type.QueryBuffer)
+          )?.let(BufferInfo::bufferId),
+          nick = nick,
+          networkId = networkId
+        )
       }
     }
   }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicActivity.kt
index 83fb366f0..7d3c08cd8 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicActivity.kt
@@ -1,5 +1,22 @@
 package de.kuschku.quasseldroid.ui.chat.topic
 
+import android.content.Context
+import android.content.Intent
 import de.kuschku.quasseldroid.util.ui.SettingsActivity
 
-class TopicActivity : SettingsActivity(TopicFragment())
+class TopicActivity : SettingsActivity(TopicFragment()) {
+  companion object {
+    fun launch(
+      context: Context,
+      buffer: Int
+    ) = context.startActivity(intent(context, buffer))
+
+    fun intent(
+      context: Context,
+      buffer: Int
+    ) = Intent(context, TopicActivity::class.java).apply {
+      putExtra("buffer", buffer)
+    }
+  }
+}
+
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/about/AboutSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/about/AboutSettingsActivity.kt
index 8997104a5..c13a3762c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/about/AboutSettingsActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/about/AboutSettingsActivity.kt
@@ -1,5 +1,12 @@
 package de.kuschku.quasseldroid.ui.clientsettings.about
 
+import android.content.Context
+import android.content.Intent
 import de.kuschku.quasseldroid.util.ui.SettingsActivity
 
-class AboutSettingsActivity : SettingsActivity(AboutSettingsFragment())
\ No newline at end of file
+class AboutSettingsActivity : SettingsActivity(AboutSettingsFragment()) {
+  companion object {
+    fun launch(context: Context) = context.startActivity(intent(context))
+    fun intent(context: Context) = Intent(context, AboutSettingsActivity::class.java)
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/about/LibraryAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/about/LibraryAdapter.kt
index 6cc525cf0..28c092fc8 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/about/LibraryAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/about/LibraryAdapter.kt
@@ -1,6 +1,5 @@
 package de.kuschku.quasseldroid.ui.clientsettings.about
 
-import android.content.Intent
 import android.support.v7.widget.RecyclerView
 import android.view.LayoutInflater
 import android.view.View
@@ -40,10 +39,9 @@ class LibraryAdapter(private val libraries: List<Library>) :
       ButterKnife.bind(this, itemView)
       itemView.setOnClickListener {
         this.item?.run {
-          val intent = Intent(itemView.context, LicenseSettingsActivity::class.java)
-          intent.putExtra("license_name", license.fullName)
-          intent.putExtra("license_text", license.text)
-          itemView.context.startActivity(intent)
+          LicenseSettingsActivity.launch(itemView.context,
+                                         license_name = license.fullName,
+                                         license_text = license.text)
         }
       }
     }
@@ -56,4 +54,4 @@ class LibraryAdapter(private val libraries: List<Library>) :
       this.license.text = item.license.shortName
     }
   }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/app/AppSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/app/AppSettingsActivity.kt
index 5bb8ffefa..36831b076 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/app/AppSettingsActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/app/AppSettingsActivity.kt
@@ -1,5 +1,6 @@
 package de.kuschku.quasseldroid.ui.clientsettings.app
 
+import android.content.Context
 import android.content.Intent
 import android.view.Menu
 import android.view.MenuItem
@@ -16,13 +17,18 @@ class AppSettingsActivity : SettingsActivity(AppSettingsFragment()) {
 
   override fun onOptionsItemSelected(item: MenuItem?) = when (item?.itemId) {
     R.id.action_about   -> {
-      startActivity(Intent(applicationContext, AboutSettingsActivity::class.java))
+      AboutSettingsActivity.launch(this)
       true
     }
     R.id.action_crashes -> {
-      startActivity(Intent(applicationContext, CrashSettingsActivity::class.java))
+      CrashSettingsActivity.launch(this)
       true
     }
     else                -> super.onOptionsItemSelected(item)
   }
-}
\ No newline at end of file
+
+  companion object {
+    fun launch(context: Context) = context.startActivity(intent(context))
+    fun intent(context: Context) = Intent(context, AppSettingsActivity::class.java)
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashSettingsActivity.kt
index 4a2be941a..6a17c61cc 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashSettingsActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/crash/CrashSettingsActivity.kt
@@ -1,5 +1,12 @@
 package de.kuschku.quasseldroid.ui.clientsettings.crash
 
+import android.content.Context
+import android.content.Intent
 import de.kuschku.quasseldroid.util.ui.SettingsActivity
 
-class CrashSettingsActivity : SettingsActivity(CrashSettingsFragment())
\ No newline at end of file
+class CrashSettingsActivity : SettingsActivity(CrashSettingsFragment()) {
+  companion object {
+    fun launch(context: Context) = context.startActivity(intent(context))
+    fun intent(context: Context) = Intent(context, CrashSettingsActivity::class.java)
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/license/LicenseSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/license/LicenseSettingsActivity.kt
index 79630f680..8b4d4b604 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/license/LicenseSettingsActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/clientsettings/license/LicenseSettingsActivity.kt
@@ -1,5 +1,25 @@
 package de.kuschku.quasseldroid.ui.clientsettings.license
 
+import android.content.Context
+import android.content.Intent
+import android.support.annotation.StringRes
 import de.kuschku.quasseldroid.util.ui.SettingsActivity
 
-class LicenseSettingsActivity : SettingsActivity(LicenseSettingsFragment())
\ No newline at end of file
+class LicenseSettingsActivity : SettingsActivity(LicenseSettingsFragment()) {
+  companion object {
+    fun launch(
+      context: Context,
+      license_name: String,
+      @StringRes license_text: Int
+    ) = context.startActivity(intent(context, license_name, license_text))
+
+    fun intent(
+      context: Context,
+      license_name: String,
+      @StringRes license_text: Int
+    ) = Intent(context, LicenseSettingsActivity::class.java).apply {
+      putExtra("license_name", license_name)
+      putExtra("license_text", license_text)
+    }
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsActivity.kt
index 09f567bbb..e45c52096 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsActivity.kt
@@ -1,5 +1,12 @@
 package de.kuschku.quasseldroid.ui.coresettings
 
+import android.content.Context
+import android.content.Intent
 import de.kuschku.quasseldroid.util.ui.SettingsActivity
 
-class CoreSettingsActivity : SettingsActivity(CoreSettingsFragment())
\ No newline at end of file
+class CoreSettingsActivity : SettingsActivity(CoreSettingsFragment()) {
+  companion object {
+    fun launch(context: Context) = context.startActivity(intent(context))
+    fun intent(context: Context) = Intent(context, CoreSettingsActivity::class.java)
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsFragment.kt
index 27f54e693..8a800c24d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsFragment.kt
@@ -1,7 +1,6 @@
 package de.kuschku.quasseldroid.ui.coresettings
 
 import android.arch.lifecycle.Observer
-import android.content.Intent
 import android.os.Bundle
 import android.support.v4.view.ViewCompat
 import android.support.v7.widget.DividerItemDecoration
@@ -60,15 +59,11 @@ class CoreSettingsFragment : ServiceBoundFragment() {
     }
 
     val identityAdapter = SettingsItemAdapter {
-      val intent = Intent(requireContext(), IdentityActivity::class.java)
-      intent.putExtra("identity", it)
-      startActivity(intent)
+      IdentityActivity.launch(requireContext(), identity = it)
     }
 
     val chatListAdapter = SettingsItemAdapter {
-      val intent = Intent(requireContext(), ChatListActivity::class.java)
-      intent.putExtra("chatlist", it)
-      startActivity(intent)
+      ChatListActivity.launch(requireContext(), chatlist = it)
     }
 
     val itemDecoration = DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
@@ -119,11 +114,11 @@ class CoreSettingsFragment : ServiceBoundFragment() {
     })
 
     networkconfig.setOnClickListener {
-      startActivity(Intent(requireContext(), NetworkConfigActivity::class.java))
+      NetworkConfigActivity.launch(requireContext())
     }
 
     ignorelist.setOnClickListener {
-      startActivity(Intent(requireContext(), IgnoreListActivity::class.java))
+      IgnoreListActivity.launch(requireContext())
     }
 
     return view
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatListActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatListActivity.kt
index 7ebf8cb2a..45a42e7b2 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatListActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/chatlist/ChatListActivity.kt
@@ -1,5 +1,21 @@
 package de.kuschku.quasseldroid.ui.coresettings.chatlist
 
+import android.content.Context
+import android.content.Intent
 import de.kuschku.quasseldroid.util.ui.SettingsActivity
 
-class ChatListActivity : SettingsActivity(ChatListFragment())
+class ChatListActivity : SettingsActivity(ChatListFragment()) {
+  companion object {
+    fun launch(
+      context: Context,
+      chatlist: Int
+    ) = context.startActivity(intent(context, chatlist))
+
+    fun intent(
+      context: Context,
+      chatlist: Int
+    ) = Intent(context, ChatListActivity::class.java).apply {
+      putExtra("chatlist", chatlist)
+    }
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityActivity.kt
index 59cd117fd..b137bf1f6 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/identity/IdentityActivity.kt
@@ -1,5 +1,22 @@
 package de.kuschku.quasseldroid.ui.coresettings.identity
 
+import android.content.Context
+import android.content.Intent
+import de.kuschku.libquassel.protocol.IdentityId
 import de.kuschku.quasseldroid.util.ui.SettingsActivity
 
-class IdentityActivity : SettingsActivity(IdentityFragment())
\ No newline at end of file
+class IdentityActivity : SettingsActivity(IdentityFragment()) {
+  companion object {
+    fun launch(
+      context: Context,
+      identity: IdentityId
+    ) = context.startActivity(intent(context, identity))
+
+    fun intent(
+      context: Context,
+      identity: IdentityId
+    ) = Intent(context, IdentityActivity::class.java).apply {
+      putExtra("identity", identity)
+    }
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt
index 1d75e1602..b8275b5fd 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignoreitem/IgnoreItemActivity.kt
@@ -1,5 +1,24 @@
 package de.kuschku.quasseldroid.ui.coresettings.ignoreitem
 
+import android.content.Context
+import android.content.Intent
+import de.kuschku.libquassel.quassel.syncables.IgnoreListManager
 import de.kuschku.quasseldroid.util.ui.SettingsActivity
 
-class IgnoreItemActivity : SettingsActivity(IgnoreItemFragment())
+class IgnoreItemActivity : SettingsActivity(IgnoreItemFragment()) {
+  companion object {
+    fun launch(
+      context: Context,
+      item: IgnoreListManager.IgnoreListItem? = null
+    ) = context.startActivity(intent(context, item))
+
+    fun intent(
+      context: Context,
+      item: IgnoreListManager.IgnoreListItem? = null
+    ) = Intent(context, IgnoreItemActivity::class.java).apply {
+      if (item != null) {
+        putExtra("item", item)
+      }
+    }
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt
index e5effd234..66c55a9b2 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListActivity.kt
@@ -1,5 +1,12 @@
 package de.kuschku.quasseldroid.ui.coresettings.ignorelist
 
+import android.content.Context
+import android.content.Intent
 import de.kuschku.quasseldroid.util.ui.SettingsActivity
 
-class IgnoreListActivity : SettingsActivity(IgnoreListFragment())
+class IgnoreListActivity : SettingsActivity(IgnoreListFragment()) {
+  companion object {
+    fun launch(context: Context) = context.startActivity(intent(context))
+    fun intent(context: Context) = Intent(context, IgnoreListActivity::class.java)
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt
index ce51560e6..a30ac9887 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/ignorelist/IgnoreListFragment.kt
@@ -48,8 +48,7 @@ class IgnoreListFragment : SettingsFragment() {
     helper.attachToRecyclerView(list)
 
     add.setOnClickListener {
-      val intent = Intent(requireContext(), IgnoreItemActivity::class.java)
-      startActivityForResult(intent, REQUEST_CREATE_RULE)
+      startActivityForResult(IgnoreItemActivity.intent(requireContext()), REQUEST_CREATE_RULE)
     }
 
     viewModel.ignoreListManager
@@ -68,9 +67,7 @@ class IgnoreListFragment : SettingsFragment() {
   }
 
   fun itemClick(item: IgnoreListManager.IgnoreListItem) {
-    val intent = Intent(requireContext(), IgnoreItemActivity::class.java)
-    intent.putExtra("item", item)
-    startActivityForResult(intent, REQUEST_UPDATE_RULE)
+    startActivityForResult(IgnoreItemActivity.intent(requireContext(), item), REQUEST_UPDATE_RULE)
   }
 
   fun startDrag(holder: IgnoreListAdapter.IgnoreItemViewHolder) = helper.startDrag(holder)
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkconfig/NetworkConfigActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkconfig/NetworkConfigActivity.kt
index 525bed736..c7918c176 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkconfig/NetworkConfigActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/networkconfig/NetworkConfigActivity.kt
@@ -1,5 +1,12 @@
 package de.kuschku.quasseldroid.ui.coresettings.networkconfig
 
+import android.content.Context
+import android.content.Intent
 import de.kuschku.quasseldroid.util.ui.SettingsActivity
 
-class NetworkConfigActivity : SettingsActivity(NetworkConfigFragment())
\ No newline at end of file
+class NetworkConfigActivity : SettingsActivity(NetworkConfigFragment()) {
+  companion object {
+    fun launch(context: Context) = context.startActivity(intent(context))
+    fun intent(context: Context) = Intent(context, NetworkConfigActivity::class.java)
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/edit/AccountEditActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/edit/AccountEditActivity.kt
index 5dcc3717d..02d965a96 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/edit/AccountEditActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/edit/AccountEditActivity.kt
@@ -2,6 +2,7 @@ package de.kuschku.quasseldroid.ui.setup.accounts.edit
 
 import android.app.Activity
 import android.content.Context
+import android.content.Intent
 import android.os.Bundle
 import android.support.design.widget.TextInputLayout
 import android.support.v7.app.AlertDialog
@@ -181,4 +182,18 @@ class AccountEditActivity : DaggerAppCompatActivity() {
     }
     else               -> super.onOptionsItemSelected(item)
   }
+
+  companion object {
+    fun launch(
+      context: Context,
+      account: Long
+    ) = context.startActivity(intent(context, account))
+
+    fun intent(
+      context: Context,
+      account: Long
+    ) = Intent(context, AccountEditActivity::class.java).apply {
+      putExtra("account", account)
+    }
+  }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionActivity.kt
index e06e56541..0b877d431 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionActivity.kt
@@ -2,6 +2,7 @@ package de.kuschku.quasseldroid.ui.setup.accounts.selection
 
 import android.app.Activity
 import android.content.Context
+import android.content.Intent
 import android.content.SharedPreferences
 import android.os.Bundle
 import de.kuschku.quasseldroid.Keys
@@ -12,6 +13,9 @@ class AccountSelectionActivity : SetupActivity() {
   companion object {
     const val REQUEST_CREATE_FIRST = 0
     const val REQUEST_CREATE_NEW = 1
+
+    fun launch(context: Context) = context.startActivity(intent(context))
+    fun intent(context: Context) = Intent(context, AccountSelectionActivity::class.java)
   }
 
   override val fragments = listOf(
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionSlide.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionSlide.kt
index 741a3aaa5..4d2762f20 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionSlide.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/selection/AccountSelectionSlide.kt
@@ -49,7 +49,7 @@ class AccountSelectionSlide : SlideFragment() {
       override fun onChanged(t: List<AccountDatabase.Account>?) {
         if (t?.isEmpty() != false)
           startActivityForResult(
-            Intent(context, AccountSetupActivity::class.java),
+            AccountSetupActivity.intent(requireContext()),
             REQUEST_CREATE_FIRST
           )
         accountViewModel.accounts.removeObserver(this)
@@ -65,12 +65,10 @@ class AccountSelectionSlide : SlideFragment() {
     accountList.adapter = adapter
 
     adapter.addAddListener {
-      startActivityForResult(Intent(context, AccountSetupActivity::class.java), -1)
+      startActivityForResult(AccountSetupActivity.intent(requireContext()), -1)
     }
     adapter.addEditListener { id ->
-      val intent = Intent(context, AccountEditActivity::class.java)
-      intent.putExtra("account", id)
-      startActivityForResult(intent, REQUEST_CREATE_NEW)
+      startActivityForResult(AccountEditActivity.intent(requireContext(), id), REQUEST_CREATE_NEW)
     }
     adapter.addSelectionListener {
       updateValidity()
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupActivity.kt
index bff708ef2..d70338da7 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/setup/accounts/setup/AccountSetupActivity.kt
@@ -1,6 +1,8 @@
 package de.kuschku.quasseldroid.ui.setup.accounts.setup
 
 import android.app.Activity
+import android.content.Context
+import android.content.Intent
 import android.os.Bundle
 import de.kuschku.quasseldroid.persistence.AccountDatabase
 import de.kuschku.quasseldroid.ui.setup.SetupActivity
@@ -48,4 +50,9 @@ class AccountSetupActivity : SetupActivity() {
     AccountSetupUserSlide(),
     AccountSetupNameSlide()
   )
+
+  companion object {
+    fun launch(context: Context) = context.startActivity(intent(context))
+    fun intent(context: Context) = Intent(context, AccountSetupActivity::class.java)
+  }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/QuasseldroidNotificationManager.kt b/app/src/main/java/de/kuschku/quasseldroid/util/QuasseldroidNotificationManager.kt
index 67fab22bf..4623c8d3b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/QuasseldroidNotificationManager.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/QuasseldroidNotificationManager.kt
@@ -52,14 +52,20 @@ class QuasseldroidNotificationManager(private val context: Context) {
   }
 
   fun notificationBackground(): Handle {
-    val intentOpen = Intent(context.applicationContext, ChatActivity::class.java)
-    intentOpen.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
-    val pendingIntentOpen = PendingIntent.getActivity(context.applicationContext, 0, intentOpen, 0)
+    val pendingIntentOpen = PendingIntent.getActivity(
+      context.applicationContext,
+      0,
+      ChatActivity.intent(context.applicationContext).apply {
+        flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
+      },
+      0
+    )
 
-    val intentDisconnect = Intent(context, QuasselService::class.java)
-    intentDisconnect.putExtra("disconnect", true)
     val pendingIntentDisconnect = PendingIntent.getService(
-      context, 0, intentDisconnect, PendingIntent.FLAG_UPDATE_CURRENT
+      context,
+      0,
+      QuasselService.intent(context.applicationContext, disconnect = true),
+      PendingIntent.FLAG_UPDATE_CURRENT
     )
 
     val notification = NotificationCompat.Builder(
@@ -91,4 +97,4 @@ class QuasseldroidNotificationManager(private val context: Context) {
     val id: Int,
     val builder: NotificationCompat.Builder
   )
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/service/BackendServiceConnection.kt b/app/src/main/java/de/kuschku/quasseldroid/util/service/BackendServiceConnection.kt
index 35a72d7c6..2375ca2a7 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/service/BackendServiceConnection.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/service/BackendServiceConnection.kt
@@ -7,6 +7,7 @@ import android.content.ServiceConnection
 import android.os.IBinder
 import de.kuschku.libquassel.session.Backend
 import de.kuschku.libquassel.util.Optional
+import de.kuschku.quasseldroid.service.QuasselBinder
 import de.kuschku.quasseldroid.service.QuasselService
 import io.reactivex.subjects.BehaviorSubject
 
@@ -26,25 +27,25 @@ class BackendServiceConnection : ServiceConnection {
   override fun onServiceConnected(component: ComponentName?, binder: IBinder?) {
     when (component) {
       ComponentName(context, QuasselService::class.java) ->
-        if (binder is QuasselService.QuasselBinder) {
+        if (binder is QuasselBinder) {
           backend.onNext(Optional.of(binder.backend))
         }
     }
   }
 
-  fun start(intent: Intent = Intent(context, QuasselService::class.java)) {
+  fun start(intent: Intent = QuasselService.intent(context!!)) {
     context?.startService(intent)
   }
 
-  fun bind(intent: Intent = Intent(context, QuasselService::class.java), flags: Int = 0) {
+  fun bind(intent: Intent = QuasselService.intent(context!!), flags: Int = 0) {
     context?.bindService(intent, this, flags)
   }
 
-  fun stop(intent: Intent = Intent(context, QuasselService::class.java)) {
+  fun stop(intent: Intent = QuasselService.intent(context!!)) {
     context?.stopService(intent)
   }
 
   fun unbind() {
     context?.unbindService(this)
   }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt
index a98089d88..2fbed102a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt
@@ -140,9 +140,7 @@ abstract class ServiceBoundActivity : AppCompatActivity(),
     if (!reconnect || !accountIdValid) {
 
       if (!startedSelection) {
-        startActivityForResult(
-          Intent(this, AccountSelectionActivity::class.java), REQUEST_SELECT_ACCOUNT
-        )
+        startActivityForResult(AccountSelectionActivity.intent(this), REQUEST_SELECT_ACCOUNT)
         startedSelection = true
       }
     } else {
-- 
GitLab