소스 검색

Merge pull request #2201 from nextcloud/bugfix/2198/fixNpeViewBindingTogglePublicConversation

catch NPE for binding in toggleCallHeader
Andy Scherzinger 2 년 전
부모
커밋
82dbadc028
1개의 변경된 파일24개의 추가작업 그리고 13개의 파일을 삭제
  1. 24 13
      app/src/main/java/com/nextcloud/talk/controllers/ContactsController.kt

+ 24 - 13
app/src/main/java/com/nextcloud/talk/controllers/ContactsController.kt

@@ -83,10 +83,7 @@ import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
 import org.parceler.Parcels
 import java.io.IOException
-import java.util.ArrayList
 import java.util.Collections
-import java.util.HashMap
-import java.util.HashSet
 import java.util.Locale
 import javax.inject.Inject
 
@@ -154,7 +151,7 @@ class ContactsController(args: Bundle) :
         super.onAttach(view)
         eventBus.register(this)
         if (isNewConversationView) {
-            toggleNewCallHeaderVisibility(!isPublicCall)
+            toggleConversationPrivacyLayout(!isPublicCall)
         }
         if (isAddingParticipantsView) {
             binding.joinConversationViaLink.joinConversationViaLinkRelativeLayout.visibility = View.GONE
@@ -260,6 +257,7 @@ class ContactsController(args: Bundle) :
                 override fun onSubscribe(d: Disposable) {
                     // unused atm
                 }
+
                 override fun onNext(roomOverall: RoomOverall) {
                     val bundle = Bundle()
                     bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, currentUser)
@@ -280,6 +278,7 @@ class ContactsController(args: Bundle) :
                             override fun onSubscribe(d: Disposable) {
                                 // unused atm
                             }
+
                             override fun onNext(roomOverall: RoomOverall) {
                                 bundle.putParcelable(
                                     BundleKeys.KEY_ACTIVE_CONVERSATION,
@@ -823,6 +822,7 @@ class ContactsController(args: Bundle) :
                 override fun onSubscribe(d: Disposable) {
                     // unused atm
                 }
+
                 override fun onNext(roomOverall: RoomOverall) {
                     if (activity != null) {
                         val bundle = Bundle()
@@ -846,6 +846,7 @@ class ContactsController(args: Bundle) :
                 override fun onError(e: Throwable) {
                     // unused atm
                 }
+
                 override fun onComplete() {
                     // unused atm
                 }
@@ -895,15 +896,9 @@ class ContactsController(args: Bundle) :
     }
 
     private fun toggleCallHeader() {
-        toggleNewCallHeaderVisibility(isPublicCall)
+        toggleConversationPrivacyLayout(isPublicCall)
         isPublicCall = !isPublicCall
-
-        if (isPublicCall) {
-            binding.joinConversationViaLink.joinConversationViaLinkRelativeLayout.visibility = View.GONE
-            updateGroupParticipantSelection()
-        } else {
-            binding.joinConversationViaLink.joinConversationViaLinkRelativeLayout.visibility = View.VISIBLE
-        }
+        toggleConversationViaLinkVisibility(isPublicCall)
 
         enableContactForNonPublicCall()
         checkAndHandleDoneMenuItem()
@@ -939,7 +934,7 @@ class ContactsController(args: Bundle) :
     }
 
     @Suppress("Detekt.TooGenericExceptionCaught")
-    private fun toggleNewCallHeaderVisibility(showInitialLayout: Boolean) {
+    private fun toggleConversationPrivacyLayout(showInitialLayout: Boolean) {
         try {
             if (showInitialLayout) {
                 binding.conversationPrivacyToggle.initialRelativeLayout.visibility = View.VISIBLE
@@ -955,6 +950,22 @@ class ContactsController(args: Bundle) :
         }
     }
 
+    @Suppress("Detekt.TooGenericExceptionCaught")
+    private fun toggleConversationViaLinkVisibility(isPublicCall: Boolean) {
+        try {
+            if (isPublicCall) {
+                binding.joinConversationViaLink.joinConversationViaLinkRelativeLayout.visibility = View.GONE
+                updateGroupParticipantSelection()
+            } else {
+                binding.joinConversationViaLink.joinConversationViaLinkRelativeLayout.visibility = View.VISIBLE
+            }
+        } catch (npe: NullPointerException) {
+            // view binding can be null
+            // since this is called asynchronously and UI might have been destroyed in the meantime
+            Log.i(TAG, "UI destroyed - view binding already gone")
+        }
+    }
+
     companion object {
         const val TAG = "ContactsController"
         const val RETRIES: Long = 3