From 9e3eb993ee9414f574a0ba9175a2558c439e206d Mon Sep 17 00:00:00 2001
From: Benoit Marty <benoit@matrix.org>
Date: Wed, 16 Dec 2020 10:36:33 +0100
Subject: [PATCH] Fix some crashes

---
 .../attachments/AttachmentTypeSelectorView.kt |  4 +-
 .../preview/AttachmentsPreviewFragment.kt     |  1 -
 .../app/features/call/VectorCallActivity.kt   |  1 -
 .../call/conference/VectorJitsiActivity.kt    |  1 -
 .../quads/SharedSecureStorageActivity.kt      |  1 -
 .../crypto/recover/BootstrapBottomSheet.kt    |  1 -
 .../verification/VerificationBottomSheet.kt   |  1 -
 .../VerificationConclusionFragment.kt         |  1 -
 .../VerificationQRWaitingFragment.kt          |  1 -
 .../vector/app/features/home/HomeActivity.kt  |  1 -
 .../home/room/detail/RoomDetailFragment.kt    | 27 +++----
 .../DisplayReadReceiptsBottomSheet.kt         |  1 -
 .../home/room/detail/search/SearchFragment.kt |  1 -
 .../home/room/list/RoomListFragment.kt        |  1 -
 .../RoomListQuickActionsBottomSheet.kt        |  1 -
 .../invite/InviteUsersToRoomActivity.kt       |  1 -
 .../features/login/LoginCaptchaFragment.kt    |  1 -
 .../LoginGenericTextInputFormFragment.kt      |  1 -
 .../login/LoginWaitForEmailFragment.kt        |  1 -
 .../login/terms/LoginTermsFragment.kt         |  1 -
 .../features/matrixto/MatrixToBottomSheet.kt  |  1 -
 .../reactions/widget/ReactionButton.kt        | 80 ++++++++-----------
 .../RoomMemberProfileFragment.kt              |  1 -
 .../roomprofile/RoomProfileFragment.kt        |  1 -
 .../alias/detail/RoomAliasBottomSheet.kt      |  1 -
 .../VectorSettingsPreferencesFragment.kt      | 33 ++++----
 .../DeviceVerificationInfoBottomSheet.kt      |  1 -
 .../devices/VectorSettingsDevicesFragment.kt  |  8 +-
 .../app/features/usercode/UserCodeActivity.kt |  1 -
 .../app/features/widgets/WidgetFragment.kt    |  1 -
 30 files changed, 69 insertions(+), 108 deletions(-)

