From 3b878e73203895463f43074ddcec033a34f72569 Mon Sep 17 00:00:00 2001
From: Janne Mareike Koschinski <janne@kuschku.de>
Date: Mon, 14 Jun 2021 11:12:47 +0200
Subject: [PATCH] =?UTF-8?q?Fixed=20issue=20where=20connecting=20to=20a=20d?=
 =?UTF-8?q?isconnected=20network=20isn=E2=80=99t=20possible?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../chat/buffers/BufferViewConfigFragment.kt  |  24 +--
 .../ui/presenter/BufferContextPresenter.kt    | 192 ++++++++++--------
 2 files changed, 118 insertions(+), 98 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt
index 258134408..be0694344 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt
@@ -133,20 +133,16 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
       val network = session?.networks?.get(networkId)
       val bufferViewConfig = modelHelper.bufferViewConfig.value?.orNull()
 
-      return if (info != null) {
-        BufferContextPresenter.handleAction(
-          requireContext(),
-          mode,
-          item,
-          info,
-          session,
-          bufferSyncer,
-          bufferViewConfig,
-          network
-        )
-      } else {
-        false
-      }
+      return BufferContextPresenter.handleAction(
+        requireContext(),
+        mode,
+        item,
+        info,
+        session,
+        bufferSyncer,
+        bufferViewConfig,
+        network
+      )
     }
 
     override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/presenter/BufferContextPresenter.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/presenter/BufferContextPresenter.kt