diff --git a/vector/src/main/java/im/vector/app/features/attachments/AttachmentTypeSelectorView.kt b/vector/src/main/java/im/vector/app/features/attachments/AttachmentTypeSelectorView.kt
index 4c6d87b96a..dcf72137fc 100644
--- a/vector/src/main/java/im/vector/app/features/attachments/AttachmentTypeSelectorView.kt
+++ b/vector/src/main/java/im/vector/app/features/attachments/AttachmentTypeSelectorView.kt
@@ -69,8 +69,8 @@ class AttachmentTypeSelectorView(context: Context,
 
     init {
         val root = FrameLayout(context)
-        val layout = inflater.inflate(R.layout.view_attachment_type_selector, root, true)
-        views = ViewAttachmentTypeSelectorBinding.bind(layout)
+        inflater.inflate(R.layout.view_attachment_type_selector, root, true)
+        views = ViewAttachmentTypeSelectorBinding.bind(root)
         views.attachmentGalleryButton.configure(Type.GALLERY)
         views.attachmentCameraButton.configure(Type.CAMERA)
         views.attachmentFileButton.configure(Type.FILE)
diff --git a/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewFragment.kt b/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewFragment.kt
index a379fcddab..407b51666b 100644
--- a/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewFragment.kt
@@ -49,7 +49,6 @@ import im.vector.app.core.utils.attachSnapHelperWithListener
 import im.vector.app.databinding.FragmentAttachmentsPreviewBinding
 import im.vector.app.features.media.createUCropWithDefaultSettings
 import kotlinx.parcelize.Parcelize
-
 import org.matrix.android.sdk.api.extensions.orFalse
 import org.matrix.android.sdk.api.session.content.ContentAttachmentData
 import java.io.File
diff --git a/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt b/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt
index 20fd0976a4..41bf7bbeaf 100644
--- a/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt
@@ -50,7 +50,6 @@ import im.vector.app.features.home.room.detail.RoomDetailActivity
 import im.vector.app.features.home.room.detail.RoomDetailArgs
 import io.reactivex.android.schedulers.AndroidSchedulers
 import kotlinx.parcelize.Parcelize
-
 import org.matrix.android.sdk.api.session.call.CallState
 import org.matrix.android.sdk.api.session.call.EglUtils
 import org.matrix.android.sdk.api.session.call.MxCallDetail
diff --git a/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt b/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt
index fdb0dcca00..a02f2d1910 100644
--- a/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt
@@ -31,7 +31,6 @@ import im.vector.app.core.di.ScreenComponent
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.databinding.ActivityJitsiBinding
 import kotlinx.parcelize.Parcelize
-
 import org.jitsi.meet.sdk.JitsiMeetActivityDelegate
 import org.jitsi.meet.sdk.JitsiMeetActivityInterface
 import org.jitsi.meet.sdk.JitsiMeetConferenceOptions
diff --git a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt
index 1a2fb930d8..a0b0dcb850 100644
--- a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt
@@ -36,7 +36,6 @@ import im.vector.app.core.platform.SimpleFragmentActivity
 import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
 import im.vector.app.features.crypto.recover.SetupMode
 import kotlinx.parcelize.Parcelize
-
 import javax.inject.Inject
 import kotlin.reflect.KClass
 
diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapBottomSheet.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapBottomSheet.kt
index 01c739c6d8..f1ea50c9bf 100644
--- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapBottomSheet.kt
+++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapBottomSheet.kt
@@ -38,7 +38,6 @@ import im.vector.app.core.extensions.exhaustive
 import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
 import im.vector.app.databinding.BottomSheetBootstrapBinding
 import kotlinx.parcelize.Parcelize
-
 import javax.inject.Inject
 import kotlin.reflect.KClass
 
diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt
index 1e57e0c066..3f8f47d22a 100644
--- a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt
+++ b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt
@@ -49,7 +49,6 @@ import im.vector.app.features.crypto.verification.request.VerificationRequestFra
 import im.vector.app.features.home.AvatarRenderer
 import im.vector.app.features.settings.VectorSettingsActivity
 import kotlinx.parcelize.Parcelize
-
 import org.matrix.android.sdk.api.session.Session
 import org.matrix.android.sdk.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME
 import org.matrix.android.sdk.api.session.crypto.crosssigning.MASTER_KEY_SSSS_NAME
diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/conclusion/VerificationConclusionFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/conclusion/VerificationConclusionFragment.kt
index 70a0cd97c4..f45bc3d44e 100644
--- a/vector/src/main/java/im/vector/app/features/crypto/verification/conclusion/VerificationConclusionFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/crypto/verification/conclusion/VerificationConclusionFragment.kt
@@ -30,7 +30,6 @@ import im.vector.app.databinding.BottomSheetVerificationChildFragmentBinding
 import im.vector.app.features.crypto.verification.VerificationAction
 import im.vector.app.features.crypto.verification.VerificationBottomSheetViewModel
 import kotlinx.parcelize.Parcelize
-
 import javax.inject.Inject
 
 class VerificationConclusionFragment @Inject constructor(
diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/qrconfirmation/VerificationQRWaitingFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/qrconfirmation/VerificationQRWaitingFragment.kt
index e131a8a58f..12a136f70c 100644
--- a/vector/src/main/java/im/vector/app/features/crypto/verification/qrconfirmation/VerificationQRWaitingFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/crypto/verification/qrconfirmation/VerificationQRWaitingFragment.kt
@@ -27,7 +27,6 @@ import im.vector.app.core.extensions.configureWith
 import im.vector.app.core.platform.VectorBaseFragment
 import im.vector.app.databinding.BottomSheetVerificationChildFragmentBinding
 import kotlinx.parcelize.Parcelize
-
 import javax.inject.Inject
 
 class VerificationQRWaitingFragment @Inject constructor(
diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt
index eeb791330c..9d7beb13a3 100644
--- a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt
@@ -58,7 +58,6 @@ import im.vector.app.features.workers.signout.ServerBackupStatusViewState
 import im.vector.app.push.fcm.FcmHelper
 import io.reactivex.android.schedulers.AndroidSchedulers
 import kotlinx.parcelize.Parcelize
-
 import org.matrix.android.sdk.api.session.InitialSyncProgressService
 import org.matrix.android.sdk.api.session.permalinks.PermalinkService
 import org.matrix.android.sdk.api.util.MatrixItem
diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt
index c5d681a830..908c55c1fc 100644
--- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt
@@ -69,7 +69,6 @@ import com.airbnb.mvrx.args
 import com.airbnb.mvrx.fragmentViewModel
 import com.airbnb.mvrx.withState
 import com.google.android.material.snackbar.Snackbar
-import com.google.android.material.textfield.TextInputEditText
 import com.jakewharton.rxbinding3.widget.textChanges
 import com.vanniktech.emoji.EmojiPopup
 import im.vector.app.R
@@ -113,6 +112,7 @@ import im.vector.app.core.utils.saveMedia
 import im.vector.app.core.utils.shareMedia
 import im.vector.app.core.utils.shareText
 import im.vector.app.core.utils.toast
+import im.vector.app.databinding.DialogReportContentBinding
 import im.vector.app.databinding.FragmentRoomDetailBinding
 import im.vector.app.features.attachments.AttachmentTypeSelectorView
 import im.vector.app.features.attachments.AttachmentsHelper
@@ -169,7 +169,6 @@ import im.vector.app.features.widgets.permissions.RoomWidgetPermissionBottomShee
 import io.reactivex.android.schedulers.AndroidSchedulers
 import io.reactivex.schedulers.Schedulers
 import kotlinx.parcelize.Parcelize
-
 import nl.dionsegijn.konfetti.models.Shape
 import nl.dionsegijn.konfetti.models.Size
 import org.billcarsonfr.jsonviewer.JSonViewerDialog
@@ -409,12 +408,13 @@ class RoomDetailFragment @Inject constructor(
                         .setPosition(-50f, views.viewKonfetti.width + 50f, -50f, -50f)
                         .streamFor(150, 3000L)
             }
-            ChatEffect.SNOW -> {
+            ChatEffect.SNOW     -> {
                 views.viewSnowFall.isVisible = true
                 views.viewSnowFall.restartFalling()
             }
         }
     }
+
     private fun handleStopChatEffects() {
         TransitionManager.beginDelayedTransition(views.rootConstraintLayout)
         views.viewSnowFall.isVisible = false
@@ -735,36 +735,36 @@ class RoomDetailFragment @Inject constructor(
 
     override fun onOptionsItemSelected(item: MenuItem): Boolean {
         return when (item.itemId) {
-            R.id.invite              -> {
+            R.id.invite           -> {
                 navigator.openInviteUsersToRoom(requireActivity(), roomDetailArgs.roomId)
                 true
             }
-            R.id.timeline_setting    -> {
+            R.id.timeline_setting -> {
                 navigator.openRoomProfile(requireActivity(), roomDetailArgs.roomId)
                 true
             }
-            R.id.resend_all          -> {
+            R.id.resend_all       -> {
                 roomDetailViewModel.handle(RoomDetailAction.ResendAll)
                 true
             }
-            R.id.open_matrix_apps    -> {
+            R.id.open_matrix_apps -> {
                 roomDetailViewModel.handle(RoomDetailAction.ManageIntegrations)
                 true
             }
             R.id.voice_call,
-            R.id.video_call          -> {
+            R.id.video_call       -> {
                 handleCallRequest(item)
                 true
             }
-            R.id.hangup_call         -> {
+            R.id.hangup_call      -> {
                 roomDetailViewModel.handle(RoomDetailAction.EndCall)
                 true
             }
-            R.id.search              -> {
+            R.id.search           -> {
                 handleSearchAction()
                 true
             }
-            else                     -> super.onOptionsItemSelected(item)
+            else                  -> super.onOptionsItemSelected(item)
         }
     }
 
@@ -1361,14 +1361,13 @@ class RoomDetailFragment @Inject constructor(
     private fun promptReasonToReportContent(action: EventSharedAction.ReportContentCustom) {
         val inflater = requireActivity().layoutInflater
         val layout = inflater.inflate(R.layout.dialog_report_content, null)
-
-        val input = layout.findViewById<TextInputEditText>(R.id.dialog_report_content_input)
+        val views = DialogReportContentBinding.bind(layout)
 
         AlertDialog.Builder(requireActivity())
                 .setTitle(R.string.report_content_custom_title)
                 .setView(layout)
                 .setPositiveButton(R.string.report_content_custom_submit) { _, _ ->
-                    val reason = input.text.toString()
+                    val reason = views.dialogReportContentInput.text.toString()
                     roomDetailViewModel.handle(RoomDetailAction.ReportContent(action.eventId, action.senderId, reason))
                 }
                 .setNegativeButton(R.string.cancel, null)
diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/readreceipts/DisplayReadReceiptsBottomSheet.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/readreceipts/DisplayReadReceiptsBottomSheet.kt
index b078c7d7ea..95b2333b43 100644
--- a/vector/src/main/java/im/vector/app/features/home/room/detail/readreceipts/DisplayReadReceiptsBottomSheet.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/detail/readreceipts/DisplayReadReceiptsBottomSheet.kt
@@ -33,7 +33,6 @@ import im.vector.app.features.home.room.detail.timeline.action.EventSharedAction
 import im.vector.app.features.home.room.detail.timeline.action.MessageSharedActionViewModel
 import im.vector.app.features.home.room.detail.timeline.item.ReadReceiptData
 import kotlinx.parcelize.Parcelize
-
 import javax.inject.Inject
 
 @Parcelize
diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt
index 44568405a1..8a8701e45f 100644
--- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt
@@ -38,7 +38,6 @@ import im.vector.app.core.platform.StateView
 import im.vector.app.core.platform.VectorBaseFragment
 import im.vector.app.databinding.FragmentSearchBinding
 import kotlinx.parcelize.Parcelize
-
 import org.matrix.android.sdk.api.session.events.model.Event
 import javax.inject.Inject
 
diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFragment.kt
index 18617aa529..02a277f377 100644
--- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListFragment.kt
@@ -51,7 +51,6 @@ import im.vector.app.features.home.room.list.actions.RoomListQuickActionsSharedA
 import im.vector.app.features.home.room.list.widget.NotifsFabMenuView
 import im.vector.app.features.notifications.NotificationDrawerManager
 import kotlinx.parcelize.Parcelize
-
 import org.matrix.android.sdk.api.failure.Failure
 import org.matrix.android.sdk.api.session.room.model.Membership
 import org.matrix.android.sdk.api.session.room.model.RoomSummary
diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/actions/RoomListQuickActionsBottomSheet.kt b/vector/src/main/java/im/vector/app/features/home/room/list/actions/RoomListQuickActionsBottomSheet.kt
index 7e84c12a39..dd2bb3a4c4 100644
--- a/vector/src/main/java/im/vector/app/features/home/room/list/actions/RoomListQuickActionsBottomSheet.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/list/actions/RoomListQuickActionsBottomSheet.kt
@@ -31,7 +31,6 @@ import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
 import im.vector.app.databinding.BottomSheetGenericListBinding
 import im.vector.app.features.navigation.Navigator
 import kotlinx.parcelize.Parcelize
-
 import javax.inject.Inject
 
 @Parcelize
diff --git a/vector/src/main/java/im/vector/app/features/invite/InviteUsersToRoomActivity.kt b/vector/src/main/java/im/vector/app/features/invite/InviteUsersToRoomActivity.kt
index ed2b8dacc4..9949255e32 100644
--- a/vector/src/main/java/im/vector/app/features/invite/InviteUsersToRoomActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/invite/InviteUsersToRoomActivity.kt
@@ -46,7 +46,6 @@ import im.vector.app.features.userdirectory.UserListSharedActionViewModel
 import im.vector.app.features.userdirectory.UserListViewModel
 import im.vector.app.features.userdirectory.UserListViewState
 import kotlinx.parcelize.Parcelize
-
 import org.matrix.android.sdk.api.failure.Failure
 import java.net.HttpURLConnection
 import javax.inject.Inject
diff --git a/vector/src/main/java/im/vector/app/features/login/LoginCaptchaFragment.kt b/vector/src/main/java/im/vector/app/features/login/LoginCaptchaFragment.kt
index b58fb48fae..9f452a5da4 100644
--- a/vector/src/main/java/im/vector/app/features/login/LoginCaptchaFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/login/LoginCaptchaFragment.kt
@@ -37,7 +37,6 @@ import im.vector.app.R
 import im.vector.app.core.utils.AssetReader
 import im.vector.app.databinding.FragmentLoginCaptchaBinding
 import kotlinx.parcelize.Parcelize
-
 import org.matrix.android.sdk.internal.di.MoshiProvider
 import timber.log.Timber
 import java.net.URLDecoder
diff --git a/vector/src/main/java/im/vector/app/features/login/LoginGenericTextInputFormFragment.kt b/vector/src/main/java/im/vector/app/features/login/LoginGenericTextInputFormFragment.kt
index b329f40723..925a5c05ab 100644
--- a/vector/src/main/java/im/vector/app/features/login/LoginGenericTextInputFormFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/login/LoginGenericTextInputFormFragment.kt
@@ -35,7 +35,6 @@ import im.vector.app.core.extensions.isEmail
 import im.vector.app.core.extensions.setTextOrHide
 import im.vector.app.databinding.FragmentLoginGenericTextInputFormBinding
 import kotlinx.parcelize.Parcelize
-
 import org.matrix.android.sdk.api.auth.registration.RegisterThreePid
 import org.matrix.android.sdk.api.failure.Failure
 import org.matrix.android.sdk.api.failure.is401
diff --git a/vector/src/main/java/im/vector/app/features/login/LoginWaitForEmailFragment.kt b/vector/src/main/java/im/vector/app/features/login/LoginWaitForEmailFragment.kt
index 282f1a82e2..cfc627fbfd 100644
--- a/vector/src/main/java/im/vector/app/features/login/LoginWaitForEmailFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/login/LoginWaitForEmailFragment.kt
@@ -25,7 +25,6 @@ import com.airbnb.mvrx.args
 import im.vector.app.R
 import im.vector.app.databinding.FragmentLoginWaitForEmailBinding
 import kotlinx.parcelize.Parcelize
-
 import org.matrix.android.sdk.api.failure.is401
 import javax.inject.Inject
 
diff --git a/vector/src/main/java/im/vector/app/features/login/terms/LoginTermsFragment.kt b/vector/src/main/java/im/vector/app/features/login/terms/LoginTermsFragment.kt
index f4df07aeef..3227bb7371 100755
--- a/vector/src/main/java/im/vector/app/features/login/terms/LoginTermsFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/login/terms/LoginTermsFragment.kt
@@ -31,7 +31,6 @@ import im.vector.app.features.login.AbstractLoginFragment
 import im.vector.app.features.login.LoginAction
 import im.vector.app.features.login.LoginViewState
 import kotlinx.parcelize.Parcelize
-
 import org.matrix.android.sdk.internal.auth.registration.LocalizedFlowDataLoginTerms
 import javax.inject.Inject
 
diff --git a/vector/src/main/java/im/vector/app/features/matrixto/MatrixToBottomSheet.kt b/vector/src/main/java/im/vector/app/features/matrixto/MatrixToBottomSheet.kt
index 8289d15e62..ca15efe25a 100644
--- a/vector/src/main/java/im/vector/app/features/matrixto/MatrixToBottomSheet.kt
+++ b/vector/src/main/java/im/vector/app/features/matrixto/MatrixToBottomSheet.kt
@@ -36,7 +36,6 @@ import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
 import im.vector.app.databinding.BottomSheetMatrixToCardBinding
 import im.vector.app.features.home.AvatarRenderer
 import kotlinx.parcelize.Parcelize
-
 import javax.inject.Inject
 
 class MatrixToBottomSheet :
diff --git a/vector/src/main/java/im/vector/app/features/reactions/widget/ReactionButton.kt b/vector/src/main/java/im/vector/app/features/reactions/widget/ReactionButton.kt
index 331c3e81da..ccd1288577 100644
--- a/vector/src/main/java/im/vector/app/features/reactions/widget/ReactionButton.kt
+++ b/vector/src/main/java/im/vector/app/features/reactions/widget/ReactionButton.kt
@@ -30,7 +30,6 @@ import android.view.animation.DecelerateInterpolator
 import android.view.animation.OvershootInterpolator
 import android.widget.FrameLayout
 import android.widget.ImageView
-import android.widget.TextView
 import androidx.annotation.ColorInt
 import androidx.annotation.ColorRes
 import androidx.core.content.ContextCompat
@@ -39,6 +38,7 @@ import im.vector.app.EmojiCompatWrapper
 import im.vector.app.R
 import im.vector.app.core.di.HasScreenInjector
 import im.vector.app.core.utils.TextUtils
+import im.vector.app.databinding.ReactionButtonBinding
 import javax.inject.Inject
 
 /**
@@ -64,13 +64,8 @@ class ReactionButton @JvmOverloads constructor(context: Context,
 
     @Inject lateinit var emojiCompatWrapper: EmojiCompatWrapper
 
-    private var emojiView: TextView? = null
-    private var countTextView: TextView? = null
+    private lateinit var views: ReactionButtonBinding
 
-    private var reactionSelector: View? = null
-
-    private var dotsView: DotsView
-    private var circleView: CircleView
     var reactedListener: ReactedListener? = null
     private var dotPrimaryColor: Int = 0
     private var dotSecondaryColor: Int = 0
@@ -80,7 +75,7 @@ class ReactionButton @JvmOverloads constructor(context: Context,
     var reactionCount = 11
         set(value) {
             field = value
-            countTextView?.text = TextUtils.formatCountToShortDecimal(value)
+            views.reactionCount.text = TextUtils.formatCountToShortDecimal(value)
         }
 
     var reactionString = "😀"
@@ -88,7 +83,7 @@ class ReactionButton @JvmOverloads constructor(context: Context,
             field = value
             // maybe cache this for performances?
             val emojiSpanned = emojiCompatWrapper.safeEmojiSpanify(value)
-            emojiView?.text = emojiSpanned
+            views.reactionText.text = emojiSpanned
         }
 
     private var animationScaleFactor: Float = 0.toFloat()
@@ -102,13 +97,8 @@ class ReactionButton @JvmOverloads constructor(context: Context,
 
     init {
         LayoutInflater.from(getContext()).inflate(R.layout.reaction_button, this, true)
-        emojiView = findViewById(R.id.reactionText)
-        dotsView = findViewById(R.id.dots)
-        circleView = findViewById(R.id.circle)
-        reactionSelector = findViewById(R.id.reactionSelector)
-        countTextView = findViewById(R.id.reactionCount)
-
-        countTextView?.text = TextUtils.formatCountToShortDecimal(reactionCount)
+        views = ReactionButtonBinding.bind(this)
+        views.reactionCount.text = TextUtils.formatCountToShortDecimal(reactionCount)
 
 //        emojiView?.typeface = this.emojiTypeFace ?: Typeface.DEFAULT
         context.withStyledAttributes(attrs, R.styleable.ReactionButton, defStyleAttr) {
@@ -118,20 +108,20 @@ class ReactionButton @JvmOverloads constructor(context: Context,
             circleStartColor = getColor(R.styleable.ReactionButton_circle_start_color, 0)
 
             if (circleStartColor != 0) {
-                circleView.startColor = circleStartColor
+                views.circle.startColor = circleStartColor
             }
 
             circleEndColor = getColor(R.styleable.ReactionButton_circle_end_color, 0)
 
             if (circleEndColor != 0) {
-                circleView.endColor = circleEndColor
+                views.circle.endColor = circleEndColor
             }
 
             dotPrimaryColor = getColor(R.styleable.ReactionButton_dots_primary_color, 0)
             dotSecondaryColor = getColor(R.styleable.ReactionButton_dots_secondary_color, 0)
 
             if (dotPrimaryColor != 0 && dotSecondaryColor != 0) {
-                dotsView.setColors(dotPrimaryColor, dotSecondaryColor)
+                views.dots.setColors(dotPrimaryColor, dotSecondaryColor)
             }
 
             getString(R.styleable.ReactionButton_emoji)?.let {
@@ -168,7 +158,7 @@ class ReactionButton @JvmOverloads constructor(context: Context,
         isChecked = !isChecked
 
         // icon!!.setImageDrawable(if (isChecked) likeDrawable else unLikeDrawable)
-        reactionSelector?.background = if (isChecked) onDrawable else offDrawable
+        views.reactionSelector.background = if (isChecked) onDrawable else offDrawable
 
         if (isChecked) {
             reactedListener?.onReacted(this)
@@ -181,36 +171,36 @@ class ReactionButton @JvmOverloads constructor(context: Context,
         }
 
         if (isChecked) {
-            emojiView!!.animate().cancel()
-            emojiView!!.scaleX = 0f
-            emojiView!!.scaleY = 0f
+            views.reactionText.animate().cancel()
+            views.reactionText.scaleX = 0f
+            views.reactionText.scaleY = 0f
 
-            circleView.innerCircleRadiusProgress = 0f
-            circleView.outerCircleRadiusProgress = 0f
-            dotsView.currentProgress = 0f
+            views.circle.innerCircleRadiusProgress = 0f
+            views.circle.outerCircleRadiusProgress = 0f
+            views.dots.currentProgress = 0f
 
             animatorSet = AnimatorSet()
 
-            val outerCircleAnimator = ObjectAnimator.ofFloat(circleView, CircleView.OUTER_CIRCLE_RADIUS_PROGRESS, 0.1f, 1f)
+            val outerCircleAnimator = ObjectAnimator.ofFloat(views.circle, CircleView.OUTER_CIRCLE_RADIUS_PROGRESS, 0.1f, 1f)
             outerCircleAnimator.duration = 250
             outerCircleAnimator.interpolator = DECCELERATE_INTERPOLATOR
 
-            val innerCircleAnimator = ObjectAnimator.ofFloat(circleView, CircleView.INNER_CIRCLE_RADIUS_PROGRESS, 0.1f, 1f)
+            val innerCircleAnimator = ObjectAnimator.ofFloat(views.circle, CircleView.INNER_CIRCLE_RADIUS_PROGRESS, 0.1f, 1f)
             innerCircleAnimator.duration = 200
             innerCircleAnimator.startDelay = 200
             innerCircleAnimator.interpolator = DECCELERATE_INTERPOLATOR
 
-            val starScaleYAnimator = ObjectAnimator.ofFloat(emojiView, ImageView.SCALE_Y, 0.2f, 1f)
+            val starScaleYAnimator = ObjectAnimator.ofFloat(views.reactionText, ImageView.SCALE_Y, 0.2f, 1f)
             starScaleYAnimator.duration = 350
             starScaleYAnimator.startDelay = 250
             starScaleYAnimator.interpolator = OVERSHOOT_INTERPOLATOR
 
-            val starScaleXAnimator = ObjectAnimator.ofFloat(emojiView, ImageView.SCALE_X, 0.2f, 1f)
+            val starScaleXAnimator = ObjectAnimator.ofFloat(views.reactionText, ImageView.SCALE_X, 0.2f, 1f)
             starScaleXAnimator.duration = 350
             starScaleXAnimator.startDelay = 250
             starScaleXAnimator.interpolator = OVERSHOOT_INTERPOLATOR
 
-            val dotsAnimator = ObjectAnimator.ofFloat(dotsView, DotsView.DOTS_PROGRESS, 0f, 1f) // .ofFloat<DotsView>(dotsView, DotsView.DOTS_PROGRESS, 0, 1f)
+            val dotsAnimator = ObjectAnimator.ofFloat(views.dots, DotsView.DOTS_PROGRESS, 0f, 1f) // .ofFloat<DotsView>(views.dots, DotsView.DOTS_PROGRESS, 0, 1f)
             dotsAnimator.duration = 900
             dotsAnimator.startDelay = 50
             dotsAnimator.interpolator = ACCELERATE_DECELERATE_INTERPOLATOR
@@ -225,11 +215,11 @@ class ReactionButton @JvmOverloads constructor(context: Context,
 
             animatorSet!!.addListener(object : AnimatorListenerAdapter() {
                 override fun onAnimationCancel(animation: Animator) {
-                    circleView.innerCircleRadiusProgress = 0f
-                    circleView.outerCircleRadiusProgress = 0f
-                    dotsView.currentProgress = 0f
-                    emojiView!!.scaleX = 1f
-                    emojiView!!.scaleY = 1f
+                    views.circle.innerCircleRadiusProgress = 0f
+                    views.circle.outerCircleRadiusProgress = 0f
+                    views.dots.currentProgress = 0f
+                    views.reactionText.scaleX = 1f
+                    views.reactionText.scaleY = 1f
                 }
 
                 override fun onAnimationEnd(animation: Animator) {
@@ -274,8 +264,8 @@ class ReactionButton @JvmOverloads constructor(context: Context,
 //            }
 //
 //            MotionEvent.ACTION_UP     -> {
-//                emojiView!!.animate().scaleX(0.7f).scaleY(0.7f).setDuration(150).interpolator = DECCELERATE_INTERPOLATOR
-//                emojiView!!.animate().scaleX(1f).scaleY(1f).interpolator = DECCELERATE_INTERPOLATOR
+//                views.reactionText!!.animate().scaleX(0.7f).scaleY(0.7f).setDuration(150).interpolator = DECCELERATE_INTERPOLATOR
+//                views.reactionText!!.animate().scaleX(1f).scaleY(1f).interpolator = DECCELERATE_INTERPOLATOR
 //                if (isPressed) {
 //                    performClick()
 //                    isPressed = false
@@ -299,26 +289,26 @@ class ReactionButton @JvmOverloads constructor(context: Context,
      * @param secondaryColor
      */
     fun setExplodingDotColorsRes(@ColorRes primaryColor: Int, @ColorRes secondaryColor: Int) {
-        dotsView.setColors(ContextCompat.getColor(context, primaryColor), ContextCompat.getColor(context, secondaryColor))
+        views.dots.setColors(ContextCompat.getColor(context, primaryColor), ContextCompat.getColor(context, secondaryColor))
     }
 
     fun setExplodingDotColorsInt(@ColorInt primaryColor: Int, @ColorInt secondaryColor: Int) {
-        dotsView.setColors(primaryColor, secondaryColor)
+        views.dots.setColors(primaryColor, secondaryColor)
     }
 
     fun setCircleStartColorRes(@ColorRes circleStartColor: Int) {
         this.circleStartColor = ContextCompat.getColor(context, circleStartColor)
-        circleView.startColor = this.circleStartColor
+        views.circle.startColor = this.circleStartColor
     }
 
     fun setCircleStartColorInt(@ColorInt circleStartColor: Int) {
         this.circleStartColor = circleStartColor
-        circleView.startColor = circleStartColor
+        views.circle.startColor = circleStartColor
     }
 
     fun setCircleEndColorRes(@ColorRes circleEndColor: Int) {
         this.circleEndColor = ContextCompat.getColor(context, circleEndColor)
-        circleView.endColor = this.circleEndColor
+        views.circle.endColor = this.circleEndColor
     }
 
     /**
@@ -330,10 +320,10 @@ class ReactionButton @JvmOverloads constructor(context: Context,
     fun setChecked(status: Boolean?) {
         if (status!!) {
             isChecked = true
-            reactionSelector?.background = onDrawable
+            views.reactionSelector.background = onDrawable
         } else {
             isChecked = false
-            reactionSelector?.background = offDrawable
+            views.reactionSelector.background = offDrawable
         }
     }
 
diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt
index a70aca3cc8..eefe9fbdb5 100644
--- a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt
@@ -54,7 +54,6 @@ import im.vector.app.features.home.room.detail.RoomDetailPendingActionStore
 import im.vector.app.features.roommemberprofile.devices.DeviceListBottomSheet
 import im.vector.app.features.roommemberprofile.powerlevel.EditPowerLevelDialogs
 import kotlinx.parcelize.Parcelize
-
 import org.matrix.android.sdk.api.session.room.powerlevels.Role
 import org.matrix.android.sdk.api.util.MatrixItem
 import javax.inject.Inject
diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt
index a5feabe2a4..f2c729ead6 100644
--- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt
@@ -53,7 +53,6 @@ import im.vector.app.features.home.room.list.actions.RoomListQuickActionsSharedA
 import im.vector.app.features.home.room.list.actions.RoomListQuickActionsSharedActionViewModel
 import im.vector.app.features.media.BigImageViewerActivity
 import kotlinx.parcelize.Parcelize
-
 import org.matrix.android.sdk.api.session.room.notification.RoomNotificationState
 import org.matrix.android.sdk.api.util.MatrixItem
 import org.matrix.android.sdk.api.util.toMatrixItem
diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/alias/detail/RoomAliasBottomSheet.kt b/vector/src/main/java/im/vector/app/features/roomprofile/alias/detail/RoomAliasBottomSheet.kt
index 12782e7b60..e65efd4936 100644
--- a/vector/src/main/java/im/vector/app/features/roomprofile/alias/detail/RoomAliasBottomSheet.kt
+++ b/vector/src/main/java/im/vector/app/features/roomprofile/alias/detail/RoomAliasBottomSheet.kt
@@ -30,7 +30,6 @@ import im.vector.app.core.extensions.configureWith
 import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
 import im.vector.app.databinding.BottomSheetGenericListBinding
 import kotlinx.parcelize.Parcelize
-
 import javax.inject.Inject
 
 @Parcelize
diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPreferencesFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPreferencesFragment.kt
index 841a239701..102d3c0c70 100644
--- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPreferencesFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPreferencesFragment.kt
@@ -21,11 +21,13 @@ import android.content.Context
 import android.widget.CheckedTextView
 import android.widget.LinearLayout
 import androidx.appcompat.app.AlertDialog
+import androidx.core.view.children
 import androidx.preference.Preference
 import im.vector.app.R
 import im.vector.app.core.extensions.restart
 import im.vector.app.core.preference.VectorListPreference
 import im.vector.app.core.preference.VectorPreference
+import im.vector.app.databinding.DialogSelectTextSizeBinding
 import im.vector.app.features.configuration.VectorConfiguration
 import im.vector.app.features.themes.ThemeUtils
 import javax.inject.Inject
@@ -142,8 +144,8 @@ class VectorSettingsPreferencesFragment @Inject constructor(
     }
 
     private fun displayTextSizeSelection(activity: Activity) {
-        val inflater = activity.layoutInflater
-        val layout = inflater.inflate(R.layout.dialog_select_text_size, null)
+        val layout = layoutInflater.inflate(R.layout.dialog_select_text_size, null)
+        val views = DialogSelectTextSizeBinding.bind(layout)
 
         val dialog = AlertDialog.Builder(activity)
                 .setTitle(R.string.font_size)
@@ -152,25 +154,20 @@ class VectorSettingsPreferencesFragment @Inject constructor(
                 .setNegativeButton(R.string.cancel, null)
                 .show()
 
-        val linearLayout = layout.findViewById<LinearLayout>(R.id.text_selection_group_view)
-
-        val childCount = linearLayout.childCount
-
         val index = FontScale.getFontScaleValue(activity).index
 
-        for (i in 0 until childCount) {
-            val v = linearLayout.getChildAt(i)
+        views.textSelectionGroupView.children
+                .filterIsInstance(CheckedTextView::class.java)
+                .forEachIndexed { i, v ->
+                    v.isChecked = i == index
 
-            if (v is CheckedTextView) {
-                v.isChecked = i == index
-
-                v.setOnClickListener {
-                    dialog.dismiss()
-                    FontScale.updateFontScale(activity, i)
-                    vectorConfiguration.applyToApplicationContext()
-                    activity.restart()
+                    v.setOnClickListener {
+                        dialog.dismiss()
+                        FontScale.updateFontScale(activity, i)
+                        vectorConfiguration.applyToApplicationContext()
+                        activity.restart()
+                    }
                 }
-            }
-        }
     }
 }
+
diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/DeviceVerificationInfoBottomSheet.kt b/vector/src/main/java/im/vector/app/features/settings/devices/DeviceVerificationInfoBottomSheet.kt
index 7b01f2b0aa..2334f0867e 100644
--- a/vector/src/main/java/im/vector/app/features/settings/devices/DeviceVerificationInfoBottomSheet.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/devices/DeviceVerificationInfoBottomSheet.kt
@@ -31,7 +31,6 @@ import im.vector.app.core.extensions.configureWith
 import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment
 import im.vector.app.databinding.BottomSheetGenericListWithTitleBinding
 import kotlinx.parcelize.Parcelize
-
 import javax.inject.Inject
 
 @Parcelize
diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/VectorSettingsDevicesFragment.kt b/vector/src/main/java/im/vector/app/features/settings/devices/VectorSettingsDevicesFragment.kt
index c35cdcffc1..acc8e7eb83 100644
--- a/vector/src/main/java/im/vector/app/features/settings/devices/VectorSettingsDevicesFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/devices/VectorSettingsDevicesFragment.kt
@@ -35,6 +35,7 @@ import im.vector.app.core.extensions.cleanup
 import im.vector.app.core.extensions.configureWith
 import im.vector.app.core.extensions.exhaustive
 import im.vector.app.core.platform.VectorBaseFragment
+import im.vector.app.databinding.DialogBaseEditTextBinding
 import im.vector.app.databinding.FragmentGenericRecyclerBinding
 import im.vector.app.features.crypto.verification.VerificationBottomSheet
 
@@ -139,15 +140,14 @@ class VectorSettingsDevicesFragment @Inject constructor(
     private fun displayDeviceRenameDialog(deviceInfo: DeviceInfo) {
         val inflater = requireActivity().layoutInflater
         val layout = inflater.inflate(R.layout.dialog_base_edit_text, null)
-
-        val input = layout.findViewById<EditText>(R.id.editText)
-        input.setText(deviceInfo.displayName)
+        val views = DialogBaseEditTextBinding.bind(layout)
+        views.editText.setText(deviceInfo.displayName)
 
         AlertDialog.Builder(requireActivity())
                 .setTitle(R.string.devices_details_device_name)
                 .setView(layout)
                 .setPositiveButton(R.string.ok) { _, _ ->
-                    val newName = input.text.toString()
+                    val newName = views.editText.text.toString()
 
                     viewModel.handle(DevicesAction.Rename(deviceInfo.deviceId!!, newName))
                 }
diff --git a/vector/src/main/java/im/vector/app/features/usercode/UserCodeActivity.kt b/vector/src/main/java/im/vector/app/features/usercode/UserCodeActivity.kt
index 0706fd296b..274c604d40 100644
--- a/vector/src/main/java/im/vector/app/features/usercode/UserCodeActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/usercode/UserCodeActivity.kt
@@ -36,7 +36,6 @@ import im.vector.app.core.utils.onPermissionDeniedSnackbar
 import im.vector.app.databinding.ActivitySimpleBinding
 import im.vector.app.features.matrixto.MatrixToBottomSheet
 import kotlinx.parcelize.Parcelize
-
 import javax.inject.Inject
 import kotlin.reflect.KClass
 
diff --git a/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt b/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt
index fac4b1a238..7335f67a7b 100644
--- a/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt
@@ -47,7 +47,6 @@ import im.vector.app.features.webview.WebViewEventListener
 import im.vector.app.features.widgets.webview.clearAfterWidget
 import im.vector.app.features.widgets.webview.setupForWidget
 import kotlinx.parcelize.Parcelize
-
 import org.matrix.android.sdk.api.session.terms.TermsService
 import timber.log.Timber
 import java.net.URISyntaxException