index cb69524c0..025ac858a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/presenter/BufferContextPresenter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/presenter/BufferContextPresenter.kt
@@ -55,7 +55,7 @@ object BufferContextPresenter {
         )
 
         val visibilityActions = when (buffer.hiddenState) {
-          BufferHiddenState.VISIBLE          -> setOf(
+          BufferHiddenState.VISIBLE -> setOf(
             R.id.action_archive
           )
           BufferHiddenState.HIDDEN_TEMPORARY -> setOf(
@@ -67,15 +67,15 @@ object BufferContextPresenter {
         }
 
         val availableActions = when (buffer.info?.type?.enabledValues()?.firstOrNull()) {
-          Buffer_Type.StatusBuffer  -> {
+          Buffer_Type.StatusBuffer -> {
             when (buffer.connectionState) {
               INetwork.ConnectionState.Disconnected -> setOf(
                 R.id.action_configure, R.id.action_connect
               )
-              INetwork.ConnectionState.Initialized  -> setOf(
+              INetwork.ConnectionState.Initialized -> setOf(
                 R.id.action_channellist, R.id.action_configure, R.id.action_disconnect
               )
-              else                                  -> setOf(
+              else -> setOf(
                 R.id.action_configure, R.id.action_connect, R.id.action_disconnect
               )
             }
@@ -87,10 +87,10 @@ object BufferContextPresenter {
               setOf(R.id.action_join, R.id.action_delete)
             } + visibilityActions
           }
-          Buffer_Type.QueryBuffer   -> {
+          Buffer_Type.QueryBuffer -> {
             setOf(R.id.action_delete, R.id.action_rename) + visibilityActions
           }
-          else                      -> visibilityActions
+          else -> visibilityActions
         }
 
         val unavailableActions = allActions - availableActions
@@ -111,9 +111,9 @@ object BufferContextPresenter {
     context: Context,
     actionMode: ActionMode,
     item: MenuItem,
-    info: BufferInfo,
-    session: ISession,
-    bufferSyncer: BufferSyncer,
+    info: BufferInfo?,
+    session: ISession?,
+    bufferSyncer: BufferSyncer?,
     bufferViewConfig: BufferViewConfig?,
     network: Network?
   ) = when (item.itemId) {
@@ -124,101 +124,125 @@ object BufferContextPresenter {
       actionMode.finish()
       true
     }
-    R.id.action_configure   -> {
+    R.id.action_configure -> {
       network?.let {
         NetworkEditActivity.launch(context, network = it.networkId())
       }
       actionMode.finish()
       true
     }
-    R.id.action_connect     -> {
+    R.id.action_connect -> {
       network?.requestConnect()
       actionMode.finish()
       true
     }
-    R.id.action_disconnect  -> {
+    R.id.action_disconnect -> {
       network?.requestDisconnect()
       actionMode.finish()
       true
     }
-    R.id.action_join        -> {
-      session.rpcHandler.sendInput(info, "/join ${info.bufferName}")
-      actionMode.finish()
-      true
+    R.id.action_join -> {
+      if (info != null) {
+        session?.rpcHandler?.sendInput(info, "/join ${info.bufferName}")
+        actionMode.finish()
+        true
+      } else {
+        false
+      }
     }
-    R.id.action_part        -> {
-      session.rpcHandler.sendInput(info, "/part ${info.bufferName}")
-      actionMode.finish()
-      true
+    R.id.action_part -> {
+      if (info != null) {
+        session?.rpcHandler?.sendInput(info, "/part ${info.bufferName}")
+        actionMode.finish()
+        true
+      } else {
+        false
+      }
     }
-    R.id.action_delete      -> {
-      MaterialDialog.Builder(context)
-        .content(R.string.buffer_delete_confirmation)
-        .positiveText(R.string.label_yes)
-        .negativeText(R.string.label_no)
-        .negativeColorAttr(R.attr.colorTextPrimary)
-        .backgroundColorAttr(R.attr.colorBackgroundCard)
-        .contentColorAttr(R.attr.colorTextPrimary)
-        .onPositive { _, _ ->
-          session.bufferSyncer.requestRemoveBuffer(info.bufferId)
-        }
-        .onAny { _, _ ->
-          actionMode.finish()
-        }
-        .build()
-        .show()
-      true
+    R.id.action_delete -> {
+      if (info != null) {
+        MaterialDialog.Builder(context)
+          .content(R.string.buffer_delete_confirmation)
+          .positiveText(R.string.label_yes)
+          .negativeText(R.string.label_no)
+          .negativeColorAttr(R.attr.colorTextPrimary)
+          .backgroundColorAttr(R.attr.colorBackgroundCard)
+          .contentColorAttr(R.attr.colorTextPrimary)
+          .onPositive { _, _ ->
+            session?.bufferSyncer?.requestRemoveBuffer(info.bufferId)
+          }
+          .onAny { _, _ ->
+            actionMode.finish()
+          }
+          .build()
+          .show()
+        true
+      } else {
+        false
+      }
     }
-    R.id.action_rename      -> {
-      MaterialDialog.Builder(context)
-        .input(
-          context.getString(R.string.label_buffer_name),
-          info.bufferName,
-          false
-        ) { _, input ->
-          session.bufferSyncer.requestRenameBuffer(info.bufferId, input.toString())
-        }
-        .positiveText(R.string.label_save)
-        .negativeText(R.string.label_cancel)
-        .negativeColorAttr(R.attr.colorTextPrimary)
-        .backgroundColorAttr(R.attr.colorBackgroundCard)
-        .contentColorAttr(R.attr.colorTextPrimary)
-        .onAny { _, _ ->
-          actionMode.finish()
-        }
-        .build()
-        .show()
-      true
+    R.id.action_rename -> {
+      if (info != null && bufferSyncer != null) {
+        MaterialDialog.Builder(context)
+          .input(
+            context.getString(R.string.label_buffer_name),
+            info.bufferName,
+            false
+          ) { _, input ->
+            session?.bufferSyncer?.requestRenameBuffer(info.bufferId, input.toString())
+          }
+          .positiveText(R.string.label_save)
+          .negativeText(R.string.label_cancel)
+          .negativeColorAttr(R.attr.colorTextPrimary)
+          .backgroundColorAttr(R.attr.colorBackgroundCard)
+          .contentColorAttr(R.attr.colorTextPrimary)
+          .onAny { _, _ ->
+            actionMode.finish()
+          }
+          .build()
+          .show()
+        true
+      } else {
+        false
+      }
     }
-    R.id.action_unhide      -> {
-      bufferViewConfig?.insertBufferSorted(info, bufferSyncer)
-      actionMode.finish()
-      true
+    R.id.action_unhide -> {
+      if (info != null && bufferSyncer != null) {
+        bufferViewConfig?.insertBufferSorted(info, bufferSyncer)
+        actionMode.finish()
+        true
+      } else {
+        false
+      }
     }
-    R.id.action_archive     -> {
-      MaterialDialog.Builder(context)
-        .title(R.string.label_archive_chat)
-        .content(R.string.buffer_archive_confirmation)
-        .checkBoxPromptRes(R.string.buffer_archive_temporarily, true, null)
-        .positiveText(R.string.label_archive)
-        .negativeText(R.string.label_cancel)
-        .negativeColorAttr(R.attr.colorTextPrimary)
-        .backgroundColorAttr(R.attr.colorBackgroundCard)
-        .contentColorAttr(R.attr.colorTextPrimary)
-        .onAny { _, _ ->
-          actionMode.finish()
-        }
-        .onPositive { dialog, _ ->
-          if (dialog.isPromptCheckBoxChecked) {
-            bufferViewConfig?.requestRemoveBuffer(info.bufferId)
-          } else {
-            bufferViewConfig?.requestRemoveBufferPermanently(info.bufferId)
+    R.id.action_archive -> {
+      if (info != null) {
+        MaterialDialog.Builder(context)
+          .title(R.string.label_archive_chat)
+          .content(R.string.buffer_archive_confirmation)
+          .checkBoxPromptRes(R.string.buffer_archive_temporarily, true, null)
+          .positiveText(R.string.label_archive)
+          .negativeText(R.string.label_cancel)
+          .negativeColorAttr(R.attr.colorTextPrimary)
+          .backgroundColorAttr(R.attr.colorBackgroundCard)
+          .contentColorAttr(R.attr.colorTextPrimary)
+          .onAny { _, _ ->
+            actionMode.finish()
           }
-        }
-        .build()
-        .show()
-      true
+          .onPositive { dialog, _ ->
+            if (dialog.isPromptCheckBoxChecked) {
+              bufferViewConfig?.requestRemoveBuffer(info.bufferId)
+            } else {
+              bufferViewConfig?.requestRemoveBufferPermanently(info.bufferId)
+            }
+          }
+          .build()
+          .show()
+        true
+      } else {
+        false
+      }
     }
-    else                    -> false
+    else -> false
   }
 }
-- 
GitLab